uint64_t possignature;
213uint64_t negsignature;
219 intminactivityneginf;
220 intminactivityposinf;
221 intmaxactivityneginf;
222 intmaxactivityposinf;
223 intminactivityneghuge;
224 intminactivityposhuge;
225 intmaxactivityneghuge;
226 intmaxactivityposhuge;
227 intglbminactivityneginf;
228 intglbminactivityposinf;
229 intglbmaxactivityneginf;
230 intglbmaxactivityposinf;
231 intglbminactivityneghuge;
232 intglbminactivityposhuge;
233 intglbmaxactivityneghuge;
234 intglbmaxactivityposhuge;
240 unsigned intboundstightened:2;
241 unsigned intrangedrowpropagated:2;
243 unsigned intvalidmaxabsval:1;
244 unsigned intvalidminabsval:1;
245 unsigned intvalidactivities:1;
246 unsigned intvalidminact:1;
247 unsigned intvalidmaxact:1;
248 unsigned intvalidglbminact:1;
249 unsigned intvalidglbmaxact:1;
250 unsigned intpresolved:1;
251 unsigned intremovedfixings:1;
252 unsigned intvalidsignature:1;
253 unsigned intchanged:1;
254 unsigned intnormalized:1;
255 unsigned intupgradetried:1;
256 unsigned intupgraded:1;
257 unsigned intindexsorted:1;
258 unsigned intmerged:1;
259 unsigned intcliquesadded:1;
260 unsigned intimplsadded:1;
261 unsigned intcoefsorted:1;
262 unsigned intvarsdeleted:1;
263 unsigned inthascontvar:1;
264 unsigned inthasnonbinvar:1;
265 unsigned inthasnonbinvalid:1;
266 unsigned intcheckabsolute:1;
278structSCIP_ConshdlrData
289 intlinconsupgradessize;
290 intnlinconsupgrades;
291 inttightenboundsfreq;
323 intrangedrowmaxdepth;
364 unsigned intproprule:8;
380inferinfo.val.asint = i;
391 returninferinfo.val.asint;
400 return(
int) inferinfo.val.asbits.proprule;
409 return(
int) inferinfo.val.asbits.pos;
423assert(pos < (1<<24));
425inferinfo.val.asbits.proprule = (
unsignedint) proprule;
426inferinfo.val.asbits.pos = (
unsignedint) pos;
455assert(conshdlrdata !=
NULL);
456assert(conshdlrdata->nlinconsupgrades <= conshdlrdata->linconsupgradessize);
458 if( num > conshdlrdata->linconsupgradessize )
464conshdlrdata->linconsupgradessize = newsize;
466assert(num <= conshdlrdata->linconsupgradessize);
480assert(consdata !=
NULL);
481assert(consdata->nvars <= consdata->varssize);
483 if( num > consdata->varssize )
490 if( consdata->eventdata !=
NULL)
494consdata->varssize = newsize;
496assert(num <= consdata->varssize);
516assert(linconsupgrade !=
NULL);
517assert(linconsupgd !=
NULL);
520(*linconsupgrade)->linconsupgd = linconsupgd;
521(*linconsupgrade)->priority = priority;
522(*linconsupgrade)->active =
TRUE;
535assert(linconsupgrade !=
NULL);
536assert(*linconsupgrade !=
NULL);
550assert(conshdlrdata !=
NULL);
551assert(eventhdlr !=
NULL);
554(*conshdlrdata)->linconsupgrades =
NULL;
555(*conshdlrdata)->linconsupgradessize = 0;
556(*conshdlrdata)->nlinconsupgrades = 0;
557(*conshdlrdata)->naddconss = 0;
560(*conshdlrdata)->eventhdlr = eventhdlr;
575assert(conshdlrdata !=
NULL);
576assert(*conshdlrdata !=
NULL);
578 for( i = 0; i < (*conshdlrdata)->nlinconsupgrades; ++i )
593 const char* conshdlrname
599assert(conshdlrdata !=
NULL);
600assert(linconsupgd !=
NULL);
601assert(conshdlrname !=
NULL);
603 for( i = conshdlrdata->nlinconsupgrades - 1; i >= 0; --i )
605 if( conshdlrdata->linconsupgrades[i]->linconsupgd == linconsupgd )
608 SCIPwarningMessage(
scip,
"Try to add already known upgrade message for constraint handler %s.\n", conshdlrname);
628assert(conshdlrdata !=
NULL);
629assert(linconsupgrade !=
NULL);
633 for( i = conshdlrdata->nlinconsupgrades;
634i > 0 && conshdlrdata->linconsupgrades[i-1]->priority < linconsupgrade->
priority; --i )
636conshdlrdata->linconsupgrades[i] = conshdlrdata->linconsupgrades[i-1];
638assert(0 <= i && i <= conshdlrdata->nlinconsupgrades);
639conshdlrdata->linconsupgrades[i] = linconsupgrade;
640conshdlrdata->nlinconsupgrades++;
661assert(cons !=
NULL);
662assert(var !=
NULL);
665assert(consdata !=
NULL);
694assert(cons !=
NULL);
695assert(var !=
NULL);
698assert(consdata !=
NULL);
727assert(cons !=
NULL);
728assert(eventhdlr !=
NULL);
731assert(consdata !=
NULL);
733assert(0 <= pos && pos < consdata->nvars);
734assert(consdata->vars !=
NULL);
735assert(consdata->vars[pos] !=
NULL);
737assert(consdata->eventdata !=
NULL);
738assert(consdata->eventdata[pos] ==
NULL);
741consdata->eventdata[pos]->cons = cons;
742consdata->eventdata[pos]->varpos = pos;
747eventhdlr, consdata->eventdata[pos], &consdata->eventdata[pos]->filterpos) );
749consdata->removedfixings = consdata->removedfixings &&
SCIPvarIsActive(consdata->vars[pos]);
766assert(cons !=
NULL);
767assert(eventhdlr !=
NULL);
770assert(consdata !=
NULL);
772assert(0 <= pos && pos < consdata->nvars);
773assert(consdata->vars[pos] !=
NULL);
774assert(consdata->eventdata !=
NULL);
775assert(consdata->eventdata[pos] !=
NULL);
776assert(consdata->eventdata[pos]->cons == cons);
777assert(consdata->eventdata[pos]->varpos == pos);
782eventhdlr, consdata->eventdata[pos], consdata->eventdata[pos]->filterpos) );
801assert(cons !=
NULL);
804assert(consdata !=
NULL);
805assert(consdata->eventdata ==
NULL);
809assert(consdata->eventdata !=
NULL);
813 for( i = 0; i < consdata->nvars; ++i )
833assert(cons !=
NULL);
836assert(consdata !=
NULL);
837assert(consdata->eventdata !=
NULL);
840 for( i = consdata->nvars - 1; i >= 0; --i )
847assert(consdata->eventdata ==
NULL);
868assert(consdata !=
NULL);
869assert(nvars == 0 || vars !=
NULL);
870assert(nvars == 0 || vals !=
NULL);
890(*consdata)->varssize = 0;
891(*consdata)->nvars = nvars;
892(*consdata)->hascontvar =
FALSE;
893(*consdata)->hasnonbinvar =
FALSE;
894(*consdata)->hasnonbinvalid =
TRUE;
895(*consdata)->vars =
NULL;
896(*consdata)->vals =
NULL;
910 for( v = 0; v < (*consdata)->nvars; ++v )
918assert(var !=
NULL);
928varsbuffer[nvars] = var;
929valsbuffer[nvars] = val;
933 if( !(*consdata)->hascontvar )
939(*consdata)->hasnonbinvar =
TRUE;
942(*consdata)->hascontvar =
TRUE;
948(*consdata)->nvars = nvars;
955(*consdata)->varssize = nvars;
962(*consdata)->eventdata =
NULL;
974(*consdata)->row =
NULL;
975(*consdata)->nlrow =
NULL;
976(*consdata)->lhs = lhs;
977(*consdata)->rhs = rhs;
985(*consdata)->maxactdeltavar =
NULL;
986(*consdata)->minactivityneginf = -1;
987(*consdata)->minactivityposinf = -1;
988(*consdata)->maxactivityneginf = -1;
989(*consdata)->maxactivityposinf = -1;
990(*consdata)->minactivityneghuge = -1;
991(*consdata)->minactivityposhuge = -1;
992(*consdata)->maxactivityneghuge = -1;
993(*consdata)->maxactivityposhuge = -1;
998(*consdata)->glbminactivityneginf = -1;
999(*consdata)->glbminactivityposinf = -1;
1000(*consdata)->glbmaxactivityneginf = -1;
1001(*consdata)->glbmaxactivityposinf = -1;
1002(*consdata)->glbminactivityneghuge = -1;
1003(*consdata)->glbminactivityposhuge = -1;
1004(*consdata)->glbmaxactivityneghuge = -1;
1005(*consdata)->glbmaxactivityposhuge = -1;
1006(*consdata)->possignature = 0;
1007(*consdata)->negsignature = 0;
1008(*consdata)->validmaxabsval =
FALSE;
1009(*consdata)->validminabsval =
FALSE;
1010(*consdata)->validactivities =
FALSE;
1011(*consdata)->validminact =
FALSE;
1012(*consdata)->validmaxact =
FALSE;
1013(*consdata)->validglbminact =
FALSE;
1014(*consdata)->validglbmaxact =
FALSE;
1015(*consdata)->boundstightened = 0;
1016(*consdata)->presolved =
FALSE;
1017(*consdata)->removedfixings =
FALSE;
1018(*consdata)->validsignature =
FALSE;
1019(*consdata)->changed =
TRUE;
1020(*consdata)->normalized =
FALSE;
1021(*consdata)->upgradetried =
FALSE;
1022(*consdata)->upgraded =
FALSE;
1023(*consdata)->indexsorted = (nvars <= 1);
1024(*consdata)->merged = (nvars <= 1);
1025(*consdata)->cliquesadded =
FALSE;
1026(*consdata)->implsadded =
FALSE;
1027(*consdata)->coefsorted =
FALSE;
1028(*consdata)->nbinvars = -1;
1029(*consdata)->varsdeleted =
FALSE;
1030(*consdata)->rangedrowpropagated = 0;
1031(*consdata)->checkabsolute =
FALSE;
1040 for( v = 0; v < (*consdata)->nvars; v++ )
1043 if( (*consdata)->vars[v] ==
NULL)
1068assert(consdata !=
NULL);
1069assert(*consdata !=
NULL);
1070assert((*consdata)->varssize >= 0);
1073 if( (*consdata)->row !=
NULL)
1079 if( (*consdata)->nlrow !=
NULL)
1085 for( v = 0; v < (*consdata)->nvars; v++ )
1087assert((*consdata)->vars[v] !=
NULL);
1108assert(consdata !=
NULL);
1117 if( consdata->nvars == 0 )
1150assert(cons !=
NULL);
1153assert(consdata !=
NULL);
1164 if( consdata->nvars == 0 )
1171 for( v = 0; v < consdata->nvars; ++v )
1173 if( consdata->vals !=
NULL)
1175 if( consdata->vals[v] == 1.0 )
1180 else if( consdata->vals[v] == -1.0 )
1185 else if( consdata->nvars > 0 )
1216assert(consdata !=
NULL);
1218consdata->validactivities =
FALSE;
1219consdata->validminact =
FALSE;
1220consdata->validmaxact =
FALSE;
1221consdata->validglbminact =
FALSE;
1222consdata->validglbmaxact =
FALSE;
1223consdata->validmaxabsval =
FALSE;
1224consdata->validminabsval =
FALSE;
1225consdata->hasnonbinvalid =
FALSE;
1233consdata->maxactdeltavar =
NULL;
1234consdata->minactivityneginf = -1;
1235consdata->minactivityposinf = -1;
1236consdata->maxactivityneginf = -1;
1237consdata->maxactivityposinf = -1;
1238consdata->minactivityneghuge = -1;
1239consdata->minactivityposhuge = -1;
1240consdata->maxactivityneghuge = -1;
1241consdata->maxactivityposhuge = -1;
1246consdata->glbminactivityneginf = -1;
1247consdata->glbminactivityposinf = -1;
1248consdata->glbmaxactivityneginf = -1;
1249consdata->glbmaxactivityposinf = -1;
1250consdata->glbminactivityneghuge = -1;
1251consdata->glbminactivityposhuge = -1;
1252consdata->glbmaxactivityneghuge = -1;
1253consdata->glbmaxactivityposhuge = -1;
1264 intpseudoactivityposinf;
1265 intpseudoactivityneginf;
1271pseudoactivityposinf = 0;
1272pseudoactivityneginf = 0;
1274 for( i = consdata->nvars - 1; i >= 0; --i )
1276val = consdata->vals[i];
1281pseudoactivityposinf++;
1283pseudoactivityneginf++;
1290pseudoactivityneginf++;
1292pseudoactivityposinf++;
1295pseudoactivity += val *
bound;
1299 if( pseudoactivityneginf > 0 && pseudoactivityposinf > 0 )
1301 else if( pseudoactivityneginf > 0 )
1303 else if( pseudoactivityposinf > 0 )
1306 returnpseudoactivity;
1321 for( i = consdata->nvars - 1; i >= 0; --i )
1330consdata->validminact =
TRUE;
1333consdata->lastminactivity =
QUAD_TO_DBL(consdata->minactivity);
1348 for( i = consdata->nvars - 1; i >= 0; --i )
1357consdata->validmaxact =
TRUE;
1360consdata->lastmaxactivity =
QUAD_TO_DBL(consdata->maxactivity);
1375 for( i = consdata->nvars - 1; i >= 0; --i )
1384consdata->validglbminact =
TRUE;
1387consdata->lastglbminactivity =
QUAD_TO_DBL(consdata->glbminactivity);
1402 for( i = consdata->nvars - 1; i >= 0; --i )
1411consdata->validglbmaxact =
TRUE;
1414consdata->lastglbmaxactivity =
QUAD_TO_DBL(consdata->glbmaxactivity);
1426assert(consdata !=
NULL);
1427assert(!consdata->validmaxabsval);
1430consdata->validmaxabsval =
TRUE;
1431consdata->maxabsval = 0.0;
1432 for( i = 0; i < consdata->nvars; ++i )
1434absval = consdata->vals[i];
1436 if( absval > consdata->maxabsval )
1437consdata->maxabsval = absval;
1450assert(consdata !=
NULL);
1451assert(!consdata->validminabsval);
1454consdata->validminabsval =
TRUE;
1456 if( consdata->nvars > 0 )
1457consdata->minabsval =
REALABS(consdata->vals[0]);
1459consdata->minabsval = 0.0;
1461 for( i = 1; i < consdata->nvars; ++i )
1463absval = consdata->vals[i];
1465 if( absval < consdata->minabsval )
1466consdata->minabsval = absval;
1478assert(!consdata->hasnonbinvalid);
1479consdata->hasnonbinvar =
FALSE;
1480consdata->hascontvar =
FALSE;
1482 for( v = consdata->nvars - 1; v >= 0; --v )
1488consdata->hasnonbinvar =
TRUE;
1492consdata->hascontvar =
TRUE;
1497assert(consdata->hascontvar || v < 0);
1499consdata->hasnonbinvalid =
TRUE;
1503#ifdef CHECKMAXACTDELTA 1520 for( v = consdata->nvars - 1; v >= 0; --v )
1532delta =
REALABS(consdata->vals[v]) * domain;
1534 if( delta > maxactdelta )
1536maxactdelta = delta;
1543#define checkMaxActivityDelta(scip, consdata) 1556consdata->maxactdelta = 0.0;
1558 if( !consdata->hasnonbinvalid )
1562 if( !consdata->hasnonbinvar )
1564 for( v = consdata->nvars - 1; v >= 0; --v )
1568delta =
REALABS(consdata->vals[v]);
1570 if( delta > consdata->maxactdelta )
1572consdata->maxactdelta = delta;
1573consdata->maxactdeltavar = consdata->vars[v];
1580 for( v = consdata->nvars - 1; v >= 0; --v )
1592consdata->maxactdeltavar = consdata->vars[v];
1597delta =
REALABS(consdata->vals[v]) * domain;
1599 if( delta > consdata->maxactdelta )
1601consdata->maxactdelta = delta;
1602consdata->maxactdeltavar = consdata->vars[v];
1625 int* activityposinf;
1626 int* activityneginf;
1627 int* activityposhuge;
1628 int* activityneghuge;
1636assert(consdata !=
NULL);
1637assert(global || (var !=
NULL));
1638assert(consdata->validactivities);
1643assert(consdata->minactivityneginf >= 0);
1644assert(consdata->minactivityposinf >= 0);
1645assert(consdata->maxactivityneginf >= 0);
1646assert(consdata->maxactivityposinf >= 0);
1647assert(consdata->minactivityneghuge >= 0);
1648assert(consdata->minactivityposhuge >= 0);
1649assert(consdata->maxactivityneghuge >= 0);
1650assert(consdata->maxactivityposhuge >= 0);
1655assert(consdata->glbminactivityneginf >= 0);
1656assert(consdata->glbminactivityposinf >= 0);
1657assert(consdata->glbmaxactivityneginf >= 0);
1658assert(consdata->glbmaxactivityposinf >= 0);
1659assert(consdata->glbminactivityneghuge >= 0);
1660assert(consdata->glbminactivityposhuge >= 0);
1661assert(consdata->glbmaxactivityneghuge >= 0);
1662assert(consdata->glbmaxactivityposhuge >= 0);
1680lastactivity = &(consdata->lastglbminactivity);
1681activityposinf = &(consdata->glbminactivityposinf);
1682activityneginf = &(consdata->glbminactivityneginf);
1683activityposhuge = &(consdata->glbminactivityposhuge);
1684activityneghuge = &(consdata->glbminactivityneghuge);
1685validact = consdata->validglbminact;
1690lastactivity = &(consdata->lastglbmaxactivity);
1691activityposinf = &(consdata->glbmaxactivityneginf);
1692activityneginf = &(consdata->glbmaxactivityposinf);
1693activityposhuge = &(consdata->glbmaxactivityposhuge);
1694activityneghuge = &(consdata->glbmaxactivityneghuge);
1695validact = consdata->validglbmaxact;
1703lastactivity = &(consdata->lastglbmaxactivity);
1704activityposinf = &(consdata->glbmaxactivityposinf);
1705activityneginf = &(consdata->glbmaxactivityneginf);
1706activityposhuge = &(consdata->glbmaxactivityposhuge);
1707activityneghuge = &(consdata->glbmaxactivityneghuge);
1708validact = consdata->validglbmaxact;
1713lastactivity = &(consdata->lastglbminactivity);
1714activityposinf = &(consdata->glbminactivityneginf);
1715activityneginf = &(consdata->glbminactivityposinf);
1716activityposhuge = &(consdata->glbminactivityposhuge);
1717activityneghuge = &(consdata->glbminactivityneghuge);
1718validact = consdata->validglbminact;
1736lastactivity = &(consdata->lastminactivity);
1737activityposinf = &(consdata->minactivityposinf);
1738activityneginf = &(consdata->minactivityneginf);
1739activityposhuge = &(consdata->minactivityposhuge);
1740activityneghuge = &(consdata->minactivityneghuge);
1741validact = consdata->validminact;
1746lastactivity = &(consdata->lastmaxactivity);
1747activityposinf = &(consdata->maxactivityneginf);
1748activityneginf = &(consdata->maxactivityposinf);
1749activityposhuge = &(consdata->maxactivityposhuge);
1750activityneghuge = &(consdata->maxactivityneghuge);
1751validact = consdata->validmaxact;
1759lastactivity = &(consdata->lastmaxactivity);
1760activityposinf = &(consdata->maxactivityposinf);
1761activityneginf = &(consdata->maxactivityneginf);
1762activityposhuge = &(consdata->maxactivityposhuge);
1763activityneghuge = &(consdata->maxactivityneghuge);
1764validact = consdata->validmaxact;
1769lastactivity = &(consdata->lastminactivity);
1770activityposinf = &(consdata->minactivityneginf);
1771activityneginf = &(consdata->minactivityposinf);
1772activityposhuge = &(consdata->minactivityposhuge);
1773activityneghuge = &(consdata->minactivityneghuge);
1774validact = consdata->validminact;
1779oldcontribution = val * oldbound;
1780newcontribution = val * newbound;
1787 if( oldbound > 0.0 )
1789assert((*activityposinf) >= 1);
1792 if( finitenewbound || newbound < 0.0 )
1795(*activityposinf)--;
1798 if( !finitenewbound && newbound < 0.0 )
1799(*activityneginf)++;
1800 else if( hugevalnewcont )
1803 if( newcontribution > 0.0 )
1804(*activityposhuge)++;
1806(*activityneghuge)++;
1816assert(oldbound < 0.0);
1817assert((*activityneginf) >= 1);
1820 if( finitenewbound || newbound > 0.0 )
1823(*activityneginf)--;
1826 if( !finitenewbound && newbound > 0.0 )
1827(*activityposinf)++;
1828 else if( hugevalnewcont )
1831 if( newcontribution > 0.0 )
1832(*activityposhuge)++;
1834(*activityneghuge)++;
1845 if( oldcontribution > 0.0 )
1847assert((*activityposhuge) >= 1);
1852(*activityposhuge)--;
1854 if( !finitenewbound )
1857 if( newbound > 0.0 )
1858(*activityposinf)++;
1861(*activityneginf)++;
1863 else if( hugevalnewcont )
1866 if( newcontribution > 0.0 )
1867(*activityposhuge)++;
1870(*activityneghuge)++;
1879assert(oldcontribution < 0.0);
1880assert((*activityneghuge) >= 1);
1885(*activityneghuge)--;
1887 if( !finitenewbound )
1890 if( newbound > 0.0 )
1891(*activityposinf)++;
1894(*activityneginf)++;
1896 else if( hugevalnewcont )
1899 if( newcontribution > 0.0 )
1900(*activityposhuge)++;
1903(*activityneghuge)++;
1913 if( !finitenewbound )
1918 if( newbound > 0.0 )
1920(*activityposinf)++;
1928assert(newbound < 0.0 );
1930(*activityneginf)++;
1935 else if( hugevalnewcont )
1937 if( newcontribution > 0.0 )
1939(*activityposhuge)++;
1944(*activityneghuge)++;
1971(*lastactivity) = curractivity;
1977 SCIPdebugMsg(
scip,
"%s activity of linear constraint unreliable after update: %16.9g\n",
1978(global ?
"global ":
""), curractivity);
1984consdata->validglbminact =
FALSE;
1986consdata->validglbmaxact =
FALSE;
1991consdata->validminact =
FALSE;
1993consdata->validmaxact =
FALSE;
2013assert(consdata !=
NULL);
2014assert(var !=
NULL);
2016 if( consdata->validactivities )
2038assert(consdata !=
NULL);
2039assert(var !=
NULL);
2041 if( consdata->validactivities )
2062assert(consdata !=
NULL);
2064 if( consdata->validactivities )
2085assert(consdata !=
NULL);
2087 if( consdata->validactivities )
2107assert(consdata !=
NULL);
2108assert(var !=
NULL);
2112 if( consdata->validmaxabsval )
2119consdata->maxabsval =
MAX(consdata->maxabsval, absval);
2123 if( consdata->validminabsval )
2130consdata->minabsval =
MIN(consdata->minabsval, absval);
2134 if( consdata->validactivities )
2156consdata->maxactdeltavar = var;
2158 else if( consdata->maxactdeltavar !=
NULL)
2163 if( delta > consdata->maxactdelta )
2165consdata->maxactdelta = delta;
2166consdata->maxactdeltavar = var;
2183assert(consdata !=
NULL);
2184assert(var !=
NULL);
2188 if( consdata->validmaxabsval )
2196consdata->validmaxabsval =
FALSE;
2202 if( consdata->validminabsval )
2210consdata->validminabsval =
FALSE;
2216 if( consdata->validactivities )
2230 if( consdata->maxactdeltavar == var )
2233consdata->maxactdeltavar =
NULL;
2259assert(consdata !=
NULL);
2261 if( !consdata->validmaxabsval )
2263assert(consdata->validmaxabsval);
2266 returnconsdata->maxabsval;
2275assert(consdata !=
NULL);
2277 if( !consdata->validminabsval )
2279assert(consdata->validminabsval);
2282 returnconsdata->minabsval;
2297assert(consdata !=
NULL);
2298assert(!consdata->validactivities);
2304consdata->validmaxabsval =
TRUE;
2305consdata->validminabsval =
TRUE;
2306consdata->validactivities =
TRUE;
2307consdata->validminact =
TRUE;
2308consdata->validmaxact =
TRUE;
2309consdata->validglbminact =
TRUE;
2310consdata->validglbmaxact =
TRUE;
2311consdata->maxabsval = 0.0;
2312consdata->minabsval = (consdata->nvars == 0 ? 0.0 :
REALABS(consdata->vals[0]));
2315consdata->lastminactivity = 0.0;
2316consdata->lastmaxactivity = 0.0;
2317consdata->minactivityneginf = 0;
2318consdata->minactivityposinf = 0;
2319consdata->maxactivityneginf = 0;
2320consdata->maxactivityposinf = 0;
2321consdata->minactivityneghuge = 0;
2322consdata->minactivityposhuge = 0;
2323consdata->maxactivityneghuge = 0;
2324consdata->maxactivityposhuge = 0;
2327consdata->lastglbminactivity = 0.0;
2328consdata->lastglbmaxactivity = 0.0;
2329consdata->glbminactivityneginf = 0;
2330consdata->glbminactivityposinf = 0;
2331consdata->glbmaxactivityneginf = 0;
2332consdata->glbmaxactivityposinf = 0;
2333consdata->glbminactivityneghuge = 0;
2334consdata->glbminactivityposhuge = 0;
2335consdata->glbmaxactivityneghuge = 0;
2336consdata->glbmaxactivityposhuge = 0;
2338 for( i = 0; i < consdata->nvars; ++i )
2341consdata->lastminactivity =
QUAD_TO_DBL(consdata->minactivity);
2342consdata->lastmaxactivity =
QUAD_TO_DBL(consdata->maxactivity);
2343consdata->lastglbminactivity =
QUAD_TO_DBL(consdata->glbminactivity);
2344consdata->lastglbmaxactivity =
QUAD_TO_DBL(consdata->glbmaxactivity);
2369assert(consdata !=
NULL);
2370assert(posinf >= 0);
2371assert(neginf >= 0);
2372assert(poshuge >= 0);
2373assert(neghuge >= 0);
2374assert(minactivity !=
NULL);
2375assert(istight !=
NULL);
2376assert(issettoinfinity !=
NULL);
2382*issettoinfinity =
TRUE;
2383*istight = posinf == 0;
2386 else if( posinf > 0 )
2389*issettoinfinity =
TRUE;
2393 else if( neghuge > 0 || ( poshuge > 0 && !goodrelax ) )
2396*issettoinfinity =
TRUE;
2406 if( !consdata->validglbminact )
2408assert(consdata->validglbminact);
2414 if( !consdata->validminact )
2416assert(consdata->validminact);
2438*issettoinfinity =
FALSE;
2464assert(consdata !=
NULL);
2465assert(posinf >= 0);
2466assert(neginf >= 0);
2467assert(poshuge >= 0);
2468assert(neghuge >= 0);
2469assert(maxactivity !=
NULL);
2470assert(istight !=
NULL);
2471assert(issettoinfinity !=
NULL);
2477*issettoinfinity =
TRUE;
2478*istight = neginf == 0;
2481 else if( neginf > 0 )
2484*issettoinfinity =
TRUE;
2488 else if( poshuge > 0 || ( neghuge > 0 && !goodrelax ) )
2491*issettoinfinity =
TRUE;
2501 if( !consdata->validglbmaxact )
2503assert(consdata->validglbmaxact);
2509 if( !consdata->validmaxact )
2511assert(consdata->validmaxact);
2533*issettoinfinity =
FALSE;
2556assert(consdata !=
NULL);
2557assert(minactivity !=
NULL);
2558assert(maxactivity !=
NULL);
2559assert(isminsettoinfinity !=
NULL);
2560assert(ismaxsettoinfinity !=
NULL);
2562 if( !consdata->validactivities )
2565assert(consdata->validminact);
2566assert(consdata->validmaxact);
2570assert(consdata->minactivityneginf >= 0);
2571assert(consdata->minactivityposinf >= 0);
2572assert(consdata->maxactivityneginf >= 0);
2573assert(consdata->maxactivityposinf >= 0);
2575 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2576consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2577minactivity, ismintight, isminsettoinfinity);
2579 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2580consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2581maxactivity, ismaxtight, ismaxsettoinfinity);
2602assert(consdata !=
NULL);
2603assert(cancelvar !=
NULL);
2604assert(resactivity !=
NULL);
2608 for( v = 0; v < consdata->nvars; ++v )
2610var = consdata->vars[v];
2611assert(var !=
NULL);
2612 if( var == cancelvar )
2615val = consdata->vals[v];
2617 if( useglobalbounds )
2637*resactivity += val*lb;
2643*resactivity += val*ub;
2652*resactivity += val*ub;
2658*resactivity += val*lb;
2689assert(consdata !=
NULL);
2690assert(var !=
NULL);
2691assert(minresactivity !=
NULL);
2692assert(maxresactivity !=
NULL);
2693assert(ismintight !=
NULL);
2694assert(ismaxtight !=
NULL);
2695assert(isminsettoinfinity !=
NULL);
2696assert(ismaxsettoinfinity !=
NULL);
2699 if( !consdata->validactivities )
2702assert(consdata->validminact);
2703assert(consdata->validmaxact);
2707assert(consdata->minactivityneginf >= 0);
2708assert(consdata->minactivityposinf >= 0);
2709assert(consdata->maxactivityneginf >= 0);
2710assert(consdata->maxactivityposinf >= 0);
2711assert(consdata->minactivityneghuge >= 0);
2712assert(consdata->minactivityposhuge >= 0);
2713assert(consdata->maxactivityneghuge >= 0);
2714assert(consdata->maxactivityposhuge >= 0);
2734assert(consdata->minactivityposinf >= 1);
2736 getMinActivity(
scip, consdata, consdata->minactivityposinf - 1, consdata->minactivityneginf,
2737consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2738minresactivity, ismintight, isminsettoinfinity);
2742assert(consdata->minactivityneginf >= 1);
2744 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf - 1,
2745consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2746minresactivity, ismintight, isminsettoinfinity);
2750assert(consdata->minactivityposhuge >= 1);
2752 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2753consdata->minactivityposhuge - 1, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2754minresactivity, ismintight, isminsettoinfinity);
2758assert(consdata->minactivityneghuge >= 1);
2760 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2761consdata->minactivityposhuge, consdata->minactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2762minresactivity, ismintight, isminsettoinfinity);
2766 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2767consdata->minactivityposhuge, consdata->minactivityneghuge, absval * minactbound,
FALSE, goodrelax,
2768minresactivity, ismintight, isminsettoinfinity);
2776assert(consdata->maxactivityneginf >= 1);
2778 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf - 1,
2779consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2780maxresactivity, ismaxtight, ismaxsettoinfinity);
2784assert(consdata->maxactivityposinf >= 1);
2786 getMaxActivity(
scip, consdata, consdata->maxactivityposinf - 1, consdata->maxactivityneginf,
2787consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2788maxresactivity, ismaxtight, ismaxsettoinfinity);
2792assert(consdata->maxactivityposhuge >= 1);
2794 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2795consdata->maxactivityposhuge - 1, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2796maxresactivity, ismaxtight, ismaxsettoinfinity);
2800assert(consdata->maxactivityneghuge >= 1);
2802 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2803consdata->maxactivityposhuge, consdata->maxactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2804maxresactivity, ismaxtight, ismaxsettoinfinity);
2808 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2809consdata->maxactivityposhuge, consdata->maxactivityneghuge, absval * maxactbound,
FALSE, goodrelax,
2810maxresactivity, ismaxtight, ismaxsettoinfinity);
2832assert(consdata !=
NULL);
2833assert((glbminactivity !=
NULL&& ismintight !=
NULL&& isminsettoinfinity !=
NULL)
2834|| (glbmaxactivity !=
NULL&& ismaxtight !=
NULL&& ismaxsettoinfinity !=
NULL));
2836 if( !consdata->validactivities )
2839assert(consdata->validglbminact);
2840assert(consdata->validglbmaxact);
2844assert(consdata->glbminactivityneginf >= 0);
2845assert(consdata->glbminactivityposinf >= 0);
2846assert(consdata->glbmaxactivityneginf >= 0);
2847assert(consdata->glbmaxactivityposinf >= 0);
2848assert(consdata->glbminactivityneghuge >= 0);
2849assert(consdata->glbminactivityposhuge >= 0);
2850assert(consdata->glbmaxactivityneghuge >= 0);
2851assert(consdata->glbmaxactivityposhuge >= 0);
2853 if( glbminactivity !=
NULL)
2855assert(isminsettoinfinity !=
NULL);
2856assert(ismintight !=
NULL);
2858 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2859consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2860glbminactivity, ismintight, isminsettoinfinity);
2863 if( glbmaxactivity !=
NULL)
2865assert(ismaxsettoinfinity !=
NULL);
2866assert(ismaxtight !=
NULL);
2868 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
2869consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2870glbmaxactivity, ismaxtight, ismaxsettoinfinity);
2898assert(consdata !=
NULL);
2899assert(var !=
NULL);
2900assert((minresactivity !=
NULL&& ismintight !=
NULL&& isminsettoinfinity !=
NULL)
2901|| (maxresactivity !=
NULL&& ismaxtight !=
NULL&& ismaxsettoinfinity !=
NULL));
2904 if( !consdata->validactivities )
2909assert(consdata->glbminactivityneginf >= 0);
2910assert(consdata->glbminactivityposinf >= 0);
2911assert(consdata->glbmaxactivityneginf >= 0);
2912assert(consdata->glbmaxactivityposinf >= 0);
2927 if( minresactivity !=
NULL)
2929assert(isminsettoinfinity !=
NULL);
2930assert(ismintight !=
NULL);
2937assert(consdata->glbminactivityposinf >= 1);
2939 getMinActivity(
scip, consdata, consdata->glbminactivityposinf - 1, consdata->glbminactivityneginf,
2940consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2941minresactivity, ismintight, isminsettoinfinity);
2945assert(consdata->glbminactivityneginf >= 1);
2947 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf - 1,
2948consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2949minresactivity, ismintight, isminsettoinfinity);
2953assert(consdata->glbminactivityposhuge >= 1);
2955 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2956consdata->glbminactivityposhuge - 1, consdata->glbminactivityneghuge, 0.0,
TRUE, goodrelax,
2957minresactivity, ismintight, isminsettoinfinity);
2961assert(consdata->glbminactivityneghuge >= 1);
2963 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2964consdata->glbminactivityposhuge, consdata->glbminactivityneghuge - 1, 0.0,
TRUE, goodrelax,
2965minresactivity, ismintight, isminsettoinfinity);
2969 getMinActivity(
scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf,
2970consdata->glbminactivityposhuge, consdata->glbminactivityneghuge, absval * minactbound,
TRUE,
2971goodrelax, minresactivity, ismintight, isminsettoinfinity);
2975 if( maxresactivity !=
NULL)
2977assert(ismaxsettoinfinity !=
NULL);
2978assert(ismaxtight !=
NULL);
2985assert(consdata->glbmaxactivityneginf >= 1);
2987 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf - 1,
2988consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2989maxresactivity, ismaxtight, ismaxsettoinfinity);
2993assert(consdata->glbmaxactivityposinf >= 1);
2995 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf - 1, consdata->glbmaxactivityneginf,
2996consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
2997maxresactivity, ismaxtight, ismaxsettoinfinity);
3001assert(consdata->glbmaxactivityposhuge >= 1);
3003 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
3004consdata->glbmaxactivityposhuge - 1, consdata->glbmaxactivityneghuge, 0.0,
TRUE, goodrelax,
3005maxresactivity, ismaxtight, ismaxsettoinfinity);
3009assert(consdata->glbmaxactivityneghuge >= 1);
3011 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
3012consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge - 1, 0.0,
TRUE, goodrelax,
3013maxresactivity, ismaxtight, ismaxsettoinfinity);
3017 getMaxActivity(
scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf,
3018consdata->glbmaxactivityposhuge, consdata->glbmaxactivityneghuge, absval * maxactbound,
TRUE,
3019goodrelax, maxresactivity, ismaxtight, ismaxsettoinfinity);
3035assert(consdata !=
NULL);
3051 for( v = 0; v < consdata->nvars; ++v )
3055 if( consdata->vals[v] < 0 )
3065activity += consdata->vals[v] * solval;
3067assert(nneginf >= 0 && nposinf >= 0);
3069 SCIPdebugMsg(
scip,
"activity of linear constraint: %.15g, %d positive infinity values, %d negative infinity values \n", activity, nposinf, nneginf);
3072 if( nposinf > 0 && nneginf > 0 )
3073activity = (consdata->rhs + consdata->lhs) / 2;
3074 else if( nposinf > 0 )
3076 else if( nneginf > 0 )
3079 SCIPdebugMsg(
scip,
"corrected activity of linear constraint: %.15g\n", activity);
3084 else if( activity < 0 )
3103assert(consdata !=
NULL);
3110 return MIN(consdata->rhs - activity, activity - consdata->lhs);
3120uint64_t varsignature;
3125assert(consdata !=
NULL);
3126assert(consdata->validsignature);
3131val = consdata->vals[pos];
3132 if( (val > 0.0 && ub > 0.0) || (val < 0.0 && lb < 0.0) )
3133consdata->possignature |= varsignature;
3134 if( (val > 0.0 && lb < 0.0) || (val < 0.0 && ub > 0.0) )
3135consdata->negsignature |= varsignature;
3144assert(consdata !=
NULL);
3146 if( !consdata->validsignature )
3150consdata->validsignature =
TRUE;
3151consdata->possignature = 0;
3152consdata->negsignature = 0;
3153 for( i = 0; i < consdata->nvars; ++i )
3166assert(consdata !=
NULL);
3167assert(0 <= ind1 && ind1 < consdata->nvars);
3168assert(0 <= ind2 && ind2 < consdata->nvars);
3170var1 = consdata->vars[ind1];
3171var2 = consdata->vars[ind2];
3188 if( vartype1 < vartype2 )
3190 else if( vartype1 > vartype2 )
3205assert(consdata !=
NULL);
3206assert(0 <= ind1 && ind1 < consdata->nvars);
3207assert(0 <= ind2 && ind2 < consdata->nvars);
3209var1 = consdata->vars[ind1];
3210var2 = consdata->vars[ind2];
3223 if(
EPSGT(abscoef1, abscoef2, 1e-9) )
3225 else if(
EPSGT(abscoef2, abscoef1, 1e-9) )
3235 if( vartype1 < vartype2 )
3239 else if( vartype1 > vartype2 )
3256 if(
EPSGT(abscont1, abscont2, 1e-9) )
3258 else if(
EPSGT(abscont2, abscont1, 1e-9) )
3282assert(perm !=
NULL);
3283assert(consdata !=
NULL);
3287 for( v = 0; v < nvars; ++v )
3291varv = consdata->vars[v];
3292valv = consdata->vals[v];
3293 if( consdata->eventdata !=
NULL)
3294eventdatav = consdata->eventdata[v];
3298assert(0 <= perm[i] && perm[i] < nvars);
3299assert(perm[i] != i);
3300consdata->vars[i] = consdata->vars[perm[i]];
3301consdata->vals[i] = consdata->vals[perm[i]];
3302 if( consdata->eventdata !=
NULL)
3304consdata->eventdata[i] = consdata->eventdata[perm[i]];
3305consdata->eventdata[i]->varpos = i;
3311 while( perm[i] != v );
3312consdata->vars[i] = varv;
3313consdata->vals[i] = valv;
3314 if( consdata->eventdata !=
NULL)
3316consdata->eventdata[i] = eventdatav;
3317consdata->eventdata[i]->varpos = i;
3324 for( v = 0; v < nvars; ++v )
3326assert(perm[v] == v);
3327assert(consdata->eventdata ==
NULL|| consdata->eventdata[v]->varpos == v);
3351assert(consdata !=
NULL);
3354 if( consdata->nvars <= 1 )
3356consdata->indexsorted =
TRUE;
3357consdata->coefsorted =
TRUE;
3358consdata->nbinvars = (consdata->nvars == 1 ? (int)
SCIPvarIsBinary(consdata->vars[0]) : 0);
3371 SCIPsort(perm, consdataCompVar, (
void*)consdata, consdata->nvars);
3373 SCIPsort(perm, consdataCompVarProp, (
void*)consdata, consdata->nvars);
3382consdata->indexsorted =
FALSE;
3383consdata->coefsorted =
TRUE;
3386consdata->nbinvars = 0;
3387 for( v = 0; v < consdata->nvars; ++v )
3390++consdata->nbinvars;
3397consdata->indexsorted =
TRUE;
3398consdata->coefsorted =
FALSE;
3423assert(cons !=
NULL);
3432assert(consdata !=
NULL);
3433assert(consdata->nvars == 0 || (consdata->vars !=
NULL&& consdata->vals !=
NULL));
3444consdata->rhs = lhs;
3445assert(consdata->row ==
NULL);
3449 for( i = 0; i <
NLOCKTYPES&& !locked; i++ )
3462vars = consdata->vars;
3463vals = consdata->vals;
3465 for( v = 0; v < consdata->nvars; ++v )
3467assert(vars[v] !=
NULL);
3487vars = consdata->vars;
3488vals = consdata->vals;
3490 for( v = 0; v < consdata->nvars; ++v )
3492assert(vars[v] !=
NULL);
3510consdata->boundstightened = 0;
3511consdata->presolved =
FALSE;
3512consdata->cliquesadded =
FALSE;
3513consdata->implsadded =
FALSE;
3523consdata->lhs = lhs;
3524consdata->changed =
TRUE;
3525consdata->normalized =
FALSE;
3526consdata->upgradetried =
FALSE;
3527consdata->rangedrowpropagated = 0;
3530 if( consdata->row !=
NULL)
3551assert(cons !=
NULL);
3560assert(consdata !=
NULL);
3561assert(consdata->nvars == 0 || (consdata->vars !=
NULL&& consdata->vals !=
NULL));
3572consdata->lhs = rhs;
3573assert(consdata->row ==
NULL);
3577 for( i = 0; i <
NLOCKTYPES&& !locked; i++ )
3592vars = consdata->vars;
3593vals = consdata->vals;
3595 for( v = 0; v < consdata->nvars; ++v )
3597assert(vars[v] !=
NULL);
3617vars = consdata->vars;
3618vals = consdata->vals;
3620 for( v = 0; v < consdata->nvars; ++v )
3622assert(vars[v] !=
NULL);
3640consdata->boundstightened = 0;
3641consdata->presolved =
FALSE;
3642consdata->cliquesadded =
FALSE;
3643consdata->implsadded =
FALSE;
3653consdata->rhs = rhs;
3654consdata->changed =
TRUE;
3655consdata->normalized =
FALSE;
3656consdata->upgradetried =
FALSE;
3657consdata->rangedrowpropagated = 0;
3660 if( consdata->row !=
NULL)
3681assert(cons !=
NULL);
3682assert(var !=
NULL);
3687assert(consdata !=
NULL);
3697assert(var !=
NULL);
3701consdata->vars[consdata->nvars] = var;
3702consdata->vals[consdata->nvars] = val;
3711 if( consdata->eventdata !=
NULL)
3719assert(conshdlrdata !=
NULL);
3720assert(conshdlrdata->eventhdlr !=
NULL);
3723consdata->eventdata[consdata->nvars-1] =
NULL;
3746consdata->boundstightened = 0;
3747consdata->presolved =
FALSE;
3748consdata->removedfixings = consdata->removedfixings &&
SCIPvarIsActive(var);
3750 if( consdata->validsignature )
3753consdata->changed =
TRUE;
3754consdata->normalized =
FALSE;
3755consdata->upgradetried =
FALSE;
3756consdata->cliquesadded =
FALSE;
3757consdata->implsadded =
FALSE;
3758consdata->rangedrowpropagated = 0;
3759consdata->merged =
FALSE;
3761 if( consdata->nvars == 1 )
3763consdata->indexsorted =
TRUE;
3764consdata->coefsorted =
TRUE;
3770consdata->indexsorted = consdata->indexsorted && (consdataCompVar((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3771consdata->coefsorted =
FALSE;
3775consdata->indexsorted =
FALSE;
3776consdata->coefsorted = consdata->coefsorted && (consdataCompVarProp((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3781 if( consdata->hasnonbinvalid && !consdata->hascontvar )
3787consdata->hasnonbinvar =
TRUE;
3790consdata->hascontvar =
TRUE;
3795 if( consdata->row !=
NULL)
3816assert(cons !=
NULL);
3819assert(consdata !=
NULL);
3820assert(0 <= pos && pos < consdata->nvars);
3822var = consdata->vars[pos];
3823val = consdata->vals[pos];
3824assert(var !=
NULL);
3841assert(conshdlrdata !=
NULL);
3842assert(conshdlrdata->eventhdlr !=
NULL);
3845 if( consdata->eventdata !=
NULL)
3848assert(consdata->eventdata[pos] ==
NULL);
3853 if( pos != consdata->nvars - 1 )
3855consdata->vars[pos] = consdata->vars[consdata->nvars-1];
3856consdata->vals[pos] = consdata->vals[consdata->nvars-1];
3858 if( consdata->eventdata !=
NULL)
3860consdata->eventdata[pos] = consdata->eventdata[consdata->nvars-1];
3861assert(consdata->eventdata[pos] !=
NULL);
3862consdata->eventdata[pos]->varpos = pos;
3865consdata->indexsorted = consdata->indexsorted && (pos + 2 >= consdata->nvars);
3866consdata->coefsorted = consdata->coefsorted && (pos + 2 >= consdata->nvars);
3873 if( consdata->nvars <= 1 )
3888consdata->boundstightened = 0;
3889consdata->presolved =
FALSE;
3890consdata->validsignature =
FALSE;
3891consdata->changed =
TRUE;
3892consdata->normalized =
FALSE;
3893consdata->upgradetried =
FALSE;
3894consdata->cliquesadded =
FALSE;
3895consdata->implsadded =
FALSE;
3896consdata->rangedrowpropagated = 0;
3901consdata->hasnonbinvalid =
FALSE;
3905 if( consdata->row !=
NULL)
3932assert(cons !=
NULL);
3934assert(consdata !=
NULL);
3935assert(0 <= pos && pos < consdata->nvars);
3936var = consdata->vars[pos];
3937assert(var !=
NULL);
3939val = consdata->vals[pos];
3943 for( i = 0; i <
NLOCKTYPES&& !locked; i++ )
3966consdata->vals[pos] = newval;
3968 if( consdata->coefsorted )
3971consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos - 1, pos) <= 0);
3972 if( consdata->coefsorted && pos < consdata->nvars - 1 )
3973consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos, pos + 1) <= 0);
3993consdata->boundstightened = 0;
3994consdata->presolved =
FALSE;
3995consdata->validsignature = consdata->validsignature && (newval * val > 0.0);
3996consdata->changed =
TRUE;
3997consdata->normalized =
FALSE;
3998consdata->upgradetried =
FALSE;
3999consdata->cliquesadded =
FALSE;
4000consdata->implsadded =
FALSE;
4001consdata->rangedrowpropagated = 0;
4020assert(cons !=
NULL);
4023assert(consdata !=
NULL);
4024assert(consdata->row ==
NULL);
4025assert(scalar != 1.0);
4030 SCIPwarningMessage(
scip,
"skipped scaling for linear constraint <%s> to avoid numerical troubles (scalar: %.15g)\n",
4037 for( i = consdata->nvars - 1; i >= 0; --i )
4039newval = scalar * consdata->vals[i];
4049 SCIPwarningMessage(
scip,
"coefficient %.15g of variable <%s> in linear constraint <%s> scaled to zero (scalar: %.15g)\n",
4054consdata->vals[i] = newval;
4062lhs = consdata->lhs;
4063consdata->lhs = -consdata->rhs;
4064consdata->rhs = -lhs;
4069newval = absscalar * consdata->lhs;
4077consdata->lhs = newval;
4081newval = absscalar * consdata->rhs;
4089consdata->rhs = newval;
4093consdata->cliquesadded =
FALSE;
4094consdata->implsadded =
FALSE;
4113assert(conshdlr !=
NULL);
4114assert(conss !=
NULL);
4115assert(nconss >= 0);
4119 for( i = 0; i < nconss; i++ )
4124 if( consdata->varsdeleted )
4127 for( v = consdata->nvars - 1; v >= 0; --v )
4134consdata->varsdeleted =
FALSE;
4186assert(cons !=
NULL);
4187assert(infeasible !=
NULL);
4189*infeasible =
FALSE;
4197assert(consdata !=
NULL);
4200 if( consdata->normalized )
4204vals = consdata->vals;
4205nvars = consdata->nvars;
4206assert(nvars == 0 || vals !=
NULL);
4210consdata->normalized =
TRUE;
4214assert(vals !=
NULL);
4236scalar = 2.0 / (minabsval + maxabsval);
4243 SCIPdebugMsg(
scip,
"divide linear constraint with %g, because all coefficients are in absolute value the same\n", maxabsval);
4248vals = consdata->vals;
4249nvars = consdata->nvars;
4251assert(nvars == 0 || vals !=
NULL);
4258consdata->normalized =
TRUE;
4262assert(vals !=
NULL);
4274 if( !consdata->hasnonbinvalid )
4281 if( !consdata->hascontvar )
4320 for( i = 0; i < nvars; ++i )
4322 if( vals[i] > 0.0 )
4327 if( nposcoeffs > nnegcoeffs )
4329 else if( nposcoeffs < nnegcoeffs )
4339assert(mult == +1 || mult == -1);
4348assert(nvars == consdata->nvars);
4358 for( i = 0; i < nvars && success && scm <= maxmult; ++i )
4363success =
SCIPrealToRational(vals[i], -epsilon, epsilon , maxmult, &numerator, &denominator);
4373onlyintegral =
TRUE;
4376 for( i = nvars - 1; i >= 0; --i )
4380onlyintegral =
FALSE;
4386success = success && (scm <= maxmult || (scm == 1 && onlyintegral));
4387 if( success && scm != 1 )
4394 if( consdata->validmaxabsval )
4399consdata->validmaxabsval =
FALSE;
4405 if( consdata->validminabsval )
4410consdata->validminabsval =
FALSE;
4417vals = consdata->vals;
4418nvars = consdata->nvars;
4419assert(nvars == 0 || vals !=
NULL);
4425 if( success && nvars >= 1 )
4431 for( i = 1; i < nvars && gcd > 1; ++i )
4440 if( !consdata->hascontvar && onlyintegral )
4444*infeasible =
TRUE;
4458 if( consdata->validmaxabsval )
4462 if( consdata->validminabsval )
4470consdata->normalized =
TRUE;
4491assert(cons !=
NULL);
4494assert(consdata !=
NULL);
4496 if( consdata->merged )
4502v = consdata->nvars - 1;
4510var = consdata->vars[v];
4511valsum = consdata->vals[v];
4514 while( v >= 1 && consdata->vars[v-1] == var )
4518valsum += consdata->vals[v];
4521assert(consdata->vars[v] == var);
4528 else if( valsum != consdata->vals[v] )
4536consdata->merged =
TRUE;
4555assert(cons !=
NULL);
4557 if( infeasible !=
NULL)
4558*infeasible =
FALSE;
4561assert(consdata !=
NULL);
4563 if( consdata->eventdata ==
NULL)
4569assert(conshdlr !=
NULL);
4572assert(conshdlrdata !=
NULL);
4576assert(consdata->eventdata !=
NULL);
4579 if( !consdata->removedfixings )
4589lhssubtrahend = 0.0;
4590rhssubtrahend = 0.0;
4596 while( v < consdata->nvars )
4598 SCIP_VAR* var = consdata->vars[v];
4608 SCIPerrorMessage(
"original variable in transformed linear constraint\n");
4618 if( var != consdata->vars[v] )
4620assert(scalar != 0.0);
4626lhssubtrahend += constant;
4628rhssubtrahend += constant;
4634 if( scalar != 0.0 )
4648 for( i = 0; i < naggrvars; ++i )
4653constant += scalar * aggrconstant;
4663 if( constant < 0.0 )
4667 if( infeasible !=
NULL)
4669*infeasible =
TRUE;
4679lhssubtrahend += constant;
4686 if( constant > 0.0 )
4690 if( infeasible !=
NULL)
4692*infeasible =
TRUE;
4702rhssubtrahend += constant;
4723 if( infeasible !=
NULL)
4725*infeasible =
TRUE;
4755 if( infeasible !=
NULL)
4757*infeasible =
TRUE;
4778consdata->removedfixings =
TRUE;
4791assert(consdata->removedfixings);
4795 for( v = 0; v < consdata->nvars; ++v )
4824assert(cons !=
NULL);
4828assert(consdata !=
NULL);
4830vars = consdata->vars;
4831vals = consdata->vals;
4832nvars = consdata->nvars;
4834assert(vars !=
NULL|| nvars == 0);
4835assert(vals !=
NULL|| nvars == 0);
4837assert(-1 <= inferpos && inferpos < nvars);
4838assert((infervar ==
NULL) == (inferpos == -1));
4839assert(inferpos == -1 || vars[inferpos] == infervar);
4861 if( infervar !=
NULL)
4863assert(vals !=
NULL);
4866&ismintight,
NULL, &isminsettoinfinity,
NULL);
4869 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4875&ismintight,
NULL, &isminsettoinfinity,
NULL);
4878 NULL, &ismaxtight,
NULL, &ismaxsettoinfinity);
4882 if( (reasonisrhs && !isminsettoinfinity && ismintight) || (!reasonisrhs && !ismaxsettoinfinity && ismaxtight) )
4887resactisinf =
FALSE;
4892 if( infervar !=
NULL)
4894assert(vals !=
NULL);
4902resactisinf =
TRUE;
4904rescap = consdata->rhs - minresactivity;
4912resactisinf =
TRUE;
4914rescap = consdata->lhs - maxresactivity;
4917 if( reasonisrhs == (vals[inferpos] > 0.0) )
4923rescap = (reasonisrhs ? consdata->rhs - minresactivity : consdata->lhs - maxresactivity);
4928 for( i = 0; i < nvars; ++i )
4930assert( vars !=
NULL&& vals !=
NULL);
4942 if( reasonisrhs == (vals[i] > 0.0) )
4961 for( i = 0; i < nvars; ++i )
4963assert(vars !=
NULL);
4964assert(vals !=
NULL);
4970 if( reasonisrhs == (vals[i] > 0.0) )
5004assert(cons !=
NULL);
5007assert(consdata !=
NULL);
5008vars = consdata->vars;
5009nvars = consdata->nvars;
5010assert(vars !=
NULL|| nvars == 0);
5011assert(-1 <= inferpos && inferpos < nvars);
5012assert((infervar ==
NULL) == (inferpos == -1));
5013assert(inferpos == -1 || vars !=
NULL);
5014assert(inferpos == -1 || vars[inferpos] == infervar);
5017 for( v = nvars - 1; v >= 0; --v )
5019assert(vars !=
NULL);
5022 if( vars[v] == infervar )
5024assert(vars[v] !=
NULL);
5068 for( v = nvars - 1; v >= 0; --v )
5070assert(vars !=
NULL);
5125assert(cons !=
NULL);
5126assert(result !=
NULL);
5129assert(consdata !=
NULL);
5130vars = consdata->vars;
5131nvars = consdata->nvars;
5133vals = consdata->vals;
5134assert(vars !=
NULL);
5135assert(vals !=
NULL);
5140 if( inferpos >= nvars || vars[inferpos] != infervar )
5144 for( inferpos = 0; inferpos < nvars && vars[inferpos] != infervar; ++inferpos )
5147assert(inferpos < nvars);
5148assert(vars[inferpos] == infervar);
5186 SCIPerrorMessage(
"invalid inference information %d in linear constraint <%s> at position %d for %s bound of variable <%s>\n",
5232assert(consdata !=
NULL);
5234infcountmin = consdata->minactivityneginf
5235+ consdata->minactivityposinf
5236+ consdata->minactivityneghuge
5237+ consdata->minactivityposhuge;
5238infcountmax = consdata->maxactivityneginf
5239+ consdata->maxactivityposinf
5240+ consdata->maxactivityneghuge
5241+ consdata->maxactivityposhuge;
5243 if( infcountmin > 1 && infcountmax > 1 )
5269assert(cons !=
NULL);
5273assert(consdata !=
NULL);
5274var = consdata->vars[pos];
5275assert(var !=
NULL);
5284 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
5286 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newub);
5295 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5303 else if( tightened )
5306 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5313consdata->upgradetried =
FALSE;
5339assert(cons !=
NULL);
5343assert(consdata !=
NULL);
5344var = consdata->vars[pos];
5345assert(var !=
NULL);
5354 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
5356 QUAD_TO_DBL(consdata->minactivity),
QUAD_TO_DBL(consdata->maxactivity), consdata->lhs, consdata->rhs, newlb);
5365 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5373 else if( tightened )
5376 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
5383consdata->upgradetried =
FALSE;
5409assert(cons !=
NULL);
5410assert(cutoff !=
NULL);
5411assert(nchgbds !=
NULL);
5418assert(consdata !=
NULL);
5419assert(0 <= pos && pos < consdata->nvars);
5423var = consdata->vars[pos];
5424assert(var !=
NULL);
5430val = consdata->vals[pos];
5431lhs = consdata->lhs;
5432rhs = consdata->rhs;
5442 if( !consdata->validactivities )
5444assert(consdata->validactivities);
5445 if( !consdata->validminact )
5447assert(consdata->validminact);
5458assert(consdata->validminact);
5463 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5470slack = rhs -
QUAD_TO_DBL(consdata->minactivity);
5478alpha = val * (ub - lb);
5486newub = lb + (slack / val);
5492 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5510 if( !consdata->validmaxact )
5514assert(consdata->validmaxact);
5519 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5526slack =
QUAD_TO_DBL(consdata->maxactivity) - lhs;
5534alpha = val * (ub - lb);
5542newlb = ub - (slack / val);
5548 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5565assert(consdata->validminact);
5570 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, minactivity=%.15g > rhs=%.15g\n",
5577slack = rhs -
QUAD_TO_DBL(consdata->minactivity);
5585alpha = val * (lb - ub);
5593newlb = ub + slack / val;
5599 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5616 if( !consdata->validmaxact )
5620assert(consdata->validmaxact);
5625 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, maxactivity=%.15g < lhs=%.15g\n",
5632slack =
QUAD_TO_DBL(consdata->maxactivity) - lhs;
5640alpha = val * (lb - ub);
5648newub = lb - (slack / val);
5654 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
5681assert(cons !=
NULL);
5684assert(consdata !=
NULL);
5764assert(cons !=
NULL);
5765assert(cutoff !=
NULL);
5766assert(nfixedvars !=
NULL);
5767assert(nchgbds !=
NULL);
5768assert(naddconss !=
NULL);
5775assert(consdata !=
NULL);
5778 if( consdata->rangedrowpropagated == 2 )
5782 if( consdata->nvars < 3 )
5791assert(conshdlr !=
NULL);
5793assert(conshdlrdata !=
NULL);
5799consdata->rangedrowpropagated = 2;
5806 if( consdata->rangedrowpropagated > 0 )
5809consdata->rangedrowpropagated = 1;
5814 for( v = consdata->nvars - 1; v >= 0; --v )
5832lhs = consdata->lhs - fixedact;
5833rhs = consdata->rhs - fixedact;
5834nunfixedvars = consdata->nvars - nfixedconsvars;
5843possiblegcd =
TRUE;
5879absval =
REALABS(consdata->vals[v]);
5881 if( absminbincoef > absval )
5882absminbincoef = absval;
5886possiblegcd =
FALSE;
5887infcheckvars[ninfcheckvars] = consdata->vars[v];
5888infcheckvals[ninfcheckvars] = consdata->vals[v];
5904 if( v == consdata->nvars )
5908 if( ncontvars + 2 > nunfixedvars )
5921 for( ; v < consdata->nvars; ++v )
5930absval =
REALABS(consdata->vals[v]);
5932 if( absminbincoef > absval )
5933absminbincoef = absval;
5943possiblegcd =
FALSE;
5944infcheckvars[ninfcheckvars] = consdata->vars[v];
5945infcheckvals[ninfcheckvars] = consdata->vals[v];
5954assert(
REALABS(consdata->vals[v]) > 1.5);
5957assert(gcdtmp >= 1);
5961infcheckvars[ninfcheckvars] = consdata->vars[v];
5962infcheckvals[ninfcheckvars] = consdata->vals[v];
5977 if( ninfcheckvars == 0 )
5982minactinfvarsinvalid =
FALSE;
5983maxactinfvarsinvalid =
FALSE;
5984maxactinfvars = 0.0;
5985minactinfvars = 0.0;
5988 for( v = ninfcheckvars - 1; v >= 0; --v )
5995 if( infcheckvals[v] < 0.0 )
5996maxactinfvarsinvalid =
TRUE;
5998minactinfvarsinvalid =
TRUE;
6002 if( infcheckvals[v] < 0.0 )
6003maxactinfvars += infcheckvals[v] * lb;
6005minactinfvars += infcheckvals[v] * lb;
6010 if( infcheckvals[v] > 0.0 )
6011maxactinfvarsinvalid =
TRUE;
6013minactinfvarsinvalid =
TRUE;
6017 if( infcheckvals[v] > 0.0 )
6018maxactinfvars += infcheckvals[v] * ub;
6020minactinfvars += infcheckvals[v] * ub;
6025minactinfvarsinvalid =
TRUE;
6027maxactinfvarsinvalid =
TRUE;
6029 if( minactinfvarsinvalid || maxactinfvarsinvalid )
6032assert(!minactinfvarsinvalid && !maxactinfvarsinvalid);
6034 SCIPdebugMsg(
scip,
"minactinfvarsinvalid = %u, minactinfvars = %g, maxactinfvarsinvalid = %u, maxactinfvars = %g, gcd = %lld, ninfcheckvars = %d, ncontvars = %d\n",
6035minactinfvarsinvalid, minactinfvars, maxactinfvarsinvalid, maxactinfvars, gcd, ninfcheckvars, ncontvars);
6060 else if( ncontvars == 0 )
6067v = ninfcheckvars - 1;
6069assert(gcdinfvars >= 2);
6071 for( ; v >= 0 && gcdinfvars >= 2; --v )
6076 else if( gcdisone )
6079 SCIPdebugMsg(
scip,
"gcdinfvars =%lld, possiblegcd = %u\n", gcdinfvars, possiblegcd);
6082 if( gcdinfvars >= 1 )
6095value2 = value + gcd * (
SCIPceil(
scip, (lhs - value) / gcd));
6116value += gcdinfvars;
6118assert(nsols < 2 || minvalue <= maxvalue);
6131value2 = value + gcd * (
SCIPfloor(
scip, (rhs - value) / gcd));
6142assert(maxvalue > minvalue);
6145value -= gcdinfvars;
6147assert(maxvalue > secondsolval);
6150 SCIPdebugMsg(
scip,
"here nsols %s %d, minsolvalue = %g, maxsolvalue = %g, ninfcheckvars = %d, nunfixedvars = %d\n",
6151nsols > 2 ?
">=":
"=", nsols, minvalue, maxvalue, ninfcheckvars, nunfixedvars);
6156 SCIPdebugMsg(
scip,
"gcdinfvars = %lld, gcd = %lld, correctedlhs = %g, correctedrhs = %g\n",
6157gcdinfvars, gcd, lhs, rhs);
6168 else if( nsols == 1 )
6170assert(minvalue == maxvalue);
6173 if( ninfcheckvars == 1 )
6179 SCIPdebugMsg(
scip,
"fixing single variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6200 if( ninfcheckvars == nunfixedvars - 1 )
6207assert(ninfcheckvars > 0);
6210 for( v = 0; v < consdata->nvars - 1; ++v )
6214 if(
w>= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6220assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6222 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6227assert(consdata->vars[v2] == infcheckvars[w2]);
6230assert(w2 == ninfcheckvars);
6236 if( consdata->vals[v] < 0 )
6245 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6258consdata->vars[v],
bound) );
6274assert(v == consdata->nvars - 1);
6277 if( consdata->vals[v] < 0 )
6286 SCIPdebugMsg(
scip,
"fixing variable <%s> with bounds [%.15g,%.15g] to %.15g\n",
6299consdata->vars[v],
bound) );
6306 else if( addartconss && (
SCIPisGT(
scip, minvalue, minactinfvars) ||
SCIPisLT(
scip, maxvalue, maxactinfvars)) )
6314++conshdlrdata->naddconss;
6319maxvalue, maxvalue,
TRUE,
TRUE,
TRUE,
FALSE,
TRUE,
TRUE,
FALSE,
FALSE,
TRUE,
FALSE) );
6336 if( ninfcheckvars == 1 )
6344 if( infcheckvals[0] < 0 )
6346newlb = maxvalue/infcheckvals[0];
6347newub = minvalue/infcheckvals[0];
6351newlb = minvalue/infcheckvals[0];
6352newub = maxvalue/infcheckvals[0];
6354assert(newlb < newub);
6359 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6380 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6399 else if( ninfcheckvars == nunfixedvars - 1 )
6407assert(ninfcheckvars > 0);
6408assert(minvalue < maxvalue);
6411 for( v = 0; v < consdata->nvars - 1; ++v )
6415 if(
w>= ninfcheckvars || consdata->vars[v] != infcheckvars[
w] )
6421assert((nfixedconsvars == 0) ? (consdata->nvars - v - 1 == ninfcheckvars -
w) :
TRUE);
6423 for( ; v2 < consdata->nvars && w2 < ninfcheckvars; ++v2 )
6428assert(consdata->vars[v2] == infcheckvars[w2]);
6431assert(w2 == ninfcheckvars);
6437 if( consdata->vals[v] < 0 )
6439newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6440newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6444newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6445newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6452 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6464consdata->vars[v], newlb) );
6474 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6486consdata->vars[v], newub) );
6503assert(v == consdata->nvars - 1);
6506 if( consdata->vals[v] < 0 )
6508newlb =
SCIPfloor(
scip, (rhs - minvalue) / consdata->vals[v]);
6509newub =
SCIPfloor(
scip, (lhs - maxvalue) / consdata->vals[v]);
6513newlb =
SCIPceil(
scip, (lhs - maxvalue) / consdata->vals[v]);
6514newub =
SCIPceil(
scip, (rhs - minvalue) / consdata->vals[v]);
6521 SCIPdebugMsg(
scip,
"tightening lower bound of variable <%s> from %g to %g\n",
6542 SCIPdebugMsg(
scip,
"tightening upper bound of variable <%s> from %g to %g\n",
6564 else if( addartconss && (
SCIPisGT(
scip, minvalue, minactinfvars) ||
SCIPisLT(
scip, maxvalue, maxactinfvars)) )
6571assert(maxvalue > minvalue);
6587++conshdlrdata->naddconss;
6606 else if( addartconss && ncontvars < ninfcheckvars )
6613 for( v = 0; v < consdata->nvars; ++v )
6615 if( w < ninfcheckvars && consdata->vars[v] == infcheckvars[
w] )
6625 if( consdata->vals[v] > 0.0 )
6626maxact += consdata->vals[v];
6628minact += consdata->vals[v];
6636 if( consdata->vals[v] > 0.0 )
6678assert(maxact > minact);
6679assert(
w== ninfcheckvars);
6681newlhs = lhs - maxact;
6682newrhs = rhs - minact;
6683assert(newlhs < newrhs);
6687++conshdlrdata->naddconss;
6737assert(cons !=
NULL);
6738assert(cutoff !=
NULL);
6739assert(nchgbds !=
NULL);
6746assert(consdata !=
NULL);
6747assert(0 <= pos && pos < consdata->nvars);
6751var = consdata->vars[pos];
6757val = consdata->vals[pos];
6758lhs = consdata->lhs;
6759rhs = consdata->rhs;
6761&ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
6762assert(var !=
NULL);
6781newub = (rhs - minresactivity)/val;
6790 if( activityunreliable )
6793newub = (rhs - minresactivity)/val;
6799 if( !activityunreliable )
6802 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
6805&infeasible, &tightened) );
6808 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6823 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6835newlb = (lhs - maxresactivity)/val;
6843newlb = (lhs - maxresactivity)/val;
6852 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6855&infeasible, &tightened) );
6858 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6872 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6888newlb = (rhs - minresactivity)/val;
6895 if( activityunreliable )
6898newlb = (rhs - minresactivity)/val;
6905 if( !activityunreliable )
6908 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
6911&infeasible, &tightened) );
6914 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6928 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6940newub = (lhs - maxresactivity)/val;
6948newub = (lhs - maxresactivity)/val;
6957 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
6960&infeasible, &tightened) );
6963 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
6977 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
6987#define MAXTIGHTENROUNDS 10 7001 unsigned inttightenmode;
7007 intoldnchgbdstotal;
7014assert(cons !=
NULL);
7015assert(nchgbds !=
NULL);
7016assert(cutoff !=
NULL);
7037assert(consdata !=
NULL);
7039nvars = consdata->nvars;
7049 if( !force && (consdata->boundstightened >= tightenmode) )
7056assert(consdata->coefsorted);
7084&isminsettoinfinity, &ismaxsettoinfinity);
7097easycase =
SCIPisLT(
scip, consdata->maxactdelta, maxeasyactivitydelta);
7104oldnchgbdstotal = *nchgbds;
7107 for( nrounds = 0; (force || consdata->boundstightened < tightenmode) && nrounds <
MAXTIGHTENROUNDS; ++nrounds )
7116assert(consdata->coefsorted);
7120consdata->boundstightened = (
unsignedint)tightenmode;
7126 while( v < nvars && v != lastchange && !(*cutoff) )
7128oldnchgbds = *nchgbds;
7140 if( *nchgbds > oldnchgbds )
7145 else if( consdata->coefsorted && v < consdata->nbinvars - 1
7147v = consdata->nbinvars;
7154*nchgbds - oldnchgbdstotal, nrounds);
7155oldnchgbdstotal += oldnchgbds;
7160 if( force &&
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
7187assert(cons !=
NULL);
7188assert(violated !=
NULL);
7194assert(consdata !=
NULL);
7198 if( consdata->row !=
NULL)
7210 SCIPdebugMsg(
scip,
" consdata activity=%.15g (lhs=%.15g, rhs=%.15g, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
7211activity, consdata->lhs, consdata->rhs, (
void*)consdata->row, checklprows,
7216lhsviol = consdata->lhs - activity;
7217rhsviol = activity - consdata->rhs;
7221 if( (lhsviol > 0) && (lhsviol > rhsviol) )
7226 else if( rhsviol > 0 )
7237assert(sol ==
NULL);
7251 if( !checkrelmaxabs )
7275 for( v = 0; v < consdata->nvars; ++v )
7277 if( consdata->vals !=
NULL)
7279coef = consdata->vals[v];
7285absval =
REALABS( coef * solval );
7286maxabs =
MAX( maxabs, absval );
7293 if( (consdata->lhs - activity) <= (1e-15 * maxabs) )
7295 SCIPdebugMsg(
scip,
" lhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7296consdata->lhs - activity, maxabs);
7310 SCIPdebugMsg(
scip,
" lhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7311consdata->lhs - activity, maxabs);
7347 if( (activity - consdata->rhs) <= (1e-15 * maxabs) )
7349 SCIPdebugMsg(
scip,
" rhs violated due to random noise: violation=%16.9g, maxabs=%16.9g\n",
7350activity - consdata->rhs, maxabs);
7364 SCIPdebugMsg(
scip,
" rhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
7365activity - consdata->rhs, maxabs);
7399 else if( consdata->checkabsolute &&
7437assert(cons !=
NULL);
7440assert(consdata !=
NULL);
7441assert(consdata->row ==
NULL);
7462assert(cons !=
NULL);
7465assert(consdata !=
NULL);
7467 if( consdata->row ==
NULL)
7482assert(consdata->row !=
NULL);
7484 if( consdata->nvars == 0 )
7506assert( pr == 0 || cr == 0 );
7530assert(consdata !=
NULL);
7532 if( consdata->nlrow ==
NULL)
7534assert(consdata->lhs <= consdata->rhs);
75370.0, consdata->nvars, consdata->vars, consdata->vals,
NULL, consdata->lhs, consdata->rhs,
SCIP_EXPRCURV_LINEAR) );
7539assert(consdata->nlrow !=
NULL);
7569assert(conshdlrdata !=
NULL);
7570assert(cons !=
NULL);
7571assert(cutoff !=
NULL);
7574assert(ncuts !=
NULL);
7575assert(consdata !=
NULL);
7591 if( !separateall && sol ==
NULL)
7604consdata->vals, +1.0, consdata->rhs, sol, cutoff, ncuts) );
7612consdata->vals, -1.0, -consdata->lhs, sol, cutoff, ncuts) );
7622consdata->vals, +1.0, consdata->rhs, sol, cutoff, ncuts) );
7627consdata->vals, -1.0, -consdata->lhs, sol, cutoff, ncuts) );
7632 if( *ncuts > oldncuts )
7662assert(cons !=
NULL);
7663assert(cutoff !=
NULL);
7664assert(nchgbds !=
NULL);
7669assert(consdata !=
NULL);
7671 if( consdata->eventdata ==
NULL)
7677assert(conshdlr !=
NULL);
7680assert(conshdlrdata !=
NULL);
7684assert(consdata->eventdata !=
NULL);
7699 if( tightenbounds )
7703oldnchgbds = *nchgbds;
7707 if( *nchgbds > oldnchgbds )
7714 if( rangedrowpropagation && tightenbounds && !(*cutoff) )
7718 SCIPdebug(
intoldnchgbds = *nchgbds; )
7734 if( nfixedvars > 0 )
7735*nchgbds += 2*nfixedvars;
7742&isminsettoinfinity, &ismaxsettoinfinity);
7746 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7747 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7757 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7758 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7768 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
7769 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
7772 if( consdata->nvars > 0 )
7807assert(cons !=
NULL);
7808assert(cutoff !=
NULL);
7809assert(nfixedvars !=
NULL);
7812assert(consdata !=
NULL);
7814 for( v = 0; v < consdata->nvars; ++v )
7816assert(consdata->vars !=
NULL);
7817var = consdata->vars[v];
7829 SCIPdebugMsg(
scip,
"converting variable <%s> with fixed bounds [%.15g,%.15g] into fixed variable fixed at %.15g\n",
7853assert(consdata->removedfixings);
7858#define MAX_CLIQUE_NONZEROS_PER_CONS 1000000 7950 intcliquenonzerosadded;
7958assert(cons !=
NULL);
7959assert(nfixedvars !=
NULL);
7960assert(nchgbds !=
NULL);
7961assert(cutoff !=
NULL);
7965assert(consdata !=
NULL);
7967 if( consdata->nvars < 2 )
7976 if( !consdata->implsadded )
7994nvars = consdata->nvars;
7995vars = consdata->vars;
7996vals = consdata->vals;
7999 if( !consdata->validactivities )
8001assert(consdata->validactivities);
8005finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
8006finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
8007finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
8008finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
8009finiteminact = (finitenegminact && finiteposminact);
8010finitemaxact = (finitenegmaxact && finiteposmaxact);
8012 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8017 intoldnchgbds = *nchgbds;
8023 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8026assert(consdata->validglbminact);
8029 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8032assert(consdata->validglbmaxact);
8034assert(consdata->validglbminact || consdata->validglbmaxact);
8039 for( v = nvars - 1; v >= 0; --v )
8047 if( value > maxabscontrib )
8049maxabscontrib = value;
8060 if( value > maxabscontrib )
8062maxabscontrib = value;
8071assert(0 <= position && position < nvars);
8073 if( !
SCIPisEQ(
scip, maxabscontrib, 1.0) && !allbinary )
8079 if( finiterhs && finiteminact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbminactivity), consdata->rhs - maxabscontrib) )
8081 for( v = nvars - 1; v >= 0; --v )
8086 if( v != position )
8093*nchgbds += nbdchgs;
8100*nchgbds += nbdchgs;
8120 if( finitelhs && finitemaxact &&
SCIPisEQ(
scip,
QUAD_TO_DBL(consdata->glbmaxactivity), consdata->lhs - maxabscontrib) )
8122 for( v = nvars - 1; v >= 0; --v )
8127 if( v != position )
8134*nchgbds += nbdchgs;
8141*nchgbds += nbdchgs;
8160 SCIPdebugMsg(
scip,
"extracted %d implications from constraint %s which led to %d bound changes, %scutoff detetcted\n", nimpls,
SCIPconsGetName(cons), *nchgbds - oldnchgbds, *cutoff ?
"":
"no ");
8166 if( *nchgbds - oldnchgbds > 0 )
8187consdata->implsadded =
TRUE;
8191 if( consdata->cliquesadded )
8194consdata->cliquesadded =
TRUE;
8195cliquenonzerosadded = 0;
8201nvars = consdata->nvars;
8202vars = consdata->vars;
8203vals = consdata->vals;
8208 if( !consdata->validactivities )
8210assert(consdata->validactivities);
8214finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
8215finitenegmaxact = (consdata->glbmaxactivityneginf == 0 && consdata->maxactivityneghuge == 0);
8216finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
8217finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
8218finiteminact = (finitenegminact && finiteposminact);
8219finitemaxact = (finitenegmaxact && finiteposmaxact);
8224 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
8228 intnposbinvars = 0;
8229 intnnegbinvars = 0;
8230 intallonebinary = 0;
8236 for( i = 0; i < nvars; ++i )
8245binvars[nposbinvars + nnegbinvars] = vars[i];
8246binvarvals[nposbinvars + nnegbinvars] = vals[i];
8253assert(nposbinvars + nnegbinvars <= nvars);
8259assert(nposbinvars + nnegbinvars <= nvars);
8264 if( allonebinary < nvars && (nposbinvars >= 2 || nnegbinvars >= 2) )
8267 intoldnchgbds = *nchgbds;
8273 if( (finitenegminact || finiteposminact) && !consdata->validglbminact )
8276assert(consdata->validglbminact);
8279 if( (finitenegmaxact || finiteposmaxact) && !consdata->validglbmaxact )
8282assert(consdata->validglbmaxact);
8284assert(consdata->validglbminact || consdata->validglbmaxact);
8290 if( finiterhs && finitenegminact && nposbinvars >= 2 )
8293threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8296#ifdef SCIP_DISABLED_CODE 8305 while( j < nposbinvars )
8319*nchgbds += nbdchgs;
8321cliquenonzerosadded += j;
8326 if( !stopped && !(*cutoff) && j < nposbinvars )
8329 intlastfit = j - 2;
8330assert(lastfit >= 0);
8336 while( lastfit >= 0 && j < nposbinvars )
8339 if(
SCIPisFeasGT(
scip, binvarvals[lastfit] + binvarvals[j], threshold) )
8341clqvars[lastfit + 1] = binvars[j];
8352*nchgbds += nbdchgs;
8354cliquenonzerosadded += (lastfit + 2);
8373 if( !stopped && !*cutoff && *nchgbds - oldnchgbds > 0 )
8394 if( !consdata->validactivities )
8396assert(consdata->validactivities);
8398nvars = consdata->nvars;
8399vars = consdata->vars;
8400vals = consdata->vals;
8406 for( i = 0; i < nvars; ++i )
8415binvars[nposbinvars + nnegbinvars] = vars[i];
8416binvarvals[nposbinvars + nnegbinvars] = vals[i];
8423assert(nposbinvars + nnegbinvars <= nvars);
8429assert(nposbinvars + nnegbinvars <= nvars);
8434oldnchgbds = *nchgbds;
8438 if( !stopped && !(*cutoff) && finitelhs && finiteposmaxact && nnegbinvars >= 2 )
8441threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8443i = nposbinvars + nnegbinvars - 1;
8445#ifdef SCIP_DISABLED_CODE 8455 while( j >= nposbinvars )
8470*nchgbds += nbdchgs;
8472cliquenonzerosadded += (i - j);
8477 if( !stopped && !(*cutoff) && jstart >= nposbinvars )
8480 intlastfit = jstart + 1;
8481assert(lastfit < i);
8488 while( lastfit <= i && j >= nposbinvars )
8491 if(
SCIPisFeasLT(
scip, binvarvals[lastfit] + binvarvals[j], threshold) )
8493assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 < i);
8494clqvars[lastfit - jstart - 2] = binvars[j];
8496assert(i - lastfit + 2 >= 2);
8506*nchgbds += nbdchgs;
8508cliquenonzerosadded += (i - lastfit + 2);
8527 if( !stopped && !*cutoff && *nchgbds - oldnchgbds > 0 )
8548 if( !consdata->validactivities )
8550assert(consdata->validactivities);
8552nvars = consdata->nvars;
8553vars = consdata->vars;
8554vals = consdata->vals;
8560 for( i = 0; i < nvars; ++i )
8569binvars[nposbinvars + nnegbinvars] = vars[i];
8570binvarvals[nposbinvars + nnegbinvars] = vals[i];
8577assert(nposbinvars + nnegbinvars <= nvars);
8583assert(nposbinvars + nnegbinvars <= nvars);
8588oldnchgbds = *nchgbds;
8592 if( !(*cutoff) && finiterhs && finiteminact && nnegbinvars >= 2 )
8601threshold = consdata->rhs -
QUAD_TO_DBL(consdata->glbminactivity);
8603i = nposbinvars + nnegbinvars - 1;
8606#ifdef SCIP_DISABLED_CODE 8616 while( j >= nposbinvars )
8618 if( !
SCIPisFeasGT(
scip, -binvarvals[j+1] - binvarvals[j], threshold) )
8631*nchgbds += nbdchgs;
8633cliquenonzerosadded += (i - j);
8638 if( !stopped && !(*cutoff) && jstart >= nposbinvars )
8641 intlastfit = j + 1;
8642assert(lastfit < i);
8649 while( lastfit <= i && j >= nposbinvars )
8652 if(
SCIPisFeasGT(
scip, -binvarvals[lastfit] - binvarvals[j], threshold) )
8654assert(lastfit - jstart - 2 >= 0 && lastfit - jstart - 2 < i);
8655clqvars[lastfit - jstart - 2] = binvars[j];
8657assert(i - lastfit + 2 >= 2);
8667*nchgbds += nbdchgs;
8669cliquenonzerosadded += (i - lastfit + 2);
8690 if( !stopped && !*cutoff && *nchgbds - oldnchgbds > 0 )
8711 if( !consdata->validactivities )
8713assert(consdata->validactivities);
8715nvars = consdata->nvars;
8716vars = consdata->vars;
8717vals = consdata->vals;
8723 for( i = 0; i < nvars; ++i )
8732binvars[nposbinvars + nnegbinvars] = vars[i];
8733binvarvals[nposbinvars + nnegbinvars] = vals[i];
8740assert(nposbinvars + nnegbinvars <= nvars);
8746assert(nposbinvars + nnegbinvars <= nvars);
8753 if( !stopped && !(*cutoff) && finitelhs && finitemaxact && nposbinvars >= 2 )
8762threshold = consdata->lhs -
QUAD_TO_DBL(consdata->glbmaxactivity);
8766#ifdef SCIP_DISABLED_CODE 8776 while( j < nposbinvars )
8778 if( !
SCIPisFeasLT(
scip, -binvarvals[j-1] - binvarvals[j], threshold) )
8790*nchgbds += nbdchgs;
8792cliquenonzerosadded += j;
8797 if( !stopped && !(*cutoff) && j < nposbinvars )
8800 intlastfit = j - 2;
8801assert(lastfit >= 0);
8807 while( lastfit >= 0 && j < nposbinvars )
8810 if(
SCIPisFeasLT(
scip, -binvarvals[lastfit] - binvarvals[j], threshold) )
8812clqvars[lastfit + 1] = binvars[j];
8823*nchgbds += nbdchgs;
8825cliquenonzerosadded += lastfit + 2;
8857 for( i = 0; i < nvars; ++i )
8872 if( lhsclique || rhsclique )
8877 SCIPdebugMsg(
scip,
"linear constraint <%s>: adding clique with %d vars (%d pos, %d neg)\n",
8881 for( i = 0; i < nvars; ++i )
8882values[i] = (rhsclique == (vals[i] > 0.0));
8889*nchgbds += nbdchgs;
8914assert(cons !=
NULL);
8915assert(nchgsides !=
NULL);
8916assert(infeasible !=
NULL);
8919assert(consdata !=
NULL);
8921*infeasible =
FALSE;
8931 for( i = 0; i < consdata->nvars && integral; ++i )
8952 SCIPdebugMsg(
scip,
"rounding sides=[%.15g,%.15g] of linear constraint <%s> with integral coefficients and variables only " 8953 "is infeasible\n", consdata->lhs, consdata->rhs,
SCIPconsGetName(cons));
8955*infeasible =
TRUE;
8959 SCIPdebugMsg(
scip,
"linear constraint <%s>: make sides integral: sides=[%.15g,%.15g]\n",
8967 if( !consdata->upgraded )
8975 if( !consdata->upgraded )
8978 SCIPdebugMsg(
scip,
"linear constraint <%s>: new integral sides: sides=[%.15g,%.15g]\n",
9053assert(cons !=
NULL);
9054assert(nchgcoefs !=
NULL);
9055assert(nchgsides !=
NULL);
9058assert(consdata !=
NULL);
9065 if( (consdata->validmaxabsval && consdata->maxabsval >
MAXVALRECOMP)
9066|| (consdata->validminabsval && consdata->minabsval <
MINVALRECOMP) )
9074&isminsettoinfinity, &ismaxsettoinfinity);
9080minleftactivity = 0.0;
9081maxleftactivity = 0.0;
9085 while( i < consdata->nvars )
9088var = consdata->vars[i];
9089val = consdata->vals[i];
9101 if( isvarrelevant[i] )
9109lval = consdata->lhs - minactivity;
9110rval = maxactivity - consdata->rhs;
9113 if( consdata->nvars == 2 )
9116otherval = consdata->vals[1-i];
9120lval = consdata->lhs - val*lb;
9126rval = val*ub - consdata->rhs;
9131newval =
MAX3(lval, rval, 0.0);
9135newlhs = consdata->lhs - val * lb;
9136newlhs += newval * lb;
9137newrhs = consdata->rhs - val * ub;
9138newrhs += newval * ub;
9142 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9144maxactivity, consdata->lhs, consdata->rhs);
9160&ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9165consdata->lhs, newlhs);
9175consdata->rhs, newrhs);
9192minleftactivity += val * lb;
9202maxleftactivity += val * ub;
9212 if( isvarrelevant[i] )
9220lval = minactivity - consdata->lhs;
9221rval = consdata->rhs - maxactivity;
9224 if( consdata->nvars == 2 )
9227otherval = consdata->vals[1-i];
9231lval = val*ub - consdata->lhs;
9237rval = consdata->rhs - val*lb;
9242newval =
MIN3(lval, rval, 0.0);
9246newlhs = consdata->lhs - val * ub;
9247newlhs += newval * ub;
9248newrhs = consdata->rhs - val * lb;
9249newrhs += newval * lb;
9253 SCIPdebugMsg(
scip,
"linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
9255maxactivity, consdata->lhs, consdata->rhs);
9271&ismaxacttight, &isminsettoinfinity, &ismaxsettoinfinity);
9276consdata->lhs, newlhs);
9286consdata->rhs, newrhs);
9303minleftactivity += val * ub;
9313maxleftactivity += val * lb;
9322minleftactivity, consdata->rhs);
9324maxleftactivity, consdata->lhs);
9351aggrlhs = consdata->lhs - minactivity + minleftactivity;
9352aggrrhs = consdata->rhs - maxactivity + maxleftactivity;
9369 while( i < consdata->nvars )
9372 if( !isvarrelevant[i] )
9375var = consdata->vars[i];
9376val = consdata->vals[i];
9381 SCIPdebugMsg(
scip,
"val = %g\tlhs = %g\trhs = %g\n", val, consdata->lhs, consdata->rhs);
9382 SCIPdebugMsg(
scip,
"linear constraint <%s>: remove variable <%s> from constraint since it is redundant\n",
9388minleftactivitypart = val * lb;
9389maxleftactivitypart = val * ub;
9393minleftactivitypart = val * ub;
9394maxleftactivitypart = val * lb;
9398isvarrelevant[i] = isvarrelevant[consdata->nvars - 1];
9403newlhs = consdata->lhs - minleftactivitypart;
9404newrhs = consdata->rhs - maxleftactivitypart;
9409consdata->lhs, newlhs);
9419consdata->rhs, newrhs);
9456assert(cons !=
NULL);
9457assert(cutoff !=
NULL);
9458assert(nfixedvars !=
NULL);
9459assert(ndelconss !=
NULL);
9462assert(consdata !=
NULL);
9463assert(consdata->nvars == 1);
9464assert(
SCIPisEQ(
scip, consdata->lhs, consdata->rhs));
9467var = consdata->vars[0];
9468val = consdata->vals[0];
9488 if( !consdata->upgraded )
9510assert(cons !=
NULL);
9511assert(cutoff !=
NULL);
9512assert(naggrvars !=
NULL);
9513assert(ndelconss !=
NULL);
9516assert(consdata !=
NULL);
9517assert(consdata->nvars == 2);
9518assert(
SCIPisEQ(
scip, consdata->lhs, consdata->rhs));
9520 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregate %.15g<%s> + %.15g<%s> == %.15g\n",
9522consdata->vals[1],
SCIPvarGetName(consdata->vars[1]), consdata->rhs);
9526consdata->rhs, &infeasible, &redundant, &aggregated) );
9545 if( !consdata->upgraded )
9567assert(consdata !=
NULL);
9568assert(newlhs !=
NULL);
9569assert(newrhs !=
NULL);
9575 if( slackcoef > 0.0 )
9580*newrhs = consdata->rhs - slackcoef * slackvarlb;
9584*newlhs = consdata->lhs - slackcoef * slackvarub;
9591*newlhs = consdata->rhs - slackcoef * slackvarlb;
9595*newrhs = consdata->lhs - slackcoef * slackvarub;
9641 intmaxnlocksremove;
9652assert(cons !=
NULL);
9653assert(cutoff !=
NULL);
9654assert(naggrvars !=
NULL);
9657assert(consdata !=
NULL);
9658assert(consdata->nvars > 2);
9659assert(
SCIPisEQ(
scip, consdata->lhs, consdata->rhs));
9668lhs = consdata->lhs;
9669rhs = consdata->rhs;
9671 if( consdata->nvars == 3 )
9676maxnlocksremove = 3;
9678 else if( consdata->nvars == 4 )
9683maxnlocksremove = 2;
9688maxnlocksremove = 1;
9707vars = consdata->vars;
9708vals = consdata->vals;
9711bestnlocks = INT_MAX;
9712bestremovescons =
FALSE;
9713bestslackdomrng = 0.0;
9714coefszeroone =
TRUE;
9715coefsintegral =
TRUE;
9716varsintegral =
TRUE;
9724 for( v = 0; v < consdata->nvars; ++v )
9734assert(vars !=
NULL);
9735assert(vals !=
NULL);
9748 if( absval < minabsval )
9750 if( absval > maxabsval )
9755 if( maxabsval / minabsval > conshdlrdata->maxmultaggrquot )
9759coefszeroone = coefszeroone &&
SCIPisEQ(
scip, absval, 1.0);
9787 if( nlocks > maxnlocksremove )
9791 if( (iscont || (coefsintegral && varsintegral &&
SCIPisEQ(
scip, absval, 1.0))) &&
9805slackdomrng = (varub - varlb)*absval;
9809better = (slacktype > bestslacktype) || (bestslackpos == -1);
9810 if( !better && slacktype == bestslacktype )
9812better = (nlocks < bestnlocks);
9813 if( nlocks == bestnlocks && !bestremovescons )
9815better =
SCIPisGT(
scip, slackdomrng, bestslackdomrng);
9816equal = !better &&
SCIPisGE(
scip, slackdomrng, bestslackdomrng);
9820 if( better || equal )
9834&ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
9839 if( !ismintight || !ismaxtight )
9859 if( conshdlrdata->multaggrremove && !removescons )
9863 if( bestremovescons && !removescons )
9869 if( !removescons && nlocks > maxnlocksstay )
9872better = better || (!bestremovescons && removescons);
9876bestslacktype = slacktype;
9877bestnlocks = nlocks;
9878bestslackdomrng = slackdomrng;
9879bestremovescons = removescons;
9899 for( v = 0; v < consdata->nvars; ++v )
9901 if( v != bestslackpos )
9933assert(!samevar || (supinf > 0 && infinf > 0));
9938 if( (samevar && (supinf > 1 || infinf > 1)) || (!samevar && supinf > 0 && infinf > 0) )
9940 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: infimum and supremum are both infinite\n");
9949 if( bestslackpos >= 0
9951|| (coefsintegral && varsintegral && nimplvars == 0)) )
9964assert(bestslackpos < consdata->nvars);
9973slackvar = vars[bestslackpos];
9974slackcoef = vals[bestslackpos];
9976aggrconst = consdata->rhs/slackcoef;
9989 for( v = 0; v < consdata->nvars; ++v )
9991 scalars[v] = -consdata->vals[v]/slackcoef;
9994 SCIPdebugMsgPrint(
scip,
" %+.15g, bounds of <%s>: [%.15g,%.15g], nlocks=%d, maxnlocks=%d, removescons=%u\n",
9996bestnlocks, bestremovescons ? maxnlocksremove : maxnlocksstay, bestremovescons);
10000&infeasible, &aggregated) );
10001assert(aggregated);
10017 if( bestremovescons )
10022 if( !consdata->upgraded )
10026 else if( ncontvars == 1 )
10030assert(0 <= contvarpos && contvarpos < consdata->nvars);
10031var = vars[contvarpos];
10040 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting continuous variable <%s> to implicit integer variable\n",
10062absval =
REALABS(vals[contvarpos]);
10073#ifdef WITH_DEBUG_SOLUTION 10074 if( SCIPdebugIsMainscip(
scip) )
10083 SCIPdebugMsg(
scip,
"linear constraint <%s>: aggregating continuous variable <%s> to newly created implicit integer variable <%s>, aggregation factor = %g\n",
10091 SCIPdebugMsg(
scip,
"infeasible aggregation of variable <%s> to implicit variable <%s>, domain is empty\n",
10113consdata->boundstightened = 0;
10114consdata->rangedrowpropagated = 0;
10115consdata->presolved =
FALSE;
10118 else if( ncontvars == 0 && nimplvars == 0 && nintvars == 1 && !coefszeroone )
10125assert(varsintegral);
10126assert(0 <= intvarpos && intvarpos < consdata->nvars);
10127var = vars[intvarpos];
10135 SCIPdebugMsg(
scip,
"linear constraint <%s>: converting integer variable <%s> to implicit integer variable\n",
10170vars = consdata->vars;
10171nvars = consdata->nvars;
10173assert(vars !=
NULL);
10175 for( v = 0; v < nvars; ++v )
10179assert(var !=
NULL);
10185assert(var !=
NULL);
10199val = consdata->vals[v];
10206(*scale) = val / -objval;
10210 else if(
SCIPisEQ(
scip, -objval * (*scale), val) )
10218(*scale) = val / objval;
10220 else if( !
SCIPisEQ(
scip, objval * (*scale), val) )
10247assert(cons !=
NULL);
10248assert(conshdlrdata !=
NULL);
10251assert(consdata !=
NULL);
10252assert(
SCIPisEQ(
scip, consdata->lhs, consdata->rhs));
10254nvars = consdata->nvars;
10258 if( nvars > nobjvars || nvars == 0 )
10262 if( (nvars < nobjvars && !conshdlrdata->detectpartialobjective) ||
10263(nvars == nobjvars && (!conshdlrdata->detectcutoffbound || !conshdlrdata->detectlowerbound)) )
10266offset = consdata->rhs;
10276vars = consdata->vars;
10277assert(vars !=
NULL);
10281 SCIPdebugMsg(
scip,
"linear equality constraint <%s> == %g (offset %g) is a subset of the objective function\n",
10289 for( v = 0; v < nvars; ++v )
10327assert(consdata !=
NULL);
10363assert(cons !=
NULL);
10364assert(conshdlrdata !=
NULL);
10367assert(consdata !=
NULL);
10370 if(
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
10373nvars = consdata->nvars;
10388 if( nobjvars == 0 )
10399assert(scale != 0.0);
10403 if( conshdlrdata->detectcutoffbound && rhsfinite )
10407primalbound = (consdata->rhs - offset) / scale;
10409 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10415 if( conshdlrdata->detectlowerbound && lhsfinite )
10419lowerbound = (consdata->lhs - offset) / scale;
10421 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10427 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !lhsfinite)) ||
10428(conshdlrdata->detectlowerbound && !rhsfinite) )
10437 if( conshdlrdata->detectlowerbound && rhsfinite )
10441lowerbound = (consdata->rhs - offset) / scale;
10443 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
10449 if( conshdlrdata->detectcutoffbound && lhsfinite )
10453primalbound = (consdata->lhs - offset) / scale;
10455 SCIPdebugMsg(
scip,
"constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
10461 if( (conshdlrdata->detectcutoffbound && (conshdlrdata->detectlowerbound || !rhsfinite)) ||
10462(conshdlrdata->detectlowerbound && !lhsfinite) )
10490assert(cons !=
NULL);
10491assert(conshdlrdata !=
NULL);
10492assert(cutoff !=
NULL);
10493assert(nfixedvars !=
NULL);
10494assert(naggrvars !=
NULL);
10495assert(ndelconss !=
NULL);
10498assert(consdata !=
NULL);
10499assert(consdata->removedfixings);
10502 if( !
SCIPisEQ(
scip, consdata->lhs, consdata->rhs) )
10506 if( consdata->nvars == 1 )
10511 else if( consdata->nvars == 2 )
10542assert(consdata !=
NULL);
10543assert(0 <= pos && pos < consdata->nvars);
10545 for( v = 0; v < consdata->nvars; ++v )
10569assert(minval !=
NULL);
10570assert(maxval !=
NULL);
10575*minval = -maxresactivity;
10577*minval = (side - maxresactivity)/val;
10580*maxval = -minresactivity;
10582*maxval = (side - minresactivity)/val;
10587*minval = minresactivity;
10589*minval = (side - minresactivity)/val;
10592*maxval = maxresactivity;
10594*maxval = (side - maxresactivity)/val;
10626assert(cons !=
NULL);
10627assert(cutoff !=
NULL);
10628assert(nfixedvars !=
NULL);
10629assert(naggrvars !=
NULL);
10630assert(ndelconss !=
NULL);
10640assert(consdata !=
NULL);
10650bestislhs =
FALSE;
10663 if( consdata->nvars <= 2 )
10664maxotherlocks = INT_MAX;
10665 else if( consdata->nvars == 3 )
10667 else if( consdata->nvars == 4 )
10673 if( lhsexists && rhsexists && maxotherlocks < INT_MAX )
10678 for( i = 0; i < consdata->nvars && bestisint; ++i )
10690val = consdata->vals[i];
10694 if( absval < minabsval )
10695minabsval = absval;
10696 if( absval > maxabsval )
10697maxabsval = absval;
10700 if( maxabsval / minabsval > conshdlrdata->maxdualmultaggrquot )
10703var = consdata->vars[i];
10707 if( bestpos >= 0 && isint )
10719val = consdata->vals[i];
10756 if( agglhs || aggrhs )
10769&ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
10770assert(
SCIPisLE(
scip, minresactivity, maxresactivity));
10776assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
10791recalculated =
FALSE;
10792oldmaxresactivity = maxresactivity;
10793oldminresactivity = minresactivity;
10799recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10800isminsettoinfinity =
TRUE;
10807recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10808ismaxsettoinfinity =
TRUE;
10812 if( recalculated )
10814assert(
SCIPisLE(
scip, minresactivity, maxresactivity));
10851recalculated =
FALSE;
10852oldmaxresactivity = maxresactivity;
10853oldminresactivity = minresactivity;
10859recalculated = !
SCIPisEQ(
scip, oldminresactivity, minresactivity);
10866recalculated = recalculated || !
SCIPisEQ(
scip, oldmaxresactivity, maxresactivity);
10870 if( recalculated )
10886bestislhs =
FALSE;
10894 if( bestpos >= 0 )
10913assert(!bestislhs || lhsexists);
10914assert(bestislhs || rhsexists);
10916bestvar = consdata->vars[bestpos];
10917bestval = consdata->vals[bestpos];
10918assert(bestisint ==
10933 for( j = 0; j < consdata->nvars; ++j )
10935 if( j != bestpos )
10937aggrvars[naggrs] = consdata->vars[j];
10938aggrcoefs[naggrs] = -consdata->vals[j]/consdata->vals[bestpos];
10945 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: too large aggregation coefficients\n");
10958aggrcoefs[naggrs] =
SCIPfloor(
scip, aggrcoefs[naggrs]+0.5);
10993assert(!samevar || (supinf > 0 && infinf > 0));
10995aggrconst = (bestislhs ? consdata->lhs/bestval : consdata->rhs/bestval);
10998assert(naggrs == consdata->nvars-1);
11007aggregated =
FALSE;
11008infeasible =
FALSE;
11011 if( (samevar && supinf == 1 && infinf == 1) || (!samevar && (supinf == 0 || infinf == 0)) )
11022 for( j = 0; j < naggrs; ++j)
11031assert(!infeasiblevartypechg);
11040 SCIPdebugMsg(
scip,
"do not perform multi-aggregation: infimum and supremum are both infinite\n");
11059 if( !consdata->upgraded )
11074#define CONTWEIGHT 8 11123assert( cons !=
NULL);
11126assert( consdata !=
NULL);
11153lhs = consdata->lhs;
11154vars = consdata->vars;
11155vals = consdata->vals;
11156nvars = consdata->nvars;
11165 for( v = 0; v < nvars && noddvars < 3; ++v )
11174 if( val % 2 != 0 )
11180 if( noddvars == 0 )
11192 if( noddvars == 1 )
11194assert( var1 !=
NULL);
11196 SCIPdebugMsg(
scip,
"linear constraint <%s>: try fixing variable <%s> to <%g>\n",
11216 else if( noddvars == 2 )
11218assert( var1 !=
NULL);
11219assert( var2 !=
NULL);
11225 SCIPdebugMsg(
scip,
"linear constraint <%s>: try aggregation of variables <%s> and <%s>\n",
11229lhsodd ? 1.0 : 0.0, &infeasible, &redundant, &aggregated) );
11270 while( success && consdata->nvars >= 1 );
11289assert(consdata !=
NULL);
11290assert(0 <= ind1 && ind1 < consdata->nvars);
11291assert(0 <= ind2 && ind2 < consdata->nvars);
11299 if( vartype2 != vartype1 )
11309value =
REALABS(consdata->vals[ind2]) -
REALABS(consdata->vals[ind1]);
11312 return(value > 0 ? +1 : (value < 0 ? -1 : 0));
11347assert(consdata !=
NULL);
11349nvars = consdata->nvars;
11355lhs = consdata->lhs;
11356rhs = consdata->rhs;
11365vals = consdata->vals;
11366vars = consdata->vars;
11367assert(vars !=
NULL);
11368assert(vals !=
NULL);
11374 for( v = nvars - 1; v >= 0; --v )
11380secondminval = minval;
11383 else if( secondminval > vals[v] || secondminval ==
SCIP_INVALID)
11384secondminval = vals[v];
11398 for( v = nvars - 1; v >= 0; --v )
11402(*nchgcoefs) += nvars;
11481assert(cons !=
NULL);
11482assert(nchgcoefs !=
NULL);
11483assert(nchgsides !=
NULL);
11485*infeasible =
FALSE;
11495assert(consdata !=
NULL);
11497nvars = consdata->nvars;
11521consdata->normalized =
FALSE;
11524assert(nvars == consdata->nvars);
11529 if( !consdata->normalized )
11532lhs = consdata->lhs;
11533rhs = consdata->rhs;
11547 SCIPdebug( oldnchgcoefs = *nchgcoefs; )
11548 SCIPdebug( oldnchgsides = *nchgsides; )
11551 if( haslhs && hasrhs )
11557assert(haslhs != hasrhs);
11569 SCIPsort(perm, consdataCompSim, (
void*)consdata, nvars);
11573consdata->indexsorted =
FALSE;
11574consdata->coefsorted =
FALSE;
11576vars = consdata->vars;
11577vals = consdata->vals;
11578assert(vars !=
NULL);
11579assert(vals !=
NULL);
11600&ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
11603 if( isminsettoinfinity || ismaxsettoinfinity )
11606assert(ismintight);
11607assert(ismaxtight);
11608assert(maxact > minact);
11614side = haslhs ? lhs : rhs;
11615minactsub = minact;
11616maxactsub = maxact;
11646 while( v < nvars &&
SCIPisEQ(
scip, side, vals[v]) )
11685 for(
w= 0;
w< v; ++
w)
11690assert(vals[
w] > 0);
11693maxactsub -= ub * vals[
w];
11694minactsub -= lb * vals[
w];
11695assert(maxactsub > minactsub);
11726maxactsub -= ub * vals[0];
11727minactsub -= lb * vals[0];
11731maxactsub -= lb * vals[0];
11732minactsub -= ub * vals[0];
11734assert(maxactsub > minactsub);
11739allcoefintegral =
TRUE;
11742 for( ; v < nvars - 1; ++v )
11749allcoefintegral =
FALSE;
11768maxactsub -= ub * vals[v];
11769minactsub -= lb * vals[v];
11773maxactsub -= lb * vals[v];
11774minactsub -= ub * vals[v];
11791rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11792lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11795 if( offsetv == -1 && (rredundant || lredundant) )
11801assert(v < nvars || (offsetv >= 0 && gcd > 1));
11821 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",
11822v, nvars, minactsub, maxactsub, redundant, hasrhs, siderest, gcd, offsetv);
11829rredundant = hasrhs && maxactsub <= siderest &&
SCIPisFeasGT(
scip, minactsub, siderest - gcd);
11830lredundant = haslhs &&
SCIPisFeasLT(
scip, maxactsub, siderest) && minactsub >= siderest - gcd;
11833 if( v < nvars && numericsok && (redundant || (offsetv == -1 && (rredundant || lredundant))) )
11843 for(
w= v;
w< nvars; ++
w)
11852 if( vals[
w] > 0 )
11854tmpmaxactsub += ub * vals[
w];
11855tmpminactsub += lb * vals[
w];
11859tmpmaxactsub += lb * vals[
w];
11860tmpminactsub += ub * vals[
w];
11862assert(tmpmaxactsub >= tmpminactsub);
11867assert(offsetv == -1);
11881assert((hasrhs &&
SCIPisFeasLE(
scip, tmpmaxactsub, siderest) && tmpminactsub > siderest - gcd) ||
11882(haslhs && tmpmaxactsub < siderest &&
SCIPisFeasGE(
scip, tmpminactsub, siderest - gcd)));
11885 SCIPdebugMsg(
scip,
"removing %d last variables from constraint <%s>, because they never change anything on the feasibility of this constraint\n",
11889 for(
w= nvars - 1;
w>= v; --
w)
11893(*nchgcoefs) += (nvars - v);
11897oldcoef = vals[
w];
11900assert(vars == consdata->vars);
11901assert(vals == consdata->vals);
11902assert(w < consdata->nvars);
11908gcd = (
SCIP_Longint)(gcd / (oldcoef/vals[
w]) + feastol);
11916rhs = consdata->rhs;
11923lhs = consdata->lhs;
11926assert(offsetv == -1 ||
SCIPisEQ(
scip, vals[offsetv], consdata->lhs));
11934nvars = consdata->nvars;
11937allcoefintegral =
TRUE;
11941 for(
w= offsetv + 1;
w< nvars; ++
w)
11950 if( offsetv >= 0 && gcd == 1 )
11960 for( v = nvars - 1; v > offsetv; --v )
11968allcoefintegral =
FALSE;
11994 if( candpos == -1 )
12004assert(v > offsetv || candpos > offsetv);
12010candpos = nvars - 1;
12013 if( gcd > 1 && allcoefintegral && !redundant )
12016allcoefintegral =
FALSE;
12020 if( offsetv >= 0 && gcd > 1 && allcoefintegral )
12022assert(offsetv + 1 < nvars);
12023assert(0 <= candpos && candpos < nvars);
12031 for(
w= offsetv + 1;
w< nvars; ++
w)
12046assert(rest < gcd);
12049restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
12050assert(restcoef >= 1);
12051assert(restcoef < gcd);
12056 if( restcoef > rest )
12057newcoef = vals[candpos] - restcoef + gcd;
12059newcoef = vals[candpos] - restcoef;
12064 if( rest == 0 || restcoef < rest )
12065newcoef = vals[candpos] - restcoef;
12067newcoef = vals[candpos] - restcoef + gcd;
12077notchangable =
TRUE;
12118 for(
w= offsetv;
w>= 0; --
w)
12120assert(vals[
w] > 0);
12124(*nchgcoefs) += (offsetv + 1);
12127 if( !notchangable )
12130assert(vars == consdata->vars);
12131assert(vals == consdata->vals);
12137nvars = consdata->nvars;
12138assert(nvars >= 2);
12142lhs = consdata->lhs;
12143rhs = consdata->rhs;
12157allcoefintegral =
TRUE;
12159 for( v = nvars - 1; v >= 0; --v )
12164allcoefintegral =
FALSE;
12181 if( allcoefintegral )
12192 for( v = nvars - 1; v >= 0; --v )
12228 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the right hand side down\n");
12233 for( v = nvars - 1; v >= 0; --v )
12270 if( allcoefintegral )
12285 for( v = nvars - 1; v >= 0; --v )
12333 SCIPdebugMsg(
scip,
"rounding all non-integral coefficients and the left hand side down\n");
12338 for( v = nvars - 1; v >= 0; --v )
12375assert(vars == consdata->vars);
12376assert(vals == consdata->vals);
12381rhs = consdata->rhs;
12382lhs = consdata->lhs;
12389nvars = consdata->nvars;
12393allcoefintegral =
TRUE;
12396 for( v = nvars - 1; v >= 0; --v )
12403 if( !allcoefintegral )
12418assert(nvars >= 2);
12423 SCIPdebug( oldnchgcoefs = *nchgcoefs; )
12424 SCIPdebug( oldnchgsides = *nchgsides; )
12439 for( v = nvars - 1; v >= 0; --v )
12446 if( foundbin == -1 )
12474foundbin = nvars - 1;
12477 if( gcd == 1 || foundbin == -1)
12480assert((onlybin && gcd == -1) || (!onlybin && gcd > 1));
12488 for( v = foundbin; v >= 0; --v )
12517 if( candpos == -1 )
12525 if( onlybin && v == foundbin - 1 )
12526candpos2 = foundbin;
12531 if( onlybin && candpos == v + 1 && candpos2 == v + 2 )
12533assert(candpos2 == nvars - 1);
12536candpos = candpos2;
12559assert(candpos >= 0 && candpos < nvars);
12576assert(rest < gcd);
12579 if( vals[candpos] < 0 )
12581restcoef = ((
SCIP_Longint)(vals[candpos] - feastol)) % gcd;
12582assert(restcoef <= -1);
12586restcoef = ((
SCIP_Longint)(vals[candpos] + feastol)) % gcd;
12587assert(restcoef >= 1);
12588assert(restcoef < gcd);
12600 if( restcoef > rest )
12601newcoef = vals[candpos] - restcoef + gcd;
12603newcoef = vals[candpos] - restcoef;
12615 if( rest == 0 || restcoef < rest )
12616newcoef = vals[candpos] - restcoef;
12618newcoef = vals[candpos] - restcoef + gcd;
12622 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));
12638assert(vars == consdata->vars);
12639assert(vals == consdata->vals);
12646rhs = consdata->rhs;
12647lhs = consdata->lhs;
12651nvars = consdata->nvars;
12653 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));
12655 while( nvars >= 2 );
12675 int* diffidx0minus1,
12676 int* diffidx1minus0,
12678 intcommonidxweight,
12679 intdiffidx0minus1weight,
12680 intdiffidx1minus0weight,
12705assert(cons0 !=
NULL);
12706assert(cons1 !=
NULL);
12707assert(commonidx0 !=
NULL);
12708assert(commonidx1 !=
NULL);
12709assert(diffidx0minus1 !=
NULL);
12710assert(diffidx1minus0 !=
NULL);
12711assert(nvarscommon >= 1);
12712assert(commonidxweight >= nvarscommon);
12713assert(nchgcoefs !=
NULL);
12714assert(aggregated !=
NULL);
12719*infeasible =
FALSE;
12725assert(consdata0 !=
NULL);
12726assert(consdata0->nvars >= 1);
12727assert(
SCIPisLE(
scip, consdata0->lhs, consdata0->rhs));
12728assert(diffidx0minus1weight >= consdata0->nvars - nvarscommon);
12732assert(consdata1 !=
NULL);
12733assert(consdata1->nvars >= 1);
12734assert(
SCIPisEQ(
scip, consdata1->lhs, consdata1->rhs));
12735assert(diffidx1minus0weight >= consdata1->nvars - nvarscommon);
12737*aggregated =
FALSE;
12743bestvarweight = commonidxweight + diffidx0minus1weight;
12744bestnvars = consdata0->nvars;
12746bestscalarsum = 0.0;
12747commonvarlindependent =
TRUE;
12748 for( v = 0; v < nvarscommon; ++v )
12750assert(consdata0->vars[commonidx0[v]] == consdata1->vars[commonidx1[v]]);
12751 a= consdata1->vals[commonidx1[v]];
12752 b= -consdata0->vals[commonidx0[v]];
12758varweight = diffidx0minus1weight + diffidx1minus0weight;
12759nvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12761betterscalarsum = (scalarsum < bestscalarsum);
12762 for( i = 0; i < nvarscommon
12763&& (varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum)); ++i )
12765aggrcoef =
a* consdata0->vals[commonidx0[i]] +
b* consdata1->vals[commonidx1[i]];
12768varweight +=
getVarWeight(consdata0->vars[commonidx0[i]]);
12772 if( varweight < bestvarweight || (varweight == bestvarweight && betterscalarsum) )
12775bestvarweight = varweight;
12777bestscalarsum = scalarsum;
12784 if( commonvarlindependent && v > 0 )
12786consdata1->vals[commonidx1[v]] * consdata0->vals[commonidx0[0]],
12787consdata1->vals[commonidx1[0]] * consdata0->vals[commonidx0[v]]);
12804 if( consdata1->vals[commonidx1[bestv]] > 0.0 )
12806 a= consdata1->vals[commonidx1[bestv]];
12807 b= -consdata0->vals[commonidx0[bestv]];
12811 a= -consdata1->vals[commonidx1[bestv]];
12812 b= consdata0->vals[commonidx0[bestv]];
12821assert(commonvarlindependent);
12822 if( consdata1->vals[commonidx1[0]] > 0.0 )
12824 a= consdata1->vals[commonidx1[0]];
12825 b= -consdata0->vals[commonidx0[0]];
12829 a= -consdata1->vals[commonidx1[0]];
12830 b= consdata0->vals[commonidx0[0]];
12851 SCIPdebug( bestvarweight = diffidx0minus1weight + diffidx1minus0weight; )
12852bestnvars = consdata0->nvars + consdata1->nvars - 2*nvarscommon;
12855 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> := %.15g*<%s> + %.15g*<%s> -> nvars: %d -> %d, weight: %d -> %d\n",
12857consdata0->nvars, bestnvars, commonidxweight + diffidx0minus1weight, bestvarweight);
12867 if( !commonvarlindependent )
12869 for( i = 0; i < nvarscommon; ++i )
12871assert(0 <= commonidx0[i] && commonidx0[i] < consdata0->nvars);
12872assert(0 <= commonidx1[i] && commonidx1[i] < consdata1->nvars);
12874aggrcoef =
a* consdata0->vals[commonidx0[i]] +
b* consdata1->vals[commonidx1[i]];
12877assert(newnvars < bestnvars);
12878newvars[newnvars] = consdata0->vars[commonidx0[i]];
12879newvals[newnvars] = aggrcoef;
12888 for( i = 0; i < nvarscommon; ++i )
12890assert(0 <= commonidx0[i] && commonidx0[i] < consdata0->nvars);
12891assert(0 <= commonidx1[i] && commonidx1[i] < consdata1->nvars);
12893aggrcoef =
a* consdata0->vals[commonidx0[i]] +
b* consdata1->vals[commonidx1[i]];
12900 for( i = 0; i < consdata0->nvars - nvarscommon; ++i )
12902assert(0 <= diffidx0minus1[i] && diffidx0minus1[i] < consdata0->nvars);
12904aggrcoef =
a* consdata0->vals[diffidx0minus1[i]];
12906assert(newnvars < bestnvars);
12907newvars[newnvars] = consdata0->vars[diffidx0minus1[i]];
12908newvals[newnvars] = aggrcoef;
12913 for( i = 0; i < consdata1->nvars - nvarscommon; ++i )
12915assert(0 <= diffidx1minus0[i] && diffidx1minus0[i] < consdata1->nvars);
12917aggrcoef =
b* consdata1->vals[diffidx1minus0[i]];
12919assert(newnvars < bestnvars);
12920newvars[newnvars] = consdata1->vars[diffidx1minus0[i]];
12921newvals[newnvars] = aggrcoef;
12924assert(newnvars == bestnvars);
12932newlhs =
a* consdata0->lhs +
b* consdata1->lhs;
12936newrhs =
a* consdata0->rhs +
b* consdata1->rhs;
12946assert(newconsdata !=
NULL);
12949newconsdata->upgraded = consdata0->upgraded;
12965 if( !consdata0->upgraded )
12966(*nchgcoefs) += consdata0->nvars + consdata1->nvars - nvarscommon;
12967*aggregated =
TRUE;
13007assert(key1 !=
NULL);
13008assert(key2 !=
NULL);
13011assert(consdata1->indexsorted);
13012assert(consdata2->indexsorted);
13018 if( key1 == key2 )
13022 if( consdata1->nvars != consdata2->nvars )
13026 for( i = 0; i < consdata1->nvars; ++i )
13028 if( consdata1->vars[i] != consdata2->vars[i] )
13030assert(
SCIPvarCompare(consdata1->vars[i], consdata2->vars[i]) == 1 ||
13034assert(
SCIPvarCompare(consdata1->vars[i], consdata2->vars[i]) == 0);
13046 for( i = 0; i < consdata1->nvars; ++i )
13048 SCIP_Realscale = consdata2->vals[i] / consdata1->vals[i];
13050 if( minscale > scale )
13058 if( maxscale < scale )
13085assert(key !=
NULL);
13087assert(consdata !=
NULL);
13088assert(consdata->nvars > 0);
13090assert(consdata->indexsorted);
13097 return SCIPhashFour(consdata->nvars, minidx, mididx, maxidx);
13110assert(cons !=
NULL);
13113assert(consdata !=
NULL);
13115 return(((
unsigned int)consdata->upgraded)<<31) + (
unsignedint)
SCIPconsGetPos(cons);
13129 int* nparallelconss
13133 unsigned intquerykey;
13135*nparallelconss = 0;
13142 if( conskey < querykey )
13144parallelconss[(*nparallelconss)++] = *querycons;
13145*querycons = parallelcons;
13146querykey = conskey;
13150parallelconss[(*nparallelconss)++] = parallelcons;
13161 if( *querycons == parallelcons )
13197 intnparallelconss;
13202assert(blkmem !=
NULL);
13203assert(conss !=
NULL);
13204assert(firstchange !=
NULL);
13205assert(cutoff !=
NULL);
13206assert(ndelconss !=
NULL);
13207assert(nchgsides !=
NULL);
13210hashtablesize = nconss;
13212hashGetKeyLinearcons, hashKeyEqLinearcons, hashKeyValLinearcons, (
void*)
scip) );
13217 for( c = 0; c < nconss; ++c )
13237assert(consdata0 !=
NULL);
13239assert(consdata0->indexsorted);
13248 if( nparallelconss != 0 )
13258lhs = consdata0->lhs;
13259rhs = consdata0->rhs;
13261 for( i = 0; i < nparallelconss; ++i )
13267consdel = parallelconss[i];
13280assert(consdatadel !=
NULL);
13281assert(consdata0->nvars >= 1 && consdata0->nvars == consdatadel->nvars);
13283assert(consdatadel->indexsorted);
13284assert(consdata0->vars[0] == consdatadel->vars[0]);
13286scale = consdata0->vals[0] / consdatadel->vals[0];
13287assert(scale != 0.0);
13294assert(consdata0->validmaxabsval);
13295assert(consdatadel->validmaxabsval);
13297 SCIP_Realscale0 = 1.0 / consdata0->maxabsval;
13300 for( k = 0; k < consdata0->nvars; ++k )
13302assert(
SCIPisEQ(
scip, scale0 * consdata0->vals[k], scaledel * consdatadel->vals[k]));
13310 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with equal coefficients into single ranged row\n",
13316lhs =
MAX(scale * consdatadel->lhs, lhs);
13319rhs =
MIN(scale * consdatadel->rhs, rhs);
13324 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with negated coefficients into single ranged row\n",
13330lhs =
MAX(scale * consdatadel->rhs, lhs);
13333rhs =
MIN(scale * consdatadel->lhs, rhs);
13340assert( ! consdata0->upgraded || consdatadel->upgraded );
13342 if( !consdatadel->upgraded )
13356rhs = (lhs + rhs)/2;
13365 if( consdata0->changed &&
SCIPconsGetPos(cons0) < *firstchange )
13371#ifdef SCIP_MORE_DEBUG 13404 int* diffidx0minus1;
13405 int* diffidx1minus0;
13406uint64_t possignature0;
13407uint64_t negsignature0;
13410 intdiffidx1minus0size;
13417assert(conss !=
NULL);
13418assert(firstchange <= chkind);
13419assert(cutoff !=
NULL);
13420assert(ndelconss !=
NULL);
13421assert(nchgsides !=
NULL);
13422assert(nchgcoefs !=
NULL);
13425cons0 = conss[chkind];
13426assert(cons0 !=
NULL);
13431assert(consdata0 !=
NULL);
13432assert(consdata0->nvars >= 1);
13433cons0isequality =
SCIPisEQ(
scip, consdata0->lhs, consdata0->rhs);
13440possignature0 = consdata0->possignature;
13441negsignature0 = consdata0->negsignature;
13448diffidx1minus0size = consdata0->nvars;
13450cons0lhs = consdata0->lhs;
13451cons0rhs = consdata0->rhs;
13452cons0upgraded = consdata0->upgraded;
13455cons0changed = consdata0->changed;
13456consdata0->changed =
FALSE;
13457 for( c = (cons0changed ? 0 : firstchange); c < chkind && !(*cutoff) && conss[chkind] !=
NULL; ++c )
13461uint64_t possignature1;
13462uint64_t negsignature1;
13474 intcommonidxweight;
13475 intdiffidx0minus1weight;
13476 intdiffidx1minus0weight;
13480assert(cons0lhs == consdata0->lhs);
13481assert(cons0rhs == consdata0->rhs);
13482assert(cons0upgraded == consdata0->upgraded);
13487 if( cons1 ==
NULL)
13494assert(consdata1 !=
NULL);
13501 if( !cons0changed && !consdata1->changed )
13506 if( cons0upgraded && consdata1->upgraded )
13509assert(consdata1->nvars >= 1);
13516possignature1 = consdata1->possignature;
13517negsignature1 = consdata1->negsignature;
13520coefsequal = (possignature0 == possignature1) && (negsignature0 == negsignature1);
13521coefsnegated = (possignature0 == negsignature1) && (negsignature0 == possignature1);
13522cons0dominateslhs =
SCIPisGE(
scip, cons0lhs, consdata1->lhs)
13523&& ((possignature0 | possignature1) == possignature1)
13524&& ((negsignature0 | negsignature1) == negsignature0);
13525cons1dominateslhs =
SCIPisGE(
scip, consdata1->lhs, cons0lhs)
13526&& ((possignature0 | possignature1) == possignature0)
13527&& ((negsignature0 | negsignature1) == negsignature1);
13528cons0dominatesrhs =
SCIPisLE(
scip, cons0rhs, consdata1->rhs)
13529&& ((possignature0 | possignature1) == possignature0)
13530&& ((negsignature0 | negsignature1) == negsignature1);
13531cons1dominatesrhs =
SCIPisLE(
scip, consdata1->rhs, cons0rhs)
13532&& ((possignature0 | possignature1) == possignature1)
13533&& ((negsignature0 | negsignature1) == negsignature0);
13534cons1isequality =
SCIPisEQ(
scip, consdata1->lhs, consdata1->rhs);
13535tryaggregation = (cons0isequality || cons1isequality) && (maxaggrnormscale > 0.0);
13536 if( !cons0dominateslhs && !cons1dominateslhs && !cons0dominatesrhs && !cons1dominatesrhs
13537&& !coefsequal && !coefsnegated && !tryaggregation )
13541 if( tryaggregation && consdata1->nvars > diffidx1minus0size )
13544diffidx1minus0size = consdata1->nvars;
13570commonidxweight = 0;
13572diffidx0minus1weight = 0;
13574diffidx1minus0weight = 0;
13577 while( (v0 < consdata0->nvars || v1 < consdata1->nvars)
13578&& (cons0dominateslhs || cons1dominateslhs || cons0dominatesrhs || cons1dominatesrhs
13579|| coefsequal || coefsnegated || tryaggregation) )
13587 if( v0 < consdata0->nvars && v1 < consdata1->nvars )
13588varcmp =
SCIPvarCompare(consdata0->vars[v0], consdata1->vars[v1]);
13589 else if( v0 < consdata0->nvars )
13598var = consdata0->vars[v0];
13599val0 = consdata0->vals[v0];
13601 if( tryaggregation )
13603diffidx0minus1[nvars0minus1] = v0;
13608coefsequal =
FALSE;
13609coefsnegated =
FALSE;
13614var = consdata1->vars[v1];
13616val1 = consdata1->vals[v1];
13617 if( tryaggregation )
13619diffidx1minus0[nvars1minus0] = v1;
13624coefsequal =
FALSE;
13625coefsnegated =
FALSE;
13630assert(consdata0->vars[v0] == consdata1->vars[v1]);
13631var = consdata0->vars[v0];
13632val0 = consdata0->vals[v0];
13633val1 = consdata1->vals[v1];
13634 if( tryaggregation )
13636commonidx0[nvarscommon] = v0;
13637commonidx1[nvarscommon] = v1;
13643coefsequal = coefsequal && (
SCIPisEQ(
scip, val0, val1));
13644coefsnegated = coefsnegated && (
SCIPisEQ(
scip, val0, -val1));
13654assert(var !=
NULL);
13661cons0dominatesrhs =
FALSE;
13662cons1dominateslhs =
FALSE;
13666cons0dominateslhs =
FALSE;
13667cons1dominatesrhs =
FALSE;
13674cons0dominateslhs =
FALSE;
13675cons1dominatesrhs =
FALSE;
13679cons0dominatesrhs =
FALSE;
13680cons1dominateslhs =
FALSE;
13686 if( coefsequal || coefsnegated )
13701 SCIPdebugMsg(
scip,
"aggregate linear constraints <%s> and <%s> with %s coefficients into single ranged row\n",
13709lhs =
MAX(consdata0->lhs, consdata1->lhs);
13710rhs =
MIN(consdata0->rhs, consdata1->rhs);
13715lhs =
MAX(consdata0->lhs, -consdata1->rhs);
13716rhs =
MIN(consdata0->rhs, -consdata1->lhs);
13727 if( consdata0->upgraded )
13729assert(!consdata1->upgraded);
13732consdatastay = consdata1;
13736consdatadel = consdata0;
13737consinddel = chkind;
13743consdatastay = consdata0;
13747consdatadel = consdata1;
13754 if( !consdata0->upgraded )
13756assert(consstay == cons0);
13757cons0lhs = consdata0->lhs;
13758cons0rhs = consdata0->rhs;
13764assert( !consdatastay->upgraded );
13767conss[consinddel] =
NULL;
13768 if( !consdatadel->upgraded )
13776 if( cons1dominateslhs && (!cons0isequality || cons1dominatesrhs ||
SCIPisInfinity(
scip, consdata0->rhs) ) )
13779 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13796cons0lhs = consdata0->lhs;
13797cons0isequality =
FALSE;
13798 if( !consdata0->upgraded )
13807 else if( cons0dominateslhs && (!cons1isequality || cons0dominatesrhs ||
SCIPisInfinity(
scip, consdata1->rhs)) )
13810 SCIPdebugMsg(
scip,
"left hand side of linear constraint <%s> is dominated by <%s>:\n",
13827cons1isequality =
FALSE;
13828 if( !consdata1->upgraded )
13837 if( cons1dominatesrhs && (!cons0isequality || cons1dominateslhs ||
SCIPisInfinity(
scip, -consdata0->lhs)) )
13840 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13857cons0rhs = consdata0->rhs;
13858cons0isequality =
FALSE;
13859 if( !consdata0->upgraded )
13868 else if( cons0dominatesrhs && (!cons1isequality || cons0dominateslhs ||
SCIPisInfinity(
scip, -consdata1->lhs)) )
13871 SCIPdebugMsg(
scip,
"right hand side of linear constraint <%s> is dominated by <%s>:\n",
13888cons1isequality =
FALSE;
13889 if( !consdata1->upgraded )
13905conss[chkind] =
NULL;
13906 if( !consdata0->upgraded )
13921 if( !consdata1->upgraded )
13934 if( tryaggregation )
13938assert(consdata0->nvars == nvarscommon + nvars0minus1);
13939assert(consdata1->nvars == nvarscommon + nvars1minus0);
13941aggregated =
FALSE;
13942 if( cons1isequality && !consdata0->upgraded && commonidxweight > diffidx1minus0weight )
13946nvarscommon, commonidxweight, diffidx0minus1weight, diffidx1minus0weight, maxaggrnormscale,
13947nchgcoefs, &aggregated, cutoff) );
13957conss[chkind] =
NULL;
13960 if( !aggregated && cons0isequality && !consdata1->upgraded && commonidxweight > diffidx0minus1weight )
13964nvarscommon, commonidxweight, diffidx1minus0weight, diffidx0minus1weight, maxaggrnormscale,
13965nchgcoefs, &aggregated, cutoff) );
14031assert(cons !=
NULL);
14032assert(nfixedvars !=
NULL);
14040 if( singlevarstuffing )
14043&isminsettoinfinity, &ismaxsettoinfinity);
14049isminsettoinfinity =
FALSE;
14050ismaxsettoinfinity =
FALSE;
14058rhs = -consdata->lhs;
14060maxactivity = -minactivity;
14061ismaxsettoinfinity = isminsettoinfinity;
14066rhs = consdata->rhs;
14070nvars = consdata->nvars;
14071vars = consdata->vars;
14072vals = consdata->vals;
14075 if( singletonstuffing )
14077 for( v = 0; v < nvars; ++v )
14093assert(singletonstuffing);
14101mincondactivity = 0.0;
14102maxcondactivity = 0.0;
14104 for( v = 0; v < nvars; ++v )
14110val = factor * vals[v];
14123tryfixing =
FALSE;
14127maxcondactivity += val * lb;
14128mincondactivity += val * lb;
14129swapped[v] =
FALSE;
14130ratios[nsingletons] = obj / val;
14131varpos[nsingletons] = v;
14139tryfixing =
FALSE;
14146maxcondactivity += val * ub;
14147mincondactivity += val * ub;
14148swapped[v] =
TRUE;
14149ratios[nsingletons] = obj / val;
14150varpos[nsingletons] = v;
14153 else if( val > 0 )
14163tryfixing =
FALSE;
14167maxcondactivity += val * lb;
14168mincondactivity += val * lb;
14181tryfixing =
FALSE;
14185maxcondactivity += val * ub;
14186mincondactivity += val * ub;
14196tryfixing =
FALSE;
14202maxcondactivity += val * ub;
14203mincondactivity += val * lb;
14207maxcondactivity += val * lb;
14208mincondactivity += val * ub;
14212 if( tryfixing && nsingletons > 0 && (
SCIPisGT(
scip, rhs, maxcondactivity) ||
SCIPisLE(
scip, rhs, mincondactivity)) )
14217 intoldnfixedvars = *nfixedvars;
14218 intoldnchgbds = *nchgbds;
14224 for( v = 0; v < nsingletons; ++v )
14228val = factor * vals[idx];
14233assert((val < 0) == swapped[idx]);
14247 if( swapped[idx] )
14248delta = -(lb - ub) * val;
14250delta = (ub - lb) * val;
14254 if(
SCIPisLE(
scip, delta, rhs - maxcondactivity) )
14256 if( swapped[idx] )
14281 if( swapped[idx] )
14300maxcondactivity += delta;
14301mincondactivity += delta;
14305 if( *nfixedvars - oldnfixedvars > 0 || *nchgbds - oldnchgbds > 0 )
14307 SCIPdebugMsg(
scip,
"### stuffing fixed %d variables and changed %d bounds\n", *nfixedvars - oldnfixedvars, *nchgbds - oldnchgbds);
14346 if( singlevarstuffing && !ismaxsettoinfinity )
14351 intbestindex = -1;
14352 intbestuplocks = 0;
14353 intbestdownlocks = 1;
14356 SCIPdebug(
intoldnfixedvars = *nfixedvars; )
14357 SCIPdebug(
intoldnchgbds = *nchgbds; )
14360 for( v = 0; v < nvars; ++v )
14364val = factor * vals[v];
14392 if( ratio > bestratio || ((ratio == bestratio) && downlocks == 0 && (bestdownlocks > 0
14397 if( bestindex != -1 )
14400 if( bestuplocks > 1 )
14407secondbestratio = bestratio;
14410bestdownlocks = downlocks;
14411bestuplocks = uplocks;
14418 if( bestdownlocks > 0 && bestuplocks > 1 )
14433 if( ratio > secondbestratio )
14435secondbestratio = ratio;
14441 if( bestindex != -1 && bestdownlocks == 0 )
14446var = vars[bestindex];
14448val = factor * vals[bestindex];
14461 SCIP_Realactivitydelta = (maxactivity - rhs) - (bestvarfloor * -val);
14464tryfixing =
SCIPisLE(
scip, obj, -activitydelta * secondbestratio);
14466bounddelta =
SCIPceil(
scip, (maxactivity - rhs)/-val);
14470bounddelta = (maxactivity - rhs)/-val;
14472tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14498 SCIP_Realactivitydelta = (maxactivity - rhs) - (bestvarfloor * val);
14501tryfixing =
SCIPisLE(
scip, -obj, activitydelta * secondbestratio);
14503bounddelta =
SCIPceil(
scip, (maxactivity - rhs)/val);
14507bounddelta = (maxactivity - rhs)/val;
14509tryfixing = tryfixing &&
SCIPisLE(
scip, bounddelta, ub - lb);
14538 for( v = 0; v < nvars; ++v )
14546 SCIPdebugMsg(
scip,
"<= %g\n", factor > 0 ? consdata->rhs : -consdata->lhs);
14548 for( v = 0; v < nvars; ++v )
14550 if( v == bestindex )
14553 if( factor * vals[v] < 0 )
14573 SCIPdebug(
SCIPdebugMsg(
scip,
"### new stuffing fixed %d vars, tightened %d bounds\n", *nfixedvars - oldnfixedvars, *nchgbds - oldnchgbds); )
14627assert(nconss == 0 || conss !=
NULL);
14628assert(nchgbds !=
NULL);
14637 if( nbinvars == nvars )
14642nintvars = nvars - ncontvars;
14645nvars = nvars - nbinvars;
14657 for( v = 0; v < nvars; ++v )
14669 for( v = 0; v < ncontvars; v++ )
14676var = vars[v + nintvars - nbinvars];
14696 for( c = 0; c < nconss; ++c )
14714assert(consdata !=
NULL);
14723 for( i = 0; i < consdata->nvars; ++i )
14727var = consdata->vars[i];
14732assert(0 <= contv && contv < ncontvars);
14733isimplint[contv] =
FALSE;
14746hasimpliedpotential =
FALSE;
14749 for( i = 0; i < consdata->nvars; ++i )
14763var = consdata->vars[i];
14764assert(var !=
NULL);
14765val = consdata->vals[i];
14780isminsettoinfinity =
TRUE;
14781ismaxsettoinfinity =
TRUE;
14787&ismintight, &ismaxtight, &isminsettoinfinity, &ismaxsettoinfinity);
14793assert((ismintight || isminsettoinfinity) && (ismaxtight || ismaxsettoinfinity));
14806assert(0 <= arrayindex && arrayindex < nvars);
14808newredlb = redlb[arrayindex];
14809newredub = redub[arrayindex];
14815nlocksdown[arrayindex] += nlockspos;
14816newredlb = (isminsettoinfinity ?
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14821nlocksup[arrayindex] += nlockspos;
14822newredub = (ismaxsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14830nlocksup[arrayindex] += nlockspos;
14831newredub = (isminsettoinfinity ? -
SCIPinfinity(
scip) : (consdata->lhs - minresactivity)/val);
14836nlocksdown[arrayindex] += nlockspos;
14837newredlb = (ismaxsettoinfinity ?
SCIPinfinity(
scip) : (consdata->rhs - maxresactivity)/val);
14851redlb[arrayindex] =
MAX(redlb[arrayindex], newredlb);
14852redub[arrayindex] =
MIN(redub[arrayindex], newredub);
14859assert(nconscontvars < ncontvars);
14861conscontvars[nconscontvars] = var;
14865assert(0 <= contv && contv < ncontvars);
14866hasimpliedpotential = hasimpliedpotential || isimplint[contv];
14871 if( hasimpliedpotential )
14873 if( nconscontvars > 1 || !integralcoefs )
14878 for( i = 0; i < nconscontvars; i++ )
14882assert(0 <= contv && contv < ncontvars);
14883isimplint[contv] =
FALSE;
14897assert(nconscontvars == 1);
14898assert(0 <= contvarpos && contvarpos < consdata->nvars);
14899var = consdata->vars[contvarpos];
14900val = consdata->vals[contvarpos];
14902assert(0 <= contv && contv < ncontvars);
14903assert(isimplint[contv]);
14907isimplint[contv] =
FALSE;
14913 if( obj * val >= 0.0 && lhsexists )
14918 if( obj * val <= 0.0 && rhsexists )
14930 for( v = 0; v < nvars; ++v )
14960 SCIPdebugMsg(
scip,
"variable <%s> only locked down in linear constraints: dual presolve <%s>[%.15g,%.15g] <= %.15g\n",
14964assert(!infeasible);
14967redub[v] =
MIN(redub[v], ub);
14989 SCIPdebugMsg(
scip,
"variable <%s> only locked up in linear constraints: dual presolve <%s>[%.15g,%.15g] >= %.15g\n",
14993assert(!infeasible);
14996redlb[v] =
MAX(redlb[v], lb);
15004 for( v = nintvars - nbinvars; v < nvars; ++v )
15010assert(var !=
NULL);
15015assert(0 <= v - nintvars + nbinvars && v - nintvars + nbinvars < ncontvars);
15018 if( isimplint[v - nintvars + nbinvars]
15033 SCIPdebugMsg(
scip,
"dual presolve: converting continuous variable <%s>[%g,%g] to implicit integer\n",
15070assert(conshdlr !=
NULL);
15072assert(result !=
NULL);
15075assert(conshdlrdata !=
NULL);
15077checkrelmaxabs = conshdlrdata->checkrelmaxabs;
15079 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n", sol ==
NULL?
"LP":
"relaxation");
15087 for( c = 0; c < nusefulconss; ++c )
15103 for( c = nusefulconss; c < nconss && *result ==
SCIP_FEASIBLE; ++c )
15144assert(cons !=
NULL);
15145assert(graph !=
NULL);
15146assert(success !=
NULL);
15149assert(consdata !=
NULL);
15153nlocvars = consdata->nvars;
15158 for( i = 0; i < nlocvars; ++i )
15160vars[i] = consdata->vars[i];
15161vals[i] = consdata->vals[i];
15165lhs = consdata->lhs - constant;
15166rhs = consdata->rhs - constant;
15176 for( i = 0; i < nlocvars; ++i )
15184cons, lhs, rhs, success) );
15201assert(conshdlr !=
NULL);
15219assert(conshdlr !=
NULL);
15224assert(conshdlrdata !=
NULL);
15245assert(conshdlrdata !=
NULL);
15246assert(conshdlrdata->eventhdlr !=
NULL);
15247assert(nconss == 0 || conss !=
NULL);
15249conshdlrdata->naddconss = 0;
15252 for( c = 0; c < nconss; ++c )
15273assert(conshdlrdata !=
NULL);
15274assert(conshdlrdata->eventhdlr !=
NULL);
15277 for( c = nconss - 1; c >= 0; --c )
15282assert(consdata !=
NULL);
15284 if( consdata->eventdata !=
NULL)
15288assert(consdata->eventdata ==
NULL);
15339assert(linconsstats !=
NULL);
15341assert(conshdlr !=
NULL);
15358 for( c = 0; c < nconss; c++ )
15368assert(cons !=
NULL);
15376assert(consdata !=
NULL);
15377rhs = consdata->rhs;
15378lhs = consdata->lhs;
15382 for( i = 0; i < consdata->nvars; i++ )
15388 if( consdata->nvars == 0 )
15408 if( consdata->nvars == 1 )
15418 if( consdata->nvars == 2 &&
SCIPisEQ(
scip, lhs, rhs) )
15428 if( consdata->nvars == 2 )
15433 if(
SCIPisEQ(
scip, consdata->vals[0], -consdata->vals[1])
15458unmatched =
FALSE;
15461scale =
REALABS(consdata->vals[0]);
15464 for( i = 0; i < consdata->nvars && !unmatched; i++ )
15471 if( consdata->vals[i] < 0.0 )
15479 b= rhs/scale + nnegbinvars;
15500 b= rhs/scale + nnegbinvars;
15525 b= lhs/scale + nnegbinvars;
15554unmatched =
FALSE;
15555 for( i = 0; i < consdata->nvars && !unmatched; i++ )
15563 b-= consdata->vals[i];
15583 for( i = 0; i < consdata->nvars && !matched; i++ )
15588 SCIPdebugMsg(
scip,
"classified as %s: ", matched ?
"BINPACKING":
"KNAPSACK");
15606unmatched =
FALSE;
15611 for( i = 0; i < consdata->nvars && !unmatched; i++ )
15637unmatched =
FALSE;
15638 for( i = 0; i < consdata->nvars && !unmatched; i++ )
15671#ifdef SCIP_STATISTIC 15682#ifdef SCIP_STATISTIC 15685assert(conshdlrdata !=
NULL);
15690 for( c = 0; c < nconss; ++c )
15698assert(consdata !=
NULL);
15700 if( consdata->upgraded )
15707 if(
SCIPisLT(
scip, consdata->maxactdelta, conshdlrdata->maxeasyactivitydelta) )
15712 SCIPstatisticMessage(
"below threshold: %d / %d ratio= %g\n", ngoodconss, nallconss, (100.0 * ngoodconss / nallconss));
15716 for( c = 0; c < nconss; ++c )
15724assert(consdata !=
NULL);
15726 if( consdata->upgraded )
15751 for( c = 0; c < nconss; ++c )
15769 for( c = 0; c < nconss; ++c )
15774assert(consdata !=
NULL);
15776 if( consdata->row !=
NULL)
15781 if( consdata->nlrow !=
NULL)
15797 if( ncutsadded > 0 )
15800 "(restart) converted %d cuts from the global cut pool into linear constraints\n", ncutsadded);
15816assert(cons !=
NULL);
15833assert(conshdlr !=
NULL);
15835assert(cons !=
NULL);
15839assert(consdata !=
NULL);
15847assert(conshdlrdata !=
NULL);
15848assert(conshdlrdata->eventhdlr !=
NULL);
15851 if( consdata->eventdata !=
NULL)
15856assert(consdata->eventdata ==
NULL);
15876assert(conshdlr !=
NULL);
15879 if( (*consdata)->eventdata !=
NULL)
15884assert(conshdlrdata !=
NULL);
15888assert((*consdata)->eventdata ==
NULL);
15908assert(conshdlr !=
NULL);
15911assert(sourcecons !=
NULL);
15912assert(targetcons !=
NULL);
15915assert(sourcedata !=
NULL);
15916assert(sourcedata->row ==
NULL);
15919 SCIP_CALL(
consdataCreate(
scip, &targetdata, sourcedata->nvars, sourcedata->vars, sourcedata->vals, sourcedata->lhs, sourcedata->rhs) );
15926 for(n = targetdata->nvars - 1; n >= 0; --n )
15951*infeasible =
FALSE;
15953 for( c = 0; c < nconss && !(*infeasible); ++c )
15981assert(conshdlr !=
NULL);
15983assert(result !=
NULL);
15986assert(conshdlrdata !=
NULL);
15995 if( (depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
15996|| (depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
16000maxsepacuts = (depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
16006maxbound = glblowerbound + conshdlrdata->maxcardbounddist * (cutoffbound - glblowerbound);
16007separatecards =
SCIPisLE(
scip, loclowerbound, maxbound);
16015 for( c = 0; c < nusefulconss && ncuts < maxsepacuts && !cutoff; ++c )
16024 else if( ncuts > 0 )
16047assert(conshdlr !=
NULL);
16049assert(result !=
NULL);
16052assert(conshdlrdata !=
NULL);
16061 if( (depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
16062|| (depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
16066maxsepacuts = (depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
16073 for( c = 0; c < nusefulconss && ncuts < maxsepacuts && !cutoff; ++c )
16082 else if( ncuts > 0 )
16120assert(conshdlr !=
NULL);
16122assert(result !=
NULL);
16125assert(conshdlrdata !=
NULL);
16127checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16132 if( objinfeasible )
16134 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
16142 for( c = 0; c < nconss && !violated; ++c )
16167assert(conshdlr !=
NULL);
16169assert(result !=
NULL);
16174assert(conshdlrdata !=
NULL);
16176checkrelmaxabs = conshdlrdata->checkrelmaxabs;
16181 for( c = 0; c < nconss && (*result ==
SCIP_FEASIBLE|| completely); ++c )
16196assert( consdata !=
NULL);
16206 SCIPinfoMessage(
scip,
NULL,
"violation: left hand side is violated by %.15g\n", consdata->lhs - activity);
16208 SCIPinfoMessage(
scip,
NULL,
"violation: right hand side is violated by %.15g\n", activity - consdata->rhs);
16230assert(conshdlr !=
NULL);
16232assert(result !=
NULL);
16235assert(conshdlrdata !=
NULL);
16241tightenbounds =
TRUE;
16246 inttightenboundsfreq;
16251tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
16252tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
16253&& ((tightenboundsfreq == 0 && depth == 0) || (tightenboundsfreq >= 1 && (depth % tightenboundsfreq == 0)));
16256rangedrowpropagation = conshdlrdata->rangedrowpropagation;
16258rangedrowpropagation = rangedrowpropagation && (depth <= conshdlrdata->rangedrowmaxdepth);
16259rangedrowfreq = propfreq * conshdlrdata->rangedrowfreq;
16260rangedrowpropagation = rangedrowpropagation && (conshdlrdata->rangedrowfreq >= 0)
16261&& ((rangedrowfreq == 0 && depth == 0) || (rangedrowfreq >= 1 && (depth % rangedrowfreq == 0)));
16268 for( i = 0; i < nmarkedconss && !cutoff; i++ )
16272conshdlrdata->maxeasyactivitydelta, conshdlrdata->sortvars, &cutoff, &nchgbds) );
16278 else if( nchgbds > 0 )
16287#define MAXCONSPRESOLROUNDS 10 16310 intfirstupgradetry;
16314assert(conshdlr !=
NULL);
16316assert(result !=
NULL);
16322oldnfixedvars = *nfixedvars;
16323oldnaggrvars = *naggrvars;
16324oldnchgbds = *nchgbds;
16325oldndelconss = *ndelconss;
16326oldnupgdconss = *nupgdconss;
16327oldnchgcoefs = *nchgcoefs;
16328oldnchgsides = *nchgsides;
16332assert(conshdlrdata !=
NULL);
16335firstchange = INT_MAX;
16336firstupgradetry = INT_MAX;
16342infeasible =
FALSE;
16347assert(consdata !=
NULL);
16350 if(
SCIPisEQ(
scip, consdata->rhs, consdata->lhs) )
16352consdata->lhs = consdata->rhs;
16353assert(consdata->row ==
NULL);
16356 if( consdata->eventdata ==
NULL)
16360assert(consdata->eventdata !=
NULL);
16365assert(
SCIPgetNRuns(
scip) > 0 || nrounds > 0 || consdata->boundstightened == 0);
16366assert(
SCIPgetNRuns(
scip) > 0 || nrounds > 0 || !consdata->presolved);
16379assert(consdata->removedfixings);
16386 if( firstchange == INT_MAX && consdata->changed )
16390 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16391firstupgradetry = c;
16394 if( consdata->presolved )
16412consdata->presolved =
TRUE;
16429 SCIPdebugMsg(
scip,
" -> infeasibility detected during tightening sides\n");
16437 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16455&isminsettoinfinity, &ismaxsettoinfinity);
16458 SCIPdebugMsg(
scip,
"linear constraint <%s> is infeasible: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16459 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16465 SCIPdebugMsg(
scip,
"linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16466 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16470 if( !consdata->upgraded )
16476 SCIPdebugMsg(
scip,
"linear constraint <%s> left hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16477 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16479 if( !consdata->upgraded )
16484 SCIPdebugMsg(
scip,
"linear constraint <%s> right hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
16485 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
16487 if( !consdata->upgraded )
16492 if( consdata->nvars == 0 )
16496 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16502 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16507 if( !consdata->upgraded )
16517 if( conshdlrdata->simplifyinequalities )
16526 if( conshdlrdata->aggregatevariables )
16537 if( conshdlrdata->rangedrowpropagation )
16539 intlastnfixedvars;
16541lastnfixedvars = *nfixedvars;
16546 if( lastnfixedvars < *nfixedvars )
16557nfixedvars, nchgbds, &cutoff) );
16564 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16570 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16575 if( !consdata->upgraded )
16600 if( firstchange == INT_MAX && consdata->changed )
16604 if( firstupgradetry == INT_MAX && !consdata->upgradetried )
16605firstupgradetry = c;
16613conshdlrdata->singlevarstuffing, &cutoff, nfixedvars, nchgbds) );
16616 if( consdata->nvars == 0 )
16620 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is infeasible: sides=[%.15g,%.15g]\n",
16626 SCIPdebugMsg(
scip,
"empty linear constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
16631 if( !consdata->upgraded )
16644assert(firstchange >= 0);
16646 if( firstchange < nconss && conshdlrdata->presolusehashing )
16650ndelconss, nchgsides) );
16653 if( firstchange < nconss && conshdlrdata->presolpairwise )
16657 intfirstchangenew;
16660npaircomparisons = 0;
16661oldndelconss = *ndelconss;
16662oldnchgsides = *nchgsides;
16663oldnchgcoefs = *nchgcoefs;
16669firstchangenew = -1;
16670 for( c = 0; c < nconss; ++c )
16673 if( c == firstchange )
16674firstchangenew = nusefulconss;
16680usefulconss[nusefulconss] = conss[c];
16683firstchange = firstchangenew;
16684assert(firstchangenew >= 0 && firstchangenew <= nusefulconss);
16686 for( c = firstchange; c < nusefulconss && !cutoff && !
SCIPisStopped(
scip); ++c )
16689 if( usefulconss[c] ==
NULL)
16692npaircomparisons += (
SCIPconsGetData(conss[c])->changed) ? c : (c - firstchange);
16696&cutoff, ndelconss, nchgsides, nchgcoefs) );
16698 if( npaircomparisons > conshdlrdata->nmincomparisons )
16700assert(npaircomparisons > 0);
16701 if( ((*ndelconss - oldndelconss) + (*nchgsides - oldnchgsides)/2.0 + (*nchgcoefs - oldnchgcoefs)/10.0) / ((
SCIP_Real) npaircomparisons) < conshdlrdata->mingainpernmincomp )
16703oldndelconss = *ndelconss;
16704oldnchgsides = *nchgsides;
16705oldnchgcoefs = *nchgcoefs;
16706npaircomparisons = 0;
16717 if( !cutoff && firstupgradetry < nconss
16718&& *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
16719&& *nupgdconss == oldnupgdconss && *nchgcoefs == oldnchgcoefs && *nchgsides == oldnchgsides
16743assert(consdata !=
NULL);
16746 if( consdata->upgradetried )
16749 if( !consdata->presolved )
16752consdata->upgradetried =
TRUE;
16758 if( upgdcons !=
NULL)
16768assert(!consdata->upgraded);
16769consdata->upgraded =
TRUE;
16775|| !conshdlrdata->presolpairwise
16776|| (conshdlrdata->maxaggrnormscale == 0.0) )
16788 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
16789|| *nupgdconss > oldnupgdconss || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
16803assert(cons !=
NULL);
16804assert(result !=
NULL);
16822assert(cons !=
NULL);
16824assert(consdata !=
NULL);
16830 for( i = 0; i < consdata->nvars; ++i )
16865assert(conshdlr !=
NULL);
16866assert(conss !=
NULL|| nconss == 0);
16881assert(conshdlr !=
NULL);
16882assert(cons !=
NULL);
16895 const char* consname;
16899assert(sourcescip !=
NULL);
16900assert(sourcecons !=
NULL);
16907 if( name !=
NULL)
16914initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode, global, valid) );
16915assert(cons !=
NULL|| *valid ==
FALSE);
16929 char** firstoperator,
16930 char** secondoperator,
16936assert(str !=
NULL);
16937assert(firstoperator !=
NULL);
16938assert(secondoperator !=
NULL);
16940*firstoperator =
NULL;
16941*secondoperator =
NULL;
16943curr = (
char*)str;
16947 while( *curr && *success )
16960 if( curr[1] ==
'=')
16969 if( strncmp(curr,
"[free]", 6) == 0 )
16984 if( *firstoperator ==
NULL)
16986*firstoperator = curr;
16990 if( *secondoperator !=
NULL)
16995 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
16997 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
17000 else if( strncmp(curr,
"<=", 2) != 0 )
17002 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
17006*secondoperator = curr;
17016 if( *firstoperator ==
NULL)
17044assert(success !=
NULL);
17045assert(str !=
NULL);
17046assert(name !=
NULL);
17047assert(cons !=
NULL);
17053(*success) =
FALSE;
17065 findOperators(str, &firstop, &secondop, &operatorsuccess);
17068 if( ! operatorsuccess )
17071varstrptr = (
char*)str;
17072lhsstrptr = rhsstrptr =
NULL;
17073assert(firstop !=
NULL);
17076 switch( *firstop )
17079assert(firstop[1] ==
'=');
17081 if( secondop !=
NULL)
17083assert(secondop[0] ==
'<'&& secondop[1] ==
'=');
17084lhsstrptr = (
char*)str;
17085varstrptr = firstop + 2;
17086rhsstrptr = secondop + 2;
17092varstrptr = (
char*)str;
17093rhsstrptr = firstop + 2;
17097assert(firstop[1] ==
'=');
17098assert(secondop ==
NULL);
17100lhsstrptr = firstop + 2;
17103assert(firstop[1] ==
'=');
17104assert(secondop ==
NULL);
17106rhsstrptr = firstop + 2;
17107lhsstrptr = firstop + 2;
17110assert(strncmp(firstop,
"[free]", 6) == 0);
17111assert(secondop ==
NULL);
17116 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
17121 if( lhsstrptr !=
NULL)
17125 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
17130 if( rhsstrptr == lhsstrptr )
17135 if( rhsstrptr !=
NULL&& rhsstrptr != lhsstrptr )
17139 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
17149assert(varstrptr !=
NULL);
17154 if( *success && requsize > coefssize )
17157coefssize = requsize;
17162assert(!*success || requsize <= coefssize);
17172initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
17189assert(consdata !=
NULL);
17191 if( varssize < consdata->nvars )
17192(*success) =
FALSE;
17195assert(vars !=
NULL);
17198(*success) =
TRUE;
17212assert(consdata !=
NULL);
17214(*nvars) = consdata->nvars;
17215(*success) =
TRUE;
17253assert(eventhdlr !=
NULL);
17254assert(eventdata !=
NULL);
17256assert(event !=
NULL);
17258cons = eventdata->cons;
17259assert(cons !=
NULL);
17261assert(consdata !=
NULL);
17277varpos = eventdata->varpos;
17278assert(0 <= varpos && varpos < consdata->nvars);
17281assert(var !=
NULL);
17282assert(consdata->vars[varpos] == var);
17283val = consdata->vals[varpos];
17302consdata->presolved =
FALSE;
17303consdata->rangedrowpropagated = 0;
17311 if( consdata->maxactdeltavar == var )
17314consdata->maxactdeltavar =
NULL;
17318 if( consdata->boundstightened > 0)
17320 switch( eventtype )
17324consdata->boundstightened = 0;
17328consdata->boundstightened = 0;
17350delta =
REALABS(val) * domain;
17352 if( delta > consdata->maxactdelta )
17354consdata->maxactdelta = delta;
17355consdata->maxactdeltavar = var;
17362consdata->presolved =
FALSE;
17363consdata->removedfixings =
FALSE;
17364consdata->rangedrowpropagated = 0;
17367 if( consdata->maxactdeltavar == var )
17370consdata->maxactdeltavar =
NULL;
17378consdata->presolved =
FALSE;
17387varpos = eventdata->varpos;
17388assert(0 <= varpos && varpos < consdata->nvars);
17391assert(var !=
NULL);
17392assert(consdata->vars[varpos] == var);
17393val = consdata->vals[varpos];
17395consdata->rangedrowpropagated = 0;
17410consdata->indexsorted =
FALSE;
17412consdata->coefsorted =
FALSE;
17428consdata->varsdeleted =
TRUE;
17449assert(conflicthdlr !=
NULL);
17451assert(bdchginfos !=
NULL|| nbdchginfos == 0);
17452assert(result !=
NULL);
17467 for( i = 0; i < nbdchginfos; ++i )
17469assert(bdchginfos !=
NULL);
17488 if( i == nbdchginfos )
17501 if( upgdcons !=
NULL)
17535assert(nupgdconss !=
NULL);
17536assert(upgdconss !=
NULL);
17537assert(upgdconsssize > 0);
17540assert(expr !=
NULL);
17563assert(upgdconss[0] !=
NULL);
17575consdata->checkabsolute =
TRUE;
17603eventExecLinear,
NULL) );
17607conflictExecLinear,
NULL) );
17615consEnfolpLinear, consEnfopsLinear, consCheckLinear, consLockLinear,
17618assert(conshdlr !=
NULL);
17657 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
17661 "maximal number of separation rounds per node (-1: unlimited)",
17665 "maximal number of separation rounds per node in the root node (-1: unlimited)",
17669 "maximal number of cuts separated per separation round",
17673 "maximal number of cuts separated per separation round in the root node",
17677 "should pairwise constraint comparison be performed in presolving?",
17681 "should hash table be used for detecting redundant constraints in advance",
17685 "number for minimal pairwise presolve comparisons",
17688 "constraints/" CONSHDLR_NAME "/mingainpernmincomparisons",
17689 "minimal gain per minimal pairwise presolve comparisons to repeat pairwise comparison round",
17693 "maximal allowed relative gain in maximum norm for constraint aggregation (0.0: disable constraint aggregation)",
17697 "maximum activity delta to run easy propagation on linear constraint (faster, but numerically less stable)",
17701 "maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for separating knapsack cardinality cuts",
17705 "should all constraints be subject to cardinality cut generation instead of only the ones with non-zero dual value?",
17709 "should presolving search for aggregations in equations",
17713 "should presolving try to simplify inequalities",
17717 "should dual presolving steps be performed?",
17721 "should stuffing of singleton continuous variables be performed?",
17725 "should single variable stuffing be performed, which tries to fulfill constraints using the cheapest variable?",
17728 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
17732 "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)?",
17736 "should presolving try to detect constraints parallel to the objective function defining an upper bound and prevent these constraints from entering the LP?",
17740 "should presolving try to detect constraints parallel to the objective function defining a lower bound and prevent these constraints from entering the LP?",
17744 "should presolving try to detect subsets of constraints parallel to the objective function?",
17748 "should presolving and propagation try to improve bounds, detect infeasibility, and extract sub-constraints from ranged rows and equations?",
17752 "should presolving and propagation extract sub-constraints from ranged rows and equations?",
17756 "maximum depth to apply ranged row propagation",
17760 "frequency for applying ranged row propagation",
17764 "should multi-aggregations only be performed if the constraint can be removed afterwards?",
17768 "maximum coefficient dynamism (ie. maxabsval / minabsval) for primal multiaggregation",
17772 "maximum coefficient dynamism (ie. maxabsval / minabsval) for dual multiaggregation",
17776 "should Cliques be extracted?",
17787 const char* conshdlrname
17797assert(linconsupgd !=
NULL);
17798assert(conshdlrname !=
NULL);
17802 if( conshdlr ==
NULL)
17809assert(conshdlrdata !=
NULL);
17874assert(cons !=
NULL);
17878 if( conshdlr ==
NULL)
17884 for( j = 0; j < nvars; ++j )
17913 if( requiredsize > nconsvars )
17919assert(requiredsize <= nconsvars);
17925 if( constant < 0.0 )
17932 SCIPerrorMessage(
"try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", name);
17942 SCIPerrorMessage(
"try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", name);
17958 SCIPerrorMessage(
"try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", name);
17968 SCIPerrorMessage(
"try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", name);
17998assert(consdata !=
NULL);
18007assert(consdata !=
NULL);
18012 if( check || enforce )
18015 for(n = consdata->nvars - 1; n >= 0; --n )
18021 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
18022local, modifiable, dynamic, removable, stickingatnode) );
18103initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
18111 if( sourcecoefs !=
NULL)
18118 for( v = 0; v < nvars; ++v )
18131 if( requiredsize > nvars )
18137assert(requiredsize <= nvars);
18142 for( v = 0; v < nvars; ++v )
18146assert(vars[v] !=
NULL);
18152 for( v = 0; v < nvars && success; ++v )
18161assert(!(success) || vars[v] !=
NULL);
18174initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
18195assert(cons !=
NULL);
18196assert(var !=
NULL);
18229 if( requiredsize > nconsvars )
18235assert(requiredsize <= nconsvars);
18239assert(consdata !=
NULL);
18241lhs = consdata->lhs;
18242rhs = consdata->rhs;
18248 if( constant < 0.0 )
18255 SCIPerrorMessage(
"adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n",
SCIPvarGetName(var),
SCIPconsGetName(cons));
18265 SCIPerrorMessage(
"adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n",
SCIPvarGetName(var),
SCIPconsGetName(cons));
18281 SCIPerrorMessage(
"adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n",
SCIPvarGetName(var),
SCIPconsGetName(cons));
18291 SCIPerrorMessage(
"adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n",
SCIPvarGetName(var),
SCIPconsGetName(cons));
18321 for( v = nconsvars - 1; v >= 0; --v )
18364assert(cons !=
NULL);
18365assert(var !=
NULL);
18375 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
18380assert(consdata !=
NULL);
18382vars = consdata->vars;
18385 while( i < consdata->nvars )
18387 if( vars[i] == var )
18426assert(cons !=
NULL);
18427assert(var !=
NULL);
18443assert(cons !=
NULL);
18453assert(consdata !=
NULL);
18455 returnconsdata->lhs;
18467assert(cons !=
NULL);
18477assert(consdata !=
NULL);
18479 returnconsdata->rhs;
18490assert(cons !=
NULL);
18530assert(cons !=
NULL);
18540assert(consdata !=
NULL);
18542 returnconsdata->nvars;
18554assert(cons !=
NULL);
18564assert(consdata !=
NULL);
18566 returnconsdata->vars;
18578assert(cons !=
NULL);
18588assert(consdata !=
NULL);
18590 returnconsdata->vals;
18607assert(cons !=
NULL);
18617assert(consdata !=
NULL);
18619 if( consdata->row !=
NULL)
18635assert(cons !=
NULL);
18645assert(consdata !=
NULL);
18647 if( consdata->row !=
NULL)
18662assert(cons !=
NULL);
18673assert(consdata !=
NULL);
18675 if( consdata->row !=
NULL)
18690assert(cons !=
NULL);
18701assert(consdata !=
NULL);
18703 if( consdata->row !=
NULL)
18720assert(cons !=
NULL);
18730assert(consdata !=
NULL);
18732 returnconsdata->row;
18773assert(cons !=
NULL);
18774assert(upgdcons !=
NULL);
18796assert(conshdlrdata !=
NULL);
18798assert(consdata !=
NULL);
18801 if( consdata->upgraded )
18805 if( consdata->row !=
NULL)
18809 SCIPerrorMessage(
"cannot upgrade linear constraint that is already stored as row in the LP\n");
18861 for( i = 0; i < consdata->nvars; ++i )
18863var = consdata->vars[i];
18864val = consdata->vals[i];
18932poscoeffsum += val;
18934negcoeffsum += val;
18941 SCIPdebugMsg(
scip,
"upgrading linear constraint <%s> (%d upgrade methods):\n",
18943 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",
18944nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposcont, nnegcont,
18945ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18946poscoeffsum, negcoeffsum, integral);
18949 for( i = 0; i < conshdlrdata->nlinconsupgrades && *upgdcons ==
NULL; ++i )
18951 if( conshdlrdata->linconsupgrades[i]->active )
18953 SCIP_CALL( conshdlrdata->linconsupgrades[i]->linconsupgd(
scip, cons, consdata->nvars,
18954consdata->vars, consdata->vals, consdata->lhs, consdata->rhs,
18955nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposimplbin, nnegimplbin, nposcont, nnegcont,
18956ncoeffspone, ncoeffsnone, ncoeffspint, ncoeffsnint, ncoeffspfrac, ncoeffsnfrac,
18957poscoeffsum, negcoeffsum, integral,
18963 if( *upgdcons !=
NULL)
18987 if( conshdlr ==
NULL)
18990assert(infeasible !=
NULL);
18991*infeasible =
FALSE;
18996 for( i = 0; i < nconss; ++i )
struct InferInfo INFERINFO
Constraint handler for knapsack constraints of the form , x binary and .
#define MAX_CLIQUE_NONZEROS_PER_CONS
static SCIP_DECL_CONSENFORELAX(consEnforelaxLinear)
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_DUALPRESOLVING
#define DEFAULT_EXTRACTCLIQUES
static void permSortConsdata(SCIP_CONSDATA *consdata, int *perm, int nvars)
#define CONSHDLR_NEEDSCONS
static void consdataRecomputeMaxActivityDelta(SCIP *scip, SCIP_CONSDATA *consdata)
#define CONSHDLR_SEPAFREQ
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)
#define CONFLICTHDLR_PRIORITY
static void consdataGetReliableResidualActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *cancelvar, SCIP_Real *resactivity, SCIP_Bool isminresact, SCIP_Bool useglobalbounds)
static SCIP_DECL_EVENTEXEC(eventExecLinear)
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)
#define CONFLICTHDLR_NAME
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_DECL_HASHKEYVAL(hashKeyValLinearcons)
#define CONSHDLR_CHECKPRIORITY
static SCIP_DECL_NONLINCONSUPGD(upgradeConsNonlinear)
static SCIP_DECL_CONSGETVARS(consGetVarsLinear)
static SCIP_RETCODE createRow(SCIP *scip, SCIP_CONS *cons)
static SCIP_DECL_SORTINDCOMP(consdataCompVar)
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_DECL_HASHGETKEY(hashGetKeyLinearcons)
static SCIP_DECL_CONSPRESOL(consPresolLinear)
static SCIP_RETCODE addConflictFixedVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, SCIP_BDCHGIDX *bdchgidx, int inferpos)
static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyLinear)
static SCIP_DECL_CONSFREE(consFreeLinear)
#define DEFAULT_DETECTCUTOFFBOUND
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_DECL_CONSINITLP(consInitlpLinear)
#define CONSHDLR_PROP_TIMING
static SCIP_Real consdataComputePseudoActivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_DECL_CONSPARSE(consParseLinear)
static SCIP_RETCODE conshdlrdataEnsureLinconsupgradesSize(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, int num)
static SCIP_DECL_CONSENFOLP(consEnfolpLinear)
static SCIP_RETCODE retrieveParallelConstraints(SCIP_HASHTABLE *hashtable, SCIP_CONS **querycons, SCIP_CONS **parallelconss, int *nparallelconss)
#define CONFLICTHDLR_DESC
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 SCIP_DECL_CONSDELVARS(consDelvarsLinear)
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)
#define CONSHDLR_MAXPREROUNDS
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_PRESOLPAIRWISE
#define DEFAULT_MAXAGGRNORMSCALE
static SCIP_RETCODE performVarDeletions(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
#define checkMaxActivityDelta(scip, consdata)
static SCIP_DECL_CONSTRANS(consTransLinear)
#define CONSHDLR_SEPAPRIORITY
static SCIP_Bool isFiniteNonnegativeIntegral(SCIP *scip, SCIP_Real x)
#define DEFAULT_SINGLETONSTUFFING
#define DEFAULT_MAXROUNDSROOT
static void consdataUpdateSignatures(SCIP_CONSDATA *consdata, int pos)
#define DEFAULT_MAXCARDBOUNDDIST
#define DEFAULT_MAXEASYACTIVITYDELTA
static SCIP_DECL_CONSEXIT(consExitLinear)
static SCIP_RETCODE scaleCons(SCIP *scip, SCIP_CONS *cons, SCIP_Real scalar)
static int inferInfoGetPos(INFERINFO inferinfo)
static SCIP_DECL_CONSPRINT(consPrintLinear)
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_DECL_CONSENFOPS(consEnfopsLinear)
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)
static SCIP_DECL_CONSEXITSOL(consExitsolLinear)
#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
#define DEFAULT_MAXSEPACUTSROOT
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_DECL_CONSGETPERMSYMGRAPH(consGetPermsymGraphLinear)
static SCIP_DECL_CONSEXITPRE(consExitpreLinear)
static SCIP_RETCODE consDropAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_DECL_CONSDEACTIVE(consDeactiveLinear)
#define DEFAULT_PRESOLUSEHASHING
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_DECL_CONSGETSIGNEDPERMSYMGRAPH(consGetSignedPermsymGraphLinear)
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)
static SCIP_DECL_CONSINIT(consInitLinear)
#define DEFAULT_RANGEDROWFREQ
static SCIP_DECL_CONSDELETE(consDeleteLinear)
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool tightenbounds, SCIP_Bool rangedrowpropagation, SCIP_Real maxeasyactivitydelta, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds)
static SCIP_RETCODE updateCutoffbound(SCIP *scip, SCIP_CONS *cons, SCIP_Real primalbound)
static void consdataUpdateDelCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability)
#define DEFAULT_RANGEDROWARTCONS
static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, int pos)
#define MAXSCALEDCOEFINTEGER
static void consdataUpdateAddCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability)
static void getMinActivity(SCIP *scip, SCIP_CONSDATA *consdata, int posinf, int neginf, int poshuge, int neghuge, SCIP_Real delta, SCIP_Bool global, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Bool *istight, SCIP_Bool *issettoinfinity)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_DECL_CONSACTIVE(consActiveLinear)
static SCIP_RETCODE chgRhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
static SCIP_DECL_CONSCHECK(consCheckLinear)
#define DEFAULT_SIMPLIFYINEQUALITIES
static SCIP_DECL_CONSSEPALP(consSepalpLinear)
#define CONSHDLR_PROPFREQ
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_DECL_HASHKEYEQ(hashKeyEqLinearcons)
static SCIP_RETCODE fixVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars)
#define CONSHDLR_PRESOLTIMING
#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 SCIP_DECL_CONSGETNVARS(consGetNVarsLinear)
#define DEFAULT_MAXSEPACUTS
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_DECL_CONSINITSOL(consInitsolLinear)
static SCIP_DECL_CONSRESPROP(consRespropLinear)
static SCIP_RETCODE addNlrow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE consPrintConsSol(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, FILE *file)
#define CONSHDLR_EAGERFREQ
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)
#define DEFAULT_TIGHTENBOUNDSFREQ
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 SCIP_DECL_CONSSEPASOL(consSepasolLinear)
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_DECL_CONSPROP(consPropLinear)
static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
static SCIP_DECL_CONSLOCK(consLockLinear)
static void consdataCalcActivities(SCIP *scip, SCIP_CONSDATA *consdata)
#define DEFAULT_MAXROUNDS
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)
#define CONSHDLR_ENFOPRIORITY
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_DECL_CONFLICTEXEC(conflictExecLinear)
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)
#define CONSHDLR_DELAYSEPA
static SCIP_DECL_CONSCOPY(consCopyLinear)
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)
#define DEFAULT_DETECTLOWERBOUND
static SCIP_RETCODE checkPartialObjective(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata)
#define CONSHDLR_DELAYPROP
static void consdataGetGlbActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *glbminactivity, SCIP_Real *glbmaxactivity, SCIP_Bool *ismintight, SCIP_Bool *ismaxtight, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_Bool canTightenBounds(SCIP_CONS *cons)
#define DEFAULT_SEPARATEALL
static void findOperators(const char *str, char **firstoperator, char **secondoperator, SCIP_Bool *success)
static INFERINFO getInferInfo(PROPRULE proprule, int pos)
Constraint handler for linear constraints in their most general form, .
constraint handler for nonlinear constraints specified by algebraic expressions
defines macros for basic operations in double-double arithmetic giving roughly twice the precision of...
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define QUAD_ASSIGN_Q(a, b)
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugAddSolVal(scip, var, val)
#define SCIP_MAXTREEDEPTH
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_Real SCIPgetDualsolLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
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 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 SCIPcleanupConssLinear(SCIP *scip, SCIP_Bool onlychecked, SCIP_Bool *infeasible)
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)
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)
int SCIPgetNContVars(SCIP *scip)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
SCIP_RETCODE SCIPaddObjoffset(SCIP *scip, SCIP_Real addval)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNConss(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
#define SCIPhashFour(a, b, c, d)
SCIP_RETCODE SCIPhashtableSafeInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
void SCIPhashtablePrintStatistics(SCIP_HASHTABLE *hashtable, SCIP_MESSAGEHDLR *messagehdlr)
SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
#define SCIPhashSignature64(a)
SCIP_RETCODE SCIPupdateLocalLowerbound(SCIP *scip, SCIP_Real newbound)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLocalLowerbound(SCIP *scip)
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS *cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConsLocal(SCIP *scip, SCIP_CONS *cons, SCIP_NODE *validnode)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
#define SCIPdebugMsgPrint
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2)
SCIP_Longint SCIPcalcSmaComMul(SCIP_Longint val1, SCIP_Longint val2)
SCIP_Real SCIPselectSimpleValue(SCIP_Real lb, SCIP_Real ub, SCIP_Longint maxdnom)
SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *numerator, SCIP_Longint *denominator)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value)
void SCIPswapPointers(void **pointer1, void **pointer2)
int SCIPgetNLPBranchCands(SCIP *scip)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse)))
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
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 SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit)))
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars)))
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 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 SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDEACTIVE((*consdeactive)))
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETPERMSYMGRAPH((*consgetpermsymgraph)))
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete)))
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree)))
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
int SCIPconshdlrGetPropFreq(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXIT((*consexit)))
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITPRE((*consexitpre)))
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy)))
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH((*consgetsignedpermsymgraph)))
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITSOL((*consexitsol)))
SCIP_RETCODE SCIPsetConshdlrDelvars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELVARS((*consdelvars)))
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp)))
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITSOL((*consinitsol)))
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans)))
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop)))
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars)))
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSACTIVE((*consactive)))
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint)))
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_VARTYPE SCIPeventGetNewtype(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_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)
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 SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
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_BOUNDTYPE SCIPvarGetBestBoundType(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_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_Real SCIPvarGetObj(SCIP_VAR *var)
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_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_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_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_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
SCIP_Bool SCIPvarIsOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_RETCODE 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)
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)
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,...)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
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
SCIP_DECL_LINCONSUPGD((*linconsupgd))
structs for symmetry computations
methods for dealing with symmetry detection graphs
@ SCIP_CONFTYPE_PROPAGATION
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
@ 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
struct SCIP_ConsData SCIP_CONSDATA
enum SCIP_LinConstype SCIP_LINCONSTYPE
#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_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_GLBCHANGED
#define SCIP_EVENTTYPE_BOUNDRELAXED
#define SCIP_EVENTTYPE_LBCHANGED
#define SCIP_EVENTTYPE_UBCHANGED
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
#define SCIP_EVENTTYPE_LBTIGHTENED
enum SCIP_BoundType SCIP_BOUNDTYPE
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
@ 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4