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