00001
00035 #include<iostream>
00036 #include <vector>
00037
00038
00039 #include "OSConfig.h"
00040 #include "OSInstance.h"
00041 #include "OSiLWriter.h"
00042 #include "OSParameters.h"
00043 #include "OSnLNode.h"
00044 #include "OSErrorClass.h"
00045
00046
00047
00048
00049
00050
00051
00052
00053 using std::cout;
00054 using std::endl;
00055 int main(){
00056
00057 cout << "Start Building the Model" << endl;
00058 try{
00059 OSInstance *osinstance;
00060 osinstance = new OSInstance();
00061
00062
00063 osinstance->setInstanceSource("An example from the LINDO API samples directory");
00064 osinstance->setInstanceDescription("A good example of a hard nonlinear program");
00065
00066
00067
00068
00069 osinstance->setVariableNumber( 2);
00070
00071
00072 osinstance->addVariable(0, "x0", -100, 100, 'C', OSNAN, "");
00073 osinstance->addVariable(1, "x1", 0, 1, 'B', OSNAN, "");
00074
00075
00076 osinstance->setObjectiveNumber( 1);
00077
00078 SparseVector *objcoeff;
00079 objcoeff = new SparseVector(1);
00080 objcoeff->indexes[ 0] = 1;
00081 objcoeff->values[ 0] = .4;
00082
00083 osinstance->addObjective(-1, "objfunction", "max", 0.0, 1.0, objcoeff);
00084 objcoeff->bDeleteArrays = true;
00085 delete objcoeff;
00086
00087
00088 osinstance->setConstraintNumber( 6);
00089
00090
00091 osinstance->addConstraint(0, "row0", -OSDBL_MAX, 4, 0);
00092 osinstance->addConstraint(1, "row1", -OSDBL_MAX, 6, 0);
00093 osinstance->addConstraint(2, "row2", -OSDBL_MAX, 0, 0);
00094 osinstance->addConstraint(3, "row3", 0 , OSDBL_MAX, 0);
00095 osinstance->addConstraint(4, "row4", -OSDBL_MAX, 0, 0);
00096 osinstance->addConstraint(5, "row5", -OSDBL_MAX, 0, 0);
00097
00098
00099
00100
00101
00102
00103
00104 double *values = new double[ 3];
00105 int *indexes = new int[ 3];
00106 int *starts = new int[ 3];
00107 values[ 0] = 1.0;
00108 values[ 1] = 1.0;
00109 values[ 2] = 1.0;
00110 indexes[ 0] = 0;
00111 indexes[ 1] = 0;
00112 indexes[ 2] = 1;
00113 starts[ 0] = 0;
00114 starts[ 1] = 2;
00115 starts[ 2] = 3;
00116 osinstance->setLinearConstraintCoefficients(3, true, values, 0, 2,
00117 indexes, 0, 2, starts, 0, 2);
00118
00119
00120
00121
00122
00123 osinstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions = 6;
00124 osinstance->instanceData->nonlinearExpressions->nl = new Nl*[ 6 ];
00125
00126 OSnLNode *nlNodePoint;
00127 OSnLNodeVariable *nlNodeVariablePoint;
00128 OSnLNodeNumber *nlNodeNumberPoint;
00129 OSnLNodeMax *nlNodeMaxPoint;
00130 std::vector<OSnLNode*> nlNodeVec;
00131
00132
00133
00134 osinstance->instanceData->nonlinearExpressions->nl[ 0] = new Nl();
00135 osinstance->instanceData->nonlinearExpressions->nl[ 0]->idx = -1;
00136 osinstance->instanceData->nonlinearExpressions->nl[ 0]->osExpressionTree = new OSExpressionTree();
00137
00138 nlNodeVariablePoint = new OSnLNodeVariable();
00139 nlNodeVariablePoint->idx=0;
00140 nlNodeVec.push_back( nlNodeVariablePoint);
00141
00142 nlNodeNumberPoint = new OSnLNodeNumber();
00143 nlNodeNumberPoint->value = 1.0;
00144 nlNodeVec.push_back( nlNodeNumberPoint);
00145
00146 nlNodePoint = new OSnLNodePlus();
00147 nlNodeVec.push_back( nlNodePoint);
00148
00149 nlNodePoint = new OSnLNodeAbs();
00150 nlNodeVec.push_back( nlNodePoint);
00151
00152
00153 osinstance->instanceData->nonlinearExpressions->nl[ 0]->osExpressionTree->m_treeRoot =
00154 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00155 nlNodeVec.clear();
00156
00157
00158
00159
00160
00161 osinstance->instanceData->nonlinearExpressions->nl[ 1] = new Nl();
00162 osinstance->instanceData->nonlinearExpressions->nl[ 1]->idx = 1;
00163 osinstance->instanceData->nonlinearExpressions->nl[ 1]->osExpressionTree = new OSExpressionTree();
00164
00165 nlNodeVariablePoint = new OSnLNodeVariable();
00166 nlNodeVariablePoint->idx=0;
00167 nlNodeVec.push_back( nlNodeVariablePoint);
00168
00169 nlNodeVariablePoint = new OSnLNodeVariable();
00170 nlNodeVariablePoint->idx=1;
00171 nlNodeVec.push_back( nlNodeVariablePoint);
00172
00173 nlNodePoint = new OSnLNodeTimes();
00174 nlNodeVec.push_back( nlNodePoint);
00175
00176
00177 osinstance->instanceData->nonlinearExpressions->nl[ 1]->osExpressionTree->m_treeRoot =
00178 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00179 nlNodeVec.clear();
00180
00181
00182
00183 osinstance->instanceData->nonlinearExpressions->nl[ 2] = new Nl();
00184 osinstance->instanceData->nonlinearExpressions->nl[ 2]->idx = 2;
00185 osinstance->instanceData->nonlinearExpressions->nl[ 2]->osExpressionTree = new OSExpressionTree();
00186
00187 nlNodeVariablePoint = new OSnLNodeVariable();
00188 nlNodeVariablePoint->idx=0;
00189 nlNodeVec.push_back( nlNodeVariablePoint);
00190
00191 nlNodeVariablePoint = new OSnLNodeVariable();
00192 nlNodeVariablePoint->idx=1;
00193 nlNodeVec.push_back( nlNodeVariablePoint);
00194
00195 nlNodePoint = new OSnLNodeTimes();
00196 nlNodeVec.push_back( nlNodePoint);
00197
00198
00199 osinstance->instanceData->nonlinearExpressions->nl[ 2]->osExpressionTree->m_treeRoot =
00200 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00201 nlNodeVec.clear();
00202
00203
00204
00205
00206 osinstance->instanceData->nonlinearExpressions->nl[ 3] = new Nl();
00207 osinstance->instanceData->nonlinearExpressions->nl[ 3]->idx = 3;
00208 osinstance->instanceData->nonlinearExpressions->nl[ 3]->osExpressionTree = new OSExpressionTree();
00209
00210 nlNodeVariablePoint = new OSnLNodeVariable();
00211 nlNodeVariablePoint->idx=1;
00212 nlNodeVec.push_back( nlNodeVariablePoint);
00213
00214 nlNodeNumberPoint = new OSnLNodeNumber();
00215 nlNodeNumberPoint->value = 1.0;
00216 nlNodeVec.push_back( nlNodeNumberPoint);
00217
00218 nlNodePoint = new OSnLNodePlus();
00219 nlNodeVec.push_back( nlNodePoint);
00220
00221 nlNodeVariablePoint = new OSnLNodeVariable();
00222 nlNodeVariablePoint->idx=0;
00223 nlNodeVec.push_back( nlNodeVariablePoint);
00224
00225 nlNodeMaxPoint = new OSnLNodeMax();
00226 nlNodeMaxPoint->inumberOfChildren = 2;
00227 nlNodeMaxPoint->m_mChildren = new OSnLNode*[ nlNodeMaxPoint->inumberOfChildren];
00228 nlNodeVec.push_back( nlNodeMaxPoint);
00229
00230
00231 osinstance->instanceData->nonlinearExpressions->nl[ 3]->osExpressionTree->m_treeRoot =
00232 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00233 nlNodeVec.clear();
00234
00235
00236
00237
00238 osinstance->instanceData->nonlinearExpressions->nl[ 4] = new Nl();
00239 osinstance->instanceData->nonlinearExpressions->nl[ 4]->idx = 4;
00240 osinstance->instanceData->nonlinearExpressions->nl[ 4]->osExpressionTree = new OSExpressionTree();
00241
00242 nlNodeVariablePoint = new OSnLNodeVariable();
00243 nlNodeVariablePoint->idx=1;
00244 nlNodeVec.push_back( nlNodeVariablePoint);
00245
00246 nlNodeNumberPoint = new OSnLNodeNumber();
00247 nlNodeNumberPoint->value = 1.0;
00248 nlNodeVec.push_back( nlNodeNumberPoint);
00249
00250 nlNodeVariablePoint = new OSnLNodeVariable();
00251 nlNodeVariablePoint->idx=1;
00252 nlNodeVec.push_back( nlNodeVariablePoint);
00253
00254 nlNodePoint = new OSnLNodeIf();
00255 nlNodeVec.push_back( nlNodePoint);
00256
00257
00258 osinstance->instanceData->nonlinearExpressions->nl[ 4]->osExpressionTree->m_treeRoot =
00259 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00260 nlNodeVec.clear();
00261
00262
00263
00264
00265 osinstance->instanceData->nonlinearExpressions->nl[ 5] = new Nl();
00266 osinstance->instanceData->nonlinearExpressions->nl[ 5]->idx = 5;
00267 osinstance->instanceData->nonlinearExpressions->nl[ 5]->osExpressionTree = new OSExpressionTree();
00268
00269 nlNodeVariablePoint = new OSnLNodeVariable();
00270 nlNodeVariablePoint->idx=1;
00271 nlNodeVec.push_back( nlNodeVariablePoint);
00272
00273 nlNodeNumberPoint = new OSnLNodeNumber();
00274 nlNodeNumberPoint->value = 2.0;
00275 nlNodeVec.push_back( nlNodeNumberPoint);
00276
00277 nlNodePoint = new OSnLNodeTimes();
00278 nlNodeVec.push_back( nlNodePoint);
00279
00280 nlNodeVariablePoint = new OSnLNodeVariable();
00281 nlNodeVariablePoint->idx=1;
00282 nlNodeVec.push_back( nlNodeVariablePoint);
00283
00284 nlNodePoint = new OSnLNodeTimes();
00285 nlNodeVec.push_back( nlNodePoint);
00286
00287 nlNodeVariablePoint = new OSnLNodeVariable();
00288 nlNodeVariablePoint->idx=1;
00289 nlNodeVec.push_back( nlNodeVariablePoint);
00290
00291 nlNodePoint = new OSnLNodeMinus();
00292 nlNodeVec.push_back( nlNodePoint);
00293
00294 nlNodeVariablePoint = new OSnLNodeVariable();
00295 nlNodeVariablePoint->idx=0;
00296 nlNodeVec.push_back( nlNodeVariablePoint);
00297
00298 nlNodePoint = new OSnLNodeTimes();
00299 nlNodeVec.push_back( nlNodePoint);
00300
00301
00302 osinstance->instanceData->nonlinearExpressions->nl[ 5]->osExpressionTree->m_treeRoot =
00303 nlNodeVec[ 0]->createExpressionTreeFromPostfix( nlNodeVec);
00304 nlNodeVec.clear();
00305
00306
00307
00308 cout << "End Building the Model" << endl;
00309
00310 OSiLWriter *osilwriter;
00311 osilwriter = new OSiLWriter();
00312 cout << osilwriter->writeOSiL( osinstance);
00313
00314 cout << "Done writing the Model" << endl;
00315 delete osinstance;
00316 osinstance = NULL;
00317 delete osilwriter;
00318 osilwriter = NULL;
00319 cout << "Done with garbage collection" << endl;
00320 return 0;
00321 }
00322 catch(const ErrorClass& eclass){
00323 cout << eclass.errormsg << endl;
00324 }
00325 }
00326