00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifdef LP_OLD
00022
00023 #ifndef _lp9_h
00024 #define _lp9_h
00025 #include "MatrixDouble.h"
00026 #include "FinancialMathFunctions.h"
00027 #include "simplx9.h"
00028 #include "BasicDefines.h"
00029
00030 #include "ekk_c_api.h"
00031
00032
00033 #define MAXITERATIONEN 400
00034 #define ITER2 3
00035 #define ITER1 4
00036 #define NR 2
00037
00038
00039 class sos
00040 { protected:
00041 FILE* file;
00042 int numm;
00043 int type;
00044 int prio;
00045 int* col_p;
00046 double* dpco_p;
00047 double* rrow_p;
00048
00049 public:
00050 sos();
00051 virtual ~sos()
00052 { delete [] col_p;
00053 delete [] dpco_p;
00054 delete [] rrow_p;
00055 }
00056
00057 virtual void readInfoFromFile(FILE*);
00058 virtual void writeInfoToFile(FILE*);
00059 virtual int getType();
00060 virtual int getPriority();
00061 virtual int getNumber();
00062 virtual int* getColumns();
00063 virtual double* getPCost();
00064 virtual double* getRRow();
00065 };
00066
00067
00068 typedef struct
00069 { int numA;
00070 int col0;
00071 } infoPerf;
00072
00073
00074
00075 typedef struct
00076 { int rowLP;
00077 int colLP;
00078 double origV;
00079 double consV;
00080 } infoFine;
00081
00082
00083
00084 typedef struct
00085 {
00086 int colLP;
00087 int colOp;
00088 int typCr;
00089 int roYLD;
00090 int roYSM;
00091
00092 } infoTSPC;
00093
00094
00095 typedef struct
00096 { int colStv;
00097 } infoResi;
00098
00099
00100
00101
00102
00103
00104
00105
00106 typedef struct
00107 { int brows;
00108 int bcols;
00109 MatrixDouble bzrow;
00110 MatrixDouble bmat;
00111 } matblock;
00112
00113
00114 class tableau
00115 { protected:
00116 int numblx;
00117 int trans;
00118 matblock** matblx;
00119 MatrixDouble infoblx;
00120
00121 public:
00122 tableau();
00123 virtual ~tableau()
00124 { deallocateTableau();
00125 }
00126
00127 virtual void printToScreen();
00128 virtual void allocateTableau(int, int);
00129 virtual void readTableauFromFile(FILE* strm,
00130 MatrixDouble& zrx, MatrixDouble& mtx, int nrows, int ncols);
00131 virtual void writeTableauIntoFile(FILE* strm,
00132 const MatrixDouble& zrx, const MatrixDouble& mtx);
00133
00134 virtual void allocateBlock(int, int, int);
00135 virtual void readBlockFromFile(int, FILE*);
00136 virtual void writeBlockIntoFile(int, FILE*);
00137
00138 virtual int getNumBlocks();
00139 virtual int getIfTrans();
00140 virtual void writeInfoblxInFile(FILE* strm);
00141
00142 virtual void copyBlockIntoZRow(int bn, MatrixDouble& zrx, int zrxc);
00143 virtual void copyBlockIntoMatrix(int bn, MatrixDouble& mtx, int mtxr, int mtxc);
00144
00145 virtual void copyZRowIntoBlock(int bn, const MatrixDouble& zrx, int zrxc);
00146 virtual void copyMatrixIntoBlock(int bn, const MatrixDouble& mtx, int mtxr, int mtxc);
00147
00148 virtual void deallocateTableau();
00149 virtual void deallocateBlock(int);
00150
00151 };
00152
00153
00154
00155
00156 class mpPrbl
00157 { protected:
00158 FILE* datStrm;
00159 char datName[MXLENGTH];
00160
00161
00162
00163 int ncols;
00164 int nrows;
00165 int nncols;
00166 int nnrows;
00167 double pfill;
00168
00169
00170 int capLab;
00171 int capLiq;
00172 int* capInv;
00173
00174 int capLnd;
00175 int capWat;
00176 int capCsh;
00177 int capAvl;
00178 int capMac;
00179
00180 int actSvg;
00181 int actExt;
00182
00183 int anzahlK;
00184
00185 double** ap;
00186 double** bp;
00187 tableau tabMILP;
00188
00189 MatrixDouble tmp_LP;
00190
00191
00192 MatrixDouble erste_zeile;
00193
00194
00195
00196
00197
00198 int cshSpans;
00199 int labSpans;
00200
00201 int fixLabor;
00202 int actFemaY;
00203 int actFemaN;
00204 int actMaleY;
00205 int actMaleN;
00206
00207 int disBinC;
00208 int disBinR;
00209 int ntrDmdR;
00210 int numFixV;
00211 int* fixCols;
00212
00213
00214 infoPerf cashOnf;
00215 infoPerf cashOff;
00216 infoPerf tLabOnf;
00217 infoPerf tLabOff;
00218 infoPerf pLabOnf;
00219 infoPerf pLabOff;
00220
00221 int numFine;
00222 infoFine* actFine;
00223
00224 infoTSPC** actTSPC;
00225
00226
00227 infoResi* actResi;
00228 int colManu;
00229
00230
00231
00232 MatrixDouble uppColA;
00233
00234 MatrixDouble lowColA;
00235
00236 MatrixDouble uppColB;
00237
00238 MatrixDouble lowColB;
00239
00240
00241
00242
00243
00244 EKKContext* env;
00245 EKKModel* model;
00246
00247
00248 double* dels_p;
00249
00250
00251
00252 int* mrow_p ;
00253
00254 int* mcol_p ;
00255
00256 double* drlo_p;
00257
00258 double* drup_p;
00259
00260 double* dclo_p;
00261
00262 double* dcup_p;
00263
00264 double* dobj_p;
00265
00266
00267 int tnel;
00268 int nzel;
00269 int* vtyp_p ;
00270
00271 int* etyp_p ;
00272
00273 double* rng_p ;
00274
00275
00276 int imark;
00277 int nint;
00278 sos* is_p;
00279 int nsos;
00280 sos* sos_p;
00281
00282 int nudR;
00283 int* dropR;
00284
00285
00286 int nudC;
00287 int* dropC;
00288
00289
00290
00291
00292 public:
00293 mpPrbl();
00294 virtual ~mpPrbl()
00295 { LP_deallokieren9();
00296 }
00297
00298
00299 virtual int getNCOLS();
00300 virtual int getNROWS();
00301 virtual int getNNCOLS();
00302 virtual int getNNROWS();
00303 virtual double getPerFil();
00304
00305 virtual int getCapLab();
00306 virtual int getCapLiq();
00307 virtual int getCapInv(int sclass);
00308 virtual int getCapLnd();
00309 virtual int getCapWat();
00310 virtual int getCapCsh();
00311 virtual int getCapAvl();
00312 virtual int getCapMac();
00313
00314 virtual int getActSvg();
00315 virtual int getActExt();
00316
00317
00318 virtual void LP_readInputFromFile(char*);
00319 virtual void LP_writeInputIntoFile(char* filename);
00320 virtual void LP_matrizen_anlegen();
00321 virtual void sendCostDataToMarketHandler();
00322
00323
00324 virtual infoPerf getInfocashOnf();
00325 virtual infoPerf getInfocashOff();
00326 virtual infoPerf getInfotLabOnf();
00327 virtual infoPerf getInfotLabOff();
00328 virtual infoPerf getInfopLabOnf();
00329 virtual infoPerf getInfopLabOff();
00330
00331
00332 virtual void switchOffFineTune();
00333 virtual void switchOnFineTune();
00334
00335
00336 virtual int identCrAcForCol(int colLP, int& aID, int& nru);
00337 virtual int getColLP(int aID, int nru);
00338 virtual int getColOp(int aID, int nru);
00339 virtual int getTypCr(int aID, int nru);
00340 virtual int getRoYld(int aID, int nru);
00341 virtual int getRoYsm(int aID, int nru);
00342 virtual int getColStv(int nru);
00343 virtual int getColMan();
00344 virtual void writeTSPCInfoInFile(char* filename);
00345
00346
00347 virtual double getZRowEntry(int);
00348 virtual double getVarRHS(int r);
00349 virtual void setVarRHS(int r, double w);
00350
00351 virtual double getOgMtxCoeff(int, int);
00352 virtual void setOgMtxCoeff(int r, int c, double w);
00353 virtual double getOgObjCoeff(int c);
00354 virtual void setOgObjCoeff(int c, double w);
00355
00356 virtual double getMtxCoeff(int r, int c);
00357 virtual void setMtxCoeff(int r, int c, double w);
00358 virtual double getObjCoeff(int c);
00359 virtual void setObjCoeff(int c, double w);
00360
00361 virtual double getMtxCoeffNR(int r, int c);
00362 virtual void setMtxCoeffNR(int r, int c, double w);
00363 virtual int callSimplxNR(double, int);
00364 virtual void LP_ausschreiben9();
00365 virtual void writeLpMatrixToFileAP(char* filename);
00366 virtual void writeLpMatrixToFileBP(char* filename);
00367 virtual void Primal_datei_schreiben(char* filename);
00368 virtual void Schatten_datei_schreiben(char* filename);
00369 virtual void LP_readLpNR(char* filename);
00370 virtual void LP_kopieren9();
00371 virtual void LP_Runden1(void);
00372 virtual void LP_Runden2(void);
00373 virtual void LP_deallokieren9(void);
00374
00375
00376 virtual void updateOrigMatrix();
00377 virtual void setColUppOSL(int c, double w);
00378 virtual void copyModelOSL(int aID, int sID, int fstID);
00379 virtual void loadModelOSL(int aID, int sID, int fstID);
00380 virtual void testModelOSL(int aID, int sID, int fstID);
00381 virtual void freeModelOSL();
00382 virtual void rmEmptyOSL(void);
00383 virtual int checkPrimalsOSL(void);
00384 virtual int checkColumnsOSL(void);
00385 virtual void cleanMemoryOSL(void);
00386
00387 virtual double solveLpOSL(int agID, int scID, int fstID, int savePrim, int saveDual,
00388 l_vektor& bprod, double*& varsLHS, double*& dualRHS, double*& varsRHS,
00389 MatrixDouble& mEntries);
00390
00391
00392 virtual double solveMilpOSL(int agID, int scID, int fstID, int savePrim, int saveDual,
00393 int& forSol, l_vektor& bprod, double*& varsLHS, double*& dualRHS,
00394 double*& varsRHS, MatrixDouble& mEntries);
00395
00396
00397 virtual int solveMilpOSL1(int agID, int scID, int fstID, int savePrim, int saveDual,
00398 l_vektor& bprod, double*& varsLHS, double*& dualRHS, double*& varsRHS);
00399
00400
00401 virtual int solveMilpOSL2(int agID, int scID, int fstID, int savePrim, int saveDual,
00402 l_vektor& bprod, double*& varsLHS, double*& dualRHS, double*& varsRHS);
00403
00404
00405 virtual int solveMilpOSL3(int agID, int scID, int fstID, int savePrim, int saveDual,
00406 l_vektor& bprod, double*& varsLHS, double*& dualRHS, double*& varsRHS);
00407
00408 virtual double getObjValue();
00409 virtual double getPrintCPU();
00410 virtual void setPrintCPU(double time);
00411 virtual int hasPrblInts();
00412 virtual int hasPrblSets();
00413 virtual double forSolutionOSL(int, int, int,
00414 l_vektor&, double*&, double*&, double*&, MatrixDouble& mEntries);
00415 virtual double optSolutionOSL(int agID, int scID, int fstID, int savePrim, int saveDual,
00416 double prp, l_vektor& bprod, double*& varsLHS, double*& schattenpreise,
00417 double*& varsRHS);
00418
00419
00420 virtual int getCshSpans();
00421 virtual int getLabSpans();
00422
00423
00424 virtual int fixAdultBin();
00425 virtual int getActFemaY();
00426 virtual int getActFemaN();
00427 virtual int getActMaleY();
00428 virtual int getActMaleN();
00429
00430
00431 virtual int getDisBinC();
00432 virtual int getDisBinR();
00433 virtual int getNtrDmdR();
00434
00435
00436 virtual void changeObjFuncOSL(double*& objF, int oSta, int oEnd);
00437 virtual void fixLaborBinarOSL(double femLab, double malLab);
00438 virtual void fixProducVarsOSL(l_vektor& bprod);
00439 virtual void changeElemMtxOSL(int num, int*& rows, int*& cols, double*& elms);
00440 virtual void setToEEConstrOSL(int rLP, double value);
00441
00442
00443 virtual int modifySolVectEKK(int num, int*& cols, double*& values);
00444 virtual int changeObjFuncEKK(double*& objF, int oSta, int oEnd);
00445 virtual int fixProducVarsEKK(l_vektor& bprod);
00446 virtual int changeElemMtxEKK(int num, int*& rows, int*& cols, double*& elms);
00447 virtual int setToEEConstrEKK(int rLP, double value);
00448
00449
00450 virtual void writeModelInFile(char* filename);
00451 virtual void writePrimsInFile(char* filename);
00452 virtual void writeDualsInFile(char* filename);
00453
00454
00455
00456 virtual void writeDualsIntoStream( FILE* datei);
00457
00458
00459 virtual void writeDualsIntoStream( FILE* datei, bool formatType);
00460
00461 virtual void writePrimsIntoStream( FILE* datei);
00462 virtual void writePrimsIntoStream( FILE* datei, bool formatType);
00463
00464
00465
00466 virtual void writeModelIn256Cols(char* filename);
00467 virtual void writePrimsIn256Cols(char* filename);
00468 virtual void writeDualsIn256Cols(char* filename);
00469
00470
00471 virtual void exportOSLToFile(char* filename);
00472
00473
00474 virtual void initContext();
00475 virtual void maxModelOSL(int aID, int sID);
00476 virtual void LP_readMilpExl(char* filename);
00477 virtual void LP_readMilpText(char* filename);
00478
00479 virtual void copyVarsRHS(double*& varsRHS);
00480 virtual void saveMilpMPS(char* filename);
00481 virtual void LP_readMilpMPS(char* filename);
00482
00483
00484 virtual void cleanArraysForMilp(double dval, int ival);
00485 virtual void cleanMatrixForMilp(double dval, int ival);
00486 virtual void checkArraysForMILP(double dval, int ival);
00487 virtual int checkVectorForMilp(double*& array, int size, int start, double dval);
00488 virtual int checkVectorForMilp(int*& array, int size, int start, int ival);
00489 virtual void writeArraysInFiles(char* prefix);
00490
00491
00492
00493 virtual void writeUpElemsInFile(int aID, int sID);
00494 virtual void writeUpCoeffInFile(int r, int c, double d);
00495 virtual void writeUpRowupInFile(int r, double d);
00496 virtual void writeUpRowloInFile(int r, double d);
00497 virtual void writeUpColupInFile(int c, double d);
00498 virtual void writeUpColloInFile(int c, double d);
00499 virtual void writeUpObjFcInFile(int c, double d);
00500 virtual void writeUpRhsVcInFile(int r, double d);
00501 virtual void writeUpSolVcInFile(int c, double d);
00502 virtual void closeUpElemsStream();
00503
00504 #ifdef SENSITIVITY
00505
00506
00507
00508
00509
00510 virtual void print_OFC_toScreen();
00511 virtual void print_OFC_toScreen(int maxCol);
00512
00513 virtual void updateOFC(int firstCol, MatrixDouble& vecOFC, int startColPrices);
00514
00515 virtual void updateOFC(int firstCol, MatrixDouble& vecOFC, int startColPrices, int row);
00516
00517
00518
00519 virtual double getPrimalSolution(MatrixDouble& solutionVector);
00520
00521 virtual void extractMtxIntoMatrix( MatrixDouble& rowMat, MatrixDouble& colMat, MatrixDouble& targetVector);
00522
00523 virtual void getVectorOfRHS(MatrixDouble& allWaterVect, int FirstWater, int numWater);
00524 virtual void setVectorOfRHS(MatrixDouble& allWaterVect, int FirstWater);
00525 virtual void printVectorOfRHS(int FirstWater, int numWater);
00526
00527
00528 virtual void getWaterRequirements(MatrixDouble& waterRequirements,
00529 int firstWater, int numWater,
00530 int firstActivity, int numActivity);
00531 #endif
00532 };
00533
00534 #endif
00535 #endif
00536