00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00036 #include <qpOASES/Options.hpp>
00037 
00038 
00039 BEGIN_NAMESPACE_QPOASES
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 Options::Options( )
00051 {
00052         setToDefault( );
00053 }
00054 
00055 
00056 
00057 
00058 
00059 Options::Options( const Options& rhs )
00060 {
00061         copy( rhs );
00062 }
00063 
00064 
00065 
00066 
00067 
00068 Options::~Options( )
00069 {
00070 }
00071 
00072 
00073 
00074 
00075 
00076 Options& Options::operator=( const Options& rhs )
00077 {
00078         if ( this != &rhs )
00079         {
00080                 copy( rhs );
00081         }
00082 
00083         return *this;
00084 }
00085 
00086 
00087 
00088 
00089 
00090 
00091 returnValue Options::setToDefault( )
00092 {
00093         printLevel = PL_MEDIUM;
00094         #ifdef __DEBUG__
00095         printLevel = PL_HIGH;
00096         #endif
00097         #ifdef __XPCTARGET__
00098         printLevel = PL_NONE;
00099         #endif
00100 
00101         enableRamping                 =  BT_TRUE;
00102         enableFarBounds               =  BT_TRUE;
00103         enableFlippingBounds          =  BT_TRUE;
00104         enableRegularisation          =  BT_FALSE;
00105         enableFullLITests             =  BT_FALSE;
00106         enableNZCTests                =  BT_TRUE;
00107         enableDriftCorrection         =  1;
00108         enableCholeskyRefactorisation =  0;
00109         enableEqualities              =  BT_FALSE;
00110 
00111         terminationTolerance          =  1.0e7 * EPS;
00112         boundTolerance                =  1.0e6 * EPS;
00113         boundRelaxation               =  1.0e4;
00114         epsNum                        = -1.0e3 * EPS;
00115         epsDen                        =  1.0e3 * EPS;
00116         maxPrimalJump                 =  1.0e8;
00117         maxDualJump                   =  1.0e8;
00118 
00119         initialRamping                =  0.5;
00120         finalRamping                  =  1.0;
00121         initialFarBounds              =  1.0e4;
00122         growFarBounds                 =  1.0e3;
00123         initialStatusBounds           =  ST_LOWER;
00124         epsFlipping                   =  1.0e4 * EPS;
00125         numRegularisationSteps        =  0;
00126         epsRegularisation             =  5.0e3 * EPS;
00127         numRefinementSteps            =  1;
00128         epsIterRef                    =  1.0e2 * EPS;
00129         epsLITests                    =  1.0e5 * EPS;
00130         epsNZCTests                   =  1.0e5 * EPS;
00131 
00132         return SUCCESSFUL_RETURN;
00133 }
00134 
00135 
00136 
00137 
00138 
00139 returnValue Options::setToReliable( )
00140 {
00141         setToDefault( );
00142 
00143         enableFullLITests             =  BT_TRUE;
00144         enableCholeskyRefactorisation =  1;
00145 
00146         numRefinementSteps            =  2;
00147 
00148         return SUCCESSFUL_RETURN;
00149 }
00150 
00151 
00152 
00153 
00154 
00155 returnValue Options::setToFast( )
00156 {
00157         setToDefault( );
00158 
00159         enableRamping                 =  BT_FALSE;
00160         enableFarBounds               =  BT_TRUE;
00161         enableFlippingBounds          =  BT_FALSE;
00162         enableRegularisation          =  BT_TRUE;
00163         enableNZCTests                =  BT_FALSE;
00164         enableDriftCorrection         =  0;
00165         enableEqualities              =  BT_TRUE;
00166 
00167         terminationTolerance          =  1.0e9 * EPS;
00168         
00169         initialStatusBounds           =  ST_INACTIVE;
00170         numRegularisationSteps        =  2;
00171         numRefinementSteps            =  0;
00172 
00173         return SUCCESSFUL_RETURN;
00174 }
00175 
00176 
00177 
00178 
00179 
00180 
00181 returnValue Options::ensureConsistency( )
00182 {
00183         
00184         if( enableFlippingBounds == BT_TRUE )
00185                 enableFarBounds = BT_TRUE;
00186         
00187         if( enableDriftCorrection < 0 )
00188                 enableDriftCorrection = 0;
00189         
00190         if( enableCholeskyRefactorisation < 0 )
00191                 enableCholeskyRefactorisation = 0;
00192 
00193 
00194         if ( terminationTolerance <= 0.0 )
00195                 terminationTolerance = EPS;
00196 
00197         if ( epsIterRef <= 0.0 )
00198                 epsIterRef = EPS;
00199 
00200         if ( epsRegularisation <= 0.0 )
00201                 epsRegularisation = EPS;
00202 
00203         if ( boundTolerance <= 0.0 )
00204                 boundTolerance = EPS;
00205 
00206         if ( boundRelaxation <= 0.0 )
00207                 boundRelaxation = EPS;
00208         
00209         if ( maxPrimalJump <= 0.0 )
00210                 maxPrimalJump = EPS;
00211 
00212         if ( maxDualJump <= 0.0 )
00213                 maxDualJump = EPS;
00214 
00215 
00216         if ( initialRamping < 0.0 )
00217                 initialRamping = 0.0;
00218 
00219         if ( finalRamping < 0.0 )
00220                 finalRamping = 0.0;
00221 
00222         if ( initialFarBounds <= boundRelaxation )
00223                 initialFarBounds = boundRelaxation+EPS;
00224         
00225         if ( growFarBounds < 1.1 )
00226                 growFarBounds = 1.1;
00227 
00228         if ( epsFlipping <= 0.0 )
00229                 epsFlipping = EPS;
00230 
00231         if ( numRegularisationSteps < 0 )
00232                 numRegularisationSteps = 0;
00233 
00234         if ( epsRegularisation < 0.0 )
00235                 epsRegularisation = EPS;
00236 
00237         if ( numRefinementSteps < 0 )
00238                 numRefinementSteps = 0;
00239 
00240         if ( epsIterRef < 0.0 )
00241                 epsIterRef = EPS;
00242 
00243         if ( epsLITests < 0.0 )
00244                 epsLITests = EPS;
00245 
00246         if ( epsNZCTests < 0.0 )
00247                 epsNZCTests = EPS;
00248 
00249         return SUCCESSFUL_RETURN;
00250 }
00251 
00252 
00253 
00254 
00255 
00256 returnValue Options::print( ) const
00257 {
00258         #ifndef __XPCTARGET__
00259         #ifndef __DSPACE__
00260         char myPrintfString[160];
00261         char info[20];
00262 
00263         myPrintf( "\n###################   qpOASES  --  QP OPTIONS   ##################\n" );
00264         myPrintf( "\n" );
00265 
00266         convertPrintLevelToString( printLevel,info );
00267         snprintf( myPrintfString,80,"printLevel                     =  %s\n",info );
00268         myPrintf( myPrintfString );
00269 
00270         myPrintf( "\n" );
00271 
00272         convertBooleanTypeToString( enableRamping,info );
00273         snprintf( myPrintfString,80,"enableRamping                  =  %s\n",info );
00274         myPrintf( myPrintfString );
00275 
00276         convertBooleanTypeToString( enableFarBounds,info );
00277         snprintf( myPrintfString,80,"enableFarBounds                =  %s\n",info );
00278         myPrintf( myPrintfString );
00279 
00280         convertBooleanTypeToString( enableFlippingBounds,info );
00281         snprintf( myPrintfString,80,"enableFlippingBounds           =  %s\n",info );
00282         myPrintf( myPrintfString );
00283 
00284         convertBooleanTypeToString( enableRegularisation,info );
00285         snprintf( myPrintfString,80,"enableRegularisation           =  %s\n",info );
00286         myPrintf( myPrintfString );
00287 
00288         convertBooleanTypeToString( enableFullLITests,info );
00289         snprintf( myPrintfString,80,"enableFullLITests              =  %s\n",info );
00290         myPrintf( myPrintfString );
00291         
00292         convertBooleanTypeToString( enableNZCTests,info );
00293         snprintf( myPrintfString,80,"enableNZCTests                 =  %s\n",info );
00294         myPrintf( myPrintfString );
00295 
00296         snprintf( myPrintfString,80,"enableDriftCorrection          =  %d\n",enableDriftCorrection );
00297         myPrintf( myPrintfString );
00298         
00299         snprintf( myPrintfString,80,"enableCholeskyRefactorisation  =  %d\n",enableCholeskyRefactorisation );
00300         myPrintf( myPrintfString );
00301 
00302         convertBooleanTypeToString( enableEqualities,info );
00303         snprintf( myPrintfString,80,"enableEqualities               =  %s\n",info );
00304         myPrintf( myPrintfString );
00305 
00306         myPrintf( "\n" );
00307 
00308         snprintf( myPrintfString,80,"terminationTolerance           =  %e\n",terminationTolerance );
00309         myPrintf( myPrintfString );
00310 
00311         snprintf( myPrintfString,80,"boundTolerance                 =  %e\n",boundTolerance );
00312         myPrintf( myPrintfString );
00313 
00314         snprintf( myPrintfString,80,"boundRelaxation                =  %e\n",boundRelaxation );
00315         myPrintf( myPrintfString );
00316 
00317         snprintf( myPrintfString,80,"epsNum                         =  %e\n",epsNum );
00318         myPrintf( myPrintfString );
00319 
00320         snprintf( myPrintfString,80,"epsDen                         =  %e\n",epsDen );
00321         myPrintf( myPrintfString );
00322 
00323         snprintf( myPrintfString,80,"maxPrimalJump                  =  %e\n",maxPrimalJump );
00324         myPrintf( myPrintfString );
00325 
00326         snprintf( myPrintfString,80,"maxDualJump                    =  %e\n",maxDualJump );
00327         myPrintf( myPrintfString );
00328 
00329         myPrintf( "\n" );
00330 
00331         snprintf( myPrintfString,80,"initialRamping                 =  %e\n",initialRamping );
00332         myPrintf( myPrintfString );
00333 
00334         snprintf( myPrintfString,80,"finalRamping                   =  %e\n",finalRamping );
00335         myPrintf( myPrintfString );
00336 
00337         snprintf( myPrintfString,80,"initialFarBounds               =  %e\n",initialFarBounds );
00338         myPrintf( myPrintfString );
00339 
00340         snprintf( myPrintfString,80,"growFarBounds                  =  %e\n",growFarBounds );
00341         myPrintf( myPrintfString );
00342 
00343         convertSubjectToStatusToString( initialStatusBounds,info );
00344         snprintf( myPrintfString,80,"initialStatusBounds            =  %s\n",info );
00345         myPrintf( myPrintfString );
00346 
00347         snprintf( myPrintfString,80,"epsFlipping                    =  %e\n",epsFlipping );
00348         myPrintf( myPrintfString );
00349 
00350         snprintf( myPrintfString,80,"numRegularisationSteps         =  %d\n",numRegularisationSteps );
00351         myPrintf( myPrintfString );
00352 
00353         snprintf( myPrintfString,80,"epsRegularisation              =  %e\n",epsRegularisation );
00354         myPrintf( myPrintfString );
00355 
00356         snprintf( myPrintfString,80,"numRefinementSteps             =  %d\n",numRefinementSteps );
00357         myPrintf( myPrintfString );
00358 
00359         snprintf( myPrintfString,80,"epsIterRef                     =  %e\n",epsIterRef );
00360         myPrintf( myPrintfString );
00361         
00362         snprintf( myPrintfString,80,"epsLITests                     =  %e\n",epsLITests );
00363         myPrintf( myPrintfString );
00364         
00365         snprintf( myPrintfString,80,"epsNZCTests                    =  %e\n",epsNZCTests );
00366         myPrintf( myPrintfString );
00367 
00368         myPrintf( "\n\n" );
00369         #endif
00370         #endif
00371 
00372         return SUCCESSFUL_RETURN;
00373 }
00374 
00375 
00376 
00377 
00378 
00379 
00380 
00381 
00382 
00383 
00384 returnValue Options::copy(      const Options& rhs
00385                                                         )
00386 {
00387         printLevel             = rhs.printLevel;
00388 
00389         enableRamping                 =  rhs.enableRamping;
00390         enableFarBounds               =  rhs.enableFarBounds;
00391         enableFlippingBounds          =  rhs.enableFlippingBounds;
00392         enableRegularisation          =  rhs.enableRegularisation;
00393         enableFullLITests             =  rhs.enableFullLITests;
00394         enableNZCTests                =  rhs.enableNZCTests;
00395         enableDriftCorrection         =  rhs.enableDriftCorrection;
00396         enableCholeskyRefactorisation =  rhs.enableCholeskyRefactorisation;
00397         enableEqualities              =  rhs.enableEqualities;
00398 
00399         terminationTolerance          =  rhs.terminationTolerance;
00400         boundTolerance                =  rhs.boundTolerance;
00401         boundRelaxation               =  rhs.boundRelaxation;
00402         epsNum                        =  rhs.epsNum;
00403         epsDen                        =  rhs.epsDen;
00404         maxPrimalJump                 =  rhs.maxPrimalJump;
00405         maxDualJump                   =  rhs.maxDualJump;
00406 
00407         initialRamping                =  rhs.initialRamping;
00408         finalRamping                  =  rhs.finalRamping;
00409         initialFarBounds              =  rhs.initialFarBounds;
00410         growFarBounds                 =  rhs.growFarBounds;
00411         initialStatusBounds           =  rhs.initialStatusBounds;
00412         epsFlipping                   =  rhs.epsFlipping;
00413         numRegularisationSteps        =  rhs.numRegularisationSteps;
00414         epsRegularisation             =  rhs.epsRegularisation;
00415         numRefinementSteps            =  rhs.numRefinementSteps;
00416         epsIterRef                    =  rhs.epsIterRef;
00417         epsLITests                    =  rhs.epsLITests;
00418         epsNZCTests                   =  rhs.epsNZCTests;
00419 
00420         return SUCCESSFUL_RETURN;
00421 }
00422 
00423 
00424 END_NAMESPACE_QPOASES
00425 
00426 
00427 
00428 
00429