43#define getcwd(X, Y) _getcwd(X, Y)
49#include "scip/scipdefplugins.h"
50#include "scip/reader_lp.h"
51#include "scip/cons_knapsack.h"
52#include "scip/cons_linear.h"
53#include "scip/cons_logicor.h"
54#include "scip/cons_setppc.h"
55#include "scip/cons_varbound.h"
56#include "scip/cons_bounddisjunction.h"
57#include "scip/cons_sos1.h"
58#include "scip/cons_sos2.h"
59#include "scip/pub_misc.h"
86 assert( SCIPvarGetIndex((SCIP_VAR*) key) >= 0 );
87 return (
unsigned int) SCIPvarGetIndex((SCIP_VAR*) key);
91ScipParaInstance::allocateMemoryForOrdinaryConstraints(
170 lConsNames += strlen( SCIPconsGetName(cons) )+ 1;
184 int nvars = SCIPgetNVarsLinear(
scip, cons);
188 SCIP_Real *coefs = SCIPgetValsLinear(
scip, cons);
189 SCIP_VAR **vars = SCIPgetVarsLinear(
scip, cons);
190 for(
int v = 0; v < nvars; ++v)
203 SCIP_VAR **vars = SCIPgetVars(
scip);
212 SCIP_CALL_ABORT( SCIPcreateConsLinear(
scip, &cons,
214 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
215 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
216 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
217 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
218 delete [] varsInCons;
234 int nvars = SCIPgetNVarsSetppc(
scip,cons);
238 SCIP_VAR **vars = SCIPgetVarsSetppc(
scip, cons);
239 for(
int v = 0; v < nvars; ++v)
251 SCIP_VAR **vars = SCIPgetVars(
scip);
262 case SCIP_SETPPCTYPE_PARTITIONING:
263 SCIP_CALL_ABORT( SCIPcreateConsSetpart(
scip, &cons,
265 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
267 case SCIP_SETPPCTYPE_PACKING:
268 SCIP_CALL_ABORT( SCIPcreateConsSetpack(
scip, &cons,
270 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
272 case SCIP_SETPPCTYPE_COVERING:
273 SCIP_CALL_ABORT( SCIPcreateConsSetcover(
scip, &cons,
275 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
280 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
281 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
282 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
283 delete [] varsInCons;
299 int nvars = SCIPgetNVarsLogicor(
scip, cons);
303 SCIP_VAR **vars = SCIPgetVarsLogicor(
scip, cons);
304 for(
int v = 0; v < nvars; ++v )
306 if( SCIPvarIsActive(vars[v]) )
308 else if( SCIPvarIsNegated(vars[v]) )
321 SCIP_VAR **vars = SCIPgetVars(
scip);
334 SCIP_CALL_ABORT( SCIPgetNegatedVar(
scip, vars[-(
idxLogicorVars[c][v] + 1)], &varsInCons[v]) );
341 SCIP_CALL_ABORT( SCIPcreateConsLogicor(
scip, &cons,
343 TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
344 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
345 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
346 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
348 delete [] varsInCons;
365 int nvars = SCIPgetNVarsKnapsack(
scip, cons);
369 SCIP_Longint *weights = SCIPgetWeightsKnapsack(
scip, cons);
370 SCIP_VAR **vars = SCIPgetVarsKnapsack(
scip,cons);
371 for(
int v = 0; v < nvars; ++v )
385 SCIP_VAR **vars = SCIPgetVars(
scip);
394 SCIP_CALL_ABORT( SCIPcreateConsKnapsack(
scip, &cons,
396 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
397 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
398 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
399 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
400 delete [] varsInCons;
429 SCIP_VAR **vars = SCIPgetVars(
scip);
435 SCIP_CALL_ABORT( SCIPcreateConsVarbound(
scip, &cons,
437 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
438 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
439 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
440 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
460 SCIP_VAR **vars = SCIPgetVarsBounddisjunction (
scip, cons );
461 SCIP_BOUNDTYPE *boundTypes = SCIPgetBoundtypesBounddisjunction(
scip, cons );
462 SCIP_Real *bounds = SCIPgetBoundsBounddisjunction(
scip, cons );
477 SCIP_VAR **vars = SCIPgetVars(
scip);
489 SCIP_CALL_ABORT( SCIPcreateConsBounddisjunction(
scip, &cons,
492 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
493 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
494 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
495 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
511 int nvars = SCIPgetNVarsSOS1(
scip, cons);
515 SCIP_Real *weights = SCIPgetWeightsSOS1(
scip, cons);
516 SCIP_VAR **vars = SCIPgetVarsSOS1(
scip,cons);
517 for(
int v = 0; v < nvars; v++ )
531 SCIP_VAR **vars = SCIPgetVars(
scip);
535 SCIP_VAR **varsInCons =
new SCIP_VAR*[
nSos1Coefs[c]];
540 SCIP_CALL_ABORT( SCIPcreateConsSOS1(
scip, &cons,
542 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE ) );
543 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
544 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
545 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
546 delete [] varsInCons;
560 int nvars = SCIPgetNVarsSOS2(
scip, cons);
564 SCIP_Real *weights = SCIPgetWeightsSOS2(
scip, cons);
565 SCIP_VAR **vars = SCIPgetVarsSOS2(
scip,cons);
566 for(
int v = 0; v < nvars; v++ )
580 SCIP_VAR **vars = SCIPgetVars(
scip);
584 SCIP_VAR **varsInCons =
new SCIP_VAR*[
nSos2Coefs[c]];
589 SCIP_CALL_ABORT( SCIPcreateConsSOS2(
scip, &cons,
591 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE ) );
592 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
593 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
594 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
595 delete [] varsInCons;
609 SCIP_Bool transformed
615 assert(
scip != NULL );
616 assert( vars != NULL );
617 assert( scalars != NULL );
618 assert( nvars != NULL );
619 assert( constant != NULL );
623#if SCIP_APIVERSION >= 128
624 SCIP_CALL_ABORT( SCIPgetProbvarLinearSum(
scip, vars, scalars, nvars, *nvars, constant, &requiredsize) );
626 SCIP_CALL_ABORT( SCIPgetProbvarLinearSum(
scip, vars, scalars, nvars, *nvars, constant, &requiredsize, TRUE) );
629 if( requiredsize > *nvars )
631 *nvars = requiredsize;
632 SCIP_CALL_ABORT( SCIPreallocBufferArray(
scip, &vars, *nvars ) );
633 SCIP_CALL_ABORT( SCIPreallocBufferArray(
scip, &scalars, *nvars ) );
635#if SCIP_APIVERSION >= 128
636 SCIP_CALL_ABORT( SCIPgetProbvarLinearSum(
scip, vars, scalars, nvars, *nvars, constant, &requiredsize) );
638 SCIP_CALL_ABORT( SCIPgetProbvarLinearSum(
scip, vars, scalars, nvars, *nvars, constant, &requiredsize, TRUE) );
640 assert( requiredsize <= *nvars );
645 for( v = 0; v < *nvars; ++v )
646 SCIP_CALL_ABORT( SCIPvarGetOrigvarSum(&vars[v], &scalars[v], constant) );
658 int* nAggregatedVars,
659 SCIP_VAR*** aggregatedVars,
660 SCIP_HASHTABLE** varAggregated
666 for (j = 0; j < nvars; ++j)
668 SCIP_VARSTATUS status;
672 status = SCIPvarGetStatus(var);
675 if( status >= SCIP_VARSTATUS_AGGREGATED )
677 assert( status == SCIP_VARSTATUS_AGGREGATED ||
678 status == SCIP_VARSTATUS_MULTAGGR ||
679 status == SCIP_VARSTATUS_NEGATED );
681 if ( ! SCIPhashtableExists(*varAggregated, (
void*) var) )
683 (*aggregatedVars)[(*nAggregatedVars)++] = var;
684 SCIP_CALL_ABORT( SCIPhashtableInsert(*varAggregated, (
void*) var) );
694 const char* constName,
712 for(v = 0; v < nvars - 1; ++v)
727 SCIP_VAR** aggregatedVars
730 SCIP_VAR** activevars;
731 SCIP_Real* activevals;
733 SCIP_Real activeconstant = 0.0;
736 assert(
scip != NULL );
739 SCIP_CALL_ABORT( SCIPallocBufferArray(
scip, &activevars, nvars) );
740 SCIP_CALL_ABORT( SCIPallocBufferArray(
scip, &activevals, nvars) );
745 for(
int j = 0; j < nAggregatedVars; j++ )
748 (void) SCIPsnprintf(consname,
UG::LpMaxNamelen,
"aggr_%s", SCIPvarGetName(aggregatedVars[j]));
752 if( nAggregatedVars )
763 for (
int j = 0; j < nAggregatedVars; ++j)
768 activevars[0] = aggregatedVars[j];
770 activeconstant = 0.0;
775 activevals[nactivevars] = -1.0;
776 activevars[nactivevars] = aggregatedVars[j];
780 (void) SCIPsnprintf(consname,
UG::LpMaxNamelen,
"aggr_%s", SCIPvarGetName(aggregatedVars[j]));
786 SCIPfreeBufferArray(
scip, &activevars);
787 SCIPfreeBufferArray(
scip, &activevals);
795 SCIP_VAR **vars = SCIPgetVars(
scip);
808 TRUE, FALSE, NULL, NULL, NULL, NULL, NULL) );
809 SCIP_CALL_ABORT( SCIPaddVar(
scip, newvar) );
813 varsInCons[v] = newvar;
814 assert( SCIPvarGetProbindex(newvar) == (
nVars + c) );
815 SCIP_CALL_ABORT( SCIPreleaseVar(
scip, &newvar) );
817 SCIP_CALL_ABORT( SCIPcreateConsLinear(
scip, &cons,
819 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) );
820 SCIP_CALL_ABORT( SCIPaddCons(
scip, cons) );
821 SCIPdebug( SCIP_CALL_ABORT( SCIPprintCons(
scip, cons, NULL) ) );
822 SCIP_CALL_ABORT( SCIPreleaseCons(
scip, &cons) );
823 delete [] varsInCons;
831 ) : orgScip(0), paraInstanceScip(0), lProbName(0), probName(0), nCopies(0), origObjSense(0), objScale(0.0), objOffset(0.0), nVars(0), varIndexRange(0),
832 varLbs(0), varUbs(0), objCoefs(0), varTypes(0), lVarNames(0), varNames(0),
833 posVarNames(0), mapToOriginalIndecies(0), mapToSolverLocalIndecies(0),
834 nConss(0), lConsNames(0), consNames(0),
835 posConsNames(0), copyIncreasedVariables(false),
836 nLinearConss(0), idxLinearConsNames(0), linearLhss(0),
837 linearRhss(0), nLinearCoefs(0), linearCoefs(0), idxLinearCoefsVars(0),
838 nSetppcConss(0), idxSetppcConsNames(0), nIdxSetppcVars(0), setppcTypes(0),
839 idxSetppcVars(0), nLogicorConss(0), idxLogicorConsNames(0), nIdxLogicorVars(0), idxLogicorVars(0),
840 nKnapsackConss(0), idxKnapsackConsNames(0), capacities(0), nLKnapsackCoefs(0),
841 knapsackCoefs(0), idxKnapsackCoefsVars(0),
842 nVarboundConss(0), idxVarboundConsNames(0), varboundLhss(0),varboundRhss(0), idxVarboundCoefVar1s(0),
843 varboundCoef2s(0), idxVarboundCoefVar2s(0),
844 nVarBoundDisjunctionConss(0), idxBoundDisjunctionConsNames(0), nVarsBoundDisjunction(0),
845 idxVarBoundDisjunction(0), boundTypesBoundDisjunction(0), boundsBoundDisjunction(0),
846 nSos1Conss(0),idxSos1ConsNames(0), nSos1Coefs(0), sos1Coefs(0), idxSos1CoefsVars(0),
847 nSos2Conss(0), idxSos2ConsNames(0), nSos2Coefs(0), sos2Coefs(0), idxSos2CoefsVars(0),
848 nAggregatedConss(0), lAggregatedVarNames(0), aggregatedVarNames(0), posAggregatedVarNames(0),
849 lAggregatedConsNames(0), aggregatedConsNames(0), posAggregatedConsNames(0),
850 aggregatedLhsAndLhss(0), nAggregatedCoefs(0), aggregatedCoefs(0), idxAggregatedCoefsVars(0),
853 assert(
scip != NULL );
854 assert( SCIPgetStage(
scip) == SCIP_STAGE_TRANSFORMED ||
855 SCIPgetStage(
scip) == SCIP_STAGE_PRESOLVED ||
856 SCIPgetStage(
scip) == SCIP_STAGE_SOLVING ||
857 SCIPgetStage(
scip) == SCIP_STAGE_SOLVED );
874 if( SCIPgetStage(
scip) == SCIP_STAGE_TRANSFORMED || SCIPgetStage(
scip) == SCIP_STAGE_SOLVED )
return;
886 SCIP_VAR **vars = SCIPgetVars(
scip);
894 for(
int v = 0; v <
nVars; ++v)
897 objCoefs[v] = SCIPvarGetObj(vars[v]);
898 assert(SCIPvarGetProbindex(vars[v])!=-1);
899 assert(SCIPvarGetProbindex(vars[v]) == v);
900 lVarNames += strlen(SCIPvarGetName(vars[v])) + 1;
906 for(
int v = 0; v <
nVars; ++v )
908 SCIP_VAR *var = vars[v];
910 varLbs[SCIPvarGetProbindex(var)] = SCIPvarGetLbLocal(var);
911 varUbs[SCIPvarGetProbindex(var)] = SCIPvarGetUbLocal(var);
912 varTypes[SCIPvarGetProbindex(var)] = SCIPvarGetType(var);
924 SCIP_CONS **conss = SCIPgetConss(
scip);
930 int tempSizeConsNames = 0;
932 for(
int c = 0; c <
nConss; c++ )
934 tempSizeConsNames += strlen(SCIPconsGetName(conss[c])) + 1;
936 if( tempSizeConsNames > 0 )
941 SCIP_CONS** consSOS1;
942 SCIP_CONS** consSOS2;
947 SCIP_CALL_ABORT( SCIPallocBufferArray(
scip, &consSOS1,
nConss) );
948 SCIP_CALL_ABORT( SCIPallocBufferArray(
scip, &consSOS2,
nConss) );
951 const char* conshdlrname;
952 SCIP_CONSHDLR* conshdlr;
954 int nNotInitialActiveConss = 0;
957 for (
int c = 0; c <
nConss; ++c)
960 assert( cons != NULL);
963 if( !SCIPconsIsEnabled(cons) )
966 conshdlr = SCIPconsGetHdlr(cons);
967 assert( conshdlr != NULL );
969 if( SCIPconshdlrGetStartNActiveConss(conshdlr) > 0 )
971 conshdlrname = SCIPconshdlrGetName(conshdlr);
972 assert( SCIPconsIsTransformed(cons) );
974 if( strcmp(conshdlrname,
"linear") == 0 )
978 else if( strcmp(conshdlrname,
"setppc") == 0 )
982 else if ( strcmp(conshdlrname,
"logicor") == 0 )
986 else if ( strcmp(conshdlrname,
"knapsack") == 0 )
990 else if ( strcmp(conshdlrname,
"varbound") == 0 )
994 else if ( strcmp(conshdlrname,
"bounddisjunction") == 0 )
998 else if ( strcmp(conshdlrname,
"SOS1") == 0 )
1002 else if ( strcmp(conshdlrname,
"SOS2") == 0 )
1008 THROW_LOGICAL_ERROR3(
"constraint handler <", conshdlrname,
"> can not print requested format");
1013 nNotInitialActiveConss++;
1030 nNotInitialActiveConss = 0;
1034 for (
int c = 0; c <
nConss; ++c)
1039 if( !SCIPconsIsEnabled(cons) )
1042 conshdlr = SCIPconsGetHdlr(cons);
1044 if( SCIPconshdlrGetStartNActiveConss(conshdlr) > 0 )
1046 conshdlrname = SCIPconshdlrGetName(conshdlr);
1048 if( strcmp(conshdlrname,
"linear") == 0 )
1052 else if( strcmp(conshdlrname,
"setppc") == 0 )
1056 else if ( strcmp(conshdlrname,
"logicor") == 0 )
1060 else if ( strcmp(conshdlrname,
"knapsack") == 0 )
1064 else if ( strcmp(conshdlrname,
"varbound") == 0 )
1068 else if ( strcmp(conshdlrname,
"bounddisjunction") == 0 )
1072 else if ( strcmp(conshdlrname,
"SOS1") == 0 )
1076 else if ( strcmp(conshdlrname,
"SOS2") == 0 )
1083 nNotInitialActiveConss++;
1089 SCIP_VAR** aggregatedVars;
1090 int nAggregatedVars = 0;
1091 SCIP_HASHTABLE* varAggregated;
1094 SCIP_CALL_ABORT( SCIPallocBufferArray(
scip, &aggregatedVars,
nVars) );
1095 SCIP_CALL_ABORT( SCIPhashtableCreate(&varAggregated, SCIPblkmem(
scip), 1000, hashGetKeyVar, hashKeyEqVar, hashKeyValVar,
1102 SCIP_VAR **consvars = SCIPgetVarsSOS1(
scip, cons);
1103 int nconsvars = SCIPgetNVarsSOS1(
scip, cons);
1112 SCIP_VAR **consvars = SCIPgetVarsSOS2(
scip, cons);
1113 int nconsvars = SCIPgetNVarsSOS2(
scip, cons);
1122 SCIPfreeBufferArray(
scip, &aggregatedVars);
1123 SCIPhashtableFree(&varAggregated);
1126 SCIPfreeBufferArray(
scip, &consSOS1);
1127 SCIPfreeBufferArray(
scip, &consSOS2);
1296 SCIP_Longint originalLimitsNodes;
1297 SCIP_CALL_ABORT( SCIPgetLongintParam(tempScip,
"limits/nodes", &originalLimitsNodes) );
1298 SCIP_CALL_ABORT( SCIPsetLongintParam(tempScip,
"limits/nodes", 1) );
1300 SCIP_RETCODE ret = SCIPsolve(tempScip);
1301 if( ret != SCIP_OKAY )
1306 SCIP_STATUS status = SCIPgetStatus(tempScip);
1307 if( status == SCIP_STATUS_OPTIMAL )
1313 if( status == SCIP_STATUS_MEMLIMIT )
1315 std::cout <<
"Warning: SCIP was interrupted because the memory limit was reached" << std::endl;
1325 cuts = SCIPgetPoolCuts(tempScip);
1326 ncuts = SCIPgetNPoolCuts(tempScip);
1327 for(
int c = 0; c < ncuts; ++c )
1331 row = SCIPcutGetRow(cuts[c]);
1332 assert(!SCIProwIsLocal(row));
1333 assert(!SCIProwIsModifiable(row));
1334 if( SCIPcutGetAge(cuts[c]) == 0 && SCIProwIsInLP(row) )
1336 char name[SCIP_MAXSTRLEN];
1344 cols = SCIProwGetCols(row);
1345 ncols = SCIProwGetNNonz(row);
1347 SCIP_CALL_ABORT( SCIPallocBufferArray(tempScip, &vars, ncols) );
1348 for( i = 0; i < ncols; ++i )
1349 vars[i] = SCIPcolGetVar(cols[i]);
1351 (void) SCIPsnprintf(name, SCIP_MAXSTRLEN,
"%s_%d", SCIProwGetName(row), SCIPgetNRuns(tempScip));
1352 SCIP_CALL_ABORT( SCIPcreateConsLinear(tempScip, &cons, name, ncols, vars, SCIProwGetVals(row),
1353 SCIProwGetLhs(row) - SCIProwGetConstant(row), SCIProwGetRhs(row) - SCIProwGetConstant(row),
1354 TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE) );
1355 SCIP_CALL_ABORT( SCIPaddCons(tempScip, cons) );
1356 SCIP_CALL_ABORT( SCIPreleaseCons(tempScip, &cons) );
1358 SCIPfreeBufferArray(tempScip, &vars);
1363 SCIP_CALL_ABORT( SCIPsetLongintParam(tempScip,
"limits/nodes", originalLimitsNodes) );
1372 bool noPreprocessingInLC,
1373 bool usetRootNodeCuts,
1376 char *settingsNameLC,
1385 SCIP_CALL_ABORT( SCIPcreateProb(
scip,
probName, NULL, NULL, NULL, NULL, NULL, NULL, NULL) );
1386 SCIP_CALL_ABORT( SCIPsetObjsense(
scip, SCIP_OBJSENSE_MINIMIZE) );
1387 for(
int v = 0; v <
nVars; ++v)
1394 TRUE, FALSE, NULL, NULL, NULL, NULL, NULL) );
1395 SCIP_CALL_ABORT( SCIPaddVar(
scip, newvar) );
1396 assert( SCIPvarGetProbindex(newvar) == v );
1400 SCIP_CALL_ABORT( SCIPreleaseVar(
scip, &newvar) );
1429 SCIP_VAR **vars = SCIPgetVars(
scip);
1432 for(
int v = 0; v <
nVars; ++v )
1434 SCIP_VAR *var = vars[v];
1435 varLbs[SCIPvarGetProbindex(var)] = SCIPvarGetLbLocal(var);
1436 varUbs[SCIPvarGetProbindex(var)] = SCIPvarGetUbLocal(var);
1443 SCIP_Bool success = TRUE;
1444 SCIP_CALL_ABORT( SCIPcreate(&tempScip) );
1445 SCIP_CALL_ABORT( SCIPsetIntParam(tempScip,
"timing/clocktype", 2) );
1448 SCIP_CALL_ABORT( SCIPincludeDefaultPlugins(tempScip) );
1452#ifdef SCIP_THREADSAFE_MESSAGEHDLRS
1453 SCIPsetMessagehdlrQuiet(tempScip, TRUE);
1459 int retcode = SCIPreadProb(tempScip,
getFileName(), NULL );
1461 if( retcode != SCIP_OKAY )
1463 std::cout <<
"SCIPreadProb returns: " << retcode << std::endl;
1467 std::cout <<
"Cannot read < " << getcwd(dir, 511) <<
"/" <<
getFileName() << std::endl;
1471 std::cout <<
"Cannot read < " <<
getFileName() << std::endl;
1479 SCIP_CALL_ABORT( SCIPtransformProb(tempScip));
1483 SCIP_CALL_ABORT( SCIPreadProb(tempScip, isolname, NULL ) );
1487 char *probNameFromFileName;
1490 SCIPsplitFilename(temp, NULL, &probNameFromFileName, NULL, NULL);
1491 SCIP_CALL_ABORT( SCIPsetProbName(tempScip, probNameFromFileName));
1494 if( noPreprocessingInLC )
1496 SCIP_CALL_ABORT( SCIPsetIntParam(tempScip,
"presolving/maxrounds", 0));
1500 if( settingsNameLC )
1502 SCIP_CALL_ABORT( SCIPreadParams(tempScip, settingsNameLC) );
1513 SCIP_CALL_ABORT( SCIPpresolve(tempScip) );
1514 SCIP_STATUS scipStatus = SCIPgetStatus(tempScip);
1515 if( scipStatus == SCIP_STATUS_OPTIMAL )
return;
1518 if( usetRootNodeCuts )
1526 if( SCIPgetNVars(tempScip) == 0 )
1531 assert( SCIPgetStage(
scip) == SCIP_STAGE_INIT );
1535 SCIP_HASHMAP* varmap = 0;
1536 SCIP_HASHMAP* conssmap = 0;
1551#if SCIP_APIVERSION >= 131
1552 SCIP_CALL_ABORT( SCIPcopyPlugins(tempScip,
scip, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
1553 TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, &success) );
1554#elif SCIP_APIVERSION >= 101
1555 SCIP_CALL_ABORT( SCIPcopyPlugins(tempScip,
scip, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
1556 TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, &success) );
1557#elif SCIP_APIVERSION >= 100
1558 SCIP_CALL_ABORT( SCIPcopyPlugins(tempScip,
scip, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
1559 TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, &success) );
1560#elif SCIP_APIVERSION >= 17
1561 SCIP_CALL_ABORT( SCIPcopyPlugins(tempScip,
scip, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
1562 TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, &success) );
1564 SCIP_CALL_ABORT( SCIPcopyPlugins(tempScip,
scip, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
1565 TRUE, TRUE, TRUE, TRUE, FALSE, &success) );
1567 SCIP_CALL_ABORT( SCIPcopyParamSettings(tempScip,
scip) );
1570 if( SCIPgetNVars(tempScip) > 0 )
1572 SCIP_CALL_ABORT( SCIPhashmapCreate(&varmap, SCIPblkmem(
scip), SCIPgetNVars(tempScip)) );
1574 if( SCIPgetNConss(tempScip) > 0 )
1576 SCIP_CALL_ABORT( SCIPhashmapCreate(&conssmap, SCIPblkmem(
scip), SCIPgetNConss(tempScip)) );
1580 SCIP_CALL_ABORT( SCIPcopyProb(tempScip,
scip, varmap, conssmap, TRUE, probNameFromFileName) );
1584 if( SCIPgetNVars(tempScip) > 0 )
1586#if (SCIP_VERSION < 321 || ( SCIP_VERSION == 321 && SCIP_SUBVERSION < 2) )
1587 SCIP_CALL_ABORT( SCIPcopyVars(tempScip,
scip, varmap, conssmap, TRUE) );
1589 SCIP_CALL_ABORT( SCIPcopyVars(tempScip,
scip, varmap, conssmap, NULL, NULL, 0, TRUE) );
1592 if( SCIPgetNConss(tempScip) > 0 )
1594 SCIP_CALL_ABORT( SCIPcopyConss(tempScip,
scip, varmap, conssmap, TRUE, FALSE, &success) );
1597#if SCIP_APIVERSION > 39
1603 SCIP_CALL_ABORT( SCIPcopyBenders(tempScip,
scip, NULL, TRUE, &valid) );
1609 if( SCIPgetNConss(tempScip) > 0 )
1611 SCIPhashmapFree(&conssmap);
1613 if( SCIPgetNVars(tempScip) > 0 )
1615 SCIPhashmapFree(&varmap);
1617 SCIPfree(&tempScip);
1618 std::cerr <<
"Some constraint handler did not perform a valid copy. Cannot solve this instance." << std::endl;
1623 nVars = SCIPgetNVars(tempScip);
1625 int n = SCIPgetNVars(
scip);
1629 assert(
nVars <= n );
1638 for(
int i = 0; i < SCIPgetNTotalVars(tempScip); i++ )
1645 assert(SCIPgetNTotalVars(
scip) >= SCIPgetNVars(tempScip));
1648 SCIP_VAR **srcVars = SCIPgetVars(tempScip);
1651 for(
int i = 0; i < SCIPgetNVars(tempScip); i++ )
1653 SCIP_VAR* copyvar = (SCIP_VAR*)SCIPhashmapGetImage(varmap, (
void*)srcVars[i]);
1677 if( SCIPgetNConss(tempScip) > 0 )
1679 SCIPhashmapFree(&conssmap);
1681 if( SCIPgetNVars(tempScip) > 0 )
1683 SCIPhashmapFree(&varmap);
1686 SCIPfree(&tempScip);
1689 SCIP_VAR **vars = SCIPgetVars(
scip);
1692 for(
int v = 0; v <
nVars; ++v )
1694 SCIP_VAR *var = vars[v];
1695 varLbs[SCIPvarGetProbindex(var)] = SCIPvarGetLbLocal(var);
1696 varUbs[SCIPvarGetProbindex(var)] = SCIPvarGetUbLocal(var);
1856 std::ostringstream s;
1858 s <<
"lProbName = " <<
lProbName << std::endl;
1859 s <<
"probName = " <<
probName << std::endl;
1861 s <<
"objScale = " <<
objScale << std::endl;
1862 s <<
"objOffset = " <<
objOffset << std::endl;
1863 s <<
"nVars = " <<
nVars <<
", lVarNames = " <<
lVarNames << std::endl;
1864 for(
int i = 0; i <
nVars; i++ )
1867 <<
", varsLbs = " <<
varLbs[i] <<
", varsUbs = " <<
varUbs[i]
1879 s <<
"nConss = " <<
nConss <<
", lConsNames = " <<
lConsNames << std::endl;
1880 for(
int i = 0; i <
nConss; i ++ )
1893 <<
", nLinearCoefs = " <<
nLinearCoefs[i] << std::endl;
1896 s <<
" [" << j <<
"]: linearCoefs = " <<
linearCoefs[i][j]
1911 s <<
" [" << j <<
"]: idxSetppcVars = " <<
idxSetppcVars[i][j] << std::endl;
1925 s <<
" [" << j <<
"]: idxLogicorVars = " <<
idxLogicorVars[i][j] << std::endl;
1958 s <<
"nSos1Conss = " <<
nSos1Conss << std::endl;
1962 <<
", nSos1Coefs = " <<
nSos1Coefs[i] << std::endl;
1965 s <<
" [" << j <<
"]: sos1Coefs = " <<
sos1Coefs[i][j] <<
", idxSos1CoefsVars = " <<
idxSos1CoefsVars[i][j] << std::endl;
1972 s <<
"nSos2Conss = " <<
nSos2Conss << std::endl;
1976 <<
", nSos2Coefs = " <<
nSos2Coefs[i] << std::endl;
1979 s <<
" [" << j <<
"]: sos2Coefs = " <<
sos2Coefs[i][j] <<
", idxSos2CoefsVars = " <<
idxSos2CoefsVars[i][j] << std::endl;
Base class for instance data.
void setParametersInScip(SCIP *scip)
int * nVarsBoundDisjunction
SCIP_Real * varboundCoef2s
int ** idxAggregatedCoefsVars
const std::string toString()
int * idxBoundDisjunctionConsNames
void setLinearConstraint(SCIP *scip, int c, SCIP_CONS *cons)
bool addRootNodeCuts(SCIP *scip, ScipDiffParamSet *scipDiffParamSetRoot)
SCIP_Longint ** knapsackCoefs
void setSos2Constraint(SCIP *scip, int c, SCIP_CONS *cons, SCIP_CONS **consSOS2)
void setAggregatedConstrains(SCIP *scip, int nvars, int nAggregatedVars, SCIP_VAR **aggregatedVars)
char * aggregatedConsNames
void createVarboundConstraintsInSCIP(SCIP *scip)
int ** idxLinearCoefsVars
int * mapToSolverLocalIndecies
void setAggregatedConstraint(SCIP *scip, int c, const char *constName, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhsAndrhs)
void setSos1Constraint(SCIP *scip, int c, SCIP_CONS *cons, SCIP_CONS **consSOS1)
int * posAggregatedVarNames
virtual const char * getFileName()=0
void createSetppcConstraintsInSCIP(SCIP *scip)
int * idxLogicorConsNames
int * idxKnapsackConsNames
void createLinearConstraintsInSCIP(SCIP *scip)
void addOrdinaryConstraintName(int c, SCIP_CONS *cons)
SCIP_BOUNDTYPE ** boundTypesBoundDisjunction
SCIP_Real ** boundsBoundDisjunction
void setSetppcConstraint(SCIP *scip, int c, SCIP_CONS *cons)
ScipUserPlugins * userPlugins
void getActiveVariables(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
void collectAggregatedVars(SCIP *scip, int nvars, SCIP_VAR **vars, int *nAggregatedVars, SCIP_VAR ***aggregatedVars, SCIP_HASHTABLE **varAggregated)
void createSos1ConstraintsInSCIP(SCIP *scip)
bool copyIncreasedVariables
void allocateMemoryForOrdinaryConstraints()
void setKnapsackConstraint(SCIP *scip, int c, SCIP_CONS *cons)
void setBoundDisjunctionConstraint(SCIP *scip, int c, SCIP_CONS *cons)
int * posAggregatedConsNames
void createSos2ConstraintsInSCIP(SCIP *scip)
int * idxVarboundConsNames
void createBoundDisjunctionConstraintInSCIP(SCIP *scip)
void setVarboundConstraint(SCIP *scip, int c, SCIP_CONS *cons)
int * idxVarboundCoefVar1s
int ** idxKnapsackCoefsVars
char * aggregatedVarNames
int nVarBoundDisjunctionConss
void setLogicorConstraint(SCIP *scip, int c, SCIP_CONS *cons)
int * mapToOriginalIndecies
SCIP_Longint * capacities
SCIP_Real * aggregatedLhsAndLhss
void createProblem(SCIP *scip, int method, bool noPreprocessingInLC, bool usetRootNodeCuts, ScipDiffParamSet *scipDiffParamSetRoot, ScipDiffParamSet *scipDiffParamSet, char *settingsNameLC, char *isolname)
int ** idxVarBoundDisjunction
int * idxVarboundCoefVar2s
void createLogicorConstraintsInSCIP(SCIP *scip)
void createKnapsackConstraintsInSCIP(SCIP *scip)
void createAggregatedVarsAndConstrainsInSCIP(SCIP *scip)
virtual ~ScipParaInstance()
void includeUserPlugins(SCIP *inScip)
SCIP_Real ** aggregatedCoefs
static const int LpMaxNamelen
Defines for UG Framework.
#define THROW_LOGICAL_ERROR1(msg1)
#define THROW_LOGICAL_ERROR2(msg1, msg2)
#define THROW_LOGICAL_ERROR3(msg1, msg2, msg3)
static SCIP_DECL_HASHGETKEY(hashGetKeyVar)
static const char * PRESOLVED_INSTANCE
static SCIP_DECL_HASHKEYEQ(hashKeyEqVar)
static SCIP_DECL_HASHKEYVAL(hashKeyValVar)
ParaInstance extenstion for SCIP solver.