00001
00017 #include "OSConfig.h"
00018 #include "OSCoinSolver.h"
00019 #include "OSIpoptSolver.h"
00020 #include "OSResult.h"
00021 #include "OSiLReader.h"
00022 #include "OSiLWriter.h"
00023 #include "OSrLReader.h"
00024 #include "OSrLWriter.h"
00025 #include "OSInstance.h"
00026 #include "OSOption.h"
00027 #include "OSoLWriter.h"
00028 #include "OSFileUtil.h"
00029 #include "OSDefaultSolver.h"
00030 #include "OShL.h"
00031 #include "OSErrorClass.h"
00032 #include "OSmps2osil.h"
00033 #include "OSBase64.h"
00034 #include "OSErrorClass.h"
00035 #include "OSMathUtil.h"
00036 #include "CoinError.hpp"
00037 #include "CoinHelperFunctions.hpp"
00038 #include<iostream>
00039
00040
00041
00042 #ifdef COIN_HAS_ASL
00043 #include "OSnl2osil.h"
00044 #endif
00045
00046 #ifdef COIN_HAS_Bonmin
00047 #include "OSBonminSolver.h"
00048 #endif
00049
00050 #ifdef COIN_HAS_COUENNE
00051 #include "OSCouenneSolver.h"
00052 #endif
00053
00054 #ifdef COIN_HAS_IPOPT
00055 #include "OSIpoptSolver.h"
00056 #endif
00057
00058
00059 using std::string;
00060 using std::cout;
00061 using std::endl;
00062
00063 void getOSResult(std::string osrl);
00064
00065
00066 int main( ){
00067 WindowsErrorPopupBlocker();
00068 FileUtil *fileUtil = NULL;
00069 fileUtil = new FileUtil();
00070 cout << "Start Building the Model" << endl;
00071 int i;
00072 try{
00073
00074
00075 const char dirsep = CoinFindDirSeparator();
00076 std::string osil;
00077
00078 std::string dataDir;
00079 std::string osilFileName;
00080
00081 dataDir = dirsep == '/' ? "../data/" : "..\\data\\";
00082
00083 DefaultSolver *solver = NULL;
00084
00085 OSiLReader *osilreader = NULL;
00086 OSInstance *osinstance = NULL;
00087 OSoLWriter *osolwriter = NULL;
00088 OSOption* osoption = NULL;
00089
00090
00091 double* xinitial = NULL;
00092 int numVar;
00093
00094
00095
00096
00097 std::cout << std::endl << std::endl;
00098 std::cout << "CLP EXAMPLE" << std::endl;
00099
00100
00101
00102
00103 std::string mpsFileName;
00104 mpsFileName = dataDir + "parinc.mps";
00105
00106 OSmps2osil *mps2osil = NULL;
00107 mps2osil = new OSmps2osil( mpsFileName);
00108
00109 mps2osil->createOSInstance() ;
00110 osinstance = mps2osil->osinstance;
00111
00112
00113
00114
00115 osoption = new OSOption();
00121
00122 osoption->setAnotherSolverOption("OsiHintTry","","osi","","OsiHintStrength","");
00123 osoption->setAnotherSolverOption("OsiDoReducePrint","false","osi","","OsiHintParam","");
00124 osolwriter = new OSoLWriter();
00125 std::cout << osolwriter-> writeOSoL( osoption);
00126
00127
00128
00129
00130
00131
00132 solver = new CoinSolver();
00133 solver->sSolverName ="clp";
00134
00135
00136
00137
00138 solver->osinstance = osinstance;
00139 solver->osoption = osoption;
00140 solver->solve();
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 delete mps2osil;
00158 mps2osil = NULL;
00159 delete solver;
00160 solver = NULL;
00161 delete osoption;
00162 osoption = NULL;
00163 delete osolwriter;
00164 osolwriter = NULL;
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 std::cout << std::endl << std::endl;
00191 std::cout << "CBC EXAMPLE" << std::endl;
00192
00193
00194
00195
00196 osilFileName = dataDir + "p0033.osil";
00197 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00198 osilreader = new OSiLReader();
00199 osinstance = osilreader->readOSiL( osil);
00200
00201
00202
00203
00204 osoption = new OSOption();
00210
00211 osoption->setAnotherSolverOption("primalS","","cbc","","string","");
00212
00213 osoption->setAnotherSolverOption("primalpivot","steepest","cbc","","string","");
00214
00215 osoption->setAnotherSolverOption("log","10","cbc","","integer","");
00216 osolwriter = new OSoLWriter();
00217 std::cout << osolwriter-> writeOSoL( osoption);
00218
00219
00220
00221
00222
00223 solver = new CoinSolver();
00224 solver->sSolverName ="cbc";
00225
00226
00227
00228
00229 solver->osinstance = osinstance;
00230
00231 solver->solve();
00232
00233
00234
00235
00236
00237 getOSResult( solver->osrl);
00238
00239
00240
00241 delete osilreader;
00242 osilreader = NULL;
00243 delete solver;
00244 solver = NULL;
00245 delete osoption;
00246 osoption = NULL;
00247 delete osolwriter;
00248 osolwriter = NULL;
00249
00250
00251
00252
00253
00254 #if 1
00255 #ifdef COIN_HAS_COUENNE
00256
00257
00258 std::cout << std::endl << std::endl;
00259 std::cout << "COUENNE EXAMPLE" << std::endl;
00260
00261
00262
00263
00264 std::string nlFileName;
00265 nlFileName = dataDir + "bonminEx1.nl";
00266
00267 OSnl2osil *nl2osil = NULL;
00268 nl2osil = new OSnl2osil( nlFileName);
00269
00270 nl2osil->createOSInstance() ;
00271 osinstance = nl2osil->osinstance;
00272
00273
00274
00275
00276 osoption = new OSOption();
00283
00284
00285 osoption->setAnotherSolverOption("node_limit","50000","couenne","bonmin","integer","");
00286
00287 osoption->setAnotherSolverOption("bb_log_level","3","couenne","bonmin","integer","");
00288 osoption->setAnotherSolverOption("nlp_log_level","2","couenne","bonmin","integer","");
00289
00290 osoption->setAnotherSolverOption("num_resolve_at_node","3","couenne","bonmin","integer","");
00291
00292
00293
00294 osoption->setAnotherSolverOption("max_iter","100","couenne","ipopt","integer","");
00295
00296
00297 osoption->setAnotherSolverOption("time_limit","100","couenne","","numeric","");
00298
00299
00300 numVar =osinstance->getVariableNumber();
00301 xinitial = new double[numVar];
00302 for(i = 0; i < numVar; i++){
00303 xinitial[ i] = 0.0;
00304 }
00305 osoption->setInitVarValuesDense(numVar, xinitial);
00306 osolwriter = new OSoLWriter();
00307 std::cout << osolwriter-> writeOSoL( osoption);
00308
00309
00310
00311
00312 solver = new CouenneSolver();
00313
00314
00315
00316
00317
00318
00319 solver->osinstance = osinstance;
00320
00321 solver->osol = "";
00322 solver->buildSolverInstance();
00323 solver->setSolverOptions();
00324 solver->solve() ;
00325
00326
00327
00328
00329
00330
00331
00332 std::cout << "call get osresult" << std::endl;
00333 std::cout << solver->osrl << std::endl;
00334 getOSResult( solver->osrl);
00335
00336
00337 delete[] xinitial;
00338 xinitial = NULL;
00339 delete osilreader;
00340 osilreader = NULL;
00341 delete solver;
00342 solver = NULL;
00343 delete osoption;
00344 osoption = NULL;
00345 delete osolwriter;
00346 osolwriter = NULL;
00347 delete nl2osil;
00348 nl2osil = NULL;
00349
00350
00351
00352
00353 #endif //end of COIN_HAS_COUENNE
00354 #endif //end #if 0/1
00355
00356
00357
00358
00359
00360 std::cout << std::endl << std::endl;
00361 std::cout << "SYMPHONY EXAMPLE" << std::endl;
00362
00363
00364
00365
00366
00367 osilFileName = dataDir + "p0033.osil";
00368 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00369 osilreader = new OSiLReader();
00370 osinstance = osilreader->readOSiL( osil);
00371
00372
00373
00374
00375 osoption = new OSOption();
00382
00383 osoption->setAnotherSolverOption("verbosity","0","symphony","","","");
00384 osolwriter = new OSoLWriter();
00385 std::cout << osolwriter-> writeOSoL( osoption);
00386
00387
00388
00389
00390
00391 solver = new CoinSolver();
00392 solver->sSolverName ="symphony";
00393
00394
00395
00396
00397 solver->osinstance = osinstance;
00398 solver->osoption = osoption;
00399 solver->solve();
00400
00401
00402
00403
00404
00405 getOSResult( solver->osrl);
00406
00407 delete osilreader;
00408 osilreader = NULL;
00409 delete solver;
00410 solver = NULL;
00411 delete osoption;
00412 osoption = NULL;
00413 delete osolwriter;
00414 osolwriter = NULL;
00415
00416
00417
00418
00419
00420
00421
00422
00423 #ifdef COIN_HAS_IPOPT
00424
00425
00426 std::cout << std::endl << std::endl;
00427 std::cout << "IPOPT EXAMPLE" << std::endl;
00428
00429
00430
00431
00432 osilFileName = dataDir + "rosenbrockmod.osil";
00433
00434 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00435
00436
00437
00438
00439 osoption = new OSOption();
00446
00447 osoption->setAnotherSolverOption("max_iter","100","ipopt","","integer","");
00448 osoption->setAnotherSolverOption("output_file","ipopt_out.txt","ipopt","","string","");
00449
00450
00451
00452 numVar = 2;
00453 xinitial = new double[numVar];
00454 for(i = 0; i < numVar; i++){
00455 xinitial[ i] = 1.0;
00456 }
00457 osoption->setInitVarValuesDense(numVar, xinitial);
00458 osolwriter = new OSoLWriter();
00459 std::cout << osolwriter-> writeOSoL( osoption);
00460
00461
00462
00463
00464 solver = new IpoptSolver();
00465
00466
00467
00468
00469
00470 solver->osil = osil;
00471 solver->osoption = osoption;
00472 solver->solve();
00473
00474
00475
00476
00477
00478
00479
00480
00481 getOSResult( solver->osrl);
00482
00483
00484
00485 delete[] xinitial;
00486 xinitial = NULL;
00487 delete solver;
00488 solver = NULL;
00489 delete osoption;
00490 osoption = NULL;
00491 delete osolwriter;
00492 osolwriter = NULL;
00493
00494
00495
00496
00497
00498
00499 #endif //end of COIN_HAS_IPOPT
00500
00501
00502 #ifdef COIN_HAS_BONMIN
00503
00504
00505 std::cout << std::endl << std::endl;
00506 std::cout << "BONMIN EXAMPLE" << std::endl;
00507
00508
00509
00510
00511 osilFileName = dataDir + "wayneQuadratic.osil";
00512 osil = fileUtil->getFileAsString( osilFileName.c_str() );
00513 osilreader = new OSiLReader();
00514 osinstance = osilreader->readOSiL( osil);
00515
00516
00517
00518
00519 osoption = new OSOption();
00526
00527
00528 osoption->setAnotherSolverOption("node_limit","0","bonmin","","integer","");
00529
00530
00531 osolwriter = new OSoLWriter();
00532 std::cout << osolwriter-> writeOSoL( osoption);
00533
00534
00535
00536
00537 solver = new BonminSolver();
00538
00539
00540
00541
00542
00543 solver->osinstance = osinstance;
00544 solver->osoption = osoption;
00545 solver->solve();
00546
00547
00548
00549
00550
00551
00552 std::cout << "call get osresult" << std::endl;
00553 std::cout << solver->osrl << std::endl;
00554 getOSResult( solver->osrl);
00555 std::cout << "finish call get osresult" << std::endl;
00556
00557 delete osilreader;
00558 osilreader = NULL;
00559 delete solver;
00560 solver = NULL;
00561 delete osoption;
00562 osoption = NULL;
00563 delete osolwriter;
00564 osolwriter = NULL;
00565
00566
00567
00568
00569 #endif //end of COIN_HAS_BONMIN
00570
00571 return 0;
00572 delete fileUtil;
00573 fileUtil = NULL;
00574 return 0;
00575
00576 }
00577 catch(const ErrorClass& eclass){
00578 delete fileUtil;
00579 std::cout << eclass.errormsg << std::endl;
00580 return 0;
00581 }
00582 }
00583
00584
00585
00586 void getOSResult(std::string osrl){
00587
00588 std::cout << std::endl << std::endl << std::endl;
00589 OSrLReader *osrlreader = NULL;
00590 OSResult *osresult = NULL;
00591 osrlreader = new OSrLReader();
00592 osresult = osrlreader->readOSrL( osrl);
00593
00594
00595
00596 std::string solStatus;
00597 double optSolValue;
00598
00599 solStatus = osresult->getSolutionStatusType( 0 );
00600
00601 if( solStatus.find("ptimal") != string::npos ){
00602
00603 optSolValue = osresult->getOptimalObjValue( -1, 0);
00604 std::cout << "OPTIMAL SOLUTION VALUE " << optSolValue << std::endl;
00605 }else{
00606 std::cout << "NO OPTIMAL SOLUTION FOUND " << std::endl;
00607 }
00608
00609 int i;
00610 int vecSize;
00611
00612 std::vector<IndexValuePair*> primalValPair;
00613 primalValPair = osresult->getOptimalPrimalVariableValues( 0);
00614 vecSize = primalValPair.size();
00615 for(i = 0; i < vecSize; i++){
00616 if(primalValPair[ i]->value > 0 || primalValPair[ i]->value < 0){
00617 std::cout << "index = " << primalValPair[ i]->idx ;
00618 std::cout << " value = " << primalValPair[ i]->value << std::endl;
00619 }
00620 }
00621
00622
00623
00624 std::cout << osresult->getSolutionStatusDescription( 0)<< std::endl;
00625 delete osrlreader;
00626 }
00627