46 ScipParaDiffSubproblem::ScipParaDiffSubproblem(
50 SCIP_VAR **newBranchVars,
51 SCIP_Real *newBranchBounds,
52 SCIP_BOUNDTYPE *newBoundTypes,
54 SCIP_CONS **addedConss
55 ) : localInfoIncluded(0),
56 nBoundChanges(0), indicesAmongSolvers(0), branchBounds(0), boundTypes(0),
60 bendersLinearConss(0),
69 int nParentBranchVars = 0;
74 if( parentDiffSubproblem )
85 if( parentDiffSubproblem )
87 for( i = 0; i < nParentBranchVars; i ++ )
96 for(
int v = nNewBranchVars -1 ; v >= 0; --v )
98 SCIP_VAR *transformVar = newBranchVars[v];
99 SCIP_Real scalar = 1.0;
100 SCIP_Real constant = 0.0;
101 SCIP_CALL_ABORT( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) );
102 if( transformVar == NULL )
continue;
103 if( SCIPvarGetIndex(transformVar) >= scipParaSolver->
getNOrgVars() )
continue;
108 scalar == 1.0 && constant == 0.0 )
130 branchBounds[i] = ( newBranchBounds[v] - constant ) / scalar;
137 boundTypes[i] = SCIP_BoundType(1 - newBoundTypes[v]);
139 if( SCIPvarGetType(transformVar) != SCIP_VARTYPE_CONTINUOUS )
143 if( SCIPvarGetProbindex(transformVar) >= scipParaSolver->
getNOrgVars() )
156 std::cout <<
"ORG(L):" 157 << SCIPvarGetName(transformVar) <<
":" 158 << scipParaSolver->
getOrgVarLb(SCIPvarGetProbindex(transformVar))
162 << scipParaSolver->
getOrgVarUb(SCIPvarGetProbindex(transformVar)) << std::endl;
174 std::cout <<
"ORG(U):" 175 << SCIPvarGetName(transformVar) <<
":" 176 << scipParaSolver->
getOrgVarLb(SCIPvarGetProbindex(transformVar))
180 << scipParaSolver->
getOrgVarUb(SCIPvarGetProbindex(transformVar)) << std::endl;
209 assert( SCIPvarGetType(transformVar) != SCIP_VARTYPE_BINARY
218 if( SCIPvarGetProbindex(transformVar) >= scipParaSolver->
getNOrgVars() )
233 std::cout <<
"ORG(L):" 234 << SCIPvarGetName(transformVar) <<
":" 235 << scipParaSolver->
getOrgVarLb(SCIPvarGetProbindex(transformVar))
239 << scipParaSolver->
getOrgVarUb(SCIPvarGetProbindex(transformVar)) << std::endl;
255 std::cout <<
"ORG(U):" 256 << SCIPvarGetName(transformVar) <<
":" 257 << scipParaSolver->
getOrgVarLb(SCIPvarGetProbindex(transformVar))
261 << scipParaSolver->
getOrgVarUb(SCIPvarGetProbindex(transformVar)) << std::endl;
297 if( nAddedConss > 0 )
300 int nLinearConss = 0;
301 int nSetppcConss = 0;
302 for(
int c = 0; c < nAddedConss; c++ )
304 SCIP_CONS* cons = addedConss[c];
305 assert(cons != NULL);
306 const char *conshdlrname = SCIPconshdlrGetName(SCIPconsGetHdlr(cons));
307 if( std::strcmp(conshdlrname,
"linear") == 0 )
311 else if( std::strcmp(conshdlrname,
"setppc") == 0 )
315 else if( std::strcmp(conshdlrname,
"conjunction") == 0 )
321 THROW_LOGICAL_ERROR2(
"invalid constraint type sets on ScipParaDiffSubproblem; consname = ", conshdlrname);
356 #ifdef UG_DEBUG_SOLUTION 357 includeOptimalSol = 0;
367 SCIP_CONS **addedConss
370 std::list<BranchConsLinearInfoPtr> branchConsList;
372 int lNewConsNames = 0;
374 for(
int c = 0; c < nAddedConss; ++c )
376 SCIP_CONS* cons = addedConss[c];
377 assert(cons != NULL);
378 const char *conshdlrname = SCIPconshdlrGetName(SCIPconsGetHdlr(cons));
379 if( std::strcmp(conshdlrname,
"linear") != 0 )
continue;
382 SCIP_Bool success = FALSE;
384 SCIP_CALL_ABORT(SCIPgetConsNVars(scip,cons,&ncols, &success));
393 branchConsLinearInfo->
linearCoefs =
new double[ncols];
395 if( !SCIPisInfinity(scip, -SCIPgetLhsLinear(scip, cons)) )
397 lhs = SCIPgetLhsLinear(scip, addedConss[c]);
401 lhs = -SCIPinfinity(scip);
403 if( !SCIPisInfinity(scip, SCIPgetRhsLinear(scip, cons)) )
405 rhs = SCIPgetRhsLinear(scip, addedConss[c]);
409 rhs = SCIPinfinity(scip);
412 SCIP_VAR** vars = SCIPgetVarsLinear(scip, cons);
413 SCIP_Real* vals = SCIPgetValsLinear(scip, cons);
416 bool removeConss =
false;
417 for( i = 0; i < ncols; ++i )
419 SCIP_VAR *transformVar = vars[i];
420 SCIP_Real scalar = vals[i];
421 SCIP_Real constant = 0.0;
422 if( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) == SCIP_INVALIDDATA )
424 if( transformVar == NULL )
427 if( !SCIPisInfinity(scip, -SCIPgetLhsLinear(scip, cons)) )
431 if( !SCIPisInfinity(scip, SCIPgetRhsLinear(scip, cons)) )
455 assert( !SCIPisInfinity(scip, -SCIPgetLhsLinear(scip, cons)) == !SCIPisInfinity(scip, -lhs) );
456 assert( !SCIPisInfinity(scip, SCIPgetRhsLinear(scip, cons)) == !SCIPisInfinity(scip, rhs) );
459 branchConsLinearInfo->
consName =
new char[std::strlen(SCIPconsGetName(cons))+1];
460 lNewConsNames += ( std::strlen(SCIPconsGetName(cons)) + 1);
461 std::strcpy(branchConsLinearInfo->
consName, SCIPconsGetName(cons));
462 branchConsList.push_back(branchConsLinearInfo);
468 delete branchConsLinearInfo;
469 if( removeConss ==
true )
476 THROW_LOGICAL_ERROR1(
"Something wrong to make a branching linear constraint for original problem");
480 assert( static_cast<int>(branchConsList.size()) == (nLinearConss - nRemoved) );
484 int nParentConss = 0;
485 if( parentDiffSubproblem && parentDiffSubproblem->branchLinearConss )
489 if( nParentConss > 0 || branchConsList.size() > 0 )
493 if( nParentConss > 0 )
511 char *parentConsName = 0;
514 if( nParentConss > 0 )
516 parentConsName = parentDiffSubproblem->branchLinearConss->consNames;
518 for(; i < nParentConss; i++ )
530 std::strcpy(destConsName,parentConsName);
531 destConsName += (std::strlen(parentConsName) + 1);
532 parentConsName += (std::strlen(parentConsName) + 1);
536 int nNewBranchLinearConss = branchConsList.size();
537 for(; i < ( nParentConss + nNewBranchLinearConss ); i++ )
539 assert(!branchConsList.empty());
541 branchConsList.pop_front();
553 std::strcpy(destConsName, branchConsLinearInfo->consName);
554 destConsName += std::strlen(branchConsLinearInfo->consName) + 1;
555 delete [] branchConsLinearInfo->idxLinearCoefsVars;
556 delete [] branchConsLinearInfo->linearCoefs;
557 delete [] branchConsLinearInfo->consName;
558 delete branchConsLinearInfo;
570 SCIP_CONS **addedConss
573 std::list<BranchConsSetppcInfoPtr> branchConsList;
575 int lNewConsNames = 0;
577 for(
int c = 0; c < nAddedConss; ++c )
579 SCIP_CONS* cons = addedConss[c];
580 assert(cons != NULL);
581 const char *conshdlrname = SCIPconshdlrGetName(SCIPconsGetHdlr(cons));
582 if( std::strcmp(conshdlrname,
"setppc") != 0 )
continue;
585 SCIP_Bool success = FALSE;
587 SCIP_CALL_ABORT(SCIPgetConsNVars(scip,cons,&ncols, &success));
595 branchConsSetppcInfo->
setppcType = SCIPgetTypeSetppc(scip, cons);
598 SCIP_VAR** vars = SCIPgetVarsSetppc(scip, cons);
601 bool removeConss =
false;
602 for( i = 0; i < ncols; ++i )
604 SCIP_VAR *transformVar = vars[i];
605 SCIP_Real scalar = 1.0;
606 SCIP_Real constant = 0.0;
607 if( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) == SCIP_INVALIDDATA )
609 if( transformVar == NULL )
627 branchConsSetppcInfo->
idxSetppcVars[i] = SCIPvarGetIndex(transformVar);
633 branchConsSetppcInfo->
consName =
new char[std::strlen(SCIPconsGetName(cons))+1];
634 lNewConsNames += std::strlen(SCIPconsGetName(cons))+1;
635 std::strcpy(branchConsSetppcInfo->
consName, SCIPconsGetName(cons));
636 branchConsList.push_back(branchConsSetppcInfo);
641 delete branchConsSetppcInfo;
642 if( removeConss ==
true )
649 THROW_LOGICAL_ERROR1(
"Something wrong to make a branching linear constraint for original problem");
653 assert( static_cast<int>(branchConsList.size()) == (nSetppcConss - nRemoved) );
657 int nParentConss = 0;
658 if( parentDiffSubproblem && parentDiffSubproblem->branchSetppcConss )
662 if( nParentConss > 0 || branchConsList.size() > 0 )
666 if( nParentConss > 0 )
682 char *parentConsName = 0;
685 if( nParentConss > 0 )
687 parentConsName = parentDiffSubproblem->branchSetppcConss->consNames;
689 for(; i < nParentConss; i++ )
698 std::strcpy(destConsName,parentConsName);
699 destConsName += (std::strlen(parentConsName) + 1);
700 parentConsName += (std::strlen(parentConsName) + 1);
704 int nNewBranchSetppcConss = branchConsList.size();
705 for(; i < ( nParentConss + nNewBranchSetppcConss ); i++ )
707 assert(!branchConsList.empty());
709 branchConsList.pop_front();
717 std::strcpy(destConsName, branchConsSetppcInfo->consName);
718 destConsName += (std::strlen(branchConsSetppcInfo->consName) + 1);
719 delete [] branchConsSetppcInfo->idxSetppcVars;
720 delete [] branchConsSetppcInfo->consName;
721 delete branchConsSetppcInfo;
733 std::list<LocalNodeInfoPtr> localCutsList;
740 cuts = SCIPgetPoolCuts(scip);
741 ncuts = SCIPgetNPoolCuts(scip);
744 int *orgVarIndexies =
new int[scipParaSolver->
getNOrgVars()];
745 double *orgVarCoefficients =
new double[scipParaSolver->
getNOrgVars()];
747 for(
int c = 0; c < ncuts; ++c )
750 bool removeConss =
false;
751 row = SCIPcutGetRow(cuts[c]);
752 assert(!SCIProwIsLocal(row));
753 assert(!SCIProwIsModifiable(row));
754 if( SCIPcutGetAge(cuts[c]) == 0 && SCIProwIsInLP(row) )
761 cols = SCIProwGetCols(row);
762 ncols = SCIProwGetNNonz(row);
769 if( !SCIPisInfinity(scip, -SCIProwGetLhs(row)) )
771 lhs = SCIProwGetLhs(row) - SCIProwGetConstant(row);
775 lhs = -SCIPinfinity(scip);
777 if( !SCIPisInfinity(scip, SCIProwGetRhs(row)) )
779 rhs = SCIProwGetRhs(row) - SCIProwGetConstant(row);
783 rhs = SCIPinfinity(scip);
786 for(
int j = 0; j < scipParaSolver->
getNOrgVars(); j++ )
788 orgVarIndexies[j] = -1;
789 orgVarCoefficients[j] = 0.0;
791 SCIP_Real *vals = SCIProwGetVals(row);
792 for( i = 0; i < ncols; ++i )
795 SCIP_VAR *transformVar = SCIPcolGetVar(cols[i]);
796 SCIP_Real scalar = vals[i];
797 SCIP_Real constant = 0.0;
798 if( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) == SCIP_INVALIDDATA )
803 if( transformVar == NULL )
809 if( !SCIPisInfinity(scip, -SCIProwGetLhs(row)) )
813 if( !SCIPisInfinity(scip, SCIProwGetRhs(row)) )
833 index = SCIPvarGetIndex(transformVar);
836 assert( index >= 0 && index < scipParaSolver->getNOrgVars() );
837 if( orgVarIndexies[index] == -1 )
839 orgVarIndexies[index] = index;
840 orgVarCoefficients[index] = scalar;
844 orgVarCoefficients[index] += scalar;
845 std::cout <<
"*** Duplicate index = " << index <<
", value = " << scalar << std::endl;
850 assert( !SCIPisInfinity(scip, -SCIProwGetLhs(row)) == !SCIPisInfinity(scip, -lhs) );
851 assert( !SCIPisInfinity(scip, SCIProwGetRhs(row)) == !SCIPisInfinity(scip, rhs) );
853 for (
int j = 0; j < scipParaSolver->
getNOrgVars(); j++ )
855 if( orgVarIndexies[j] >= 0 )
858 localNodeInfo->
linearCoefs[nRowCols] = orgVarCoefficients[j];
862 assert( nRowCols > 0 );
867 localCutsList.push_back(localNodeInfo);
873 delete localNodeInfo;
874 if( removeConss ==
true )
886 delete [] orgVarIndexies;
887 delete [] orgVarCoefficients;
894 int nParentConss = 0;
895 if( parentDiffSubproblem && parentDiffSubproblem->
linearConss )
900 if( conflictConsList ) nConflicts += conflictConsList->size();
901 if( nParentConss > 0 || nConflicts > 0 || localCutsList.size() > 0 )
915 for(; i < nParentConss; i++ )
929 int nLocalCuts = localCutsList.size();
930 for(; i < ( nParentConss + nLocalCuts ); i++ )
932 assert(!localCutsList.empty());
934 localCutsList.pop_front();
945 delete [] cutInfo->idxLinearCoefsVars;
946 delete [] cutInfo->linearCoefs;
950 if( i < linearConss->nLinearConss )
952 assert( conflictConsList );
953 std::list<LocalNodeInfoPtr>::iterator pos;
954 pos = conflictConsList->begin();
957 assert( pos != conflictConsList->end() );
974 #if SCIP_APIVERSION > 39 975 std::list<LocalNodeInfoPtr> bendersCutsList;
979 int nVars = SCIPgetNVars(scip);
980 SCIP_Var **vars =
new SCIP_Var*[nVars];
981 SCIP_Real *values =
new SCIP_Real[nVars];
982 int nActiveBenders = SCIPgetNActiveBenders(scip);
983 SCIP_BENDERS** benders = SCIPgetBenders(scip);
985 for(
int i = 0; i < nActiveBenders; i++ )
987 int nCuts = SCIPbendersGetNStoredCuts(benders[i]);
988 for (
int cutidx = 0; cutidx < nCuts; cutidx++ )
993 SCIP_CALL_ABORT( SCIPbendersGetStoredCutOrigData(benders[i], cutidx, &vars, &values, &lhs, &rhs, &nVarsInCut, nVars) );
994 assert(nVarsInCut <= nVars);
998 localNodeInfo->
linearCoefs =
new double[nVarsInCut];
999 for(
int j = 0; j < nVarsInCut; j++ )
1013 bendersCutsList.push_back(localNodeInfo);
1026 if( nParentConss > 0 || bendersCutsList.size() > 0 )
1040 for(; i < nParentConss; i++ )
1054 int nBendersCuts = bendersCutsList.size();
1055 for(; i < ( nParentConss + nBendersCuts ); i++ )
1057 assert(!bendersCutsList.empty());
1059 bendersCutsList.pop_front();
1070 delete [] cutInfo->idxLinearCoefsVars;
1071 delete [] cutInfo->linearCoefs;
1089 for(
int i = 0; i < SCIPgetNConshdlrs(scip); ++i )
1091 SCIP_CONSHDLR* conshdlr = SCIPgetConshdlrs(scip)[i];
1092 int nactiveconss = SCIPconshdlrGetNActiveConss(conshdlr);
1093 if( nactiveconss > 0
1094 && std::string(SCIPconshdlrGetName(conshdlr)) == std::string(
"bounddisjunction") )
1097 SCIP_CONS **conss = SCIPconshdlrGetConss(conshdlr);
1114 for(
int c = 0; c < nactiveconss; c++ )
1133 SCIP_VAR **vars = SCIPgetVarsBounddisjunction(scip, conss[c]);
1134 SCIP_BOUNDTYPE *types = SCIPgetBoundtypesBounddisjunction(scip, conss[c]);
1135 SCIP_Real *bounds = SCIPgetBoundsBounddisjunction(scip, conss[c]);
1138 if( SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_MULTAGGR )
1142 SCIP_VAR *transformVar = vars[v];
1143 SCIP_Real scalar = 1.0;
1144 SCIP_Real constant = 0.0;
1145 SCIP_CALL_ABORT( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) );
1235 SCIP_CALL_ABORT( SCIPgetVarsData(scip, &vars, &nvars, &nbinvars, &nintvars, NULL, NULL) );
1236 int ngenvars = nbinvars+nintvars;
1250 for(
int i = 0; i < ngenvars; ++i )
1252 assert( SCIPvarGetType(vars[i]) == SCIP_VARTYPE_BINARY || SCIPvarGetType(vars[i]) == SCIP_VARTYPE_INTEGER );
1253 SCIP_VAR *transformVar = vars[i];
1254 SCIP_Real scalar = 1.0;
1255 SCIP_Real constant = 0.0;
1256 SCIP_CALL_ABORT( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) );
1281 SCIP_BRANCHDIR branchdir1;
1282 SCIP_BRANCHDIR branchdir2;
1285 branchdir1 = SCIP_BRANCHDIR_DOWNWARDS;
1286 branchdir2 = SCIP_BRANCHDIR_UPWARDS;
1290 branchdir1 = SCIP_BRANCHDIR_UPWARDS;
1291 branchdir2 = SCIP_BRANCHDIR_DOWNWARDS;
1320 SCIP_CALL_ABORT( SCIPgetVarsData(scip, &vars, &nvars, &nbinvars, &nintvars, NULL, NULL) );
1321 int ngenvars = nbinvars+nintvars;
1344 for(
int i = 0; i < ngenvars; i++ )
1346 assert( SCIPvarGetType(vars[i]) == SCIP_VARTYPE_BINARY || SCIPvarGetType(vars[i]) == SCIP_VARTYPE_INTEGER );
1348 SCIP_VAR *transformVar = vars[i];
1349 SCIP_Real scalar = 1.0;
1350 SCIP_Real constant = 0.0;
1351 SCIP_CALL_ABORT( SCIPvarGetOrigvarSum(&transformVar, &scalar, &constant ) );
1356 SCIP_VALUEHISTORY* valuehistory = SCIPvarGetValuehistory(vars[i]);
1357 if( valuehistory != NULL )
1359 SCIP_HISTORY** histories;
1362 histories = SCIPvaluehistoryGetHistories(valuehistory);
1363 values = SCIPvaluehistoryGetValues(valuehistory);
1441 SCIP_CALL_ABORT( SCIPgetVarsData(scip, &vars, &nvars, &nbinvars, &nintvars, NULL, NULL) );
1442 int ngenvars = nbinvars+nintvars;
1455 for(
int i = 0; i < ngenvars; ++i )
1457 assert( SCIPvarGetType(vars[i]) == SCIP_VARTYPE_BINARY || SCIPvarGetType(vars[i]) == SCIP_VARTYPE_INTEGER );
1474 ScipParaDiffSubproblem::write(
1475 gzstream::ogzstream &out
1483 #ifdef UG_SCIP_V31_CHECK_POINT_FILES 1490 out.write((
char *)&
branchBounds[i],
sizeof(SCIP_Real));
1491 out.write((
char *)&
boundTypes[i],
sizeof(
int));
1511 out.write((
char *)&dummyZero,
sizeof(
int));
1536 out.write((
char *)&dummyZero,
sizeof(
int));
1537 out.write((
char *)&dummyZero,
sizeof(
int));
1543 out.write((
char *)&localInfoIncluded,
sizeof(
int));
1544 out.write((
char *)&nBoundChanges,
sizeof(
int));
1548 out.write((
char *)&
branchBounds[i],
sizeof(SCIP_Real));
1549 out.write((
char *)&
boundTypes[i],
sizeof(
int));
1572 out.write((
char *)&dummyZero,
sizeof(
int));
1593 out.write((
char *)&dummyZero,
sizeof(
int));
1614 out.write((
char *)&dummyZero,
sizeof(
int));
1644 out.write((
char *)&dummyZero,
sizeof(
int));
1670 out.write((
char *)&dummyZero,
sizeof(
int));
1671 out.write((
char *)&dummyZero,
sizeof(
int));
1702 out.write((
char *)&dummyZero,
sizeof(
int));
1707 #ifdef UG_DEBUG_SOLUTION 1708 out.write((
char *)&includeOptimalSol,
sizeof(
int));
1716 gzstream::igzstream &in,
1717 bool onlyBoundChanges
1724 #ifdef UG_SCIP_V31_CHECK_POINT_FILES 1728 if( nBoundChanges > 0 )
1738 in.read((
char *)&
boundTypes[i],
sizeof(
int));
1741 if( !onlyBoundChanges )
1743 in.read((
char *)&dummyInt1,
sizeof(
int));
1769 in.read((
char *)&dummyInt1,
sizeof(
int));
1770 in.read((
char *)&dummyInt2,
sizeof(
int));
1807 SCIP_Real dummyReal;
1810 in.read((
char *)&nConss,
sizeof(
int));
1813 for(
int i = 0; i < nConss; i++ )
1816 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1817 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1818 in.read((
char *)&nCoefs,
sizeof(
int));
1820 for(
int j = 0; j < nCoefs; j++ )
1822 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1823 in.read((
char *)&dummyInt,
sizeof(
int));
1829 in.read((
char *)&dummyInt,
sizeof(
int));
1830 in.read((
char *)&nStats,
sizeof(
int));
1832 for(
int i = 0; i < nStats; i++ )
1834 in.read((
char *)&dummyInt,
sizeof(
int));
1835 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1836 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1837 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1838 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1839 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1840 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1841 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1842 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1843 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1844 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
1850 in.read((
char *)&localInfoIncluded,
sizeof(
int));
1851 in.read((
char *)&nBoundChanges,
sizeof(
int));
1852 if( nBoundChanges > 0 )
1862 in.read((
char *)&
boundTypes[i],
sizeof(
int));
1865 in.read((
char *)&dummyInt1,
sizeof(
int));
1895 in.read((
char *)&dummyInt1,
sizeof(
int));
1920 if( !onlyBoundChanges )
1922 in.read((
char *)&dummyInt1,
sizeof(
int));
1948 in.read((
char *)&dummyInt1,
sizeof(
int));
1997 in.read((
char *)&dummyInt1,
sizeof(
int));
1998 in.read((
char *)&dummyInt2,
sizeof(
int));
2031 in.read((
char *)&dummyInt1,
sizeof(
int));
2082 SCIP_Real dummyReal;
2085 in.read((
char *)&nConss,
sizeof(
int));
2088 for(
int i = 0; i < nConss; i++ )
2091 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2092 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2093 in.read((
char *)&nCoefs,
sizeof(
int));
2095 for(
int j = 0; j < nCoefs; j++ )
2097 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2098 in.read((
char *)&dummyInt,
sizeof(
int));
2104 SCIP_Bool bBool = 0;
2105 SCIP_Real bReal = 0.0;
2106 SCIP_BOUNDTYPE bType = SCIP_BOUNDTYPE_LOWER;
2107 in.read((
char *)&nBTemp,
sizeof(
int));
2110 in.read((
char *)&bInt,
sizeof(
int));
2111 for(
int i = 0; i < nBTemp; i++ )
2114 in.read((
char *)&nBtemp2,
sizeof(
int));
2115 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2116 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2117 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2118 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2119 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2120 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2121 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2122 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2123 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2124 in.read((
char *)&bBool,
sizeof(SCIP_Bool));
2127 for(
int j = 0; j < nBtemp2; j++ )
2129 in.read((
char *)&bInt,
sizeof(
int));
2130 in.read((
char *)&bType,
sizeof(SCIP_BOUNDTYPE));
2131 in.read((
char *)&bReal,
sizeof(SCIP_Real));
2140 in.read((
char *)&dummyInt,
sizeof(
int));
2141 in.read((
char *)&nStats,
sizeof(
int));
2145 for(
int i = 0; i < nStats; i++ )
2147 in.read((
char *)&dummyInt,
sizeof(
int));
2148 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2149 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2150 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2151 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2152 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2153 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2154 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2155 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2156 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2157 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2161 in.read((
char *)&nTemp1,
sizeof(
int));
2164 in.read((
char *)&dummyInt,
sizeof(
int));
2165 for(
int i = 0; i < nTemp1; i++)
2168 in.read((
char *)&dummyInt,
sizeof(
int));
2169 in.read((
char *)&nTemp2,
sizeof(
int));
2172 for(
int j = 0; j < nTemp2; j++ )
2174 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2175 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2176 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2177 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2178 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2179 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2180 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2181 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2182 in.read((
char *)&dummyReal,
sizeof(SCIP_Real));
2190 #ifdef UG_DEBUG_SOLUTION 2191 in.read((
char *)&includeOptimalSol,
sizeof(
int));
2194 #endif // End of UG_WITH_ZLIB 2215 if( probindex < 0 )
continue;
2217 switch( static_cast<SCIP_VARTYPE>(scipInstance->
getVarType( probindex ) ) )
2219 case SCIP_VARTYPE_BINARY:
2228 for( k = 0 ; k < n; k++ )
2234 (*fixedVars)[n].nSameValue = 0;
2237 (*fixedVars)[n].mnode = 0;
2238 (*fixedVars)[n].next = 0;
2239 (*fixedVars)[n].prev = 0;
2242 case SCIP_VARTYPE_INTEGER:
2243 case SCIP_VARTYPE_IMPLINT:
2244 case SCIP_VARTYPE_CONTINUOUS:
2260 if( j >= nBoundChanges )
break;
2278 if( j >= nBoundChanges )
break;
2281 for(k = 0; k < n; k++ )
2287 (*fixedVars)[n].nSameValue = 0;
2290 (*fixedVars)[n].mnode = 0;
2291 (*fixedVars)[n].next = 0;
2292 (*fixedVars)[n].prev = 0;
2302 delete [] *fixedVars;
2318 int nNewBranches = 0;
2323 if( initiator && dynamic_cast<ScipParaInitiator*>(initiator)->areTightenedVarBounds() )
2330 bool updated =
false;
2331 for(
int j = 0; j < n; j++ )
2371 for(
int j = 0; j < n; j++ )
2385 #ifdef UG_DEBUG_SOLUTION 2386 diffSubproblem->includeOptimalSol = includeOptimalSol;
2388 return diffSubproblem;
2396 std::ostringstream s;
2403 s <<
"branchBounds[" << i <<
"] = " <<
branchBounds[i] << std::endl;
2404 s <<
"boudTypes[" << i <<
"] = " <<
static_cast<int>(
boundTypes[i]) << std::endl;
2480 s <<
"varValue[" << i <<
"][" << j <<
"] = " <<
varValues->
varValue[i][j] << std::endl;
int ** idxLinearCoefsVars
double getOrgVarLb(int i)
int getOriginalIndex(int index)
SCIP_Bool * flagBoundDisjunctionEnforce
ParaInstance extenstion for SCIP solver.
static ScipParaCommTh * comm
#define DEFAULT_NUM_EPSILON
SCIP_BOUNDTYPE getBoundType(int i)
ParaInitialStat extension for SCIP solver.
SCIP_Bool * flagBoundDisjunctionLocal
SCIP_Bool * flagBoundDisjunctionStickingatnode
ScipParaDiffSubproblemVarValues * varValues
int getOrigProbIndex(int index)
int nTotalVarsBoundDisjunctions
bool isOriginalIndeciesMap()
bool isRootTask()
check if root task or not
SCIP_Bool * flagBoundDisjunctionRemovable
ScipParaDiffSubproblemBoundDisjunctions * boundDisjunctions
double getTightenedVarLbs(int i)
get tightened variable lower bound TODO: this function should be in inherited class ...
void updateNTransferredLocalCuts(int n)
update number of transferred local cuts
SCIP_Real ** varValueUpconflen
void updateNTransferredBendersCuts(int n)
update number of transferred benders cuts
bool isRacingStage()
check if Solver is in racing stage or not
SCIP_Bool * flagBoundDisjunctionSeparate
ScipParaDiffSubproblemLinearCons * linearConss
double getOrgVarUb(int i)
static const int TransferVarValueStats
int ** idxLinearCoefsVars
void addLocalNodeInfo(SCIP *scip, ScipParaSolver *scipParaSolver)
static const int TransferLocalCuts
SCIP_Real ** boundsBoundDisjunction
double getTightenedVarUbs(int i)
get tightened variable upper bound TODO: this function should be in inherited class ...
ParaSolver extension for SCIP: Parallelized solver implementation for SCIP.
BbParaDiffSubproblem * createDiffSubproblem(UG::ParaComm *comm, UG::ParaInitiator *initiator, int n, UG::BbParaFixedVariable *fixedVars)
SCIP_BOUNDTYPE * boundTypes
SCIP_Real getVarLb(int i)
ParaTask * getCurrentNode()
get current ParaNode object
SCIP_Real ** varValueUpinfer
void addBranchLinearConss(SCIP *scip, ScipParaSolver *scipParaSolver, int nLenarConss, int nAddedConss, SCIP_CONS **addedConss)
static const int NoSolverPresolvingAtRoot
const std::string toString()
SCIP_Bool * flagBoundDisjunctionPropagate
#define THROW_LOGICAL_ERROR1(msg1)
Base class of communicator for UG Framework.
SCIP_Real ** varValueDowninfer
struct ParaSCIP::LocalNodeInfo_t LocalNodeInfo
SCIP_Bool * flagBoundDisjunctionInitial
ScipParaDiffSubproblem * getParentDiffSubproblem()
SCIP_Real ** varValueDowncutoff
Class for the difference between instance and subproblem.
static const int TransferBendersCuts
static const int TransferConflictCuts
SCIP_Bool * flagBoundDisjunctionDynamic
virtual ParaDiffSubproblem * createParaDiffSubproblem()
create ParaDiffSubproblem object by default constructor
void addInitialBranchVarStats(int minDepth, int maxDepth, SCIP *scip)
#define THROW_LOGICAL_ERROR2(msg1, msg2)
void read(ParaComm *comm, const char *filename)
read ParaParams from file
int getFixedVariables(UG::ParaInstance *instance, UG::BbParaFixedVariable **fixedVars)
std::list< LocalNodeInfoPtr > * getConflictConsList()
ScipParaDiffSubproblemVarBranchStats * varBranchStats
static const int TransferConflicts
struct ParaSCIP::BranchConsLinearInfo_t BranchConsLinearInfo
void addVarValueStats(SCIP *scip, ScipParaSolver *scipParaSolver)
bool isOriginalIndeciesMap()
static const int TransferBranchStats
SCIP_Bool * flagBoundDisjunctionModifiable
SCIP_Real ** varValueDownvsids
struct ParaSCIP::BranchConsSetppcInfo_t BranchConsSetppcInfo
SCIP_BOUNDTYPE ** boundTypesBoundDisjunction
SCIP_Bool * flagBoundDisjunctionCheck
void addBoundDisjunctions(SCIP *scip, ScipParaSolver *scipParaSolver)
int ** idxBoundDisjunctionVars
static const int RacingStatBranching
ScipParaDiffSubproblemBranchLinearCons * branchLinearConss
ParaInitiator extension for SCIP solver.
void addBranchVarStats(SCIP *scip, ScipParaSolver *scipParaSolver)
int * indicesAmongSolvers
ParaParamSet * getParaParamSet()
get ParaParamSet object
bool isCopyIncreasedVariables()
void addBranchSetppcConss(SCIP *scip, ScipParaSolver *scipParaSolver, int nSetpartConss, int nAddedConss, SCIP_CONS **addedConss)
SCIP_Real getBranchBound(int i)
ScipParaDiffSubproblemLinearCons * bendersLinearConss
SCIP_Real ** varValueUpcutoff
Base class of communicator object.
SCIP_Real ** varValueDownconflen
SCIP_Real getVarUb(int i)
ScipParaDiffSubproblemBranchSetppcCons * branchSetppcConss
int * nVarsBoundDisjunction
bool getBoolParamValue(int param)
for bool parameters
SCIP_Real ** varVlaueUpvsids