95#define CONSHDLR_NAME "linear"
96#define CONSHDLR_DESC "linear constraints of the form lhs <= a^T x <= rhs"
97#define CONSHDLR_SEPAPRIORITY +100000
98#define CONSHDLR_ENFOPRIORITY -1000000
99#define CONSHDLR_CHECKPRIORITY -1000000
100#define CONSHDLR_SEPAFREQ 0
101#define CONSHDLR_PROPFREQ 1
102#define CONSHDLR_EAGERFREQ 100
104#define CONSHDLR_MAXPREROUNDS -1
105#define CONSHDLR_DELAYSEPA FALSE
106#define CONSHDLR_DELAYPROP FALSE
107#define CONSHDLR_NEEDSCONS TRUE
109#define CONSHDLR_PRESOLTIMING (SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_EXHAUSTIVE)
110#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
112#define EVENTHDLR_NAME "linear"
113#define EVENTHDLR_DESC "bound change event handler for linear constraints"
115#define CONFLICTHDLR_NAME "linear"
116#define CONFLICTHDLR_DESC "conflict handler creating linear constraints"
117#define CONFLICTHDLR_PRIORITY -1000000
119#define DEFAULT_TIGHTENBOUNDSFREQ 1
120#define DEFAULT_MAXROUNDS 5
121#define DEFAULT_MAXROUNDSROOT -1
122#define DEFAULT_MAXSEPACUTS 50
123#define DEFAULT_MAXSEPACUTSROOT 200
124#define DEFAULT_PRESOLPAIRWISE TRUE
125#define DEFAULT_PRESOLUSEHASHING TRUE
126#define DEFAULT_NMINCOMPARISONS 200000
127#define DEFAULT_MINGAINPERNMINCOMP 1e-06
129#define DEFAULT_SORTVARS TRUE
131#define DEFAULT_CHECKRELMAXABS FALSE
133#define DEFAULT_MAXAGGRNORMSCALE 0.0
135#define DEFAULT_MAXEASYACTIVITYDELTA 1e6
137#define DEFAULT_MAXCARDBOUNDDIST 0.0
139#define DEFAULT_SEPARATEALL FALSE
141#define DEFAULT_AGGREGATEVARIABLES TRUE
142#define DEFAULT_SIMPLIFYINEQUALITIES TRUE
143#define DEFAULT_DUALPRESOLVING TRUE
144#define DEFAULT_SINGLETONSTUFFING TRUE
145#define DEFAULT_SINGLEVARSTUFFING FALSE
147#define DEFAULT_DETECTCUTOFFBOUND TRUE
150#define DEFAULT_DETECTLOWERBOUND TRUE
153#define DEFAULT_DETECTPARTIALOBJECTIVE TRUE
155#define DEFAULT_RANGEDROWPROPAGATION TRUE
156#define DEFAULT_RANGEDROWARTCONS TRUE
157#define DEFAULT_RANGEDROWMAXDEPTH INT_MAX
158#define DEFAULT_RANGEDROWFREQ 1
160#define DEFAULT_MULTAGGRREMOVE FALSE
162#define DEFAULT_MAXMULTAGGRQUOT 1e+03
163#define DEFAULT_MAXDUALMULTAGGRQUOT 1e+20
164#define DEFAULT_EXTRACTCLIQUES TRUE
166#define MAXDNOM 10000LL
167#define MAXSCALEDCOEF 0
168#define MAXSCALEDCOEFINTEGER 0
171#define MAXACTVAL 1e+09
175#define MAXVALRECOMP 1e+06
176#define MINVALRECOMP 1e-05
179#define NONLINCONSUPGD_PRIORITY 1000000
211 uint64_t possignature;
212 uint64_t negsignature;
218 int minactivityneginf;
219 int minactivityposinf;
220 int maxactivityneginf;
221 int maxactivityposinf;
222 int minactivityneghuge;
223 int minactivityposhuge;
224 int maxactivityneghuge;
225 int maxactivityposhuge;
226 int glbminactivityneginf;
227 int glbminactivityposinf;
228 int glbmaxactivityneginf;
229 int glbmaxactivityposinf;
230 int glbminactivityneghuge;
231 int glbminactivityposhuge;
232 int glbmaxactivityneghuge;
233 int glbmaxactivityposhuge;
239 unsigned int boundstightened:2;
240 unsigned int rangedrowpropagated:2;
242 unsigned int validmaxabsval:1;
243 unsigned int validminabsval:1;
244 unsigned int validactivities:1;
245 unsigned int validminact:1;
246 unsigned int validmaxact:1;
247 unsigned int validglbminact:1;
248 unsigned int validglbmaxact:1;
249 unsigned int presolved:1;
250 unsigned int removedfixings:1;
251 unsigned int validsignature:1;
252 unsigned int changed:1;
253 unsigned int normalized:1;
254 unsigned int upgradetried:1;
255 unsigned int upgraded:1;
256 unsigned int indexsorted:1;
257 unsigned int merged:1;
258 unsigned int cliquesadded:1;
259 unsigned int implsadded:1;
260 unsigned int coefsorted:1;
261 unsigned int varsdeleted:1;
262 unsigned int hascontvar:1;
263 unsigned int hasnonbinvar:1;
264 unsigned int hasnonbinvalid:1;
265 unsigned int checkabsolute:1;
277struct SCIP_ConshdlrData
288 int linconsupgradessize;
289 int nlinconsupgrades;
290 int tightenboundsfreq;
322 int rangedrowmaxdepth;
363 unsigned int proprule:8;
379 inferinfo.val.asint =
i;
390 return inferinfo.val.asint;
399 return (
int) inferinfo.val.asbits.proprule;
408 return (
int) inferinfo.val.asbits.pos;
424 inferinfo.val.asbits.proprule = (
unsigned int) proprule;
425 inferinfo.val.asbits.pos = (
unsigned int) pos;
455 assert(conshdlrdata->nlinconsupgrades <= conshdlrdata->linconsupgradessize);
457 if( num > conshdlrdata->linconsupgradessize )
463 conshdlrdata->linconsupgradessize = newsize;
465 assert(num <= conshdlrdata->linconsupgradessize);
480 assert(consdata->nvars <= consdata->varssize);
482 if( num > consdata->varssize )
489 if( consdata->eventdata !=
NULL )
493 consdata->varssize = newsize;
495 assert(num <= consdata->varssize);
519 (*linconsupgrade)->linconsupgd = linconsupgd;
520 (*linconsupgrade)->priority = priority;
521 (*linconsupgrade)->active =
TRUE;
553 (*conshdlrdata)->linconsupgrades =
NULL;
554 (*conshdlrdata)->linconsupgradessize = 0;
555 (*conshdlrdata)->nlinconsupgrades = 0;
556 (*conshdlrdata)->naddconss = 0;
559 (*conshdlrdata)->eventhdlr = eventhdlr;
577 for(
i = 0;
i < (*conshdlrdata)->nlinconsupgrades; ++
i )
592 const char* conshdlrname
602 for(
i = conshdlrdata->nlinconsupgrades - 1;
i >= 0; --
i )
604 if( conshdlrdata->linconsupgrades[
i]->linconsupgd == linconsupgd )
607 SCIPwarningMessage(
scip,
"Try to add already known upgrade message for constraint handler %s.\n", conshdlrname);
632 for(
i = conshdlrdata->nlinconsupgrades;
633 i > 0 && conshdlrdata->linconsupgrades[
i-1]->priority < linconsupgrade->
priority; --
i )
635 conshdlrdata->linconsupgrades[
i] = conshdlrdata->linconsupgrades[
i-1];
638 conshdlrdata->linconsupgrades[
i] = linconsupgrade;
639 conshdlrdata->nlinconsupgrades++;
740 consdata->eventdata[pos]->cons = cons;
741 consdata->eventdata[pos]->varpos = pos;
747 eventhdlr, consdata->eventdata[pos], &consdata->eventdata[pos]->filterpos) );
749 consdata->removedfixings = consdata->removedfixings &&
SCIPvarIsActive(consdata->vars[pos]);
776 assert(consdata->eventdata[pos]->cons == cons);
777 assert(consdata->eventdata[pos]->varpos == pos);
783 eventhdlr, consdata->eventdata[pos], consdata->eventdata[pos]->filterpos) );
814 for(
i = 0;
i < consdata->nvars; ++
i )
841 for(
i = consdata->nvars - 1;
i >= 0; --
i )
891 (*consdata)->varssize = 0;
892 (*consdata)->nvars =
nvars;
893 (*consdata)->hascontvar =
FALSE;
894 (*consdata)->hasnonbinvar =
FALSE;
895 (*consdata)->hasnonbinvalid =
TRUE;
896 (*consdata)->vars =
NULL;
897 (*consdata)->vals =
NULL;
911 for( v = 0; v < (*consdata)->nvars; ++v )
931 valsbuffer[
nvars] = val;
936 (*consdata)->hasnonbinvar =
TRUE;
939 (*consdata)->hascontvar =
TRUE;
944 (*consdata)->nvars =
nvars;
951 (*consdata)->varssize =
nvars;
958 (*consdata)->eventdata =
NULL;
970 (*consdata)->row =
NULL;
971 (*consdata)->nlrow =
NULL;
972 (*consdata)->lhs = lhs;
973 (*consdata)->rhs = rhs;
981 (*consdata)->maxactdeltavar =
NULL;
982 (*consdata)->minactivityneginf = -1;
983 (*consdata)->minactivityposinf = -1;
984 (*consdata)->maxactivityneginf = -1;
985 (*consdata)->maxactivityposinf = -1;
986 (*consdata)->minactivityneghuge = -1;
987 (*consdata)->minactivityposhuge = -1;
988 (*consdata)->maxactivityneghuge = -1;
989 (*consdata)->maxactivityposhuge = -1;
994 (*consdata)->glbminactivityneginf = -1;
995 (*consdata)->glbminactivityposinf = -1;
996 (*consdata)->glbmaxactivityneginf = -1;
997 (*consdata)->glbmaxactivityposinf = -1;
998 (*consdata)->glbminactivityneghuge = -1;
999 (*consdata)->glbminactivityposhuge = -1;
1000 (*consdata)->glbmaxactivityneghuge = -1;
1001 (*consdata)->glbmaxactivityposhuge = -1;
1002 (*consdata)->possignature = 0;
1003 (*consdata)->negsignature = 0;
1004 (*consdata)->validmaxabsval =
FALSE;
1005 (*consdata)->validminabsval =
FALSE;
1006 (*consdata)->validactivities =
FALSE;
1007 (*consdata)->validminact =
FALSE;
1008 (*consdata)->validmaxact =
FALSE;
1009 (*consdata)->validglbminact =
FALSE;
1010 (*consdata)->validglbmaxact =
FALSE;
1011 (*consdata)->boundstightened = 0;
1012 (*consdata)->presolved =
FALSE;
1013 (*consdata)->removedfixings =
FALSE;
1014 (*consdata)->validsignature =
FALSE;
1015 (*consdata)->changed =
TRUE;
1016 (*consdata)->normalized =
FALSE;
1017 (*consdata)->upgradetried =
FALSE;
1018 (*consdata)->upgraded =
FALSE;
1019 (*consdata)->indexsorted = (
nvars <= 1);
1020 (*consdata)->merged = (
nvars <= 1);
1021 (*consdata)->cliquesadded =
FALSE;
1022 (*consdata)->implsadded =
FALSE;
1023 (*consdata)->coefsorted =
FALSE;
1024 (*consdata)->nbinvars = -1;
1025 (*consdata)->varsdeleted =
FALSE;
1026 (*consdata)->rangedrowpropagated = 0;
1027 (*consdata)->checkabsolute =
FALSE;
1036 for( v = 0; v < (*consdata)->nvars; v++ )
1039 if( (*consdata)->vars[v] ==
NULL )
1066 assert((*consdata)->varssize >= 0);
1069 if( (*consdata)->row !=
NULL )
1075 if( (*consdata)->nlrow !=
NULL )
1081 for( v = 0; v < (*consdata)->nvars; v++ )
1113 if( consdata->nvars == 0 )
1160 if( consdata->nvars == 0 )
1167 for( v = 0; v < consdata->nvars; ++v )
1169 if( consdata->vals !=
NULL )
1171 if( consdata->vals[v] == 1.0 )
1176 else if( consdata->vals[v] == -1.0 )
1181 else if( consdata->nvars > 0 )
1214 consdata->validactivities =
FALSE;
1215 consdata->validminact =
FALSE;
1216 consdata->validmaxact =
FALSE;
1217 consdata->validglbminact =
FALSE;
1218 consdata->validglbmaxact =
FALSE;
1219 consdata->validmaxabsval =
FALSE;
1220 consdata->validminabsval =
FALSE;
1221 consdata->hasnonbinvalid =
FALSE;
1229 consdata->maxactdeltavar =
NULL;
1230 consdata->minactivityneginf = -1;
1231 consdata->minactivityposinf = -1;
1232 consdata->maxactivityneginf = -1;
1233 consdata->maxactivityposinf = -1;
1234 consdata->minactivityneghuge = -1;
1235 consdata->minactivityposhuge = -1;
1236 consdata->maxactivityneghuge = -1;
1237 consdata->maxactivityposhuge = -1;
1242 consdata->glbminactivityneginf = -1;
1243 consdata->glbminactivityposinf = -1;
1244 consdata->glbmaxactivityneginf = -1;
1245 consdata->glbmaxactivityposinf = -1;
1246 consdata->glbminactivityneghuge = -1;
1247 consdata->glbminactivityposhuge = -1;
1248 consdata->glbmaxactivityneghuge = -1;
1249 consdata->glbmaxactivityposhuge = -1;
1260 int pseudoactivityposinf;
1261 int pseudoactivityneginf;
1267 pseudoactivityposinf = 0;
1268 pseudoactivityneginf = 0;
1270 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1273 val = consdata->vals[
i];
1279 ++pseudoactivityposinf;
1281 ++pseudoactivityneginf;
1286 ++pseudoactivityneginf;
1288 ++pseudoactivityposinf;
1291 pseudoactivity += val *
bound;
1295 if( pseudoactivityneginf > 0 && pseudoactivityposinf > 0 )
1297 else if( pseudoactivityneginf > 0 )
1299 else if( pseudoactivityposinf > 0 )
1302 return pseudoactivity;
1317 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1326 consdata->validminact =
TRUE;
1329 consdata->lastminactivity =
QUAD_TO_DBL(consdata->minactivity);
1344 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1353 consdata->validmaxact =
TRUE;
1356 consdata->lastmaxactivity =
QUAD_TO_DBL(consdata->maxactivity);
1371 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1380 consdata->validglbminact =
TRUE;
1383 consdata->lastglbminactivity =
QUAD_TO_DBL(consdata->glbminactivity);
1398 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1407 consdata->validglbmaxact =
TRUE;
1410 consdata->lastglbmaxactivity =
QUAD_TO_DBL(consdata->glbmaxactivity);
1423 assert(!consdata->validmaxabsval);
1426 consdata->validmaxabsval =
TRUE;
1427 consdata->maxabsval = 0.0;
1428 for(
i = 0;
i < consdata->nvars; ++
i )
1430 absval = consdata->vals[
i];
1432 if( absval > consdata->maxabsval )
1433 consdata->maxabsval = absval;
1447 assert(!consdata->validminabsval);
1450 consdata->validminabsval =
TRUE;
1452 if( consdata->nvars > 0 )
1453 consdata->minabsval =
REALABS(consdata->vals[0]);
1455 consdata->minabsval = 0.0;
1457 for(
i = 1;
i < consdata->nvars; ++
i )
1459 absval = consdata->vals[
i];
1461 if( absval < consdata->minabsval )
1462 consdata->minabsval = absval;
1474 assert(!consdata->hasnonbinvalid);
1475 consdata->hasnonbinvar =
FALSE;
1476 consdata->hascontvar =
FALSE;
1478 for( v = consdata->nvars - 1; v >= 0; --v )
1482 consdata->hasnonbinvar =
TRUE;
1486 consdata->hascontvar =
TRUE;
1491 assert(consdata->hascontvar || v < 0);
1493 consdata->hasnonbinvalid =
TRUE;
1497#ifdef CHECKMAXACTDELTA
1514 for( v = consdata->nvars - 1; v >= 0; --v )
1526 delta =
REALABS(consdata->vals[v]) * domain;
1528 if( delta > maxactdelta )
1530 maxactdelta = delta;
1537#define checkMaxActivityDelta(scip, consdata)
1550 consdata->maxactdelta = 0.0;
1552 if( !consdata->hasnonbinvalid )
1556 if( !consdata->hasnonbinvar )
1558 for( v = consdata->nvars - 1; v >= 0; --v )
1562 delta =
REALABS(consdata->vals[v]);
1564 if( delta > consdata->maxactdelta )
1566 consdata->maxactdelta = delta;
1567 consdata->maxactdeltavar = consdata->vars[v];
1574 for( v = consdata->nvars - 1; v >= 0; --v )
1586 consdata->maxactdeltavar = consdata->vars[v];
1591 delta =
REALABS(consdata->vals[v]) * domain;
1593 if( delta > consdata->maxactdelta )
1595 consdata->maxactdelta = delta;
1596 consdata->maxactdeltavar = consdata->vars[v];
1619 int* activityposinf;
1620 int* activityneginf;
1621 int* activityposhuge;
1622 int* activityneghuge;
1632 assert(consdata->validactivities);
1637 assert(consdata->minactivityneginf >= 0);
1638 assert(consdata->minactivityposinf >= 0);
1639 assert(consdata->maxactivityneginf >= 0);
1640 assert(consdata->maxactivityposinf >= 0);
1641 assert(consdata->minactivityneghuge >= 0);
1642 assert(consdata->minactivityposhuge >= 0);
1643 assert(consdata->maxactivityneghuge >= 0);
1644 assert(consdata->maxactivityposhuge >= 0);
1649 assert(consdata->glbminactivityneginf >= 0);
1650 assert(consdata->glbminactivityposinf >= 0);
1651 assert(consdata->glbmaxactivityneginf >= 0);
1652 assert(consdata->glbmaxactivityposinf >= 0);
1653 assert(consdata->glbminactivityneghuge >= 0);
1654 assert(consdata->glbminactivityposhuge >= 0);
1655 assert(consdata->glbmaxactivityneghuge >= 0);
1656 assert(consdata->glbmaxactivityposhuge >= 0);
1674 lastactivity = &(consdata->lastglbminactivity);
1675 activityposinf = &(consdata->glbminactivityposinf);
1676 activityneginf = &(consdata->glbminactivityneginf);
1677 activityposhuge = &(consdata->glbminactivityposhuge);
1678 activityneghuge = &(consdata->glbminactivityneghuge);
1679 validact = consdata->validglbminact;
1684 lastactivity = &(consdata->lastglbmaxactivity);
1685 activityposinf = &(consdata->glbmaxactivityneginf);
1686 activityneginf = &(consdata->glbmaxactivityposinf);
1687 activityposhuge = &(consdata->glbmaxactivityposhuge);
1688 activityneghuge = &(consdata->glbmaxactivityneghuge);
1689 validact = consdata->validglbmaxact;
1697 lastactivity = &(consdata->lastglbmaxactivity);
1698 activityposinf = &(consdata->glbmaxactivityposinf);
1699 activityneginf = &(consdata->glbmaxactivityneginf);
1700 activityposhuge = &(consdata->glbmaxactivityposhuge);
1701 activityneghuge = &(consdata->glbmaxactivityneghuge);
1702 validact = consdata->validglbmaxact;
1707 lastactivity = &(consdata->lastglbminactivity);
1708 activityposinf = &(consdata->glbminactivityneginf);
1709 activityneginf = &(consdata->glbminactivityposinf);
1710 activityposhuge = &(consdata->glbminactivityposhuge);
1711 activityneghuge = &(consdata->glbminactivityneghuge);
1712 validact = consdata->validglbminact;
1730 lastactivity = &(consdata->lastminactivity);
1731 activityposinf = &(consdata->minactivityposinf);
1732 activityneginf = &(consdata->minactivityneginf);
1733 activityposhuge = &(consdata->minactivityposhuge);
1734 activityneghuge = &(consdata->minactivityneghuge);
1735 validact = consdata->validminact;
1740 lastactivity = &(consdata->lastmaxactivity);
1741 activityposinf = &(consdata->maxactivityneginf);
1742 activityneginf = &(consdata->maxactivityposinf);
1743 activityposhuge = &(consdata->maxactivityposhuge);
1744 activityneghuge = &(consdata->maxactivityneghuge);
1745 validact = consdata->validmaxact;
1753 lastactivity = &(consdata->lastmaxactivity);
1754 activityposinf = &(consdata->maxactivityposinf);
1755 activityneginf = &(consdata->maxactivityneginf);
1756 activityposhuge = &(consdata->maxactivityposhuge);
1757 activityneghuge = &(consdata->maxactivityneghuge);
1758 validact = consdata->validmaxact;
1763 lastactivity = &(consdata->lastminactivity);
1764 activityposinf = &(consdata->minactivityneginf);
1765 activityneginf = &(consdata->minactivityposinf);
1766 activityposhuge = &(consdata->minactivityposhuge);
1767 activityneghuge = &(consdata->minactivityneghuge);
1768 validact = consdata->validminact;
1773 oldcontribution = val * oldbound;
1774 newcontribution = val * newbound;
1781 if( oldbound > 0.0 )
1783 assert((*activityposinf) >= 1);
1786 if( finitenewbound || newbound < 0.0 )
1789 (*activityposinf)--;
1792 if( !finitenewbound && newbound < 0.0 )
1793 (*activityneginf)++;
1794 else if( hugevalnewcont )
1797 if( newcontribution > 0.0 )
1798 (*activityposhuge)++;
1800 (*activityneghuge)++;
1811 assert((*activityneginf) >= 1);
1814 if( finitenewbound || newbound > 0.0 )
1817 (*activityneginf)--;
1820 if( !finitenewbound && newbound > 0.0 )
1821 (*activityposinf)++;
1822 else if( hugevalnewcont )
1825 if( newcontribution > 0.0 )
1826 (*activityposhuge)++;
1828 (*activityneghuge)++;
1839 if( oldcontribution > 0.0 )
1841 assert((*activityposhuge) >= 1);
1846 (*activityposhuge)--;
1848 if( !finitenewbound )
1851 if( newbound > 0.0 )
1852 (*activityposinf)++;
1855 (*activityneginf)++;
1857 else if( hugevalnewcont )
1860 if( newcontribution > 0.0 )
1861 (*activityposhuge)++;
1864 (*activityneghuge)++;
1873 assert(oldcontribution < 0.0);
1874 assert((*activityneghuge) >= 1);
1879 (*activityneghuge)--;
1881 if( !finitenewbound )
1884 if( newbound > 0.0 )
1885 (*activityposinf)++;
1888 (*activityneginf)++;
1890 else if( hugevalnewcont )
1893 if( newcontribution > 0.0 )
1894 (*activityposhuge)++;
1897 (*activityneghuge)++;
1907 if( !finitenewbound )
1912 if( newbound > 0.0 )
1914 (*activityposinf)++;
1924 (*activityneginf)++;
1929 else if( hugevalnewcont )
1931 if( newcontribution > 0.0 )
1933 (*activityposhuge)++;
1938 (*activityneghuge)++;
1965 (*lastactivity) = curractivity;
1971 SCIPdebugMsg(
scip,
"%s activity of linear constraint unreliable after update: %16.9g\n",
1972 (global ?
"global " :
""), curractivity);
1978 consdata->validglbminact =
FALSE;
1980 consdata->validglbmaxact =
FALSE;
1985 consdata->validminact =
FALSE;
1987 consdata->validmaxact =
FALSE;
2010 if( consdata->validactivities )
2035 if( consdata->validactivities )
2058 if( consdata->validactivities )
2081 if( consdata->validactivities )
2106 if( consdata->validmaxabsval )
2113 consdata->maxabsval =
MAX(consdata->maxabsval, absval);
2117 if( consdata->validminabsval )
2124 consdata->minabsval =
MIN(consdata->minabsval, absval);
2128 if( consdata->validactivities )
2150 consdata->maxactdeltavar =
var;
2152 else if( consdata->maxactdeltavar !=
NULL )
2157 if( delta > consdata->maxactdelta )
2159 consdata->maxactdelta = delta;
2160 consdata->maxactdeltavar =
var;
2182 if( consdata->validmaxabsval )
2190 consdata->validmaxabsval =
FALSE;
2196 if( consdata->validminabsval )
2204 consdata->validminabsval =
FALSE;
2210 if( consdata->validactivities )
2224 if( consdata->maxactdeltavar ==
var )
2227 consdata->maxactdeltavar =
NULL;
2255 if( !consdata->validmaxabsval )
2257 assert(consdata->validmaxabsval);
2260 return consdata->maxabsval;
2271 if( !consdata->validminabsval )
2273 assert(consdata->validminabsval);
2276 return consdata->minabsval;
2292 assert(!consdata->validactivities);
2298 consdata->validmaxabsval =
TRUE;
2299 consdata->validminabsval =
TRUE;
2300 consdata->validactivities =
TRUE;
2301 consdata->validminact =
TRUE;
2302 consdata->validmaxact =
TRUE;
2303 consdata->validglbminact =
TRUE;
2304 consdata->validglbmaxact =
TRUE;
2305 consdata->maxabsval = 0.0;
2306 consdata->minabsval = (consdata->nvars == 0 ? 0.0 :
REALABS(consdata->vals[0]));
2309 consdata->lastminactivity = 0.0;
2310 consdata->lastmaxactivity = 0.0;
2311 consdata->minactivityneginf = 0;
2312 consdata->minactivityposinf = 0;
2313 consdata->maxactivityneginf = 0;
2314 consdata->maxactivityposinf = 0;
2315 consdata->minactivityneghuge = 0;
2316 consdata->minactivityposhuge = 0;
2317 consdata->maxactivityneghuge = 0;
2318 consdata->maxactivityposhuge = 0;
2321 consdata->lastglbminactivity = 0.0;
2322 consdata->lastglbmaxactivity = 0.0;
2323 consdata->glbminactivityneginf = 0;
2324 consdata->glbminactivityposinf = 0;
2325 consdata->glbmaxactivityneginf = 0;
2326 consdata->glbmaxactivityposinf = 0;
2327 consdata->glbminactivityneghuge = 0;
2328 consdata->glbminactivityposhuge = 0;
2329 consdata->glbmaxactivityneghuge = 0;
2330 consdata->glbmaxactivityposhuge = 0;
2332 for(
i = 0;
i < consdata->nvars; ++
i )
2335 consdata->lastminactivity =
QUAD_TO_DBL(consdata->minactivity);
2336 consdata->lastmaxactivity =
QUAD_TO_DBL(consdata->maxactivity);
2337 consdata->lastglbminactivity =
QUAD_TO_DBL(consdata->glbminactivity);
2338 consdata->lastglbmaxactivity =
QUAD_TO_DBL(consdata->glbmaxactivity);
2376 *issettoinfinity =
TRUE;
2377 *istight = posinf == 0;
2380 else if( posinf > 0 )
2383 *issettoinfinity =
TRUE;
2387 else if( neghuge > 0 || ( poshuge > 0 && !goodrelax ) )
2390 *issettoinfinity =
TRUE;
2400 if( !consdata->validglbminact )
2402 assert(consdata->validglbminact);
2408 if( !consdata->validminact )
2410 assert(consdata->validminact);
2432 *issettoinfinity =
FALSE;
2471 *issettoinfinity =
TRUE;
2472 *istight = neginf == 0;
2475 else if( neginf > 0 )
2478 *issettoinfinity =
TRUE;
2482 else if( poshuge > 0 || ( neghuge > 0 && !goodrelax ) )
2485 *issettoinfinity =
TRUE;
2495 if( !consdata->validglbmaxact )
2497 assert(consdata->validglbmaxact);
2503 if( !consdata->validmaxact )
2505 assert(consdata->validmaxact);
2527 *issettoinfinity =
FALSE;
2556 if( !consdata->validactivities )
2559 assert(consdata->validminact);
2560 assert(consdata->validmaxact);
2564 assert(consdata->minactivityneginf >= 0);
2565 assert(consdata->minactivityposinf >= 0);
2566 assert(consdata->maxactivityneginf >= 0);
2567 assert(consdata->maxactivityposinf >= 0);
2569 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2570 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2571 minactivity, ismintight, isminsettoinfinity);
2573 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2574 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2575 maxactivity, ismaxtight, ismaxsettoinfinity);
2602 for( v = 0; v < consdata->nvars; ++v )
2604 var = consdata->vars[v];
2606 if(
var == cancelvar )
2609 val = consdata->vals[v];
2611 if( useglobalbounds )
2631 *resactivity += val*lb;
2637 *resactivity += val*ub;
2646 *resactivity += val*ub;
2652 *resactivity += val*lb;
2693 if( !consdata->validactivities )
2696 assert(consdata->validminact);
2697 assert(consdata->validmaxact);
2701 assert(consdata->minactivityneginf >= 0);
2702 assert(consdata->minactivityposinf >= 0);
2703 assert(consdata->maxactivityneginf >= 0);
2704 assert(consdata->maxactivityposinf >= 0);
2705 assert(consdata->minactivityneghuge >= 0);
2706 assert(consdata->minactivityposhuge >= 0);
2707 assert(consdata->maxactivityneghuge >= 0);
2708 assert(consdata->maxactivityposhuge >= 0);
2728 assert(consdata->minactivityposinf >= 1);
2730 getMinActivity(
scip, consdata, consdata->minactivityposinf - 1, consdata->minactivityneginf,
2731 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2732 minresactivity, ismintight, isminsettoinfinity);
2736 assert(consdata->minactivityneginf >= 1);
2738 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf - 1,
2739 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2740 minresactivity, ismintight, isminsettoinfinity);
2744 assert(consdata->minactivityposhuge >= 1);
2746 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2747 consdata->minactivityposhuge - 1, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2748 minresactivity, ismintight, isminsettoinfinity);
2752 assert(consdata->minactivityneghuge >= 1);
2754 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2755 consdata->minactivityposhuge, consdata->minactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2756 minresactivity, ismintight, isminsettoinfinity);
2760 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2761 consdata->minactivityposhuge, consdata->minactivityneghuge, absval * minactbound,
FALSE, goodrelax,
2762 minresactivity, ismintight, isminsettoinfinity);
2770 assert(consdata->maxactivityneginf >= 1);
2772 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf - 1,
2773 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2774 maxresactivity, ismaxtight, ismaxsettoinfinity);
2778 assert(consdata->maxactivityposinf >= 1);
2780 getMaxActivity(
scip, consdata, consdata->maxactivityposinf - 1, consdata->maxactivityneginf,
2781 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2782 maxresactivity, ismaxtight, ismaxsettoinfinity);
2786 assert(consdata->maxactivityposhuge >= 1);
2788 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2789 consdata->maxactivityposhuge - 1, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2790 maxresactivity, ismaxtight, ismaxsettoinfinity);
2794 assert(consdata->maxactivityneghuge >= 1);
2796 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2797 consdata->maxactivityposhuge, consdata->maxactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2798 maxresactivity, ismaxtight, ismaxsettoinfinity);
2802 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2803 consdata->maxactivityposhuge, consdata->maxactivityneghuge, absval * maxactbound,
FALSE, goodrelax,
2804 maxresactivity, ismaxtight, ismaxsettoinfinity);
2828 || (glbmaxactivity !=
NULL && ismaxtight !=
NULL && ismaxsettoinfinity !=
NULL));
2830 if( !consdata->validactivities )
2833 assert(consdata->validglbminact);
2834 assert(consdata->validglbmaxact);
2838 assert(consdata->glbminactivityneginf >= 0);
2839 assert(consdata->glbminactivityposinf >= 0);
2840 assert(consdata->glbmaxactivityneginf >= 0);
2841 assert(consdata->glbmaxactivityposinf >= 0);
2842 assert(consdata->glbminactivityneghuge >= 0);
2843 assert(consdata->glbminactivityposhuge >= 0);
2844 assert(consdata->glbmaxactivityneghuge >= 0);
2845 assert(consdata->glbmaxactivityposhuge >= 0);
2847 if( glbminactivity !=
NULL )
2852 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2853 consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2854 glbminactivity, ismintight, isminsettoinfinity);
2857 if( glbmaxactivity !=
NULL )
2862 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
2863 consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2864 glbmaxactivity, ismaxtight, ismaxsettoinfinity);
2895 || (maxresactivity !=
NULL && ismaxtight !=
NULL && ismaxsettoinfinity !=
NULL));
2898 if( !consdata->validactivities )
2903 assert(consdata->glbminactivityneginf >= 0);
2904 assert(consdata->glbminactivityposinf >= 0);
2905 assert(consdata->glbmaxactivityneginf >= 0);
2906 assert(consdata->glbmaxactivityposinf >= 0);
2921 if( minresactivity !=
NULL )
2931 assert(consdata->glbminactivityposinf >= 1);
2933 getMinActivity(
scip, consdata, consdata->glbminactivityposinf - 1, consdata->glbminactivityneginf,
2934 consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2935 minresactivity, ismintight, isminsettoinfinity);
2939 assert(consdata->glbminactivityneginf >= 1);
2941 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf - 1,
2942 consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2943 minresactivity, ismintight, isminsettoinfinity);
2947 assert(consdata->glbminactivityposhuge >= 1);
2949 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2950 consdata->glbminactivityposhuge - 1, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2951 minresactivity, ismintight, isminsettoinfinity);
2955 assert(consdata->glbminactivityneghuge >= 1);
2957 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2958 consdata->glbminactivityposhuge, consdata->glbminactivityneghuge - 1, 0.0,
TRUE, goodrelax,
2959 minresactivity, ismintight, isminsettoinfinity);
2963 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2964 consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, absval * minactbound,
TRUE,
2965 goodrelax, minresactivity, ismintight, isminsettoinfinity);
2969 if( maxresactivity !=
NULL )
2979 assert(consdata->glbmaxactivityneginf >= 1);
2981 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf - 1,
2982 consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2983 maxresactivity, ismaxtight, ismaxsettoinfinity);
2987 assert(consdata->glbmaxactivityposinf >= 1);
2989 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf - 1, consdata->glbmaxactivityneginf,
2990 consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2991 maxresactivity, ismaxtight, ismaxsettoinfinity);
2995 assert(consdata->glbmaxactivityposhuge >= 1);
2997 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
2998 consdata->glbmaxactivityposhuge - 1, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2999 maxresactivity, ismaxtight, ismaxsettoinfinity);
3003 assert(consdata->glbmaxactivityneghuge >= 1);
3005 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
3006 consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge - 1, 0.0,
TRUE, goodrelax,
3007 maxresactivity, ismaxtight, ismaxsettoinfinity);
3011 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
3012 consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, absval * maxactbound,
TRUE,
3013 goodrelax, maxresactivity, ismaxtight, ismaxsettoinfinity);
3045 for( v = 0; v < consdata->nvars; ++v )
3050 negsign = consdata->vals[v] < 0.0;
3057 activity += consdata->vals[v] * solval;
3059 assert(nneginf >= 0 && nposinf >= 0);
3061 SCIPdebugMsg(
scip,
"activity of linear constraint: %.15g, %d positive infinity values, %d negative infinity values \n", activity, nposinf, nneginf);
3064 if( nposinf > 0 && nneginf > 0 )
3066 else if( nneginf > 0 )
3068 else if( nposinf > 0 )
3071 SCIPdebugMsg(
scip,
"corrected activity of linear constraint: %.15g\n", activity);
3076 else if( activity < 0 )
3102 return MIN(consdata->rhs - activity, activity - consdata->lhs);
3112 uint64_t varsignature;
3118 assert(consdata->validsignature);
3123 val = consdata->vals[pos];
3124 if( (val > 0.0 && ub > 0.0) || (val < 0.0 && lb < 0.0) )
3125 consdata->possignature |= varsignature;
3126 if( (val > 0.0 && lb < 0.0) || (val < 0.0 && ub > 0.0) )
3127 consdata->negsignature |= varsignature;
3138 if( !consdata->validsignature )
3142 consdata->validsignature =
TRUE;
3143 consdata->possignature = 0;
3144 consdata->negsignature = 0;
3145 for(
i = 0;
i < consdata->nvars; ++
i )
3162 var1 = consdata->vars[ind1];
3163 var2 = consdata->vars[ind2];
3180 if( vartype1 < vartype2 )
3182 else if( vartype1 > vartype2 )
3201 var1 = consdata->vars[ind1];
3202 var2 = consdata->vars[ind2];
3215 if(
EPSGT(abscoef1, abscoef2, 1e-9) )
3217 else if(
EPSGT(abscoef2, abscoef1, 1e-9) )
3227 if( vartype1 < vartype2 )
3231 else if( vartype1 > vartype2 )
3248 if(
EPSGT(abscont1, abscont2, 1e-9) )
3250 else if(
EPSGT(abscont2, abscont1, 1e-9) )
3279 for( v = 0; v <
nvars; ++v )
3283 varv = consdata->vars[v];
3284 valv = consdata->vals[v];
3285 if( consdata->eventdata !=
NULL )
3286 eventdatav = consdata->eventdata[v];
3292 consdata->vars[
i] = consdata->vars[perm[
i]];
3293 consdata->vals[
i] = consdata->vals[perm[
i]];
3294 if( consdata->eventdata !=
NULL )
3296 consdata->eventdata[
i] = consdata->eventdata[perm[
i]];
3297 consdata->eventdata[
i]->varpos =
i;
3303 while( perm[
i] != v );
3304 consdata->vars[
i] = varv;
3305 consdata->vals[
i] = valv;
3306 if( consdata->eventdata !=
NULL )
3308 consdata->eventdata[
i] = eventdatav;
3309 consdata->eventdata[
i]->varpos =
i;
3316 for( v = 0; v <
nvars; ++v )
3319 assert(consdata->eventdata ==
NULL || consdata->eventdata[v]->varpos == v);
3346 if( consdata->nvars <= 1 )
3348 consdata->indexsorted =
TRUE;
3349 consdata->coefsorted =
TRUE;
3350 consdata->nbinvars = (consdata->nvars == 1 ? (int)
SCIPvarIsBinary(consdata->vars[0]) : 0);
3363 SCIPsort(perm, consdataCompVar, (
void*)consdata, consdata->nvars);
3365 SCIPsort(perm, consdataCompVarProp, (
void*)consdata, consdata->nvars);
3374 consdata->indexsorted =
FALSE;
3375 consdata->coefsorted =
TRUE;
3378 consdata->nbinvars = 0;
3379 for( v = 0; v < consdata->nvars; ++v )
3382 ++consdata->nbinvars;
3389 consdata->indexsorted =
TRUE;
3390 consdata->coefsorted =
FALSE;
3425 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3436 consdata->rhs = lhs;
3454 vars = consdata->vars;
3455 vals = consdata->vals;
3457 for( v = 0; v < consdata->nvars; ++v )
3479 vars = consdata->vars;
3480 vals = consdata->vals;
3482 for( v = 0; v < consdata->nvars; ++v )
3502 consdata->boundstightened = 0;
3503 consdata->presolved =
FALSE;
3504 consdata->cliquesadded =
FALSE;
3505 consdata->implsadded =
FALSE;
3515 consdata->lhs = lhs;
3516 consdata->changed =
TRUE;
3517 consdata->normalized =
FALSE;
3518 consdata->upgradetried =
FALSE;
3519 consdata->rangedrowpropagated = 0;
3522 if( consdata->row !=
NULL )
3553 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3564 consdata->lhs = rhs;
3584 vars = consdata->vars;
3585 vals = consdata->vals;
3587 for( v = 0; v < consdata->nvars; ++v )
3609 vars = consdata->vars;
3610 vals = consdata->vals;
3612 for( v = 0; v < consdata->nvars; ++v )
3632 consdata->boundstightened = 0;
3633 consdata->presolved =
FALSE;
3634 consdata->cliquesadded =
FALSE;
3635 consdata->implsadded =
FALSE;
3645 consdata->rhs = rhs;
3646 consdata->changed =
TRUE;
3647 consdata->normalized =
FALSE;
3648 consdata->upgradetried =
FALSE;
3649 consdata->rangedrowpropagated = 0;
3652 if( consdata->row !=
NULL )
3693 consdata->vars[consdata->nvars] =
var;
3694 consdata->vals[consdata->nvars] = val;
3703 if( consdata->eventdata !=
NULL )
3715 consdata->eventdata[consdata->nvars-1] =
NULL;
3738 consdata->boundstightened = 0;
3739 consdata->presolved =
FALSE;
3742 if( consdata->validsignature )
3745 consdata->changed =
TRUE;
3746 consdata->normalized =
FALSE;
3747 consdata->upgradetried =
FALSE;
3748 consdata->cliquesadded =
FALSE;
3749 consdata->implsadded =
FALSE;
3750 consdata->rangedrowpropagated = 0;
3751 consdata->merged =
FALSE;
3753 if( consdata->nvars == 1 )
3755 consdata->indexsorted =
TRUE;
3756 consdata->coefsorted =
TRUE;
3762 consdata->indexsorted = consdata->indexsorted && (consdataCompVar((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3763 consdata->coefsorted =
FALSE;
3767 consdata->indexsorted =
FALSE;
3768 consdata->coefsorted = consdata->coefsorted && (consdataCompVarProp((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3773 if( consdata->hasnonbinvalid && !consdata->hascontvar )
3777 consdata->hasnonbinvar =
TRUE;
3780 consdata->hascontvar =
TRUE;
3785 if( consdata->row !=
NULL )
3812 var = consdata->vars[pos];
3813 val = consdata->vals[pos];
3835 if( consdata->eventdata !=
NULL )
3843 if( pos != consdata->nvars - 1 )
3845 consdata->vars[pos] = consdata->vars[consdata->nvars-1];
3846 consdata->vals[pos] = consdata->vals[consdata->nvars-1];
3848 if( consdata->eventdata !=
NULL )
3850 consdata->eventdata[pos] = consdata->eventdata[consdata->nvars-1];
3852 consdata->eventdata[pos]->varpos = pos;
3855 consdata->indexsorted = consdata->indexsorted && (pos + 2 >= consdata->nvars);
3856 consdata->coefsorted = consdata->coefsorted && (pos + 2 >= consdata->nvars);
3863 if( consdata->nvars <= 1 )
3878 consdata->boundstightened = 0;
3879 consdata->presolved =
FALSE;
3880 consdata->validsignature =
FALSE;
3881 consdata->changed =
TRUE;
3882 consdata->normalized =
FALSE;
3883 consdata->upgradetried =
FALSE;
3884 consdata->cliquesadded =
FALSE;
3885 consdata->implsadded =
FALSE;
3886 consdata->rangedrowpropagated = 0;
3891 consdata->hasnonbinvalid =
FALSE;
3895 if( consdata->row !=
NULL )
3926 var = consdata->vars[pos];
3929 val = consdata->vals[pos];
3956 consdata->vals[pos] = newval;
3958 if( consdata->coefsorted )
3961 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos - 1, pos) <= 0);
3962 if( consdata->coefsorted && pos < consdata->
nvars - 1 )
3963 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos, pos + 1) <= 0);
3983 consdata->boundstightened = 0;
3984 consdata->presolved =
FALSE;
3985 consdata->validsignature = consdata->validsignature && (newval * val > 0.0);
3986 consdata->changed =
TRUE;
3987 consdata->normalized =
FALSE;
3988 consdata->upgradetried =
FALSE;
3989 consdata->cliquesadded =
FALSE;
3990 consdata->implsadded =
FALSE;
3991 consdata->rangedrowpropagated = 0;
4020 SCIPwarningMessage(
scip,
"skipped scaling for linear constraint <%s> to avoid numerical troubles (scalar: %.15g)\n",
4027 for(
i = consdata->nvars - 1;
i >= 0; --
i )
4029 newval = scalar * consdata->vals[
i];
4039 SCIPwarningMessage(
scip,
"coefficient %.15g of variable <%s> in linear constraint <%s> scaled to zero (scalar: %.15g)\n",
4044 consdata->vals[
i] = newval;
4052 lhs = consdata->lhs;
4053 consdata->lhs = -consdata->rhs;
4054 consdata->rhs = -lhs;
4059 newval = absscalar * consdata->lhs;
4067 consdata->lhs = newval;
4071 newval = absscalar * consdata->rhs;
4079 consdata->rhs = newval;
4083 consdata->cliquesadded =
FALSE;
4084 consdata->implsadded =
FALSE;
4109 for(
i = 0;
i < nconss;
i++ )
4114 if( consdata->varsdeleted )
4117 for( v = consdata->nvars - 1; v >= 0; --v )
4124 consdata->varsdeleted =
FALSE;
4179 *infeasible =
FALSE;
4190 if( consdata->normalized )
4194 vals = consdata->vals;
4195 nvars = consdata->nvars;
4200 consdata->normalized =
TRUE;
4226 scalar = 2.0 / (minabsval + maxabsval);
4233 SCIPdebugMsg(
scip,
"divide linear constraint with %g, because all coefficients are in absolute value the same\n", maxabsval);
4238 vals = consdata->vals;
4239 nvars = consdata->nvars;
4248 consdata->normalized =
TRUE;
4264 if( !consdata->hasnonbinvalid )
4271 if( !consdata->hascontvar )
4317 if( nposcoeffs > nnegcoeffs )
4319 else if( nposcoeffs < nnegcoeffs )
4329 assert(mult == +1 || mult == -1);
4348 for(
i = 0;
i <
nvars && success && scm <= maxmult; ++
i )
4353 success =
SCIPrealToRational(vals[
i], -epsilon, epsilon , maxmult, &numerator, &denominator);
4363 onlyintegral =
TRUE;
4370 onlyintegral =
FALSE;
4376 success = success && (scm <= maxmult || (scm == 1 && onlyintegral));
4377 if( success && scm != 1 )
4384 if( consdata->validmaxabsval )
4389 consdata->validmaxabsval =
FALSE;
4395 if( consdata->validminabsval )
4400 consdata->validminabsval =
FALSE;
4407 vals = consdata->vals;
4408 nvars = consdata->nvars;
4415 if( success &&
nvars >= 1 )
4430 if( !consdata->hascontvar && onlyintegral )
4448 if( consdata->validmaxabsval )
4452 if( consdata->validminabsval )
4460 consdata->normalized =
TRUE;
4486 if( consdata->merged )
4492 v = consdata->nvars - 1;
4500 var = consdata->vars[v];
4501 valsum = consdata->vals[v];
4504 while( v >= 1 && consdata->vars[v-1] ==
var )
4508 valsum += consdata->vals[v];
4518 else if( valsum != consdata->vals[v] )
4526 consdata->merged =
TRUE;
4547 if( infeasible !=
NULL )
4548 *infeasible =
FALSE;
4553 if( consdata->eventdata ==
NULL )
4569 if( !consdata->removedfixings )
4579 lhssubtrahend = 0.0;
4580 rhssubtrahend = 0.0;
4586 while( v < consdata->
nvars )
4608 if(
var != consdata->vars[v] )
4616 lhssubtrahend += constant;
4618 rhssubtrahend += constant;
4638 for(
i = 0;
i < naggrvars; ++
i )
4643 constant += scalar * aggrconstant;
4653 if( constant < 0.0 )
4657 if( infeasible !=
NULL )
4669 lhssubtrahend += constant;
4676 if( constant > 0.0 )
4680 if( infeasible !=
NULL )
4692 rhssubtrahend += constant;
4713 if( infeasible !=
NULL )
4745 if( infeasible !=
NULL )
4768 consdata->removedfixings =
TRUE;
4781 assert(consdata->removedfixings);
4785 for( v = 0; v < consdata->nvars; ++v )
4820 vars = consdata->vars;
4821 vals = consdata->vals;
4822 nvars = consdata->nvars;
4828 assert((infervar ==
NULL) == (inferpos == -1));
4829 assert(inferpos == -1 ||
vars[inferpos] == infervar);
4851 if( infervar !=
NULL )
4856 &ismintight,
NULL, &isminsettoinfinity,
NULL);
4859 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4865 &ismintight,
NULL, &isminsettoinfinity,
NULL);
4868 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4872 if( (reasonisrhs && !isminsettoinfinity && ismintight) || (!reasonisrhs && !ismaxsettoinfinity && ismaxtight) )
4877 resactisinf =
FALSE;
4882 if( infervar !=
NULL )
4894 rescap = consdata->rhs - minresactivity;
4904 rescap = consdata->lhs - maxresactivity;
4907 if( reasonisrhs == (vals[inferpos] > 0.0) )
4913 rescap = (reasonisrhs ? consdata->rhs - minresactivity : consdata->lhs - maxresactivity);
4932 if( reasonisrhs == (vals[
i] > 0.0) )
4960 if( reasonisrhs == (vals[
i] > 0.0) )
4998 vars = consdata->vars;
4999 nvars = consdata->nvars;
5002 assert((infervar ==
NULL) == (inferpos == -1));
5004 assert(inferpos == -1 ||
vars[inferpos] == infervar);
5007 for( v =
nvars - 1; v >= 0; --v )
5012 if(
vars[v] == infervar )
5058 for( v =
nvars - 1; v >= 0; --v )
5120 vars = consdata->vars;
5121 nvars = consdata->nvars;
5123 vals = consdata->vals;
5130 if( inferpos >=
nvars ||
vars[inferpos] != infervar )
5134 for( inferpos = 0; inferpos <
nvars &&
vars[inferpos] != infervar; ++inferpos )
5176 SCIPerrorMessage(
"invalid inference information %d in linear constraint <%s> at position %d for %s bound of variable <%s>\n",
5224 infcountmin = consdata->minactivityneginf
5225 + consdata->minactivityposinf
5226 + consdata->minactivityneghuge
5227 + consdata->minactivityposhuge;
5228 infcountmax = consdata->maxactivityneginf
5229 + consdata->maxactivityposinf
5230 + consdata->maxactivityneghuge
5231 + consdata->maxactivityposhuge;
5233 if( infcountmin > 1 && infcountmax > 1 )
5264 var = consdata->vars[pos];
5275 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
5277 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newub);
5284 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5292 else if( tightened )
5295 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5302 consdata->upgradetried =
FALSE;
5333 var = consdata->vars[pos];
5344 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
5346 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newlb);
5353 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5361 else if( tightened )
5364 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5371 consdata->upgradetried =
FALSE;
5411 var = consdata->vars[pos];
5418 val = consdata->vals[pos];
5419 lhs = consdata->lhs;
5420 rhs = consdata->rhs;
5430 if( !consdata->validactivities )
5432 assert(consdata->validactivities);
5433 if( !consdata->validminact )
5435 assert(consdata->validminact);
5446 assert(consdata->validminact);
5451 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5466 alpha = val * (ub - lb);
5474 newub = lb + (slack / val);
5480 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5498 if( !consdata->validmaxact )
5502 assert(consdata->validmaxact);
5507 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5522 alpha = val * (ub - lb);
5530 newlb = ub - (slack / val);
5536 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5553 assert(consdata->validminact);
5558 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5573 alpha = val * (lb - ub);
5581 newlb = ub + slack / val;
5587 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5604 if( !consdata->validmaxact )
5608 assert(consdata->validmaxact);
5613 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5628 alpha = val * (lb - ub);
5636 newub = lb - (slack / val);
5642 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5766 if( consdata->rangedrowpropagated == 2 )
5770 if( consdata->nvars < 3 )
5787 consdata->rangedrowpropagated = 2;
5794 if( consdata->rangedrowpropagated > 0 )
5797 consdata->rangedrowpropagated = 1;
5802 for( v = consdata->nvars - 1; v >= 0; --v )
5820 lhs = consdata->lhs - fixedact;
5821 rhs = consdata->rhs - fixedact;
5822 nunfixedvars = consdata->nvars - nfixedconsvars;
5865 absval =
REALABS(consdata->vals[v]);
5867 if( absminbincoef > absval )
5868 absminbincoef = absval;
5872 possiblegcd =
FALSE;
5873 infcheckvars[ninfcheckvars] = consdata->vars[v];
5874 infcheckvals[ninfcheckvars] = consdata->vals[v];
5890 if( v == consdata->nvars )
5894 if( ncontvars + 2 > nunfixedvars )
5907 for( ; v < consdata->nvars; ++v )
5916 absval =
REALABS(consdata->vals[v]);
5918 if( absminbincoef > absval )
5919 absminbincoef = absval;
5929 possiblegcd =
FALSE;
5930 infcheckvars[ninfcheckvars] = consdata->vars[v];
5931 infcheckvals[ninfcheckvars] = consdata->vals[v];
5947 infcheckvars[ninfcheckvars] = consdata->vars[v];
5948 infcheckvals[ninfcheckvars] = consdata->vals[v];
5963 if( ninfcheckvars == 0 )
5968 minactinfvarsinvalid =
FALSE;
5969 maxactinfvarsinvalid =
FALSE;
5970 maxactinfvars = 0.0;
5971 minactinfvars = 0.0;
5974 for( v = ninfcheckvars - 1; v >= 0; --v )
5981 if( infcheckvals[v] < 0.0 )
5982 maxactinfvarsinvalid =
TRUE;
5984 minactinfvarsinvalid =
TRUE;
5988 if( infcheckvals[v] < 0.0 )
5989 maxactinfvars += infcheckvals[v] * lb;
5991 minactinfvars += infcheckvals[v] * lb;
5996 if( infcheckvals[v] > 0.0 )
5997 maxactinfvarsinvalid =
TRUE;
5999 minactinfvarsinvalid =
TRUE;
6003 if( infcheckvals[v] > 0.0 )
6004 maxactinfvars += infcheckvals[v] * ub;
6006 minactinfvars += infcheckvals[v] * ub;
6011 minactinfvarsinvalid =
TRUE;
6013 maxactinfvarsinvalid =
TRUE;
6015 if( minactinfvarsinvalid || maxactinfvarsinvalid )
6018 assert(!minactinfvarsinvalid && !maxactinfvarsinvalid);
6020 SCIPdebugMsg(
scip,
"minactinfvarsinvalid = %u, minactinfvars = %g, maxactinfvarsinvalid = %u, maxactinfvars = %g, gcd = %lld, ninfcheckvars = %d, ncontvars = %d\n",
6021 minactinfvarsinvalid, minactinfvars, maxactinfvarsinvalid, maxactinfvars, gcd, ninfcheckvars, ncontvars);
6046 else if( ncontvars == 0 )
6053 v = ninfcheckvars - 1;
6057 for( ; v >= 0 && gcdinfvars >= 2; --v )
6065 SCIPdebugMsg(
scip,
"gcdinfvars =%lld, possiblegcd = %u\n", gcdinfvars, possiblegcd);
6068 if( gcdinfvars >= 1 )
6081 value2 = value + gcd * (
SCIPceil(
scip, (lhs - value) / gcd));
6102 value += gcdinfvars;
6104 assert(nsols < 2 || minvalue <= maxvalue);
6117 value2 = value + gcd * (
SCIPfloor(
scip, (rhs - value) / gcd));
6128 assert(maxvalue > minvalue);
6131 value -= gcdinfvars;
6133 assert(maxvalue > secondsolval);
6136 SCIPdebugMsg(
scip,
"here nsols %s %d, minsolvalue = %g, maxsolvalue = %g, ninfcheckvars = %d, nunfixedvars = %d\n",
6137 nsols > 2 ?
">=" :
"=", nsols, minvalue, maxvalue, ninfcheckvars, nunfixedvars);
6142 SCIPdebugMsg(
scip,
"gcdinfvars = %lld, gcd = %lld, correctedlhs = %g, correctedrhs = %g\n",
6143 gcdinfvars, gcd, lhs, rhs);
6154 else if( nsols == 1 )
6156 assert(minvalue == maxvalue);
6159 if( ninfcheckvars == 1 )
6165 SCIPdebugMsg(
scip,
"fixing single variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6186 if( ninfcheckvars == nunfixedvars - 1 )
6193 assert(ninfcheckvars > 0);
6196 for( v = 0; v < consdata->nvars - 1; ++v )
6200 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6206 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6208 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6213 assert(consdata->vars[v2] == infcheckvars[w2]);
6216 assert(w2 == ninfcheckvars);
6222 if( consdata->vals[v] < 0 )
6231 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6244 consdata->vars[v],
bound) );
6260 assert(v == consdata->nvars - 1);
6263 if( consdata->vals[v] < 0 )
6272 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6285 consdata->vars[v],
bound) );
6300 ++conshdlrdata->naddconss;
6305 maxvalue, maxvalue,
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE) );
6322 if( ninfcheckvars == 1 )
6330 if( infcheckvals[0] < 0 )
6332 newlb = maxvalue/infcheckvals[0];
6333 newub = minvalue/infcheckvals[0];
6337 newlb = minvalue/infcheckvals[0];
6338 newub = maxvalue/infcheckvals[0];
6345 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6366 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6385 else if( ninfcheckvars == nunfixedvars - 1 )
6393 assert(ninfcheckvars > 0);
6394 assert(minvalue < maxvalue);
6397 for( v = 0; v < consdata->nvars - 1; ++v )
6401 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6407 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6409 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6414 assert(consdata->vars[v2] == infcheckvars[w2]);
6417 assert(w2 == ninfcheckvars);
6423 if( consdata->vals[v] < 0 )
6425 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6426 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6430 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6431 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6438 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6450 consdata->vars[v], newlb) );
6460 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6472 consdata->vars[v], newub) );
6489 assert(v == consdata->nvars - 1);
6492 if( consdata->vals[v] < 0 )
6494 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6495 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6499 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6500 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6507 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6528 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6557 assert(maxvalue > minvalue);
6573 ++conshdlrdata->naddconss;
6592 else if( addartconss && ncontvars < ninfcheckvars )
6599 for( v = 0; v < consdata->nvars; ++v )
6611 if( consdata->vals[v] > 0.0 )
6612 maxact += consdata->vals[v];
6614 minact += consdata->vals[v];
6622 if( consdata->vals[v] > 0.0 )
6667 newlhs = lhs - maxact;
6668 newrhs = rhs - minact;
6673 ++conshdlrdata->naddconss;
6737 var = consdata->vars[pos];
6743 val = consdata->vals[pos];
6744 lhs = consdata->lhs;
6745 rhs = consdata->rhs;
6747 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
6767 newub = (rhs - minresactivity)/val;
6776 if( activityunreliable )
6779 newub = (rhs - minresactivity)/val;
6785 if( !activityunreliable )
6788 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
6791 &infeasible, &tightened) );
6794 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6809 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6821 newlb = (lhs - maxresactivity)/val;
6829 newlb = (lhs - maxresactivity)/val;
6838 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6841 &infeasible, &tightened) );
6844 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6858 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6874 newlb = (rhs - minresactivity)/val;
6881 if( activityunreliable )
6884 newlb = (rhs - minresactivity)/val;
6891 if( !activityunreliable )
6894 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6897 &infeasible, &tightened) );
6900 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6914 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6926 newub = (lhs - maxresactivity)/val;
6934 newub = (lhs - maxresactivity)/val;
6943 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
6946 &infeasible, &tightened) );
6949 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6963 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6973#define MAXTIGHTENROUNDS 10
6987 unsigned int tightenmode;
6993 int oldnchgbdstotal;
7025 nvars = consdata->nvars;
7035 if( !force && (consdata->boundstightened >= tightenmode) )
7042 assert(consdata->coefsorted);
7070 &isminsettoinfinity, &ismaxsettoinfinity);
7083 easycase =
SCIPisLT(
scip, consdata->maxactdelta, maxeasyactivitydelta);
7090 oldnchgbdstotal = *nchgbds;
7093 for( nrounds = 0; (force || consdata->boundstightened < tightenmode) && nrounds <
MAXTIGHTENROUNDS; ++nrounds )
7102 assert(consdata->coefsorted);
7106 consdata->boundstightened = (
unsigned int)tightenmode;
7112 while( v <
nvars && v != lastchange && !(*
cutoff) )
7114 oldnchgbds = *nchgbds;
7126 if( *nchgbds > oldnchgbds )
7131 else if( consdata->coefsorted && v < consdata->nbinvars - 1
7133 v = consdata->nbinvars;
7140 *nchgbds - oldnchgbdstotal, nrounds);
7141 oldnchgbdstotal += oldnchgbds;
7146 if( force &&
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
7184 if( consdata->row !=
NULL )
7196 SCIPdebugMsg(
scip,
" consdata activity=%.15g (lhs=%.15g, rhs=%.15g, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
7197 activity, consdata->lhs, consdata->rhs, (
void*)consdata->row, checklprows,
7202 lhsviol = consdata->lhs - activity;
7203 rhsviol = activity - consdata->rhs;
7207 if( (lhsviol > 0) && (lhsviol > rhsviol) )
7212 else if( rhsviol > 0 )
7237 if( !checkrelmaxabs )
7261 for( v = 0; v < consdata->nvars; ++v )
7263 if( consdata->vals !=
NULL )
7265 coef = consdata->vals[v];
7271 absval =
REALABS( coef * solval );
7272 maxabs =
MAX( maxabs, absval );
7279 if( (consdata->lhs - activity) <= (1e-15 * maxabs) )
7281 SCIPdebugMsg(
scip,
" lhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7282 consdata->lhs - activity, maxabs);
7296 SCIPdebugMsg(
scip,
" lhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7297 consdata->lhs - activity, maxabs);
7333 if( (activity - consdata->rhs) <= (1e-15 * maxabs) )
7335 SCIPdebugMsg(
scip,
" rhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7336 activity - consdata->rhs, maxabs);
7350 SCIPdebugMsg(
scip,
" rhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7351 activity - consdata->rhs, maxabs);
7385 else if( consdata->checkabsolute &&
7453 if( consdata->row ==
NULL )
7470 if( consdata->nvars == 0 )
7492 assert( pr == 0 || cr == 0 );
7518 if( consdata->nlrow ==
NULL )
7520 assert(consdata->lhs <= consdata->rhs);
7577 if( !separateall &&
sol ==
NULL )
7590 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7598 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7608 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7613 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7618 if( *ncuts > oldncuts )
7657 if( consdata->eventdata ==
NULL )
7689 oldnchgbds = *nchgbds;
7693 if( *nchgbds > oldnchgbds )
7700 if( rangedrowpropagation && tightenbounds && !(*
cutoff) )
7720 if( nfixedvars > 0 )
7721 *nchgbds += 2*nfixedvars;
7728 &isminsettoinfinity, &ismaxsettoinfinity);
7732 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7733 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7743 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7744 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7754 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7755 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7758 if( consdata->nvars > 0 )
7800 for( v = 0; v < consdata->nvars; ++v )
7803 var = consdata->vars[v];
7815 SCIPdebugMsg(
scip,
"converting variable <%s> with fixed bounds [%.15g,%.15g] into fixed variable fixed at %.15g\n",
7839 assert(consdata->removedfixings);
7844#define MAX_CLIQUE_NONZEROS_PER_CONS 1000000
7936 int cliquenonzerosadded;
7953 if( consdata->nvars < 2 )
7962 if( !consdata->implsadded )
7980 nvars = consdata->nvars;
7981 vars = consdata->vars;
7982 vals = consdata->vals;
7985 if( !consdata->validactivities )
7987 assert(consdata->validactivities);
7991 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
7992 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
7993 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
7994 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
7995 finiteminact = (finitenegminact && finiteposminact);
7996 finitemaxact = (finitenegmaxact && finiteposmaxact);
7998 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8003 int oldnchgbds = *nchgbds;
8009 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8012 assert(consdata->validglbminact);
8015 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8018 assert(consdata->validglbmaxact);
8020 assert(consdata->validglbminact || consdata->validglbmaxact);
8025 for( v =
nvars - 1; v >= 0; --v )
8033 if( value > maxabscontrib )
8035 maxabscontrib = value;
8046 if( value > maxabscontrib )
8048 maxabscontrib = value;
8059 if( !
SCIPisEQ(
scip, maxabscontrib, 1.0) && !allbinary )
8065 if( finiterhs && finiteminact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbminactivity), consdata->rhs - maxabscontrib) )
8067 for( v =
nvars - 1; v >= 0; --v )
8079 *nchgbds += nbdchgs;
8086 *nchgbds += nbdchgs;
8106 if( finitelhs && finitemaxact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbmaxactivity), consdata->lhs - maxabscontrib) )
8108 for( v =
nvars - 1; v >= 0; --v )
8120 *nchgbds += nbdchgs;
8127 *nchgbds += nbdchgs;
8146 SCIPdebugMsg(
scip,
"extracted %d implications from constraint %s which led to %d bound changes, %scutoff detetcted\n", nimpls,
SCIPconsGetName(cons), *nchgbds - oldnchgbds, *
cutoff ?
"" :
"no ");
8152 if( *nchgbds - oldnchgbds > 0 )
8173 consdata->implsadded =
TRUE;
8177 if( consdata->cliquesadded )
8180 consdata->cliquesadded =
TRUE;
8181 cliquenonzerosadded = 0;
8187 nvars = consdata->nvars;
8188 vars = consdata->vars;
8189 vals = consdata->vals;
8194 if( !consdata->validactivities )
8196 assert(consdata->validactivities);
8200 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
8201 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
8202 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
8203 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
8204 finiteminact = (finitenegminact && finiteposminact);
8205 finitemaxact = (finitenegmaxact && finiteposmaxact);
8210 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8214 int nposbinvars = 0;
8215 int nnegbinvars = 0;
8216 int allonebinary = 0;
8231 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8232 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8250 if( allonebinary <
nvars && (nposbinvars >= 2 || nnegbinvars >= 2) )
8253 int oldnchgbds = *nchgbds;
8259 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8262 assert(consdata->validglbminact);
8265 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8268 assert(consdata->validglbmaxact);
8270 assert(consdata->validglbminact || consdata->validglbmaxact);
8276 if( finiterhs && finitenegminact && nposbinvars >= 2 )
8279 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8282#ifdef SCIP_DISABLED_CODE
8291 while( j < nposbinvars )
8305 *nchgbds += nbdchgs;
8307 cliquenonzerosadded += j;
8312 if( !stopped && !(*
cutoff) && j < nposbinvars )
8315 int lastfit = j - 2;
8322 while( lastfit >= 0 && j < nposbinvars )
8327 clqvars[lastfit + 1] = binvars[j];
8338 *nchgbds += nbdchgs;
8340 cliquenonzerosadded += (lastfit + 2);
8359 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8380 if( !consdata->validactivities )
8382 assert(consdata->validactivities);
8384 nvars = consdata->nvars;
8385 vars = consdata->vars;
8386 vals = consdata->vals;
8401 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8402 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8420 oldnchgbds = *nchgbds;
8424 if( !stopped && !(*
cutoff) && finitelhs && finiteposmaxact && nnegbinvars >= 2 )
8427 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8429 i = nposbinvars + nnegbinvars - 1;
8431#ifdef SCIP_DISABLED_CODE
8441 while( j >= nposbinvars )
8456 *nchgbds += nbdchgs;
8458 cliquenonzerosadded += (
i - j);
8463 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8466 int lastfit = jstart + 1;
8474 while( lastfit <= i && j >= nposbinvars )
8479 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8480 clqvars[lastfit - jstart - 2] = binvars[j];
8492 *nchgbds += nbdchgs;
8494 cliquenonzerosadded += (
i - lastfit + 2);
8513 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8534 if( !consdata->validactivities )
8536 assert(consdata->validactivities);
8538 nvars = consdata->nvars;
8539 vars = consdata->vars;
8540 vals = consdata->vals;
8555 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8556 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8574 oldnchgbds = *nchgbds;
8578 if( !(*
cutoff) && finiterhs && finiteminact && nnegbinvars >= 2 )
8587 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8589 i = nposbinvars + nnegbinvars - 1;
8592#ifdef SCIP_DISABLED_CODE
8602 while( j >= nposbinvars )
8617 *nchgbds += nbdchgs;
8619 cliquenonzerosadded += (
i - j);
8624 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8627 int lastfit = j + 1;
8635 while( lastfit <= i && j >= nposbinvars )
8640 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8641 clqvars[lastfit - jstart - 2] = binvars[j];
8653 *nchgbds += nbdchgs;
8655 cliquenonzerosadded += (
i - lastfit + 2);
8676 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8697 if( !consdata->validactivities )
8699 assert(consdata->validactivities);
8701 nvars = consdata->nvars;
8702 vars = consdata->vars;
8703 vals = consdata->vals;
8718 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8719 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8739 if( !stopped && !(*
cutoff) && finitelhs && finitemaxact && nposbinvars >= 2 )
8748 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8752#ifdef SCIP_DISABLED_CODE
8762 while( j < nposbinvars )
8776 *nchgbds += nbdchgs;
8778 cliquenonzerosadded += j;
8783 if( !stopped && !(*
cutoff) && j < nposbinvars )
8786 int lastfit = j - 2;
8793 while( lastfit >= 0 && j < nposbinvars )
8798 clqvars[lastfit + 1] = binvars[j];
8809 *nchgbds += nbdchgs;
8811 cliquenonzerosadded += lastfit + 2;
8858 if( lhsclique || rhsclique )
8863 SCIPdebugMsg(
scip,
"linear constraint <%s>: adding clique with %d vars (%d pos, %d neg)\n",
8868 values[
i] = (rhsclique == (vals[
i] > 0.0));
8875 *nchgbds += nbdchgs;
8907 *infeasible =
FALSE;
8917 for(
i = 0;
i < consdata->nvars && integral; ++
i )
8935 SCIPdebugMsg(
scip,
"rounding sides=[%.15g,%.15g] of linear constraint <%s> with integral coefficients and variables only "
8936 "is infeasible\n", consdata->lhs, consdata->rhs,
SCIPconsGetName(cons));
8942 SCIPdebugMsg(
scip,
"linear constraint <%s>: make sides integral: sides=[%.15g,%.15g]\n",
8950 if( !consdata->upgraded )
8958 if( !consdata->upgraded )
8961 SCIPdebugMsg(
scip,
"linear constraint <%s>: new integral sides: sides=[%.15g,%.15g]\n",
9048 &isminsettoinfinity, &ismaxsettoinfinity);
9054 minleftactivity = 0.0;
9055 maxleftactivity = 0.0;
9062 var = consdata->vars[
i];
9063 val = consdata->vals[
i];
9075 if( isvarrelevant[
i] )
9083 lval = consdata->lhs - minactivity;
9084 rval = maxactivity - consdata->rhs;
9087 if( consdata->nvars == 2 )
9090 otherval = consdata->vals[1-
i];
9094 lval = consdata->lhs - val*lb;
9100 rval = val*ub - consdata->rhs;
9105 newval =
MAX3(lval, rval, 0.0);
9109 newlhs = consdata->lhs - val * lb;
9110 newlhs += newval * lb;
9111 newrhs = consdata->rhs - val * ub;
9112 newrhs += newval * ub;
9116 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9118 maxactivity, consdata->lhs, consdata->rhs);
9134 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9139 consdata->lhs, newlhs);
9149 consdata->rhs, newrhs);
9166 minleftactivity += val * lb;
9176 maxleftactivity += val * ub;
9186 if( isvarrelevant[
i] )
9194 lval = minactivity - consdata->lhs;
9195 rval = consdata->rhs - maxactivity;
9198 if( consdata->nvars == 2 )
9201 otherval = consdata->vals[1-
i];
9205 lval = val*ub - consdata->lhs;
9211 rval = consdata->rhs - val*lb;
9216 newval =
MIN3(lval, rval, 0.0);
9220 newlhs = consdata->lhs - val * ub;
9221 newlhs += newval * ub;
9222 newrhs = consdata->rhs - val * lb;
9223 newrhs += newval * lb;
9227 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9229 maxactivity, consdata->lhs, consdata->rhs);
9245 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9250 consdata->lhs, newlhs);
9260 consdata->rhs, newrhs);
9277 minleftactivity += val * ub;
9287 maxleftactivity += val * lb;
9296 minleftactivity, consdata->rhs);
9298 maxleftactivity, consdata->lhs);
9325 aggrlhs = consdata->lhs - minactivity + minleftactivity;
9326 aggrrhs = consdata->rhs - maxactivity + maxleftactivity;
9346 if( !isvarrelevant[
i] )
9349 var = consdata->vars[
i];
9350 val = consdata->vals[
i];
9355 SCIPdebugMsg(
scip,
"val = %g\tlhs = %g\trhs = %g\n", val, consdata->lhs, consdata->rhs);
9356 SCIPdebugMsg(
scip,
"linear constraint <%s>: remove variable <%s> from constraint since it is redundant\n",
9362 minleftactivitypart = val * lb;
9363 maxleftactivitypart = val * ub;
9367 minleftactivitypart = val * ub;
9368 maxleftactivitypart = val * lb;
9372 isvarrelevant[
i] = isvarrelevant[consdata->nvars - 1];
9377 newlhs = consdata->lhs - minleftactivitypart;
9378 newrhs = consdata->rhs - maxleftactivitypart;
9383 consdata->lhs, newlhs);
9393 consdata->rhs, newrhs);
9437 assert(consdata->nvars == 1);
9441 var = consdata->vars[0];
9442 val = consdata->vals[0];
9462 if( !consdata->upgraded )
9491 assert(consdata->nvars == 2);
9494 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregate %.15g<%s> + %.15g<%s> == %.15g\n",
9496 consdata->vals[1],
SCIPvarGetName(consdata->vars[1]), consdata->rhs);
9500 consdata->rhs, &infeasible, &redundant, &aggregated) );
9519 if( !consdata->upgraded )
9549 if( slackcoef > 0.0 )
9554 *newrhs = consdata->rhs - slackcoef * slackvarlb;
9558 *newlhs = consdata->lhs - slackcoef * slackvarub;
9565 *newlhs = consdata->rhs - slackcoef * slackvarlb;
9569 *newrhs = consdata->lhs - slackcoef * slackvarub;
9609 int maxnlocksremove;
9627 assert(consdata->nvars > 2);
9637 lhs = consdata->lhs;
9638 rhs = consdata->rhs;
9640 if( consdata->nvars == 3 )
9645 maxnlocksremove = 3;
9647 else if( consdata->nvars == 4 )
9652 maxnlocksremove = 2;
9657 maxnlocksremove = 1;
9676 vars = consdata->vars;
9677 vals = consdata->vals;
9680 bestnlocks = INT_MAX;
9681 bestremovescons =
FALSE;
9682 bestslackdomrng = 0.0;
9683 coefszeroone =
TRUE;
9684 coefsintegral =
TRUE;
9685 varsintegral =
TRUE;
9694 for( v = 0; v < consdata->nvars; ++v )
9718 if( absval < minabsval )
9720 if( absval > maxabsval )
9725 if( maxabsval / minabsval > conshdlrdata->maxmultaggrquot )
9730 coefszeroone = coefszeroone &&
SCIPisEQ(
scip, absval, 1.0);
9761 if( nlocks > maxnlocksremove )
9765 if( (iscont || (coefsintegral && varsintegral &&
SCIPisEQ(
scip, absval, 1.0))) &&
9779 slackdomrng = (varub - varlb)*absval;
9785 better = (slacktype > bestslacktype) || (bestslackpos == -1);
9786 if( !better && slacktype == bestslacktype )
9788 better = (nlocks < bestnlocks);
9789 if( nlocks == bestnlocks && !bestremovescons )
9792 equal = !better &&
SCIPisGE(
scip, slackdomrng, bestslackdomrng);
9796 if( better || equal )
9810 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
9815 if( !ismintight || !ismaxtight )
9835 if( conshdlrdata->multaggrremove && !removescons )
9841 if( !removescons && nlocks > maxnlocksstay )
9847 if( !bestremovescons && removescons )
9854 bestslacktype = slacktype;
9855 bestnlocks = nlocks;
9856 bestslackdomrng = slackdomrng;
9857 bestremovescons = removescons;
9877 if( bestslackpos >= 0
9879 || (coefsintegral && varsintegral && nimplvars == 0)) )
9902 slackvar =
vars[bestslackpos];
9903 slackcoef = vals[bestslackpos];
9905 aggrconst = consdata->rhs/slackcoef;
9913 for( v = 0; v < consdata->nvars - 1; ++v )
9915 if( v == bestslackpos )
9917 aggrvars[v] =
vars[consdata->nvars - 1];
9918 scalars[v] = -consdata->vals[consdata->nvars - 1] / slackcoef;
9922 aggrvars[v] =
vars[v];
9923 scalars[v] = -consdata->vals[v] / slackcoef;
9927 SCIPdebugMsgPrint(
scip,
" %+.15g, bounds of <%s>: [%.15g,%.15g], nlocks=%d, maxnlocks=%d, removescons=%u\n",
9929 bestnlocks, bestremovescons ? maxnlocksremove : maxnlocksstay, bestremovescons);
9933 &infeasible, &aggregated) );
9963 if( bestremovescons )
9968 if( !consdata->upgraded )
9972 else if( ncontvars == 1 )
9976 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
9986 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting continuous variable <%s> to implied integral variable\n",
10010 absval =
REALABS(vals[contvarpos]);
10022#ifdef WITH_DEBUG_SOLUTION
10023 if( SCIPdebugIsMainscip(
scip) )
10032 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregating continuous variable <%s> to newly created implied integral variable <%s>, aggregation factor = %g\n",
10040 SCIPdebugMsg(
scip,
"infeasible aggregation of variable <%s> to implied integral variable <%s>, domain is empty\n",
10062 consdata->boundstightened = 0;
10063 consdata->rangedrowpropagated = 0;
10064 consdata->presolved =
FALSE;
10067 else if( ncontvars == 0 && nimplvars == 0 && nintvars == 1 && !coefszeroone )
10075 assert(0 <= intvarpos && intvarpos < consdata->
nvars);
10084 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting integer variable <%s> to implied integral variable\n",
10119 vars = consdata->vars;
10120 nvars = consdata->nvars;
10124 for( v = 0; v <
nvars; ++v )
10148 val = consdata->vals[v];
10155 (*scale) = val / -
objval;
10167 (*scale) = val /
objval;
10203 nvars = consdata->nvars;
10212 (
nvars == nobjvars && (!conshdlrdata->detectcutoffbound || !conshdlrdata->detectlowerbound)) )
10215 offset = consdata->rhs;
10225 vars = consdata->vars;
10230 SCIPdebugMsg(
scip,
"linear equality constraint <%s> == %g (offset %g) is a subset of the objective function\n",
10238 for( v = 0; v <
nvars; ++v )
10322 nvars = consdata->nvars;
10337 if( nobjvars == 0 )
10352 if( conshdlrdata->detectcutoffbound && rhsfinite )
10356 primalbound = (consdata->rhs - offset) / scale;
10358 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10364 if( conshdlrdata->detectlowerbound && lhsfinite )
10368 lowerbound = (consdata->lhs - offset) / scale;
10370 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10376 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !lhsfinite)) ||
10377 (conshdlrdata->detectlowerbound && !rhsfinite) )
10386 if( conshdlrdata->detectlowerbound && rhsfinite )
10390 lowerbound = (consdata->rhs - offset) / scale;
10392 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10398 if( conshdlrdata->detectcutoffbound && lhsfinite )
10402 primalbound = (consdata->lhs - offset) / scale;
10404 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10410 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !rhsfinite)) ||
10411 (conshdlrdata->detectlowerbound && !lhsfinite) )
10448 assert(consdata->removedfixings);
10455 if( consdata->nvars == 1 )
10460 else if( consdata->nvars == 2 )
10494 for( v = 0; v < consdata->nvars; ++v )
10524 *minval = -maxresactivity;
10526 *minval = (side - maxresactivity)/val;
10529 *maxval = -minresactivity;
10531 *maxval = (side - minresactivity)/val;
10536 *minval = minresactivity;
10538 *minval = (side - minresactivity)/val;
10541 *maxval = maxresactivity;
10543 *maxval = (side - maxresactivity)/val;
10612 if( consdata->nvars <= 2 )
10613 maxotherlocks = INT_MAX;
10614 else if( consdata->nvars == 3 )
10616 else if( consdata->nvars == 4 )
10622 if( lhsexists && rhsexists && maxotherlocks < INT_MAX )
10627 for(
i = 0;
i < consdata->nvars && bestisint; ++
i )
10639 val = consdata->vals[
i];
10643 if( absval < minabsval )
10644 minabsval = absval;
10645 if( absval > maxabsval )
10646 maxabsval = absval;
10649 if( maxabsval / minabsval > conshdlrdata->maxdualmultaggrquot )
10652 var = consdata->vars[
i];
10656 if( bestpos >= 0 && isint )
10668 val = consdata->vals[
i];
10705 if( agglhs || aggrhs )
10718 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
10725 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
10740 recalculated =
FALSE;
10741 oldmaxresactivity = maxresactivity;
10742 oldminresactivity = minresactivity;
10748 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10749 isminsettoinfinity =
TRUE;
10756 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10757 ismaxsettoinfinity =
TRUE;
10800 recalculated =
FALSE;
10801 oldmaxresactivity = maxresactivity;
10802 oldminresactivity = minresactivity;
10808 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10815 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10855 assert(!bestislhs || lhsexists);
10856 assert(bestislhs || rhsexists);
10858 bestvar = consdata->vars[bestpos];
10859 bestval = consdata->vals[bestpos];
10871 for( j = 0; j < consdata->nvars; ++j )
10875 aggrvars[naggrs] = consdata->vars[j];
10876 aggrcoefs[naggrs] = -consdata->vals[j]/consdata->vals[bestpos];
10883 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: too large aggregation coefficients\n");
10896 aggrcoefs[naggrs] =
SCIPfloor(
scip, aggrcoefs[naggrs]+0.5);
10903 aggrconst = (bestislhs ? consdata->lhs/bestval : consdata->rhs/bestval);
10906 assert(naggrs == consdata->nvars-1);
10915 aggregated =
FALSE;
10916 infeasible =
FALSE;
10929 for( j = 0; j < naggrs; ++j )
10939 assert(!infeasiblevartypechg);
10942 assert(!infeasiblevartypechg);
10965 if( !consdata->upgraded )
10980#define CONTWEIGHT 8
11061 lhs = consdata->lhs;
11062 vars = consdata->vars;
11063 vals = consdata->vals;
11064 nvars = consdata->nvars;
11073 for( v = 0; v <
nvars && noddvars < 3; ++v )
11088 if( noddvars == 0 )
11100 if( noddvars == 1 )
11104 SCIPdebugMsg(
scip,
"linear constraint <%s>: try fixing variable <%s> to <%g>\n",
11124 else if( noddvars == 2 )
11133 SCIPdebugMsg(
scip,
"linear constraint <%s>: try aggregation of variables <%s> and <%s>\n",
11137 lhsodd ? 1.0 : 0.0, &infeasible, &redundant, &aggregated) );
11178 while( success && consdata->nvars >= 1 );
11205 if( varcont1 != varcont2 )
11212 else if( varcont2 )
11215 value =
REALABS(consdata->vals[ind2]) -
REALABS(consdata->vals[ind1]);
11218 return (value > 0 ? +1 : (value < 0 ? -1 : 0));
11255 nvars = consdata->nvars;
11261 lhs = consdata->lhs;
11262 rhs = consdata->rhs;
11271 vals = consdata->vals;
11272 vars = consdata->vars;
11280 for( v =
nvars - 1; v >= 0; --v )
11286 secondminval = minval;
11289 else if( secondminval > vals[v] || secondminval ==
SCIP_INVALID )
11290 secondminval = vals[v];
11304 for( v =
nvars - 1; v >= 0; --v )
11308 (*nchgcoefs) +=
nvars;
11391 *infeasible =
FALSE;
11403 nvars = consdata->nvars;
11427 consdata->normalized =
FALSE;
11435 if( !consdata->normalized )
11438 lhs = consdata->lhs;
11439 rhs = consdata->rhs;
11454 if( haslhs && hasrhs )
11460 assert(haslhs != hasrhs);
11476 consdata->indexsorted =
FALSE;
11477 consdata->coefsorted =
FALSE;
11479 vars = consdata->vars;
11480 vals = consdata->vals;
11503 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
11506 if( isminsettoinfinity || ismaxsettoinfinity )
11511 assert(maxact > minact);
11517 side = haslhs ? lhs : rhs;
11518 minactsub = minact;
11519 maxactsub = maxact;
11588 for(
w = 0;
w < v; ++
w )
11596 maxactsub -= ub * vals[
w];
11597 minactsub -= lb * vals[
w];
11598 assert(maxactsub > minactsub);
11629 maxactsub -= ub * vals[0];
11630 minactsub -= lb * vals[0];
11634 maxactsub -= lb * vals[0];
11635 minactsub -= ub * vals[0];
11637 assert(maxactsub > minactsub);
11642 allcoefintegral =
TRUE;
11645 for( ; v <
nvars - 1; ++v )
11652 allcoefintegral =
FALSE;
11671 maxactsub -= ub * vals[v];
11672 minactsub -= lb * vals[v];
11676 maxactsub -= lb * vals[v];
11677 minactsub -= ub * vals[v];
11694 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11695 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11698 if( offsetv == -1 && (rredundant || lredundant) )
11724 SCIPdebugMsg(
scip,
"stopped at pos %d (of %d), subactivities [%g, %g], redundant = %u, hasrhs = %u, siderest = %g, gcd = %" SCIP_LONGINT_FORMAT ", offset position for 'side' coefficients = %d\n",
11725 v,
nvars, minactsub, maxactsub, redundant, hasrhs, siderest, gcd, offsetv);
11732 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11733 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11736 if( v <
nvars && numericsok && (redundant || (offsetv == -1 && (rredundant || lredundant))) )
11757 tmpmaxactsub += ub * vals[
w];
11758 tmpminactsub += lb * vals[
w];
11762 tmpmaxactsub += lb * vals[
w];
11763 tmpminactsub += ub * vals[
w];
11765 assert(tmpmaxactsub >= tmpminactsub);
11785 (haslhs && tmpmaxactsub < siderest &&
SCIPisFeasGE(
scip, tmpminactsub, siderest - gcd)));
11788 SCIPdebugMsg(
scip,
"removing %d last variables from constraint <%s>, because they never change anything on the feasibility of this constraint\n",
11796 (*nchgcoefs) += (
nvars - v);
11804 assert(vals == consdata->vals);
11819 rhs = consdata->rhs;
11826 lhs = consdata->lhs;
11837 nvars = consdata->nvars;
11840 allcoefintegral =
TRUE;
11844 for(
w = offsetv + 1;
w <
nvars; ++
w )
11853 if( offsetv >= 0 && gcd == 1 )
11863 for( v =
nvars - 1; v > offsetv; --v )
11871 allcoefintegral =
FALSE;
11897 if( candpos == -1 )
11907 assert(v > offsetv || candpos > offsetv);
11913 candpos =
nvars - 1;
11916 if( gcd > 1 && allcoefintegral && !redundant )
11919 allcoefintegral =
FALSE;
11923 if( offsetv >= 0 && gcd > 1 && allcoefintegral )
11934 for(
w = offsetv + 1;
w <
nvars; ++
w )
11952 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
11959 if( restcoef > rest )
11960 newcoef = vals[candpos] - restcoef + gcd;
11962 newcoef = vals[candpos] - restcoef;
11967 if( rest == 0 || restcoef < rest )
11968 newcoef = vals[candpos] - restcoef;
11970 newcoef = vals[candpos] - restcoef + gcd;
11980 notchangable =
TRUE;
12021 for(
w = offsetv;
w >= 0; --
w )
12027 (*nchgcoefs) += (offsetv + 1);
12030 if( !notchangable )
12034 assert(vals == consdata->vals);
12040 nvars = consdata->nvars;
12045 lhs = consdata->lhs;
12046 rhs = consdata->rhs;
12060 allcoefintegral =
TRUE;
12062 for( v =
nvars - 1; v >= 0; --v )
12067 allcoefintegral =
FALSE;
12084 if( allcoefintegral )
12095 for( v =
nvars - 1; v >= 0; --v )
12131 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the right hand side down\n");
12136 for( v =
nvars - 1; v >= 0; --v )
12173 if( allcoefintegral )
12188 for( v =
nvars - 1; v >= 0; --v )
12236 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the left hand side down\n");
12241 for( v =
nvars - 1; v >= 0; --v )
12279 assert(vals == consdata->vals);
12284 rhs = consdata->rhs;
12285 lhs = consdata->lhs;
12292 nvars = consdata->nvars;
12296 allcoefintegral =
TRUE;
12299 for( v =
nvars - 1; v >= 0; --v )
12306 if( !allcoefintegral )
12326 SCIPdebug( oldnchgcoefs = *nchgcoefs; )
12327 SCIPdebug( oldnchgsides = *nchgsides; )
12342 for( v =
nvars - 1; v >= 0; --v )
12349 if( foundbin == -1 )
12377 foundbin =
nvars - 1;
12380 if( gcd == 1 || foundbin == -1)
12383 assert((onlybin && gcd == -1) || (!onlybin && gcd > 1));
12391 for( v = foundbin; v >= 0; --v )
12420 if( candpos == -1 )
12428 if( onlybin && v == foundbin - 1 )
12429 candpos2 = foundbin;
12434 if( onlybin && candpos == v + 1 && candpos2 == v + 2 )
12439 candpos = candpos2;
12482 if( vals[candpos] < 0 )
12484 restcoef = ((
SCIP_Longint)(vals[candpos] - feastol)) % gcd;
12489 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
12503 if( restcoef > rest )
12504 newcoef = vals[candpos] - restcoef + gcd;
12506 newcoef = vals[candpos] - restcoef;
12518 if( rest == 0 || restcoef < rest )
12519 newcoef = vals[candpos] - restcoef;
12521 newcoef = vals[candpos] - restcoef + gcd;
12525 SCIPdebugMsg(
scip,
"gcd = %" SCIP_LONGINT_FORMAT ", rest = %" SCIP_LONGINT_FORMAT ", restcoef = %" SCIP_LONGINT_FORMAT "; changing coef of variable <%s> to %g and %s by %" SCIP_LONGINT_FORMAT "\n", gcd, rest, restcoef,
SCIPvarGetName(
vars[candpos]), newcoef, hasrhs ?
"reduced rhs" :
"increased lhs", hasrhs ? rest : (rest > 0 ? gcd - rest : 0));
12542 assert(vals == consdata->vals);
12549 rhs = consdata->rhs;
12550 lhs = consdata->lhs;
12554 nvars = consdata->nvars;
12556 SCIPdebugMsg(
scip,
"we did %d coefficient changes and %d side changes on constraint %s when applying one round of the gcd algorithm\n", *nchgcoefs - oldnchgcoefs, *nchgsides - oldnchgsides,
SCIPconsGetName(cons));
12558 while(
nvars >= 2 );
12578 int* diffidx0minus1,
12579 int* diffidx1minus0,
12581 int commonidxweight,
12582 int diffidx0minus1weight,
12583 int diffidx1minus0weight,
12614 assert(nvarscommon >= 1);
12615 assert(commonidxweight >= nvarscommon);
12622 *infeasible =
FALSE;
12629 assert(consdata0->nvars >= 1);
12631 assert(diffidx0minus1weight >= consdata0->nvars - nvarscommon);
12636 assert(consdata1->nvars >= 1);
12638 assert(diffidx1minus0weight >= consdata1->nvars - nvarscommon);
12640 *aggregated =
FALSE;
12646 bestvarweight = commonidxweight + diffidx0minus1weight;
12647 bestnvars = consdata0->nvars;
12649 bestscalarsum = 0.0;
12650 commonvarlindependent =
TRUE;
12651 for( v = 0; v < nvarscommon; ++v )
12653 assert(consdata0->vars[commonidx0[v]] == consdata1->vars[commonidx1[v]]);
12654 a = consdata1->vals[commonidx1[v]];
12655 b = -consdata0->vals[commonidx0[v]];
12661 varweight = diffidx0minus1weight + diffidx1minus0weight;
12662 nvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12664 betterscalarsum = (scalarsum < bestscalarsum);
12665 for(
i = 0;
i < nvarscommon
12666 && (varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum)); ++
i )
12668 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12675 if( varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum) )
12678 bestvarweight = varweight;
12680 bestscalarsum = scalarsum;
12687 if( commonvarlindependent && v > 0 )
12689 consdata1->vals[commonidx1[v]] * consdata0->vals[commonidx0[0]],
12690 consdata1->vals[commonidx1[0]] * consdata0->vals[commonidx0[v]]);
12707 if( consdata1->vals[commonidx1[bestv]] > 0.0 )
12709 a = consdata1->vals[commonidx1[bestv]];
12710 b = -consdata0->vals[commonidx0[bestv]];
12714 a = -consdata1->vals[commonidx1[bestv]];
12715 b = consdata0->vals[commonidx0[bestv]];
12724 assert(commonvarlindependent);
12725 if( consdata1->vals[commonidx1[0]] > 0.0 )
12727 a = consdata1->vals[commonidx1[0]];
12728 b = -consdata0->vals[commonidx0[0]];
12732 a = -consdata1->vals[commonidx1[0]];
12733 b = consdata0->vals[commonidx0[0]];
12754 SCIPdebug( bestvarweight = diffidx0minus1weight + diffidx1minus0weight; )
12755 bestnvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12758 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> := %.15g*<%s> + %.15g*<%s> -> nvars: %d -> %d, weight: %d -> %d\n",
12760 consdata0->nvars, bestnvars, commonidxweight + diffidx0minus1weight, bestvarweight);
12770 if( !commonvarlindependent )
12772 for(
i = 0;
i < nvarscommon; ++
i )
12774 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12775 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12777 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12780 assert(newnvars < bestnvars);
12781 newvars[newnvars] = consdata0->vars[commonidx0[
i]];
12782 newvals[newnvars] = aggrcoef;
12791 for(
i = 0;
i < nvarscommon; ++
i )
12793 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12794 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12796 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12803 for(
i = 0;
i < consdata0->nvars - nvarscommon; ++
i )
12805 assert(0 <= diffidx0minus1[
i] && diffidx0minus1[
i] < consdata0->nvars);
12807 aggrcoef =
a * consdata0->vals[diffidx0minus1[
i]];
12809 assert(newnvars < bestnvars);
12810 newvars[newnvars] = consdata0->vars[diffidx0minus1[
i]];
12811 newvals[newnvars] = aggrcoef;
12816 for(
i = 0;
i < consdata1->nvars - nvarscommon; ++
i )
12818 assert(0 <= diffidx1minus0[
i] && diffidx1minus0[
i] < consdata1->nvars);
12820 aggrcoef =
b * consdata1->vals[diffidx1minus0[
i]];
12822 assert(newnvars < bestnvars);
12823 newvars[newnvars] = consdata1->vars[diffidx1minus0[
i]];
12824 newvals[newnvars] = aggrcoef;
12827 assert(newnvars == bestnvars);
12835 newlhs =
a * consdata0->lhs +
b * consdata1->lhs;
12839 newrhs =
a * consdata0->rhs +
b * consdata1->rhs;
12852 newconsdata->upgraded = consdata0->upgraded;
12865 if( !consdata0->upgraded )
12866 (*nchgcoefs) += consdata0->nvars + consdata1->nvars - nvarscommon;
12867 *aggregated =
TRUE;
12911 assert(consdata1->indexsorted);
12912 assert(consdata2->indexsorted);
12922 if( consdata1->nvars != consdata2->nvars )
12926 for(
i = 0;
i < consdata1->nvars; ++
i )
12928 if( consdata1->vars[
i] != consdata2->vars[
i] )
12946 for(
i = 0;
i < consdata1->nvars; ++
i )
12948 SCIP_Real scale = consdata2->vals[
i] / consdata1->vals[
i];
12950 if( minscale > scale )
12958 if( maxscale < scale )
12988 assert(consdata->nvars > 0);
12990 assert(consdata->indexsorted);
12997 return SCIPhashFour(consdata->nvars, minidx, mididx, maxidx);
13015 return (((
unsigned int)consdata->upgraded)<<31) + (
unsigned int)
SCIPconsGetPos(cons);
13029 int* nparallelconss
13033 unsigned int querykey;
13035 *nparallelconss = 0;
13042 if( conskey < querykey )
13044 parallelconss[(*nparallelconss)++] = *querycons;
13045 *querycons = parallelcons;
13046 querykey = conskey;
13050 parallelconss[(*nparallelconss)++] = parallelcons;
13061 if( *querycons == parallelcons )
13097 int nparallelconss;
13110 hashtablesize = nconss;
13112 hashGetKeyLinearcons, hashKeyEqLinearcons, hashKeyValLinearcons, (
void*)
scip) );
13117 for(
c = 0;
c < nconss; ++
c )
13139 assert(consdata0->indexsorted);
13148 if( nparallelconss != 0 )
13158 lhs = consdata0->lhs;
13159 rhs = consdata0->rhs;
13161 for(
i = 0;
i < nparallelconss; ++
i )
13167 consdel = parallelconss[
i];
13181 assert(consdata0->nvars >= 1 && consdata0->nvars == consdatadel->nvars);
13183 assert(consdatadel->indexsorted);
13184 assert(consdata0->vars[0] == consdatadel->vars[0]);
13186 scale = consdata0->vals[0] / consdatadel->vals[0];
13194 assert(consdata0->validmaxabsval);
13195 assert(consdatadel->validmaxabsval);
13197 SCIP_Real scale0 = 1.0 / consdata0->maxabsval;
13200 for( k = 0; k < consdata0->nvars; ++k )
13202 assert(
SCIPisEQ(
scip, scale0 * consdata0->vals[k], scaledel * consdatadel->vals[k]));
13210 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with equal coefficients into single ranged row\n",
13216 lhs =
MAX(scale * consdatadel->lhs, lhs);
13219 rhs =
MIN(scale * consdatadel->rhs, rhs);
13224 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with negated coefficients into single ranged row\n",
13230 lhs =
MAX(scale * consdatadel->rhs, lhs);
13233 rhs =
MIN(scale * consdatadel->lhs, rhs);
13240 assert( ! consdata0->upgraded || consdatadel->upgraded );
13242 if( !consdatadel->upgraded )
13256 rhs = (lhs + rhs)/2;
13265 if( consdata0->changed &&
SCIPconsGetPos(cons0) < *firstchange )
13271#ifdef SCIP_MORE_DEBUG
13304 int* diffidx0minus1;
13305 int* diffidx1minus0;
13306 uint64_t possignature0;
13307 uint64_t negsignature0;
13310 int diffidx1minus0size;
13318 assert(firstchange <= chkind);
13325 cons0 = conss[chkind];
13332 assert(consdata0->nvars >= 1);
13333 cons0isequality =
SCIPisEQ(
scip, consdata0->lhs, consdata0->rhs);
13340 possignature0 = consdata0->possignature;
13341 negsignature0 = consdata0->negsignature;
13348 diffidx1minus0size = consdata0->nvars;
13350 cons0lhs = consdata0->lhs;
13351 cons0rhs = consdata0->rhs;
13352 cons0upgraded = consdata0->upgraded;
13355 cons0changed = consdata0->changed;
13356 consdata0->changed =
FALSE;
13357 for(
c = (cons0changed ? 0 : firstchange);
c < chkind && !(*cutoff) && conss[chkind] !=
NULL; ++
c )
13361 uint64_t possignature1;
13362 uint64_t negsignature1;
13374 int commonidxweight;
13375 int diffidx0minus1weight;
13376 int diffidx1minus0weight;
13380 assert(cons0lhs == consdata0->lhs);
13381 assert(cons0rhs == consdata0->rhs);
13382 assert(cons0upgraded == consdata0->upgraded);
13387 if( cons1 ==
NULL )
13401 if( !cons0changed && !consdata1->changed )
13406 if( cons0upgraded && consdata1->upgraded )
13409 assert(consdata1->nvars >= 1);
13416 possignature1 = consdata1->possignature;
13417 negsignature1 = consdata1->negsignature;
13420 coefsequal = (possignature0 == possignature1) && (negsignature0 == negsignature1);
13421 coefsnegated = (possignature0 == negsignature1) && (negsignature0 == possignature1);
13422 cons0dominateslhs =
SCIPisGE(
scip, cons0lhs, consdata1->lhs)
13423 && ((possignature0 | possignature1) == possignature1)
13424 && ((negsignature0 | negsignature1) == negsignature0);
13425 cons1dominateslhs =
SCIPisGE(
scip, consdata1->lhs, cons0lhs)
13426 && ((possignature0 | possignature1) == possignature0)
13427 && ((negsignature0 | negsignature1) == negsignature1);
13428 cons0dominatesrhs =
SCIPisLE(
scip, cons0rhs, consdata1->rhs)
13429 && ((possignature0 | possignature1) == possignature0)
13430 && ((negsignature0 | negsignature1) == negsignature1);
13431 cons1dominatesrhs =
SCIPisLE(
scip, consdata1->rhs, cons0rhs)
13432 && ((possignature0 | possignature1) == possignature1)
13433 && ((negsignature0 | negsignature1) == negsignature0);
13434 cons1isequality =
SCIPisEQ(
scip, consdata1->lhs, consdata1->rhs);
13435 tryaggregation = (cons0isequality || cons1isequality) && (maxaggrnormscale > 0.0);
13436 if( !cons0dominateslhs && !cons1dominateslhs && !cons0dominatesrhs && !cons1dominatesrhs
13437 && !coefsequal && !coefsnegated && !tryaggregation )
13441 if( tryaggregation && consdata1->nvars > diffidx1minus0size )
13444 diffidx1minus0size = consdata1->nvars;
13470 commonidxweight = 0;
13472 diffidx0minus1weight = 0;
13474 diffidx1minus0weight = 0;
13477 while( (v0 < consdata0->
nvars || v1 < consdata1->
nvars)
13478 && (cons0dominateslhs || cons1dominateslhs || cons0dominatesrhs || cons1dominatesrhs
13479 || coefsequal || coefsnegated || tryaggregation) )
13487 if( v0 < consdata0->
nvars && v1 < consdata1->
nvars )
13488 varcmp =
SCIPvarCompare(consdata0->vars[v0], consdata1->vars[v1]);
13489 else if( v0 < consdata0->
nvars )
13498 var = consdata0->vars[v0];
13499 val0 = consdata0->vals[v0];
13501 if( tryaggregation )
13503 diffidx0minus1[nvars0minus1] = v0;
13508 coefsequal =
FALSE;
13509 coefsnegated =
FALSE;
13514 var = consdata1->vars[v1];
13516 val1 = consdata1->vals[v1];
13517 if( tryaggregation )
13519 diffidx1minus0[nvars1minus0] = v1;
13524 coefsequal =
FALSE;
13525 coefsnegated =
FALSE;
13530 assert(consdata0->vars[v0] == consdata1->vars[v1]);
13531 var = consdata0->vars[v0];
13532 val0 = consdata0->vals[v0];
13533 val1 = consdata1->vals[v1];
13534 if( tryaggregation )
13536 commonidx0[nvarscommon] = v0;
13537 commonidx1[nvarscommon] = v1;
13543 coefsequal = coefsequal && (
SCIPisEQ(
scip, val0, val1));
13544 coefsnegated = coefsnegated && (
SCIPisEQ(
scip, val0, -val1));
13561 cons0dominatesrhs =
FALSE;
13562 cons1dominateslhs =
FALSE;
13566 cons0dominateslhs =
FALSE;
13567 cons1dominatesrhs =
FALSE;
13574 cons0dominateslhs =
FALSE;
13575 cons1dominatesrhs =
FALSE;
13579 cons0dominatesrhs =
FALSE;
13580 cons1dominateslhs =
FALSE;
13586 if( coefsequal || coefsnegated )
13601 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with %s coefficients into single ranged row\n",
13609 lhs =
MAX(consdata0->lhs, consdata1->lhs);
13610 rhs =
MIN(consdata0->rhs, consdata1->rhs);
13615 lhs =
MAX(consdata0->lhs, -consdata1->rhs);
13616 rhs =
MIN(consdata0->rhs, -consdata1->lhs);
13627 if( consdata0->upgraded )
13629 assert(!consdata1->upgraded);
13632 consdatastay = consdata1;
13636 consdatadel = consdata0;
13637 consinddel = chkind;
13643 consdatastay = consdata0;
13647 consdatadel = consdata1;
13654 if( !consdata0->upgraded )
13656 assert(consstay == cons0);
13657 cons0lhs = consdata0->lhs;
13658 cons0rhs = consdata0->rhs;
13664 assert( !consdatastay->upgraded );
13667 conss[consinddel] =
NULL;
13668 if( !consdatadel->upgraded )
13676 if( cons1dominateslhs && (!cons0isequality || cons1dominatesrhs ||
SCIPisInfinity(
scip, consdata0->rhs) ) )
13679 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13696 cons0lhs = consdata0->lhs;
13697 cons0isequality =
FALSE;
13698 if( !consdata0->upgraded )
13707 else if( cons0dominateslhs && (!cons1isequality || cons0dominatesrhs ||
SCIPisInfinity(
scip, consdata1->rhs)) )
13710 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13727 cons1isequality =
FALSE;
13728 if( !consdata1->upgraded )
13737 if( cons1dominatesrhs && (!cons0isequality || cons1dominateslhs ||
SCIPisInfinity(
scip, -consdata0->lhs)) )
13740 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13757 cons0rhs = consdata0->rhs;
13758 cons0isequality =
FALSE;
13759 if( !consdata0->upgraded )
13768 else if( cons0dominatesrhs && (!cons1isequality || cons0dominateslhs ||
SCIPisInfinity(
scip, -consdata1->lhs)) )
13771 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13788 cons1isequality =
FALSE;
13789 if( !consdata1->upgraded )
13805 conss[chkind] =
NULL;
13806 if( !consdata0->upgraded )
13821 if( !consdata1->upgraded )
13834 if( tryaggregation )
13838 assert(consdata0->nvars == nvarscommon + nvars0minus1);
13839 assert(consdata1->nvars == nvarscommon + nvars1minus0);
13841 aggregated =
FALSE;
13842 if( cons1isequality && !consdata0->upgraded && commonidxweight > diffidx1minus0weight )
13846 nvarscommon, commonidxweight, diffidx0minus1weight, diffidx1minus0weight, maxaggrnormscale,
13847 nchgcoefs, &aggregated,
cutoff) );
13857 conss[chkind] =
NULL;
13860 if( !aggregated && cons0isequality && !consdata1->upgraded && commonidxweight > diffidx0minus1weight )
13864 nvarscommon, commonidxweight, diffidx1minus0weight, diffidx0minus1weight, maxaggrnormscale,
13865 nchgcoefs, &aggregated,
cutoff) );
13940 if( singlevarstuffing )
13943 &isminsettoinfinity, &ismaxsettoinfinity);
13949 isminsettoinfinity =
FALSE;
13950 ismaxsettoinfinity =
FALSE;
13958 rhs = -consdata->lhs;
13960 maxactivity = -minactivity;
13961 ismaxsettoinfinity = isminsettoinfinity;
13966 rhs = consdata->rhs;
13970 nvars = consdata->nvars;
13971 vars = consdata->vars;
13972 vals = consdata->vals;
13975 if( singletonstuffing )
13977 for( v = 0; v <
nvars; ++v )
13993 assert(singletonstuffing);
14001 mincondactivity = 0.0;
14002 maxcondactivity = 0.0;
14004 for( v = 0; v <
nvars; ++v )
14010 val = factor * vals[v];
14027 maxcondactivity += val * lb;
14028 mincondactivity += val * lb;
14029 swapped[v] =
FALSE;
14030 ratios[nsingletons] =
obj / val;
14031 varpos[nsingletons] = v;
14046 maxcondactivity += val * ub;
14047 mincondactivity += val * ub;
14049 ratios[nsingletons] =
obj / val;
14050 varpos[nsingletons] = v;
14067 maxcondactivity += val * lb;
14068 mincondactivity += val * lb;
14085 maxcondactivity += val * ub;
14086 mincondactivity += val * ub;
14102 maxcondactivity += val * ub;
14103 mincondactivity += val * lb;
14107 maxcondactivity += val * lb;
14108 mincondactivity += val * ub;
14112 if( tryfixing && nsingletons > 0 && (
SCIPisGT(
scip, rhs, maxcondactivity) ||
SCIPisLE(
scip, rhs, mincondactivity)) )
14117 int oldnfixedvars = *nfixedvars;
14123 for( v = 0; v < nsingletons; ++v )
14127 val = factor * vals[idx];
14132 assert((val < 0) == swapped[idx]);
14147 delta = -(lb - ub) * val;
14149 delta = (ub - lb) * val;
14199 maxcondactivity += delta;
14200 mincondactivity += delta;
14204 if( *nfixedvars - oldnfixedvars > 0 )
14206 SCIPdebugMsg(
scip,
"### stuffing fixed %d variables\n", *nfixedvars - oldnfixedvars);
14245 if( singlevarstuffing && !ismaxsettoinfinity )
14250 int bestindex = -1;
14251 int bestuplocks = 0;
14252 int bestdownlocks = 1;
14255 SCIPdebug(
int oldnfixedvars = *nfixedvars; )
14256 SCIPdebug(
int oldnchgbds = *nchgbds; )
14259 for( v = 0; v <
nvars; ++v )
14263 val = factor * vals[v];
14291 if( ratio > bestratio || ( downlocks == 0 && ratio == bestratio && ( bestdownlocks > 0
14295 if( bestindex != -1 )
14298 if( bestuplocks > 1 )
14305 secondbestratio = bestratio;
14308 bestdownlocks = downlocks;
14309 bestuplocks = uplocks;
14316 if( bestdownlocks > 0 && bestuplocks > 1 )
14331 if( ratio > secondbestratio )
14333 secondbestratio = ratio;
14339 if( bestindex != -1 && bestdownlocks == 0 )
14346 val = factor * vals[bestindex];
14359 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * -val);
14364 bounddelta =
SCIPceil(
scip, (maxactivity - rhs)/-val);
14368 bounddelta = (maxactivity - rhs)/-val;
14370 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14396 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * val);
14405 bounddelta = (maxactivity - rhs)/val;
14407 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14436 for( v = 0; v <
nvars; ++v )
14444 SCIPdebugMsg(
scip,
"<= %g\n", factor > 0 ? consdata->rhs : -consdata->lhs);
14446 for( v = 0; v <
nvars; ++v )
14448 if( v == bestindex )
14451 if( factor * vals[v] < 0 )
14471 SCIPdebug(
SCIPdebugMsg(
scip,
"### new stuffing fixed %d vars, tightened %d bounds\n", *nfixedvars - oldnfixedvars, *nchgbds - oldnchgbds); )
14535 if( nbinvars ==
nvars )
14540 nintvars =
nvars - ncontvars;
14555 for( v = 0; v <
nvars; ++v )
14567 for( v = 0; v < ncontvars; v++ )
14574 var =
vars[v + nintvars - nbinvars];
14596 for(
c = 0;
c < nconss; ++
c )
14623 for(
i = 0;
i < consdata->nvars; ++
i )
14627 var = consdata->vars[
i];
14632 assert(0 <= contv && contv < ncontvars);
14633 isimplint[contv] =
FALSE;
14646 hasimpliedpotential =
FALSE;
14649 for(
i = 0;
i < consdata->nvars; ++
i )
14663 var = consdata->vars[
i];
14665 val = consdata->vals[
i];
14680 isminsettoinfinity =
TRUE;
14681 ismaxsettoinfinity =
TRUE;
14687 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
14693 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
14708 newredlb = redlb[arrayindex];
14709 newredub = redub[arrayindex];
14715 nlocksdown[arrayindex] += nlockspos;
14716 newredlb = (isminsettoinfinity ?
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14721 nlocksup[arrayindex] += nlockspos;
14722 newredub = (ismaxsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14730 nlocksup[arrayindex] += nlockspos;
14731 newredub = (isminsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14736 nlocksdown[arrayindex] += nlockspos;
14737 newredlb = (ismaxsettoinfinity ?
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14751 redlb[arrayindex] =
MAX(redlb[arrayindex], newredlb);
14752 redub[arrayindex] =
MIN(redub[arrayindex], newredub);
14759 assert(nconscontvars < ncontvars);
14761 conscontvars[nconscontvars] =
var;
14765 assert(0 <= contv && contv < ncontvars);
14766 hasimpliedpotential = hasimpliedpotential || isimplint[contv];
14771 if( hasimpliedpotential )
14773 if( nconscontvars > 1 || !integralcoefs )
14778 for(
i = 0;
i < nconscontvars;
i++ )
14782 assert(0 <= contv && contv < ncontvars);
14783 isimplint[contv] =
FALSE;
14797 assert(nconscontvars == 1);
14798 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
14799 var = consdata->vars[contvarpos];
14800 val = consdata->vals[contvarpos];
14802 assert(0 <= contv && contv < ncontvars);
14803 assert(isimplint[contv]);
14807 isimplint[contv] =
FALSE;
14813 if(
obj * val >= 0.0 && lhsexists )
14818 if(
obj * val <= 0.0 && rhsexists )
14830 for( v = 0; v <
nvars; ++v )
14860 SCIPdebugMsg(
scip,
"variable <%s> only locked down in linear constraints: dual presolve <%s>[%.15g,%.15g] <= %.15g\n",
14867 redub[v] =
MIN(redub[v], ub);
14889 SCIPdebugMsg(
scip,
"variable <%s> only locked up in linear constraints: dual presolve <%s>[%.15g,%.15g] >= %.15g\n",
14896 redlb[v] =
MAX(redlb[v], lb);
14905 for( v = nintvars - nbinvars; v <
nvars; ++v )
14916 assert(0 <= v - nintvars + nbinvars && v - nintvars + nbinvars < ncontvars);
14920 if( isimplint[v - nintvars + nbinvars]
14936 SCIPdebugMsg(
scip,
"dual presolve: declare continuous variable <%s>[%g,%g] implied integral\n",
14980 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
14982 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n",
sol ==
NULL ?
"LP" :
"relaxation");
14990 for(
c = 0;
c < nusefulconss; ++
c )
15056 nlocvars = consdata->nvars;
15061 for(
i = 0;
i < nlocvars; ++
i )
15063 vars[
i] = consdata->vars[
i];
15064 vals[
i] = consdata->vals[
i];
15068 lhs = consdata->lhs - constant;
15069 rhs = consdata->rhs - constant;
15079 for(
i = 0;
i < nlocvars; ++
i )
15087 cons, lhs, rhs, success) );
15152 conshdlrdata->naddconss = 0;
15155 for(
c = 0;
c < nconss; ++
c )
15180 for(
c = nconss - 1;
c >= 0; --
c )
15187 if( consdata->eventdata !=
NULL )
15261 for(
c = 0;
c < nconss;
c++ )
15280 rhs = consdata->rhs;
15281 lhs = consdata->lhs;
15285 for(
i = 0;
i < consdata->nvars;
i++ )
15291 if( consdata->nvars == 0 )
15311 if( consdata->nvars == 1 )
15321 if( consdata->nvars == 2 &&
SCIPisEQ(
scip, lhs, rhs) )
15331 if( consdata->nvars == 2 )
15335 &&
SCIPisEQ(
scip, consdata->vals[0], -consdata->vals[1]) )
15365 scale =
REALABS(consdata->vals[0]);
15368 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15375 if( consdata->vals[
i] < 0.0 )
15383 b = rhs/scale + nnegbinvars;
15404 b = rhs/scale + nnegbinvars;
15429 b = lhs/scale + nnegbinvars;
15459 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15467 b -= consdata->vals[
i];
15487 for(
i = 0;
i < consdata->nvars && !matched;
i++ )
15492 SCIPdebugMsg(
scip,
"classified as %s: ", matched ?
"BINPACKING" :
"KNAPSACK");
15515 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15542 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15575#ifdef SCIP_STATISTIC
15586#ifdef SCIP_STATISTIC
15594 for(
c = 0;
c < nconss; ++
c )
15604 if( consdata->upgraded )
15611 if(
SCIPisLT(
scip, consdata->maxactdelta, conshdlrdata->maxeasyactivitydelta) )
15616 SCIPstatisticMessage(
"below threshold: %d / %d ratio= %g\n", ngoodconss, nallconss, (100.0 * ngoodconss / nallconss));
15620 for(
c = 0;
c < nconss; ++
c )
15630 if( consdata->upgraded )
15655 for(
c = 0;
c < nconss; ++
c )
15673 for(
c = 0;
c < nconss; ++
c )
15680 if( consdata->row !=
NULL )
15685 if( consdata->nlrow !=
NULL )
15701 if( ncutsadded > 0 )
15704 "(restart) converted %d cuts from the global cut pool into linear constraints\n", ncutsadded);
15755 if( consdata->eventdata !=
NULL )
15783 if( (*consdata)->eventdata !=
NULL )
15824 sourcedata->rhs) );
15831 for(n = targetdata->nvars - 1; n >= 0; --n )
15856 *infeasible =
FALSE;
15858 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
15900 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15901 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15905 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15911 maxbound = glblowerbound + conshdlrdata->maxcardbounddist * (cutoffbound - glblowerbound);
15912 separatecards =
SCIPisLE(
scip, loclowerbound, maxbound);
15920 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15929 else if( ncuts > 0 )
15966 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15967 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15971 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15978 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15987 else if( ncuts > 0 )
16032 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16037 if( objinfeasible )
16039 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
16047 for(
c = 0;
c < nconss && !violated; ++
c )
16081 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16146 tightenbounds =
TRUE;
16151 int tightenboundsfreq;
16156 tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
16157 tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
16158 && ((tightenboundsfreq == 0 &&
depth == 0) || (tightenboundsfreq >= 1 && (
depth % tightenboundsfreq == 0)));
16161 rangedrowpropagation = conshdlrdata->rangedrowpropagation;
16163 rangedrowpropagation = rangedrowpropagation && (
depth <= conshdlrdata->rangedrowmaxdepth);
16164 rangedrowfreq = propfreq * conshdlrdata->rangedrowfreq;
16165 rangedrowpropagation = rangedrowpropagation && (conshdlrdata->rangedrowfreq >= 0)
16166 && ((rangedrowfreq == 0 &&
depth == 0) || (rangedrowfreq >= 1 && (
depth % rangedrowfreq == 0)));
16173 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
16177 conshdlrdata->maxeasyactivitydelta, conshdlrdata->sortvars, &
cutoff, &nchgbds) );
16183 else if( nchgbds > 0 )
16192#define MAXCONSPRESOLROUNDS 10
16215 int firstupgradetry;
16227 oldnfixedvars = *nfixedvars;
16228 oldnaggrvars = *naggrvars;
16229 oldnchgbds = *nchgbds;
16230 oldndelconss = *ndelconss;
16231 oldnupgdconss = *nupgdconss;
16232 oldnchgcoefs = *nchgcoefs;
16233 oldnchgsides = *nchgsides;
16240 firstchange = INT_MAX;
16241 firstupgradetry = INT_MAX;
16247 infeasible =
FALSE;
16257 consdata->lhs = consdata->rhs;
16261 if( consdata->eventdata ==
NULL )
16284 assert(consdata->removedfixings);
16291 if( firstchange == INT_MAX && consdata->changed )
16295 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16296 firstupgradetry =
c;
16299 if( consdata->presolved )
16317 consdata->presolved =
TRUE;
16334 SCIPdebugMsg(
scip,
" -> infeasibility detected during tightening sides\n");
16342 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16359 if( ( consdata->validmaxabsval && consdata->maxabsval >
MAXVALRECOMP )
16360 || ( consdata->validminabsval && consdata->minabsval <
MINVALRECOMP ) )
16368 &isminsettoinfinity, &ismaxsettoinfinity);
16373 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16374 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16380 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16381 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16385 if( !consdata->upgraded )
16391 SCIPdebugMsg(
scip,
"linear constraint <%s> left hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16392 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16394 if( !consdata->upgraded )
16399 SCIPdebugMsg(
scip,
"linear constraint <%s> right hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16400 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16402 if( !consdata->upgraded )
16407 if( consdata->nvars == 0 )
16411 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16417 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16422 if( !consdata->upgraded )
16432 if( conshdlrdata->simplifyinequalities )
16441 if( conshdlrdata->aggregatevariables )
16452 if( conshdlrdata->rangedrowpropagation )
16454 int lastnfixedvars;
16456 lastnfixedvars = *nfixedvars;
16461 if( lastnfixedvars < *nfixedvars )
16472 nfixedvars, nchgbds, &
cutoff) );
16479 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16485 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16490 if( !consdata->upgraded )
16515 if( firstchange == INT_MAX && consdata->changed )
16519 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16520 firstupgradetry =
c;
16528 conshdlrdata->singlevarstuffing, &
cutoff, nfixedvars, nchgbds) );
16531 if( consdata->nvars == 0 )
16535 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16541 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16546 if( !consdata->upgraded )
16559 assert(firstchange >= 0);
16561 if( firstchange < nconss && conshdlrdata->presolusehashing )
16565 ndelconss, nchgsides) );
16568 if( firstchange < nconss && conshdlrdata->presolpairwise )
16572 int firstchangenew;
16575 npaircomparisons = 0;
16576 oldndelconss = *ndelconss;
16577 oldnchgsides = *nchgsides;
16578 oldnchgcoefs = *nchgcoefs;
16584 firstchangenew = -1;
16585 for(
c = 0;
c < nconss; ++
c )
16588 if(
c == firstchange )
16589 firstchangenew = nusefulconss;
16595 usefulconss[nusefulconss] = conss[
c];
16598 firstchange = firstchangenew;
16599 assert(firstchangenew >= 0 && firstchangenew <= nusefulconss);
16604 if( usefulconss[
c] ==
NULL )
16611 &
cutoff, ndelconss, nchgsides, nchgcoefs) );
16613 if( npaircomparisons > conshdlrdata->nmincomparisons )
16615 assert(npaircomparisons > 0);
16616 if( ((*ndelconss - oldndelconss) + (*nchgsides - oldnchgsides)/2.0 + (*nchgcoefs - oldnchgcoefs)/10.0) / ((
SCIP_Real) npaircomparisons) < conshdlrdata->mingainpernmincomp )
16618 oldndelconss = *ndelconss;
16619 oldnchgsides = *nchgsides;
16620 oldnchgcoefs = *nchgcoefs;
16621 npaircomparisons = 0;
16632 if( !
cutoff && firstupgradetry < nconss
16633 && *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
16634 && *nupgdconss == oldnupgdconss && *nchgcoefs == oldnchgcoefs && *nchgsides == oldnchgsides
16661 if( consdata->upgradetried )
16664 if( !consdata->presolved )
16667 consdata->upgradetried =
TRUE;
16673 if( upgdcons !=
NULL )
16682 assert(!consdata->upgraded);
16683 consdata->upgraded =
TRUE;
16689 || !conshdlrdata->presolpairwise
16690 || (conshdlrdata->maxaggrnormscale == 0.0) )
16702 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
16703 || *nupgdconss > oldnupgdconss || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
16744 for(
i = 0;
i < consdata->nvars; ++
i )
16809 const char* consname;
16828 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
16843 char** firstoperator,
16844 char** secondoperator,
16854 *firstoperator =
NULL;
16855 *secondoperator =
NULL;
16861 while( *curr && *success )
16874 if( curr[1] ==
'=' )
16883 if( strncmp(curr,
"[free]", 6) == 0 )
16898 if( *firstoperator ==
NULL )
16900 *firstoperator = curr;
16904 if( *secondoperator !=
NULL )
16909 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
16911 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
16914 else if( strncmp(curr,
"<=", 2) != 0 )
16916 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
16920 *secondoperator = curr;
16930 if( *firstoperator ==
NULL )
16945 int coefssize = 100;
16953 char* lhsstrptr =
NULL;
16954 char* rhsstrptr =
NULL;
16955 char* varstrptr = (
char*)str;
16982 if( ! operatorsuccess )
16990 assert(firstop[1] ==
'=');
16992 if( secondop !=
NULL )
16994 assert(secondop[0] ==
'<' && secondop[1] ==
'=');
16995 lhsstrptr = (
char *)str;
16996 varstrptr = firstop + 2;
16997 rhsstrptr = secondop + 2;
17003 varstrptr = (
char *)str;
17004 rhsstrptr = firstop + 2;
17008 assert(firstop[1] ==
'=');
17011 lhsstrptr = firstop + 2;
17014 assert(firstop[1] ==
'=');
17017 rhsstrptr = firstop + 2;
17018 lhsstrptr = firstop + 2;
17021 assert(strncmp(firstop,
"[free]", 6) == 0);
17027 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
17032 if( lhsstrptr !=
NULL )
17036 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
17041 if( rhsstrptr == lhsstrptr )
17046 if( rhsstrptr !=
NULL && rhsstrptr != lhsstrptr )
17050 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
17064 if( *success && requsize > coefssize )
17067 coefssize = requsize;
17072 assert(!*success || requsize <= coefssize);
17082 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
17101 if( varssize < consdata->
nvars )
17102 (*success) =
FALSE;
17124 (*nvars) = consdata->nvars;
17168 cons = eventdata->cons;
17187 varpos = eventdata->varpos;
17193 val = consdata->vals[varpos];
17212 consdata->presolved =
FALSE;
17213 consdata->rangedrowpropagated = 0;
17221 if( consdata->maxactdeltavar ==
var )
17224 consdata->maxactdeltavar =
NULL;
17228 if( consdata->boundstightened > 0)
17230 switch( eventtype )
17234 consdata->boundstightened = 0;
17238 consdata->boundstightened = 0;
17260 delta =
REALABS(val) * domain;
17262 if( delta > consdata->maxactdelta )
17264 consdata->maxactdelta = delta;
17265 consdata->maxactdeltavar =
var;
17272 consdata->presolved =
FALSE;
17273 consdata->removedfixings =
FALSE;
17274 consdata->rangedrowpropagated = 0;
17277 if( consdata->maxactdeltavar ==
var )
17280 consdata->maxactdeltavar =
NULL;
17288 consdata->presolved =
FALSE;
17297 varpos = eventdata->varpos;
17303 val = consdata->vals[varpos];
17305 consdata->rangedrowpropagated = 0;
17320 consdata->indexsorted =
FALSE;
17322 consdata->coefsorted =
FALSE;
17348 consdata->varsdeleted =
TRUE;
17371 assert(bdchginfos !=
NULL || nbdchginfos == 0);
17387 for(
i = 0;
i < nbdchginfos; ++
i )
17408 if(
i == nbdchginfos )
17421 if( upgdcons !=
NULL )
17457 assert(upgdconsssize > 0);
17495 consdata->checkabsolute =
TRUE;
17523 eventExecLinear,
NULL) );
17527 conflictExecLinear,
NULL) );
17535 consEnfolpLinear, consEnfopsLinear, consCheckLinear, consLockLinear,
17577 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
17581 "maximal number of separation rounds per node (-1: unlimited)",
17585 "maximal number of separation rounds per node in the root node (-1: unlimited)",
17589 "maximal number of cuts separated per separation round",
17593 "maximal number of cuts separated per separation round in the root node",
17597 "should pairwise constraint comparison be performed in presolving?",
17601 "should hash table be used for detecting redundant constraints in advance",
17605 "number for minimal pairwise presolve comparisons",
17609 "minimal gain per minimal pairwise presolve comparisons to repeat pairwise comparison round",
17613 "maximal allowed relative gain in maximum norm for constraint aggregation (0.0: disable constraint aggregation)",
17617 "maximum activity delta to run easy propagation on linear constraint (faster, but numerically less stable)",
17621 "maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for separating knapsack cardinality cuts",
17625 "should all constraints be subject to cardinality cut generation instead of only the ones with non-zero dual value?",
17629 "should presolving search for aggregations in equations",
17633 "should presolving try to simplify inequalities",
17637 "should dual presolving steps be performed?",
17641 "should stuffing of singleton continuous variables be performed?",
17645 "should single variable stuffing be performed, which tries to fulfill constraints using the cheapest variable?",
17648 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
17652 "should the violation for a constraint with side 0.0 be checked relative to 1.0 (FALSE) or to the maximum absolute value in the activity (TRUE)?",
17656 "should presolving try to detect constraints parallel to the objective function defining an upper bound and prevent these constraints from entering the LP?",
17660 "should presolving try to detect constraints parallel to the objective function defining a lower bound and prevent these constraints from entering the LP?",
17664 "should presolving try to detect subsets of constraints parallel to the objective function?",
17668 "should presolving and propagation try to improve bounds, detect infeasibility, and extract sub-constraints from ranged rows and equations?",
17672 "should presolving and propagation extract sub-constraints from ranged rows and equations?",
17676 "maximum depth to apply ranged row propagation",
17680 "frequency for applying ranged row propagation",
17684 "should multi-aggregations only be performed if the constraint can be removed afterwards?",
17688 "maximum coefficient dynamism (ie. maxabsval / minabsval) for primal multiaggregation",
17692 "maximum coefficient dynamism (ie. maxabsval / minabsval) for dual multiaggregation",
17696 "should Cliques be extracted?",
17707 const char* conshdlrname
17722 if( conshdlr ==
NULL )
17798 if( conshdlr ==
NULL )
17812 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
17838 if( requiredsize > nconsvars )
17845 assert(requiredsize == nconsvars);
17852 SCIPerrorMessage(
"while creating constraint <%s> inactive variables lead to an infinite constant\n", name);
17889 if( check || enforce )
17892 for(n = consdata->nvars - 1; n >= 0; --n )
17898 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
17899 local, modifiable, dynamic, removable, stickingatnode) );
17980 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
17988 if( sourcecoefs !=
NULL )
17995 for( v = 0; v <
nvars; ++v )
18008 if( requiredsize >
nvars )
18019 for( v = 0; v <
nvars; ++v )
18029 for( v = 0; v <
nvars && success; ++v )
18051 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
18085 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
18116 if( requiredsize > nconsvars )
18123 assert(requiredsize == nconsvars);
18128 lhs = consdata->lhs;
18129 rhs = consdata->rhs;
18135 if( constant < 0.0 )
18208 for( v = nconsvars - 1; v >= 0; --v )
18262 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
18269 vars = consdata->vars;
18342 return consdata->lhs;
18366 return consdata->rhs;
18429 return consdata->nvars;
18453 return consdata->vars;
18477 return consdata->vals;
18506 if( consdata->row !=
NULL )
18534 if( consdata->row !=
NULL )
18562 if( consdata->row !=
NULL )
18590 if( consdata->row !=
NULL )
18619 return consdata->row;
18717 if( consdata->upgraded )
18721 if( consdata->row !=
NULL )
18725 SCIPerrorMessage(
"cannot upgrade linear constraint that is already stored as row in the LP\n");
18777 for(
i = 0;
i < consdata->nvars; ++
i )
18779 var = consdata->vars[
i];
18780 val = consdata->vals[
i];
18853 poscoeffsum += val;
18855 negcoeffsum += val;
18862 SCIPdebugMsg(
scip,
"upgrading linear constraint <%s> (%d upgrade methods):\n",
18864 SCIPdebugMsg(
scip,
" +bin=%d -bin=%d +int=%d -int=%d +impl=%d -impl=%d +cont=%d -cont=%d +1=%d -1=%d +I=%d -I=%d +F=%d -F=%d possum=%.15g negsum=%.15g integral=%u\n",
18865 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposcont, nnegcont,
18866 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18867 poscoeffsum, negcoeffsum, integral);
18870 for(
i = 0;
i < conshdlrdata->nlinconsupgrades && *upgdcons ==
NULL; ++
i )
18872 if( conshdlrdata->linconsupgrades[
i]->active )
18874 SCIP_CALL( conshdlrdata->linconsupgrades[
i]->linconsupgd(
scip, cons, consdata->nvars,
18875 consdata->vars, consdata->vals, consdata->lhs, consdata->rhs,
18876 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposimplbin, nnegimplbin, nposcont, nnegcont,
18877 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18878 poscoeffsum, negcoeffsum, integral,
18884 if( *upgdcons !=
NULL )
18909 if( conshdlr ==
NULL )
18913 *infeasible =
FALSE;
18919 for(
i = nconss - 1;
i >= 0; --
i )
#define DEFAULT_DUALPRESOLVING
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define DEFAULT_PRESOLPAIRWISE
#define CONSHDLR_SEPAPRIORITY
#define DEFAULT_PRESOLUSEHASHING
#define CONSHDLR_PROPFREQ
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
#define CONFLICTHDLR_PRIORITY
#define CONFLICTHDLR_NAME
#define CONFLICTHDLR_DESC
struct InferInfo INFERINFO
#define DEFAULT_MAXROUNDSROOT
#define DEFAULT_MAXSEPACUTSROOT
#define DEFAULT_MAXSEPACUTS
#define DEFAULT_TIGHTENBOUNDSFREQ
#define DEFAULT_MAXROUNDS
static int getInferInt(PROPRULE proprule, int pos)
#define DEFAULT_DETECTCUTOFFBOUND
#define DEFAULT_MAXCARDBOUNDDIST
#define DEFAULT_SIMPLIFYINEQUALITIES
#define DEFAULT_DETECTLOWERBOUND
Constraint handler for knapsack constraints of the form , x binary and .
#define MAX_CLIQUE_NONZEROS_PER_CONS
static SCIP_RETCODE addCoef(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
#define DEFAULT_AGGREGATEVARIABLES
static SCIP_RETCODE consdataPrint(SCIP *scip, SCIP_CONSDATA *consdata, FILE *file)
#define DEFAULT_NMINCOMPARISONS
#define DEFAULT_MULTAGGRREMOVE
#define DEFAULT_EXTRACTCLIQUES
static void permSortConsdata(SCIP_CONSDATA *consdata, int *perm, int nvars)
static void consdataRecomputeMaxActivityDelta(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE checkCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checklprows, SCIP_Bool checkrelmaxabs, SCIP_Bool *violated)
static SCIP_RETCODE addRelaxation(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff)
static void consdataGetReliableResidualActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *cancelvar, SCIP_Real *resactivity, SCIP_Bool isminresact, SCIP_Bool useglobalbounds)
static SCIP_RETCODE convertEquality(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars, int *ndelconss, int *nchgvartypes)
static SCIP_Bool checkEqualObjective(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real *scale, SCIP_Real *offset)
static SCIP_RETCODE conshdlrdataIncludeUpgrade(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_LINCONSUPGRADE *linconsupgrade)
static SCIP_RETCODE extractCliques(SCIP *scip, SCIP_CONS *cons, SCIP_Real maxeasyactivitydelta, SCIP_Bool sortvars, int *nfixedvars, int *nchgbds, SCIP_Bool *cutoff)
static SCIP_RETCODE createRow(SCIP *scip, SCIP_CONS *cons)
static int getVarWeight(SCIP_VAR *var)
static SCIP_RETCODE convertBinaryEquality(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *naggrvars, int *ndelconss)
static void consdataRecomputeMinactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE addConflictFixedVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, SCIP_BDCHGIDX *bdchgidx, int inferpos)
static SCIP_RETCODE tightenVarLb(SCIP *scip, SCIP_CONS *cons, int pos, PROPRULE proprule, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force)
static SCIP_RETCODE fullDualPresolve(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool *cutoff, int *nchgbds, int *nchgvartypes)
static SCIP_RETCODE convertLongEquality(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS *cons, SCIP_Bool *cutoff, int *naggrvars, int *ndelconss, int *nchgvartypes)
static SCIP_Real consdataComputePseudoActivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE conshdlrdataEnsureLinconsupgradesSize(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, int num)
static SCIP_RETCODE retrieveParallelConstraints(SCIP_HASHTABLE *hashtable, SCIP_CONS **querycons, SCIP_CONS **parallelconss, int *nparallelconss)
static void conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
static void calculateMinvalAndMaxval(SCIP *scip, SCIP_Real side, SCIP_Real val, SCIP_Real minresactivity, SCIP_Real maxresactivity, SCIP_Real *minval, SCIP_Real *maxval)
static SCIP_RETCODE lockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
static void consdataRecomputeGlbMinactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static void consdataUpdateActivitiesUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub, SCIP_Real val, SCIP_Bool checkreliability)
static SCIP_RETCODE tightenSides(SCIP *scip, SCIP_CONS *cons, int *nchgsides, SCIP_Bool *infeasible)
static void consdataUpdateActivitiesGlbLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real val, SCIP_Bool checkreliability)
static void consdataUpdateActivitiesLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real val, SCIP_Bool checkreliability)
static SCIP_Bool conshdlrdataHasUpgrade(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_DECL_LINCONSUPGD((*linconsupgd)), const char *conshdlrname)
static SCIP_RETCODE chgCoefPos(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Real newval)
static void consdataRecomputeMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE linconsupgradeCreate(SCIP *scip, SCIP_LINCONSUPGRADE **linconsupgrade, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority)
#define DEFAULT_MAXAGGRNORMSCALE
static SCIP_RETCODE performVarDeletions(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
#define checkMaxActivityDelta(scip, consdata)
static SCIP_Bool isFiniteNonnegativeIntegral(SCIP *scip, SCIP_Real x)
#define DEFAULT_SINGLETONSTUFFING
static void consdataUpdateSignatures(SCIP_CONSDATA *consdata, int pos)
#define DEFAULT_MAXEASYACTIVITYDELTA
static SCIP_RETCODE scaleCons(SCIP *scip, SCIP_CONS *cons, SCIP_Real scalar)
static int inferInfoGetPos(INFERINFO inferinfo)
static SCIP_RETCODE detectRedundantConstraints(SCIP *scip, BMS_BLKMEM *blkmem, SCIP_CONS **conss, int nconss, int *firstchange, SCIP_Bool *cutoff, int *ndelconss, int *nchgsides)
#define DEFAULT_CHECKRELMAXABS
#define DEFAULT_MAXDUALMULTAGGRQUOT
static void linconsupgradeFree(SCIP *scip, SCIP_LINCONSUPGRADE **linconsupgrade)
static SCIP_RETCODE aggregateConstraints(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, int *commonidx0, int *commonidx1, int *diffidx0minus1, int *diffidx1minus0, int nvarscommon, int commonidxweight, int diffidx0minus1weight, int diffidx1minus0weight, SCIP_Real maxaggrnormscale, int *nchgcoefs, SCIP_Bool *aggregated, SCIP_Bool *infeasible)
static SCIP_RETCODE analyzeConflict(SCIP *scip, SCIP_CONS *cons, SCIP_Bool reasonisrhs)
static SCIP_RETCODE rangedRowPropagation(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *nchgbds, int *naddconss)
static INFERINFO intToInferInfo(int i)
static SCIP_RETCODE mergeMultiples(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_SOL *sol, SCIP_Bool separatecards, SCIP_Bool separateall, int *ncuts, SCIP_Bool *cutoff)
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
static void consdataGetActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Real *maxactivity, SCIP_Bool *ismintight, SCIP_Bool *ismaxtight, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static void consdataCheckNonbinvar(SCIP_CONSDATA *consdata)
static SCIP_RETCODE chgLhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
#define DEFAULT_MAXMULTAGGRQUOT
static void consdataUpdateActivitiesGlbUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldub, SCIP_Real newub, SCIP_Real val, SCIP_Bool checkreliability)
static SCIP_RETCODE consCatchEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos)
static void consdataCalcMinAbsval(SCIP_CONSDATA *consdata)
static SCIP_RETCODE addConflictBounds(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, SCIP_BDCHGIDX *bdchgidx, int inferpos, SCIP_Bool reasonisrhs)
#define MAXCONSPRESOLROUNDS
static SCIP_RETCODE consdataEnsureVarsSize(SCIP *scip, SCIP_CONSDATA *consdata, int num)
#define NONLINCONSUPGD_PRIORITY
static SCIP_RETCODE tightenBounds(SCIP *scip, SCIP_CONS *cons, SCIP_Real maxeasyactivitydelta, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds)
static void consdataCalcMaxAbsval(SCIP_CONSDATA *consdata)
#define DEFAULT_RANGEDROWPROPAGATION
static SCIP_RETCODE consDropAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_Real consdataGetActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol)
static SCIP_RETCODE consdataTightenCoefs(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides)
static SCIP_RETCODE normalizeCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
static SCIP_RETCODE presolStuffing(SCIP *scip, SCIP_CONS *cons, SCIP_Bool singletonstuffing, SCIP_Bool singlevarstuffing, SCIP_Bool *cutoff, int *nfixedvars, int *nchgbds)
static SCIP_RETCODE unlockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
static void consdataCalcSignatures(SCIP_CONSDATA *consdata)
static SCIP_RETCODE addConflictReasonVars(SCIP *scip, SCIP_VAR **vars, int nvars, SCIP_VAR *var, SCIP_Real bound)
#define DEFAULT_RANGEDROWFREQ
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool tightenbounds, SCIP_Bool rangedrowpropagation, SCIP_Real maxeasyactivitydelta, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds)
static SCIP_RETCODE updateCutoffbound(SCIP *scip, SCIP_CONS *cons, SCIP_Real primalbound)
static void consdataUpdateDelCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability)
#define DEFAULT_RANGEDROWARTCONS
static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, int pos)
#define MAXSCALEDCOEFINTEGER
static void consdataUpdateAddCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability)
static void getMinActivity(SCIP *scip, SCIP_CONSDATA *consdata, int posinf, int neginf, int poshuge, int neghuge, SCIP_Real delta, SCIP_Bool global, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Bool *istight, SCIP_Bool *issettoinfinity)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_RETCODE chgRhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
static SCIP_RETCODE tightenVarBoundsEasy(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force)
static void consdataUpdateActivities(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_Real val, SCIP_BOUNDTYPE boundtype, SCIP_Bool global, SCIP_Bool checkreliability)
static unsigned int getParallelConsKey(SCIP_CONS *cons)
static SCIP_RETCODE fixVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars)
#define DEFAULT_DETECTPARTIALOBJECTIVE
static SCIP_RETCODE enforceConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
static void consdataGetActivityResiduals(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool goodrelax, SCIP_Real *minresactivity, SCIP_Real *maxresactivity, SCIP_Bool *ismintight, SCIP_Bool *ismaxtight, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_Real consdataGetMaxAbsval(SCIP_CONSDATA *consdata)
static SCIP_RETCODE addNlrow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE consPrintConsSol(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, FILE *file)
static void getMaxActivity(SCIP *scip, SCIP_CONSDATA *consdata, int posinf, int neginf, int poshuge, int neghuge, SCIP_Real delta, SCIP_Bool global, SCIP_Bool goodrelax, SCIP_Real *maxactivity, SCIP_Bool *istight, SCIP_Bool *issettoinfinity)
static void getNewSidesAfterAggregation(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *slackvar, SCIP_Real slackcoef, SCIP_Real *newlhs, SCIP_Real *newrhs)
static SCIP_RETCODE convertUnaryEquality(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *ndelconss)
static void consdataUpdateChgCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldval, SCIP_Real newval, SCIP_Bool checkreliability)
static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr)
static void consdataRecomputeGlbMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
static void consdataCalcActivities(SCIP *scip, SCIP_CONSDATA *consdata)
static void consdataGetGlbActivityResiduals(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool goodrelax, SCIP_Real *minresactivity, SCIP_Real *maxresactivity, SCIP_Bool *ismintight, SCIP_Bool *ismaxtight, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_RETCODE tightenVarUb(SCIP *scip, SCIP_CONS *cons, int pos, PROPRULE proprule, SCIP_Real newub, SCIP_Real oldub, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force)
static int getInferInt(PROPRULE proprule, int pos)
static int inferInfoGetProprule(INFERINFO inferinfo)
static SCIP_RETCODE dualPresolve(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars, int *ndelconss, int *nchgvartypes)
#define DEFAULT_MINGAINPERNMINCOMP
static SCIP_Real consdataGetFeasibility(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol)
static SCIP_RETCODE rangedRowSimplify(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides)
static SCIP_RETCODE aggregateVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars)
static void consdataInvalidateActivities(SCIP_CONSDATA *consdata)
#define DEFAULT_RANGEDROWMAXDEPTH
static SCIP_RETCODE analyzeConflictRangedRow(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **vars, int nvars, SCIP_VAR *var, SCIP_Real bound)
static SCIP_RETCODE consDropEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos)
static SCIP_RETCODE tightenVarBounds(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force)
static SCIP_Real consdataGetMinAbsval(SCIP_CONSDATA *consdata)
static SCIP_Bool consdataIsResidualIntegral(SCIP *scip, SCIP_CONSDATA *consdata, int pos, SCIP_Real val)
static int inferInfoToInt(INFERINFO inferinfo)
static SCIP_RETCODE preprocessConstraintPairs(SCIP *scip, SCIP_CONS **conss, int firstchange, int chkind, SCIP_Real maxaggrnormscale, SCIP_Bool *cutoff, int *ndelconss, int *nchgsides, int *nchgcoefs)
static SCIP_RETCODE consdataSort(SCIP *scip, SCIP_CONSDATA *consdata)
#define DEFAULT_SINGLEVARSTUFFING
static SCIP_RETCODE checkParallelObjective(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE simplifyInequalities(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides, SCIP_Bool *infeasible)
static SCIP_RETCODE consCatchAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, INFERINFO inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
static SCIP_Bool isRangedRow(SCIP *scip, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_RETCODE checkPartialObjective(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata)
static void consdataGetGlbActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *glbminactivity, SCIP_Real *glbmaxactivity, SCIP_Bool *ismintight, SCIP_Bool *ismaxtight, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_Bool canTightenBounds(SCIP_CONS *cons)
#define DEFAULT_SEPARATEALL
static void findOperators(const char *str, char **firstoperator, char **secondoperator, SCIP_Bool *success)
static INFERINFO getInferInfo(PROPRULE proprule, int pos)
Constraint handler for linear constraints in their most general form, .
constraint handler for nonlinear constraints specified by algebraic expressions
defines macros for basic operations in double-double arithmetic giving roughly twice the precision of...
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define QUAD_ASSIGN_Q(a, b)
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugAddSolVal(scip, var, val)
#define SCIP_MAXTREEDEPTH
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPcreateRowLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetDualsolLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
#define SCIP_DECL_NONLINCONSUPGD(x)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPupgradeConsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **upgdcons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgRhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
SCIP_RETCODE SCIPcleanupConssLinear(SCIP *scip, SCIP_Bool onlychecked, SCIP_Bool *infeasible, int *ndelconss)
SCIP_RETCODE SCIPincludeConsUpgradeNonlinear(SCIP *scip, SCIP_DECL_NONLINCONSUPGD((*nlconsupgd)), int priority, SCIP_Bool active, const char *conshdlrname)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_ROW * SCIPgetRowLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPseparateRelaxedKnapsack(SCIP *scip, SCIP_CONS *cons, SCIP_SEPA *sepa, int nknapvars, SCIP_VAR **knapvars, SCIP_Real *knapvals, SCIP_Real valscale, SCIP_Real rhs, SCIP_SOL *sol, SCIP_Bool *cutoff, int *ncuts)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetDualfarkasLinear(SCIP *scip, SCIP_CONS *cons)
#define SCIP_DECL_LINCONSUPGD(x)
SCIP_RETCODE SCIPcopyConsLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_Real *sourcecoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, 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_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_Real SCIPgetActivityLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
SCIP_Real SCIPgetFeasibilityLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
SCIP_RETCODE SCIPclassifyConstraintTypesLinear(SCIP *scip, SCIP_LINCONSSTATS *linconsstats)
struct SCIP_LinConsUpgrade SCIP_LINCONSUPGRADE
SCIP_RETCODE SCIPchgLhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPchgCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPdelCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
SCIP_RETCODE SCIPincludeConshdlrLinear(SCIP *scip)
SCIP_RETCODE SCIPconvertCutsToConss(SCIP *scip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, int *ncutsadded)
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 SCIPisPresolveFinished(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
int SCIPgetNObjVars(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddConsUpgrade(SCIP *scip, SCIP_CONS *oldcons, SCIP_CONS **newcons)
int SCIPgetNContVars(SCIP *scip)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
SCIP_RETCODE SCIPaddObjoffset(SCIP *scip, SCIP_Real addval)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNConss(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
#define SCIPhashFour(a, b, c, d)
SCIP_RETCODE SCIPhashtableSafeInsert(SCIP_HASHTABLE *hashtable, void *element)
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)
void SCIPhashtablePrintStatistics(SCIP_HASHTABLE *hashtable, SCIP_MESSAGEHDLR *messagehdlr)
SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
#define SCIPhashSignature64(a)
SCIP_RETCODE SCIPupdateLocalLowerbound(SCIP *scip, SCIP_Real newbound)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLocalLowerbound(SCIP *scip)
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS **cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConsLocal(SCIP *scip, SCIP_CONS *cons, SCIP_NODE *validnode)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
#define SCIPdebugMsgPrint
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2)
SCIP_Longint SCIPcalcSmaComMul(SCIP_Longint val1, SCIP_Longint val2)
SCIP_Real SCIPselectSimpleValue(SCIP_Real lb, SCIP_Real ub, SCIP_Longint maxdnom)
SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *numerator, SCIP_Longint *denominator)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
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 SCIPgetIntParam(SCIP *scip, const char *name, int *value)
void SCIPswapPointers(void **pointer1, void **pointer2)
int SCIPgetNLPBranchCands(SCIP *scip)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetCheckConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
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 SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
int SCIPconshdlrGetPropFreq(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrDelvars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
int SCIPconsGetPos(SCIP_CONS *cons)
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_RETCODE SCIPsetConsSeparated(SCIP *scip, SCIP_CONS *cons, SCIP_Bool separate)
SCIP_Bool SCIPconsIsMarkedPropagate(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)
int SCIPconsGetNLocksPos(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConsInitial(SCIP *scip, SCIP_CONS *cons, SCIP_Bool initial)
SCIP_RETCODE SCIPsetConsEnforced(SCIP *scip, SCIP_CONS *cons, SCIP_Bool enforce)
SCIP_Bool SCIPconsIsLockedType(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_RETCODE SCIPunmarkConsPropagate(SCIP *scip, 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)
int SCIPconsGetNLocksNeg(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocked(SCIP_CONS *cons)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPmarkConsPropagate(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPupdateConsFlags(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPsetConsPropagated(SCIP *scip, SCIP_CONS *cons, SCIP_Bool propagate)
SCIP_RETCODE SCIPsetConsChecked(SCIP *scip, SCIP_CONS *cons, SCIP_Bool check)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPincConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_Real SCIPeventGetOldbound(SCIP_EVENT *event)
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_IMPLINTTYPE SCIPeventGetOldImpltype(SCIP_EVENT *event)
SCIP_Real SCIPeventGetNewbound(SCIP_EVENT *event)
SCIP_VARTYPE SCIPeventGetOldtype(SCIP_EVENT *event)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetConstantExprSum(SCIP_EXPR *expr)
SCIP_VAR * SCIPgetVarExprVar(SCIP_EXPR *expr)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_RETCODE SCIPdelNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_Bool SCIPnlrowIsInNLP(SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
SCIP_Bool SCIPinProbing(SCIP *scip)
void SCIPlinConsStatsIncTypeCount(SCIP_LINCONSSTATS *linconsstats, SCIP_LINCONSTYPE linconstype, int increment)
void SCIPlinConsStatsReset(SCIP_LINCONSSTATS *linconsstats)
SCIP_Bool SCIProwIsModifiable(SCIP_ROW *row)
SCIP_RETCODE SCIPchgRowLhs(SCIP *scip, SCIP_ROW *row, SCIP_Real lhs)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetDualfarkas(SCIP_ROW *row)
SCIP_RETCODE SCIPchgRowRhs(SCIP *scip, SCIP_ROW *row, SCIP_Real rhs)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
void SCIPupdateSolLPConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
SCIP_RETCODE SCIPupdateCutoffbound(SCIP *scip, SCIP_Real cutoffbound)
int SCIPgetNSepaRounds(SCIP *scip)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip)
SCIP_Bool SCIPisUbBetter(SCIP *scip, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisSumRelLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisSumRelEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLbBetter(SCIP *scip, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Real SCIPfeasCeil(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 SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisHugeValue(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 SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Real SCIPgetHugeValue(SCIP *scip)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisSumRelGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisScalingIntegral(SCIP *scip, SCIP_Real val, SCIP_Real scalar)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPcutoffbounddelta(SCIP *scip)
SCIP_Bool SCIPisUpdateUnreliable(SCIP *scip, SCIP_Real newvalue, SCIP_Real oldvalue)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisSumGT(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_Bool SCIPinRepropagation(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_Bool SCIPvarIsInitial(SCIP_VAR *var)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_Bool SCIPvarIsDeleted(SCIP_VAR *var)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_Real SCIPvarGetMultaggrConstant(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_Bool SCIPdoNotAggr(SCIP *scip)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Bool SCIPdoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
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_RETCODE SCIPinferVarUbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Bool SCIPvarIsNonimpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarImplType(SCIP *scip, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
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 SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_RETCODE SCIPcreateVarImpl(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_IMPLINTTYPE impltype, 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_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPmultiaggregateVar(SCIP *scip, SCIP_VAR *var, int naggvars, SCIP_VAR **aggvars, SCIP_Real *scalars, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
SCIP_VAR * SCIPbdchginfoGetVar(SCIP_BDCHGINFO *bdchginfo)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Real SCIPvarGetBestBoundLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPparseVarsLinearsum(SCIP *scip, const char *str, SCIP_VAR **vars, SCIP_Real *vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize)
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPflattenVarAggregationGraph(SCIP *scip, SCIP_VAR *var)
SCIP_VAR ** SCIPvarGetMultaggrVars(SCIP_VAR *var)
int SCIPvarGetMultaggrNVars(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarImplication(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_Bool SCIPvarIsRemovable(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
SCIP_Bool SCIPvarIsRelaxationOnly(SCIP_VAR *var)
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 SCIPinferVarLbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_IMPLINTTYPE SCIPvarGetImplType(SCIP_VAR *var)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
SCIP_RETCODE SCIPwriteVarsLinearsum(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool type)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
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 SCIPallowStrongDualReds(SCIP *scip)
SCIP_RETCODE SCIPinferVarFixCons(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Real * SCIPvarGetMultaggrScalars(SCIP_VAR *var)
void SCIPsortDownRealPtr(SCIP_Real *realarray, void **ptrarray, int len)
void SCIPsortRealInt(SCIP_Real *realarray, int *intarray, int len)
void SCIPsort(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPskipSpace(char **s)
SCIP_RETCODE SCIPgetSymActiveVariables(SCIP *scip, SYM_SYMTYPE symtype, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
SCIP_RETCODE SCIPextendPermsymDetectionGraphLinear(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_CONS *cons, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *success)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
static const SCIP_Real scalars[]
static const char * paramname[]
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
public methods for conflict analysis handlers
public methods for managing constraints
public methods for managing events
public functions to work with algebraic expressions
public methods for LP management
public methods for message output
#define SCIPstatisticMessage
#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 branching rule plugins and branching
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for cuts and aggregation rows
public methods for event handler plugins and event handlers
public methods for the LP relaxation, rows and columns
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 the probing mode
public methods for solutions
public methods for querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
SCIP_DECL_LINCONSUPGD((*linconsupgd))
structs for symmetry computations
methods for dealing with symmetry detection graphs
struct SCIP_Conflicthdlr SCIP_CONFLICTHDLR
#define SCIP_DECL_CONFLICTEXEC(x)
@ SCIP_CONFTYPE_PROPAGATION
#define SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(x)
#define SCIP_DECL_CONSGETPERMSYMGRAPH(x)
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSEXIT(x)
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSINITSOL(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
struct SYM_Graph SYM_GRAPH
#define SCIP_DECL_CONSENFORELAX(x)
struct SCIP_LinConsStats SCIP_LINCONSSTATS
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
@ SCIP_LINCONSTYPE_BINPACKING
@ SCIP_LINCONSTYPE_VARBOUND
@ SCIP_LINCONSTYPE_INVKNAPSACK
@ SCIP_LINCONSTYPE_PRECEDENCE
@ SCIP_LINCONSTYPE_AGGREGATION
@ SCIP_LINCONSTYPE_MIXEDBINARY
@ SCIP_LINCONSTYPE_SINGLETON
@ SCIP_LINCONSTYPE_SETCOVERING
@ SCIP_LINCONSTYPE_EQKNAPSACK
@ SCIP_LINCONSTYPE_KNAPSACK
@ SCIP_LINCONSTYPE_SETPARTITION
@ SCIP_LINCONSTYPE_INTKNAPSACK
@ SCIP_LINCONSTYPE_SETPACKING
@ SCIP_LINCONSTYPE_GENERAL
@ SCIP_LINCONSTYPE_CARDINALITY
#define SCIP_DECL_CONSACTIVE(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSINITLP(x)
#define SCIP_DECL_CONSEXITPRE(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
#define SCIP_DECL_CONSINIT(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
#define SCIP_DECL_CONSDELVARS(x)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
#define SCIP_EVENTTYPE_BOUNDCHANGED
#define SCIP_EVENTTYPE_VARUNLOCKED
#define SCIP_EVENTTYPE_TYPECHANGED
#define SCIP_EVENTTYPE_GUBCHANGED
#define SCIP_EVENTTYPE_GBDCHANGED
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_UBTIGHTENED
#define SCIP_EVENTTYPE_VARFIXED
#define SCIP_EVENTTYPE_VARDELETED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_GLBCHANGED
#define SCIP_EVENTTYPE_BOUNDRELAXED
#define SCIP_EVENTTYPE_LBCHANGED
#define SCIP_EVENTTYPE_UBCHANGED
#define SCIP_EVENTTYPE_IMPLTYPECHANGED
#define SCIP_EVENTTYPE_DISABLED
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
#define SCIP_EVENTTYPE_LBTIGHTENED
struct SCIP_Expr SCIP_EXPR
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_HashMap SCIP_HASHMAP
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_SORTINDCOMP(x)
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
struct SCIP_HashTable SCIP_HASHTABLE
struct SCIP_NlRow SCIP_NLROW
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_EXITPRESOLVE
@ SCIP_STAGE_TRANSFORMING
enum SYM_Symtype SYM_SYMTYPE
#define SCIP_PRESOLTIMING_EXHAUSTIVE
enum SCIP_ImplintType SCIP_IMPLINTTYPE
@ SCIP_IMPLINTTYPE_STRONG
struct SCIP_BdChgIdx SCIP_BDCHGIDX
#define SCIP_DEPRECATED_VARTYPE_IMPLINT
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_ORIGINAL
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
enum SCIP_LockType SCIP_LOCKTYPE
enum SCIP_Vartype SCIP_VARTYPE
enum SCIP_Varstatus SCIP_VARSTATUS