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