issoftcons:1;
202 unsigned intchanged:1;
203 unsigned intpropagated:1;
204 unsigned intpresolved:1;
205 unsigned intcliquesadded:1;
206 unsigned intupgradetried:1;
210structSCIP_ConshdlrData
214 intnallconsanddatas;
216 intsallconsanddatas;
259 if( varind1 == -1 && varind2 == -1 )
265 if( varind1 < varind2 )
267 if( varind1 > varind2 )
270 if( varneg1 && !varneg2 )
272 if( !varneg1 && varneg2 )
275assert(elem1 == elem2);
289assert(consanddata1 !=
NULL);
290assert(consanddata2 !=
NULL);
301consand1 = consanddata1->
cons;
302consand2 = consanddata2->
cons;
306consand1 = consanddata1->
origcons;
307consand2 = consanddata2->
origcons;
351assert(cdata1 !=
NULL);
352assert(cdata2 !=
NULL);
354assert(cdata1->
nvars> 1);
356assert(cdata2->
nvars> 1);
360 for( v = cdata1->
nvars- 1; v > 0; --v )
363 for( v = cdata2->
nvars- 1; v > 0; --v )
376 for( v = cdata1->
nvars- 1; v >= 0; --v )
382 if( cdata1->
vars[v] != cdata2->
vars[v] )
405assert(cdata !=
NULL);
407assert(cdata->
nvars> 1);
412 for( v = cdata->
nvars- 1; v > 0; --v )
420assert(minidx >= 0 && minidx <= maxidx);
434 if( ((*conshdlrdata)->inithashmapandtable) )
436assert((*conshdlrdata)->hashtable !=
NULL);
437assert((*conshdlrdata)->hashmap !=
NULL);
442assert((*conshdlrdata)->hashtable ==
NULL);
443assert((*conshdlrdata)->hashmap ==
NULL);
448hashGetKeyAndConsDatas, hashKeyEqAndConsDatas, hashKeyValAndConsDatas, (
void*)
scip) );
454(*conshdlrdata)->inithashmapandtable =
TRUE;
467assert(conshdlrdata !=
NULL);
471(*conshdlrdata)->allconsanddatas =
NULL;
472(*conshdlrdata)->nallconsanddatas = 0;
473(*conshdlrdata)->sallconsanddatas = 10;
478(*conshdlrdata)->inithashmapandtable =
FALSE;
479(*conshdlrdata)->hashtable =
NULL;
480(*conshdlrdata)->hashtablesize = 0;
481(*conshdlrdata)->hashmap =
NULL;
482(*conshdlrdata)->hashmapsize = 0;
485(*conshdlrdata)->nlinconss = 0;
488(*conshdlrdata)->noriguses = 0;
502assert(conshdlrdata !=
NULL);
503assert(*conshdlrdata !=
NULL);
504assert((*conshdlrdata)->nallconsanddatas == 0);
507 if( (*conshdlrdata)->inithashmapandtable )
510(*conshdlrdata)->hashmapsize = 0;
512(*conshdlrdata)->hashtablesize = 0;
516assert((*conshdlrdata)->hashmap ==
NULL);
517assert((*conshdlrdata)->hashtable ==
NULL);
519(*conshdlrdata)->inithashmapandtable =
FALSE;
524(*conshdlrdata)->allconsanddatas =
NULL;
525(*conshdlrdata)->nallconsanddatas = 0;
526(*conshdlrdata)->sallconsanddatas = 0;
543assert(cons !=
NULL);
544assert(nvars !=
NULL);
562 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
563*nvars = SCIPgetNVarsEQKnapsack(
scip, cons);
625 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
626*lhs = SCIPgetCapacityEQKnapsack(
scip, cons);
654assert(cons !=
NULL);
655assert(vars !=
NULL);
656assert(nvars !=
NULL);
672 for( v = 0; v < *nvars; ++v )
674vars[v] = linvars[v];
675coefs[v] = lincoefs[v];
680 for( v = 0; v < *nvars; ++v )
681vars[v] = linvars[v];
689assert( linvars !=
NULL);
693 for( v = 0; v < *nvars; ++v )
695vars[v] = linvars[v];
701 for( v = 0; v < *nvars; ++v )
702vars[v] = linvars[v];
712assert( linvars !=
NULL);
718 for( v = 0; v < *nvars; ++v )
720vars[v] = linvars[v];
726 for( v = 0; v < *nvars; ++v )
727vars[v] = linvars[v];
735assert( linvars !=
NULL);
739 for( v = 0; v < *nvars; ++v )
741vars[v] = linvars[v];
747 for( v = 0; v < *nvars; ++v )
748vars[v] = linvars[v];
753 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
757*nvars = SCIPgetNVarsEQKnapsack(
scip, cons);
758linvars = SCIPgetVarsEQKnapsack(
scip, cons);
759assert( linvars !=
NULL);
763weights = SCIPgetWeightsEQKnapsack(
scip, cons);
765 for( v = 0; v < *nvars; ++v )
767vars[v] = linvars[v];
773 for( v = 0; v < *nvars; ++v )
774vars[v] = linvars[v];
800 int*
constnlinvars,
814assert(cons !=
NULL);
815assert(vars !=
NULL);
816assert((linvars !=
NULL) == (nlinvars !=
NULL));
817assert((andress ==
NULL) || (nandress !=
NULL));
818assert((andcoefs !=
NULL) == (andnegs !=
NULL));
819assert((coefs !=
NULL) == ((lincoefs !=
NULL) || (andcoefs !=
NULL)));
820assert(linvars !=
NULL|| andress !=
NULL);
822 if( nlinvars !=
NULL)
824 if( nandress !=
NULL)
828assert(conshdlr !=
NULL);
830assert(conshdlrdata !=
NULL);
831assert(conshdlrdata->hashmap !=
NULL);
834 for( v = 0; v < nvars; ++v )
839assert(vars[v] !=
NULL);
841hashmapentryexists =
SCIPhashmapExists(conshdlrdata->hashmap, (
void*)(vars[v]));
846hashmapentryexists =
SCIPhashmapExists(conshdlrdata->hashmap, (
void*)(hashmapvar));
849hashmapvar = vars[v];
854 if( hashmapentryexists )
859assert(consanddata !=
NULL);
863 if( hashmapentryexists )
865assert(consanddata->
cons!=
NULL);
871 if( !hashmapentryexists && linvars !=
NULL&& nlinvars !=
NULL)
873linvars[*nlinvars] = vars[v];
874 if( lincoefs !=
NULL)
876assert(coefs !=
NULL);
877lincoefs[*nlinvars] = coefs[v];
881 else if( hashmapentryexists && nandress !=
NULL)
883 if( andress !=
NULL)
885andress[*nandress] = hashmapvar;
887 if( andcoefs !=
NULL)
889assert(andnegs !=
NULL);
890assert(coefs !=
NULL);
891andcoefs[*nandress] = coefs[v];
892andnegs[*nandress] = (vars[v] != hashmapvar);
903#ifdef CHECK_CONSISTENCY 930assert(cons !=
NULL);
936assert(consdata !=
NULL);
939assert(consdata->lincons !=
NULL);
942assert(consdata->consanddatas !=
NULL);
943assert(consdata->nconsanddatas > 0);
944assert(consdata->nconsanddatas <= consdata->sconsanddatas);
956assert(nvars == consdata->nlinvars + consdata->nconsanddatas);
970assert(nvars == 0 || (coefs !=
NULL));
974andress, andcoefs, andnegs, &nandress) );
975assert(nlinvars == consdata->nlinvars);
976assert(nandress == consdata->nconsanddatas);
978 for( v = nandress - 1; v >= 0; --v )
980 SCIP_VAR* andresultant = andress[v];
983 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
985assert(consdata->consanddatas[c] !=
NULL);
986 if( consdata->consanddatas[c]->cons !=
NULL)
989assert(res !=
NULL);
991 if( res == andresultant && consdata->andnegs[c] == andnegs[v] && consdata->andcoefs[c] == andcoefs[v] )
995assert(!alreadyfound[c]);
998alreadyfound[c] =
TRUE;
1004assert(nfound == 1);
1007 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
1009assert(alreadyfound[c]);
1023#define checkConsConsistency(scip, cons) 1043assert(consanddata !=
NULL);
1044assert(conshdlrdata !=
NULL);
1048tmpvars = consanddata->
vars;
1049ntmpvars = consanddata->
nvars;
1052 for( v = ntmpvars - 1; v >= 0; --v )
1054assert(tmpvars[v] !=
NULL);
1062tmpvars = consanddata->
newvars;
1063ntmpvars = consanddata->
nnewvars;
1066 for( v = ntmpvars - 1; v >= 0; --v )
1068assert(tmpvars[v] !=
NULL);
1077 if( !origdata || consanddata->
nvars== 0 )
1082consanddata->
nuses= 0;
1083consanddata->
nvars= 0;
1084consanddata->
svars= 0;
1099 if( consanddata->
nvars> 0 )
1110 if( conshdlrdata->inithashmapandtable )
1112assert(conshdlrdata->hashmap !=
NULL);
1113assert(conshdlrdata->hashtable !=
NULL);
1126assert(consanddata->
nuses== 0);
1127assert(consanddata->
nnewvars== 0);
1128assert(consanddata->
snewvars== 0);
1136assert(consanddata->
nvars> 0);
1137assert(consanddata->
svars> 0);
1138assert(consanddata->
vars!=
NULL);
1142 if( conshdlrdata->inithashmapandtable )
1144assert(conshdlrdata->hashmap !=
NULL);
1145assert(conshdlrdata->hashtable !=
NULL);
1171 int constnandconss,
1188assert(conshdlr !=
NULL);
1189assert(consdata !=
NULL);
1191assert(nandconss == 0 || (andconss !=
NULL&& andcoefs !=
NULL));
1209 SCIPerrorMessage(
"left hand side of pseudo boolean constraint greater than right hand side\n");
1220(*consdata)->issoftcons = issoftcons;
1223(*consdata)->weight = weight;
1229(*consdata)->indvar = indvar;
1232(*consdata)->indvar =
NULL;
1235 if( intvar !=
NULL)
1242(*consdata)->intvar = intvar;
1245(*consdata)->intvar =
NULL;
1248(*consdata)->lincons = lincons;
1249(*consdata)->linconstype = linconstype;
1258assert((*consdata)->lincons !=
NULL);
1261 if( transforming || transformed )
1271(*consdata)->nlinvars = nvars - nandconss;
1274 if( nandconss > 0 )
1282 if( andnegs !=
NULL)
1290(*consdata)->nconsanddatas = nandconss;
1291(*consdata)->sconsanddatas = nandconss;
1297assert(conshdlrdata !=
NULL);
1298assert(conshdlrdata->hashmap !=
NULL);
1301 for( c = nandconss - 1; c >= 0; --c )
1303assert(andconss[c] !=
NULL);
1306assert(andress[c] !=
NULL);
1309assert((*consdata)->consanddatas[c] !=
NULL);
1310assert((*consdata)->consanddatas[c]->origcons == andconss[c] || (*consdata)->consanddatas[c]->cons == andconss[c]);
1315 if( (*consdata)->consanddatas[c]->origcons !=
NULL&& (*consdata)->consanddatas[c]->cons ==
NULL)
1325assert((*consdata)->consanddatas[c]->cons !=
NULL);
1326assert((*consdata)->consanddatas[c]->newvars ==
NULL);
1327assert((*consdata)->consanddatas[c]->isoriginal);
1329(*consdata)->consanddatas[c]->istransformed =
TRUE;
1331vars = (*consdata)->consanddatas[c]->vars;
1332ncvars = (*consdata)->consanddatas[c]->nvars;
1333assert(vars !=
NULL|| ncvars == 0);
1339 SCIPsortPtr((
void**)vars, SCIPvarComp, ncvars);
1342 for( v = ncvars - 1; v >= 0; --v )
1347 else if( (*consdata)->consanddatas[c]->cons !=
NULL)
1348assert((*consdata)->consanddatas[c]->istransformed);
1350++((*consdata)->consanddatas[c]->nuses);
1352 else if( transformed )
1354assert((*consdata)->consanddatas[c]->cons == andconss[c]);
1356assert((*consdata)->consanddatas[c]->istransformed);
1361 SCIPsortPtrPtrRealBool((
void**)andress, (
void**)((*consdata)->consanddatas), (*consdata)->andcoefs, (*consdata)->andnegs, resvarComp, nandconss);
1368(*consdata)->consanddatas =
NULL;
1369(*consdata)->andcoefs =
NULL;
1370(*consdata)->andnegs =
NULL;
1371(*consdata)->nconsanddatas = 0;
1372(*consdata)->sconsanddatas = 0;
1376(*consdata)->lhs = lhs;
1377(*consdata)->rhs = rhs;
1379(*consdata)->changed =
TRUE;
1380(*consdata)->propagated =
FALSE;
1381(*consdata)->presolved =
FALSE;
1382(*consdata)->cliquesadded =
FALSE;
1383(*consdata)->upgradetried =
TRUE;
1390assert(conshdlrdata !=
NULL);
1392conshdlrdata->noriguses += (*consdata)->nconsanddatas;
1412assert(consdata !=
NULL);
1413assert(*consdata !=
NULL);
1414assert((*consdata)->nconsanddatas == 0 || (*consdata)->consanddatas !=
NULL);
1415assert(conshdlrdata !=
NULL);
1418 if( (*consdata)->lincons !=
NULL)
1423nconsanddatas = (*consdata)->nconsanddatas;
1424consanddatas = (*consdata)->consanddatas;
1427 for( c = nconsanddatas - 1; c >= 0; --c )
1429assert((consanddatas[c]->origcons ==
NULL) == (consanddatas[c]->noriguses == 0));
1430assert((consanddatas[c]->cons ==
NULL) == (consanddatas[c]->nuses == 0));
1431assert(consanddatas[c]->nuses >= 0);
1432assert(consanddatas[c]->noriguses >= 0);
1433assert(isorig ? consanddatas[c]->cons ==
NULL:
TRUE);
1436 if( !isorig && consanddatas[c]->cons !=
NULL)
1440--(consanddatas[c]->
nuses);
1443 if( consanddatas[c]->nuses == 0 )
1445 if( conshdlrdata->inithashmapandtable )
1447assert(conshdlrdata->hashmap !=
NULL);
1448assert(conshdlrdata->hashtable !=
NULL);
1451 if( consanddatas[c]->origcons ==
NULL)
1463 if( consanddatas[c]->origcons ==
NULL)
1467assert(conshdlrdata->nallconsanddatas > 0);
1469 for( d = conshdlrdata->nallconsanddatas - 1; d >= 0; --d )
1471 if( conshdlrdata->allconsanddatas[d] == consanddatas[c] )
1473--conshdlrdata->nallconsanddatas;
1477conshdlrdata->allconsanddatas[d] = conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas];
1487 else if( isorig && consanddatas[c]->origcons !=
NULL)
1490assert(consanddatas[c]->nuses == 0);
1491assert(consanddatas[c]->nnewvars == 0);
1492assert(consanddatas[c]->snewvars == 0);
1493assert(consanddatas[c]->newvars ==
NULL);
1498 if( consanddatas[c]->noriguses == 0 )
1502 if( conshdlrdata->inithashmapandtable )
1504assert(conshdlrdata->hashmap !=
NULL);
1505assert(conshdlrdata->hashtable !=
NULL);
1514 if( consanddatas[c]->vars !=
NULL)
1516assert(consanddatas[c]->nvars > 0);
1517assert(consanddatas[c]->svars > 0);
1518assert(consanddatas[c]->svars >= consanddatas[c]->nvars);
1521consanddatas[c]->
nvars= 0;
1522consanddatas[c]->
svars= 0;
1526assert(consanddatas[c]->nvars == 0);
1527assert(consanddatas[c]->svars == 0);
1531assert(consanddatas[c]->origcons ==
NULL);
1534assert(conshdlrdata->nallconsanddatas > 0);
1535 for( d = conshdlrdata->nallconsanddatas - 1; d >= 0; --d )
1537 if( conshdlrdata->allconsanddatas[d] == consanddatas[c] )
1539--conshdlrdata->nallconsanddatas;
1543conshdlrdata->allconsanddatas[d] = conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas];
1554assert(!consanddatas[c]->istransformed);
1555assert(consanddatas[c]->cons ==
NULL);
1559 if( consanddatas[c]->nuses == 0 && consanddatas[c]->istransformed )
1564 else if( consanddatas[c]->nuses == 0 )
1570assert(consanddatas[c]->nnewvars == 0);
1571assert(consanddatas[c]->snewvars == 0);
1572assert(consanddatas[c]->newvars ==
NULL);
1574tmpvars = consanddatas[c]->
vars;
1575ntmpvars = consanddatas[c]->
nvars;
1578 for( v = ntmpvars - 1; v >= 0; --v )
1580assert(tmpvars[v] !=
NULL);
1587 if( !consanddatas[c]->istransformed && consanddatas[c]->noriguses > 0 )
1589assert(consanddatas[c]->origcons !=
NULL);
1590assert(consanddatas[c]->nuses == 0);
1591assert(consanddatas[c]->nnewvars == 0);
1592assert(consanddatas[c]->snewvars == 0);
1593assert(consanddatas[c]->newvars ==
NULL);
1594assert(consanddatas[c]->nvars > 0);
1595assert(consanddatas[c]->svars > 0);
1596assert(consanddatas[c]->svars >= consanddatas[c]->nvars);
1597assert(consanddatas[c]->vars !=
NULL);
1598assert(consanddatas[c]->isoriginal);
1604 if( conshdlrdata->inithashmapandtable )
1606assert(conshdlrdata->hashmap !=
NULL);
1607assert(conshdlrdata->hashtable !=
NULL);
1635assert(res !=
NULL);
1666assert(cons !=
NULL);
1668assert(consanddata !=
NULL);
1677vars = consanddata->
newvars;
1682vars = consanddata->
vars;
1683nvars = consanddata->
nvars;
1687assert(nvars == 0 || (vars !=
NULL&& res !=
NULL));
1698 for( v = nvars - 1; v >= 0; --v )
1705 for( v = nvars - 1; v >= 0; --v )
1735assert(cons !=
NULL);
1737assert(consanddata !=
NULL);
1743vars = consanddata->
vars;
1744nvars = consanddata->
nvars;
1750assert(nvars == 0 || vars !=
NULL);
1761 for( v = nvars - 1; v >= 0; --v )
1768 for( v = nvars - 1; v >= 0; --v )
1802 int* monomialnvars;
1808assert(cons !=
NULL);
1811assert(consdata !=
NULL);
1812assert(consdata->intvar ==
NULL);
1813assert(consdata->lincons !=
NULL);
1822assert(consdata->nlinvars + consdata->nconsanddatas >= nvars);
1839assert(nvars == 0 || (coefs !=
NULL));
1843assert(conshdlr !=
NULL);
1845assert(conshdlrdata !=
NULL);
1846assert(conshdlrdata->hashmap !=
NULL);
1850 for( v = 0; v < nvars; ++v )
1863assert(!consdata->issoftcons || var != consdata->indvar);
1866 if( consanddata !=
NULL)
1878 while( var != vars[v] );
1880 if( consanddata ==
NULL)
1882assert(var !=
NULL);
1883assert(var == vars[v]);
1884monomialvars[nmonomials] = vars + v;
1885monomialnvars[nmonomials] = 1;
1892 if( fixed != negated )
1907assert(andvars !=
NULL);
1908monomialvars[nmonomials] = andvars;
1909assert(nandvars >= 1);
1910monomialnvars[nmonomials] = nandvars;
1914monomialcoefs[nmonomials] = coefs[v];
1943 if( consdata->issoftcons )
1948assert(consdata->weight ==
SCIPvarGetObj(consdata->indvar));
1995assert(conshdlr !=
NULL);
1996assert(vars !=
NULL);
1998assert(andcons !=
NULL);
2001assert(conshdlrdata !=
NULL);
2002assert(conshdlrdata->hashtable !=
NULL);
2009newdata->
nvars= nvars;
2010newdata->
svars= nvars;
2015newdata->
nuses= 0;
2028 if( tmpdata !=
NULL)
2036*andcons = tmpdata->
cons;
2038assert(tmpdata->
nuses> 0);
2040++(tmpdata->
nuses);
2051assert(*andcons !=
NULL);
2055assert(res !=
NULL);
2080#ifdef SCIP_DISABLED_CODE 2081#ifdef WITH_DEBUG_SOLUTION 2082 if( SCIPdebugIsMainscip(
scip) )
2088 for( v = nvars - 1; v >= 0; --v )
2096val = ((val < 0.5) ? 0.0 : 1.0);
2101 SCIPerrorMessage(
"computed solution value %g for resultant <%s> violates debug solution value %g\n", val,
SCIPvarGetName(resultant), debugsolval);
2122initial, separate, enforce, check &&
FALSE, propagate,
2123local, modifiable, dynamic, removable, stickingatnode) );
2132assert(*andcons !=
NULL);
2135 if( conshdlrdata->nallconsanddatas == conshdlrdata->sallconsanddatas )
2141conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas] = newdata;
2142++(conshdlrdata->nallconsanddatas);
2148newdata->
cons= newcons;
2152newdata->
nuses= 1;
2155 for( v = newdata->
nvars- 1; v >= 0; --v )
2207assert(cons !=
NULL);
2208assert(nvars == 0 || vars !=
NULL);
2214assert(consdata !=
NULL);
2217assert(conshdlr !=
NULL);
2220assert(conshdlrdata !=
NULL);
2227assert(andcons !=
NULL);
2230 if( consdata->nconsanddatas == consdata->sconsanddatas )
2236assert(res !=
NULL);
2240++(consdata->nconsanddatas);
2243 switch( consdata->linconstype )
2266#ifdef WITHEQKNAPSACK 2267 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
2284consdata->changed =
TRUE;
2285consdata->propagated =
FALSE;
2286consdata->presolved =
FALSE;
2287consdata->cliquesadded =
FALSE;
2288consdata->upgradetried =
FALSE;
2310 SCIPerrorMessage(
"changing left hand side only allowed on standard lienar constraint \n");
2312#ifdef WITHEQKNAPSACK 2313 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
2341 SCIPerrorMessage(
"changing left hand side only allowed on standard lienar constraint \n");
2343#ifdef WITHEQKNAPSACK 2344 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
2378assert(cons !=
NULL);
2387assert(consdata !=
NULL);
2413assert(nvars == 0 || (coefs !=
NULL));
2416 SCIP_CALL(
getLinVarsAndAndRess(
scip, cons, vars, coefs, nvars, linvars, lincoefs, &nlinvars, andress, andcoefs, andnegs, &nandress) );
2417assert(consdata->nconsanddatas == nandress);
2433 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
2438consanddata = consdata->consanddatas[c];
2439assert(consanddata !=
NULL);
2441andcons = consanddata->
cons;
2442assert(andcons !=
NULL);
2446val = andnegs[c] ? -andcoefs[c] : andcoefs[c];
2451 for( v = nandvars - 1; v >= 0; --v )
2458 for( v = nandvars - 1; v >= 0; --v )
2468 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
2473consanddata = consdata->consanddatas[c];
2474assert(consanddata !=
NULL);
2476andcons = consanddata->
cons;
2477assert(andcons !=
NULL);
2481val = andnegs[c] ? -andcoefs[c] : andcoefs[c];
2486 for( v = nandvars - 1; v >= 0; --v )
2493 for( v = nandvars - 1; v >= 0; --v )
2505consdata->propagated =
FALSE;
2510consdata->lhs = lhs;
2511consdata->presolved =
FALSE;
2512consdata->changed =
TRUE;
2549assert(cons !=
NULL);
2558assert(consdata !=
NULL);
2584assert(nvars == 0 || (coefs !=
NULL));
2587 SCIP_CALL(
getLinVarsAndAndRess(
scip, cons, vars, coefs, nvars, linvars, lincoefs, &nlinvars, andress, andcoefs, andnegs, &nandress) );
2588assert(consdata->nconsanddatas == nandress);
2604 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
2609consanddata = consdata->consanddatas[c];
2610assert(consanddata !=
NULL);
2612andcons = consanddata->
cons;
2613assert(andcons !=
NULL);
2617val = andnegs[c] ? -andcoefs[c] : andcoefs[c];
2622 for( v = nandvars - 1; v >= 0; --v )
2629 for( v = nandvars - 1; v >= 0; --v )
2639 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
2644consanddata = consdata->consanddatas[c];
2645assert(consanddata !=
NULL);
2647andcons = consanddata->
cons;
2648assert(andcons !=
NULL);
2652val = andnegs[c] ? -andcoefs[c] : andcoefs[c];
2657 for( v = nandvars - 1; v >= 0; --v )
2664 for( v = nandvars - 1; v >= 0; --v )
2676consdata->propagated =
FALSE;
2681consdata->rhs = rhs;
2682consdata->presolved =
FALSE;
2683consdata->changed =
TRUE;
2705 int const*
constntermvars,
2730 int*
constnandconss
2736assert(conshdlr !=
NULL);
2738assert(andconss !=
NULL);
2739assert(andvals !=
NULL);
2740assert(nandconss !=
NULL);
2748 for( t = 0; t <
nterms; ++t )
2753initial, enforce, check, local, modifiable, dynamic, stickingatnode,
2754&(andconss[*nandconss])) );
2755assert(andconss[*nandconss] !=
NULL);
2756andvals[*nandconss] = termcoefs[t];
2757andnegs[*nandconss] =
FALSE;
2826assert(conshdlr !=
NULL);
2827assert(nlinvars == 0 || (linvars !=
NULL&& linvals !=
NULL));
2828assert(nandress == 0 || (andress !=
NULL&& andvals !=
NULL));
2829assert(lhs !=
NULL);
2830assert(rhs !=
NULL);
2831assert(lincons !=
NULL);
2832assert(linconstype !=
NULL);
2833assert(nlinvars > 0 || nandress > 0);
2836assert(conshdlrdata !=
NULL);
2843++(conshdlrdata->nlinconss);
2859nvars = nlinvars + nandress;
2862 for( v = nlinvars - 1; v >= 0; --v )
2892 for( v = nandress - 1; v >= 0; --v )
2920 SCIPdebugMsg(
scip,
"While creating the linear constraint of the pseudoboolean constraint we found %d zero coefficients that were removed\n", nzero);
2938 if( upgrconshdlr !=
NULL&& nvars > 2 && ncoeffspone + ncoeffsnone == nvars
2954 for( v = 0; v < nlinvars; ++v )
2956 if( mult * linvals[v] > 0.0 )
2957transvars[v] = linvars[v];
2962assert(transvars[v] !=
NULL);
2966 for( v = 0; v < nandress; ++v )
2968 if( mult * andvals[v] > 0.0 )
2969transvars[nlinvars + v] = andress[v];
2975assert(transvars[nlinvars + v] !=
NULL);
2978assert(!modifiable);
2981initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3010 if( upgrconshdlr !=
NULL&& !created && ncoeffspone + ncoeffsnone == nvars )
3017 SCIPdebugMsg(
scip,
"linear pseudoboolean constraint will be a set partitioning constraint\n");
3020mult =
SCIPisEQ(
scip, *lhs, 1.0 - ncoeffsnone) ? +1 : -1;
3026 for( v = 0; v < nlinvars; ++v )
3028 if( mult * linvals[v] > 0.0 )
3029transvars[v] = linvars[v];
3034assert(transvars[v] !=
NULL);
3038 for( v = 0; v < nandress; ++v )
3040 if( mult * andvals[v] > 0.0 )
3041transvars[nlinvars + v] = andress[v];
3047assert(transvars[nlinvars + v] !=
NULL);
3051assert(!modifiable);
3053initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3067 SCIPdebugMsg(
scip,
"linear pseudoboolean constraint will be a set packing constraint\n");
3076 for( v = 0; v < nlinvars; ++v )
3078 if( mult * linvals[v] > 0.0 )
3079transvars[v] = linvars[v];
3084assert(transvars[v] !=
NULL);
3088 for( v = 0; v < nandress; ++v )
3090 if( mult * andvals[v] > 0.0 )
3091transvars[nlinvars + v] = andress[v];
3097assert(transvars[nlinvars + v] !=
NULL);
3101assert(!modifiable);
3103initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3121 SCIPwarningMessage(
scip,
"Does not expect this, because this constraint should be a set packing constraint.\n");
3125 SCIPwarningMessage(
scip,
"Does not expect this, because this constraint should be a logicor constraint.\n");
3128 SCIPdebugMsg(
scip,
"linear pseudoboolean constraint will be a set covering constraint\n");
3137 for( v = 0; v < nlinvars; ++v )
3139 if( mult * linvals[v] > 0.0 )
3140transvars[v] = linvars[v];
3145assert(transvars[v] !=
NULL);
3149 for( v = 0; v < nandress; ++v )
3151 if( mult * andvals[v] > 0.0 )
3152transvars[nlinvars + v] = andress[v];
3158assert(transvars[nlinvars + v] !=
NULL);
3162assert(!modifiable);
3164initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3192 SCIPdebugMsg(
scip,
"linear pseudoboolean constraint will be a knapsack constraint\n");
3213 for( v = 0; v < nlinvars; ++v )
3219transvars[v] = linvars[v];
3220weights[v] = weight;
3225weights[v] = -weight;
3228assert(transvars[v] !=
NULL);
3231 for( v = 0; v < nandress; ++v )
3237transvars[nlinvars + v] = andress[v];
3238weights[nlinvars + v] = weight;
3244weights[nlinvars + v] = -weight;
3247assert(transvars[nlinvars + v] !=
NULL);
3252initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3264#ifdef WITHEQKNAPSACK 3273 if( upgrconshdlr !=
NULL&& !created && (ncoeffspone + ncoeffsnone + ncoeffspint + ncoeffsnint == nvars) &&
SCIPisEQ(
scip, *lhs, *rhs) )
3283 SCIPdebugMsg(
scip,
"linear pseudoboolean constraint will be a equality-knapsack constraint\n");
3301 for( v = 0; v < nlinvars; ++v )
3307transvars[v] = linvars[v];
3308weights[v] = weight;
3313weights[v] = -weight;
3316assert(transvars[v] !=
NULL);
3319 for( v = 0; v < nandress; ++v )
3325transvars[nlinvars + v] = andress[v];
3326weights[nlinvars + v] = weight;
3332weights[nlinvars + v] = -weight;
3335assert(transvars[nlinvars + v] !=
NULL);
3339 SCIP_CALL( SCIPcreateConsEqKnapsack(
scip, &cons, name, nvars, transvars, weights, capacity,
3340initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3343(*linconstype) = SCIP_LINEARCONSTYPE_EQKNAPSACK;
3357assert(created || upgrconshdlr !=
NULL);
3362initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3367 for( v = 0; v < nandress; ++v )
3369assert(andress[v] !=
NULL);
3423assert(cons !=
NULL);
3425assert(violated !=
NULL);
3433assert(consdata !=
NULL);
3434assert(consdata->lincons !=
NULL);
3453assert(nvars == 0 || (coefs !=
NULL));
3459assert(consdata->nlinvars + consdata->nconsanddatas >= nvars);
3462assert(conshdlr !=
NULL);
3465assert(conshdlrdata !=
NULL);
3466assert(conshdlrdata->hashmap !=
NULL);
3471 for( v = 0; v < nvars; ++v )
3482 if( consanddata !=
NULL)
3487 while( var != vars[v] );
3490 if( consanddata ==
NULL)
3501 if( andcons ==
NULL)
3502andcons = consanddata->
cons;
3508assert(nandvars == 0 || andvars !=
NULL);
3512 for( i = 0; i < nandvars; ++i )
3515 if( var != vars[v] )
3516solval = 1.0 - solval;
3520activity += coefs[v] * solval;
3523 SCIPdebugMsg(
scip,
"lhs = %g, activity = %g, rhs = %g\n", lhs, activity, rhs);
3526lhsviol = lhs - activity;
3527rhsviol = activity - rhs;
3529 if(lhsviol > rhsviol)
3600assert(conshdlr !=
NULL);
3601assert(violated !=
NULL);
3604assert(conshdlrdata !=
NULL);
3608 for( c = conshdlrdata->nallconsanddatas - 1; c >= 0; --c )
3615 if( !conshdlrdata->allconsanddatas[c]->istransformed )
3618andcons = conshdlrdata->allconsanddatas[c]->cons;
3621 if( andcons ==
NULL)
3627assert(nvars == 0 || (vars !=
NULL&& res !=
NULL));
3632 for( v = nvars - 1; v >= 0; --v )
3636 if( solval < minsolval )
3639sumsolval += solval;
3646viol =
MAX3(0.0, solval - minsolval, sumsolval - (nvars - 1.0 + solval));
3659 else if( sol ==
NULL)
3671 SCIP*
consttargetscip,
3673 SCIP*
constsourcescip,
3698assert(targetscip !=
NULL);
3699assert(targetcons !=
NULL);
3700assert(sourcescip !=
NULL);
3701assert(sourcecons !=
NULL);
3703assert(valid !=
NULL);
3708assert(sourceconsdata !=
NULL);
3711sourcelincons = sourceconsdata->lincons;
3712assert(sourcelincons !=
NULL);
3721 intntargetandconss;
3724targetlinconstype = sourceconsdata->linconstype;
3726 switch( targetlinconstype )
3730assert(conshdlrlinear !=
NULL);
3734assert(conshdlrlinear !=
NULL);
3738assert(conshdlrlinear !=
NULL);
3742assert(conshdlrlinear !=
NULL);
3744#ifdef WITHEQKNAPSACK 3745 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
3747assert(conshdlrlinear !=
NULL);
3756 if( conshdlrlinear ==
NULL)
3762targetlincons =
NULL;
3772assert(targetlincons !=
NULL);
3782targetandconss =
NULL;
3783targetandcoefs =
NULL;
3784ntargetandconss = 0;
3790 intnsourceandconss;
3797assert(conshdlrand !=
NULL);
3799nsourceandconss = sourceconsdata->nconsanddatas;
3814targetlinvars, targetlincoefs, &ntargetlinvars) );
3821SCIPvarIsHashkeyEq, SCIPvarGetHashkeyVal,
NULL) );
3823 for( c = 0 ; c < ntargetlinvars; ++c )
3832 for( c = 0 ; c < nsourceandconss; ++c )
3839consanddata = sourceconsdata->consanddatas[c];
3840assert(consanddata !=
NULL);
3852targetandconss[ntargetandconss] =
NULL;
3864targetandcoefs[ntargetandconss] = sourceconsdata->andcoefs[c];
3870assert(ntargetandconss <= ntargetlinvars);
3880 const char* consname;
3883assert(sourceconsdata->issoftcons == (sourceconsdata->indvar !=
NULL));
3884indvar = sourceconsdata->indvar;
3885intvar = sourceconsdata->intvar;
3888 if( indvar !=
NULL)
3892assert(!(*valid) || indvar !=
NULL);
3895 if( intvar !=
NULL&& *valid )
3898assert(!(*valid) || intvar !=
NULL);
3918targetlincons, targetlinconstype, targetandconss, targetandcoefs, ntargetandconss,
3919indvar, sourceconsdata->weight, sourceconsdata->issoftcons, intvar, targetlhs, targetrhs,
3920initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
3930 if( targetlincons !=
NULL)
3936 if( targetandconss !=
NULL)
3940assert(ntargetandconss <= sourceconsdata->nconsanddatas);
3942 for( c = 0 ; c < ntargetandconss; ++c )
3944 if( targetandconss[c] !=
NULL)
3973assert(conshdlrdata !=
NULL);
3975allconsanddatas = conshdlrdata->allconsanddatas;
3976assert(allconsanddatas !=
NULL);
3977assert(conshdlrdata->nallconsanddatas >= 0);
3978assert(conshdlrdata->nallconsanddatas <= conshdlrdata->sallconsanddatas);
3980 for( c = conshdlrdata->nallconsanddatas - 1; c >= 0; --c )
3989consanddata = allconsanddatas[c];
3994 if( consanddata->
nuses== 0 )
3997vars = consanddata->
vars;
3998nvars = consanddata->
nvars;
3999assert(nvars == 0 || vars !=
NULL);
4012cons = consanddata->
cons;
4013assert(cons !=
NULL);
4030 if( nnewvars <= 0 )
4035 for( v = nvars - 1; v > 0; --v )
4038 for( v = nnewvars - 1; v > 0; --v )
4043 if( nvars == nnewvars )
4050 for( v = nvars - 1; v >= 0; --v )
4052 if( vars[v] != newvars[v] )
4064 if( nnewvars > consanddata->
snewvars)
4074 for( v = consanddata->
nnewvars- 1; v >= 0; --v )
4098assert(cons !=
NULL);
4099assert(consanddata !=
NULL);
4108assert(consanddata->
cons!=
NULL);
4126assert(cons !=
NULL);
4127assert(consanddata !=
NULL);
4136assert(consanddata->
cons!=
NULL);
4156 intnnewconsanddatas;
4157 intsnewconsanddatas;
4170assert(cons !=
NULL);
4171assert(conshdlrdata !=
NULL);
4172assert(conshdlrdata->hashmap !=
NULL);
4173assert(nandress == 0 || (andress !=
NULL&& andcoefs !=
NULL));
4179assert(consdata !=
NULL);
4182 SCIPsortPtrRealBool((
void**)(consdata->consanddatas), consdata->andcoefs, consdata->andnegs, resvarCompWithInactive, consdata->nconsanddatas);
4187consanddatas = consdata->consanddatas;
4188oldandcoefs = consdata->andcoefs;
4189oldandnegs = consdata->andnegs;
4190nconsanddatas = consdata->nconsanddatas;
4191assert(nconsanddatas == 0 || (consanddatas !=
NULL&& oldandcoefs !=
NULL));
4193snewconsanddatas = nconsanddatas + nandress;
4200nnewconsanddatas = 0;
4203 for( c = 0, c1 = 0; c < nconsanddatas && c1 < nandress; )
4210assert(consanddatas[c] !=
NULL);
4213 if( !consanddatas[c]->istransformed )
4216consdata->changed =
TRUE;
4217consdata->upgradetried =
FALSE;
4221andcons = consanddatas[c]->
cons;
4222assert(andcons !=
NULL);
4224 if( andcons ==
NULL)
4227consdata->changed =
TRUE;
4228consdata->upgradetried =
FALSE;
4235oldandnegs[c] ? -oldandcoefs[c] : oldandcoefs[c], consdata->lhs, consdata->rhs) );
4237consdata->changed =
TRUE;
4238consdata->upgradetried =
FALSE;
4241assert(andcons !=
NULL);
4245assert(res1 !=
NULL);
4250assert(res2 !=
NULL);
4254compval = resvarComp((
void*)res1, (
void*)res2);
4257 if( compval == -1 )
4260assert(consanddatas[c]->nuses > 0);
4261--(consanddatas[c]->
nuses);
4265consdata->lhs, consdata->rhs) );
4267consdata->changed =
TRUE;
4268consdata->upgradetried =
FALSE;
4269consdata->propagated =
FALSE;
4270consdata->presolved =
FALSE;
4272 else if( compval == +1 )
4277newandcoefs[nnewconsanddatas] = andcoefs[c1];
4278newandnegs[nnewconsanddatas] = andnegs[c1];
4279++(newconsanddatas[nnewconsanddatas]->
nuses);
4283-newandcoefs[nnewconsanddatas] : newandcoefs[nnewconsanddatas], newlhs, newrhs) );
4285consdata->changed =
TRUE;
4286consdata->upgradetried =
FALSE;
4287consdata->cliquesadded =
FALSE;
4288consdata->propagated =
FALSE;
4289consdata->presolved =
FALSE;
4304newconsanddatas[nnewconsanddatas] = consanddatas[c];
4306newandcoefs[nnewconsanddatas] = andcoefs[c1];
4307newandnegs[nnewconsanddatas] = andnegs[c1];
4309 if( ((oldandnegs[c] == andnegs[c1]) && !
SCIPisEQ(
scip, oldandcoefs[c], newandcoefs[c1]))
4310|| ((oldandnegs[c] != newandnegs[c1]) && !
SCIPisEQ(
scip, oldandcoefs[c], -newandcoefs[c1])) )
4311consdata->upgradetried =
FALSE;
4313coefsignchanged = (oldandnegs[c] == andnegs[c1]) &&
4314((oldandcoefs[c] < 0 && andcoefs[c1] > 0) || (oldandcoefs[c] > 0 && andcoefs[c1] < 0));
4315coefsignchanged = coefsignchanged || ((oldandnegs[c] != andnegs[c1]) &&
4316((oldandcoefs[c] < 0 && andcoefs[c1] < 0) || (oldandcoefs[c] > 0 && andcoefs[c1] > 0)));
4318|| (consdata->lhs < 0 && newlhs > 0) || (consdata->lhs > 0 && newlhs < 0);
4320|| (consdata->rhs < 0 && newrhs > 0) || (consdata->rhs > 0 && newrhs < 0);
4323 if( coefsignchanged || lhschanged || rhschanged || newconsanddatas[nnewconsanddatas]->nnewvars > 0)
4327-oldandcoefs[c] : oldandcoefs[c], consdata->lhs, consdata->rhs) );
4329-newandcoefs[nnewconsanddatas] : newandcoefs[nnewconsanddatas], newlhs, newrhs) );
4331consdata->changed =
TRUE;
4332consdata->upgradetried =
FALSE;
4333consdata->cliquesadded =
FALSE;
4334consdata->propagated =
FALSE;
4335consdata->presolved =
FALSE;
4345 if( c < nconsanddatas )
4347assert(c1 == nandress);
4349 for( ; c < nconsanddatas; ++c )
4355assert(consanddatas[c] !=
NULL);
4357andcons = consanddatas[c]->
cons;
4359 if( andcons !=
NULL)
4362assert(res1 !=
NULL);
4366 if( andcons ==
NULL)
4368consdata->changed =
TRUE;
4369consdata->upgradetried =
FALSE;
4373assert(consanddatas[c]->nuses > 0);
4374--(consanddatas[c]->
nuses);
4378consdata->lhs, consdata->rhs) );
4379consdata->changed =
TRUE;
4380consdata->upgradetried =
FALSE;
4381consdata->propagated =
FALSE;
4382consdata->presolved =
FALSE;
4385 else if( c1 < nandress )
4387 for( ; c1 < nandress; ++c1 )
4392assert(res2 !=
NULL);
4395newandcoefs[nnewconsanddatas] = andcoefs[c1];
4396newandnegs[nnewconsanddatas] = andnegs[c1];
4397++(newconsanddatas[nnewconsanddatas]->
nuses);
4401-newandcoefs[nnewconsanddatas] : newandcoefs[nnewconsanddatas], newlhs, newrhs) );
4404consdata->changed =
TRUE;
4405consdata->upgradetried =
FALSE;
4406consdata->cliquesadded =
FALSE;
4407consdata->propagated =
FALSE;
4408consdata->presolved =
FALSE;
4411assert(c == nconsanddatas && c1 == nandress);
4420consdata->upgradetried =
FALSE;
4421consdata->lhs = newlhs;
4422consdata->rhs = newrhs;
4425consdata->consanddatas = newconsanddatas;
4426consdata->andcoefs = newandcoefs;
4427consdata->andnegs = newandnegs;
4428consdata->nconsanddatas = nnewconsanddatas;
4429consdata->sconsanddatas = snewconsanddatas;
4431oldnvars = consdata->nlinvars;
4434consdata->nlinvars -= nnewconsanddatas;
4436 if( oldnvars != consdata->nlinvars )
4438consdata->changed =
TRUE;
4439consdata->upgradetried =
FALSE;
4440consdata->cliquesadded =
FALSE;
4441consdata->propagated =
FALSE;
4442consdata->presolved =
FALSE;
4446consanddatas = consdata->consanddatas;
4447nconsanddatas = consdata->nconsanddatas;
4448assert(nconsanddatas == 0 || consanddatas !=
NULL);
4451 for( c = nconsanddatas - 1; c > 0; --c )
4460assert(consanddatas[c] !=
NULL);
4461assert(consanddatas[c]->cons !=
NULL);
4463assert(res1 !=
NULL);
4464assert(consanddatas[c - 1] !=
NULL);
4465assert(consanddatas[c - 1]->cons !=
NULL);
4467assert(res2 !=
NULL);
4472assert(res1 !=
NULL);
4478assert(res2 !=
NULL);
4482 if( resind1 == -1 && resind2 == -1 )
4488 if( resind1 <= resind2 )
4490assert(resind1 == resind2);
4506 int*
constnaggrvars,
4524assert(cons !=
NULL);
4525assert(cutoff !=
NULL);
4526assert(naggrvars !=
NULL);
4527assert(nchgbds !=
NULL);
4533assert(consdata !=
NULL);
4535assert(consdata->nconsanddatas > 0);
4538 if( consdata->cliquesadded )
4541consdata->cliquesadded =
TRUE;
4546assert(consdata->lincons !=
NULL);
4549assert(consdata->consanddatas !=
NULL);
4550assert(consdata->nconsanddatas > 0);
4551assert(consdata->nconsanddatas <= consdata->sconsanddatas);
4555assert(nvars == consdata->nlinvars + consdata->nconsanddatas);
4570assert(nandress == consdata->nconsanddatas);
4571assert(consdata->consanddatas !=
NULL);
4574 for( c = nandress - 1; c >= 0; --c )
4580consanddata = consdata->consanddatas[c];
4581assert(consanddata !=
NULL);
4588andvars = consanddata->
newvars;
4589nandvars = consanddata->
nnewvars;
4593andvars = consanddata->
vars;
4594nandvars = consanddata->
nvars;
4597 for( v1 = nandvars - 1; v1 >= 0; --v1 )
4615 for( v2 = nlinvars - 1; v2 >= 0; --v2 )
4645 if( values[0] != values[1] && var1 == var2 )
4651clqvars[0] = andres;
4653assert(clqvars[1] !=
NULL);
4662*nchgbds += nchgbdslocal;
4694clqvars[0] = andres;
4696assert(clqvars[1] !=
NULL);
4705*nchgbds += nchgbdslocal;
4725 for( c = nandress - 1; c > 0; --c )
4734consanddata1 = consdata->consanddatas[c];
4735assert(consanddata1 !=
NULL);
4736consanddata2 = consdata->consanddatas[c - 1];
4737assert(consanddata2 !=
NULL);
4745andvars1 = consanddata1->
newvars;
4746nandvars1 = consanddata1->
nnewvars;
4750andvars1 = consanddata1->
vars;
4751nandvars1 = consanddata1->
nvars;
4757andvars2 = consanddata2->
newvars;
4758nandvars2 = consanddata2->
nnewvars;
4762andvars2 = consanddata2->
vars;
4763nandvars2 = consanddata2->
nvars;
4767 for( v1 = nandvars1 - 1; v1 >= 0; --v1 )
4772var1 = andvars1[v1];
4785 for( v2 = nandvars2 - 1; v2 >= 0; --v2 )
4789var2 = andvars2[v2];
4815 if( values[0] != values[1] && var1 == var2 )
4821clqvars[0] = andres;
4822clqvars[1] = andres2;
4831*nchgbds += nchgbdslocal;
4864clqvars[0] = andres;
4866assert(clqvars[1] !=
NULL);
4875*nchgbds += nchgbdslocal;
4908 int*
constndelconss
4914assert(cons !=
NULL);
4915assert(cutoff !=
NULL);
4916assert(ndelconss !=
NULL);
4921assert(consdata !=
NULL);
4922assert(consdata->lincons !=
NULL);
4932 if( consdata->propagated )
4936consdata->propagated =
TRUE;
4954assert(cons !=
NULL);
4957assert(consdata !=
NULL);
4959consanddatas = consdata->consanddatas;
4960nconsanddatas = consdata->nconsanddatas;
4961assert(nconsanddatas == 0 || consanddatas !=
NULL);
4967 for( c = nconsanddatas - 1; c >= 0; --c )
4971assert(consanddatas[c] !=
NULL);
4973 if( !consanddatas[c]->istransformed )
4976andcons = consanddatas[c]->
cons;
4977assert(andcons !=
NULL);
4990 int*
constndelconss
5004assert(conshdlrdata !=
NULL);
5005assert(ndelconss !=
NULL);
5007 if( conshdlrdata->nallconsanddatas == 0 )
5010allconsanddatas = conshdlrdata->allconsanddatas;
5011assert(allconsanddatas !=
NULL);
5012assert(conshdlrdata->nallconsanddatas >= 1);
5013assert(conshdlrdata->nallconsanddatas <= conshdlrdata->sallconsanddatas);
5015 if( nfixedvars >= 1 && nvars >= 1 )
5023activescalars =
NULL;
5026 for( c = conshdlrdata->nallconsanddatas - 1; c >= 0; --c )
5033consanddata = allconsanddatas[c];
5035assert(consanddata->
nvars== 0 || (consanddata->
vars!=
NULL&& consanddata->
svars> 0));
5044assert(consanddata->
nnewvars== 0);
5045assert(consanddata->
snewvars== 0);
5051 if( consanddata->
nvars== 0 )
5056assert(consanddata->
nnewvars== 0);
5057assert(consanddata->
nuses> 0);
5058assert(resvar !=
NULL);
5068consanddata->
nuses= 0;
5083 if( consanddata->
nuses== 0 )
5096assert(consanddata->
nnewvars== 0);
5097assert(consanddata->
snewvars== 0);
5111 if( looseorcolumn )
5120 for(
w= 0;
w< nfixedvars && del; ++
w)
5126assert(fixedvars !=
NULL);
5127assert(activevars !=
NULL);
5128assert(activescalars !=
NULL);
5129activevars[0] = fixedvars[
w];
5130activescalars[0] = 1.0;
5131activeconstant = 0.0;
5134&activeconstant, &requiredsize,
TRUE) );
5135assert(requiredsize <= nvars);
5137 for( i = 0; i < nactivevars && del; ++i )
5141 if( activevars[i] == resvar )
5155 if( !looseorcolumn )
5177cons = consanddata->
cons;
5178assert(cons !=
NULL);
5185assert(consanddata->
nuses> 0);
5186assert(resvar !=
NULL);
5192consanddata->
nuses= 0;
5210tmpvars = consanddata->
vars;
5212 for( v = consanddata->
nvars- 1; v >= 0; --v )
5215assert(tmpvars[v] !=
NULL);
5220tmpvars = consanddata->
vars;
5221stmpvars = consanddata->
svars;
5225consanddata->
newvars= tmpvars;
5231 if( activevars !=
NULL)
5248 int*
constndelconss
5257assert(cons !=
NULL);
5258assert(conshdlrdata !=
NULL);
5259assert(ndelconss !=
NULL);
5265assert(consdata !=
NULL);
5267consanddatas = consdata->consanddatas;
5268nconsanddatas = consdata->nconsanddatas;
5269assert(nconsanddatas > 0 && consanddatas !=
NULL);
5270assert(consdata->andcoefs !=
NULL);
5273 for( c = nconsanddatas - 1; c >= 0; --c )
5277consanddata = consanddatas[c];
5278assert(consanddata !=
NULL);
5287 for( c = nconsanddatas - 1; c >= 0; --c )
5291consanddata = consanddatas[c];
5292assert(consanddata !=
NULL);
5293assert(consanddatas[c]->istransformed);
5295assert(consanddata->
nuses> 0);
5297 if( consanddata->
nuses> 0 )
5298--(consanddata->
nuses);
5301 if( consanddata->
nuses== 0 )
5310assert(resvar !=
NULL);
5319 if( looseorcolumn )
5336 if( !looseorcolumn )
5357consdata->nconsanddatas = 0;
5387 int constnconsanddatas,
5405assert(vars !=
NULL);
5407assert(values !=
NULL);
5408assert(linvars !=
NULL|| nlinvars == 0);
5409assert(lincoefs !=
NULL|| nlinvars == 0);
5410assert(nvars >= nlinvars);
5412assert(consanddatas !=
NULL);
5413assert(consanddatacoefs !=
NULL);
5414assert(nconsanddatas > 0);
5415assert(*xortype >= -1 && *xortype <= 1);
5418 SCIPsortPtr((
void**)linvars, SCIPvarCompActiveAndNegated, nlinvars);
5419 SCIPsortPtr((
void**)vars, SCIPvarCompActiveAndNegated, nvars);
5422 for( v = nlinvars - 1; v >= 0; --v )
5424 if(
SCIPsortedvecFindPtr((
void**)vars, SCIPvarCompActiveAndNegated, linvars[v], nvars, &pos) )
5427value += lincoefs[v];
5442 for( c = nconsanddatas - 1; c >= 0; --c )
5446consanddata = consanddatas[c];
5447assert(consanddata !=
NULL);
5453termvars = consanddata->
newvars;
5454ntermvars = consanddata->
nnewvars;
5458termvars = consanddata->
vars;
5459ntermvars = consanddata->
nvars;
5461assert(ntermvars > 0 && termvars !=
NULL);
5467 SCIPsortPtrBool((
void**)repvars, negated, SCIPvarCompActiveAndNegated, ntermvars);
5469 for( v = ntermvars - 1; v >= 0; --v )
5478 if( (negated[v] && values[pos]) || (!negated[v] && !values[pos]) )
5494 if( val != consanddatanegs[c] )
5495value += consanddatacoefs[c];
5501 if( *xortype == -1 )
5509 else if( *xortype == 1 && cnt % 2 == 0 )
5511 else if( *xortype == 0 && cnt % 2 == 1 )
5517 if( *xortype == -1 )
5525 else if( *xortype == 1 && cnt % 2 == 1 )
5527 else if( *xortype == 0 && cnt % 2 == 0 )
5548 int*
constndelconss,
5549 int*
constnaddconss,
5550 int*
constnfixedvars,
5551 int*
constnchgcoefs,
5552 int*
constnchgsides,
5588assert(cons !=
NULL);
5589assert(conshdlrdata !=
NULL);
5590assert(ndelconss !=
NULL);
5591assert(nfixedvars !=
NULL);
5592assert(nchgcoefs !=
NULL);
5593assert(nchgsides !=
NULL);
5594assert(cutoff !=
NULL);
5598assert(consdata !=
NULL);
5600consanddatas = consdata->consanddatas;
5601andcoefs = consdata->andcoefs;
5602andnegs = consdata->andnegs;
5603nconsanddatas = consdata->nconsanddatas;
5604assert(nconsanddatas > 0 && consanddatas !=
NULL);
5606assert(consdata->lincons !=
NULL);
5613assert(consanddatas[0] !=
NULL);
5614assert(consanddatas[0]->cons !=
NULL);
5616lincons = consdata->lincons;
5620assert(nallvars - nconsanddatas == consdata->nlinvars);
5621nlinvars = consdata->nlinvars;
5638assert(nallvars > 0);
5643assert(nlinvars == consdata->nlinvars);
5644assert(nandress == nallvars-nlinvars);
5655firstnlinvars = nlinvars;
5658 SCIPsortPtr((
void**)linvars, SCIPvarCompActiveAndNegated, nlinvars);
5660 for( c = nconsanddatas - 1; c >= 0; --c )
5662consanddata = consanddatas[c];
5663assert(consanddata !=
NULL);
5669vars = consanddata->
newvars;
5674vars = consanddata->
vars;
5675nvars = consanddata->
nvars;
5677assert(nvars > 0 && vars !=
NULL);
5686 SCIPsortPtr((
void**)repvars, SCIPvarCompActiveAndNegated, nvars);
5688oldnlinvars = nlinvars;
5691 for( v = nvars - 1, v1 = nlinvars - 1; v >= 0 && v1 >= 0; )
5711linvars[nlinvars] = var;
5733 for( ; v >= 0; --v )
5748linvars[nlinvars] = var;
5757 if( nlinvars > oldnlinvars )
5760 SCIPsortPtr((
void**)linvars, SCIPvarCompActiveAndNegated, nlinvars);
5768 for( v = (1 << nlinvars) - 1; v >= 0; --v )
5771 for( v1 = nlinvars - 1; v1 >= 0; --v1 )
5772 if( v & (1 << v1) )
5778values[v1] =
FALSE;
5781assert(cnt <= nlinvars);
5784consdata->lhs, consanddatas, andcoefs, andnegs, nconsanddatas, cnt, &xortype) );
5785 if( xortype == -1 )
5791assert(xortype >= -1 && xortype <= 1);
5839 int*
constndelconss,
5840 int*
constnaddconss,
5841 int*
constnfixedvars,
5842 int*
constnchgcoefs,
5843 int*
constnchgsides,
5859assert(cons !=
NULL);
5860assert(conshdlrdata !=
NULL);
5861assert(ndelconss !=
NULL);
5862assert(nfixedvars !=
NULL);
5863assert(nchgcoefs !=
NULL);
5864assert(nchgsides !=
NULL);
5865assert(cutoff !=
NULL);
5869assert(consdata !=
NULL);
5871consanddatas = consdata->consanddatas;
5872nconsanddatas = consdata->nconsanddatas;
5873assert(nconsanddatas > 0 && consanddatas !=
NULL);
5875assert(consdata->lincons !=
NULL);
5878assert(consanddatas[0] !=
NULL);
5879assert(consanddatas[0]->cons !=
NULL);
5881 if( nconsanddatas == 1 )
5901 if( consdata->nlinvars == 0 )
5913lincons = consdata->lincons;
5915consanddata = consanddatas[0];
5916assert(consanddata !=
NULL);
5922vars = consanddata->
newvars;
5927vars = consanddata->
vars;
5928nvars = consanddata->
nvars;
5930assert(nvars > 0 && vars !=
NULL);
5944assert(nallvars == consdata->nlinvars + 1);
5946nlinvars = consdata->nlinvars;
5956assert(allcoefs !=
NULL);
5961assert(nlinvars == consdata->nlinvars);
5964 for( v = 0; v < nlinvars; ++v )
5970 for( v = 0; v < nvars; ++v )
6002c = nconsanddatas - 1;
6003assert(consanddatas[c]->istransformed);
6006 if( consanddatas[c]->nnewvars > 0 )
6008neqvars = consanddatas[c]->
nnewvars;
6014neqvars = consanddatas[c]->
nvars;
6020assert(neqvars > 0 && eqvars !=
NULL);
6024 for( v = neqvars - 1; v > 0; --v )
6028 for( --c ; c >= 0; --c )
6035consanddata = consanddatas[c];
6036assert(consanddata !=
NULL);
6037assert(consanddatas[c]->istransformed);
6042vars = consanddata->
newvars;
6047vars = consanddata->
vars;
6048nvars = consanddata->
nvars;
6050assert(nvars > 0 && vars !=
NULL);
6054 for( v = nvars - 1; v > 0; --v )
6059 if( nvars < nminvars )
6062 else if( nvars > nmaxvars )
6064assert(nminvars > 0);
6065assert(nminvars <= nmaxvars);
6068 for( v = 0, v2 = 0; v < neqvars && v2 < nvars; )
6073assert(eqvars[v] !=
NULL);
6074assert(vars[v2] !=
NULL);
6079 if( index1 < index2 )
6081 else if( index1 > index2 )
6085assert(index1 == index2);
6086assert(nneweqvars <= v);
6088 if( nneweqvars < v )
6089eqvars[nneweqvars] = eqvars[v];
6095neqvars = nneweqvars;
6100 if( nminvars > neqvars + 1 )
6142 if( neqvars > 0 && consdata->nlinvars == 0 )
6148 for( v = 0; v < neqvars; ++v )
6165 if( nminvars == neqvars )
6177 if( neqvars > 0 && nminvars == nmaxvars && nminvars == neqvars + 1 )
6188lincons = consdata->lincons;
6200 for( c = nconsanddatas - 1; c >= 0; --c )
6206consanddata = consanddatas[c];
6207assert(consanddata !=
NULL);
6208assert(consanddatas[c]->istransformed);
6213vars = consanddata->
newvars;
6218vars = consanddata->
vars;
6219nvars = consanddata->
nvars;
6221assert(nvars > 0 && vars !=
NULL);
6223 for( v = 0, v2 = 0; v < neqvars && v2 < nvars; )
6228assert(eqvars[v] !=
NULL);
6229assert(vars[v2] !=
NULL);
6234assert(index1 >= index2);
6236 if( index1 > index2 )
6243assert(index1 == index2);
6252assert(v == neqvars);
6253 for( ; v2 < nvars; ++v2)
6258assert(v == neqvars && v2 == nvars);
6265 if( consdata->nlinvars > 0 )
6275 for( v = 0; v < neqvars; ++v )
6282assert(nvars == consdata->nlinvars + consdata->nconsanddatas);
6292assert(nvars == 0 || (coefs !=
NULL));
6296 for( v = 0; v < nvars; ++v )
6302assert(nlinvars == consdata->nlinvars);
6305 for( v = 0; v < nlinvars; ++v )
6351 int*
constndelconss,
6352 int*
constnaddconss,
6353 int*
constnfixedvars,
6354 int*
constnchgcoefs,
6355 int*
constnchgsides,
6372assert(cons !=
NULL);
6373assert(conshdlrdata !=
NULL);
6374assert(ndelconss !=
NULL);
6375assert(nfixedvars !=
NULL);
6376assert(nchgcoefs !=
NULL);
6377assert(nchgsides !=
NULL);
6378assert(cutoff !=
NULL);
6382assert(consdata !=
NULL);
6384consanddatas = consdata->consanddatas;
6385nconsanddatas = consdata->nconsanddatas;
6386assert(nconsanddatas > 0 && consanddatas !=
NULL);
6388assert(consdata->lincons !=
NULL);
6405assert(consanddatas[0] !=
NULL);
6406assert(consanddatas[0]->cons !=
NULL);
6408 if( nconsanddatas == 1 )
6411 if( consdata->nlinvars == 0 )
6440 if( consdata->nlinvars > 0 )
6445assert(consdata->nlinvars == 0 && nconsanddatas > 1);
6447c = nconsanddatas - 1;
6448assert(consanddatas[c]->istransformed);
6451 if( consanddatas[c]->nnewvars > 0 )
6453neqvars = consanddatas[c]->
nnewvars;
6459neqvars = consanddatas[c]->
nvars;
6465assert(neqvars > 0 && eqvars !=
NULL);
6469 for( v = neqvars - 1; v > 0; --v )
6473 for( --c ; c >= 0; --c )
6480consanddata = consanddatas[c];
6481assert(consanddata !=
NULL);
6482assert(consanddatas[c]->istransformed);
6487vars = consanddata->
newvars;
6492vars = consanddata->
vars;
6493nvars = consanddata->
nvars;
6495assert(nvars > 0 && vars !=
NULL);
6499 for( v = nvars - 1; v > 0; --v )
6504 if( nvars < nminvars )
6507 else if( nvars > nmaxvars )
6509assert(nminvars > 0);
6510assert(nminvars <= nmaxvars);
6513 for( v = 0, v2 = 0; v < neqvars && v2 < nvars; )
6518assert(eqvars[v] !=
NULL);
6519assert(vars[v2] !=
NULL);
6524 if( index1 < index2 )
6526 else if( index1 > index2 )
6530assert(index1 == index2);
6531assert(nneweqvars <= v);
6533 if( nneweqvars < v )
6534eqvars[nneweqvars] = eqvars[v];
6540neqvars = nneweqvars;
6582 if( neqvars > 0 && ((nminvars == nmaxvars && nminvars == neqvars + 1) || (nminvars == neqvars) || (type ==
SCIP_SETPPCTYPE_PARTITIONING)) )
6612 if( neqvars == nminvars )
6615createcons = (
SCIPisLE(
scip, lhs, rhs) && ((nminvars == nmaxvars && nminvars == neqvars + 1) || (nminvars == neqvars)));
6620lincons = consdata->lincons;
6638 for( c = nconsanddatas - 1; c >= 0; --c )
6644consanddata = consanddatas[c];
6645assert(consanddata !=
NULL);
6646assert(consanddatas[c]->istransformed);
6651vars = consanddata->
newvars;
6656vars = consanddata->
vars;
6657nvars = consanddata->
nvars;
6659assert(nvars > 0 && vars !=
NULL);
6662 if( deletecons && neqvars + 1 < nvars )
6681 for( v = 0, v2 = 0; v < neqvars && v2 < nvars; )
6686assert(eqvars[v] !=
NULL);
6687assert(vars[v2] !=
NULL);
6692assert(index1 >= index2);
6694 if( index1 > index2 )
6698assert(newcons !=
NULL);
6701 else if( deletecons )
6718assert(index1 == index2);
6728assert(v == neqvars);
6729 for( ; v2 < nvars; ++v2)
6735 else if( deletecons )
6750assert(v == neqvars && v2 == nvars);
6756 for( v = 0; v < neqvars; ++v )
6782assert(newcons !=
NULL);
6801assert(!deletecons);
6827 int*
constndelconss,
6828 int*
constnaddconss,
6829 int*
constnfixedvars,
6830 int*
constnchgcoefs,
6831 int*
constnchgsides,
6842assert(cons !=
NULL);
6843assert(conshdlrdata !=
NULL);
6844assert(ndelconss !=
NULL);
6845assert(nfixedvars !=
NULL);
6846assert(nchgcoefs !=
NULL);
6847assert(nchgsides !=
NULL);
6848assert(cutoff !=
NULL);
6852assert(consdata !=
NULL);
6853assert(consdata->lincons !=
NULL);
6856consanddatas = consdata->consanddatas;
6857assert(consdata->nconsanddatas == 0 || consanddatas !=
NULL);
6861 if( consdata->nconsanddatas == 0 )
6877assert(consdata->nlinvars + consdata->nconsanddatas == nvars);
6879 switch( consdata->linconstype )
6896#ifdef WITHEQKNAPSACK 6897 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
6914consdata->upgradetried =
TRUE;
6925 int*
constndelconss,
6926 int*
constnaggrvars,
6948assert(cons !=
NULL);
6949assert(conshdlrdata !=
NULL);
6950assert(ndelconss !=
NULL);
6951assert(naggrvars !=
NULL);
6952assert(cutoff !=
NULL);
6959assert(consdata !=
NULL);
6960assert(consdata->lincons !=
NULL);
6962consanddatas = consdata->consanddatas;
6963nconsanddatas = consdata->nconsanddatas;
6964assert(nconsanddatas == 0 || consanddatas !=
NULL);
6970assert(
SCIPisEQ(
scip, consdata->rhs, consdata->lhs));
6973 if( nconsanddatas < 2 || nconsanddatas > 3 )
6979assert(consdata->nlinvars + nconsanddatas == nvars);
6982 if( consdata->nlinvars != 1 )
6986 if( consanddatas[0]->nnewvars > 0 )
6987nvars = consanddatas[0]->
nnewvars;
6989nvars = consanddatas[0]->
nvars;
6991 if( consanddatas[1]->nnewvars > 0 )
6993 if( nvars != consanddatas[1]->nnewvars )
6996 else if( nvars != consanddatas[1]->nvars )
7011 if( consanddatas[nconsanddatas - 1]->nnewvars > 0 )
7012vars = consanddatas[nconsanddatas - 1]->
newvars;
7014vars = consanddatas[nconsanddatas - 1]->
vars;
7018 SCIPsortPtrBool((
void**)repvars, negated, SCIPvarCompActiveAndNegated, nvars);
7022 for( v = 1; v < nvars; ++v )
7042assert(var1 != var2);
7047 for( v = nvars - 1; v >= 0; --v )
7058++(varcount[negated[v]][v]);
7061 for( c = nconsanddatas - 2; c >= 0; --c )
7066 if( consanddatas[nconsanddatas - 1]->nnewvars > 0 )
7067vars = consanddatas[c]->
newvars;
7069vars = consanddatas[c]->
vars;
7076 SCIPsortPtrBool((
void**)repvars, negated, SCIPvarCompActiveAndNegated, nvars);
7080 for( v = 1; v < nvars; ++v )
7100assert(var1 != var2);
7105 for( v = nvars - 1; v >= 0; --v )
7115 if(
SCIPsortedvecFindPtr((
void**)allvars, SCIPvarCompActiveAndNegated, repvars[v], nvars, &pos) )
7117assert(pos >= 0 && pos < nvars);
7119++(varcount[negated[v]][pos]);
7132 for( i = 1; i >= 0; --i )
7134 for( v = nvars - 1; v >= 0; --v )
7138 if( varcount[i][v] == 0 )
7140 else if( varcount[i][v] == 1 )
7142 else if( varcount[i][v] == 2 )
7150 if( othercount == 0 )
7155 if( nconsanddatas == 2 && twocount == nvars - 1 && onecount == 2 && zerocount == 1 )
7170assert(nconsvars == consdata->nlinvars + nconsanddatas);
7171assert(conscoefs !=
NULL);
7175 for( v = 0; v < nconsvars; ++v )
7183assert(nlinvars == 1);
7184assert(linvar !=
NULL);
7202 for( i = 1; i >= 0; --i )
7204 for( v = nvars - 1; v >= 0; --v )
7207 if( varcount[i][v] == 2 )
7219assert(var !=
NULL);
7256 else if( nvars == 2 && nconsanddatas == 3 && twocount == 2 && onecount == 2 && zerocount == 0)
7275assert(nconsvars == consdata->nlinvars + nconsanddatas);
7276assert(conscoefs !=
NULL);
7280 for( v = 0; v < nconsvars; ++v )
7288assert(nlinvars == 1);
7289assert(linvar !=
NULL);
7294newandvars[0] =
NULL;
7295newandvars[1] =
NULL;
7299 for( i = 1; i >= 0; --i )
7301 for( v = nvars - 1; v >= 0; --v )
7304 if( varcount[i][v] == 1 )
7306 if( newandvars[0] ==
NULL)
7310assert(newandvars[1] ==
NULL);
7322assert(newandvars[0] !=
NULL&& newandvars[1] !=
NULL);
7385assert(cons !=
NULL);
7386assert(graph !=
NULL);
7387assert(success !=
NULL);
7390assert(consdata !=
NULL);
7404 if( vars[0] !=
NULL)
7417 if( consdata->intvar !=
NULL)
7419vars[0] = consdata->intvar;
7443 for( i = 0; i < tmpnvars; ++i )
7444vals[i] = tmpvals[i];
7449 for( i = 0; i < tmpnvars; ++i )
7455 for( i = 0; i < tmpnvars; ++i )
7461 for( i = 0; i < tmpnvars; ++i )
7471assert(tmpvars !=
NULL);
7472 for( i = 0; i < tmpnvars; ++i )
7473vars[i] = tmpvars[i];
7485 for( c = 0; c < consdata->nconsanddatas; ++c )
7487assert(consdata->consanddatas[c] !=
NULL);
7492tmpnvars = consdata->consanddatas[c]->nvars;
7493 for( i = 0; i < tmpnvars; ++i )
7494vars[i] = consdata->consanddatas[c]->vars[i];
7495 for( i = 0; i < tmpnvars; ++i )
7517#ifdef NONLINCONSUPGD_PRIORITY 7523SCIP_EXPRGRAPH* exprgraph;
7524SCIP_EXPRGRAPHNODE* node;
7538assert(nupgdconss !=
NULL);
7539assert(upgdconss !=
NULL);
7543node = SCIPgetExprgraphNodeNonlinear(
scip, cons);
7549 switch( SCIPexprgraphGetNodeOperator(node) )
7551 caseSCIP_EXPR_VARIDX:
7552 caseSCIP_EXPR_CONST:
7553 caseSCIP_EXPR_PLUS:
7554 caseSCIP_EXPR_MINUS:
7556 caseSCIP_EXPR_LINEAR:
7562 caseSCIP_EXPR_SQUARE:
7563 caseSCIP_EXPR_SQRT:
7564 caseSCIP_EXPR_REALPOWER:
7565 caseSCIP_EXPR_INTPOWER:
7566 caseSCIP_EXPR_SIGNPOWER:
7577 caseSCIP_EXPR_SIGN:
7578 caseSCIP_EXPR_PRODUCT:
7579 caseSCIP_EXPR_USER:
7583 caseSCIP_EXPR_QUADRATIC:
7586 caseSCIP_EXPR_POLYNOMIAL:
7590 caseSCIP_EXPR_PARAM:
7591 caseSCIP_EXPR_LAST:
7601 for( i = 0; i < SCIPgetNLinearVarsNonlinear(
scip, cons); ++i )
7603var = SCIPgetLinearVarsNonlinear(
scip, cons)[i];
7604assert(var !=
NULL);
7615 for( i = 0; i < SCIPexprgraphGetNodeNChildren(node); ++i )
7617SCIP_EXPRGRAPHNODE* child;
7619child = SCIPexprgraphGetNodeChildren(node)[i];
7620assert(child !=
NULL);
7621 if( SCIPexprgraphGetNodeOperator(child) != SCIP_EXPR_VARIDX )
7623 SCIPdebugMsg(
scip,
"not pseudoboolean because child %d is not a variable\n", i);
7627var = (
SCIP_VAR*)SCIPexprgraphGetNodeVar(exprgraph, child);
7628assert(var !=
NULL);
7638 if( upgdconsssize < 1 )
7648lhs -= SCIPexprgraphGetNodePolynomialConstant(node);
7650rhs -= SCIPexprgraphGetNodePolynomialConstant(node);
7653 if( objvar !=
NULL)
7657 for( i = 0; i < SCIPgetNLinearVarsNonlinear(
scip, cons); ++i )
7659var = SCIPgetLinearVarsNonlinear(
scip, cons)[i];
7660 if( var != objvar )
7661linvars[nlinvars++] = var;
7665nlinvars = SCIPgetNLinearVarsNonlinear(
scip, cons);
7668 nterms= SCIPexprgraphGetNodePolynomialNMonomials(node);
7673 for( i = 0; i <
nterms; ++i )
7675SCIP_EXPRDATA_MONOMIAL* monomial;
7677monomial = SCIPexprgraphGetNodePolynomialMonomials(node)[i];
7678assert(monomial !=
NULL);
7680ntermvars[i] = SCIPexprGetMonomialNFactors(monomial);
7683 for( j = 0; j < SCIPexprGetMonomialNFactors(monomial); ++j )
7685terms[i][j] = (
SCIP_VAR*)SCIPexprgraphGetNodeVar(exprgraph, SCIPexprgraphGetNodeChildren(node)[SCIPexprGetMonomialChildIndices(monomial)[j]]);
7686assert(SCIPexprGetMonomialExponents(monomial)[j] > 0.0);
7689termvals[i] = SCIPexprGetMonomialCoef(monomial);
7694objvar !=
NULL? linvars : SCIPgetLinearVarsNonlinear(
scip, cons), nlinvars, SCIPgetLinearCoefsNonlinear(
scip, cons),
7701 for( i =
nterms-1; i >= 0; --i )
7718assert(conshdlr !=
NULL);
7736assert(conshdlr !=
NULL);
7741assert(conshdlrdata !=
NULL);
7759assert(conshdlr !=
NULL);
7763assert(conshdlrdata !=
NULL);
7766 for( c = conshdlrdata->nallconsanddatas - 1; c >= 0; --c )
7775assert(conshdlrdata->allconsanddatas[c] !=
NULL);
7776assert(conshdlrdata->allconsanddatas[c]->newvars ==
NULL);
7778vars = conshdlrdata->allconsanddatas[c]->vars;
7779nvars = conshdlrdata->allconsanddatas[c]->nvars;
7780assert(vars !=
NULL|| nvars == 0);
7783 for( v = nvars - 1; v > 0; --v )
7791andcons = conshdlrdata->allconsanddatas[c]->cons;
7792assert(andcons !=
NULL);
7802 SCIPconsGetName(conshdlrdata->allconsanddatas[c]->cons), (
void*)(conshdlrdata->allconsanddatas[c]),
7803(
void*)(conshdlrdata->allconsanddatas[c]->cons));
7817assert(conshdlr !=
NULL);
7821assert(conshdlrdata !=
NULL);
7824 for( c = 0; c < nconss; ++c )
7833assert(cons !=
NULL);
7840assert(consdata !=
NULL);
7841assert(consdata->intvar ==
NULL);
7844 if( !conshdlrdata->decomposenormalpbcons && !consdata->issoftcons )
7856assert(nvars == 0 || (coefs !=
NULL));
7859 if( !consdata->issoftcons )
7880assert(consdata->weight != 0);
7881assert(consdata->indvar !=
NULL);
7885assert(negindvar !=
NULL);
7896updateandconss =
FALSE;
7899 if( conshdlrdata->decomposeindicatorpbcons )
7921updateandconss =
TRUE;
7934 for( v = nvars - 1; v >= 0; --v )
7944 if( !updateandconss )
7968 for( v = nvars - 1; v >= 0; --v )
8002updateandconss =
TRUE;
8014ub = lhs - maxact - 1;
8045 if( !updateandconss )
8061lb = rhs - minact + 1;
8104assert(conshdlr !=
NULL);
8105assert(cons !=
NULL);
8106assert(consdata !=
NULL);
8107assert(*consdata !=
NULL);
8111assert(conshdlrdata !=
NULL);
8122 for( c = (*consdata)->nconsanddatas - 1; c >= 0; --c )
8124assert((*consdata)->consanddatas[c]->nuses == 0);
8125assert((*consdata)->consanddatas[c]->cons ==
NULL);
8126assert((*consdata)->consanddatas[c]->noriguses == 0 || ((*consdata)->consanddatas[c]->origcons !=
NULL&&
SCIPconsIsOriginal((*consdata)->consanddatas[c]->origcons)));
8129conshdlrdata->noriguses -= (*consdata)->nconsanddatas;
8131assert(conshdlrdata->noriguses >= 0);
8149assert(conshdlr !=
NULL);
8152assert(sourcecons !=
NULL);
8153assert(targetcons !=
NULL);
8156assert(sourcedata !=
NULL);
8158assert(sourcedata->nconsanddatas == 0 || sourcedata->consanddatas !=
NULL);
8164 for( c = sourcedata->nconsanddatas - 1; c >= 0; --c )
8166assert(sourcedata->consanddatas[c] !=
NULL);
8167andconss[c] = sourcedata->consanddatas[c]->origcons;
8168assert(andconss[c] !=
NULL);
8174andconss, sourcedata->andcoefs, sourcedata->andnegs, sourcedata->nconsanddatas, sourcedata->indvar, sourcedata->weight,
8175sourcedata->issoftcons, sourcedata->intvar, sourcedata->lhs, sourcedata->rhs,
SCIPconsIsChecked(sourcecons),
8198assert(conshdlr !=
NULL);
8200assert(result !=
NULL);
8223assert(conshdlr !=
NULL);
8225assert(result !=
NULL);
8248assert(conshdlr !=
NULL);
8250assert(result !=
NULL);
8274assert(conshdlr !=
NULL);
8275assert(sol !=
NULL);
8277assert(result !=
NULL);
8287 for( c = nconss - 1; c >= 0 && (*result ==
SCIP_FEASIBLE|| completely); --c )
8290assert(consdata !=
NULL);
8292 if( consdata->issoftcons )
8294assert(consdata->indvar !=
NULL);
8325 intfirstupgradetry;
8336assert(conshdlr !=
NULL);
8338assert(result !=
NULL);
8341oldnfixedvars = *nfixedvars;
8342oldnaggrvars = *naggrvars;
8343oldnchgbds = *nchgbds;
8344oldndelconss = *ndelconss;
8345oldnupgdconss = *nupgdconss;
8346oldnchgcoefs = *nchgcoefs;
8347oldnchgsides = *nchgsides;
8355firstchange = INT_MAX;
8356firstupgradetry = INT_MAX;
8377assert(cons !=
NULL);
8381assert(consdata !=
NULL);
8382assert(consdata->lincons !=
NULL);
8404assert(nvars == 0 || (coefs !=
NULL));
8408andress, andcoefs, andnegs, &nandress) );
8433 if( firstchange == INT_MAX && consdata->changed )
8446 if( consdata->changed )
8449 SCIP_CALL(
tryUpgrading(
scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, &cutoff) );
8459 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
8460firstupgradetry = c;
8465consdata->presolved =
TRUE;
8483consdata->changed =
FALSE;
8502 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
8503|| *nupgdconss > oldnupgdconss || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
8524assert(cons !=
NULL);
8525assert(conshdlr !=
NULL);
8530assert(consdata !=
NULL);
8532lhs = consdata->lhs;
8533rhs = consdata->rhs;
8541 SCIPdebugMsg(
scip,
"%socking constraint <%s> by [%d;%d].\n", (nlocksneg < 0) || (nlockspos < 0) ?
"Unl":
"L",
SCIPconsGetName(cons), nlocksneg, nlockspos);
8544 for( c = consdata->nconsanddatas - 1; c >= 0; --c )
8553consanddata = consdata->consanddatas[c];
8554assert( consanddata !=
NULL);
8559andcons = consanddata->
cons;
8561 if( andcons ==
NULL)
8564assert(consanddata->
nnewvars== 0);
8565assert(consanddata->
nvars== 0);
8570consanddata->
nvars= 0;
8571consanddata->
svars= 0;
8578assert(andcons !=
NULL);
8581andvars = consanddata->
newvars;
8582nandvars = consanddata->
nnewvars;
8586andvars = consanddata->
vars;
8587nandvars = consanddata->
nvars;
8592assert(nandvars == 0 || andvars !=
NULL);
8593assert(andres !=
NULL);
8594val = consdata->andnegs[c] ? -consdata->andcoefs[c] : consdata->andcoefs[c];
8601 for( v = nandvars - 1; v >= 0; --v )
8611 for( v = nandvars - 1; v >= 0; --v )
8628 for( v = nandvars - 1; v >= 0; --v )
8638 for( v = nandvars - 1; v >= 0; --v )
8664assert(conshdlr !=
NULL);
8666assert(cons !=
NULL);
8677 const char* consname;
8680assert(sourcescip !=
NULL);
8681assert(sourcecons !=
NULL);
8689initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode, global,
8691assert(cons !=
NULL|| *valid ==
FALSE);
8715 const char* endptr;
8716 const char* firstcomp;
8717 const char* secondcomp;
8718 const char* lhsstrptr;
8719 const char* rhsstrptr;
8720 const char* varstrptr;
8721 char* polynomialstr;
8722 int* monomialnvars;
8732assert(success !=
NULL);
8733assert(str !=
NULL);
8734assert(name !=
NULL);
8735assert(cons !=
NULL);
8760 switch( endptr[0] )
8766 if( endptr[1] ==
'=')
8775 if( strncmp(endptr,
"[free]", 6) == 0 )
8790 if( firstcomp ==
NULL)
8796 if( secondcomp !=
NULL)
8801 else if( strncmp(firstcomp,
"<=", 2) != 0 )
8806 else if( strncmp(endptr,
"<=", 2) != 0 )
8808 SCIPerrorMessage(
"Bad second comparator, expected ranged specification: %s", str);
8812secondcomp = endptr;
8816endptr += increment;
8820 if( firstcomp ==
NULL)
8832 switch( *firstcomp )
8835assert(firstcomp[1] ==
'=');
8837 if( secondcomp !=
NULL)
8839assert(secondcomp[0] ==
'<'&& secondcomp[1] ==
'=');
8841rhsstrptr = secondcomp + 2;
8842varstrptr = firstcomp + 2;
8846rhsstrptr = firstcomp + 2;
8849assert(firstcomp[1] ==
'=');
8850assert(secondcomp ==
NULL);
8852lhsstrptr = firstcomp + 2;
8855assert(firstcomp[1] ==
'=');
8856assert(secondcomp ==
NULL);
8858rhsstrptr = firstcomp + 2;
8859lhsstrptr = firstcomp + 2;
8862assert(strncmp(firstcomp,
"[free]", 6) == 0);
8863assert(secondcomp ==
NULL);
8865endptr = firstcomp + 6;
8869 SCIPerrorMessage(
"Parsing has wrong comparator character '%c', should be one of <=>[", *firstcomp);
8878 if( lhsstrptr !=
NULL)
8882 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
8887 if( rhsstrptr == lhsstrptr )
8892 if( rhsstrptr !=
NULL&& rhsstrptr != lhsstrptr )
8896 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
8904issoftcons =
FALSE;
8911 if( *endptr ==
'(')
8913endptr = strchr(endptr + 1,
'=');
8915 if( endptr ==
NULL)
8924 if( indvar ==
NULL)
8931endptr = strchr(endptr,
')');
8933 if( endptr ==
NULL)
8944polynomialsize = (int)(
MAX(firstcomp, secondcomp) + 1 - varstrptr);
8946(void)
SCIPstrncpy(polynomialstr, varstrptr, polynomialsize);
8952polynomialsize -= (int)(endptr + 1 - polynomialstr);
8958 SCIPerrorMessage(
"no luck in parsing pseudoboolean polynomial '%s'\n", varstrptr);
8961 else if( polynomialsize >= 1 )
8963 SCIPerrorMessage(
"no completion of parsing pseudoboolean polynomial '%s'\n", varstrptr);
8980 for( i = 0; i < nmonomials; ++i )
8988 for( j = 0; j < monomialnvars[i]; ++j )
8990 if( monomialexps[i][j] < 0.0 )
8992 SCIPerrorMessage(
"invalid exponent '%f' on variable <%s> in pseudoboolean polynomial '%s'\n", monomialexps[i][j],
SCIPvarGetName(monomialvars[i][j]), varstrptr);
8996 if( monomialexps[i][j] == 0.0 )
8999monomialvars[i][ntermvars[
nterms]++] = monomialvars[i][j];
9002 if( ntermvars[
nterms] > 1 )
9004terms[
nterms] = monomialvars[i];
9005termvals[
nterms] = monomialcoefs[i];
9008 else if( ntermvars[
nterms] == 1 )
9010 if( issoftcons && ( monomialvars[i][0] == indvar ||
SCIPvarGetNegatedVar(monomialvars[i][0]) == indvar ) )
9016linvars[nlinvars] = monomialvars[i][0];
9017linvals[nlinvars] = monomialcoefs[i];
9022assert(ntermvars[
nterms] == 0);
9025lhs -= monomialcoefs[i];
9028rhs -= monomialcoefs[i];
9033 SCIP_CALL(
SCIPcreateConsPseudoboolean(
scip, cons, name, linvars, nlinvars, linvals, terms,
nterms, ntermvars, termvals, indvar, weight, issoftcons,
NULL, lhs, rhs, initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
9067assert(conshdlr !=
NULL);
9068assert(cons !=
NULL);
9069assert(vars !=
NULL);
9070assert(success !=
NULL);
9074assert(varssize >= 0);
9087assert(consdata !=
NULL);
9088assert(consdata->lincons !=
NULL);
9100assert(nlinconsvars >= 0);
9103 if( nlinconsvars == 0 )
9110 else if( varssize < nlinconsvars )
9112(*success) =
FALSE;
9127andress,
NULL,
NULL, &nandress) );
9128assert(nlinconsvars == nlinvars + nandress);
9134assert(linvars !=
NULL);
9138 if( nandress == 0 )
9141assert(andress !=
NULL);
9145assert(conshdlrdata !=
NULL);
9146assert(conshdlrdata->hashmap !=
NULL);
9150 for(
r= nandress - 1;
r>= 0; --
r)
9154assert(andress[
r] !=
NULL);
9158assert(consanddata !=
NULL);
9162andcons = consanddata->
cons;
9166assert(andcons !=
NULL);
9169 if( varssize <= nvars )
9171(*success) =
FALSE;
9177vars[nvars] = andress[
r];
9185assert(noperands >= 0);
9188 if( varssize < nvars + noperands )
9190(*success) =
FALSE;
9196 if( noperands > 0 )
9232assert(conshdlr !=
NULL);
9233assert(cons !=
NULL);
9234assert(nvars !=
NULL);
9235assert(success !=
NULL);
9248assert(consdata !=
NULL);
9249assert(consdata->lincons !=
NULL);
9261assert(nlinconsvars >= 0);
9264 if( nlinconsvars == 0 )
9281andress,
NULL,
NULL, &nandress) );
9282assert(nlinconsvars == nlinvars + nandress);
9286 if( nandress == 0 )
9289assert(andress !=
NULL);
9293assert(conshdlrdata !=
NULL);
9294assert(conshdlrdata->hashmap !=
NULL);
9298 for(
r= nandress - 1;
r>= 0; --
r)
9302assert(andress[
r] !=
NULL);
9306assert(consanddata !=
NULL);
9310andcons = consanddata->
cons;
9314assert(andcons !=
NULL);
9373consEnfolpPseudoboolean, consEnfopsPseudoboolean, consCheckPseudoboolean, consLockPseudoboolean,
9375assert(conshdlr !=
NULL);
9397 "decompose every normal pseudo boolean constraint into a \"linear\" constraint and \"and\" constraints",
9401 "decompose every soft pseudo boolean constraint into \"indicator\" constraints and \"and\" constraints",
9404 "constraints/" CONSHDLR_NAME "/nlcseparate",
"should the nonlinear constraints be separated during LP processing?",
9407 "constraints/" CONSHDLR_NAME "/nlcpropagate",
"should the nonlinear constraints be propagated during node processing?",
9410 "constraints/" CONSHDLR_NAME "/nlcremovable",
"should the nonlinear constraints be removable?",
9413#ifdef NONLINCONSUPGD_PRIORITY 9480assert(cons !=
NULL);
9481assert(lincons !=
NULL);
9483assert(nandconss == 0 || (andconss !=
NULL&& andcoefs !=
NULL));
9484assert(issoftcons == (indvar !=
NULL));
9486 if( intvar !=
NULL)
9489 SCIPerrorMessage(
"intvar currently not supported by pseudo boolean constraint handler\n");
9495 if( conshdlr ==
NULL)
9503assert(conshdlrdata !=
NULL);
9508assert(conshdlrdata->hashmap !=
NULL);
9509assert(conshdlrdata->hashtable !=
NULL);
9510assert(conshdlrdata->allconsanddatas !=
NULL);
9511assert(conshdlrdata->nallconsanddatas <= conshdlrdata->sallconsanddatas);
9513memisinvalid =
TRUE;
9519 for( c = nandconss - 1; c >= 0; --c )
9521assert(andconss[c] !=
NULL);
9525assert(vars !=
NULL&& nvars > 0);
9526assert(res !=
NULL);
9538newdata->
svars= nvars;
9545newdata->
nuses= 0;
9551assert(newdata !=
NULL);
9553 if( newdata->
svars< nvars )
9565newdata->
nvars= nvars;
9573assert(transformed);
9574newdata->
cons= andconss[c];
9577 for( v = newdata->
nvars- 1; v >= 0; --v )
9585assert(!transformed);
9593 if( tmpdata ==
NULL|| (tmpdata->
cons!= andconss[c] && tmpdata->
origcons!= andconss[c]))
9597 SCIPwarningMessage(
scip,
"Another and-constraint with the same variables but different and-resultant is added to the global and-constraint hashtable of pseudoboolean constraint handler.\n");
9601 if( conshdlrdata->nallconsanddatas == conshdlrdata->sallconsanddatas )
9606conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas] = newdata;
9607++(conshdlrdata->nallconsanddatas);
9613memisinvalid =
TRUE;
9629newdata->noriguses = 1;
9639memisinvalid =
FALSE;
9643assert(tmpdata->
nuses> 0);
9646++(tmpdata->
nuses);
9658 if( !memisinvalid )
9660assert(newdata !=
NULL);
9683indvar, weight, issoftcons, intvar, lhs, rhs, check,
FALSE) );
9684assert(consdata !=
NULL);
9687 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
9688local, modifiable, dynamic, removable, stickingatnode) );
9759assert(cons !=
NULL);
9760assert(nlinvars == 0 || (linvars !=
NULL&& linvals !=
NULL));
9762assert(issoftcons == (indvar !=
NULL));
9764 if( intvar !=
NULL)
9767 SCIPerrorMessage(
"intvar currently not supported by pseudo boolean constraint handler\n");
9773 if( conshdlr ==
NULL)
9779 if( modifiable && issoftcons )
9787assert(conshdlrdata !=
NULL);
9801initial, enforce, check, local, modifiable, dynamic, stickingatnode,
9802andconss, andcoefs, andnegs, &nandconss) );
9803assert(
nterms>= nandconss);
9806 for( c = nandconss - 1; c >= 0; --c )
9808assert(andconss[c] !=
NULL);
9825&lhs, &rhs, issoftcons, initial, separate, enforce,
FALSE, propagate, local, modifiable, dynamic,
9826removable, stickingatnode, &lincons, &linconstype) );
9827assert(lincons !=
NULL);
9833indvar, weight, issoftcons, intvar, lhs, rhs, check,
FALSE) );
9834assert(consdata !=
NULL);
9843 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
9844local, modifiable, dynamic, removable, stickingatnode) );
9881terms,
nterms, ntermvars, termvals, indvar, weight, issoftcons, intvar, lhs, rhs,
9904assert(cons !=
NULL);
9905assert(var !=
NULL);
9918assert(consdata !=
NULL);
9920 switch( consdata->linconstype )
9943#ifdef WITHEQKNAPSACK 9944 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
9957consdata->propagated =
FALSE;
9958consdata->presolved =
FALSE;
9959consdata->cliquesadded =
FALSE;
9980assert(cons !=
NULL);
9981assert(nvars == 0 || vars !=
NULL);
10004assert(cons !=
NULL);
10014assert(consdata !=
NULL);
10016 returnconsdata->indvar;
10028assert(cons !=
NULL);
10038assert(consdata !=
NULL);
10040 returnconsdata->lincons;
10052assert(cons !=
NULL);
10062assert(consdata !=
NULL);
10064 returnconsdata->linconstype;
10076assert(cons !=
NULL);
10088assert(consdata !=
NULL);
10090 returnconsdata->nlinvars;
10099 int*
constnlinvars
10109assert(cons !=
NULL);
10110assert(nlinvars !=
NULL);
10111assert(*nlinvars == 0 || linvars !=
NULL);
10112assert(*nlinvars == 0 || lincoefs !=
NULL);
10122assert(consdata !=
NULL);
10126 if( *nlinvars < consdata->nlinvars )
10128*nlinvars = consdata->nlinvars;
10143 SCIP_CALL(
getLinVarsAndAndRess(
scip, cons, vars, coefs, nvars, linvars, lincoefs, nlinvars,
NULL,
NULL,
NULL,
NULL) );
10159 int*
constnandconss
10168assert(cons !=
NULL);
10169assert(nandconss !=
NULL);
10170assert(*nandconss == 0 || andconss !=
NULL);
10171assert(*nandconss == 0 || andcoefs !=
NULL);
10181assert(consdata !=
NULL);
10185 if( *nandconss < consdata->nconsanddatas )
10187*nandconss = consdata->nconsanddatas;
10191*nandconss = consdata->nconsanddatas;
10192assert(*nandconss == 0 || consdata->consanddatas !=
NULL);
10196 for( c = *nandconss - 1; c >= 0; --c )
10198assert(consdata->consanddatas[c] !=
NULL);
10199assert(consdata->consanddatas[c]->istransformed ? (consdata->consanddatas[c]->cons !=
NULL) :
TRUE);
10200assert(consdata->consanddatas[c]->isoriginal ? (consdata->consanddatas[c]->origcons !=
NULL) :
TRUE);
10201assert(consdata->consanddatas[c]->cons !=
NULL|| consdata->consanddatas[c]->origcons !=
NULL);
10202assert(isorig ? consdata->consanddatas[c]->origcons !=
NULL: consdata->consanddatas[c]->cons !=
NULL);
10204andconss[c] = (isorig ? consdata->consanddatas[c]->origcons : consdata->consanddatas[c]->cons);
10205assert(andconss[c] !=
NULL);
10207andcoefs[c] = consdata->andcoefs[c];
10222assert(cons !=
NULL);
10234assert(consdata !=
NULL);
10236 returnconsdata->nconsanddatas;
10255assert(cons !=
NULL);
10266assert(consdata !=
NULL);
10268 switch( consdata->linconstype )
10276#ifdef WITHEQKNAPSACK 10277 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
10279 SCIPerrorMessage(
"changing left hand side only allowed on standard linear constraint \n");
10314assert(consdata !=
NULL);
10316 switch( consdata->linconstype )
10324#ifdef WITHEQKNAPSACK 10325 caseSCIP_LINEARCONSTYPE_EQKNAPSACK:
10327 SCIPerrorMessage(
"changing right hand side only allowed on standard linear constraint \n");
10358assert(consdata !=
NULL);
10360 returnconsdata->lhs;
10383assert(consdata !=
NULL);
10385 returnconsdata->rhs;
Constraint handler for AND constraints, .
constraint handler for indicator constraints
Constraint handler for knapsack constraints of the form , x binary and .
Constraint handler for linear constraints in their most general form, .
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
constraint handler for nonlinear constraints specified by algebraic expressions
static SCIP_DECL_CONSENFOPS(consEnfopsPseudoboolean)
#define CONSHDLR_NEEDSCONS
static SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(consGetSignedPermsymGraphPseudoboolean)
static SCIP_RETCODE checkAndConss(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_SOL *const sol, SCIP_Bool *const violated)
static SCIP_RETCODE getLinVarsAndAndRess(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, SCIP_Real *const coefs, int const nvars, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int *const nlinvars, SCIP_VAR **const andress, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int *const nandress)
#define HASHSIZE_PSEUDOBOOLEANNONLINEARTERMS
static SCIP_RETCODE conshdlrdataCreate(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata)
static SCIP_RETCODE lockRoundingAndCons(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs)
#define CONSHDLR_CHECKPRIORITY
static SCIP_DECL_SORTPTRCOMP(resvarComp)
static SCIP_RETCODE copyConsPseudoboolean(SCIP *const targetscip, SCIP_CONS **targetcons, SCIP *const sourcescip, SCIP_CONS *const sourcecons, const char *name, SCIP_HASHMAP *const varmap, SCIP_HASHMAP *const consmap, SCIP_Bool const initial, SCIP_Bool const separate, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const propagate, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const removable, SCIP_Bool const stickingatnode, SCIP_Bool const global, SCIP_Bool *const valid)
static SCIP_RETCODE getLinearConsNVars(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, int *const nvars)
static SCIP_DECL_CONSGETPERMSYMGRAPH(consGetPermsymGraphPseudoboolean)
static SCIP_RETCODE checkLocksAndRes(SCIP *const scip, SCIP_VAR *res)
static SCIP_DECL_CONSPARSE(consParsePseudoboolean)
static SCIP_DECL_HASHKEYEQ(hashKeyEqAndConsDatas)
static SCIP_RETCODE propagateCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_Bool *const cutoff, int *const ndelconss)
static SCIP_DECL_CONSCHECK(consCheckPseudoboolean)
static SCIP_RETCODE getLinearConsSides(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real *const lhs, SCIP_Real *const rhs)
static SCIP_DECL_CONSTRANS(consTransPseudoboolean)
#define DEFAULT_DECOMPOSEINDICATORPBCONS
static SCIP_RETCODE conshdlrdataFree(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata)
static SCIP_DECL_CONSENFOLP(consEnfolpPseudoboolean)
static SCIP_RETCODE chgRhsLinearCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real const rhs)
#define CONSHDLR_MAXPREROUNDS
static SCIP_DECL_CONSCOPY(consCopyPseudoboolean)
static SCIP_DECL_CONSGETNVARS(consGetNVarsPseudoboolean)
static SCIP_DECL_CONSDELETE(consDeletePseudoboolean)
static SCIP_DECL_CONSINITPRE(consInitprePseudoboolean)
static SCIP_RETCODE computeConsAndDataChanges(SCIP *const scip, SCIP_CONSHDLRDATA *const conshdlrdata)
static SCIP_RETCODE getLinearConsVarsData(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_VAR **const vars, SCIP_Real *const coefs, int *const nvars)
#define checkConsConsistency(scip, cons)
static SCIP_RETCODE tryUpgradingLogicor(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff)
static SCIP_RETCODE unlockRoundingAndCons(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs)
static SCIP_RETCODE addCoefTerm(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, int const nvars, SCIP_Real const val)
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
#define DEFAULT_PROPAGATENONLINEAR
static SCIP_RETCODE inithashmapandtable(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata)
static SCIP_DECL_CONSINIT(consInitPseudoboolean)
static SCIP_DECL_CONSPRINT(consPrintPseudoboolean)
static SCIP_RETCODE createAndAddAndCons(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const vars, int const nvars, SCIP_Bool const initial, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const stickingatnode, SCIP_CONS **const andcons)
static SCIP_RETCODE consdataPrint(SCIP *const scip, SCIP_CONS *const cons, FILE *const file)
static SCIP_DECL_CONSENFORELAX(consEnforelaxPseudoboolean)
#define NONLINCONSUPGD_PRIORITY
static SCIP_RETCODE addNewLocks(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs)
static SCIP_DECL_CONSPRESOL(consPresolPseudoboolean)
static SCIP_RETCODE consdataCreate(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_CONSDATA **consdata, SCIP_CONS *const lincons, SCIP_LINEARCONSTYPE const linconstype, SCIP_CONS **const andconss, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int const nandconss, SCIP_VAR *const indvar, SCIP_Real const weight, SCIP_Bool const issoftcons, SCIP_VAR *const intvar, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool check, SCIP_Bool transforming)
static SCIP_RETCODE transformToOrig(SCIP *const scip, CONSANDDATA *consanddata, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE addCliques(SCIP *const scip, SCIP_CONS *const cons, SCIP_Bool *const cutoff, int *const naggrvars, int *const nchgbds)
static SCIP_DECL_HASHKEYVAL(hashKeyValAndConsDatas)
static SCIP_RETCODE chgLhs(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real lhs)
static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyPseudoboolean)
#define DEFAULT_REMOVABLENONLINEAR
static SCIP_RETCODE updateConsanddataUses(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss)
static SCIP_DECL_CONSLOCK(consLockPseudoboolean)
#define DEFAULT_SEPARATENONLINEAR
static SCIP_RETCODE createAndAddLinearCons(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const linvars, int const nlinvars, SCIP_Real *const linvals, SCIP_VAR **const andress, int const nandress, SCIP_Real const *const andvals, SCIP_Bool *const andnegs, SCIP_Real *const lhs, SCIP_Real *const rhs, SCIP_Bool const issoftcons, SCIP_Bool const initial, SCIP_Bool const separate, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const propagate, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const removable, SCIP_Bool const stickingatnode, SCIP_CONS **const lincons, SCIP_LINEARCONSTYPE *const linconstype)
static SCIP_DECL_HASHGETKEY(hashGetKeyAndConsDatas)
static SCIP_RETCODE findAggregation(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naggrvars, SCIP_Bool *const cutoff)
#define CONSHDLR_PRESOLTIMING
static SCIP_RETCODE createAndAddAnds(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const *const terms, SCIP_Real *const termcoefs, int const nterms, int const *const ntermvars, SCIP_Bool const initial, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const stickingatnode, SCIP_CONS **const andconss, SCIP_Real *const andvals, SCIP_Bool *const andnegs, int *const nandconss)
static SCIP_RETCODE tryUpgrading(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff)
static SCIP_DECL_CONSGETVARS(consGetVarsPseudoboolean)
#define CONSHDLR_EAGERFREQ
static SCIP_RETCODE chgLhsLinearCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real const lhs)
#define CONSHDLR_ENFOPRIORITY
#define DEFAULT_DECOMPOSENORMALPBCONS
static SCIP_RETCODE correctConshdlrdata(SCIP *const scip, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss)
static SCIP_RETCODE tryUpgradingSetppc(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff)
static SCIP_RETCODE checkSolution(SCIP *const scip, SCIP_VAR **const vars, int const nvars, SCIP_Bool *const values, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int const nlinvars, SCIP_Real const constant, SCIP_Real const side, CONSANDDATA **const consanddatas, SCIP_Real *const consanddatacoefs, SCIP_Bool *const consanddatanegs, int const nconsanddatas, int const cnt, int *const xortype)
static SCIP_RETCODE checkOrigPbCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_SOL *const sol, SCIP_Bool *const violated, SCIP_Bool const printreason)
static SCIP_RETCODE tryUpgradingXor(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff)
static SCIP_RETCODE chgRhs(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real rhs)
static SCIP_RETCODE updateAndConss(SCIP *const scip, SCIP_CONS *const cons)
static SCIP_RETCODE consdataFree(SCIP *const scip, SCIP_CONSDATA **consdata, SCIP_Bool isorig, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE removeOldLocks(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs)
static SCIP_DECL_CONSFREE(consFreePseudoboolean)
static SCIP_RETCODE correctLocksAndCaptures(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, SCIP_Real const newlhs, SCIP_Real const newrhs, SCIP_VAR **const andress, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int const nandress)
constraint handler for pseudoboolean constraints
#define ARTIFICIALVARNAMEPREFIX
Constraint handler for the set partitioning / packing / covering constraints .
Constraint handler for XOR constraints, .
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugAddSolVal(scip, var, val)
#define SCIP_CALL_ABORT(x)
SCIP_RETCODE SCIPchgLhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real const lhs)
int SCIPgetNVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
#define SCIP_DECL_NONLINCONSUPGD(x)
int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgRhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
SCIP_LINEARCONSTYPE SCIPgetLinearConsTypePseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
SCIP_RETCODE SCIPaddCoefPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR *const var, SCIP_Real const val)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsAnd(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPaddCoefKnapsack(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Longint weight)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgAndConsCheckFlagWhenUpgr(SCIP *scip, SCIP_CONS *cons, SCIP_Bool flag)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetResultantAnd(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsIndicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
int SCIPgetNAndsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
int SCIPgetNLinVarsWithoutAndPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
int SCIPgetNVarsAnd(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPgetLinDatasWithoutAndPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int *const nlinvars)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgAndConsRemovableFlagWhenUpgr(SCIP *scip, SCIP_CONS *cons, SCIP_Bool flag)
SCIP_Real SCIPgetLhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
int SCIPgetNVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsSetpack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsXor(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_Bool rhs, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_VAR * SCIPgetIndVarPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsortAndCons(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisAndConsSorted(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddTermPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, int const nvars, SCIP_Real const val)
SCIP_RETCODE SCIPchgRhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real const rhs)
SCIP_RETCODE SCIPaddCoefSetppc(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
enum SCIP_SetppcType SCIP_SETPPCTYPE
SCIP_RETCODE SCIPcreateConsKnapsack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Longint *weights, SCIP_Longint capacity, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint SCIPgetCapacityKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsSetpart(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsAnd(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsSetcover(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsBasicPseudoboolean(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR **linvars, int nlinvars, SCIP_Real *linvals, SCIP_VAR ***terms, int nterms, int *ntermvars, SCIP_Real *termvals, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPgetAndDatasPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONS **const andconss, SCIP_Real *const andcoefs, int *const nandconss)
SCIP_CONS * SCIPgetLinearConsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
enum SCIP_LinearConsType SCIP_LINEARCONSTYPE
SCIP_RETCODE SCIPcreateConsPseudobooleanWithConss(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONS *lincons, SCIP_LINEARCONSTYPE linconstype, SCIP_CONS **andconss, SCIP_Real *andcoefs, int nandconss, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPchgLhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
SCIP_RETCODE SCIPcreateConsPseudoboolean(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR **linvars, int nlinvars, SCIP_Real *linvals, SCIP_VAR ***terms, int nterms, int *ntermvars, SCIP_Real *termvals, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetRhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons)
SCIP_RETCODE SCIPaddCoefLogicor(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
@ SCIP_LINEARCONSTYPE_LINEAR
@ SCIP_LINEARCONSTYPE_INVALIDCONS
@ SCIP_LINEARCONSTYPE_LOGICOR
@ SCIP_LINEARCONSTYPE_KNAPSACK
@ SCIP_LINEARCONSTYPE_SETPPC
@ SCIP_SETPPCTYPE_PARTITIONING
@ SCIP_SETPPCTYPE_COVERING
@ SCIP_SETPPCTYPE_PACKING
SCIP_RETCODE SCIPincludeConshdlrPseudoboolean(SCIP *scip)
SCIP_RETCODE SCIPgetConsCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_CONS *sourcecons, SCIP_CONS **targetcons, SCIP_CONSHDLR *sourceconshdlr, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *name, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode, SCIP_Bool global, SCIP_Bool *valid)
SCIP_Bool SCIPisConsCompressionEnabled(SCIP *scip)
SCIP_RETCODE SCIPgetVarCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR *sourcevar, SCIP_VAR **targetvar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *success)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNFixedVars(SCIP *scip)
SCIP_VAR ** SCIPgetFixedVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element)
#define SCIPhashFour(a, b, c, d)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse)))
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit)))
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars)))
SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITPRE((*consinitpre)))
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETPERMSYMGRAPH((*consgetpermsymgraph)))
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete)))
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree)))
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy)))
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH((*consgetsignedpermsymgraph)))
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans)))
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars)))
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint)))
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
void SCIPconsAddUpgradeLocks(SCIP_CONS *cons, int nlocks)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsOriginal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConsInitial(SCIP *scip, SCIP_CONS *cons, SCIP_Bool initial)
SCIP_Bool SCIPconsIsLockedType(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocked(SCIP_CONS *cons)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsAdded(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPtransformCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **transcons)
SCIP_RETCODE SCIPsetConsChecked(SCIP *scip, SCIP_CONS *cons, SCIP_Bool check)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPcaptureCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPincConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize)
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBufferArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
void SCIPupdateSolConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPparseReal(SCIP *scip, const char *str, SCIP_Real *value, char **endptr)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_RETCODE SCIPremoveVarFromGlobalStructures(SCIP *scip, SCIP_VAR *var)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_RETCODE SCIPgetBinvarRepresentatives(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **repvars, SCIP_Bool *negated)
SCIP_Bool SCIPvarIsTransformed(SCIP_VAR *var)
SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPparseVarName(SCIP *scip, const char *str, SCIP_VAR **var, char **endptr)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPchgVarBranchPriority(SCIP *scip, SCIP_VAR *var, int branchpriority)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
void SCIPfreeParseVarsPolynomialData(SCIP *scip, SCIP_VAR ****monomialvars, SCIP_Real ***monomialexps, SCIP_Real **monomialcoefs, int **monomialnvars, int nmonomials)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsTransformedOrigvar(SCIP_VAR *var)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
SCIP_RETCODE SCIPwriteVarsPolynomial(SCIP *scip, FILE *file, SCIP_VAR ***monomialvars, SCIP_Real **monomialexps, SCIP_Real *monomialcoefs, int *monomialnvars, int nmonomials, SCIP_Bool type)
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
SCIP_Bool SCIPvarIsOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_RETCODE SCIPparseVarsPolynomial(SCIP *scip, const char *str, SCIP_VAR ****monomialvars, SCIP_Real ***monomialexps, SCIP_Real **monomialcoefs, int **monomialnvars, int *nmonomials, char **endptr, SCIP_Bool *success)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
SCIP_Bool SCIPvarsHaveCommonClique(SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortPtrBool(void **ptrarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortPtrRealBool(void **ptrarray, SCIP_Real *realarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortPtrPtrRealBool(void **ptrarray1, void **ptrarray2, SCIP_Real *realarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPskipSpace(char **s)
int SCIPstrncpy(char *t, const char *s, int size)
SCIP_RETCODE SCIPaddSymgraphEdge(SCIP *scip, SYM_GRAPH *graph, int first, int second, SCIP_Bool hasval, SCIP_Real val)
SCIP_RETCODE SCIPaddSymgraphOpnode(SCIP *scip, SYM_GRAPH *graph, int op, int *nodeidx)
SCIP_RETCODE SCIPgetSymActiveVariables(SCIP *scip, SYM_SYMTYPE symtype, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
SCIP_RETCODE SCIPaddSymgraphConsnode(SCIP *scip, SYM_GRAPH *graph, SCIP_CONS *cons, SCIP_Real lhs, SCIP_Real rhs, int *nodeidx)
SCIP_RETCODE SCIPaddSymgraphVarAggregation(SCIP *scip, SYM_GRAPH *graph, int rootidx, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real constant)
static volatile int nterms
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public methods for managing constraints
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for problem variables
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for solutions
public methods for SCIP variables
unsigned int istransformed
methods for dealing with symmetry detection graphs
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
struct SCIP_ConsData SCIP_CONSDATA
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_TRANSFORMING
enum SYM_Symtype SYM_SYMTYPE
@ SYM_CONSOPTYPE_PB_LINEAR
enum SCIP_Varstatus SCIP_VARSTATUS
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4