00001
00018 #include "OSConfig.h"
00019 #include "OSCoinSolver.h"
00020 #include "OSIpoptSolver.h"
00021 #include "OSResult.h"
00022 #include "OSiLReader.h"
00023 #include "OSiLWriter.h"
00024 #include "OSrLReader.h"
00025 #include "OSrLWriter.h"
00026 #include "OSInstance.h"
00027 #include "OSoLWriter.h"
00028 #include "OSFileUtil.h"
00029 #include "OSDefaultSolver.h"
00030
00031
00032 #include "OShL.h"
00033 #include "OSErrorClass.h"
00034 #include "OSmps2osil.h"
00035 #include "OSBase64.h"
00036 #include "OSErrorClass.h"
00037 #include "OSMathUtil.h"
00038
00039 #include "OsiClpSolverInterface.hpp"
00040 #include "OsiCbcSolverInterface.hpp"
00041 #include "CbcModel.hpp"
00042
00043 #include<iostream>
00044 using std::cout;
00045 using std::endl;
00046
00047
00048 int main( ){
00049
00050
00051 FileUtil *fileUtil = NULL;
00052 fileUtil = new FileUtil();
00053 cout << "Start Building the Model" << endl;
00054 try{
00055 OSInstance *osinstance = new OSInstance();
00056
00057
00058 osinstance->setInstanceSource("From Anderson, Sweeney, Williams, and Martin");
00059 osinstance->setInstanceDescription("The Par Inc. Problem");
00060
00061
00062
00063
00064 osinstance->setVariableNumber( 2);
00065
00066
00067 osinstance->addVariable(0, "x0", 0, OSDBL_MAX, 'C');
00068 osinstance->addVariable(1, "x1", 0, OSDBL_MAX, 'C');
00069
00070
00071 osinstance->setObjectiveNumber( 1);
00072
00073 SparseVector *objcoeff = new SparseVector(2);
00074 objcoeff->indexes[ 0] = 0;
00075 objcoeff->values[ 0] = 10;
00076 objcoeff->indexes[ 1] = 1;
00077 objcoeff->values[ 1] = 9;
00078
00079 osinstance->addObjective(-1, "objfunction", "max", 0.0, 1.0, objcoeff);
00080 objcoeff->bDeleteArrays = true;
00081 delete objcoeff;
00082
00083
00084 osinstance->setConstraintNumber( 4);
00085
00086
00087 osinstance->addConstraint(0, "row0", -OSDBL_MAX, 630, 0);
00088 osinstance->addConstraint(1, "row1", -OSDBL_MAX, 600, 0);
00089 osinstance->addConstraint(2, "row2", -OSDBL_MAX, 708, 0);
00090 osinstance->addConstraint(3, "row3", -OSDBL_MAX, 135, 0);
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 double *values = new double[ 8];
00127 int *indexes = new int[ 8];
00128 int *starts = new int[ 5];
00129 values[ 0] = .7;
00130 values[ 1] = 1;
00131 values[ 2] = .5;
00132 values[ 3] = 5./6.;
00133 values[ 4] = 1.0;
00134 values[ 5] = 2./3.;
00135 values[ 6] = .1;
00136 values[ 7] = .25;
00137 indexes[ 0] = 0;
00138 indexes[ 1] = 1;
00139 indexes[ 2] = 0;
00140 indexes[ 3] = 1;
00141 indexes[ 4] = 0;
00142 indexes[ 5] = 1;
00143 indexes[ 6] = 0;
00144 indexes[ 7] = 1;
00145 starts[ 0] = 0;
00146 starts[ 1] = 2;
00147 starts[ 2] = 4;
00148 starts[ 3] = 6;
00149 starts[ 4] = 8;
00150 cout << "Call setLinearConstraintCoefficients" << endl;
00151 osinstance->setLinearConstraintCoefficients(8, false, values, 0, 7,
00152 indexes, 0, 7, starts, 0, 4);
00153 cout << "End Building the Model" << endl;
00154
00155 OSiLWriter *osilwriter;
00156 osilwriter = new OSiLWriter();
00157 cout << osilwriter->writeOSiL( osinstance);
00158
00159 cout << "Done writing the Model" << endl;
00160
00161 CoinSolver *solver = new CoinSolver();
00162 solver->osinstance = osinstance;
00163 solver->sSolverName ="clp";
00164 solver->buildSolverInstance();
00165 solver->solve();
00166 std::cout << solver->osrl << std::endl;
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 delete solver;
00177 osinstance->bObjectivesModified = true;
00178 osinstance->instanceData->objectives->obj[0]->coef[0]->value = 5;
00179 solver = new CoinSolver();
00180 solver->osinstance = osinstance;
00181 solver->sSolverName ="clp";
00182 solver->buildSolverInstance();
00183 solver->solve();
00184 std::cout << solver->osrl << std::endl;
00185 delete solver;
00186
00187 osinstance->bObjectivesModified = true;
00188 osinstance->instanceData->objectives->obj[0]->coef[0]->value = 0;
00189
00190
00191 std::cout << "Variable upper bound = "<< osinstance->instanceData->variables->var[1]->ub << std::endl;
00192
00193 osinstance->bVariablesModified = true;
00194 osinstance->instanceData->variables->var[1]->ub = 500;
00195 std::cout << "Variable upper bound = "<< osinstance->instanceData->variables->var[1]->ub << std::endl;
00196 solver = new CoinSolver();
00197 solver->osinstance = osinstance;
00198 solver->sSolverName ="clp";
00199 solver->buildSolverInstance();
00200 solver->solve();
00201 std::cout << solver->osrl << std::endl;
00202 std::cout << "Obj value = " << solver->osresult->optimization->solution[0]->objectives->values->obj[0]->value << endl;
00203 std::cout << "Obj value = " << solver->osresult->getOptimalObjValue( -1, 0) << endl;
00204 delete osinstance;
00205 osinstance = NULL;
00206 delete osilwriter;
00207 osilwriter = NULL;
00208 delete solver;
00209 solver = NULL;
00210 delete fileUtil;
00211 fileUtil = NULL;
00212 cout << "Done with garbage collection" << endl;
00213 return 0;
00214
00215 }
00216 catch(const ErrorClass& eclass){
00217 delete fileUtil;
00218 std::cout << eclass.errormsg << std::endl;
00219 return 0;
00220 }
00221 }
00222