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;
5804 for( v = consdata->nvars - 1; v >= 0; --v )
5822 lhs = consdata->lhs - fixedact;
5823 rhs = consdata->rhs - fixedact;
5824 nunfixedvars = consdata->nvars - nfixedconsvars;
5866 absval =
REALABS(consdata->vals[v]);
5868 if( absminbincoef > absval )
5869 absminbincoef = absval;
5873 possiblegcd =
FALSE;
5874 infcheckvars[ninfcheckvars] = consdata->vars[v];
5875 infcheckvals[ninfcheckvars] = consdata->vals[v];
5891 if( v == consdata->nvars )
5895 if( ncontvars + 2 > nunfixedvars )
5908 for( ; v < consdata->nvars; ++v )
5917 absval =
REALABS(consdata->vals[v]);
5919 if( absminbincoef > absval )
5920 absminbincoef = absval;
5930 possiblegcd =
FALSE;
5931 infcheckvars[ninfcheckvars] = consdata->vars[v];
5932 infcheckvals[ninfcheckvars] = consdata->vals[v];
5948 infcheckvars[ninfcheckvars] = consdata->vars[v];
5949 infcheckvals[ninfcheckvars] = consdata->vals[v];
5964 if( ninfcheckvars == 0 )
5969 minactinfvarsinvalid =
FALSE;
5970 maxactinfvarsinvalid =
FALSE;
5971 maxactinfvars = 0.0;
5972 minactinfvars = 0.0;
5975 for( v = ninfcheckvars - 1; v >= 0; --v )
5982 if( infcheckvals[v] < 0.0 )
5983 maxactinfvarsinvalid =
TRUE;
5985 minactinfvarsinvalid =
TRUE;
5989 if( infcheckvals[v] < 0.0 )
5990 maxactinfvars += infcheckvals[v] * lb;
5992 minactinfvars += infcheckvals[v] * lb;
5997 if( infcheckvals[v] > 0.0 )
5998 maxactinfvarsinvalid =
TRUE;
6000 minactinfvarsinvalid =
TRUE;
6004 if( infcheckvals[v] > 0.0 )
6005 maxactinfvars += infcheckvals[v] * ub;
6007 minactinfvars += infcheckvals[v] * ub;
6012 minactinfvarsinvalid =
TRUE;
6014 maxactinfvarsinvalid =
TRUE;
6016 if( minactinfvarsinvalid || maxactinfvarsinvalid )
6019 assert(!minactinfvarsinvalid && !maxactinfvarsinvalid);
6021 SCIPdebugMsg(
scip,
"minactinfvarsinvalid = %u, minactinfvars = %g, maxactinfvarsinvalid = %u, maxactinfvars = %g, gcd = %lld, ninfcheckvars = %d, ncontvars = %d\n",
6022 minactinfvarsinvalid, minactinfvars, maxactinfvarsinvalid, maxactinfvars, gcd, ninfcheckvars, ncontvars);
6047 else if( ncontvars == 0 )
6054 v = ninfcheckvars - 1;
6058 for( ; v >= 0 && gcdinfvars >= 2; --v )
6066 SCIPdebugMsg(
scip,
"gcdinfvars =%lld, possiblegcd = %u\n", gcdinfvars, possiblegcd);
6069 if( gcdinfvars >= 1 )
6082 value2 = value + gcd * (
SCIPceil(
scip, (lhs - value) / gcd));
6103 value += gcdinfvars;
6105 assert(nsols < 2 || minvalue <= maxvalue);
6118 value2 = value + gcd * (
SCIPfloor(
scip, (rhs - value) / gcd));
6129 assert(maxvalue > minvalue);
6132 value -= gcdinfvars;
6134 assert(maxvalue > secondsolval);
6137 SCIPdebugMsg(
scip,
"here nsols %s %d, minsolvalue = %g, maxsolvalue = %g, ninfcheckvars = %d, nunfixedvars = %d\n",
6138 nsols > 2 ?
">=" :
"=", nsols, minvalue, maxvalue, ninfcheckvars, nunfixedvars);
6143 SCIPdebugMsg(
scip,
"gcdinfvars = %lld, gcd = %lld, correctedlhs = %g, correctedrhs = %g\n",
6144 gcdinfvars, gcd, lhs, rhs);
6155 else if( nsols == 1 )
6157 assert(minvalue == maxvalue);
6160 if( ninfcheckvars == 1 )
6166 SCIPdebugMsg(
scip,
"fixing single variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6187 if( ninfcheckvars == nunfixedvars - 1 )
6194 assert(ninfcheckvars > 0);
6197 for( v = 0; v < consdata->nvars - 1; ++v )
6201 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6207 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6209 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6214 assert(consdata->vars[v2] == infcheckvars[w2]);
6217 assert(w2 == ninfcheckvars);
6223 if( consdata->vals[v] < 0 )
6232 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6245 consdata->vars[v],
bound) );
6261 assert(v == consdata->nvars - 1);
6264 if( consdata->vals[v] < 0 )
6273 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6286 consdata->vars[v],
bound) );
6301 ++conshdlrdata->naddconss;
6306 maxvalue, maxvalue,
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE) );
6323 if( ninfcheckvars == 1 )
6331 if( infcheckvals[0] < 0 )
6333 newlb = maxvalue/infcheckvals[0];
6334 newub = minvalue/infcheckvals[0];
6338 newlb = minvalue/infcheckvals[0];
6339 newub = maxvalue/infcheckvals[0];
6346 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6367 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6386 else if( ninfcheckvars == nunfixedvars - 1 )
6394 assert(ninfcheckvars > 0);
6395 assert(minvalue < maxvalue);
6398 for( v = 0; v < consdata->nvars - 1; ++v )
6402 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6408 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6410 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6415 assert(consdata->vars[v2] == infcheckvars[w2]);
6418 assert(w2 == ninfcheckvars);
6424 if( consdata->vals[v] < 0 )
6426 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6427 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6431 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6432 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6439 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6451 consdata->vars[v], newlb) );
6461 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6473 consdata->vars[v], newub) );
6490 assert(v == consdata->nvars - 1);
6493 if( consdata->vals[v] < 0 )
6495 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6496 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6500 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6501 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6508 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6529 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6558 assert(maxvalue > minvalue);
6574 ++conshdlrdata->naddconss;
6593 else if( addartconss && ncontvars < ninfcheckvars )
6600 for( v = 0; v < consdata->nvars; ++v )
6612 if( consdata->vals[v] > 0.0 )
6613 maxact += consdata->vals[v];
6615 minact += consdata->vals[v];
6623 if( consdata->vals[v] > 0.0 )
6669 newlhs = lhs - maxact;
6670 newrhs = rhs - minact;
6675 ++conshdlrdata->naddconss;
6739 var = consdata->vars[pos];
6745 val = consdata->vals[pos];
6746 lhs = consdata->lhs;
6747 rhs = consdata->rhs;
6749 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
6769 newub = (rhs - minresactivity)/val;
6778 if( activityunreliable )
6781 newub = (rhs - minresactivity)/val;
6787 if( !activityunreliable )
6790 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
6793 &infeasible, &tightened) );
6796 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6811 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6823 newlb = (lhs - maxresactivity)/val;
6831 newlb = (lhs - maxresactivity)/val;
6840 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6843 &infeasible, &tightened) );
6846 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6860 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6876 newlb = (rhs - minresactivity)/val;
6883 if( activityunreliable )
6886 newlb = (rhs - minresactivity)/val;
6893 if( !activityunreliable )
6896 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6899 &infeasible, &tightened) );
6902 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6916 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6928 newub = (lhs - maxresactivity)/val;
6936 newub = (lhs - maxresactivity)/val;
6945 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
6948 &infeasible, &tightened) );
6951 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6965 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6975#define MAXTIGHTENROUNDS 10
6989 unsigned int tightenmode;
6995 int oldnchgbdstotal;
7027 nvars = consdata->nvars;
7037 if( !force && (consdata->boundstightened >= tightenmode) )
7044 assert(consdata->coefsorted);
7072 &isminsettoinfinity, &ismaxsettoinfinity);
7085 easycase =
SCIPisLT(
scip, consdata->maxactdelta, maxeasyactivitydelta);
7092 oldnchgbdstotal = *nchgbds;
7095 for( nrounds = 0; (force || consdata->boundstightened < tightenmode) && nrounds <
MAXTIGHTENROUNDS; ++nrounds )
7104 assert(consdata->coefsorted);
7108 consdata->boundstightened = (
unsigned int)tightenmode;
7114 while( v <
nvars && v != lastchange && !(*
cutoff) )
7116 oldnchgbds = *nchgbds;
7128 if( *nchgbds > oldnchgbds )
7133 else if( consdata->coefsorted && v < consdata->nbinvars - 1
7135 v = consdata->nbinvars;
7142 *nchgbds - oldnchgbdstotal, nrounds);
7143 oldnchgbdstotal += oldnchgbds;
7148 if( force &&
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
7186 if( consdata->row !=
NULL )
7198 SCIPdebugMsg(
scip,
" consdata activity=%.15g (lhs=%.15g, rhs=%.15g, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
7199 activity, consdata->lhs, consdata->rhs, (
void*)consdata->row, checklprows,
7204 lhsviol = consdata->lhs - activity;
7205 rhsviol = activity - consdata->rhs;
7209 if( (lhsviol > 0) && (lhsviol > rhsviol) )
7214 else if( rhsviol > 0 )
7239 if( !checkrelmaxabs )
7263 for( v = 0; v < consdata->nvars; ++v )
7265 if( consdata->vals !=
NULL )
7267 coef = consdata->vals[v];
7273 absval =
REALABS( coef * solval );
7274 maxabs =
MAX( maxabs, absval );
7281 if( (consdata->lhs - activity) <= (1e-15 * maxabs) )
7283 SCIPdebugMsg(
scip,
" lhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7284 consdata->lhs - activity, maxabs);
7298 SCIPdebugMsg(
scip,
" lhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7299 consdata->lhs - activity, maxabs);
7335 if( (activity - consdata->rhs) <= (1e-15 * maxabs) )
7337 SCIPdebugMsg(
scip,
" rhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7338 activity - consdata->rhs, maxabs);
7352 SCIPdebugMsg(
scip,
" rhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7353 activity - consdata->rhs, maxabs);
7387 else if( consdata->checkabsolute &&
7455 if( consdata->row ==
NULL )
7472 if( consdata->nvars == 0 )
7510 if( consdata->nlrow ==
NULL )
7512 assert(consdata->lhs <= consdata->rhs);
7569 if( !separateall &&
sol ==
NULL )
7582 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7590 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7600 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7605 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7610 if( *ncuts > oldncuts )
7650 if( consdata->eventdata ==
NULL )
7682 oldnchgbds = *nchgbds;
7686 if( *nchgbds > oldnchgbds )
7693 if( rangedrowpropagation && tightenbounds && !(*
cutoff) )
7710 if( nfixedvars > 0 )
7711 *nchgbds += 2 * nfixedvars;
7718 &isminsettoinfinity, &ismaxsettoinfinity);
7722 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7723 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7733 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7734 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7744 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7745 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7748 if( consdata->nvars > 0 )
7790 for( v = 0; v < consdata->nvars; ++v )
7793 var = consdata->vars[v];
7805 SCIPdebugMsg(
scip,
"converting variable <%s> with fixed bounds [%.15g,%.15g] into fixed variable fixed at %.15g\n",
7829 assert(consdata->removedfixings);
7834#define MAX_CLIQUE_NONZEROS_PER_CONS 1000000
7926 int cliquenonzerosadded;
7943 if( consdata->nvars < 2 )
7952 if( !consdata->implsadded )
7970 nvars = consdata->nvars;
7971 vars = consdata->vars;
7972 vals = consdata->vals;
7975 if( !consdata->validactivities )
7977 assert(consdata->validactivities);
7981 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
7982 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
7983 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
7984 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
7985 finiteminact = (finitenegminact && finiteposminact);
7986 finitemaxact = (finitenegmaxact && finiteposmaxact);
7988 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
7993 int oldnchgbds = *nchgbds;
7999 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8002 assert(consdata->validglbminact);
8005 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8008 assert(consdata->validglbmaxact);
8010 assert(consdata->validglbminact || consdata->validglbmaxact);
8015 for( v =
nvars - 1; v >= 0; --v )
8023 if( value > maxabscontrib )
8025 maxabscontrib = value;
8036 if( value > maxabscontrib )
8038 maxabscontrib = value;
8049 if( !
SCIPisEQ(
scip, maxabscontrib, 1.0) && !allbinary )
8055 if( finiterhs && finiteminact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbminactivity), consdata->rhs - maxabscontrib) )
8057 for( v =
nvars - 1; v >= 0; --v )
8069 *nchgbds += nbdchgs;
8076 *nchgbds += nbdchgs;
8096 if( finitelhs && finitemaxact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbmaxactivity), consdata->lhs - maxabscontrib) )
8098 for( v =
nvars - 1; v >= 0; --v )
8110 *nchgbds += nbdchgs;
8117 *nchgbds += nbdchgs;
8136 SCIPdebugMsg(
scip,
"extracted %d implications from constraint %s which led to %d bound changes, %scutoff detetcted\n", nimpls,
SCIPconsGetName(cons), *nchgbds - oldnchgbds, *
cutoff ?
"" :
"no ");
8142 if( *nchgbds - oldnchgbds > 0 )
8163 consdata->implsadded =
TRUE;
8167 if( consdata->cliquesadded )
8170 consdata->cliquesadded =
TRUE;
8171 cliquenonzerosadded = 0;
8177 nvars = consdata->nvars;
8178 vars = consdata->vars;
8179 vals = consdata->vals;
8184 if( !consdata->validactivities )
8186 assert(consdata->validactivities);
8190 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
8191 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
8192 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
8193 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
8194 finiteminact = (finitenegminact && finiteposminact);
8195 finitemaxact = (finitenegmaxact && finiteposmaxact);
8200 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8204 int nposbinvars = 0;
8205 int nnegbinvars = 0;
8206 int allonebinary = 0;
8221 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8222 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8240 if( allonebinary <
nvars && (nposbinvars >= 2 || nnegbinvars >= 2) )
8243 int oldnchgbds = *nchgbds;
8249 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8252 assert(consdata->validglbminact);
8255 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8258 assert(consdata->validglbmaxact);
8260 assert(consdata->validglbminact || consdata->validglbmaxact);
8266 if( finiterhs && finitenegminact && nposbinvars >= 2 )
8269 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8272#ifdef SCIP_DISABLED_CODE
8281 while( j < nposbinvars )
8295 *nchgbds += nbdchgs;
8297 cliquenonzerosadded += j;
8302 if( !stopped && !(*
cutoff) && j < nposbinvars )
8305 int lastfit = j - 2;
8312 while( lastfit >= 0 && j < nposbinvars )
8317 clqvars[lastfit + 1] = binvars[j];
8328 *nchgbds += nbdchgs;
8330 cliquenonzerosadded += (lastfit + 2);
8349 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8370 if( !consdata->validactivities )
8372 assert(consdata->validactivities);
8374 nvars = consdata->nvars;
8375 vars = consdata->vars;
8376 vals = consdata->vals;
8391 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8392 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8410 oldnchgbds = *nchgbds;
8414 if( !stopped && !(*
cutoff) && finitelhs && finiteposmaxact && nnegbinvars >= 2 )
8417 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8419 i = nposbinvars + nnegbinvars - 1;
8421#ifdef SCIP_DISABLED_CODE
8431 while( j >= nposbinvars )
8446 *nchgbds += nbdchgs;
8448 cliquenonzerosadded += (
i - j);
8453 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8456 int lastfit = jstart + 1;
8464 while( lastfit <= i && j >= nposbinvars )
8469 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8470 clqvars[lastfit - jstart - 2] = binvars[j];
8482 *nchgbds += nbdchgs;
8484 cliquenonzerosadded += (
i - lastfit + 2);
8503 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8524 if( !consdata->validactivities )
8526 assert(consdata->validactivities);
8528 nvars = consdata->nvars;
8529 vars = consdata->vars;
8530 vals = consdata->vals;
8545 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8546 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8564 oldnchgbds = *nchgbds;
8568 if( !(*
cutoff) && finiterhs && finiteminact && nnegbinvars >= 2 )
8577 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8579 i = nposbinvars + nnegbinvars - 1;
8582#ifdef SCIP_DISABLED_CODE
8592 while( j >= nposbinvars )
8607 *nchgbds += nbdchgs;
8609 cliquenonzerosadded += (
i - j);
8614 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8617 int lastfit = j + 1;
8625 while( lastfit <= i && j >= nposbinvars )
8630 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8631 clqvars[lastfit - jstart - 2] = binvars[j];
8643 *nchgbds += nbdchgs;
8645 cliquenonzerosadded += (
i - lastfit + 2);
8666 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8687 if( !consdata->validactivities )
8689 assert(consdata->validactivities);
8691 nvars = consdata->nvars;
8692 vars = consdata->vars;
8693 vals = consdata->vals;
8708 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8709 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8729 if( !stopped && !(*
cutoff) && finitelhs && finitemaxact && nposbinvars >= 2 )
8738 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8742#ifdef SCIP_DISABLED_CODE
8752 while( j < nposbinvars )
8766 *nchgbds += nbdchgs;
8768 cliquenonzerosadded += j;
8773 if( !stopped && !(*
cutoff) && j < nposbinvars )
8776 int lastfit = j - 2;
8783 while( lastfit >= 0 && j < nposbinvars )
8788 clqvars[lastfit + 1] = binvars[j];
8799 *nchgbds += nbdchgs;
8801 cliquenonzerosadded += lastfit + 2;
8848 if( lhsclique || rhsclique )
8853 SCIPdebugMsg(
scip,
"linear constraint <%s>: adding clique with %d vars (%d pos, %d neg)\n",
8858 values[
i] = (rhsclique == (vals[
i] > 0.0));
8865 *nchgbds += nbdchgs;
8897 *infeasible =
FALSE;
8907 for(
i = 0;
i < consdata->nvars && integral; ++
i )
8925 SCIPdebugMsg(
scip,
"rounding sides=[%.15g,%.15g] of linear constraint <%s> with integral coefficients and variables only "
8926 "is infeasible\n", consdata->lhs, consdata->rhs,
SCIPconsGetName(cons));
8932 SCIPdebugMsg(
scip,
"linear constraint <%s>: make sides integral: sides=[%.15g,%.15g]\n",
8940 if( !consdata->upgraded )
8948 if( !consdata->upgraded )
8951 SCIPdebugMsg(
scip,
"linear constraint <%s>: new integral sides: sides=[%.15g,%.15g]\n",
9038 &isminsettoinfinity, &ismaxsettoinfinity);
9044 minleftactivity = 0.0;
9045 maxleftactivity = 0.0;
9052 var = consdata->vars[
i];
9053 val = consdata->vals[
i];
9065 if( isvarrelevant[
i] )
9073 lval = consdata->lhs - minactivity;
9074 rval = maxactivity - consdata->rhs;
9077 if( consdata->nvars == 2 )
9080 otherval = consdata->vals[1-
i];
9084 lval = consdata->lhs - val*lb;
9090 rval = val*ub - consdata->rhs;
9095 newval =
MAX3(lval, rval, 0.0);
9099 newlhs = consdata->lhs - val * lb;
9100 newlhs += newval * lb;
9101 newrhs = consdata->rhs - val * ub;
9102 newrhs += newval * ub;
9106 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9108 maxactivity, consdata->lhs, consdata->rhs);
9124 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9129 consdata->lhs, newlhs);
9139 consdata->rhs, newrhs);
9156 minleftactivity += val * lb;
9166 maxleftactivity += val * ub;
9176 if( isvarrelevant[
i] )
9184 lval = minactivity - consdata->lhs;
9185 rval = consdata->rhs - maxactivity;
9188 if( consdata->nvars == 2 )
9191 otherval = consdata->vals[1-
i];
9195 lval = val*ub - consdata->lhs;
9201 rval = consdata->rhs - val*lb;
9206 newval =
MIN3(lval, rval, 0.0);
9210 newlhs = consdata->lhs - val * ub;
9211 newlhs += newval * ub;
9212 newrhs = consdata->rhs - val * lb;
9213 newrhs += newval * lb;
9217 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9219 maxactivity, consdata->lhs, consdata->rhs);
9235 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9240 consdata->lhs, newlhs);
9250 consdata->rhs, newrhs);
9267 minleftactivity += val * ub;
9277 maxleftactivity += val * lb;
9286 minleftactivity, consdata->rhs);
9288 maxleftactivity, consdata->lhs);
9315 aggrlhs = consdata->lhs - minactivity + minleftactivity;
9316 aggrrhs = consdata->rhs - maxactivity + maxleftactivity;
9336 if( !isvarrelevant[
i] )
9339 var = consdata->vars[
i];
9340 val = consdata->vals[
i];
9345 SCIPdebugMsg(
scip,
"val = %g\tlhs = %g\trhs = %g\n", val, consdata->lhs, consdata->rhs);
9346 SCIPdebugMsg(
scip,
"linear constraint <%s>: remove variable <%s> from constraint since it is redundant\n",
9352 minleftactivitypart = val * lb;
9353 maxleftactivitypart = val * ub;
9357 minleftactivitypart = val * ub;
9358 maxleftactivitypart = val * lb;
9362 isvarrelevant[
i] = isvarrelevant[consdata->nvars - 1];
9367 newlhs = consdata->lhs - minleftactivitypart;
9368 newrhs = consdata->rhs - maxleftactivitypart;
9373 consdata->lhs, newlhs);
9383 consdata->rhs, newrhs);
9427 assert(consdata->nvars == 1);
9431 var = consdata->vars[0];
9432 val = consdata->vals[0];
9452 if( !consdata->upgraded )
9481 assert(consdata->nvars == 2);
9484 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregate %.15g<%s> + %.15g<%s> == %.15g\n",
9486 consdata->vals[1],
SCIPvarGetName(consdata->vars[1]), consdata->rhs);
9490 consdata->rhs, &infeasible, &redundant, &aggregated) );
9509 if( !consdata->upgraded )
9539 if( slackcoef > 0.0 )
9544 *newrhs = consdata->rhs - slackcoef * slackvarlb;
9548 *newlhs = consdata->lhs - slackcoef * slackvarub;
9555 *newlhs = consdata->rhs - slackcoef * slackvarlb;
9559 *newrhs = consdata->lhs - slackcoef * slackvarub;
9599 int maxnlocksremove;
9617 assert(consdata->nvars > 2);
9627 lhs = consdata->lhs;
9628 rhs = consdata->rhs;
9630 if( consdata->nvars == 3 )
9635 maxnlocksremove = 3;
9637 else if( consdata->nvars == 4 )
9642 maxnlocksremove = 2;
9647 maxnlocksremove = 1;
9666 vars = consdata->vars;
9667 vals = consdata->vals;
9670 bestnlocks = INT_MAX;
9671 bestremovescons =
FALSE;
9672 bestslackdomrng = 0.0;
9673 coefszeroone =
TRUE;
9674 coefsintegral =
TRUE;
9675 varsintegral =
TRUE;
9684 for( v = 0; v < consdata->nvars; ++v )
9708 if( absval < minabsval )
9710 if( absval > maxabsval )
9715 if( maxabsval / minabsval > conshdlrdata->maxmultaggrquot )
9720 coefszeroone = coefszeroone &&
SCIPisEQ(
scip, absval, 1.0);
9751 if( nlocks > maxnlocksremove )
9755 if( (iscont || (coefsintegral && varsintegral &&
SCIPisEQ(
scip, absval, 1.0))) &&
9769 slackdomrng = (varub - varlb)*absval;
9775 better = (slacktype > bestslacktype) || (bestslackpos == -1);
9776 if( !better && slacktype == bestslacktype )
9778 better = (nlocks < bestnlocks);
9779 if( nlocks == bestnlocks && !bestremovescons )
9782 equal = !better &&
SCIPisGE(
scip, slackdomrng, bestslackdomrng);
9786 if( better || equal )
9800 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
9805 if( !ismintight || !ismaxtight )
9825 if( conshdlrdata->multaggrremove && !removescons )
9831 if( !removescons && nlocks > maxnlocksstay )
9837 if( !bestremovescons && removescons )
9844 bestslacktype = slacktype;
9845 bestnlocks = nlocks;
9846 bestslackdomrng = slackdomrng;
9847 bestremovescons = removescons;
9867 if( bestslackpos >= 0
9869 || (coefsintegral && varsintegral && nimplvars == 0)) )
9892 slackvar =
vars[bestslackpos];
9893 slackcoef = vals[bestslackpos];
9895 aggrconst = consdata->rhs/slackcoef;
9903 for( v = 0; v < consdata->nvars - 1; ++v )
9905 if( v == bestslackpos )
9907 aggrvars[v] =
vars[consdata->nvars - 1];
9908 scalars[v] = -consdata->vals[consdata->nvars - 1] / slackcoef;
9912 aggrvars[v] =
vars[v];
9913 scalars[v] = -consdata->vals[v] / slackcoef;
9917 SCIPdebugMsgPrint(
scip,
" %+.15g, bounds of <%s>: [%.15g,%.15g], nlocks=%d, maxnlocks=%d, removescons=%u\n",
9919 bestnlocks, bestremovescons ? maxnlocksremove : maxnlocksstay, bestremovescons);
9923 &infeasible, &aggregated) );
9953 if( bestremovescons )
9958 if( !consdata->upgraded )
9962 else if( ncontvars == 1 )
9966 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
9976 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting continuous variable <%s> to implied integral variable\n",
10000 absval =
REALABS(vals[contvarpos]);
10012#ifdef WITH_DEBUG_SOLUTION
10013 if( SCIPdebugIsMainscip(
scip) )
10022 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregating continuous variable <%s> to newly created implied integral variable <%s>, aggregation factor = %g\n",
10030 SCIPdebugMsg(
scip,
"infeasible aggregation of variable <%s> to implied integral variable <%s>, domain is empty\n",
10052 consdata->boundstightened = 0;
10053 consdata->rangedrowpropagated = 0;
10054 consdata->presolved =
FALSE;
10057 else if( ncontvars == 0 && nimplvars == 0 && nintvars == 1 && !coefszeroone )
10065 assert(0 <= intvarpos && intvarpos < consdata->
nvars);
10074 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting integer variable <%s> to implied integral variable\n",
10109 vars = consdata->vars;
10110 nvars = consdata->nvars;
10114 for( v = 0; v <
nvars; ++v )
10138 val = consdata->vals[v];
10145 (*scale) = val / -
objval;
10157 (*scale) = val /
objval;
10193 nvars = consdata->nvars;
10202 (
nvars == nobjvars && (!conshdlrdata->detectcutoffbound || !conshdlrdata->detectlowerbound)) )
10205 offset = consdata->rhs;
10215 vars = consdata->vars;
10220 SCIPdebugMsg(
scip,
"linear equality constraint <%s> == %g (offset %g) is a subset of the objective function\n",
10228 for( v = 0; v <
nvars; ++v )
10312 nvars = consdata->nvars;
10327 if( nobjvars == 0 )
10342 if( conshdlrdata->detectcutoffbound && rhsfinite )
10346 primalbound = (consdata->rhs - offset) / scale;
10348 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10354 if( conshdlrdata->detectlowerbound && lhsfinite )
10358 lowerbound = (consdata->lhs - offset) / scale;
10360 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10366 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !lhsfinite)) ||
10367 (conshdlrdata->detectlowerbound && !rhsfinite) )
10376 if( conshdlrdata->detectlowerbound && rhsfinite )
10380 lowerbound = (consdata->rhs - offset) / scale;
10382 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10388 if( conshdlrdata->detectcutoffbound && lhsfinite )
10392 primalbound = (consdata->lhs - offset) / scale;
10394 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10400 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !rhsfinite)) ||
10401 (conshdlrdata->detectlowerbound && !lhsfinite) )
10438 assert(consdata->removedfixings);
10445 if( consdata->nvars == 1 )
10450 else if( consdata->nvars == 2 )
10484 for( v = 0; v < consdata->nvars; ++v )
10514 *minval = -maxresactivity;
10516 *minval = (side - maxresactivity)/val;
10519 *maxval = -minresactivity;
10521 *maxval = (side - minresactivity)/val;
10526 *minval = minresactivity;
10528 *minval = (side - minresactivity)/val;
10531 *maxval = maxresactivity;
10533 *maxval = (side - maxresactivity)/val;
10602 if( consdata->nvars <= 2 )
10603 maxotherlocks = INT_MAX;
10604 else if( consdata->nvars == 3 )
10606 else if( consdata->nvars == 4 )
10612 if( lhsexists && rhsexists && maxotherlocks < INT_MAX )
10617 for(
i = 0;
i < consdata->nvars && bestisint; ++
i )
10629 val = consdata->vals[
i];
10633 if( absval < minabsval )
10634 minabsval = absval;
10635 if( absval > maxabsval )
10636 maxabsval = absval;
10639 if( maxabsval / minabsval > conshdlrdata->maxdualmultaggrquot )
10642 var = consdata->vars[
i];
10646 if( bestpos >= 0 && isint )
10658 val = consdata->vals[
i];
10695 if( agglhs || aggrhs )
10708 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
10715 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
10730 recalculated =
FALSE;
10731 oldmaxresactivity = maxresactivity;
10732 oldminresactivity = minresactivity;
10738 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10739 isminsettoinfinity =
TRUE;
10746 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10747 ismaxsettoinfinity =
TRUE;
10790 recalculated =
FALSE;
10791 oldmaxresactivity = maxresactivity;
10792 oldminresactivity = minresactivity;
10798 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10805 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10845 assert(!bestislhs || lhsexists);
10846 assert(bestislhs || rhsexists);
10848 bestvar = consdata->vars[bestpos];
10849 bestval = consdata->vals[bestpos];
10861 for( j = 0; j < consdata->nvars; ++j )
10865 aggrvars[naggrs] = consdata->vars[j];
10866 aggrcoefs[naggrs] = -consdata->vals[j]/consdata->vals[bestpos];
10873 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: too large aggregation coefficients\n");
10886 aggrcoefs[naggrs] =
SCIPfloor(
scip, aggrcoefs[naggrs]+0.5);
10893 aggrconst = (bestislhs ? consdata->lhs/bestval : consdata->rhs/bestval);
10896 assert(naggrs == consdata->nvars-1);
10905 aggregated =
FALSE;
10906 infeasible =
FALSE;
10919 for( j = 0; j < naggrs; ++j )
10929 assert(!infeasiblevartypechg);
10932 assert(!infeasiblevartypechg);
10955 if( !consdata->upgraded )
10970#define CONTWEIGHT 8
11051 lhs = consdata->lhs;
11052 vars = consdata->vars;
11053 vals = consdata->vals;
11054 nvars = consdata->nvars;
11063 for( v = 0; v <
nvars && noddvars < 3; ++v )
11078 if( noddvars == 0 )
11090 if( noddvars == 1 )
11094 SCIPdebugMsg(
scip,
"linear constraint <%s>: try fixing variable <%s> to <%g>\n",
11114 else if( noddvars == 2 )
11123 SCIPdebugMsg(
scip,
"linear constraint <%s>: try aggregation of variables <%s> and <%s>\n",
11127 lhsodd ? 1.0 : 0.0, &infeasible, &redundant, &aggregated) );
11168 while( success && consdata->nvars >= 1 );
11195 if( varcont1 != varcont2 )
11202 else if( varcont2 )
11205 value =
REALABS(consdata->vals[ind2]) -
REALABS(consdata->vals[ind1]);
11208 return (value > 0 ? +1 : (value < 0 ? -1 : 0));
11245 nvars = consdata->nvars;
11251 lhs = consdata->lhs;
11252 rhs = consdata->rhs;
11261 vals = consdata->vals;
11262 vars = consdata->vars;
11270 for( v =
nvars - 1; v >= 0; --v )
11276 secondminval = minval;
11279 else if( secondminval > vals[v] || secondminval ==
SCIP_INVALID )
11280 secondminval = vals[v];
11294 for( v =
nvars - 1; v >= 0; --v )
11298 (*nchgcoefs) +=
nvars;
11381 *infeasible =
FALSE;
11393 nvars = consdata->nvars;
11417 consdata->normalized =
FALSE;
11425 if( !consdata->normalized )
11428 lhs = consdata->lhs;
11429 rhs = consdata->rhs;
11444 if( haslhs && hasrhs )
11450 assert(haslhs != hasrhs);
11466 consdata->indexsorted =
FALSE;
11467 consdata->coefsorted =
FALSE;
11469 vars = consdata->vars;
11470 vals = consdata->vals;
11493 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
11496 if( isminsettoinfinity || ismaxsettoinfinity )
11501 assert(maxact > minact);
11507 side = haslhs ? lhs : rhs;
11508 minactsub = minact;
11509 maxactsub = maxact;
11578 for(
w = 0;
w < v; ++
w )
11586 maxactsub -= ub * vals[
w];
11587 minactsub -= lb * vals[
w];
11588 assert(maxactsub > minactsub);
11619 maxactsub -= ub * vals[0];
11620 minactsub -= lb * vals[0];
11624 maxactsub -= lb * vals[0];
11625 minactsub -= ub * vals[0];
11627 assert(maxactsub > minactsub);
11632 allcoefintegral =
TRUE;
11635 for( ; v <
nvars - 1; ++v )
11642 allcoefintegral =
FALSE;
11661 maxactsub -= ub * vals[v];
11662 minactsub -= lb * vals[v];
11666 maxactsub -= lb * vals[v];
11667 minactsub -= ub * vals[v];
11684 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11685 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11688 if( offsetv == -1 && (rredundant || lredundant) )
11714 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",
11715 v,
nvars, minactsub, maxactsub, redundant, hasrhs, siderest, gcd, offsetv);
11722 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11723 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11726 if( v <
nvars && numericsok && (redundant || (offsetv == -1 && (rredundant || lredundant))) )
11747 tmpmaxactsub += ub * vals[
w];
11748 tmpminactsub += lb * vals[
w];
11752 tmpmaxactsub += lb * vals[
w];
11753 tmpminactsub += ub * vals[
w];
11755 assert(tmpmaxactsub >= tmpminactsub);
11775 (haslhs && tmpmaxactsub < siderest &&
SCIPisFeasGE(
scip, tmpminactsub, siderest - gcd)));
11778 SCIPdebugMsg(
scip,
"removing %d last variables from constraint <%s>, because they never change anything on the feasibility of this constraint\n",
11786 (*nchgcoefs) += (
nvars - v);
11794 assert(vals == consdata->vals);
11809 rhs = consdata->rhs;
11816 lhs = consdata->lhs;
11827 nvars = consdata->nvars;
11830 allcoefintegral =
TRUE;
11834 for(
w = offsetv + 1;
w <
nvars; ++
w )
11843 if( offsetv >= 0 && gcd == 1 )
11853 for( v =
nvars - 1; v > offsetv; --v )
11861 allcoefintegral =
FALSE;
11887 if( candpos == -1 )
11897 assert(v > offsetv || candpos > offsetv);
11903 candpos =
nvars - 1;
11906 if( gcd > 1 && allcoefintegral && !redundant )
11909 allcoefintegral =
FALSE;
11913 if( offsetv >= 0 && gcd > 1 && allcoefintegral )
11924 for(
w = offsetv + 1;
w <
nvars; ++
w )
11942 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
11949 if( restcoef > rest )
11950 newcoef = vals[candpos] - restcoef + gcd;
11952 newcoef = vals[candpos] - restcoef;
11957 if( rest == 0 || restcoef < rest )
11958 newcoef = vals[candpos] - restcoef;
11960 newcoef = vals[candpos] - restcoef + gcd;
11970 notchangable =
TRUE;
12011 for(
w = offsetv;
w >= 0; --
w )
12017 (*nchgcoefs) += (offsetv + 1);
12020 if( !notchangable )
12024 assert(vals == consdata->vals);
12030 nvars = consdata->nvars;
12035 lhs = consdata->lhs;
12036 rhs = consdata->rhs;
12050 allcoefintegral =
TRUE;
12052 for( v =
nvars - 1; v >= 0; --v )
12057 allcoefintegral =
FALSE;
12074 if( allcoefintegral )
12085 for( v =
nvars - 1; v >= 0; --v )
12121 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the right hand side down\n");
12126 for( v =
nvars - 1; v >= 0; --v )
12163 if( allcoefintegral )
12178 for( v =
nvars - 1; v >= 0; --v )
12226 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the left hand side down\n");
12231 for( v =
nvars - 1; v >= 0; --v )
12269 assert(vals == consdata->vals);
12274 rhs = consdata->rhs;
12275 lhs = consdata->lhs;
12282 nvars = consdata->nvars;
12286 allcoefintegral =
TRUE;
12289 for( v =
nvars - 1; v >= 0; --v )
12296 if( !allcoefintegral )
12316 SCIPdebug( oldnchgcoefs = *nchgcoefs; )
12317 SCIPdebug( oldnchgsides = *nchgsides; )
12332 for( v =
nvars - 1; v >= 0; --v )
12339 if( foundbin == -1 )
12367 foundbin =
nvars - 1;
12370 if( gcd == 1 || foundbin == -1)
12373 assert((onlybin && gcd == -1) || (!onlybin && gcd > 1));
12381 for( v = foundbin; v >= 0; --v )
12410 if( candpos == -1 )
12418 if( onlybin && v == foundbin - 1 )
12419 candpos2 = foundbin;
12424 if( onlybin && candpos == v + 1 && candpos2 == v + 2 )
12429 candpos = candpos2;
12472 if( vals[candpos] < 0 )
12474 restcoef = ((
SCIP_Longint)(vals[candpos] - feastol)) % gcd;
12479 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
12493 if( restcoef > rest )
12494 newcoef = vals[candpos] - restcoef + gcd;
12496 newcoef = vals[candpos] - restcoef;
12508 if( rest == 0 || restcoef < rest )
12509 newcoef = vals[candpos] - restcoef;
12511 newcoef = vals[candpos] - restcoef + gcd;
12515 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));
12532 assert(vals == consdata->vals);
12539 rhs = consdata->rhs;
12540 lhs = consdata->lhs;
12544 nvars = consdata->nvars;
12546 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));
12548 while(
nvars >= 2 );
12568 int* diffidx0minus1,
12569 int* diffidx1minus0,
12571 int commonidxweight,
12572 int diffidx0minus1weight,
12573 int diffidx1minus0weight,
12604 assert(nvarscommon >= 1);
12605 assert(commonidxweight >= nvarscommon);
12612 *infeasible =
FALSE;
12619 assert(consdata0->nvars >= 1);
12621 assert(diffidx0minus1weight >= consdata0->nvars - nvarscommon);
12626 assert(consdata1->nvars >= 1);
12628 assert(diffidx1minus0weight >= consdata1->nvars - nvarscommon);
12630 *aggregated =
FALSE;
12636 bestvarweight = commonidxweight + diffidx0minus1weight;
12637 bestnvars = consdata0->nvars;
12639 bestscalarsum = 0.0;
12640 commonvarlindependent =
TRUE;
12641 for( v = 0; v < nvarscommon; ++v )
12643 assert(consdata0->vars[commonidx0[v]] == consdata1->vars[commonidx1[v]]);
12644 a = consdata1->vals[commonidx1[v]];
12645 b = -consdata0->vals[commonidx0[v]];
12651 varweight = diffidx0minus1weight + diffidx1minus0weight;
12652 nvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12654 betterscalarsum = (scalarsum < bestscalarsum);
12655 for(
i = 0;
i < nvarscommon
12656 && (varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum)); ++
i )
12658 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12665 if( varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum) )
12668 bestvarweight = varweight;
12670 bestscalarsum = scalarsum;
12677 if( commonvarlindependent && v > 0 )
12679 consdata1->vals[commonidx1[v]] * consdata0->vals[commonidx0[0]],
12680 consdata1->vals[commonidx1[0]] * consdata0->vals[commonidx0[v]]);
12697 if( consdata1->vals[commonidx1[bestv]] > 0.0 )
12699 a = consdata1->vals[commonidx1[bestv]];
12700 b = -consdata0->vals[commonidx0[bestv]];
12704 a = -consdata1->vals[commonidx1[bestv]];
12705 b = consdata0->vals[commonidx0[bestv]];
12714 assert(commonvarlindependent);
12715 if( consdata1->vals[commonidx1[0]] > 0.0 )
12717 a = consdata1->vals[commonidx1[0]];
12718 b = -consdata0->vals[commonidx0[0]];
12722 a = -consdata1->vals[commonidx1[0]];
12723 b = consdata0->vals[commonidx0[0]];
12744 SCIPdebug( bestvarweight = diffidx0minus1weight + diffidx1minus0weight; )
12745 bestnvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12748 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> := %.15g*<%s> + %.15g*<%s> -> nvars: %d -> %d, weight: %d -> %d\n",
12750 consdata0->nvars, bestnvars, commonidxweight + diffidx0minus1weight, bestvarweight);
12760 if( !commonvarlindependent )
12762 for(
i = 0;
i < nvarscommon; ++
i )
12764 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12765 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12767 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12770 assert(newnvars < bestnvars);
12771 newvars[newnvars] = consdata0->vars[commonidx0[
i]];
12772 newvals[newnvars] = aggrcoef;
12781 for(
i = 0;
i < nvarscommon; ++
i )
12783 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12784 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12786 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12793 for(
i = 0;
i < consdata0->nvars - nvarscommon; ++
i )
12795 assert(0 <= diffidx0minus1[
i] && diffidx0minus1[
i] < consdata0->nvars);
12797 aggrcoef =
a * consdata0->vals[diffidx0minus1[
i]];
12799 assert(newnvars < bestnvars);
12800 newvars[newnvars] = consdata0->vars[diffidx0minus1[
i]];
12801 newvals[newnvars] = aggrcoef;
12806 for(
i = 0;
i < consdata1->nvars - nvarscommon; ++
i )
12808 assert(0 <= diffidx1minus0[
i] && diffidx1minus0[
i] < consdata1->nvars);
12810 aggrcoef =
b * consdata1->vals[diffidx1minus0[
i]];
12812 assert(newnvars < bestnvars);
12813 newvars[newnvars] = consdata1->vars[diffidx1minus0[
i]];
12814 newvals[newnvars] = aggrcoef;
12817 assert(newnvars == bestnvars);
12825 newlhs =
a * consdata0->lhs +
b * consdata1->lhs;
12829 newrhs =
a * consdata0->rhs +
b * consdata1->rhs;
12842 newconsdata->upgraded = consdata0->upgraded;
12855 if( !consdata0->upgraded )
12856 (*nchgcoefs) += consdata0->nvars + consdata1->nvars - nvarscommon;
12857 *aggregated =
TRUE;
12901 assert(consdata1->indexsorted);
12902 assert(consdata2->indexsorted);
12912 if( consdata1->nvars != consdata2->nvars )
12916 for(
i = 0;
i < consdata1->nvars; ++
i )
12918 if( consdata1->vars[
i] != consdata2->vars[
i] )
12936 for(
i = 0;
i < consdata1->nvars; ++
i )
12938 SCIP_Real scale = consdata2->vals[
i] / consdata1->vals[
i];
12940 if( minscale > scale )
12948 if( maxscale < scale )
12978 assert(consdata->nvars > 0);
12980 assert(consdata->indexsorted);
12987 return SCIPhashFour(consdata->nvars, minidx, mididx, maxidx);
13005 return (((
unsigned int)consdata->upgraded)<<31) + (
unsigned int)
SCIPconsGetPos(cons);
13019 int* nparallelconss
13023 unsigned int querykey;
13025 *nparallelconss = 0;
13032 if( conskey < querykey )
13034 parallelconss[(*nparallelconss)++] = *querycons;
13035 *querycons = parallelcons;
13036 querykey = conskey;
13040 parallelconss[(*nparallelconss)++] = parallelcons;
13051 if( *querycons == parallelcons )
13087 int nparallelconss;
13100 hashtablesize = nconss;
13102 hashGetKeyLinearcons, hashKeyEqLinearcons, hashKeyValLinearcons, (
void*)
scip) );
13107 for(
c = 0;
c < nconss; ++
c )
13129 assert(consdata0->indexsorted);
13138 if( nparallelconss != 0 )
13148 lhs = consdata0->lhs;
13149 rhs = consdata0->rhs;
13151 for(
i = 0;
i < nparallelconss; ++
i )
13157 consdel = parallelconss[
i];
13171 assert(consdata0->nvars >= 1 && consdata0->nvars == consdatadel->nvars);
13173 assert(consdatadel->indexsorted);
13174 assert(consdata0->vars[0] == consdatadel->vars[0]);
13176 scale = consdata0->vals[0] / consdatadel->vals[0];
13184 assert(consdata0->validmaxabsval);
13185 assert(consdatadel->validmaxabsval);
13187 SCIP_Real scale0 = 1.0 / consdata0->maxabsval;
13190 for( k = 0; k < consdata0->nvars; ++k )
13192 assert(
SCIPisEQ(
scip, scale0 * consdata0->vals[k], scaledel * consdatadel->vals[k]));
13200 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with equal coefficients into single ranged row\n",
13206 lhs =
MAX(scale * consdatadel->lhs, lhs);
13209 rhs =
MIN(scale * consdatadel->rhs, rhs);
13214 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with negated coefficients into single ranged row\n",
13220 lhs =
MAX(scale * consdatadel->rhs, lhs);
13223 rhs =
MIN(scale * consdatadel->lhs, rhs);
13230 assert( ! consdata0->upgraded || consdatadel->upgraded );
13232 if( !consdatadel->upgraded )
13246 rhs = (lhs + rhs)/2;
13255 if( consdata0->changed &&
SCIPconsGetPos(cons0) < *firstchange )
13261#ifdef SCIP_MORE_DEBUG
13294 int* diffidx0minus1;
13295 int* diffidx1minus0;
13296 uint64_t possignature0;
13297 uint64_t negsignature0;
13300 int diffidx1minus0size;
13308 assert(firstchange <= chkind);
13315 cons0 = conss[chkind];
13322 assert(consdata0->nvars >= 1);
13323 cons0isequality =
SCIPisEQ(
scip, consdata0->lhs, consdata0->rhs);
13330 possignature0 = consdata0->possignature;
13331 negsignature0 = consdata0->negsignature;
13338 diffidx1minus0size = consdata0->nvars;
13340 cons0lhs = consdata0->lhs;
13341 cons0rhs = consdata0->rhs;
13342 cons0upgraded = consdata0->upgraded;
13345 cons0changed = consdata0->changed;
13346 consdata0->changed =
FALSE;
13347 for(
c = (cons0changed ? 0 : firstchange);
c < chkind && !(*cutoff) && conss[chkind] !=
NULL; ++
c )
13351 uint64_t possignature1;
13352 uint64_t negsignature1;
13364 int commonidxweight;
13365 int diffidx0minus1weight;
13366 int diffidx1minus0weight;
13370 assert(cons0lhs == consdata0->lhs);
13371 assert(cons0rhs == consdata0->rhs);
13372 assert(cons0upgraded == consdata0->upgraded);
13377 if( cons1 ==
NULL )
13391 if( !cons0changed && !consdata1->changed )
13396 if( cons0upgraded && consdata1->upgraded )
13399 assert(consdata1->nvars >= 1);
13406 possignature1 = consdata1->possignature;
13407 negsignature1 = consdata1->negsignature;
13410 coefsequal = (possignature0 == possignature1) && (negsignature0 == negsignature1);
13411 coefsnegated = (possignature0 == negsignature1) && (negsignature0 == possignature1);
13412 cons0dominateslhs =
SCIPisGE(
scip, cons0lhs, consdata1->lhs)
13413 && ((possignature0 | possignature1) == possignature1)
13414 && ((negsignature0 | negsignature1) == negsignature0);
13415 cons1dominateslhs =
SCIPisGE(
scip, consdata1->lhs, cons0lhs)
13416 && ((possignature0 | possignature1) == possignature0)
13417 && ((negsignature0 | negsignature1) == negsignature1);
13418 cons0dominatesrhs =
SCIPisLE(
scip, cons0rhs, consdata1->rhs)
13419 && ((possignature0 | possignature1) == possignature0)
13420 && ((negsignature0 | negsignature1) == negsignature1);
13421 cons1dominatesrhs =
SCIPisLE(
scip, consdata1->rhs, cons0rhs)
13422 && ((possignature0 | possignature1) == possignature1)
13423 && ((negsignature0 | negsignature1) == negsignature0);
13424 cons1isequality =
SCIPisEQ(
scip, consdata1->lhs, consdata1->rhs);
13425 tryaggregation = (cons0isequality || cons1isequality) && (maxaggrnormscale > 0.0);
13426 if( !cons0dominateslhs && !cons1dominateslhs && !cons0dominatesrhs && !cons1dominatesrhs
13427 && !coefsequal && !coefsnegated && !tryaggregation )
13431 if( tryaggregation && consdata1->nvars > diffidx1minus0size )
13434 diffidx1minus0size = consdata1->nvars;
13460 commonidxweight = 0;
13462 diffidx0minus1weight = 0;
13464 diffidx1minus0weight = 0;
13467 while( (v0 < consdata0->
nvars || v1 < consdata1->
nvars)
13468 && (cons0dominateslhs || cons1dominateslhs || cons0dominatesrhs || cons1dominatesrhs
13469 || coefsequal || coefsnegated || tryaggregation) )
13477 if( v0 < consdata0->
nvars && v1 < consdata1->
nvars )
13478 varcmp =
SCIPvarCompare(consdata0->vars[v0], consdata1->vars[v1]);
13479 else if( v0 < consdata0->
nvars )
13488 var = consdata0->vars[v0];
13489 val0 = consdata0->vals[v0];
13491 if( tryaggregation )
13493 diffidx0minus1[nvars0minus1] = v0;
13498 coefsequal =
FALSE;
13499 coefsnegated =
FALSE;
13504 var = consdata1->vars[v1];
13506 val1 = consdata1->vals[v1];
13507 if( tryaggregation )
13509 diffidx1minus0[nvars1minus0] = v1;
13514 coefsequal =
FALSE;
13515 coefsnegated =
FALSE;
13520 assert(consdata0->vars[v0] == consdata1->vars[v1]);
13521 var = consdata0->vars[v0];
13522 val0 = consdata0->vals[v0];
13523 val1 = consdata1->vals[v1];
13524 if( tryaggregation )
13526 commonidx0[nvarscommon] = v0;
13527 commonidx1[nvarscommon] = v1;
13533 coefsequal = coefsequal && (
SCIPisEQ(
scip, val0, val1));
13534 coefsnegated = coefsnegated && (
SCIPisEQ(
scip, val0, -val1));
13551 cons0dominatesrhs =
FALSE;
13552 cons1dominateslhs =
FALSE;
13556 cons0dominateslhs =
FALSE;
13557 cons1dominatesrhs =
FALSE;
13564 cons0dominateslhs =
FALSE;
13565 cons1dominatesrhs =
FALSE;
13569 cons0dominatesrhs =
FALSE;
13570 cons1dominateslhs =
FALSE;
13576 if( coefsequal || coefsnegated )
13591 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with %s coefficients into single ranged row\n",
13599 lhs =
MAX(consdata0->lhs, consdata1->lhs);
13600 rhs =
MIN(consdata0->rhs, consdata1->rhs);
13605 lhs =
MAX(consdata0->lhs, -consdata1->rhs);
13606 rhs =
MIN(consdata0->rhs, -consdata1->lhs);
13617 if( consdata0->upgraded )
13619 assert(!consdata1->upgraded);
13622 consdatastay = consdata1;
13626 consdatadel = consdata0;
13627 consinddel = chkind;
13633 consdatastay = consdata0;
13637 consdatadel = consdata1;
13644 if( !consdata0->upgraded )
13646 assert(consstay == cons0);
13647 cons0lhs = consdata0->lhs;
13648 cons0rhs = consdata0->rhs;
13654 assert( !consdatastay->upgraded );
13657 conss[consinddel] =
NULL;
13658 if( !consdatadel->upgraded )
13666 if( cons1dominateslhs && (!cons0isequality || cons1dominatesrhs ||
SCIPisInfinity(
scip, consdata0->rhs) ) )
13669 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13686 cons0lhs = consdata0->lhs;
13687 cons0isequality =
FALSE;
13688 if( !consdata0->upgraded )
13697 else if( cons0dominateslhs && (!cons1isequality || cons0dominatesrhs ||
SCIPisInfinity(
scip, consdata1->rhs)) )
13700 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13717 cons1isequality =
FALSE;
13718 if( !consdata1->upgraded )
13727 if( cons1dominatesrhs && (!cons0isequality || cons1dominateslhs ||
SCIPisInfinity(
scip, -consdata0->lhs)) )
13730 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13747 cons0rhs = consdata0->rhs;
13748 cons0isequality =
FALSE;
13749 if( !consdata0->upgraded )
13758 else if( cons0dominatesrhs && (!cons1isequality || cons0dominateslhs ||
SCIPisInfinity(
scip, -consdata1->lhs)) )
13761 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13778 cons1isequality =
FALSE;
13779 if( !consdata1->upgraded )
13795 conss[chkind] =
NULL;
13796 if( !consdata0->upgraded )
13811 if( !consdata1->upgraded )
13824 if( tryaggregation )
13828 assert(consdata0->nvars == nvarscommon + nvars0minus1);
13829 assert(consdata1->nvars == nvarscommon + nvars1minus0);
13831 aggregated =
FALSE;
13832 if( cons1isequality && !consdata0->upgraded && commonidxweight > diffidx1minus0weight )
13836 nvarscommon, commonidxweight, diffidx0minus1weight, diffidx1minus0weight, maxaggrnormscale,
13837 nchgcoefs, &aggregated,
cutoff) );
13847 conss[chkind] =
NULL;
13850 if( !aggregated && cons0isequality && !consdata1->upgraded && commonidxweight > diffidx0minus1weight )
13854 nvarscommon, commonidxweight, diffidx1minus0weight, diffidx0minus1weight, maxaggrnormscale,
13855 nchgcoefs, &aggregated,
cutoff) );
13930 if( singlevarstuffing )
13933 &isminsettoinfinity, &ismaxsettoinfinity);
13939 isminsettoinfinity =
FALSE;
13940 ismaxsettoinfinity =
FALSE;
13948 rhs = -consdata->lhs;
13950 maxactivity = -minactivity;
13951 ismaxsettoinfinity = isminsettoinfinity;
13956 rhs = consdata->rhs;
13960 nvars = consdata->nvars;
13961 vars = consdata->vars;
13962 vals = consdata->vals;
13965 if( singletonstuffing )
13967 for( v = 0; v <
nvars; ++v )
13983 assert(singletonstuffing);
13991 mincondactivity = 0.0;
13992 maxcondactivity = 0.0;
13994 for( v = 0; v <
nvars; ++v )
14000 val = factor * vals[v];
14017 maxcondactivity += val * lb;
14018 mincondactivity += val * lb;
14019 swapped[v] =
FALSE;
14020 ratios[nsingletons] =
obj / val;
14021 varpos[nsingletons] = v;
14036 maxcondactivity += val * ub;
14037 mincondactivity += val * ub;
14039 ratios[nsingletons] =
obj / val;
14040 varpos[nsingletons] = v;
14057 maxcondactivity += val * lb;
14058 mincondactivity += val * lb;
14075 maxcondactivity += val * ub;
14076 mincondactivity += val * ub;
14092 maxcondactivity += val * ub;
14093 mincondactivity += val * lb;
14097 maxcondactivity += val * lb;
14098 mincondactivity += val * ub;
14102 if( tryfixing && nsingletons > 0 && (
SCIPisGT(
scip, rhs, maxcondactivity) ||
SCIPisLE(
scip, rhs, mincondactivity)) )
14107 int oldnfixedvars = *nfixedvars;
14113 for( v = 0; v < nsingletons; ++v )
14117 val = factor * vals[idx];
14122 assert((val < 0) == swapped[idx]);
14137 delta = -(lb - ub) * val;
14139 delta = (ub - lb) * val;
14189 maxcondactivity += delta;
14190 mincondactivity += delta;
14194 if( *nfixedvars - oldnfixedvars > 0 )
14196 SCIPdebugMsg(
scip,
"### stuffing fixed %d variables\n", *nfixedvars - oldnfixedvars);
14235 if( singlevarstuffing && !ismaxsettoinfinity )
14240 int bestindex = -1;
14241 int bestuplocks = 0;
14242 int bestdownlocks = 1;
14245 SCIPdebug(
int oldnfixedvars = *nfixedvars; )
14246 SCIPdebug(
int oldnchgbds = *nchgbds; )
14249 for( v = 0; v <
nvars; ++v )
14253 val = factor * vals[v];
14281 if( ratio > bestratio || ( downlocks == 0 && ratio == bestratio && ( bestdownlocks > 0
14285 if( bestindex != -1 )
14288 if( bestuplocks > 1 )
14295 secondbestratio = bestratio;
14298 bestdownlocks = downlocks;
14299 bestuplocks = uplocks;
14306 if( bestdownlocks > 0 && bestuplocks > 1 )
14321 if( ratio > secondbestratio )
14323 secondbestratio = ratio;
14329 if( bestindex != -1 && bestdownlocks == 0 )
14336 val = factor * vals[bestindex];
14349 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * -val);
14354 bounddelta =
SCIPceil(
scip, (maxactivity - rhs)/-val);
14358 bounddelta = (maxactivity - rhs)/-val;
14360 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14386 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * val);
14395 bounddelta = (maxactivity - rhs)/val;
14397 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14426 for( v = 0; v <
nvars; ++v )
14434 SCIPdebugMsg(
scip,
"<= %g\n", factor > 0 ? consdata->rhs : -consdata->lhs);
14436 for( v = 0; v <
nvars; ++v )
14438 if( v == bestindex )
14441 if( factor * vals[v] < 0 )
14461 SCIPdebug(
SCIPdebugMsg(
scip,
"### new stuffing fixed %d vars, tightened %d bounds\n", *nfixedvars - oldnfixedvars, *nchgbds - oldnchgbds); )
14525 if( nbinvars ==
nvars )
14530 nintvars =
nvars - ncontvars;
14545 for( v = 0; v <
nvars; ++v )
14557 for( v = 0; v < ncontvars; v++ )
14564 var =
vars[v + nintvars - nbinvars];
14586 for(
c = 0;
c < nconss; ++
c )
14613 for(
i = 0;
i < consdata->nvars; ++
i )
14617 var = consdata->vars[
i];
14622 assert(0 <= contv && contv < ncontvars);
14623 isimplint[contv] =
FALSE;
14636 hasimpliedpotential =
FALSE;
14639 for(
i = 0;
i < consdata->nvars; ++
i )
14653 var = consdata->vars[
i];
14655 val = consdata->vals[
i];
14670 isminsettoinfinity =
TRUE;
14671 ismaxsettoinfinity =
TRUE;
14677 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
14683 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
14698 newredlb = redlb[arrayindex];
14699 newredub = redub[arrayindex];
14705 nlocksdown[arrayindex] += nlockspos;
14706 newredlb = (isminsettoinfinity ?
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14711 nlocksup[arrayindex] += nlockspos;
14712 newredub = (ismaxsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14720 nlocksup[arrayindex] += nlockspos;
14721 newredub = (isminsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14726 nlocksdown[arrayindex] += nlockspos;
14727 newredlb = (ismaxsettoinfinity ?
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14741 redlb[arrayindex] =
MAX(redlb[arrayindex], newredlb);
14742 redub[arrayindex] =
MIN(redub[arrayindex], newredub);
14749 assert(nconscontvars < ncontvars);
14751 conscontvars[nconscontvars] =
var;
14755 assert(0 <= contv && contv < ncontvars);
14756 hasimpliedpotential = hasimpliedpotential || isimplint[contv];
14761 if( hasimpliedpotential )
14763 if( nconscontvars > 1 || !integralcoefs )
14768 for(
i = 0;
i < nconscontvars;
i++ )
14772 assert(0 <= contv && contv < ncontvars);
14773 isimplint[contv] =
FALSE;
14787 assert(nconscontvars == 1);
14788 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
14789 var = consdata->vars[contvarpos];
14790 val = consdata->vals[contvarpos];
14792 assert(0 <= contv && contv < ncontvars);
14793 assert(isimplint[contv]);
14797 isimplint[contv] =
FALSE;
14803 if(
obj * val >= 0.0 && lhsexists )
14808 if(
obj * val <= 0.0 && rhsexists )
14820 for( v = 0; v <
nvars; ++v )
14850 SCIPdebugMsg(
scip,
"variable <%s> only locked down in linear constraints: dual presolve <%s>[%.15g,%.15g] <= %.15g\n",
14857 redub[v] =
MIN(redub[v], ub);
14879 SCIPdebugMsg(
scip,
"variable <%s> only locked up in linear constraints: dual presolve <%s>[%.15g,%.15g] >= %.15g\n",
14886 redlb[v] =
MAX(redlb[v], lb);
14895 for( v = nintvars - nbinvars; v <
nvars; ++v )
14906 assert(0 <= v - nintvars + nbinvars && v - nintvars + nbinvars < ncontvars);
14910 if( isimplint[v - nintvars + nbinvars]
14926 SCIPdebugMsg(
scip,
"dual presolve: declare continuous variable <%s>[%g,%g] implied integral\n",
14970 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
14972 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n",
sol ==
NULL ?
"LP" :
"relaxation");
14980 for(
c = 0;
c < nusefulconss; ++
c )
15046 nlocvars = consdata->nvars;
15051 for(
i = 0;
i < nlocvars; ++
i )
15053 vars[
i] = consdata->vars[
i];
15054 vals[
i] = consdata->vals[
i];
15058 lhs = consdata->lhs - constant;
15059 rhs = consdata->rhs - constant;
15069 for(
i = 0;
i < nlocvars; ++
i )
15077 cons, lhs, rhs, success) );
15142 conshdlrdata->naddconss = 0;
15145 for(
c = 0;
c < nconss; ++
c )
15170 for(
c = nconss - 1;
c >= 0; --
c )
15177 if( consdata->eventdata !=
NULL )
15251 for(
c = 0;
c < nconss;
c++ )
15270 rhs = consdata->rhs;
15271 lhs = consdata->lhs;
15275 for(
i = 0;
i < consdata->nvars;
i++ )
15281 if( consdata->nvars == 0 )
15301 if( consdata->nvars == 1 )
15311 if( consdata->nvars == 2 &&
SCIPisEQ(
scip, lhs, rhs) )
15321 if( consdata->nvars == 2 )
15325 &&
SCIPisEQ(
scip, consdata->vals[0], -consdata->vals[1]) )
15355 scale =
REALABS(consdata->vals[0]);
15358 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15365 if( consdata->vals[
i] < 0.0 )
15373 b = rhs/scale + nnegbinvars;
15394 b = rhs/scale + nnegbinvars;
15419 b = lhs/scale + nnegbinvars;
15449 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15457 b -= consdata->vals[
i];
15477 for(
i = 0;
i < consdata->nvars && !matched;
i++ )
15482 SCIPdebugMsg(
scip,
"classified as %s: ", matched ?
"BINPACKING" :
"KNAPSACK");
15505 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15532 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15565#ifdef SCIP_STATISTIC
15576#ifdef SCIP_STATISTIC
15584 for(
c = 0;
c < nconss; ++
c )
15594 if( consdata->upgraded )
15601 if(
SCIPisLT(
scip, consdata->maxactdelta, conshdlrdata->maxeasyactivitydelta) )
15606 SCIPstatisticMessage(
"below threshold: %d / %d ratio= %g\n", ngoodconss, nallconss, (100.0 * ngoodconss / nallconss));
15610 for(
c = 0;
c < nconss; ++
c )
15620 if( consdata->upgraded )
15645 for(
c = 0;
c < nconss; ++
c )
15663 for(
c = 0;
c < nconss; ++
c )
15670 if( consdata->row !=
NULL )
15675 if( consdata->nlrow !=
NULL )
15691 if( ncutsadded > 0 )
15694 "(restart) converted %d cuts from the global cut pool into linear constraints\n", ncutsadded);
15745 if( consdata->eventdata !=
NULL )
15773 if( (*consdata)->eventdata !=
NULL )
15814 sourcedata->rhs) );
15821 for(n = targetdata->nvars - 1; n >= 0; --n )
15846 *infeasible =
FALSE;
15848 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
15890 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15891 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15895 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15901 maxbound = glblowerbound + conshdlrdata->maxcardbounddist * (cutoffbound - glblowerbound);
15902 separatecards =
SCIPisLE(
scip, loclowerbound, maxbound);
15910 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15919 else if( ncuts > 0 )
15956 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15957 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15961 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15968 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15977 else if( ncuts > 0 )
16022 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16027 if( objinfeasible )
16029 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
16037 for(
c = 0;
c < nconss && !violated; ++
c )
16071 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16120 int naddedconss = 0;
16136 tightenbounds =
TRUE;
16141 int tightenboundsfreq;
16146 tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
16147 tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
16148 && ((tightenboundsfreq == 0 &&
depth == 0) || (tightenboundsfreq >= 1 && (
depth % tightenboundsfreq == 0)));
16151 rangedrowpropagation = conshdlrdata->rangedrowpropagation;
16153 rangedrowpropagation = rangedrowpropagation && (
depth <= conshdlrdata->rangedrowmaxdepth);
16154 rangedrowfreq = propfreq * conshdlrdata->rangedrowfreq;
16155 rangedrowpropagation = rangedrowpropagation && (conshdlrdata->rangedrowfreq >= 0)
16156 && ((rangedrowfreq == 0 &&
depth == 0) || (rangedrowfreq >= 1 && (
depth % rangedrowfreq == 0)));
16163 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
16167 conshdlrdata->maxeasyactivitydelta, conshdlrdata->sortvars, &
cutoff, &nchgbds, &naddedconss) );
16174 else if( nchgbds > 0 )
16176 else if( naddedconss > 0 )
16185#define MAXCONSPRESOLROUNDS 10
16208 int firstupgradetry;
16220 oldnfixedvars = *nfixedvars;
16221 oldnaggrvars = *naggrvars;
16222 oldnchgbds = *nchgbds;
16223 oldndelconss = *ndelconss;
16224 oldnupgdconss = *nupgdconss;
16225 oldnchgcoefs = *nchgcoefs;
16226 oldnchgsides = *nchgsides;
16233 firstchange = INT_MAX;
16234 firstupgradetry = INT_MAX;
16240 infeasible =
FALSE;
16250 consdata->lhs = consdata->rhs;
16254 if( consdata->eventdata ==
NULL )
16277 assert(consdata->removedfixings);
16284 if( firstchange == INT_MAX && consdata->changed )
16288 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16289 firstupgradetry =
c;
16292 if( consdata->presolved )
16310 consdata->presolved =
TRUE;
16327 SCIPdebugMsg(
scip,
" -> infeasibility detected during tightening sides\n");
16335 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16352 if( ( consdata->validmaxabsval && consdata->maxabsval >
MAXVALRECOMP )
16353 || ( consdata->validminabsval && consdata->minabsval <
MINVALRECOMP ) )
16361 &isminsettoinfinity, &ismaxsettoinfinity);
16366 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16367 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16373 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16374 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16378 if( !consdata->upgraded )
16384 SCIPdebugMsg(
scip,
"linear constraint <%s> left hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16385 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16387 if( !consdata->upgraded )
16392 SCIPdebugMsg(
scip,
"linear constraint <%s> right hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16393 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16395 if( !consdata->upgraded )
16400 if( consdata->nvars == 0 )
16404 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16410 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16415 if( !consdata->upgraded )
16425 if( conshdlrdata->simplifyinequalities )
16434 if( conshdlrdata->aggregatevariables )
16445 if( conshdlrdata->rangedrowpropagation )
16447 int lastnfixedvars;
16449 lastnfixedvars = *nfixedvars;
16454 if( lastnfixedvars < *nfixedvars )
16465 nfixedvars, nchgbds, &
cutoff) );
16472 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16478 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16483 if( !consdata->upgraded )
16508 if( firstchange == INT_MAX && consdata->changed )
16512 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16513 firstupgradetry =
c;
16521 conshdlrdata->singlevarstuffing, &
cutoff, nfixedvars, nchgbds) );
16524 if( consdata->nvars == 0 )
16528 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16534 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16539 if( !consdata->upgraded )
16552 assert(firstchange >= 0);
16554 if( firstchange < nconss && conshdlrdata->presolusehashing )
16558 ndelconss, nchgsides) );
16561 if( firstchange < nconss && conshdlrdata->presolpairwise )
16565 int firstchangenew;
16568 npaircomparisons = 0;
16569 oldndelconss = *ndelconss;
16570 oldnchgsides = *nchgsides;
16571 oldnchgcoefs = *nchgcoefs;
16577 firstchangenew = -1;
16578 for(
c = 0;
c < nconss; ++
c )
16581 if(
c == firstchange )
16582 firstchangenew = nusefulconss;
16588 usefulconss[nusefulconss] = conss[
c];
16591 firstchange = firstchangenew;
16592 assert(firstchangenew >= 0 && firstchangenew <= nusefulconss);
16597 if( usefulconss[
c] ==
NULL )
16604 &
cutoff, ndelconss, nchgsides, nchgcoefs) );
16606 if( npaircomparisons > conshdlrdata->nmincomparisons )
16608 assert(npaircomparisons > 0);
16609 if( ((*ndelconss - oldndelconss) + (*nchgsides - oldnchgsides)/2.0 + (*nchgcoefs - oldnchgcoefs)/10.0) / ((
SCIP_Real) npaircomparisons) < conshdlrdata->mingainpernmincomp )
16611 oldndelconss = *ndelconss;
16612 oldnchgsides = *nchgsides;
16613 oldnchgcoefs = *nchgcoefs;
16614 npaircomparisons = 0;
16625 if( !
cutoff && firstupgradetry < nconss
16626 && *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
16627 && *nupgdconss == oldnupgdconss && *nchgcoefs == oldnchgcoefs && *nchgsides == oldnchgsides
16654 if( consdata->upgradetried )
16657 if( !consdata->presolved )
16660 consdata->upgradetried =
TRUE;
16666 if( upgdcons !=
NULL )
16675 assert(!consdata->upgraded);
16676 consdata->upgraded =
TRUE;
16682 || !conshdlrdata->presolpairwise
16683 || (conshdlrdata->maxaggrnormscale == 0.0) )
16695 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
16696 || *nupgdconss > oldnupgdconss || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
16737 for(
i = 0;
i < consdata->nvars; ++
i )
16802 const char* consname;
16821 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
16836 char** firstoperator,
16837 char** secondoperator,
16847 *firstoperator =
NULL;
16848 *secondoperator =
NULL;
16854 while( *curr && *success )
16867 if( curr[1] ==
'=' )
16876 if( strncmp(curr,
"[free]", 6) == 0 )
16891 if( *firstoperator ==
NULL )
16893 *firstoperator = curr;
16897 if( *secondoperator !=
NULL )
16902 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
16904 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
16907 else if( strncmp(curr,
"<=", 2) != 0 )
16909 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
16913 *secondoperator = curr;
16923 if( *firstoperator ==
NULL )
16938 int coefssize = 100;
16946 char* lhsstrptr =
NULL;
16947 char* rhsstrptr =
NULL;
16948 char* varstrptr = (
char*)str;
16975 if( ! operatorsuccess )
16983 assert(firstop[1] ==
'=');
16985 if( secondop !=
NULL )
16987 assert(secondop[0] ==
'<' && secondop[1] ==
'=');
16988 lhsstrptr = (
char *)str;
16989 varstrptr = firstop + 2;
16990 rhsstrptr = secondop + 2;
16996 varstrptr = (
char *)str;
16997 rhsstrptr = firstop + 2;
17001 assert(firstop[1] ==
'=');
17004 lhsstrptr = firstop + 2;
17007 assert(firstop[1] ==
'=');
17010 rhsstrptr = firstop + 2;
17011 lhsstrptr = firstop + 2;
17014 assert(strncmp(firstop,
"[free]", 6) == 0);
17020 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
17025 if( lhsstrptr !=
NULL )
17029 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
17034 if( rhsstrptr == lhsstrptr )
17039 if( rhsstrptr !=
NULL && rhsstrptr != lhsstrptr )
17043 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
17057 if( *success && requsize > coefssize )
17060 coefssize = requsize;
17065 assert(!*success || requsize <= coefssize);
17075 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
17094 if( varssize < consdata->
nvars )
17095 (*success) =
FALSE;
17117 (*nvars) = consdata->nvars;
17161 cons = eventdata->cons;
17180 varpos = eventdata->varpos;
17186 val = consdata->vals[varpos];
17205 consdata->presolved =
FALSE;
17209 consdata->rangedrowpropagated = 0;
17217 if( consdata->maxactdeltavar ==
var )
17220 consdata->maxactdeltavar =
NULL;
17224 if( consdata->boundstightened > 0)
17226 switch( eventtype )
17230 consdata->boundstightened = 0;
17234 consdata->boundstightened = 0;
17256 delta =
REALABS(val) * domain;
17258 if( delta > consdata->maxactdelta )
17260 consdata->maxactdelta = delta;
17261 consdata->maxactdeltavar =
var;
17268 consdata->presolved =
FALSE;
17269 consdata->removedfixings =
FALSE;
17270 consdata->rangedrowpropagated = 0;
17273 if( consdata->maxactdeltavar ==
var )
17276 consdata->maxactdeltavar =
NULL;
17284 consdata->presolved =
FALSE;
17293 varpos = eventdata->varpos;
17299 val = consdata->vals[varpos];
17301 consdata->rangedrowpropagated = 0;
17316 consdata->indexsorted =
FALSE;
17318 consdata->coefsorted =
FALSE;
17344 consdata->varsdeleted =
TRUE;
17367 assert(bdchginfos !=
NULL || nbdchginfos == 0);
17383 for(
i = 0;
i < nbdchginfos; ++
i )
17404 if(
i == nbdchginfos )
17417 if( upgdcons !=
NULL )
17453 assert(upgdconsssize > 0);
17491 consdata->checkabsolute =
TRUE;
17519 eventExecLinear,
NULL) );
17523 conflictExecLinear,
NULL) );
17531 consEnfolpLinear, consEnfopsLinear, consCheckLinear, consLockLinear,
17573 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
17577 "maximal number of separation rounds per node (-1: unlimited)",
17581 "maximal number of separation rounds per node in the root node (-1: unlimited)",
17585 "maximal number of cuts separated per separation round",
17589 "maximal number of cuts separated per separation round in the root node",
17593 "should pairwise constraint comparison be performed in presolving?",
17597 "should hash table be used for detecting redundant constraints in advance",
17601 "number for minimal pairwise presolve comparisons",
17605 "minimal gain per minimal pairwise presolve comparisons to repeat pairwise comparison round",
17609 "maximal allowed relative gain in maximum norm for constraint aggregation (0.0: disable constraint aggregation)",
17613 "maximum activity delta to run easy propagation on linear constraint (faster, but numerically less stable)",
17617 "maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for separating knapsack cardinality cuts",
17621 "should all constraints be subject to cardinality cut generation instead of only the ones with non-zero dual value?",
17625 "should presolving search for aggregations in equations",
17629 "should presolving try to simplify inequalities",
17633 "should dual presolving steps be performed?",
17637 "should stuffing of singleton continuous variables be performed?",
17641 "should single variable stuffing be performed, which tries to fulfill constraints using the cheapest variable?",
17644 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
17648 "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)?",
17652 "should presolving try to detect constraints parallel to the objective function defining an upper bound and prevent these constraints from entering the LP?",
17656 "should presolving try to detect constraints parallel to the objective function defining a lower bound and prevent these constraints from entering the LP?",
17660 "should presolving try to detect subsets of constraints parallel to the objective function?",
17664 "should presolving and propagation try to improve bounds, detect infeasibility, and extract sub-constraints from ranged rows and equations?",
17668 "should presolving and propagation extract sub-constraints from ranged rows and equations?",
17672 "maximum depth to apply ranged row propagation",
17676 "frequency for applying ranged row propagation",
17680 "should multi-aggregations only be performed if the constraint can be removed afterwards?",
17684 "maximum coefficient dynamism (ie. maxabsval / minabsval) for primal multiaggregation",
17688 "maximum coefficient dynamism (ie. maxabsval / minabsval) for dual multiaggregation",
17692 "should Cliques be extracted?",
17703 const char* conshdlrname
17718 if( conshdlr ==
NULL )
17794 if( conshdlr ==
NULL )
17808 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
17834 if( requiredsize > nconsvars )
17841 assert(requiredsize == nconsvars);
17848 SCIPerrorMessage(
"while creating constraint <%s> inactive variables lead to an infinite constant\n", name);
17885 if( check || enforce )
17888 for(n = consdata->nvars - 1; n >= 0; --n )
17894 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
17895 local, modifiable, dynamic, removable, stickingatnode) );
17976 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
17984 if( sourcecoefs !=
NULL )
17991 for( v = 0; v <
nvars; ++v )
18004 if( requiredsize >
nvars )
18015 for( v = 0; v <
nvars; ++v )
18025 for( v = 0; v <
nvars && success; ++v )
18047 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
18081 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
18112 if( requiredsize > nconsvars )
18119 assert(requiredsize == nconsvars);
18124 lhs = consdata->lhs;
18125 rhs = consdata->rhs;
18131 if( constant < 0.0 )
18204 for( v = nconsvars - 1; v >= 0; --v )
18258 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
18265 vars = consdata->vars;
18338 return consdata->lhs;
18362 return consdata->rhs;
18425 return consdata->nvars;
18449 return consdata->vars;
18473 return consdata->vals;
18502 if( consdata->row !=
NULL )
18530 if( consdata->row !=
NULL )
18558 if( consdata->row !=
NULL )
18586 if( consdata->row !=
NULL )
18615 return consdata->row;
18713 if( consdata->upgraded )
18717 if( consdata->row !=
NULL )
18721 SCIPerrorMessage(
"cannot upgrade linear constraint that is already stored as row in the LP\n");
18773 for(
i = 0;
i < consdata->nvars; ++
i )
18775 var = consdata->vars[
i];
18776 val = consdata->vals[
i];
18849 poscoeffsum += val;
18851 negcoeffsum += val;
18858 SCIPdebugMsg(
scip,
"upgrading linear constraint <%s> (%d upgrade methods):\n",
18860 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",
18861 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposcont, nnegcont,
18862 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18863 poscoeffsum, negcoeffsum, integral);
18866 for(
i = 0;
i < conshdlrdata->nlinconsupgrades && *upgdcons ==
NULL; ++
i )
18868 if( conshdlrdata->linconsupgrades[
i]->active )
18870 SCIP_CALL( conshdlrdata->linconsupgrades[
i]->linconsupgd(
scip, cons, consdata->nvars,
18871 consdata->vars, consdata->vals, consdata->lhs, consdata->rhs,
18872 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposimplbin, nnegimplbin, nposcont, nnegcont,
18873 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18874 poscoeffsum, negcoeffsum, integral,
18880 if( *upgdcons !=
NULL )
18905 if( conshdlr ==
NULL )
18909 *infeasible =
FALSE;
18915 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 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 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, int *naddconss)
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)
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