37 #ifndef __SCIP_PARA_DIFF_SUBPROBLEM_H__ 38 #define __SCIP_PARA_DIFF_SUBPROBLEM_H__ 49 #include "scip/scip.h" 50 #include "scip/history.h" 51 #include "scip/cons_bounddisjunction.h" 103 idxLinearCoefsVars(0),
112 if( linearLhss )
delete[] linearLhss;
113 if( linearRhss )
delete[] linearRhss;
114 for(
int c = 0; c < nLinearConss; c++ )
116 if( nLinearCoefs[c] > 0 )
118 if( linearCoefs[c] )
delete[] linearCoefs[c];
119 if( idxLinearCoefsVars[c] )
delete[] idxLinearCoefsVars[c];
125 if( consNames )
delete[] consNames;
152 if( nSetppcVars )
delete[] nSetppcVars;
153 if( setppcTypes )
delete[] setppcTypes;
154 for(
int c = 0; c < nSetppcConss; c++ )
156 if( idxSetppcVars[c] )
delete[] idxSetppcVars[c];
158 if (idxSetppcVars )
delete [] idxSetppcVars;
159 if( consNames )
delete[] consNames;
180 idxLinearCoefsVars(0)
187 if( linearLhss )
delete[] linearLhss;
188 if( linearRhss )
delete[] linearRhss;
189 for(
int c = 0; c < nLinearConss; c++ )
191 if( nLinearCoefs[c] > 0 )
193 if( linearCoefs[c] )
delete[] linearCoefs[c];
194 if( idxLinearCoefsVars[c] )
delete[] idxLinearCoefsVars[c];
225 ) : nBoundDisjunctions(0),
226 nTotalVarsBoundDisjunctions(0),
227 nVarsBoundDisjunction(0),
228 flagBoundDisjunctionInitial(0),
229 flagBoundDisjunctionSeparate(0),
230 flagBoundDisjunctionEnforce(0),
231 flagBoundDisjunctionCheck(0),
232 flagBoundDisjunctionPropagate(0),
233 flagBoundDisjunctionLocal(0),
234 flagBoundDisjunctionModifiable(0),
235 flagBoundDisjunctionDynamic(0),
236 flagBoundDisjunctionRemovable(0),
237 flagBoundDisjunctionStickingatnode(0),
238 idxBoundDisjunctionVars(0),
239 boundTypesBoundDisjunction(0),
240 boundsBoundDisjunction(0)
247 for(
int i = 0; i < nBoundDisjunctions; i++ )
249 if( nVarsBoundDisjunction[i] > 0 )
251 if( idxBoundDisjunctionVars[i] )
delete[] idxBoundDisjunctionVars[i];
252 if( boundTypesBoundDisjunction[i] )
delete[] boundTypesBoundDisjunction[i];
253 if( boundsBoundDisjunction[i] )
delete[] boundsBoundDisjunction[i];
256 if( idxBoundDisjunctionVars )
delete[] idxBoundDisjunctionVars;
257 if( boundTypesBoundDisjunction )
delete[] boundTypesBoundDisjunction;
258 if( boundsBoundDisjunction )
delete[] boundsBoundDisjunction;
259 if( nVarsBoundDisjunction )
delete[] nVarsBoundDisjunction;
260 if( flagBoundDisjunctionInitial )
delete[] flagBoundDisjunctionInitial;
261 if( flagBoundDisjunctionSeparate )
delete[] flagBoundDisjunctionSeparate;
262 if( flagBoundDisjunctionEnforce )
delete[] flagBoundDisjunctionEnforce;
263 if( flagBoundDisjunctionCheck )
delete[] flagBoundDisjunctionCheck;
264 if( flagBoundDisjunctionPropagate )
delete[] flagBoundDisjunctionPropagate;
265 if( flagBoundDisjunctionLocal )
delete[] flagBoundDisjunctionLocal;
266 if( flagBoundDisjunctionModifiable )
delete[] flagBoundDisjunctionModifiable;
267 if( flagBoundDisjunctionDynamic )
delete[] flagBoundDisjunctionDynamic;
268 if( flagBoundDisjunctionRemovable )
delete[] flagBoundDisjunctionRemovable;
269 if( flagBoundDisjunctionStickingatnode )
delete[] flagBoundDisjunctionStickingatnode;
294 idxBranchStatsVars(0),
311 if( idxBranchStatsVars )
delete[] idxBranchStatsVars;
312 if( downpscost )
delete[] downpscost;
313 if( uppscost )
delete[] uppscost;
314 if( downvsids )
delete[] downvsids;
315 if( upvsids )
delete[] upvsids;
316 if( downconflen )
delete[] downconflen;
317 if( upconflen )
delete[] upconflen;
318 if( downinfer )
delete[] downinfer;
319 if( upinfer )
delete[] upinfer;
320 if( downcutoff )
delete[] downcutoff;
321 if( upcutoff )
delete[] upcutoff;
343 ) : nVarValueVars(0),
348 varValueDownvsids(0),
350 varValueDownconflen(0),
351 varValueUpconflen(0),
352 varValueDowninfer(0),
354 varValueDowncutoff(0),
362 for(
int i = 0; i < nVarValueVars; i++ )
364 if( nVarValueValues[i] > 0 )
366 if( varValue[i] )
delete[] varValue[i];
367 if( varValueDownvsids[i] )
delete[] varValueDownvsids[i];
368 if( varVlaueUpvsids[i] )
delete[] varVlaueUpvsids[i];
369 if( varValueDownconflen[i] )
delete[] varValueDownconflen[i];
370 if( varValueUpconflen[i] )
delete[] varValueUpconflen[i];
371 if( varValueDowninfer[i] )
delete[] varValueDowninfer[i];
372 if( varValueUpinfer[i] )
delete[] varValueUpinfer[i];
373 if( varValueDowncutoff[i] )
delete[] varValueDowncutoff[i];
374 if( varValueUpcutoff[i] )
delete[] varValueUpcutoff[i];
377 if( varValue )
delete [] varValue;
378 if( varValueDownvsids )
delete[] varValueDownvsids;
379 if( varVlaueUpvsids )
delete[] varVlaueUpvsids;
380 if( varValueDownconflen )
delete[] varValueDownconflen;
381 if( varValueUpconflen )
delete[] varValueUpconflen;
382 if( varValueDowninfer )
delete[] varValueDowninfer;
383 if( varValueUpinfer )
delete[] varValueUpinfer;
384 if( varValueDowncutoff )
delete[] varValueDowncutoff;
385 if( varValueUpcutoff )
delete[] varValueUpcutoff;
386 if( idxVarValueVars )
delete[] idxVarValueVars;
387 if( nVarValueValues )
delete[] nVarValueValues;
431 #ifdef UG_DEBUG_SOLUTION 432 int includeOptimalSol;
438 : localInfoIncluded(0),
439 nBoundChanges(0), indicesAmongSolvers(0), branchBounds(0), boundTypes(0),
440 branchLinearConss(0),
441 branchSetppcConss(0),
443 bendersLinearConss(0),
444 boundDisjunctions(0),
448 #ifdef UG_DEBUG_SOLUTION 449 includeOptimalSol = 0;
457 SCIP_VAR **newBranchVars,
458 SCIP_Real *newBranchBounds,
459 SCIP_BOUNDTYPE *newBoundTypes,
461 SCIP_CONS **addedConss
466 ) : localInfoIncluded(0),
467 nBoundChanges(0), indicesAmongSolvers(0), branchBounds(0), boundTypes(0),
468 branchLinearConss(0),
469 branchSetppcConss(0),
471 bendersLinearConss(0),
472 boundDisjunctions(0),
477 if( !diffSubproblem )
return;
483 indicesAmongSolvers =
new int[nBoundChanges];
484 branchBounds =
new SCIP_Real[nBoundChanges];
485 boundTypes =
new SCIP_BOUNDTYPE[nBoundChanges];
486 for(
int i = 0; i < nBoundChanges; i++ )
490 boundTypes[i] = diffSubproblem->
boundTypes[i];
504 for(
int c = 0; c < branchLinearConss->
nLinearConss; c++ )
511 for(
int v = 0; v < branchLinearConss->
nLinearCoefs[c]; v++ )
519 for(
int c = 0; c < branchLinearConss->
lConsNames; c++ )
534 for(
int c = 0; c < branchSetppcConss->
nSetppcConss; c++ )
539 for(
int v = 0; v < branchSetppcConss->
nSetppcVars[c]; v++ )
546 for(
int c = 0; c < branchSetppcConss->
lConsNames; c++ )
590 for(
int c = 0; c < bendersLinearConss->
nLinearConss; c++ )
597 for(
int v = 0; v < bendersLinearConss->
nLinearCoefs[c]; v++ )
732 #ifdef UG_DEBUG_SOLUTION 733 includeOptimalSol = diffSubproblem->includeOptimalSol;
740 if( indicesAmongSolvers )
delete[] indicesAmongSolvers;
741 if( branchBounds )
delete[] branchBounds;
742 if( boundTypes )
delete[] boundTypes;
743 if( branchLinearConss )
745 delete branchLinearConss;
747 if( branchSetppcConss )
749 delete branchSetppcConss;
755 if( bendersLinearConss )
757 delete bendersLinearConss;
759 if( boundDisjunctions )
761 delete boundDisjunctions;
766 delete varBranchStats;
775 int getIndex(
int i){
return indicesAmongSolvers[i]; }
781 return branchLinearConss;
786 return branchSetppcConss;
791 if( branchLinearConss )
803 assert(branchLinearConss);
809 assert(branchLinearConss);
815 assert(branchLinearConss);
821 assert(branchLinearConss);
827 assert(branchLinearConss);
833 assert(branchLinearConss);
839 char *name = branchLinearConss->
consNames;
840 for(
int j = 0; j < i; j++)
843 name += (std::strlen(name) + 1);
852 if( branchSetppcConss )
864 assert(branchSetppcConss);
870 assert(branchSetppcConss);
876 assert(branchSetppcConss);
882 assert(branchSetppcConss);
888 char *name = branchSetppcConss->
consNames;
889 for(
int j = 0; j < i; j++)
892 name += (std::strlen(name) + 1);
944 if( bendersLinearConss )
956 assert(bendersLinearConss);
962 assert(bendersLinearConss);
968 assert(bendersLinearConss);
974 assert(bendersLinearConss);
980 assert(bendersLinearConss);
986 if( boundDisjunctions )
998 assert(boundDisjunctions);
1003 assert(boundDisjunctions);
1004 assert( boundDisjunctions->
nVarsBoundDisjunction && i >= 0 && i < boundDisjunctions->nBoundDisjunctions );
1009 assert(boundDisjunctions);
1015 assert(boundDisjunctions);
1021 assert(boundDisjunctions);
1027 assert(boundDisjunctions);
1033 assert(boundDisjunctions);
1044 assert(boundDisjunctions);
1050 assert(boundDisjunctions);
1056 assert(boundDisjunctions);
1062 assert(boundDisjunctions);
1069 assert(boundDisjunctions);
1071 assert( boundDisjunctions->
idxBoundDisjunctionVars[i] && j >= 0 && j < boundDisjunctions->nVarsBoundDisjunction[i] );
1076 assert(boundDisjunctions);
1083 assert(boundDisjunctions);
1084 assert( boundDisjunctions->
boundsBoundDisjunction && i >= 0 && i < boundDisjunctions->nBoundDisjunctions );
1085 assert( boundDisjunctions->
boundsBoundDisjunction[i] && j >= 0 && j < boundDisjunctions->nVarsBoundDisjunction[i] );
1092 if( varBranchStats )
1104 assert(varBranchStats);
1105 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1111 assert(varBranchStats);
1112 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1118 assert(varBranchStats);
1119 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1120 return varBranchStats->
uppscost[i];
1125 assert(varBranchStats);
1126 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1132 assert(varBranchStats);
1133 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1134 return varBranchStats->
upvsids[i];
1139 assert(varBranchStats);
1140 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1146 assert(varBranchStats);
1147 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1153 assert(varBranchStats);
1154 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1160 assert(varBranchStats);
1161 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1162 return varBranchStats->
upinfer[i];
1167 assert(varBranchStats);
1168 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1174 assert(varBranchStats);
1175 assert( i >= 0 && i <varBranchStats->nVarBranchStats );
1176 return varBranchStats->
upcutoff[i];
1201 assert(varValues->
idxVarValueVars && i >= 0 && i < varValues->nVarValueVars );
1208 assert(varValues->
idxVarValueVars && i >= 0 && i < varValues->nVarValueVars );
1215 assert(varValues->
varValue && i >= 0 && i < varValues->nVarValueVars );
1216 assert(varValues->
varValue[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1223 assert(varValues->
varValueDownvsids && i >= 0 && i < varValues->nVarValueVars );
1224 assert(varValues->
varValueDownvsids[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1231 assert(varValues->
varVlaueUpvsids && i >= 0 && i < varValues->nVarValueVars );
1232 assert(varValues->
varVlaueUpvsids[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1240 assert(varValues->
varValueDownconflen[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1247 assert(varValues->
varValueUpconflen && i >= 0 && i < varValues->nVarValueVars );
1248 assert(varValues->
varValueUpconflen[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1255 assert(varValues->
varValueDowninfer && i >= 0 && i < varValues->nVarValueVars );
1256 assert(varValues->
varValueDowninfer[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1263 assert(varValues->
varValueUpinfer && i >= 0 && i < varValues->nVarValueVars );
1264 assert(varValues->
varValueUpinfer[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1272 assert(varValues->
varValueDowncutoff[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1279 assert(varValues->
varValueUpcutoff && i >= 0 && i < varValues->nVarValueVars );
1280 assert(varValues->
varValueUpcutoff[i] && j >= 0 && j < varValues->nVarValueValues[i] );
1284 void addBranchLinearConss(
1289 SCIP_CONS **addedConss
1292 void addBranchSetppcConss(
1297 SCIP_CONS **addedConss
1300 void addLocalNodeInfo(
1305 void addBoundDisjunctions(
1310 void addBranchVarStats(
1315 void addVarValueStats(
1320 void addInitialBranchVarStats(
1328 assert(varBranchStats);
1329 return varBranchStats->
offset;
1333 void write(gzstream::ogzstream &out);
1338 int getFixedVariables(
1343 BbParaDiffSubproblem* createDiffSubproblem(
1350 const std::string toString(
1355 std::ostringstream s;
1356 if (branchLinearConss)
1365 if (branchSetppcConss)
1382 if( bendersLinearConss )
1392 if ( boundDisjunctions )
1398 s <<
", nbd: 0, nbdt: 0";
1401 if( varBranchStats )
1416 s <<
", nvv: 0, nvvt: 0";
1421 #ifdef UG_DEBUG_SOLUTION 1422 bool isOptimalSolIncluded(){
return (includeOptimalSol != 0); }
1423 void setOptimalSolIndicator(
int i){ includeOptimalSol = i; }
1430 #endif // __SCIP_PARA_DIFF_SUBPROBLEM_H__ int getIdxVarValueVars(int i)
ScipParaDiffSubproblemBranchSetppcCons()
int ** idxLinearCoefsVars
ScipParaDiffSubproblemVarBranchStats()
SCIP_Real getDownpscost(int i)
ScipParaDiffSubproblemBranchLinearCons * getBranchLinearConss()
SCIP_Bool * flagBoundDisjunctionEnforce
SCIP_Real getVarValueUpinfer(int i, int j)
static ScipParaCommTh * comm
SCIP_Real getDownconflen(int i)
SCIP_Bool getFlagBoundDisjunctionSeparate(int i)
SCIP_BOUNDTYPE getBoundType(int i)
SCIP_Bool getFlagBoundDisjunctionEnforce(int i)
SCIP_Real getVarValueDownconflen(int i, int j)
SCIP_Real getDownvsids(int i)
SCIP_Real getUpcutoff(int i)
SCIP_Bool * flagBoundDisjunctionLocal
~ScipParaDiffSubproblemLinearCons()
SCIP_Bool getFlagBoundDisjunctionLocal(int i)
SCIP_Bool * flagBoundDisjunctionStickingatnode
ScipParaDiffSubproblemVarValues * varValues
~ScipParaDiffSubproblemBranchLinearCons()
SCIP_Real getBendersLinearRhs(int i)
int nTotalVarsBoundDisjunctions
SCIP_BOUNDTYPE getBoundTypesBoundDisjunction(int i, int j)
SCIP_Real getVarValueDowninfer(int i, int j)
const std::string toStringStat()
int getNBoundDisjunctions()
SCIP_Real getBranchConsLinearRhs(int i)
ScipParaDiffSubproblemBranchSetppcCons * getBranchSetppcConss()
int getNLinearCoefs(int i)
SCIP_Bool * flagBoundDisjunctionRemovable
ScipParaDiffSubproblemBoundDisjunctions * boundDisjunctions
SCIP_Real getDowncutoff(int i)
SCIP_Real getVarValueUpconflen(int i, int j)
int getIdxBoundDisjunctionVars(int i, int j)
SCIP_Real ** varValueUpconflen
SCIP_Real getVarValueUpcutoff(int i, int j)
SCIP_Bool * flagBoundDisjunctionSeparate
ScipParaDiffSubproblemLinearCons * linearConss
SCIP_Real getVarValueDowncutoff(int i, int j)
BranchConsSetppcInfo * BranchConsSetppcInfoPtr
int getBranchConsSetppcConsNames()
int ** idxLinearCoefsVars
SCIP_Bool getFlagBoundDisjunctionDynamic(int i)
SCIP_Real ** boundsBoundDisjunction
int getBranchConsSetppcNVars(int i)
SCIP_Real getDowninfer(int i)
int getNVarValueValues(int i)
int getNTotalVarsBoundDisjunctions()
~ScipParaDiffSubproblemVarBranchStats()
SCIP_BOUNDTYPE * boundTypes
SCIP_Real getBendersLinearCoefs(int i, int j)
ScipParaDiffSubproblemBranchLinearCons()
int getIdxBendersLinearCoefsVars(int i, int j)
SCIP_Real ** varValueUpinfer
ScipParaDiffSubproblemVarValues()
int getBranchConsSetppcVars(int i, int j)
virtual ~ScipParaDiffSubproblem()
SCIP_Real getBoundsBoundDisjunction(int i, int j)
SCIP_Bool getFlagBoundDisjunctionStickingatnode(int i)
SCIP_Real getVarValue(int i, int j)
ScipParaDiffSubproblemBoundDisjunctions()
SCIP_Bool * flagBoundDisjunctionPropagate
Base class of communicator for UG Framework.
SCIP_Real getVarVlaueUpvsids(int i, int j)
char * getBranchConsLinearConsNames(int i)
SCIP_Real ** varValueDowninfer
SCIP_Bool * flagBoundDisjunctionInitial
SCIP_Real ** varValueDowncutoff
~ScipParaDiffSubproblemBoundDisjunctions()
Class for the difference between instance and subproblem.
SCIP_Bool * flagBoundDisjunctionDynamic
int getNBranchConsSetppcConss()
SCIP_Real getUpconflen(int i)
SCIP_Real getLinearCoefs(int i, int j)
~ScipParaDiffSubproblemBranchSetppcCons()
void read(ParaComm *comm, const char *filename)
read ParaParams from file
SCIP_Bool getFlagBoundDisjunctionInitial(int i)
int getNBranchConsLinearConss()
SCIP_Real getLinearRhs(int i)
int getBranchConsLinearIdxCoefsVars(int i, int j)
int getNVarsBoundDisjunction(int i)
ScipParaDiffSubproblemVarBranchStats * varBranchStats
SCIP_Real getBranchConsLinearCoefs(int i, int j)
struct ParaSCIP::BranchConsLinearInfo_t BranchConsLinearInfo
SCIP_Real getVarValueDownvsids(int i, int j)
SCIP_Bool getFlagBoundDisjunctionPropagate(int i)
int getBranchConsSetppcType(int i)
SCIP_Real getUppscost(int i)
SCIP_Bool * flagBoundDisjunctionModifiable
ScipParaDiffSubproblemLinearCons()
int getIdxLinearCoefsVars(int i, int j)
SCIP_Real ** varValueDownvsids
~ScipParaDiffSubproblemVarValues()
struct ParaSCIP::BranchConsSetppcInfo_t BranchConsSetppcInfo
SCIP_BOUNDTYPE ** boundTypesBoundDisjunction
int getBranchConsLinearConsNames()
SCIP_Bool * flagBoundDisjunctionCheck
int getNBendersLinearConss()
SCIP_Bool getFlagBoundDisjunctionRemovable(int i)
int ** idxBoundDisjunctionVars
int getNBendersLinearCoefs(int i)
ScipParaDiffSubproblemBranchLinearCons * branchLinearConss
SCIP_Real getUpinfer(int i)
SCIP_Bool getFlagBoundDisjunctionCheck(int i)
BranchConsLinearInfo * BranchConsLinearInfoPtr
int * indicesAmongSolvers
char * getBranchConsSetppcConsNames(int i)
SCIP_Bool getFlagBoundDisjunctionModifiable(int i)
SCIP_Real getBranchBound(int i)
SCIP_Real getUpvsids(int i)
SCIP_Real getBendersLinearLhs(int i)
ScipParaDiffSubproblemLinearCons * bendersLinearConss
ScipParaDiffSubproblem(ScipParaDiffSubproblem *diffSubproblem)
SCIP_Real ** varValueUpcutoff
int getBranchConsNLinearCoefs(int i)
Base class of communicator object.
SCIP_Real ** varValueDownconflen
int getIdxLBranchStatsVars(int i)
ScipParaDiffSubproblemBranchSetppcCons * branchSetppcConss
int * nVarsBoundDisjunction
SCIP_Real getBranchConsLinearLhs(int i)
SCIP_Real getLinearLhs(int i)
SCIP_Real ** varVlaueUpvsids