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;
4110 for(
i = 0;
i < nconss;
i++ )
4115 if( consdata->varsdeleted )
4118 for( v = consdata->nvars - 1; v >= 0; --v )
4125 consdata->varsdeleted =
FALSE;
4180 *infeasible =
FALSE;
4191 if( consdata->normalized )
4195 vals = consdata->vals;
4196 nvars = consdata->nvars;
4201 consdata->normalized =
TRUE;
4227 scalar = 2.0 / (minabsval + maxabsval);
4234 SCIPdebugMsg(
scip,
"divide linear constraint with %g, because all coefficients are in absolute value the same\n", maxabsval);
4239 vals = consdata->vals;
4240 nvars = consdata->nvars;
4249 consdata->normalized =
TRUE;
4265 if( !consdata->hasnonbinvalid )
4272 if( !consdata->hascontvar )
4318 if( nposcoeffs > nnegcoeffs )
4320 else if( nposcoeffs < nnegcoeffs )
4330 assert(mult == +1 || mult == -1);
4349 for(
i = 0;
i <
nvars && success && scm <= maxmult; ++
i )
4354 success =
SCIPrealToRational(vals[
i], -epsilon, epsilon , maxmult, &numerator, &denominator);
4364 onlyintegral =
TRUE;
4371 onlyintegral =
FALSE;
4377 success = success && (scm <= maxmult || (scm == 1 && onlyintegral));
4378 if( success && scm != 1 )
4385 if( consdata->validmaxabsval )
4390 consdata->validmaxabsval =
FALSE;
4396 if( consdata->validminabsval )
4401 consdata->validminabsval =
FALSE;
4408 vals = consdata->vals;
4409 nvars = consdata->nvars;
4416 if( success &&
nvars >= 1 )
4431 if( !consdata->hascontvar && onlyintegral )
4449 if( consdata->validmaxabsval )
4453 if( consdata->validminabsval )
4461 consdata->normalized =
TRUE;
4487 if( consdata->merged )
4493 v = consdata->nvars - 1;
4501 var = consdata->vars[v];
4502 valsum = consdata->vals[v];
4505 while( v >= 1 && consdata->vars[v-1] ==
var )
4509 valsum += consdata->vals[v];
4519 else if( valsum != consdata->vals[v] )
4527 consdata->merged =
TRUE;
4548 if( infeasible !=
NULL )
4549 *infeasible =
FALSE;
4554 if( consdata->eventdata ==
NULL )
4570 if( !consdata->removedfixings )
4580 lhssubtrahend = 0.0;
4581 rhssubtrahend = 0.0;
4587 while( v < consdata->
nvars )
4609 if(
var != consdata->vars[v] )
4617 lhssubtrahend += constant;
4619 rhssubtrahend += constant;
4639 for(
i = 0;
i < naggrvars; ++
i )
4644 constant += scalar * aggrconstant;
4654 if( constant < 0.0 )
4658 if( infeasible !=
NULL )
4670 lhssubtrahend += constant;
4677 if( constant > 0.0 )
4681 if( infeasible !=
NULL )
4693 rhssubtrahend += constant;
4714 if( infeasible !=
NULL )
4746 if( infeasible !=
NULL )
4769 consdata->removedfixings =
TRUE;
4782 assert(consdata->removedfixings);
4786 for( v = 0; v < consdata->nvars; ++v )
4821 vars = consdata->vars;
4822 vals = consdata->vals;
4823 nvars = consdata->nvars;
4829 assert((infervar ==
NULL) == (inferpos == -1));
4830 assert(inferpos == -1 ||
vars[inferpos] == infervar);
4852 if( infervar !=
NULL )
4857 &ismintight,
NULL, &isminsettoinfinity,
NULL);
4860 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4866 &ismintight,
NULL, &isminsettoinfinity,
NULL);
4869 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4873 if( (reasonisrhs && !isminsettoinfinity && ismintight) || (!reasonisrhs && !ismaxsettoinfinity && ismaxtight) )
4878 resactisinf =
FALSE;
4883 if( infervar !=
NULL )
4895 rescap = consdata->rhs - minresactivity;
4905 rescap = consdata->lhs - maxresactivity;
4908 if( reasonisrhs == (vals[inferpos] > 0.0) )
4914 rescap = (reasonisrhs ? consdata->rhs - minresactivity : consdata->lhs - maxresactivity);
4933 if( reasonisrhs == (vals[
i] > 0.0) )
4961 if( reasonisrhs == (vals[
i] > 0.0) )
4999 vars = consdata->vars;
5000 nvars = consdata->nvars;
5003 assert((infervar ==
NULL) == (inferpos == -1));
5005 assert(inferpos == -1 ||
vars[inferpos] == infervar);
5008 for( v =
nvars - 1; v >= 0; --v )
5013 if(
vars[v] == infervar )
5059 for( v =
nvars - 1; v >= 0; --v )
5121 vars = consdata->vars;
5122 nvars = consdata->nvars;
5124 vals = consdata->vals;
5131 if( inferpos >=
nvars ||
vars[inferpos] != infervar )
5135 for( inferpos = 0; inferpos <
nvars &&
vars[inferpos] != infervar; ++inferpos )
5177 SCIPerrorMessage(
"invalid inference information %d in linear constraint <%s> at position %d for %s bound of variable <%s>\n",
5225 infcountmin = consdata->minactivityneginf
5226 + consdata->minactivityposinf
5227 + consdata->minactivityneghuge
5228 + consdata->minactivityposhuge;
5229 infcountmax = consdata->maxactivityneginf
5230 + consdata->maxactivityposinf
5231 + consdata->maxactivityneghuge
5232 + consdata->maxactivityposhuge;
5234 if( infcountmin > 1 && infcountmax > 1 )
5265 var = consdata->vars[pos];
5276 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
5278 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newub);
5285 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5293 else if( tightened )
5296 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5303 consdata->upgradetried =
FALSE;
5334 var = consdata->vars[pos];
5345 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
5347 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newlb);
5354 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5362 else if( tightened )
5365 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5372 consdata->upgradetried =
FALSE;
5412 var = consdata->vars[pos];
5419 val = consdata->vals[pos];
5420 lhs = consdata->lhs;
5421 rhs = consdata->rhs;
5431 if( !consdata->validactivities )
5433 assert(consdata->validactivities);
5434 if( !consdata->validminact )
5436 assert(consdata->validminact);
5447 assert(consdata->validminact);
5452 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5467 alpha = val * (ub - lb);
5475 newub = lb + (slack / val);
5481 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5499 if( !consdata->validmaxact )
5503 assert(consdata->validmaxact);
5508 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5523 alpha = val * (ub - lb);
5531 newlb = ub - (slack / val);
5537 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5554 assert(consdata->validminact);
5559 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5574 alpha = val * (lb - ub);
5582 newlb = ub + slack / val;
5588 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5605 if( !consdata->validmaxact )
5609 assert(consdata->validmaxact);
5614 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5629 alpha = val * (lb - ub);
5637 newub = lb - (slack / val);
5643 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5767 if( consdata->rangedrowpropagated == 2 )
5771 if( consdata->nvars < 3 )
5788 consdata->rangedrowpropagated = 2;
5795 if( consdata->rangedrowpropagated > 0 )
5798 consdata->rangedrowpropagated = 1;
5805 for( v = consdata->nvars - 1; v >= 0; --v )
5823 lhs = consdata->lhs - fixedact;
5824 rhs = consdata->rhs - fixedact;
5825 nunfixedvars = consdata->nvars - nfixedconsvars;
5867 absval =
REALABS(consdata->vals[v]);
5869 if( absminbincoef > absval )
5870 absminbincoef = absval;
5874 possiblegcd =
FALSE;
5875 infcheckvars[ninfcheckvars] = consdata->vars[v];
5876 infcheckvals[ninfcheckvars] = consdata->vals[v];
5892 if( v == consdata->nvars )
5896 if( ncontvars + 2 > nunfixedvars )
5909 for( ; v < consdata->nvars; ++v )
5918 absval =
REALABS(consdata->vals[v]);
5920 if( absminbincoef > absval )
5921 absminbincoef = absval;
5931 possiblegcd =
FALSE;
5932 infcheckvars[ninfcheckvars] = consdata->vars[v];
5933 infcheckvals[ninfcheckvars] = consdata->vals[v];
5949 infcheckvars[ninfcheckvars] = consdata->vars[v];
5950 infcheckvals[ninfcheckvars] = consdata->vals[v];
5965 if( ninfcheckvars == 0 )
5970 minactinfvarsinvalid =
FALSE;
5971 maxactinfvarsinvalid =
FALSE;
5972 maxactinfvars = 0.0;
5973 minactinfvars = 0.0;
5976 for( v = ninfcheckvars - 1; v >= 0; --v )
5983 if( infcheckvals[v] < 0.0 )
5984 maxactinfvarsinvalid =
TRUE;
5986 minactinfvarsinvalid =
TRUE;
5990 if( infcheckvals[v] < 0.0 )
5991 maxactinfvars += infcheckvals[v] * lb;
5993 minactinfvars += infcheckvals[v] * lb;
5998 if( infcheckvals[v] > 0.0 )
5999 maxactinfvarsinvalid =
TRUE;
6001 minactinfvarsinvalid =
TRUE;
6005 if( infcheckvals[v] > 0.0 )
6006 maxactinfvars += infcheckvals[v] * ub;
6008 minactinfvars += infcheckvals[v] * ub;
6013 minactinfvarsinvalid =
TRUE;
6015 maxactinfvarsinvalid =
TRUE;
6017 if( minactinfvarsinvalid || maxactinfvarsinvalid )
6020 assert(!minactinfvarsinvalid && !maxactinfvarsinvalid);
6022 SCIPdebugMsg(
scip,
"minactinfvarsinvalid = %u, minactinfvars = %g, maxactinfvarsinvalid = %u, maxactinfvars = %g, gcd = %lld, ninfcheckvars = %d, ncontvars = %d\n",
6023 minactinfvarsinvalid, minactinfvars, maxactinfvarsinvalid, maxactinfvars, gcd, ninfcheckvars, ncontvars);
6048 else if( ncontvars == 0 )
6055 v = ninfcheckvars - 1;
6059 for( ; v >= 0 && gcdinfvars >= 2; --v )
6067 SCIPdebugMsg(
scip,
"gcdinfvars =%lld, possiblegcd = %u\n", gcdinfvars, possiblegcd);
6070 if( gcdinfvars >= 1 )
6083 value2 = value + gcd * (
SCIPceil(
scip, (lhs - value) / gcd));
6104 value += gcdinfvars;
6106 assert(nsols < 2 || minvalue <= maxvalue);
6119 value2 = value + gcd * (
SCIPfloor(
scip, (rhs - value) / gcd));
6130 assert(maxvalue > minvalue);
6133 value -= gcdinfvars;
6135 assert(maxvalue > secondsolval);
6138 SCIPdebugMsg(
scip,
"here nsols %s %d, minsolvalue = %g, maxsolvalue = %g, ninfcheckvars = %d, nunfixedvars = %d\n",
6139 nsols > 2 ?
">=" :
"=", nsols, minvalue, maxvalue, ninfcheckvars, nunfixedvars);
6144 SCIPdebugMsg(
scip,
"gcdinfvars = %lld, gcd = %lld, correctedlhs = %g, correctedrhs = %g\n",
6145 gcdinfvars, gcd, lhs, rhs);
6156 else if( nsols == 1 )
6158 assert(minvalue == maxvalue);
6161 if( ninfcheckvars == 1 )
6167 SCIPdebugMsg(
scip,
"fixing single variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6188 if( ninfcheckvars == nunfixedvars - 1 )
6195 assert(ninfcheckvars > 0);
6198 for( v = 0; v < consdata->nvars - 1; ++v )
6202 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6208 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6210 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6215 assert(consdata->vars[v2] == infcheckvars[w2]);
6218 assert(w2 == ninfcheckvars);
6224 if( consdata->vals[v] < 0 )
6233 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6246 consdata->vars[v],
bound) );
6262 assert(v == consdata->nvars - 1);
6265 if( consdata->vals[v] < 0 )
6274 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6287 consdata->vars[v],
bound) );
6302 ++conshdlrdata->naddconss;
6307 maxvalue, maxvalue,
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE) );
6324 if( ninfcheckvars == 1 )
6332 if( infcheckvals[0] < 0 )
6334 newlb = maxvalue/infcheckvals[0];
6335 newub = minvalue/infcheckvals[0];
6339 newlb = minvalue/infcheckvals[0];
6340 newub = maxvalue/infcheckvals[0];
6347 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6368 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6387 else if( ninfcheckvars == nunfixedvars - 1 )
6395 assert(ninfcheckvars > 0);
6396 assert(minvalue < maxvalue);
6399 for( v = 0; v < consdata->nvars - 1; ++v )
6403 if(
w >= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6409 assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6411 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6416 assert(consdata->vars[v2] == infcheckvars[w2]);
6419 assert(w2 == ninfcheckvars);
6425 if( consdata->vals[v] < 0 )
6427 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6428 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6432 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6433 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6440 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6452 consdata->vars[v], newlb) );
6462 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6474 consdata->vars[v], newub) );
6491 assert(v == consdata->nvars - 1);
6494 if( consdata->vals[v] < 0 )
6496 newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6497 newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6501 newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6502 newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6509 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6530 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6559 assert(maxvalue > minvalue);
6575 ++conshdlrdata->naddconss;
6594 else if( addartconss && ncontvars < ninfcheckvars )
6601 for( v = 0; v < consdata->nvars; ++v )
6613 if( consdata->vals[v] > 0.0 )
6614 maxact += consdata->vals[v];
6616 minact += consdata->vals[v];
6624 if( consdata->vals[v] > 0.0 )
6670 newlhs = lhs - maxact;
6671 newrhs = rhs - minact;
6676 ++conshdlrdata->naddconss;
6740 var = consdata->vars[pos];
6746 val = consdata->vals[pos];
6747 lhs = consdata->lhs;
6748 rhs = consdata->rhs;
6750 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
6770 newub = (rhs - minresactivity)/val;
6779 if( activityunreliable )
6782 newub = (rhs - minresactivity)/val;
6788 if( !activityunreliable )
6791 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
6794 &infeasible, &tightened) );
6797 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6812 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6824 newlb = (lhs - maxresactivity)/val;
6832 newlb = (lhs - maxresactivity)/val;
6841 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6844 &infeasible, &tightened) );
6847 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6861 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6877 newlb = (rhs - minresactivity)/val;
6884 if( activityunreliable )
6887 newlb = (rhs - minresactivity)/val;
6894 if( !activityunreliable )
6897 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6900 &infeasible, &tightened) );
6903 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6917 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6929 newub = (lhs - maxresactivity)/val;
6937 newub = (lhs - maxresactivity)/val;
6946 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
6949 &infeasible, &tightened) );
6952 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6966 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6976#define MAXTIGHTENROUNDS 10
6990 unsigned int tightenmode;
6996 int oldnchgbdstotal;
7028 nvars = consdata->nvars;
7038 if( !force && (consdata->boundstightened >= tightenmode) )
7045 assert(consdata->coefsorted);
7073 &isminsettoinfinity, &ismaxsettoinfinity);
7086 easycase =
SCIPisLT(
scip, consdata->maxactdelta, maxeasyactivitydelta);
7093 oldnchgbdstotal = *nchgbds;
7096 for( nrounds = 0; (force || consdata->boundstightened < tightenmode) && nrounds <
MAXTIGHTENROUNDS; ++nrounds )
7105 assert(consdata->coefsorted);
7109 consdata->boundstightened = (
unsigned int)tightenmode;
7115 while( v <
nvars && v != lastchange && !(*
cutoff) )
7117 oldnchgbds = *nchgbds;
7129 if( *nchgbds > oldnchgbds )
7134 else if( consdata->coefsorted && v < consdata->nbinvars - 1
7136 v = consdata->nbinvars;
7143 *nchgbds - oldnchgbdstotal, nrounds);
7144 oldnchgbdstotal += oldnchgbds;
7149 if( force &&
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
7187 if( consdata->row !=
NULL )
7199 SCIPdebugMsg(
scip,
" consdata activity=%.15g (lhs=%.15g, rhs=%.15g, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
7200 activity, consdata->lhs, consdata->rhs, (
void*)consdata->row, checklprows,
7205 lhsviol = consdata->lhs - activity;
7206 rhsviol = activity - consdata->rhs;
7210 if( (lhsviol > 0) && (lhsviol > rhsviol) )
7215 else if( rhsviol > 0 )
7240 if( !checkrelmaxabs )
7264 for( v = 0; v < consdata->nvars; ++v )
7266 if( consdata->vals !=
NULL )
7268 coef = consdata->vals[v];
7274 absval =
REALABS( coef * solval );
7275 maxabs =
MAX( maxabs, absval );
7282 if( (consdata->lhs - activity) <= (1e-15 * maxabs) )
7284 SCIPdebugMsg(
scip,
" lhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7285 consdata->lhs - activity, maxabs);
7299 SCIPdebugMsg(
scip,
" lhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7300 consdata->lhs - activity, maxabs);
7336 if( (activity - consdata->rhs) <= (1e-15 * maxabs) )
7338 SCIPdebugMsg(
scip,
" rhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7339 activity - consdata->rhs, maxabs);
7353 SCIPdebugMsg(
scip,
" rhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7354 activity - consdata->rhs, maxabs);
7388 else if( consdata->checkabsolute &&
7456 if( consdata->row ==
NULL )
7473 if( consdata->nvars == 0 )
7511 if( consdata->nlrow ==
NULL )
7513 assert(consdata->lhs <= consdata->rhs);
7570 if( !separateall &&
sol ==
NULL )
7583 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7591 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7601 consdata->vals, +1.0, consdata->rhs,
sol,
cutoff, ncuts) );
7606 consdata->vals, -1.0, -consdata->lhs,
sol,
cutoff, ncuts) );
7611 if( *ncuts > oldncuts )
7651 if( consdata->eventdata ==
NULL )
7683 oldnchgbds = *nchgbds;
7687 if( *nchgbds > oldnchgbds )
7694 if( rangedrowpropagation && tightenbounds && !(*
cutoff) )
7711 if( nfixedvars > 0 )
7712 *nchgbds += 2 * nfixedvars;
7719 &isminsettoinfinity, &ismaxsettoinfinity);
7723 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7724 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7734 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7735 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7745 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7746 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7749 if( consdata->nvars > 0 )
7791 for( v = 0; v < consdata->nvars; ++v )
7794 var = consdata->vars[v];
7806 SCIPdebugMsg(
scip,
"converting variable <%s> with fixed bounds [%.15g,%.15g] into fixed variable fixed at %.15g\n",
7830 assert(consdata->removedfixings);
7835#define MAX_CLIQUE_NONZEROS_PER_CONS 1000000
7927 int cliquenonzerosadded;
7944 if( consdata->nvars < 2 )
7953 if( !consdata->implsadded )
7971 nvars = consdata->nvars;
7972 vars = consdata->vars;
7973 vals = consdata->vals;
7976 if( !consdata->validactivities )
7978 assert(consdata->validactivities);
7982 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
7983 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
7984 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
7985 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
7986 finiteminact = (finitenegminact && finiteposminact);
7987 finitemaxact = (finitenegmaxact && finiteposmaxact);
7989 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
7994 int oldnchgbds = *nchgbds;
8000 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8003 assert(consdata->validglbminact);
8006 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8009 assert(consdata->validglbmaxact);
8011 assert(consdata->validglbminact || consdata->validglbmaxact);
8016 for( v =
nvars - 1; v >= 0; --v )
8024 if( value > maxabscontrib )
8026 maxabscontrib = value;
8037 if( value > maxabscontrib )
8039 maxabscontrib = value;
8050 if( !
SCIPisEQ(
scip, maxabscontrib, 1.0) && !allbinary )
8056 if( finiterhs && finiteminact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbminactivity), consdata->rhs - maxabscontrib) )
8058 for( v =
nvars - 1; v >= 0; --v )
8070 *nchgbds += nbdchgs;
8077 *nchgbds += nbdchgs;
8097 if( finitelhs && finitemaxact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbmaxactivity), consdata->lhs - maxabscontrib) )
8099 for( v =
nvars - 1; v >= 0; --v )
8111 *nchgbds += nbdchgs;
8118 *nchgbds += nbdchgs;
8137 SCIPdebugMsg(
scip,
"extracted %d implications from constraint %s which led to %d bound changes, %scutoff detetcted\n", nimpls,
SCIPconsGetName(cons), *nchgbds - oldnchgbds, *
cutoff ?
"" :
"no ");
8143 if( *nchgbds - oldnchgbds > 0 )
8164 consdata->implsadded =
TRUE;
8168 if( consdata->cliquesadded )
8171 consdata->cliquesadded =
TRUE;
8172 cliquenonzerosadded = 0;
8178 nvars = consdata->nvars;
8179 vars = consdata->vars;
8180 vals = consdata->vals;
8185 if( !consdata->validactivities )
8187 assert(consdata->validactivities);
8191 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
8192 finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
8193 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
8194 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
8195 finiteminact = (finitenegminact && finiteposminact);
8196 finitemaxact = (finitenegmaxact && finiteposmaxact);
8201 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8205 int nposbinvars = 0;
8206 int nnegbinvars = 0;
8207 int allonebinary = 0;
8222 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8223 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8241 if( allonebinary <
nvars && (nposbinvars >= 2 || nnegbinvars >= 2) )
8244 int oldnchgbds = *nchgbds;
8250 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8253 assert(consdata->validglbminact);
8256 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8259 assert(consdata->validglbmaxact);
8261 assert(consdata->validglbminact || consdata->validglbmaxact);
8267 if( finiterhs && finitenegminact && nposbinvars >= 2 )
8270 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8273#ifdef SCIP_DISABLED_CODE
8282 while( j < nposbinvars )
8296 *nchgbds += nbdchgs;
8298 cliquenonzerosadded += j;
8303 if( !stopped && !(*
cutoff) && j < nposbinvars )
8306 int lastfit = j - 2;
8313 while( lastfit >= 0 && j < nposbinvars )
8318 clqvars[lastfit + 1] = binvars[j];
8329 *nchgbds += nbdchgs;
8331 cliquenonzerosadded += (lastfit + 2);
8350 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8371 if( !consdata->validactivities )
8373 assert(consdata->validactivities);
8375 nvars = consdata->nvars;
8376 vars = consdata->vars;
8377 vals = consdata->vals;
8392 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8393 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8411 oldnchgbds = *nchgbds;
8415 if( !stopped && !(*
cutoff) && finitelhs && finiteposmaxact && nnegbinvars >= 2 )
8418 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8420 i = nposbinvars + nnegbinvars - 1;
8422#ifdef SCIP_DISABLED_CODE
8432 while( j >= nposbinvars )
8447 *nchgbds += nbdchgs;
8449 cliquenonzerosadded += (
i - j);
8454 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8457 int lastfit = jstart + 1;
8465 while( lastfit <= i && j >= nposbinvars )
8470 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8471 clqvars[lastfit - jstart - 2] = binvars[j];
8483 *nchgbds += nbdchgs;
8485 cliquenonzerosadded += (
i - lastfit + 2);
8504 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8525 if( !consdata->validactivities )
8527 assert(consdata->validactivities);
8529 nvars = consdata->nvars;
8530 vars = consdata->vars;
8531 vals = consdata->vals;
8546 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8547 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8565 oldnchgbds = *nchgbds;
8569 if( !(*
cutoff) && finiterhs && finiteminact && nnegbinvars >= 2 )
8578 threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8580 i = nposbinvars + nnegbinvars - 1;
8583#ifdef SCIP_DISABLED_CODE
8593 while( j >= nposbinvars )
8608 *nchgbds += nbdchgs;
8610 cliquenonzerosadded += (
i - j);
8615 if( !stopped && !(*
cutoff) && jstart >= nposbinvars )
8618 int lastfit = j + 1;
8626 while( lastfit <= i && j >= nposbinvars )
8631 assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 <
i);
8632 clqvars[lastfit - jstart - 2] = binvars[j];
8644 *nchgbds += nbdchgs;
8646 cliquenonzerosadded += (
i - lastfit + 2);
8667 if( !stopped && !*
cutoff && *nchgbds - oldnchgbds > 0 )
8688 if( !consdata->validactivities )
8690 assert(consdata->validactivities);
8692 nvars = consdata->nvars;
8693 vars = consdata->vars;
8694 vals = consdata->vals;
8709 binvars[nposbinvars + nnegbinvars] =
vars[
i];
8710 binvarvals[nposbinvars + nnegbinvars] = vals[
i];
8730 if( !stopped && !(*
cutoff) && finitelhs && finitemaxact && nposbinvars >= 2 )
8739 threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8743#ifdef SCIP_DISABLED_CODE
8753 while( j < nposbinvars )
8767 *nchgbds += nbdchgs;
8769 cliquenonzerosadded += j;
8774 if( !stopped && !(*
cutoff) && j < nposbinvars )
8777 int lastfit = j - 2;
8784 while( lastfit >= 0 && j < nposbinvars )
8789 clqvars[lastfit + 1] = binvars[j];
8800 *nchgbds += nbdchgs;
8802 cliquenonzerosadded += lastfit + 2;
8849 if( lhsclique || rhsclique )
8854 SCIPdebugMsg(
scip,
"linear constraint <%s>: adding clique with %d vars (%d pos, %d neg)\n",
8859 values[
i] = (rhsclique == (vals[
i] > 0.0));
8866 *nchgbds += nbdchgs;
8898 *infeasible =
FALSE;
8908 for(
i = 0;
i < consdata->nvars && integral; ++
i )
8926 SCIPdebugMsg(
scip,
"rounding sides=[%.15g,%.15g] of linear constraint <%s> with integral coefficients and variables only "
8927 "is infeasible\n", consdata->lhs, consdata->rhs,
SCIPconsGetName(cons));
8933 SCIPdebugMsg(
scip,
"linear constraint <%s>: make sides integral: sides=[%.15g,%.15g]\n",
8941 if( !consdata->upgraded )
8949 if( !consdata->upgraded )
8952 SCIPdebugMsg(
scip,
"linear constraint <%s>: new integral sides: sides=[%.15g,%.15g]\n",
9039 &isminsettoinfinity, &ismaxsettoinfinity);
9045 minleftactivity = 0.0;
9046 maxleftactivity = 0.0;
9053 var = consdata->vars[
i];
9054 val = consdata->vals[
i];
9066 if( isvarrelevant[
i] )
9074 lval = consdata->lhs - minactivity;
9075 rval = maxactivity - consdata->rhs;
9078 if( consdata->nvars == 2 )
9081 otherval = consdata->vals[1-
i];
9085 lval = consdata->lhs - val*lb;
9091 rval = val*ub - consdata->rhs;
9096 newval =
MAX3(lval, rval, 0.0);
9100 newlhs = consdata->lhs - val * lb;
9101 newlhs += newval * lb;
9102 newrhs = consdata->rhs - val * ub;
9103 newrhs += newval * ub;
9107 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9109 maxactivity, consdata->lhs, consdata->rhs);
9125 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9130 consdata->lhs, newlhs);
9140 consdata->rhs, newrhs);
9157 minleftactivity += val * lb;
9167 maxleftactivity += val * ub;
9177 if( isvarrelevant[
i] )
9185 lval = minactivity - consdata->lhs;
9186 rval = consdata->rhs - maxactivity;
9189 if( consdata->nvars == 2 )
9192 otherval = consdata->vals[1-
i];
9196 lval = val*ub - consdata->lhs;
9202 rval = consdata->rhs - val*lb;
9207 newval =
MIN3(lval, rval, 0.0);
9211 newlhs = consdata->lhs - val * ub;
9212 newlhs += newval * ub;
9213 newrhs = consdata->rhs - val * lb;
9214 newrhs += newval * lb;
9218 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9220 maxactivity, consdata->lhs, consdata->rhs);
9236 &ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9241 consdata->lhs, newlhs);
9251 consdata->rhs, newrhs);
9268 minleftactivity += val * ub;
9278 maxleftactivity += val * lb;
9287 minleftactivity, consdata->rhs);
9289 maxleftactivity, consdata->lhs);
9316 aggrlhs = consdata->lhs - minactivity + minleftactivity;
9317 aggrrhs = consdata->rhs - maxactivity + maxleftactivity;
9337 if( !isvarrelevant[
i] )
9340 var = consdata->vars[
i];
9341 val = consdata->vals[
i];
9346 SCIPdebugMsg(
scip,
"val = %g\tlhs = %g\trhs = %g\n", val, consdata->lhs, consdata->rhs);
9347 SCIPdebugMsg(
scip,
"linear constraint <%s>: remove variable <%s> from constraint since it is redundant\n",
9353 minleftactivitypart = val * lb;
9354 maxleftactivitypart = val * ub;
9358 minleftactivitypart = val * ub;
9359 maxleftactivitypart = val * lb;
9363 isvarrelevant[
i] = isvarrelevant[consdata->nvars - 1];
9368 newlhs = consdata->lhs - minleftactivitypart;
9369 newrhs = consdata->rhs - maxleftactivitypart;
9374 consdata->lhs, newlhs);
9384 consdata->rhs, newrhs);
9428 assert(consdata->nvars == 1);
9432 var = consdata->vars[0];
9433 val = consdata->vals[0];
9453 if( !consdata->upgraded )
9482 assert(consdata->nvars == 2);
9485 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregate %.15g<%s> + %.15g<%s> == %.15g\n",
9487 consdata->vals[1],
SCIPvarGetName(consdata->vars[1]), consdata->rhs);
9491 consdata->rhs, &infeasible, &redundant, &aggregated) );
9510 if( !consdata->upgraded )
9540 if( slackcoef > 0.0 )
9545 *newrhs = consdata->rhs - slackcoef * slackvarlb;
9549 *newlhs = consdata->lhs - slackcoef * slackvarub;
9556 *newlhs = consdata->rhs - slackcoef * slackvarlb;
9560 *newrhs = consdata->lhs - slackcoef * slackvarub;
9600 int maxnlocksremove;
9618 assert(consdata->nvars > 2);
9628 lhs = consdata->lhs;
9629 rhs = consdata->rhs;
9631 if( consdata->nvars == 3 )
9636 maxnlocksremove = 3;
9638 else if( consdata->nvars == 4 )
9643 maxnlocksremove = 2;
9648 maxnlocksremove = 1;
9667 vars = consdata->vars;
9668 vals = consdata->vals;
9671 bestnlocks = INT_MAX;
9672 bestremovescons =
FALSE;
9673 bestslackdomrng = 0.0;
9674 coefszeroone =
TRUE;
9675 coefsintegral =
TRUE;
9676 varsintegral =
TRUE;
9685 for( v = 0; v < consdata->nvars; ++v )
9709 if( absval < minabsval )
9711 if( absval > maxabsval )
9716 if( maxabsval / minabsval > conshdlrdata->maxmultaggrquot )
9721 coefszeroone = coefszeroone &&
SCIPisEQ(
scip, absval, 1.0);
9752 if( nlocks > maxnlocksremove )
9756 if( (iscont || (coefsintegral && varsintegral &&
SCIPisEQ(
scip, absval, 1.0))) &&
9770 slackdomrng = (varub - varlb)*absval;
9776 better = (slacktype > bestslacktype) || (bestslackpos == -1);
9777 if( !better && slacktype == bestslacktype )
9779 better = (nlocks < bestnlocks);
9780 if( nlocks == bestnlocks && !bestremovescons )
9783 equal = !better &&
SCIPisGE(
scip, slackdomrng, bestslackdomrng);
9787 if( better || equal )
9801 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
9806 if( !ismintight || !ismaxtight )
9826 if( conshdlrdata->multaggrremove && !removescons )
9832 if( !removescons && nlocks > maxnlocksstay )
9838 if( !bestremovescons && removescons )
9845 bestslacktype = slacktype;
9846 bestnlocks = nlocks;
9847 bestslackdomrng = slackdomrng;
9848 bestremovescons = removescons;
9868 if( bestslackpos >= 0
9870 || (coefsintegral && varsintegral && nimplvars == 0)) )
9893 slackvar =
vars[bestslackpos];
9894 slackcoef = vals[bestslackpos];
9896 aggrconst = consdata->rhs/slackcoef;
9904 for( v = 0; v < consdata->nvars - 1; ++v )
9906 if( v == bestslackpos )
9908 aggrvars[v] =
vars[consdata->nvars - 1];
9909 scalars[v] = -consdata->vals[consdata->nvars - 1] / slackcoef;
9913 aggrvars[v] =
vars[v];
9914 scalars[v] = -consdata->vals[v] / slackcoef;
9918 SCIPdebugMsgPrint(
scip,
" %+.15g, bounds of <%s>: [%.15g,%.15g], nlocks=%d, maxnlocks=%d, removescons=%u\n",
9920 bestnlocks, bestremovescons ? maxnlocksremove : maxnlocksstay, bestremovescons);
9924 &infeasible, &aggregated) );
9954 if( bestremovescons )
9959 if( !consdata->upgraded )
9963 else if( ncontvars == 1 )
9967 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
9977 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting continuous variable <%s> to implied integral variable\n",
10001 absval =
REALABS(vals[contvarpos]);
10013#ifdef WITH_DEBUG_SOLUTION
10014 if( SCIPdebugIsMainscip(
scip) )
10023 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregating continuous variable <%s> to newly created implied integral variable <%s>, aggregation factor = %g\n",
10031 SCIPdebugMsg(
scip,
"infeasible aggregation of variable <%s> to implied integral variable <%s>, domain is empty\n",
10053 consdata->boundstightened = 0;
10054 consdata->rangedrowpropagated = 0;
10055 consdata->presolved =
FALSE;
10058 else if( ncontvars == 0 && nimplvars == 0 && nintvars == 1 && !coefszeroone )
10066 assert(0 <= intvarpos && intvarpos < consdata->
nvars);
10075 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting integer variable <%s> to implied integral variable\n",
10110 vars = consdata->vars;
10111 nvars = consdata->nvars;
10115 for( v = 0; v <
nvars; ++v )
10139 val = consdata->vals[v];
10146 (*scale) = val / -
objval;
10158 (*scale) = val /
objval;
10194 nvars = consdata->nvars;
10203 (
nvars == nobjvars && (!conshdlrdata->detectcutoffbound || !conshdlrdata->detectlowerbound)) )
10206 offset = consdata->rhs;
10216 vars = consdata->vars;
10221 SCIPdebugMsg(
scip,
"linear equality constraint <%s> == %g (offset %g) is a subset of the objective function\n",
10229 for( v = 0; v <
nvars; ++v )
10313 nvars = consdata->nvars;
10328 if( nobjvars == 0 )
10343 if( conshdlrdata->detectcutoffbound && rhsfinite )
10347 primalbound = (consdata->rhs - offset) / scale;
10349 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10355 if( conshdlrdata->detectlowerbound && lhsfinite )
10359 lowerbound = (consdata->lhs - offset) / scale;
10361 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10367 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !lhsfinite)) ||
10368 (conshdlrdata->detectlowerbound && !rhsfinite) )
10377 if( conshdlrdata->detectlowerbound && rhsfinite )
10381 lowerbound = (consdata->rhs - offset) / scale;
10383 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10389 if( conshdlrdata->detectcutoffbound && lhsfinite )
10393 primalbound = (consdata->lhs - offset) / scale;
10395 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10401 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !rhsfinite)) ||
10402 (conshdlrdata->detectlowerbound && !lhsfinite) )
10439 assert(consdata->removedfixings);
10446 if( consdata->nvars == 1 )
10451 else if( consdata->nvars == 2 )
10485 for( v = 0; v < consdata->nvars; ++v )
10515 *minval = -maxresactivity;
10517 *minval = (side - maxresactivity)/val;
10520 *maxval = -minresactivity;
10522 *maxval = (side - minresactivity)/val;
10527 *minval = minresactivity;
10529 *minval = (side - minresactivity)/val;
10532 *maxval = maxresactivity;
10534 *maxval = (side - maxresactivity)/val;
10603 if( consdata->nvars <= 2 )
10604 maxotherlocks = INT_MAX;
10605 else if( consdata->nvars == 3 )
10607 else if( consdata->nvars == 4 )
10613 if( lhsexists && rhsexists && maxotherlocks < INT_MAX )
10618 for(
i = 0;
i < consdata->nvars && bestisint; ++
i )
10630 val = consdata->vals[
i];
10634 if( absval < minabsval )
10635 minabsval = absval;
10636 if( absval > maxabsval )
10637 maxabsval = absval;
10640 if( maxabsval / minabsval > conshdlrdata->maxdualmultaggrquot )
10643 var = consdata->vars[
i];
10647 if( bestpos >= 0 && isint )
10659 val = consdata->vals[
i];
10696 if( agglhs || aggrhs )
10709 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
10716 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
10731 recalculated =
FALSE;
10732 oldmaxresactivity = maxresactivity;
10733 oldminresactivity = minresactivity;
10739 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10740 isminsettoinfinity =
TRUE;
10747 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10748 ismaxsettoinfinity =
TRUE;
10791 recalculated =
FALSE;
10792 oldmaxresactivity = maxresactivity;
10793 oldminresactivity = minresactivity;
10799 recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10806 recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10846 assert(!bestislhs || lhsexists);
10847 assert(bestislhs || rhsexists);
10849 bestvar = consdata->vars[bestpos];
10850 bestval = consdata->vals[bestpos];
10862 for( j = 0; j < consdata->nvars; ++j )
10866 aggrvars[naggrs] = consdata->vars[j];
10867 aggrcoefs[naggrs] = -consdata->vals[j]/consdata->vals[bestpos];
10874 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: too large aggregation coefficients\n");
10887 aggrcoefs[naggrs] =
SCIPfloor(
scip, aggrcoefs[naggrs]+0.5);
10894 aggrconst = (bestislhs ? consdata->lhs/bestval : consdata->rhs/bestval);
10897 assert(naggrs == consdata->nvars-1);
10906 aggregated =
FALSE;
10907 infeasible =
FALSE;
10920 for( j = 0; j < naggrs; ++j )
10930 assert(!infeasiblevartypechg);
10933 assert(!infeasiblevartypechg);
10956 if( !consdata->upgraded )
10971#define CONTWEIGHT 8
11052 lhs = consdata->lhs;
11053 vars = consdata->vars;
11054 vals = consdata->vals;
11055 nvars = consdata->nvars;
11064 for( v = 0; v <
nvars && noddvars < 3; ++v )
11079 if( noddvars == 0 )
11091 if( noddvars == 1 )
11095 SCIPdebugMsg(
scip,
"linear constraint <%s>: try fixing variable <%s> to <%g>\n",
11115 else if( noddvars == 2 )
11124 SCIPdebugMsg(
scip,
"linear constraint <%s>: try aggregation of variables <%s> and <%s>\n",
11128 lhsodd ? 1.0 : 0.0, &infeasible, &redundant, &aggregated) );
11169 while( success && consdata->nvars >= 1 );
11196 if( varcont1 != varcont2 )
11203 else if( varcont2 )
11206 value =
REALABS(consdata->vals[ind2]) -
REALABS(consdata->vals[ind1]);
11209 return (value > 0 ? +1 : (value < 0 ? -1 : 0));
11246 nvars = consdata->nvars;
11252 lhs = consdata->lhs;
11253 rhs = consdata->rhs;
11262 vals = consdata->vals;
11263 vars = consdata->vars;
11271 for( v =
nvars - 1; v >= 0; --v )
11277 secondminval = minval;
11280 else if( secondminval > vals[v] || secondminval ==
SCIP_INVALID )
11281 secondminval = vals[v];
11295 for( v =
nvars - 1; v >= 0; --v )
11299 (*nchgcoefs) +=
nvars;
11382 *infeasible =
FALSE;
11394 nvars = consdata->nvars;
11418 consdata->normalized =
FALSE;
11426 if( !consdata->normalized )
11429 lhs = consdata->lhs;
11430 rhs = consdata->rhs;
11445 if( haslhs && hasrhs )
11451 assert(haslhs != hasrhs);
11467 consdata->indexsorted =
FALSE;
11468 consdata->coefsorted =
FALSE;
11470 vars = consdata->vars;
11471 vals = consdata->vals;
11494 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
11497 if( isminsettoinfinity || ismaxsettoinfinity )
11502 assert(maxact > minact);
11508 side = haslhs ? lhs : rhs;
11509 minactsub = minact;
11510 maxactsub = maxact;
11579 for(
w = 0;
w < v; ++
w )
11587 maxactsub -= ub * vals[
w];
11588 minactsub -= lb * vals[
w];
11589 assert(maxactsub > minactsub);
11620 maxactsub -= ub * vals[0];
11621 minactsub -= lb * vals[0];
11625 maxactsub -= lb * vals[0];
11626 minactsub -= ub * vals[0];
11628 assert(maxactsub > minactsub);
11633 allcoefintegral =
TRUE;
11636 for( ; v <
nvars - 1; ++v )
11643 allcoefintegral =
FALSE;
11662 maxactsub -= ub * vals[v];
11663 minactsub -= lb * vals[v];
11667 maxactsub -= lb * vals[v];
11668 minactsub -= ub * vals[v];
11685 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11686 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11689 if( offsetv == -1 && (rredundant || lredundant) )
11715 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",
11716 v,
nvars, minactsub, maxactsub, redundant, hasrhs, siderest, gcd, offsetv);
11723 rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11724 lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11727 if( v <
nvars && numericsok && (redundant || (offsetv == -1 && (rredundant || lredundant))) )
11748 tmpmaxactsub += ub * vals[
w];
11749 tmpminactsub += lb * vals[
w];
11753 tmpmaxactsub += lb * vals[
w];
11754 tmpminactsub += ub * vals[
w];
11756 assert(tmpmaxactsub >= tmpminactsub);
11776 (haslhs && tmpmaxactsub < siderest &&
SCIPisFeasGE(
scip, tmpminactsub, siderest - gcd)));
11779 SCIPdebugMsg(
scip,
"removing %d last variables from constraint <%s>, because they never change anything on the feasibility of this constraint\n",
11787 (*nchgcoefs) += (
nvars - v);
11795 assert(vals == consdata->vals);
11810 rhs = consdata->rhs;
11817 lhs = consdata->lhs;
11828 nvars = consdata->nvars;
11831 allcoefintegral =
TRUE;
11835 for(
w = offsetv + 1;
w <
nvars; ++
w )
11844 if( offsetv >= 0 && gcd == 1 )
11854 for( v =
nvars - 1; v > offsetv; --v )
11862 allcoefintegral =
FALSE;
11888 if( candpos == -1 )
11898 assert(v > offsetv || candpos > offsetv);
11904 candpos =
nvars - 1;
11907 if( gcd > 1 && allcoefintegral && !redundant )
11910 allcoefintegral =
FALSE;
11914 if( offsetv >= 0 && gcd > 1 && allcoefintegral )
11925 for(
w = offsetv + 1;
w <
nvars; ++
w )
11943 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
11950 if( restcoef > rest )
11951 newcoef = vals[candpos] - restcoef + gcd;
11953 newcoef = vals[candpos] - restcoef;
11958 if( rest == 0 || restcoef < rest )
11959 newcoef = vals[candpos] - restcoef;
11961 newcoef = vals[candpos] - restcoef + gcd;
11971 notchangable =
TRUE;
12012 for(
w = offsetv;
w >= 0; --
w )
12018 (*nchgcoefs) += (offsetv + 1);
12021 if( !notchangable )
12025 assert(vals == consdata->vals);
12031 nvars = consdata->nvars;
12036 lhs = consdata->lhs;
12037 rhs = consdata->rhs;
12051 allcoefintegral =
TRUE;
12053 for( v =
nvars - 1; v >= 0; --v )
12058 allcoefintegral =
FALSE;
12075 if( allcoefintegral )
12086 for( v =
nvars - 1; v >= 0; --v )
12122 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the right hand side down\n");
12127 for( v =
nvars - 1; v >= 0; --v )
12164 if( allcoefintegral )
12179 for( v =
nvars - 1; v >= 0; --v )
12227 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the left hand side down\n");
12232 for( v =
nvars - 1; v >= 0; --v )
12270 assert(vals == consdata->vals);
12275 rhs = consdata->rhs;
12276 lhs = consdata->lhs;
12283 nvars = consdata->nvars;
12287 allcoefintegral =
TRUE;
12290 for( v =
nvars - 1; v >= 0; --v )
12297 if( !allcoefintegral )
12317 SCIPdebug( oldnchgcoefs = *nchgcoefs; )
12318 SCIPdebug( oldnchgsides = *nchgsides; )
12333 for( v =
nvars - 1; v >= 0; --v )
12340 if( foundbin == -1 )
12368 foundbin =
nvars - 1;
12371 if( gcd == 1 || foundbin == -1)
12374 assert((onlybin && gcd == -1) || (!onlybin && gcd > 1));
12382 for( v = foundbin; v >= 0; --v )
12411 if( candpos == -1 )
12419 if( onlybin && v == foundbin - 1 )
12420 candpos2 = foundbin;
12425 if( onlybin && candpos == v + 1 && candpos2 == v + 2 )
12430 candpos = candpos2;
12473 if( vals[candpos] < 0 )
12475 restcoef = ((
SCIP_Longint)(vals[candpos] - feastol)) % gcd;
12480 restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
12494 if( restcoef > rest )
12495 newcoef = vals[candpos] - restcoef + gcd;
12497 newcoef = vals[candpos] - restcoef;
12509 if( rest == 0 || restcoef < rest )
12510 newcoef = vals[candpos] - restcoef;
12512 newcoef = vals[candpos] - restcoef + gcd;
12516 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));
12533 assert(vals == consdata->vals);
12540 rhs = consdata->rhs;
12541 lhs = consdata->lhs;
12545 nvars = consdata->nvars;
12547 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));
12549 while(
nvars >= 2 );
12569 int* diffidx0minus1,
12570 int* diffidx1minus0,
12572 int commonidxweight,
12573 int diffidx0minus1weight,
12574 int diffidx1minus0weight,
12605 assert(nvarscommon >= 1);
12606 assert(commonidxweight >= nvarscommon);
12613 *infeasible =
FALSE;
12620 assert(consdata0->nvars >= 1);
12622 assert(diffidx0minus1weight >= consdata0->nvars - nvarscommon);
12627 assert(consdata1->nvars >= 1);
12629 assert(diffidx1minus0weight >= consdata1->nvars - nvarscommon);
12631 *aggregated =
FALSE;
12637 bestvarweight = commonidxweight + diffidx0minus1weight;
12638 bestnvars = consdata0->nvars;
12640 bestscalarsum = 0.0;
12641 commonvarlindependent =
TRUE;
12642 for( v = 0; v < nvarscommon; ++v )
12644 assert(consdata0->vars[commonidx0[v]] == consdata1->vars[commonidx1[v]]);
12645 a = consdata1->vals[commonidx1[v]];
12646 b = -consdata0->vals[commonidx0[v]];
12652 varweight = diffidx0minus1weight + diffidx1minus0weight;
12653 nvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12655 betterscalarsum = (scalarsum < bestscalarsum);
12656 for(
i = 0;
i < nvarscommon
12657 && (varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum)); ++
i )
12659 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12666 if( varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum) )
12669 bestvarweight = varweight;
12671 bestscalarsum = scalarsum;
12678 if( commonvarlindependent && v > 0 )
12680 consdata1->vals[commonidx1[v]] * consdata0->vals[commonidx0[0]],
12681 consdata1->vals[commonidx1[0]] * consdata0->vals[commonidx0[v]]);
12698 if( consdata1->vals[commonidx1[bestv]] > 0.0 )
12700 a = consdata1->vals[commonidx1[bestv]];
12701 b = -consdata0->vals[commonidx0[bestv]];
12705 a = -consdata1->vals[commonidx1[bestv]];
12706 b = consdata0->vals[commonidx0[bestv]];
12715 assert(commonvarlindependent);
12716 if( consdata1->vals[commonidx1[0]] > 0.0 )
12718 a = consdata1->vals[commonidx1[0]];
12719 b = -consdata0->vals[commonidx0[0]];
12723 a = -consdata1->vals[commonidx1[0]];
12724 b = consdata0->vals[commonidx0[0]];
12745 SCIPdebug( bestvarweight = diffidx0minus1weight + diffidx1minus0weight; )
12746 bestnvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12749 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> := %.15g*<%s> + %.15g*<%s> -> nvars: %d -> %d, weight: %d -> %d\n",
12751 consdata0->nvars, bestnvars, commonidxweight + diffidx0minus1weight, bestvarweight);
12761 if( !commonvarlindependent )
12763 for(
i = 0;
i < nvarscommon; ++
i )
12765 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12766 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12768 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12771 assert(newnvars < bestnvars);
12772 newvars[newnvars] = consdata0->vars[commonidx0[
i]];
12773 newvals[newnvars] = aggrcoef;
12782 for(
i = 0;
i < nvarscommon; ++
i )
12784 assert(0 <= commonidx0[
i] && commonidx0[
i] < consdata0->nvars);
12785 assert(0 <= commonidx1[
i] && commonidx1[
i] < consdata1->nvars);
12787 aggrcoef =
a * consdata0->vals[commonidx0[
i]] +
b * consdata1->vals[commonidx1[
i]];
12794 for(
i = 0;
i < consdata0->nvars - nvarscommon; ++
i )
12796 assert(0 <= diffidx0minus1[
i] && diffidx0minus1[
i] < consdata0->nvars);
12798 aggrcoef =
a * consdata0->vals[diffidx0minus1[
i]];
12800 assert(newnvars < bestnvars);
12801 newvars[newnvars] = consdata0->vars[diffidx0minus1[
i]];
12802 newvals[newnvars] = aggrcoef;
12807 for(
i = 0;
i < consdata1->nvars - nvarscommon; ++
i )
12809 assert(0 <= diffidx1minus0[
i] && diffidx1minus0[
i] < consdata1->nvars);
12811 aggrcoef =
b * consdata1->vals[diffidx1minus0[
i]];
12813 assert(newnvars < bestnvars);
12814 newvars[newnvars] = consdata1->vars[diffidx1minus0[
i]];
12815 newvals[newnvars] = aggrcoef;
12818 assert(newnvars == bestnvars);
12826 newlhs =
a * consdata0->lhs +
b * consdata1->lhs;
12830 newrhs =
a * consdata0->rhs +
b * consdata1->rhs;
12843 newconsdata->upgraded = consdata0->upgraded;
12856 if( !consdata0->upgraded )
12857 (*nchgcoefs) += consdata0->nvars + consdata1->nvars - nvarscommon;
12858 *aggregated =
TRUE;
12902 assert(consdata1->indexsorted);
12903 assert(consdata2->indexsorted);
12913 if( consdata1->nvars != consdata2->nvars )
12917 for(
i = 0;
i < consdata1->nvars; ++
i )
12919 if( consdata1->vars[
i] != consdata2->vars[
i] )
12937 for(
i = 0;
i < consdata1->nvars; ++
i )
12939 SCIP_Real scale = consdata2->vals[
i] / consdata1->vals[
i];
12941 if( minscale > scale )
12949 if( maxscale < scale )
12979 assert(consdata->nvars > 0);
12981 assert(consdata->indexsorted);
12988 return SCIPhashFour(consdata->nvars, minidx, mididx, maxidx);
13006 return (((
unsigned int)consdata->upgraded)<<31) + (
unsigned int)
SCIPconsGetPos(cons);
13020 int* nparallelconss
13024 unsigned int querykey;
13026 *nparallelconss = 0;
13033 if( conskey < querykey )
13035 parallelconss[(*nparallelconss)++] = *querycons;
13036 *querycons = parallelcons;
13037 querykey = conskey;
13041 parallelconss[(*nparallelconss)++] = parallelcons;
13052 if( *querycons == parallelcons )
13088 int nparallelconss;
13101 hashtablesize = nconss;
13103 hashGetKeyLinearcons, hashKeyEqLinearcons, hashKeyValLinearcons, (
void*)
scip) );
13108 for(
c = 0;
c < nconss; ++
c )
13130 assert(consdata0->indexsorted);
13139 if( nparallelconss != 0 )
13149 lhs = consdata0->lhs;
13150 rhs = consdata0->rhs;
13152 for(
i = 0;
i < nparallelconss; ++
i )
13158 consdel = parallelconss[
i];
13172 assert(consdata0->nvars >= 1 && consdata0->nvars == consdatadel->nvars);
13174 assert(consdatadel->indexsorted);
13175 assert(consdata0->vars[0] == consdatadel->vars[0]);
13177 scale = consdata0->vals[0] / consdatadel->vals[0];
13185 assert(consdata0->validmaxabsval);
13186 assert(consdatadel->validmaxabsval);
13188 SCIP_Real scale0 = 1.0 / consdata0->maxabsval;
13191 for( k = 0; k < consdata0->nvars; ++k )
13193 assert(
SCIPisEQ(
scip, scale0 * consdata0->vals[k], scaledel * consdatadel->vals[k]));
13201 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with equal coefficients into single ranged row\n",
13207 lhs =
MAX(scale * consdatadel->lhs, lhs);
13210 rhs =
MIN(scale * consdatadel->rhs, rhs);
13215 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with negated coefficients into single ranged row\n",
13221 lhs =
MAX(scale * consdatadel->rhs, lhs);
13224 rhs =
MIN(scale * consdatadel->lhs, rhs);
13231 assert( ! consdata0->upgraded || consdatadel->upgraded );
13233 if( !consdatadel->upgraded )
13247 rhs = (lhs + rhs)/2;
13256 if( consdata0->changed &&
SCIPconsGetPos(cons0) < *firstchange )
13262#ifdef SCIP_MORE_DEBUG
13295 int* diffidx0minus1;
13296 int* diffidx1minus0;
13297 uint64_t possignature0;
13298 uint64_t negsignature0;
13301 int diffidx1minus0size;
13309 assert(firstchange <= chkind);
13316 cons0 = conss[chkind];
13323 assert(consdata0->nvars >= 1);
13324 cons0isequality =
SCIPisEQ(
scip, consdata0->lhs, consdata0->rhs);
13331 possignature0 = consdata0->possignature;
13332 negsignature0 = consdata0->negsignature;
13339 diffidx1minus0size = consdata0->nvars;
13341 cons0lhs = consdata0->lhs;
13342 cons0rhs = consdata0->rhs;
13343 cons0upgraded = consdata0->upgraded;
13346 cons0changed = consdata0->changed;
13347 consdata0->changed =
FALSE;
13348 for(
c = (cons0changed ? 0 : firstchange);
c < chkind && !(*cutoff) && conss[chkind] !=
NULL; ++
c )
13352 uint64_t possignature1;
13353 uint64_t negsignature1;
13365 int commonidxweight;
13366 int diffidx0minus1weight;
13367 int diffidx1minus0weight;
13371 assert(cons0lhs == consdata0->lhs);
13372 assert(cons0rhs == consdata0->rhs);
13373 assert(cons0upgraded == consdata0->upgraded);
13378 if( cons1 ==
NULL )
13392 if( !cons0changed && !consdata1->changed )
13397 if( cons0upgraded && consdata1->upgraded )
13400 assert(consdata1->nvars >= 1);
13407 possignature1 = consdata1->possignature;
13408 negsignature1 = consdata1->negsignature;
13411 coefsequal = (possignature0 == possignature1) && (negsignature0 == negsignature1);
13412 coefsnegated = (possignature0 == negsignature1) && (negsignature0 == possignature1);
13413 cons0dominateslhs =
SCIPisGE(
scip, cons0lhs, consdata1->lhs)
13414 && ((possignature0 | possignature1) == possignature1)
13415 && ((negsignature0 | negsignature1) == negsignature0);
13416 cons1dominateslhs =
SCIPisGE(
scip, consdata1->lhs, cons0lhs)
13417 && ((possignature0 | possignature1) == possignature0)
13418 && ((negsignature0 | negsignature1) == negsignature1);
13419 cons0dominatesrhs =
SCIPisLE(
scip, cons0rhs, consdata1->rhs)
13420 && ((possignature0 | possignature1) == possignature0)
13421 && ((negsignature0 | negsignature1) == negsignature1);
13422 cons1dominatesrhs =
SCIPisLE(
scip, consdata1->rhs, cons0rhs)
13423 && ((possignature0 | possignature1) == possignature1)
13424 && ((negsignature0 | negsignature1) == negsignature0);
13425 cons1isequality =
SCIPisEQ(
scip, consdata1->lhs, consdata1->rhs);
13426 tryaggregation = (cons0isequality || cons1isequality) && (maxaggrnormscale > 0.0);
13427 if( !cons0dominateslhs && !cons1dominateslhs && !cons0dominatesrhs && !cons1dominatesrhs
13428 && !coefsequal && !coefsnegated && !tryaggregation )
13432 if( tryaggregation && consdata1->nvars > diffidx1minus0size )
13435 diffidx1minus0size = consdata1->nvars;
13461 commonidxweight = 0;
13463 diffidx0minus1weight = 0;
13465 diffidx1minus0weight = 0;
13468 while( (v0 < consdata0->
nvars || v1 < consdata1->
nvars)
13469 && (cons0dominateslhs || cons1dominateslhs || cons0dominatesrhs || cons1dominatesrhs
13470 || coefsequal || coefsnegated || tryaggregation) )
13478 if( v0 < consdata0->
nvars && v1 < consdata1->
nvars )
13479 varcmp =
SCIPvarCompare(consdata0->vars[v0], consdata1->vars[v1]);
13480 else if( v0 < consdata0->
nvars )
13489 var = consdata0->vars[v0];
13490 val0 = consdata0->vals[v0];
13492 if( tryaggregation )
13494 diffidx0minus1[nvars0minus1] = v0;
13499 coefsequal =
FALSE;
13500 coefsnegated =
FALSE;
13505 var = consdata1->vars[v1];
13507 val1 = consdata1->vals[v1];
13508 if( tryaggregation )
13510 diffidx1minus0[nvars1minus0] = v1;
13515 coefsequal =
FALSE;
13516 coefsnegated =
FALSE;
13521 assert(consdata0->vars[v0] == consdata1->vars[v1]);
13522 var = consdata0->vars[v0];
13523 val0 = consdata0->vals[v0];
13524 val1 = consdata1->vals[v1];
13525 if( tryaggregation )
13527 commonidx0[nvarscommon] = v0;
13528 commonidx1[nvarscommon] = v1;
13534 coefsequal = coefsequal && (
SCIPisEQ(
scip, val0, val1));
13535 coefsnegated = coefsnegated && (
SCIPisEQ(
scip, val0, -val1));
13552 cons0dominatesrhs =
FALSE;
13553 cons1dominateslhs =
FALSE;
13557 cons0dominateslhs =
FALSE;
13558 cons1dominatesrhs =
FALSE;
13565 cons0dominateslhs =
FALSE;
13566 cons1dominatesrhs =
FALSE;
13570 cons0dominatesrhs =
FALSE;
13571 cons1dominateslhs =
FALSE;
13577 if( coefsequal || coefsnegated )
13592 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with %s coefficients into single ranged row\n",
13600 lhs =
MAX(consdata0->lhs, consdata1->lhs);
13601 rhs =
MIN(consdata0->rhs, consdata1->rhs);
13606 lhs =
MAX(consdata0->lhs, -consdata1->rhs);
13607 rhs =
MIN(consdata0->rhs, -consdata1->lhs);
13618 if( consdata0->upgraded )
13620 assert(!consdata1->upgraded);
13623 consdatastay = consdata1;
13627 consdatadel = consdata0;
13628 consinddel = chkind;
13634 consdatastay = consdata0;
13638 consdatadel = consdata1;
13645 if( !consdata0->upgraded )
13647 assert(consstay == cons0);
13648 cons0lhs = consdata0->lhs;
13649 cons0rhs = consdata0->rhs;
13655 assert( !consdatastay->upgraded );
13658 conss[consinddel] =
NULL;
13659 if( !consdatadel->upgraded )
13667 if( cons1dominateslhs && (!cons0isequality || cons1dominatesrhs ||
SCIPisInfinity(
scip, consdata0->rhs) ) )
13670 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13687 cons0lhs = consdata0->lhs;
13688 cons0isequality =
FALSE;
13689 if( !consdata0->upgraded )
13698 else if( cons0dominateslhs && (!cons1isequality || cons0dominatesrhs ||
SCIPisInfinity(
scip, consdata1->rhs)) )
13701 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13718 cons1isequality =
FALSE;
13719 if( !consdata1->upgraded )
13728 if( cons1dominatesrhs && (!cons0isequality || cons1dominateslhs ||
SCIPisInfinity(
scip, -consdata0->lhs)) )
13731 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13748 cons0rhs = consdata0->rhs;
13749 cons0isequality =
FALSE;
13750 if( !consdata0->upgraded )
13759 else if( cons0dominatesrhs && (!cons1isequality || cons0dominateslhs ||
SCIPisInfinity(
scip, -consdata1->lhs)) )
13762 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13779 cons1isequality =
FALSE;
13780 if( !consdata1->upgraded )
13796 conss[chkind] =
NULL;
13797 if( !consdata0->upgraded )
13812 if( !consdata1->upgraded )
13825 if( tryaggregation )
13829 assert(consdata0->nvars == nvarscommon + nvars0minus1);
13830 assert(consdata1->nvars == nvarscommon + nvars1minus0);
13832 aggregated =
FALSE;
13833 if( cons1isequality && !consdata0->upgraded && commonidxweight > diffidx1minus0weight )
13837 nvarscommon, commonidxweight, diffidx0minus1weight, diffidx1minus0weight, maxaggrnormscale,
13838 nchgcoefs, &aggregated,
cutoff) );
13848 conss[chkind] =
NULL;
13851 if( !aggregated && cons0isequality && !consdata1->upgraded && commonidxweight > diffidx0minus1weight )
13855 nvarscommon, commonidxweight, diffidx1minus0weight, diffidx0minus1weight, maxaggrnormscale,
13856 nchgcoefs, &aggregated,
cutoff) );
13931 if( singlevarstuffing )
13934 &isminsettoinfinity, &ismaxsettoinfinity);
13940 isminsettoinfinity =
FALSE;
13941 ismaxsettoinfinity =
FALSE;
13949 rhs = -consdata->lhs;
13951 maxactivity = -minactivity;
13952 ismaxsettoinfinity = isminsettoinfinity;
13957 rhs = consdata->rhs;
13961 nvars = consdata->nvars;
13962 vars = consdata->vars;
13963 vals = consdata->vals;
13966 if( singletonstuffing )
13968 for( v = 0; v <
nvars; ++v )
13984 assert(singletonstuffing);
13992 mincondactivity = 0.0;
13993 maxcondactivity = 0.0;
13995 for( v = 0; v <
nvars; ++v )
14001 val = factor * vals[v];
14018 maxcondactivity += val * lb;
14019 mincondactivity += val * lb;
14020 swapped[v] =
FALSE;
14021 ratios[nsingletons] =
obj / val;
14022 varpos[nsingletons] = v;
14037 maxcondactivity += val * ub;
14038 mincondactivity += val * ub;
14040 ratios[nsingletons] =
obj / val;
14041 varpos[nsingletons] = v;
14058 maxcondactivity += val * lb;
14059 mincondactivity += val * lb;
14076 maxcondactivity += val * ub;
14077 mincondactivity += val * ub;
14093 maxcondactivity += val * ub;
14094 mincondactivity += val * lb;
14098 maxcondactivity += val * lb;
14099 mincondactivity += val * ub;
14103 if( tryfixing && nsingletons > 0 && (
SCIPisGT(
scip, rhs, maxcondactivity) ||
SCIPisLE(
scip, rhs, mincondactivity)) )
14108 int oldnfixedvars = *nfixedvars;
14114 for( v = 0; v < nsingletons; ++v )
14118 val = factor * vals[idx];
14123 assert((val < 0) == swapped[idx]);
14138 delta = -(lb - ub) * val;
14140 delta = (ub - lb) * val;
14190 maxcondactivity += delta;
14191 mincondactivity += delta;
14195 if( *nfixedvars - oldnfixedvars > 0 )
14197 SCIPdebugMsg(
scip,
"### stuffing fixed %d variables\n", *nfixedvars - oldnfixedvars);
14236 if( singlevarstuffing && !ismaxsettoinfinity )
14241 int bestindex = -1;
14242 int bestuplocks = 0;
14243 int bestdownlocks = 1;
14246 SCIPdebug(
int oldnfixedvars = *nfixedvars; )
14247 SCIPdebug(
int oldnchgbds = *nchgbds; )
14250 for( v = 0; v <
nvars; ++v )
14254 val = factor * vals[v];
14282 if( ratio > bestratio || ( downlocks == 0 && ratio == bestratio && ( bestdownlocks > 0
14286 if( bestindex != -1 )
14289 if( bestuplocks > 1 )
14296 secondbestratio = bestratio;
14299 bestdownlocks = downlocks;
14300 bestuplocks = uplocks;
14307 if( bestdownlocks > 0 && bestuplocks > 1 )
14322 if( ratio > secondbestratio )
14324 secondbestratio = ratio;
14330 if( bestindex != -1 && bestdownlocks == 0 )
14337 val = factor * vals[bestindex];
14350 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * -val);
14355 bounddelta =
SCIPceil(
scip, (maxactivity - rhs)/-val);
14359 bounddelta = (maxactivity - rhs)/-val;
14361 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14387 SCIP_Real activitydelta = (maxactivity - rhs) - (bestvarfloor * val);
14396 bounddelta = (maxactivity - rhs)/val;
14398 tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14427 for( v = 0; v <
nvars; ++v )
14435 SCIPdebugMsg(
scip,
"<= %g\n", factor > 0 ? consdata->rhs : -consdata->lhs);
14437 for( v = 0; v <
nvars; ++v )
14439 if( v == bestindex )
14442 if( factor * vals[v] < 0 )
14462 SCIPdebug(
SCIPdebugMsg(
scip,
"### new stuffing fixed %d vars, tightened %d bounds\n", *nfixedvars - oldnfixedvars, *nchgbds - oldnchgbds); )
14526 if( nbinvars ==
nvars )
14531 nintvars =
nvars - ncontvars;
14546 for( v = 0; v <
nvars; ++v )
14558 for( v = 0; v < ncontvars; v++ )
14565 var =
vars[v + nintvars - nbinvars];
14587 for(
c = 0;
c < nconss; ++
c )
14614 for(
i = 0;
i < consdata->nvars; ++
i )
14618 var = consdata->vars[
i];
14623 assert(0 <= contv && contv < ncontvars);
14624 isimplint[contv] =
FALSE;
14637 hasimpliedpotential =
FALSE;
14640 for(
i = 0;
i < consdata->nvars; ++
i )
14654 var = consdata->vars[
i];
14656 val = consdata->vals[
i];
14671 isminsettoinfinity =
TRUE;
14672 ismaxsettoinfinity =
TRUE;
14678 &ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
14684 assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
14699 newredlb = redlb[arrayindex];
14700 newredub = redub[arrayindex];
14706 nlocksdown[arrayindex] += nlockspos;
14707 newredlb = (isminsettoinfinity ?
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14712 nlocksup[arrayindex] += nlockspos;
14713 newredub = (ismaxsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14721 nlocksup[arrayindex] += nlockspos;
14722 newredub = (isminsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14727 nlocksdown[arrayindex] += nlockspos;
14728 newredlb = (ismaxsettoinfinity ?
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14742 redlb[arrayindex] =
MAX(redlb[arrayindex], newredlb);
14743 redub[arrayindex] =
MIN(redub[arrayindex], newredub);
14750 assert(nconscontvars < ncontvars);
14752 conscontvars[nconscontvars] =
var;
14756 assert(0 <= contv && contv < ncontvars);
14757 hasimpliedpotential = hasimpliedpotential || isimplint[contv];
14762 if( hasimpliedpotential )
14764 if( nconscontvars > 1 || !integralcoefs )
14769 for(
i = 0;
i < nconscontvars;
i++ )
14773 assert(0 <= contv && contv < ncontvars);
14774 isimplint[contv] =
FALSE;
14788 assert(nconscontvars == 1);
14789 assert(0 <= contvarpos && contvarpos < consdata->
nvars);
14790 var = consdata->vars[contvarpos];
14791 val = consdata->vals[contvarpos];
14793 assert(0 <= contv && contv < ncontvars);
14794 assert(isimplint[contv]);
14798 isimplint[contv] =
FALSE;
14804 if(
obj * val >= 0.0 && lhsexists )
14809 if(
obj * val <= 0.0 && rhsexists )
14821 for( v = 0; v <
nvars; ++v )
14851 SCIPdebugMsg(
scip,
"variable <%s> only locked down in linear constraints: dual presolve <%s>[%.15g,%.15g] <= %.15g\n",
14858 redub[v] =
MIN(redub[v], ub);
14880 SCIPdebugMsg(
scip,
"variable <%s> only locked up in linear constraints: dual presolve <%s>[%.15g,%.15g] >= %.15g\n",
14887 redlb[v] =
MAX(redlb[v], lb);
14896 for( v = nintvars - nbinvars; v <
nvars; ++v )
14907 assert(0 <= v - nintvars + nbinvars && v - nintvars + nbinvars < ncontvars);
14911 if( isimplint[v - nintvars + nbinvars]
14927 SCIPdebugMsg(
scip,
"dual presolve: declare continuous variable <%s>[%g,%g] implied integral\n",
14972 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
14974 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n",
sol ==
NULL ?
"LP" :
"relaxation");
14982 for(
c = 0;
c < nusefulconss; ++
c )
15048 nlocvars = consdata->nvars;
15053 for(
i = 0;
i < nlocvars; ++
i )
15055 vars[
i] = consdata->vars[
i];
15056 vals[
i] = consdata->vals[
i];
15060 lhs = consdata->lhs - constant;
15061 rhs = consdata->rhs - constant;
15071 for(
i = 0;
i < nlocvars; ++
i )
15079 cons, lhs, rhs, success) );
15146 conshdlrdata->naddconss = 0;
15149 for(
c = 0;
c < nconss; ++
c )
15174 for(
c = nconss - 1;
c >= 0; --
c )
15181 if( consdata->eventdata !=
NULL )
15255 for(
c = 0;
c < nconss;
c++ )
15274 rhs = consdata->rhs;
15275 lhs = consdata->lhs;
15279 for(
i = 0;
i < consdata->nvars;
i++ )
15285 if( consdata->nvars == 0 )
15305 if( consdata->nvars == 1 )
15315 if( consdata->nvars == 2 &&
SCIPisEQ(
scip, lhs, rhs) )
15325 if( consdata->nvars == 2 )
15329 &&
SCIPisEQ(
scip, consdata->vals[0], -consdata->vals[1]) )
15359 scale =
REALABS(consdata->vals[0]);
15362 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15369 if( consdata->vals[
i] < 0.0 )
15377 b = rhs/scale + nnegbinvars;
15398 b = rhs/scale + nnegbinvars;
15423 b = lhs/scale + nnegbinvars;
15453 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15461 b -= consdata->vals[
i];
15481 for(
i = 0;
i < consdata->nvars && !matched;
i++ )
15486 SCIPdebugMsg(
scip,
"classified as %s: ", matched ?
"BINPACKING" :
"KNAPSACK");
15509 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15536 for(
i = 0;
i < consdata->nvars && !unmatched;
i++ )
15569#ifdef SCIP_STATISTIC
15580#ifdef SCIP_STATISTIC
15588 for(
c = 0;
c < nconss; ++
c )
15598 if( consdata->upgraded )
15605 if(
SCIPisLT(
scip, consdata->maxactdelta, conshdlrdata->maxeasyactivitydelta) )
15610 SCIPstatisticMessage(
"below threshold: %d / %d ratio= %g\n", ngoodconss, nallconss, (100.0 * ngoodconss / nallconss));
15614 for(
c = 0;
c < nconss; ++
c )
15624 if( consdata->upgraded )
15649 for(
c = 0;
c < nconss; ++
c )
15667 for(
c = 0;
c < nconss; ++
c )
15674 if( consdata->row !=
NULL )
15679 if( consdata->nlrow !=
NULL )
15695 if( ncutsadded > 0 )
15698 "(restart) converted %d cuts from the global cut pool into linear constraints\n", ncutsadded);
15750 if( consdata->eventdata !=
NULL )
15779 if( (*consdata)->eventdata !=
NULL )
15821 sourcedata->rhs) );
15828 for(n = targetdata->nvars - 1; n >= 0; --n )
15854 *infeasible =
FALSE;
15856 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
15899 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15900 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15904 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15910 maxbound = glblowerbound + conshdlrdata->maxcardbounddist * (cutoffbound - glblowerbound);
15911 separatecards =
SCIPisLE(
scip, loclowerbound, maxbound);
15919 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15928 else if( ncuts > 0 )
15966 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15967 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
15971 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
15978 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
15987 else if( ncuts > 0 )
16033 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16038 if( objinfeasible )
16040 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
16048 for(
c = 0;
c < nconss && !violated; ++
c )
16083 checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16132 int naddedconss = 0;
16149 tightenbounds =
TRUE;
16154 int tightenboundsfreq;
16159 tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
16160 tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
16161 && ((tightenboundsfreq == 0 &&
depth == 0) || (tightenboundsfreq >= 1 && (
depth % tightenboundsfreq == 0)));
16164 rangedrowpropagation = conshdlrdata->rangedrowpropagation;
16166 rangedrowpropagation = rangedrowpropagation && (
depth <= conshdlrdata->rangedrowmaxdepth);
16167 rangedrowfreq = propfreq * conshdlrdata->rangedrowfreq;
16168 rangedrowpropagation = rangedrowpropagation && (conshdlrdata->rangedrowfreq >= 0)
16169 && ((rangedrowfreq == 0 &&
depth == 0) || (rangedrowfreq >= 1 && (
depth % rangedrowfreq == 0)));
16176 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
16180 conshdlrdata->maxeasyactivitydelta, conshdlrdata->sortvars, &
cutoff, &nchgbds, &naddedconss) );
16187 else if( nchgbds > 0 )
16189 else if( naddedconss > 0 )
16198#define MAXCONSPRESOLROUNDS 10
16221 int firstupgradetry;
16232 oldnfixedvars = *nfixedvars;
16233 oldnaggrvars = *naggrvars;
16234 oldnchgbds = *nchgbds;
16235 oldndelconss = *ndelconss;
16236 oldnupgdconss = *nupgdconss;
16237 oldnchgcoefs = *nchgcoefs;
16238 oldnchgsides = *nchgsides;
16247 firstchange = INT_MAX;
16248 firstupgradetry = INT_MAX;
16254 infeasible =
FALSE;
16264 consdata->lhs = consdata->rhs;
16268 if( consdata->eventdata ==
NULL )
16291 assert(consdata->removedfixings);
16298 if( firstchange == INT_MAX && consdata->changed )
16302 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16303 firstupgradetry =
c;
16306 if( consdata->presolved )
16324 consdata->presolved =
TRUE;
16341 SCIPdebugMsg(
scip,
" -> infeasibility detected during tightening sides\n");
16349 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16366 if( ( consdata->validmaxabsval && consdata->maxabsval >
MAXVALRECOMP )
16367 || ( consdata->validminabsval && consdata->minabsval <
MINVALRECOMP ) )
16375 &isminsettoinfinity, &ismaxsettoinfinity);
16380 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16381 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16387 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16388 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16392 if( !consdata->upgraded )
16398 SCIPdebugMsg(
scip,
"linear constraint <%s> left hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16399 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16401 if( !consdata->upgraded )
16406 SCIPdebugMsg(
scip,
"linear constraint <%s> right hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16407 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16409 if( !consdata->upgraded )
16414 if( consdata->nvars == 0 )
16418 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16424 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16429 if( !consdata->upgraded )
16439 if( conshdlrdata->simplifyinequalities )
16448 if( conshdlrdata->aggregatevariables )
16459 if( conshdlrdata->rangedrowpropagation )
16461 int lastnfixedvars;
16463 lastnfixedvars = *nfixedvars;
16468 if( lastnfixedvars < *nfixedvars )
16479 nfixedvars, nchgbds, &
cutoff) );
16486 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16492 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16497 if( !consdata->upgraded )
16522 if( firstchange == INT_MAX && consdata->changed )
16526 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16527 firstupgradetry =
c;
16535 conshdlrdata->singlevarstuffing, &
cutoff, nfixedvars, nchgbds) );
16538 if( consdata->nvars == 0 )
16542 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16548 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16553 if( !consdata->upgraded )
16566 assert(firstchange >= 0);
16568 if( firstchange < nconss && conshdlrdata->presolusehashing )
16572 ndelconss, nchgsides) );
16575 if( firstchange < nconss && conshdlrdata->presolpairwise )
16579 int firstchangenew;
16582 npaircomparisons = 0;
16583 oldndelconss = *ndelconss;
16584 oldnchgsides = *nchgsides;
16585 oldnchgcoefs = *nchgcoefs;
16591 firstchangenew = -1;
16592 for(
c = 0;
c < nconss; ++
c )
16595 if(
c == firstchange )
16596 firstchangenew = nusefulconss;
16602 usefulconss[nusefulconss] = conss[
c];
16605 firstchange = firstchangenew;
16606 assert(firstchangenew >= 0 && firstchangenew <= nusefulconss);
16611 if( usefulconss[
c] ==
NULL )
16618 &
cutoff, ndelconss, nchgsides, nchgcoefs) );
16620 if( npaircomparisons > conshdlrdata->nmincomparisons )
16622 assert(npaircomparisons > 0);
16623 if( ((*ndelconss - oldndelconss) + (*nchgsides - oldnchgsides)/2.0 + (*nchgcoefs - oldnchgcoefs)/10.0) / ((
SCIP_Real) npaircomparisons) < conshdlrdata->mingainpernmincomp )
16625 oldndelconss = *ndelconss;
16626 oldnchgsides = *nchgsides;
16627 oldnchgcoefs = *nchgcoefs;
16628 npaircomparisons = 0;
16639 if( !
cutoff && firstupgradetry < nconss
16640 && *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
16641 && *nupgdconss == oldnupgdconss && *nchgcoefs == oldnchgcoefs && *nchgsides == oldnchgsides
16668 if( consdata->upgradetried )
16671 if( !consdata->presolved )
16674 consdata->upgradetried =
TRUE;
16680 if( upgdcons !=
NULL )
16689 assert(!consdata->upgraded);
16690 consdata->upgraded =
TRUE;
16696 || !conshdlrdata->presolpairwise
16697 || (conshdlrdata->maxaggrnormscale == 0.0) )
16709 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
16710 || *nupgdconss > oldnupgdconss || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
16751 for(
i = 0;
i < consdata->nvars; ++
i )
16816 const char* consname;
16835 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
16850 char** firstoperator,
16851 char** secondoperator,
16861 *firstoperator =
NULL;
16862 *secondoperator =
NULL;
16868 while( *curr && *success )
16881 if( curr[1] ==
'=' )
16890 if( strncmp(curr,
"[free]", 6) == 0 )
16905 if( *firstoperator ==
NULL )
16907 *firstoperator = curr;
16911 if( *secondoperator !=
NULL )
16916 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
16918 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
16921 else if( strncmp(curr,
"<=", 2) != 0 )
16923 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
16927 *secondoperator = curr;
16937 if( *firstoperator ==
NULL )
16952 int coefssize = 100;
16960 char* lhsstrptr =
NULL;
16961 char* rhsstrptr =
NULL;
16962 char* varstrptr = (
char*)str;
16989 if( ! operatorsuccess )
16997 assert(firstop[1] ==
'=');
16999 if( secondop !=
NULL )
17001 assert(secondop[0] ==
'<' && secondop[1] ==
'=');
17002 lhsstrptr = (
char *)str;
17003 varstrptr = firstop + 2;
17004 rhsstrptr = secondop + 2;
17010 varstrptr = (
char *)str;
17011 rhsstrptr = firstop + 2;
17015 assert(firstop[1] ==
'=');
17018 lhsstrptr = firstop + 2;
17021 assert(firstop[1] ==
'=');
17024 rhsstrptr = firstop + 2;
17025 lhsstrptr = firstop + 2;
17028 assert(strncmp(firstop,
"[free]", 6) == 0);
17034 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
17039 if( lhsstrptr !=
NULL )
17043 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
17048 if( rhsstrptr == lhsstrptr )
17053 if( rhsstrptr !=
NULL && rhsstrptr != lhsstrptr )
17057 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
17071 if( *success && requsize > coefssize )
17074 coefssize = requsize;
17079 assert(!*success || requsize <= coefssize);
17089 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
17108 if( varssize < consdata->
nvars )
17109 (*success) =
FALSE;
17131 (*nvars) = consdata->nvars;
17176 cons = eventdata->cons;
17195 varpos = eventdata->varpos;
17201 val = consdata->vals[varpos];
17220 consdata->presolved =
FALSE;
17224 consdata->rangedrowpropagated = 0;
17232 if( consdata->maxactdeltavar ==
var )
17235 consdata->maxactdeltavar =
NULL;
17239 if( consdata->boundstightened > 0)
17241 switch( eventtype )
17245 consdata->boundstightened = 0;
17249 consdata->boundstightened = 0;
17271 delta =
REALABS(val) * domain;
17273 if( delta > consdata->maxactdelta )
17275 consdata->maxactdelta = delta;
17276 consdata->maxactdeltavar =
var;
17283 consdata->presolved =
FALSE;
17284 consdata->removedfixings =
FALSE;
17285 consdata->rangedrowpropagated = 0;
17288 if( consdata->maxactdeltavar ==
var )
17291 consdata->maxactdeltavar =
NULL;
17299 consdata->presolved =
FALSE;
17308 varpos = eventdata->varpos;
17314 val = consdata->vals[varpos];
17316 consdata->rangedrowpropagated = 0;
17331 consdata->indexsorted =
FALSE;
17333 consdata->coefsorted =
FALSE;
17359 consdata->varsdeleted =
TRUE;
17381 assert(bdchginfos !=
NULL || nbdchginfos == 0);
17399 for(
i = 0;
i < nbdchginfos; ++
i )
17420 if(
i == nbdchginfos )
17433 if( upgdcons !=
NULL )
17469 assert(upgdconsssize > 0);
17507 consdata->checkabsolute =
TRUE;
17535 eventExecLinear,
NULL) );
17539 conflictExecLinear,
NULL) );
17547 consEnfolpLinear, consEnfopsLinear, consCheckLinear, consLockLinear,
17589 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
17593 "maximal number of separation rounds per node (-1: unlimited)",
17597 "maximal number of separation rounds per node in the root node (-1: unlimited)",
17601 "maximal number of cuts separated per separation round",
17605 "maximal number of cuts separated per separation round in the root node",
17609 "should pairwise constraint comparison be performed in presolving?",
17613 "should hash table be used for detecting redundant constraints in advance",
17617 "number for minimal pairwise presolve comparisons",
17621 "minimal gain per minimal pairwise presolve comparisons to repeat pairwise comparison round",
17625 "maximal allowed relative gain in maximum norm for constraint aggregation (0.0: disable constraint aggregation)",
17629 "maximum activity delta to run easy propagation on linear constraint (faster, but numerically less stable)",
17633 "maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for separating knapsack cardinality cuts",
17637 "should all constraints be subject to cardinality cut generation instead of only the ones with non-zero dual value?",
17641 "should presolving search for aggregations in equations",
17645 "should presolving try to simplify inequalities",
17649 "should dual presolving steps be performed?",
17653 "should stuffing of singleton continuous variables be performed?",
17657 "should single variable stuffing be performed, which tries to fulfill constraints using the cheapest variable?",
17660 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
17664 "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)?",
17668 "should presolving try to detect constraints parallel to the objective function defining an upper bound and prevent these constraints from entering the LP?",
17672 "should presolving try to detect constraints parallel to the objective function defining a lower bound and prevent these constraints from entering the LP?",
17676 "should presolving try to detect subsets of constraints parallel to the objective function?",
17680 "should presolving and propagation try to improve bounds, detect infeasibility, and extract sub-constraints from ranged rows and equations?",
17684 "should presolving and propagation extract sub-constraints from ranged rows and equations?",
17688 "maximum depth to apply ranged row propagation",
17692 "frequency for applying ranged row propagation",
17696 "should multi-aggregations only be performed if the constraint can be removed afterwards?",
17700 "maximum coefficient dynamism (ie. maxabsval / minabsval) for primal multiaggregation",
17704 "maximum coefficient dynamism (ie. maxabsval / minabsval) for dual multiaggregation",
17708 "should Cliques be extracted?",
17719 const char* conshdlrname
17734 if( conshdlr ==
NULL )
17810 if( conshdlr ==
NULL )
17824 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
17850 if( requiredsize > nconsvars )
17857 assert(requiredsize == nconsvars);
17864 SCIPerrorMessage(
"while creating constraint <%s> inactive variables lead to an infinite constant\n", name);
17901 if( check || enforce )
17904 for(n = consdata->nvars - 1; n >= 0; --n )
17910 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
17911 local, modifiable, dynamic, removable, stickingatnode) );
17992 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
18000 if( sourcecoefs !=
NULL )
18007 for( v = 0; v <
nvars; ++v )
18020 if( requiredsize >
nvars )
18031 for( v = 0; v <
nvars; ++v )
18041 for( v = 0; v <
nvars && success; ++v )
18063 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
18093 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
18124 if( requiredsize > nconsvars )
18131 assert(requiredsize == nconsvars);
18136 lhs = consdata->lhs;
18137 rhs = consdata->rhs;
18143 if( constant < 0.0 )
18216 for( v = nconsvars - 1; v >= 0; --v )
18266 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
18273 vars = consdata->vars;
18341 return consdata->lhs;
18360 return consdata->rhs;
18413 return consdata->nvars;
18432 return consdata->vars;
18451 return consdata->vals;
18475 if( consdata->row !=
NULL )
18498 if( consdata->row !=
NULL )
18521 if( consdata->row !=
NULL )
18544 if( consdata->row !=
NULL )
18568 return consdata->row;
18658 if( consdata->upgraded )
18662 if( consdata->row !=
NULL )
18666 SCIPerrorMessage(
"cannot upgrade linear constraint that is already stored as row in the LP\n");
18718 for(
i = 0;
i < consdata->nvars; ++
i )
18720 var = consdata->vars[
i];
18721 val = consdata->vals[
i];
18794 poscoeffsum += val;
18796 negcoeffsum += val;
18803 SCIPdebugMsg(
scip,
"upgrading linear constraint <%s> (%d upgrade methods):\n",
18805 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",
18806 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposcont, nnegcont,
18807 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18808 poscoeffsum, negcoeffsum, integral);
18811 for(
i = 0;
i < conshdlrdata->nlinconsupgrades && *upgdcons ==
NULL; ++
i )
18813 if( conshdlrdata->linconsupgrades[
i]->active )
18815 SCIP_CALL( conshdlrdata->linconsupgrades[
i]->linconsupgd(
scip, cons, consdata->nvars,
18816 consdata->vars, consdata->vals, consdata->lhs, consdata->rhs,
18817 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposimplbin, nnegimplbin, nposcont, nnegcont,
18818 ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18819 poscoeffsum, negcoeffsum, integral,
18825 if( *upgdcons !=
NULL )
18850 if( conshdlr ==
NULL )
18854 *infeasible =
FALSE;
18860 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_STRINGEQ(name, reference, retcode)
#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