84#define CONSHDLR_NAME "exactlinear"
85#define CONSHDLR_DESC "exact linear constraints of the form lhs <= a^T x <= rhs"
86#define CONSHDLR_SEPAPRIORITY +100000
87#define CONSHDLR_ENFOPRIORITY -1000000
88#define CONSHDLR_CHECKPRIORITY -1000000
89#define CONSHDLR_SEPAFREQ 0
90#define CONSHDLR_PROPFREQ 1
91#define CONSHDLR_EAGERFREQ 100
93#define CONSHDLR_DELAYSEPA FALSE
94#define CONSHDLR_DELAYPROP FALSE
95#define CONSHDLR_NEEDSCONS TRUE
97#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
99#define EVENTHDLR_NAME "exactlinear"
100#define EVENTHDLR_DESC "bound change event handler for exact linear constraints"
102#define DEFAULT_TIGHTENBOUNDSFREQ 1
103#define DEFAULT_MAXROUNDS 5
104#define DEFAULT_MAXROUNDSROOT -1
105#define DEFAULT_MAXSEPACUTS 50
106#define DEFAULT_MAXSEPACUTSROOT 200
107#define DEFAULT_SORTVARS TRUE
109#define DEFAULT_LIMITDENOM FALSE
110#define DEFAULT_BOUNDMAXDENOM 256L
152 int minactivityneginf;
153 int minactivityposinf;
154 int maxactivityneginf;
155 int maxactivityposinf;
156 int minactivityneghuge;
157 int minactivityposhuge;
158 int maxactivityneghuge;
159 int maxactivityposhuge;
160 int glbminactivityneginf;
161 int glbminactivityposinf;
162 int glbmaxactivityneginf;
163 int glbmaxactivityposinf;
164 int glbminactivityneghuge;
165 int glbminactivityposhuge;
166 int glbmaxactivityneghuge;
167 int glbmaxactivityposhuge;
173 unsigned int boundstightened:2;
174 unsigned int rangedrowpropagated:2;
176 unsigned int validmaxabsval:1;
177 unsigned int validminabsval:1;
178 unsigned int validactivities:1;
179 unsigned int validminact:1;
180 unsigned int validmaxact:1;
181 unsigned int validglbminact:1;
182 unsigned int validglbmaxact:1;
183 unsigned int presolved:1;
184 unsigned int removedfixings:1;
185 unsigned int changed:1;
186 unsigned int normalized:1;
187 unsigned int coefsorted :1;
188 unsigned int merged:1;
189 unsigned int cliquesadded:1;
190 unsigned int implsadded:1;
191 unsigned int indexsorted:1;
192 unsigned int varsdeleted:1;
193 unsigned int hascontvar:1;
194 unsigned int hasnonbinvar:1;
195 unsigned int hasnonbinvalid:1;
196 unsigned int onerowrelax:1;
197 unsigned int hasfprelax:1;
210struct SCIP_ConshdlrData
220 int tightenboundsfreq;
264 unsigned int proprule:8;
280 return inferinfo.val.asint;
297 inferinfo.val.asbits.proprule = (
unsigned int) proprule;
298 inferinfo.val.asbits.pos = (
unsigned int) pos;
324 assert(consdata->nvars <= consdata->varssize);
326 if( num > consdata->varssize )
334 for( k = consdata->varssize; k < newsize; ++k )
337 if( consdata->eventdata !=
NULL )
341 consdata->varssize = newsize;
343 assert(num <= consdata->varssize);
367 (*conshdlrdata)->naddconss = 0;
368 (*conshdlrdata)->ncheckserrorbound = 0;
369 (*conshdlrdata)->nabotserrorbound = 0;
370 (*conshdlrdata)->nsuccesserrorbound = 0;
371 (*conshdlrdata)->nconsprop = 0;
372 (*conshdlrdata)->nconspropnoninit = 0;
373 (*conshdlrdata)->propnonzeros = 0;
374 (*conshdlrdata)->propnonzerosnoninit = 0;
381 (*conshdlrdata)->eventhdlr = eventhdlr;
501 consdata->eventdata[pos]->cons = cons;
502 consdata->eventdata[pos]->varpos = pos;
503 consdata->eventdata[pos]->rowvar =
false;
508 eventhdlr, consdata->eventdata[pos], &consdata->eventdata[pos]->filterpos) );
510 consdata->removedfixings = consdata->removedfixings &&
SCIPvarIsActive(consdata->vars[pos]);
538 assert(consdata->eventdata[pos]->cons == cons);
539 assert(consdata->eventdata[pos]->varpos == pos);
544 eventhdlr, consdata->eventdata[pos], consdata->eventdata[pos]->filterpos) );
575 for(
i = 0;
i < consdata->nvars; ++
i )
602 for(
i = consdata->nvars - 1;
i >= 0; --
i )
644 (*consdata)->varssize = 0;
645 (*consdata)->nvars =
nvars;
646 (*consdata)->hascontvar =
FALSE;
647 (*consdata)->hasnonbinvar =
FALSE;
648 (*consdata)->hasnonbinvalid =
TRUE;
649 (*consdata)->vars =
NULL;
650 (*consdata)->vals =
NULL;
651 (*consdata)->valsreal =
NULL;
669 for( v = 0; v <
nvars; ++v )
692 if( !(*consdata)->hascontvar )
698 (*consdata)->hasnonbinvar =
TRUE;
701 (*consdata)->hascontvar =
TRUE;
707 (*consdata)->nvars = k;
715 (*consdata)->varssize = k;
723 (*consdata)->eventdata =
NULL;
738 (*consdata)->rowlhs =
NULL;
739 (*consdata)->rowrhs =
NULL;
740 (*consdata)->rowexact =
NULL;
743 (*consdata)->lhsreal = lhsrel;
744 (*consdata)->rhsreal = rhsrel;
754 (*consdata)->maxactdeltavar =
NULL;
755 (*consdata)->minactivityneginf = -1;
756 (*consdata)->minactivityposinf = -1;
757 (*consdata)->maxactivityneginf = -1;
758 (*consdata)->maxactivityposinf = -1;
759 (*consdata)->minactivityneghuge = -1;
760 (*consdata)->minactivityposhuge = -1;
761 (*consdata)->maxactivityneghuge = -1;
762 (*consdata)->maxactivityposhuge = -1;
767 (*consdata)->glbminactivityneginf = -1;
768 (*consdata)->glbminactivityposinf = -1;
769 (*consdata)->glbmaxactivityneginf = -1;
770 (*consdata)->glbmaxactivityposinf = -1;
771 (*consdata)->glbminactivityneghuge = -1;
772 (*consdata)->glbminactivityposhuge = -1;
773 (*consdata)->glbmaxactivityneghuge = -1;
774 (*consdata)->glbmaxactivityposhuge = -1;
775 (*consdata)->validmaxabsval =
FALSE;
776 (*consdata)->validminabsval =
FALSE;
777 (*consdata)->validactivities =
FALSE;
778 (*consdata)->validminact =
FALSE;
779 (*consdata)->validmaxact =
FALSE;
780 (*consdata)->validglbminact =
FALSE;
781 (*consdata)->validglbmaxact =
FALSE;
782 (*consdata)->boundstightened = 0;
783 (*consdata)->presolved =
FALSE;
784 (*consdata)->removedfixings =
FALSE;
785 (*consdata)->changed =
TRUE;
786 (*consdata)->normalized =
FALSE;
787 (*consdata)->indexsorted = (
nvars <= 1);
788 (*consdata)->merged = (
nvars <= 1);
789 (*consdata)->cliquesadded =
FALSE;
790 (*consdata)->implsadded =
FALSE;
791 (*consdata)->coefsorted =
FALSE;
792 (*consdata)->nbinvars = -1;
793 (*consdata)->varsdeleted =
FALSE;
794 (*consdata)->rangedrowpropagated = 0;
795 (*consdata)->onerowrelax =
FALSE;
796 (*consdata)->hasfprelax =
FALSE;
808 for( v = 0; v < (*consdata)->nvars; v++ )
832 assert((*consdata)->varssize >= 0);
835 if( (*consdata)->rowlhs !=
NULL )
839 if( (*consdata)->rowrhs !=
NULL && !(*consdata)->onerowrelax )
845 for( v = 0; v < (*consdata)->nvars; v++ )
889 if( consdata->nvars == 0 )
950 if( consdata->nvars == 0 )
957 for( v = 0; v < consdata->nvars; ++v )
959 if( consdata->vals !=
NULL )
973 else if( consdata->nvars > 0 )
1029 consdata->validactivities =
FALSE;
1030 consdata->validminact =
FALSE;
1031 consdata->validmaxact =
FALSE;
1032 consdata->validglbminact =
FALSE;
1033 consdata->validglbmaxact =
FALSE;
1034 consdata->validmaxabsval =
FALSE;
1035 consdata->validminabsval =
FALSE;
1036 consdata->hasnonbinvalid =
FALSE;
1046 consdata->maxactdeltavar =
NULL;
1047 consdata->minactivityneginf = -1;
1048 consdata->minactivityposinf = -1;
1049 consdata->maxactivityneginf = -1;
1050 consdata->maxactivityposinf = -1;
1051 consdata->minactivityneghuge = -1;
1052 consdata->minactivityposhuge = -1;
1053 consdata->maxactivityneghuge = -1;
1054 consdata->maxactivityposhuge = -1;
1059 consdata->glbminactivityneginf = -1;
1060 consdata->glbminactivityposinf = -1;
1061 consdata->glbmaxactivityneginf = -1;
1062 consdata->glbmaxactivityposinf = -1;
1063 consdata->glbminactivityneghuge = -1;
1064 consdata->glbminactivityposhuge = -1;
1065 consdata->glbmaxactivityneghuge = -1;
1066 consdata->glbmaxactivityposhuge = -1;
1077 int pseudoactivityposinf;
1078 int pseudoactivityneginf;
1084 pseudoactivityposinf = 0;
1085 pseudoactivityneginf = 0;
1087 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1090 val = consdata->vals[
i];
1096 ++pseudoactivityposinf;
1098 ++pseudoactivityneginf;
1103 ++pseudoactivityneginf;
1105 ++pseudoactivityposinf;
1114 else if( pseudoactivityposinf > 0 && ( pseudoactivityneginf == 0 || !
SCIPrationalIsInfinity(consdata->rhs) ) )
1129 consdata->minactivity = 0.0;
1133 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1135 if( consdata->valsreal[
i].sup < 0.0 )
1137 assert(consdata->valsreal[
i].inf <= 0.0);
1146 assert(consdata->valsreal[
i].inf >= 0.0);
1154 contribution *= contribution < 0.0 ? consdata->valsreal[
i].sup : consdata->valsreal[
i].inf;
1159 consdata->minactivity += contribution;
1163 consdata->validminact =
TRUE;
1166 consdata->lastminactivity = consdata->minactivity;
1181 consdata->maxactivity = 0.0;
1185 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1187 if( consdata->valsreal[
i].sup < 0.0 )
1189 assert(consdata->valsreal[
i].inf <= 0.0);
1198 assert(consdata->valsreal[
i].inf >= 0.0);
1206 contribution *= contribution < 0.0 ? consdata->valsreal[
i].inf : consdata->valsreal[
i].sup;
1211 consdata->maxactivity += contribution;
1215 consdata->validmaxact =
TRUE;
1218 consdata->lastmaxactivity = consdata->maxactivity;
1234 consdata->glbminactivity = 0.0;
1238 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1240 if( consdata->valsreal[
i].sup < 0.0 )
1242 assert(consdata->valsreal[
i].inf <= 0.0);
1251 assert(consdata->valsreal[
i].inf >= 0.0);
1259 contribution *= contribution < 0.0 ? consdata->valsreal[
i].sup : consdata->valsreal[
i].inf;
1264 consdata->glbminactivity += contribution;
1268 consdata->validglbminact =
TRUE;
1271 consdata->lastglbminactivity = consdata->glbminactivity;
1287 consdata->glbmaxactivity = 0.0;
1291 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1293 if( consdata->valsreal[
i].sup < 0.0 )
1295 assert(consdata->valsreal[
i].inf <= 0.0);
1304 assert(consdata->valsreal[
i].inf >= 0.0);
1312 contribution *= contribution < 0.0 ? consdata->valsreal[
i].inf : consdata->valsreal[
i].sup;
1317 consdata->glbmaxactivity += contribution;
1321 consdata->validglbmaxact =
TRUE;
1324 consdata->lastglbmaxactivity = consdata->glbmaxactivity;
1336 assert(!consdata->validminabsval);
1338 consdata->validminabsval =
TRUE;
1340 if( consdata->nvars > 0 )
1348 for(
i = 1;
i < consdata->nvars; ++
i )
1365 assert(!consdata->hasnonbinvalid);
1366 consdata->hasnonbinvar =
FALSE;
1367 consdata->hascontvar =
FALSE;
1369 for( v = consdata->nvars - 1; v >= 0; --v )
1375 consdata->hasnonbinvar =
TRUE;
1379 consdata->hascontvar =
TRUE;
1384 assert(consdata->hascontvar || v < 0);
1386 consdata->hasnonbinvalid =
TRUE;
1389#ifdef SCIP_MORE_DEBUG
1410 for( v = consdata->nvars - 1; v >= 0; --v )
1425 if( SCIPrationalisGT(delta,maxactdelta) )
1438#define checkMaxActivityDelta(scip, consdata)
1450 consdata->maxactdelta = 0.0;
1452 if( !consdata->hasnonbinvalid )
1456 if( !consdata->hasnonbinvar )
1458 for( v = consdata->nvars - 1; v >= 0; --v )
1464 if( delta > consdata->maxactdelta )
1466 consdata->maxactdelta = delta;
1467 consdata->maxactdeltavar = consdata->vars[v];
1474 for( v = consdata->nvars - 1; v >= 0; --v )
1486 consdata->maxactdeltavar = consdata->vars[v];
1493 if( delta > consdata->maxactdelta )
1495 consdata->maxactdelta = delta;
1496 consdata->maxactdeltavar = consdata->vars[v];
1516 int* activityposinf;
1517 int* activityneginf;
1518 int* activityposhuge;
1519 int* activityneghuge;
1535 assert(consdata->validactivities);
1540 assert(consdata->minactivityneginf >= 0);
1541 assert(consdata->minactivityposinf >= 0);
1542 assert(consdata->maxactivityneginf >= 0);
1543 assert(consdata->maxactivityposinf >= 0);
1544 assert(consdata->minactivityneghuge >= 0);
1545 assert(consdata->minactivityposhuge >= 0);
1546 assert(consdata->maxactivityneghuge >= 0);
1547 assert(consdata->maxactivityposhuge >= 0);
1552 assert(consdata->glbminactivityneginf >= 0);
1553 assert(consdata->glbminactivityposinf >= 0);
1554 assert(consdata->glbmaxactivityneginf >= 0);
1555 assert(consdata->glbmaxactivityposinf >= 0);
1556 assert(consdata->glbminactivityneghuge >= 0);
1557 assert(consdata->glbminactivityposhuge >= 0);
1558 assert(consdata->glbmaxactivityneghuge >= 0);
1559 assert(consdata->glbmaxactivityposhuge >= 0);
1574 if( valrange.
sup < 0.0 )
1578 activity = &(consdata->glbmaxactivity);
1579 lastactivity = &(consdata->lastglbmaxactivity);
1580 activityposinf = &(consdata->glbmaxactivityneginf);
1581 activityneginf = &(consdata->glbmaxactivityposinf);
1582 activityposhuge = &(consdata->glbmaxactivityposhuge);
1583 activityneghuge = &(consdata->glbmaxactivityneghuge);
1584 validact = consdata->validglbmaxact;
1586 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1587 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1593 activity = &(consdata->glbminactivity);
1594 lastactivity = &(consdata->lastglbminactivity);
1595 activityposinf = &(consdata->glbminactivityposinf);
1596 activityneginf = &(consdata->glbminactivityneginf);
1597 activityposhuge = &(consdata->glbminactivityposhuge);
1598 activityneghuge = &(consdata->glbminactivityneghuge);
1599 validact = consdata->validglbminact;
1601 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1602 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1607 if( valrange.
sup < 0.0 )
1611 activity = &(consdata->glbminactivity);
1612 lastactivity = &(consdata->lastglbminactivity);
1613 activityposinf = &(consdata->glbminactivityneginf);
1614 activityneginf = &(consdata->glbminactivityposinf);
1615 activityposhuge = &(consdata->glbminactivityposhuge);
1616 activityneghuge = &(consdata->glbminactivityneghuge);
1617 validact = consdata->validglbminact;
1619 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1620 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1626 activity = &(consdata->glbmaxactivity);
1627 lastactivity = &(consdata->lastglbmaxactivity);
1628 activityposinf = &(consdata->glbmaxactivityposinf);
1629 activityneginf = &(consdata->glbmaxactivityneginf);
1630 activityposhuge = &(consdata->glbmaxactivityposhuge);
1631 activityneghuge = &(consdata->glbmaxactivityneghuge);
1632 validact = consdata->validglbmaxact;
1634 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1635 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1650 if( valrange.
sup < 0.0 )
1654 activity = &(consdata->maxactivity);
1655 lastactivity = &(consdata->lastmaxactivity);
1656 activityposinf = &(consdata->maxactivityneginf);
1657 activityneginf = &(consdata->maxactivityposinf);
1658 activityposhuge = &(consdata->maxactivityposhuge);
1659 activityneghuge = &(consdata->maxactivityneghuge);
1660 validact = consdata->validmaxact;
1662 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1663 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1669 activity = &(consdata->minactivity);
1670 lastactivity = &(consdata->lastminactivity);
1671 activityposinf = &(consdata->minactivityposinf);
1672 activityneginf = &(consdata->minactivityneginf);
1673 activityposhuge = &(consdata->minactivityposhuge);
1674 activityneghuge = &(consdata->minactivityneghuge);
1675 validact = consdata->validminact;
1677 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1678 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1683 if( valrange.
sup < 0.0 )
1687 activity = &(consdata->minactivity);
1688 lastactivity = &(consdata->lastminactivity);
1689 activityposinf = &(consdata->minactivityneginf);
1690 activityneginf = &(consdata->minactivityposinf);
1691 activityposhuge = &(consdata->minactivityposhuge);
1692 activityneghuge = &(consdata->minactivityneghuge);
1693 validact = consdata->validminact;
1695 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1696 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1702 activity = &(consdata->maxactivity);
1703 lastactivity = &(consdata->lastmaxactivity);
1704 activityposinf = &(consdata->maxactivityposinf);
1705 activityneginf = &(consdata->maxactivityneginf);
1706 activityposhuge = &(consdata->maxactivityposhuge);
1707 activityneghuge = &(consdata->maxactivityneghuge);
1708 validact = consdata->validmaxact;
1710 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1711 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1717 newcontribution = newval * newbound;
1724 if( oldbound > 0.0 )
1726 assert((*activityposinf) >= 1);
1729 if( finitenewbound || newbound < 0.0 )
1732 (*activityposinf)--;
1735 if( !finitenewbound && newbound < 0.0 )
1736 (*activityneginf)++;
1737 else if( hugevalnewcont )
1740 if( newcontribution > 0.0 )
1741 (*activityposhuge)++;
1743 (*activityneghuge)++;
1747 delta = newcontribution;
1754 assert((*activityneginf) >= 1);
1757 if( finitenewbound || newbound > 0.0 )
1760 (*activityneginf)--;
1763 if( !finitenewbound && newbound > 0.0 )
1764 (*activityposinf)++;
1765 else if( hugevalnewcont )
1768 if( newcontribution > 0.0 )
1769 (*activityposhuge)++;
1771 (*activityneghuge)++;
1775 delta = newcontribution;
1782 if( -oldcontribution > 0.0 )
1784 assert((*activityposhuge) >= 1);
1789 (*activityposhuge)--;
1791 if( !finitenewbound )
1794 if( newbound > 0.0 )
1795 (*activityposinf)++;
1798 (*activityneginf)++;
1800 else if( hugevalnewcont )
1803 if( newcontribution > 0.0 )
1804 (*activityposhuge)++;
1807 (*activityneghuge)++;
1811 delta = newcontribution;
1816 assert(-oldcontribution < 0.0);
1817 assert((*activityneghuge) >= 1);
1822 (*activityneghuge)--;
1824 if( !finitenewbound )
1827 if( newbound > 0.0 )
1828 (*activityposinf)++;
1831 (*activityneginf)++;
1833 else if( hugevalnewcont )
1836 if( newcontribution > 0.0 )
1837 (*activityposhuge)++;
1840 (*activityneghuge)++;
1844 delta = newcontribution;
1850 if( !finitenewbound )
1855 if( newbound > 0.0 )
1857 (*activityposinf)++;
1858 delta = oldcontribution;
1867 (*activityneginf)++;
1868 delta = oldcontribution;
1872 else if( hugevalnewcont )
1874 if( newcontribution > 0.0 )
1876 (*activityposhuge)++;
1877 delta = oldcontribution;
1881 (*activityneghuge)++;
1882 delta = oldcontribution;
1887 delta = newcontribution + oldcontribution;
1891 if( validact && (delta != 0.0) )
1896 (*activity) = (*activity) + delta;
1901 (*lastactivity) = (*activity);
1922 if( consdata->validactivities )
1946 if( consdata->validactivities )
1968 if( consdata->validactivities )
1990 if( consdata->validactivities )
2014 if( consdata->validmaxabsval )
2021 consdata->maxabsval =
MAX(consdata->maxabsval, absval);
2024 if( consdata->validminabsval )
2031 consdata->minabsval =
MIN(consdata->minabsval, absval);
2035 if( consdata->validmaxabsval )
2039 consdata->validmaxabsval =
FALSE;
2045 if( consdata->validminabsval )
2049 consdata->validminabsval =
FALSE;
2055 if( consdata->validactivities )
2084 if( consdata->validmaxabsval )
2092 consdata->validmaxabsval =
FALSE;
2098 if( consdata->validminabsval )
2106 consdata->validminabsval =
FALSE;
2112 if( consdata->validmaxabsval )
2116 consdata->validmaxabsval =
FALSE;
2122 if( consdata->validminabsval )
2126 consdata->validminabsval =
FALSE;
2132 if( consdata->validactivities )
2156 if( !consdata->validminabsval )
2158 assert(consdata->validminabsval);
2160 return consdata->minabsvalexact;
2181 if( consdata->validmaxabsval )
2187 if( absval >= consdata->maxabsval )
2189 consdata->maxabsval = absval;
2198 consdata->validmaxabsval =
FALSE;
2205 if( consdata->validminabsval )
2211 if( absval <= consdata->minabsval )
2213 consdata->minabsval = absval;
2222 consdata->validminabsval =
FALSE;
2228 if( consdata->validmaxabsval )
2239 consdata->validmaxabsval =
FALSE;
2245 if( consdata->validminabsval )
2256 consdata->validminabsval =
FALSE;
2274 if( delta > consdata->maxactdelta )
2276 consdata->maxactdelta = delta;
2277 consdata->maxactdeltavar =
var;
2282 if( consdata->maxactdeltavar ==
var )
2318 for(
i = 0;
i < consdata->nvars;
i++ )
2348 assert(!consdata->validactivities);
2354 consdata->validmaxabsval =
TRUE;
2355 consdata->validminabsval =
TRUE;
2356 consdata->validactivities =
TRUE;
2357 consdata->validminact =
TRUE;
2358 consdata->validmaxact =
TRUE;
2359 consdata->validglbminact =
TRUE;
2360 consdata->validglbmaxact =
TRUE;
2361 consdata->maxabsval = 0.0;
2362 consdata->minabsval = (consdata->nvars == 0 ? 0.0 :
SCIPintervalAbsMax(consdata->valsreal[0]));
2363 consdata->minactivity = 0.0;
2364 consdata->maxactivity = 0.0;
2365 consdata->lastminactivity = 0.0;
2366 consdata->lastmaxactivity = 0.0;
2367 consdata->minactivityneginf = 0;
2368 consdata->minactivityposinf = 0;
2369 consdata->maxactivityneginf = 0;
2370 consdata->maxactivityposinf = 0;
2371 consdata->minactivityneghuge = 0;
2372 consdata->minactivityposhuge = 0;
2373 consdata->maxactivityneghuge = 0;
2374 consdata->maxactivityposhuge = 0;
2375 consdata->glbminactivity = 0.0;
2376 consdata->glbmaxactivity = 0.0;
2377 consdata->lastglbminactivity = 0.0;
2378 consdata->lastglbmaxactivity = 0.0;
2379 consdata->glbminactivityneginf = 0;
2380 consdata->glbminactivityposinf = 0;
2381 consdata->glbmaxactivityneginf = 0;
2382 consdata->glbmaxactivityposinf = 0;
2383 consdata->glbminactivityneghuge = 0;
2384 consdata->glbminactivityposhuge = 0;
2385 consdata->glbmaxactivityneghuge = 0;
2386 consdata->glbmaxactivityposhuge = 0;
2388 for(
i = 0;
i < consdata->nvars; ++
i )
2390 consdata->lastminactivity = consdata->minactivity;
2391 consdata->lastmaxactivity = consdata->maxactivity;
2392 consdata->lastglbminactivity = consdata->glbminactivity;
2393 consdata->lastglbmaxactivity = consdata->glbmaxactivity;
2423 if( consdata->rowlhs ==
NULL )
2425 for( v = 0; v < consdata->nvars; ++v )
2435 sum += consdata->valsreal[v].inf * solval;
2449 sum =
MAX(sum, -inf);
2450 sum =
MIN(sum, +inf);
2496 *issettoinfinity =
TRUE;
2500 else if( neginf > 0 )
2503 *issettoinfinity =
TRUE;
2507 else if( neghuge > 0 )
2510 *issettoinfinity =
TRUE;
2514 else if( !goodrelax && poshuge > 0 )
2517 *issettoinfinity =
TRUE;
2527 if( !consdata->validglbminact )
2529 assert(consdata->validglbminact);
2531 tmpactivity = consdata->glbminactivity;
2535 if( !consdata->validminact )
2537 assert(consdata->validminact);
2539 tmpactivity = consdata->minactivity;
2549 *issettoinfinity =
FALSE;
2555 *minactivity = tmpactivity - delta;
2556 *issettoinfinity =
FALSE;
2597 *issettoinfinity =
TRUE;
2601 else if( posinf > 0 )
2604 *issettoinfinity =
TRUE;
2608 else if( poshuge > 0 )
2611 *issettoinfinity =
TRUE;
2615 else if( !goodrelax && neghuge > 0 )
2618 *issettoinfinity =
TRUE;
2628 if( !consdata->validglbmaxact )
2630 assert(consdata->validglbmaxact);
2632 tmpactivity = consdata->glbmaxactivity;
2636 if( !consdata->validmaxact )
2638 assert(consdata->validmaxact);
2640 tmpactivity = consdata->maxactivity;
2650 *issettoinfinity =
FALSE;
2656 *maxactivity = tmpactivity - delta;
2657 *issettoinfinity =
FALSE;
2690 if( !consdata->validactivities )
2693 assert(consdata->validminact);
2694 assert(consdata->validmaxact);
2698 assert(consdata->minactivityneginf >= 0);
2699 assert(consdata->minactivityposinf >= 0);
2700 assert(consdata->maxactivityneginf >= 0);
2701 assert(consdata->maxactivityposinf >= 0);
2703 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2704 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2705 minactivity, minisrelax, isminsettoinfinity);
2707 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2708 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2709 maxactivity, maxisrelax, ismaxsettoinfinity);
2750 if( !consdata->validactivities )
2753 assert(consdata->validminact);
2754 assert(consdata->validmaxact);
2758 assert(consdata->minactivityneginf >= 0);
2759 assert(consdata->minactivityposinf >= 0);
2760 assert(consdata->maxactivityneginf >= 0);
2761 assert(consdata->maxactivityposinf >= 0);
2762 assert(consdata->minactivityneghuge >= 0);
2763 assert(consdata->minactivityposhuge >= 0);
2764 assert(consdata->maxactivityneghuge >= 0);
2765 assert(consdata->maxactivityposhuge >= 0);
2789 assert(consdata->minactivityposinf >= 1);
2791 getMinActivity(
scip, consdata, consdata->minactivityposinf - 1, consdata->minactivityneginf,
2792 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2793 minresactivity, minisrelax, isminsettoinfinity);
2797 assert(consdata->minactivityneginf >= 1);
2799 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf - 1,
2800 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2801 minresactivity, minisrelax, isminsettoinfinity);
2805 assert(consdata->minactivityposhuge >= 1);
2807 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2808 consdata->minactivityposhuge - 1, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2809 minresactivity, minisrelax, isminsettoinfinity);
2813 assert(consdata->minactivityneghuge >= 1);
2815 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2816 consdata->minactivityposhuge, consdata->minactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2817 minresactivity, minisrelax, isminsettoinfinity);
2822 delta = absval * minactbound;
2825 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2826 consdata->minactivityposhuge, consdata->minactivityneghuge, delta,
FALSE, goodrelax,
2827 minresactivity, minisrelax, isminsettoinfinity);
2835 assert(consdata->maxactivityneginf >= 1);
2837 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf - 1,
2838 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2839 maxresactivity, maxisrelax, ismaxsettoinfinity);
2843 assert(consdata->maxactivityposinf >= 1);
2845 getMaxActivity(
scip, consdata, consdata->maxactivityposinf - 1, consdata->maxactivityneginf,
2846 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2847 maxresactivity, maxisrelax, ismaxsettoinfinity);
2851 assert(consdata->maxactivityposhuge >= 1);
2853 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2854 consdata->maxactivityposhuge - 1, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2855 maxresactivity, maxisrelax, ismaxsettoinfinity);
2859 assert(consdata->maxactivityneghuge >= 1);
2861 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2862 consdata->maxactivityposhuge, consdata->maxactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2863 maxresactivity, maxisrelax, ismaxsettoinfinity);
2868 delta = absval * maxactbound;
2871 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2872 consdata->maxactivityposhuge, consdata->maxactivityneghuge, delta,
FALSE, goodrelax,
2873 maxresactivity, maxisrelax, ismaxsettoinfinity);
2907 for( v = 0; v < consdata->nvars; ++v )
2926 assert(nneginf >= 0 && nposinf >= 0);
3002 for(
i = 0;
i < consdata->nvars; ++
i )
3039 return SCIPvarCompare(consdata->vars[ind1], consdata->vars[ind2]);
3054 var1 = consdata->vars[ind1];
3055 var2 = consdata->vars[ind2];
3078 if( vartype1 < vartype2 )
3082 else if( vartype1 > vartype2 )
3151 for( v = 0; v <
nvars; ++v )
3155 varv = consdata->vars[v];
3156 valv = consdata->vals[v];
3157 valrealv = consdata->valsreal[v];
3158 if( consdata->eventdata !=
NULL )
3159 eventdatav = consdata->eventdata[v];
3165 consdata->vars[
i] = consdata->vars[perm[
i]];
3166 consdata->vals[
i] = consdata->vals[perm[
i]];
3167 consdata->valsreal[
i] = consdata->valsreal[perm[
i]];
3168 if( consdata->eventdata !=
NULL )
3170 consdata->eventdata[
i] = consdata->eventdata[perm[
i]];
3171 consdata->eventdata[
i]->varpos =
i;
3177 while( perm[
i] != v );
3178 consdata->vars[
i] = varv;
3179 consdata->vals[
i] = valv;
3180 consdata->valsreal[
i] = valrealv;
3181 if( consdata->eventdata !=
NULL )
3183 consdata->eventdata[
i] = eventdatav;
3184 consdata->eventdata[
i]->varpos =
i;
3191 for( v = 0; v <
nvars; ++v )
3194 assert(consdata->eventdata ==
NULL || consdata->eventdata[v]->varpos == v);
3221 if( consdata->nvars <= 1 )
3223 consdata->indexsorted =
TRUE;
3224 consdata->coefsorted =
TRUE;
3225 consdata->nbinvars = (consdata->nvars == 1 ? (int)
SCIPvarIsBinary(consdata->vars[0]) : 0);
3238 SCIPsort(perm, consdataCompVar, (
void*)consdata, consdata->nvars);
3240 SCIPsort(perm, consdataCompVarProp, (
void*)consdata, consdata->nvars);
3249 consdata->indexsorted =
FALSE;
3250 consdata->coefsorted =
TRUE;
3253 consdata->nbinvars = 0;
3254 for( v = 0; v < consdata->nvars; ++v )
3257 ++consdata->nbinvars;
3264 consdata->indexsorted =
TRUE;
3265 consdata->coefsorted =
FALSE;
3295 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3323 vars = consdata->vars;
3324 vals = consdata->vals;
3326 for( v = 0; v < consdata->nvars; ++v )
3348 vars = consdata->vars;
3349 vals = consdata->vals;
3351 for( v = 0; v < consdata->nvars; ++v )
3371 consdata->boundstightened = 0;
3372 consdata->presolved =
FALSE;
3373 consdata->cliquesadded =
FALSE;
3374 consdata->implsadded =
FALSE;
3386 consdata->changed =
TRUE;
3387 consdata->normalized =
FALSE;
3388 consdata->rangedrowpropagated = 0;
3391 if( consdata->rowexact !=
NULL )
3417 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3447 vars = consdata->vars;
3448 vals = consdata->vals;
3450 for( v = 0; v < consdata->nvars; ++v )
3472 vars = consdata->vars;
3473 vals = consdata->vals;
3475 for( v = 0; v < consdata->nvars; ++v )
3495 consdata->boundstightened = 0;
3496 consdata->presolved =
FALSE;
3497 consdata->cliquesadded =
FALSE;
3498 consdata->implsadded =
FALSE;
3510 consdata->changed =
TRUE;
3511 consdata->normalized =
FALSE;
3512 consdata->rangedrowpropagated = 0;
3515 if( consdata->rowexact !=
NULL )
3558 consdata->vars[consdata->nvars] =
var;
3569 if( consdata->eventdata !=
NULL )
3581 consdata->eventdata[consdata->nvars-1] =
NULL;
3600 consdata->boundstightened = 0;
3601 consdata->presolved =
FALSE;
3604 consdata->changed =
TRUE;
3605 consdata->normalized =
FALSE;
3606 consdata->cliquesadded =
FALSE;
3607 consdata->implsadded =
FALSE;
3608 consdata->rangedrowpropagated = 0;
3610 if( consdata->nvars == 1 )
3612 consdata->indexsorted =
TRUE;
3613 consdata->coefsorted =
TRUE;
3614 consdata->merged =
TRUE;
3618 consdata->merged =
FALSE;
3622 consdata->indexsorted = consdata->indexsorted && (consdataCompVar((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3623 consdata->coefsorted =
FALSE;
3627 consdata->indexsorted =
FALSE;
3628 consdata->coefsorted = consdata->coefsorted && (consdataCompVarProp((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3633 if( consdata->hasnonbinvalid && !consdata->hascontvar )
3639 consdata->hasnonbinvar =
TRUE;
3642 consdata->hascontvar =
TRUE;
3647 if( consdata->rowexact !=
NULL )
3674 var = consdata->vars[pos];
3675 val = consdata->vals[pos];
3694 if( consdata->eventdata !=
NULL )
3702 if( pos != consdata->nvars - 1 )
3704 consdata->vars[pos] = consdata->vars[consdata->nvars-1];
3706 consdata->valsreal[pos] = consdata->valsreal[consdata->nvars -1];
3708 if( consdata->eventdata !=
NULL )
3710 consdata->eventdata[pos] = consdata->eventdata[consdata->nvars-1];
3712 consdata->eventdata[pos]->varpos = pos;
3715 consdata->indexsorted = consdata->indexsorted && (pos + 2 >= consdata->nvars);
3716 consdata->coefsorted = consdata->coefsorted && (pos + 2 >= consdata->nvars);
3726 consdata->boundstightened = 0;
3727 consdata->presolved =
FALSE;
3728 consdata->changed =
TRUE;
3729 consdata->normalized =
FALSE;
3730 consdata->cliquesadded =
FALSE;
3731 consdata->implsadded =
FALSE;
3732 consdata->rangedrowpropagated = 0;
3737 consdata->hasnonbinvalid =
FALSE;
3770 var = consdata->vars[pos];
3771 val = consdata->vals[pos];
3797 consdata->valsreal[pos] = newvalfp;
3798 if( consdata->coefsorted )
3801 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos - 1, pos) <= 0);
3802 if( consdata->coefsorted && pos < consdata->
nvars - 1 )
3803 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos, pos + 1) <= 0);
3811 consdata->boundstightened = 0;
3812 consdata->presolved =
FALSE;
3813 consdata->changed =
TRUE;
3814 consdata->normalized =
FALSE;
3815 consdata->cliquesadded =
FALSE;
3816 consdata->implsadded =
FALSE;
3817 consdata->rangedrowpropagated = 0;
3842 for(
i = 0;
i < nconss;
i++ )
3847 if( consdata->varsdeleted )
3850 for( v = consdata->nvars - 1; v >= 0; --v )
3857 consdata->varsdeleted =
FALSE;
3882 if( consdata->merged )
3894 v = consdata->nvars-1;
3897 var = consdata->vars[v];
3898 if( consdata->vars[v-1] ==
var )
3907 while( v >= 1 && consdata->vars[v-1] ==
var );
3918 if( consdata->maxactdeltavar ==
var )
3921 consdata->maxactdeltavar =
NULL;
3933 consdata->merged =
TRUE;
3963 if( infeasible !=
NULL )
3964 *infeasible =
FALSE;
3969 if( consdata->eventdata ==
NULL )
3985 if( !consdata->removedfixings )
3999 while( v < consdata->
nvars )
4001 var = consdata->vars[v];
4002 val = consdata->vals[v];
4030 if( infeasible !=
NULL )
4052 if( infeasible !=
NULL )
4116 for(
i = 0;
i < naggrvars; ++
i )
4174 consdata->removedfixings =
TRUE;
4191 assert(consdata->removedfixings);
4195 for( v = 0; v < consdata->nvars; ++v )
4225 side = consdata->rhsreal;
4226 activity = consdata->minactivity;
4227 assert( activity > side );
4232 side = consdata->lhsreal;
4233 activity = consdata->maxactivity;
4234 assert( activity < side );
4237 if( consdata->rowexact !=
NULL )
4244 nvals = consdata->nvars;
4245 vals = consdata->vals;
4251 nvals, vals, consdata->vars, diff, rhs) );
4304 goto RETURN_SCIP_OKAY;
4311 var = consdata->vars[pos];
4326 goto RETURN_SCIP_OKAY;
4333 valrange = consdata->valsreal[pos];
4334 lhs = consdata->lhsreal;
4335 rhs = consdata->rhsreal;
4337 &minisrelax, &maxisrelax, &isminsettoinfinity, &ismaxsettoinfinity);
4346 if( valrange.
sup > 0.0 )
4360 newub = ubinterval.
sup;
4368 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
4378 if( conshdlrdata->limitdenom )
4380 boundmaxdenom = conshdlrdata->boundmaxdenom;
4386 SCIP_BOUNDTYPE_UPPER, tmpbound,
false, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4389 &infeasible, &tightened) );
4396 SCIP_BOUNDTYPE_UPPER, newub,
false, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4400 &infeasible, &tightened) );
4405 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
4412 goto RETURN_SCIP_OKAY;
4419 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
4435 newlb = lbinterval.
inf;
4441 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
4451 if( conshdlrdata->limitdenom )
4453 boundmaxdenom = conshdlrdata->boundmaxdenom;
4458 SCIP_BOUNDTYPE_LOWER, tmpbound,
true, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4461 &infeasible, &tightened) );
4468 SCIP_BOUNDTYPE_LOWER, newlb,
true, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4472 &infeasible, &tightened) );
4477 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
4484 goto RETURN_SCIP_OKAY;
4490 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
4509 newlb = lbinterval.
inf;
4517 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
4527 if( conshdlrdata->limitdenom )
4529 boundmaxdenom = conshdlrdata->boundmaxdenom;
4534 SCIP_BOUNDTYPE_LOWER, tmpbound,
false, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4537 &infeasible, &tightened) );
4544 SCIP_BOUNDTYPE_LOWER, newlb,
false, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4548 &infeasible, &tightened) );
4553 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
4561 goto RETURN_SCIP_OKAY;
4567 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
4584 newub = ubinterval.
sup;
4590 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
4600 if( conshdlrdata->limitdenom )
4602 boundmaxdenom = conshdlrdata->boundmaxdenom;
4607 SCIP_BOUNDTYPE_UPPER, tmpbound,
true, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4610 &infeasible, &tightened) );
4617 SCIP_BOUNDTYPE_UPPER, newub,
true, cons,
var, consdata->rowexact, consdata->vals, consdata->lhs, consdata->rhs, consdata->vars, consdata->nvars) );
4621 &infeasible, &tightened) );
4626 SCIPdebugMsg(
scip,
"linear constraint <%s>: cutoff <%s>, new bds=[%.15g,%.15g]\n",
4633 goto RETURN_SCIP_OKAY;
4639 SCIPdebugMsg(
scip,
"linear constraint <%s>: tighten <%s>, new bds=[%.15g,%.15g]\n",
4650#define MAXTIGHTENROUNDS 10
4663 unsigned int tightenmode;
4686 nvars = consdata->nvars;
4696 if( !force && (consdata->boundstightened >= tightenmode) )
4703 assert(consdata->coefsorted);
4731 &isminsettoinfinity, &ismaxsettoinfinity);
4740 if( consdata->maxactdelta <=
MIN(slack, surplus) )
4747 for( nrounds = 0; (force || consdata->boundstightened < tightenmode) && nrounds <
MAXTIGHTENROUNDS; ++nrounds )
4750 int oldnchgbdstotal = *nchgbds;
4760 assert(consdata->coefsorted);
4764 consdata->boundstightened = (
unsigned int)tightenmode;
4769 while( v <
nvars && v != lastchange && !(*
cutoff) )
4771 int oldnchgbds = *nchgbds;
4780 else if( *nchgbds > oldnchgbds )
4785 else if( consdata->coefsorted && v < consdata->nbinvars - 1
4787 v = consdata->nbinvars;
4794 *nchgbds - oldnchgbdstotal, nrounds);
4828 activity = consdata->activity;
4831 if( (consdata->rowexact ==
NULL || checklprows) && !
SCIPrationalIsEQ(consdata->lhs, consdata->rhs) )
4838 conshdlrdata->ncheckserrorbound++;
4841 conshdlrdata->nabotserrorbound++;
4845 if( activityfp - mu > consdata->rhsreal || activityfp + mu < consdata->lhsreal )
4847 SCIPdebugMsg(
scip,
"discarding solution due to fp check: activityfp=%g, lhsreal=%g, rhsreal=%g, mu=%g\n",
4848 activityfp, consdata->lhsreal, consdata->rhsreal, mu);
4850 conshdlrdata->nsuccesserrorbound++;
4853 else if( activityfp + mu < consdata->rhsreal && activityfp - mu >= consdata->lhsreal )
4855 SCIPdebugMsg(
scip,
"skipping exact check due to fp check: activityfp=%g, lhsreal=%g, rhsreal=%g, mu=%g\n",
4856 activityfp, consdata->lhsreal, consdata->rhsreal, mu);
4858 conshdlrdata->nsuccesserrorbound++;
4863 SCIPdebugMsg(
scip,
"no decision due to fp check: activityfp=%g, lhsreal=%g, rhsreal=%g, mu=%g\n",
4864 activityfp, consdata->lhsreal, consdata->rhsreal, mu);
4869 if( consdata->rowexact !=
NULL )
4883 SCIPrationalDebugMessage(
"consdata activity=%q (lhs=%q, rhs=%q, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
4884 activity, consdata->lhs, consdata->rhs, (
void*)consdata->rowexact, checklprows,
4942 consdata->lhs, consdata->rhs, consdata->hasfprelax) );
4952 consdata->rowrhs, &onerowrelax, &hasfprelax) );
4954 consdata->onerowrelax = onerowrelax;
4955 consdata->hasfprelax = hasfprelax;
4957 if( !(consdata->hasfprelax) || consdata->onerowrelax )
4958 consdata->rowrhs =
NULL;
4979 if( consdata->rowexact ==
NULL )
4987 if( consdata->nvars == 0 )
5012 assert( pr == 0 || cr == 0 );
5053 if( *ncuts > oldncuts )
5090 if( consdata->eventdata ==
NULL )
5122 conshdlrdata->nconspropnoninit++;
5123 conshdlrdata->propnonzerosnoninit += consdata->nvars;
5127 conshdlrdata->nconsprop++;
5128 conshdlrdata->propnonzeros += consdata->nvars;
5142 oldnchgbds = *nchgbds;
5146 if( *nchgbds > oldnchgbds )
5156 &isminsettoinfinity, &ismaxsettoinfinity);
5160 SCIPrationalDebugMessage(
"linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%q,%q]\n",
5161 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
5171 SCIPrationalDebugMessage(
"linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%q,%q]\n",
5172 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
5183 SCIPconsGetName(cons), minactivity, maxactivity, consdata->lhs, consdata->rhs);
5186 if( consdata->nvars > 0 )
5233 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n",
sol ==
NULL ?
"LP" :
"relaxation");
5242 for(
c = 0;
c < nusefulconss; ++
c )
5337 for(
c = 0;
c < nconss; ++
c )
5363 for(
c = nconss - 1;
c >= 0; --
c )
5370 if( consdata->eventdata !=
NULL )
5391 for(
c = 0;
c < nconss; ++
c )
5417 for(
c = 0;
c < nconss; ++
c )
5424 if( consdata->rowlhs !=
NULL )
5429 if( consdata->rowrhs !=
NULL )
5431 assert(!consdata->onerowrelax);
5471 if( consdata->eventdata !=
NULL )
5492 if( (*consdata)->eventdata !=
NULL )
5527 assert(sourcedata->rowlhs ==
NULL && sourcedata->rowexact ==
NULL);
5533 if( sourcedata->nvars > 0 )
5556 *infeasible =
FALSE;
5558 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
5597 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
5598 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
5602 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
5609 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
5618 else if( ncuts > 0 )
5654 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
5655 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
5659 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
5666 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
5675 else if( ncuts > 0 )
5740 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
5748 for(
c = 0;
c < nconss && !violated; ++
c )
5864 tightenbounds =
TRUE;
5869 int tightenboundsfreq;
5873 tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
5874 tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
5875 && ((tightenboundsfreq == 0 &&
depth == 0) || (tightenboundsfreq >= 1 && (
depth % tightenboundsfreq == 0)));
5882 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
5886 conshdlrdata->sortvars, &
cutoff, &nchgbds) );
5892 else if( nchgbds > 0 )
5920 for(
i = 0;
i < consdata->nvars; ++
i )
5986 const char* consname;
6005 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
6017 char** firstoperator,
6018 char** secondoperator,
6028 *firstoperator =
NULL;
6029 *secondoperator =
NULL;
6035 while( *curr && *success )
6048 if( curr[1] ==
'=' )
6057 if( strncmp(curr,
"[free]", 6) == 0 )
6072 if( *firstoperator ==
NULL )
6074 *firstoperator = curr;
6078 if( *secondoperator !=
NULL )
6083 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
6085 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
6088 else if( strncmp(curr,
"<=", 2) != 0 )
6090 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
6094 *secondoperator = curr;
6104 if( *firstoperator ==
NULL )
6122 int coefssize = 100;
6130 char* lhsstrptr =
NULL;
6131 char* rhsstrptr =
NULL;
6132 char* varstrptr = (
char*)str;
6162 if( ! operatorsuccess )
6173 assert(firstop[1] ==
'=');
6175 if( secondop !=
NULL )
6177 assert(secondop[0] ==
'<' && secondop[1] ==
'=');
6178 lhsstrptr = (
char *)str;
6179 varstrptr = firstop + 2;
6180 rhsstrptr = secondop + 2;
6186 varstrptr = (
char *)str;
6187 rhsstrptr = firstop + 2;
6191 assert(firstop[1] ==
'=');
6194 lhsstrptr = firstop + 2;
6197 assert(firstop[1] ==
'=');
6200 rhsstrptr = firstop + 2;
6201 lhsstrptr = firstop + 2;
6204 assert(strncmp(firstop,
"[free]", 6) == 0);
6210 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
6216 if( lhsstrptr !=
NULL )
6220 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
6226 if( rhsstrptr == lhsstrptr )
6231 if( rhsstrptr !=
NULL && rhsstrptr != lhsstrptr )
6235 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
6248 SCIP_CALL_TERMINATE( retcode,
SCIPparseVarsLinearsumExact(
scip, varstrptr,
vars, coefs, &
nvars, coefssize, &requsize, &endptr, success), TERMINATE );
6250 if( *success && requsize > coefssize )
6256 coefssize = requsize;
6258 SCIP_CALL_TERMINATE( retcode,
SCIPparseVarsLinearsumExact(
scip, varstrptr,
vars, coefs, &
nvars, coefssize, &requsize, &endptr, success), TERMINATE );
6259 assert(!*success || requsize <= coefssize);
6265 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode),
6294 if( varssize < consdata->
nvars )
6317 (*nvars) = consdata->nvars;
6343 cons = eventdata->cons;
6346 if( consdata ==
NULL )
6354 updateActivities = ((consdata->rowexact !=
NULL) == eventdata->rowvar) && consdata->validactivities;
6355 assert(!consdata->validactivities || (consdata->validminact && consdata->validmaxact && consdata->validglbminact && consdata->validglbmaxact));
6363 varpos = eventdata->varpos;
6368 valrange = consdata->valsreal[varpos];
6387 consdata->presolved =
FALSE;
6388 consdata->rangedrowpropagated = 0;
6396 if( consdata->maxactdeltavar ==
var )
6399 consdata->maxactdeltavar =
NULL;
6403 if( consdata->boundstightened > 0)
6409 consdata->boundstightened = 0;
6413 consdata->boundstightened = 0;
6437 if( delta > consdata->maxactdelta )
6439 consdata->maxactdelta = delta;
6440 consdata->maxactdeltavar =
var;
6447 consdata->presolved =
FALSE;
6448 consdata->removedfixings =
FALSE;
6449 consdata->rangedrowpropagated = 0;
6452 if( consdata->maxactdeltavar ==
var )
6455 consdata->maxactdeltavar =
NULL;
6463 consdata->presolved =
FALSE;
6472 varpos = eventdata->varpos;
6480 valrange = consdata->valsreal[varpos];
6482 consdata->rangedrowpropagated = 0;
6498 consdata->indexsorted =
FALSE;
6500 consdata->coefsorted =
FALSE;
6515 consdata->varsdeleted =
TRUE;
6542 eventExecExactLinear,
NULL) );
6550 consEnfolpExactLinear, consEnfopsExactLinear, consCheckExactLinear, consLockExactLinear,
6583 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
6587 "maximal number of separation rounds per node (-1: unlimited)",
6591 "maximal number of separation rounds per node in the root node (-1: unlimited)",
6595 "maximal number of cuts separated per separation round",
6599 "maximal number of cuts separated per separation round in the root node",
6602 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
6606 "should bounds on continuous variables be tightened by propagation?",
6610 "should denominators of rational bounds on continuous variables be controlled?",
6614 "maximal denominator for rational bounds on continuous variables after propagation",
6667 if( conshdlr ==
NULL )
6678 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
6706 if( requiredsize > nconsvars )
6712 assert(requiredsize <= nconsvars);
6721 SCIPerrorMessage(
"while creating constraint <%s> inactive variables lead to an infinite constant\n", name);
6748 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
6749 local, modifiable, dynamic, removable, stickingatnode) );
6835 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
6843 if( sourcecoefs !=
NULL )
6855 for( v = 0; v <
nvars; ++v )
6868 if( requiredsize >
nvars )
6879 for( v = 0; v <
nvars; ++v )
6889 for( v = 0; v <
nvars && success; ++v )
6908 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
6939 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
6960 SCIPerrorMessage(
"adding coefficients after presolving not supported yet in exact solving mode \n");
6974 if( requiredsize > nconsvars )
6980 assert(requiredsize <= nconsvars);
6995 SCIPerrorMessage(
"adding variable <%s> to constraint <%s> leads to infinite constant and cannot be handled safely\n",
7011 for( v = nconsvars - 1; v >= 0; --v )
7063 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
7070 vars = consdata->vars;
7149 return consdata->lhs;
7173 return consdata->rhs;
7236 return consdata->nvars;
7260 return consdata->vars;
7284 return consdata->valsreal;
7308 return consdata->vals;
7337 if( consdata->rowexact !=
NULL )
7369 if( consdata->rowexact !=
NULL )
7402 if( consdata->rowlhs !=
NULL )
7433 if( consdata->rowlhs !=
NULL )
7462 return consdata->rowlhs;
7488 return consdata->rowexact;
internal methods for clocks and timing issues
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_SEPAPRIORITY
#define CONSHDLR_PROPFREQ
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
struct InferInfo INFERINFO
static SCIP_RETCODE consdataPrint(SCIP *scip, SCIP_CONSDATA *consdata, FILE *file)
static void permSortConsdata(SCIP_CONSDATA *consdata, int *perm, int nvars)
static void consdataRecomputeMaxActivityDelta(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE addRelaxation(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff)
static void consdataUpdateActivitiesLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb, SCIP_INTERVAL val)
static void consdataUpdateAddCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_RATIONAL *valExact, SCIP_INTERVAL val)
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 *isrelax, SCIP_Bool *issettoinfinity)
static SCIP_RATIONAL * consdataGetMinAbsvalEx(SCIP *scip, SCIP_CONSDATA *consdata)
static void consdataCalcMinAbsvalEx(SCIP_CONSDATA *consdata)
static void consdataRecomputeMinactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE chgCoefPos(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_RATIONAL *newval)
static SCIP_RETCODE unlockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_RATIONAL *val)
static SCIP_Bool consdataComputeSolActivityWithErrorbound(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol, SCIP_Real *activity, SCIP_Real *errorbound)
static void conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
static void consdataRecomputeGlbMinactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE printActivityConflictToCertificate(SCIP *scip, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool rhs)
static void consdataUpdateDelCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_RATIONAL *valExact, SCIP_INTERVAL val)
static void consdataRecomputeMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE chgRhs(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *rhs)
static SCIP_RETCODE performVarDeletions(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
#define checkMaxActivityDelta(scip, consdata)
#define DEFAULT_LIMITDENOM
#define DEFAULT_MAXROUNDSROOT
static void consdataGetActivityResiduals(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_INTERVAL val, SCIP_Bool goodrelax, SCIP_Real *minresactivity, SCIP_Real *maxresactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_SOL *sol, int *ncuts, SCIP_Bool *cutoff)
static void consdataGetActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Real *maxactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity)
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool tightenbounds, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds)
static SCIP_RETCODE consPrintConsSol(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool useexactsol, FILE *file)
static SCIP_RETCODE mergeMultiples(SCIP *scip, SCIP_CONS *cons)
static void consdataCheckNonbinvar(SCIP_CONSDATA *consdata)
static SCIP_RETCODE tightenBounds(SCIP *scip, SCIP_CONS *cons, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds)
#define DEFAULT_BOUNDMAXDENOM
static SCIP_RETCODE consCatchEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos)
static SCIP_RETCODE consdataEnsureVarsSize(SCIP *scip, SCIP_CONSDATA *consdata, int num)
static void consdataUpdateActivitiesGlbUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldub, SCIP_Real newub, SCIP_INTERVAL val)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs)
#define DEFAULT_MAXSEPACUTSROOT
static SCIP_RETCODE consDropAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static void consdataUpdateActivitiesGlbLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldlb, SCIP_Real newlb, SCIP_INTERVAL val)
static SCIP_RETCODE findOperators(const char *str, char **firstoperator, char **secondoperator, SCIP_Bool *success)
static SCIP_RETCODE checkCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_SOL *sol, SCIP_Bool useexactsol, SCIP_Bool checklprows, SCIP_Bool *violated)
static SCIP_RETCODE chgLhs(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *lhs)
static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, int pos)
static void consdataUpdateActivitiesUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub, SCIP_INTERVAL val)
static void consdataComputePseudoActivity(SCIP_CONSDATA *consdata, SCIP_RATIONAL *pseudoactivity)
static SCIP_RETCODE createRows(SCIP *scip, SCIP_CONS *cons)
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)
#define DEFAULT_MAXSEPACUTS
static void consdataGetActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol, SCIP_Bool useexact, SCIP_RATIONAL *activity)
static void consdataScaleMinValue(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real minval)
#define DEFAULT_TIGHTENBOUNDSFREQ
static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr)
static void consdataRecomputeGlbMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
static void consdataCalcActivities(SCIP *scip, SCIP_CONSDATA *consdata)
#define DEFAULT_MAXROUNDS
static int getInferInt(PROPRULE proprule, int pos)
static SCIP_RETCODE lockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_RATIONAL *val)
static void consdataInvalidateActivities(SCIP_CONSDATA *consdata)
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 void consdataGetFeasibility(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol, SCIP_RATIONAL *ret)
static int inferInfoToInt(INFERINFO inferinfo)
static SCIP_RETCODE consdataSort(SCIP *scip, SCIP_CONSDATA *consdata)
static void consdataUpdateChgCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_INTERVAL oldval, SCIP_RATIONAL *oldvalExact, SCIP_INTERVAL newval, SCIP_RATIONAL *newvalExact)
static SCIP_RETCODE consCatchAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE addCoef(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_RATIONAL *val)
static void consdataUpdateActivities(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_INTERVAL valrange, SCIP_BOUNDTYPE boundtype, SCIP_Bool global)
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 *isrelax, SCIP_Bool *issettoinfinity)
static INFERINFO getInferInfo(PROPRULE proprule, int pos)
Constraint handler for linear constraints in their most general form, .
Constraint handler for knapsack constraints of the form , x binary and .
Constraint handler for linear constraints in their most general form, .
constraint handler for nonlinear constraints specified by algebraic expressions
common defines and data types used in all packages of SCIP
#define SCIP_MAXTREEDEPTH
#define SCIP_REAL_UNITROUNDOFF
#define SCIP_CALL_TERMINATE(retcode, x, TERM)
SCIP_RETCODE SCIPchgLhsExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *lhs)
SCIP_RATIONAL * SCIPgetLhsExactLinear(SCIP *scip, SCIP_CONS *cons)
void SCIPgetFpDualsolExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *ret)
SCIP_RATIONAL * SCIPgetRhsExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgRhsExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *rhs)
SCIP_RETCODE SCIPcreateConsExactLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *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_VAR ** SCIPgetVarsExactLinear(SCIP *scip, SCIP_CONS *cons)
void SCIPgetFpDualfarkasExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_RATIONAL *ret)
SCIP_RETCODE SCIPcopyConsExactLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_INTERVAL *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)
int SCIPgetNVarsExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_RATIONAL *val)
SCIP_RETCODE SCIPcertifyConsOrigExactLinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPgetActivityExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_RATIONAL *ret)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsBasicExactLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs)
SCIP_ROWEXACT * SCIPgetRowExactExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_INTERVAL * SCIPgetValsRealExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RATIONAL ** SCIPgetValsExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCoefExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
SCIP_ROW * SCIPgetRowExactLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPgetFeasibilityExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_RATIONAL *ret)
SCIP_RETCODE SCIPchgCoefExactLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_RATIONAL *val)
SCIP_RETCODE SCIPincludeConshdlrExactLinear(SCIP *scip)
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_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
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 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)
SCIP_RETCODE SCIPcertifyCons(SCIP *scip, SCIP_Bool isorigfile, const char *consname, const char sense, SCIP_RATIONAL *side, int len, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPcertifyActivityVarBound(SCIP *scip, const char *linename, SCIP_BOUNDTYPE boundtype, SCIP_Real newbound, SCIP_Bool ismaxactivity, SCIP_CONS *constraint, SCIP_VAR *variable, SCIP_ROWEXACT *row, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs, SCIP_VAR **vars, int nvars)
SCIP_RETCODE SCIPcertifyActivityConflict(SCIP *scip, SCIP_CONS *cons, SCIP_ROWEXACT *row, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs, int nvals, SCIP_RATIONAL **vals, SCIP_VAR **vars, SCIP_RATIONAL *diff, SCIP_Bool userhs)
SCIP_Bool SCIPisCertified(SCIP *scip)
SCIP_RETCODE SCIPcertifyActivityVarBoundExact(SCIP *scip, const char *linename, SCIP_BOUNDTYPE boundtype, SCIP_RATIONAL *newbound, SCIP_Bool ismaxactivity, SCIP_CONS *constraint, SCIP_VAR *variable, SCIP_ROWEXACT *row, SCIP_RATIONAL **vals, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs, SCIP_VAR **vars, int nvars)
SCIP_Bool SCIPshouldCertificateTrackBounds(SCIP *scip)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
void SCIPconshdlrMarkExact(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
int SCIPconshdlrGetPropFreq(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelvars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsOriginal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_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)
const char * SCIPconsGetName(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_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
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)
SCIP_Bool SCIPisExact(SCIP *scip)
SCIP_RETCODE SCIPaddRowExact(SCIP *scip, SCIP_ROWEXACT *rowexact)
void SCIPintervalSetRoundingModeUpwards(void)
void SCIPintervalSetRoundingModeDownwards(void)
SCIP_ROUNDMODE SCIPintervalGetRoundingMode(void)
void SCIPintervalSetRoundingMode(SCIP_ROUNDMODE roundmode)
SCIP_Real SCIPintervalAbsMax(SCIP_INTERVAL interval)
void SCIPintervalSubScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
struct SCIP_Interval SCIP_INTERVAL
void SCIPintervalDiv(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
SCIP_Real SCIPintervalNegateReal(SCIP_Real x)
void SCIPintervalSetRational(SCIP_INTERVAL *resultant, SCIP_RATIONAL *value)
SCIP_RETCODE SCIPreleaseRowExact(SCIP *scip, SCIP_ROWEXACT **row)
SCIP_Bool SCIPgetRowSolActivityWithErrorboundExact(SCIP *scip, SCIP_ROWEXACT *row, SCIP_SOL *sol, SCIP_Real *activity, SCIP_Real *errorbound)
SCIP_RETCODE SCIPprintRowExact(SCIP *scip, SCIP_ROWEXACT *row, FILE *file)
SCIP_RETCODE SCIPgenerateFpRowsFromRowExact(SCIP *scip, SCIP_ROWEXACT *row, SCIP_ROW *rowlhs, SCIP_ROW *rowrhs, SCIP_Bool *onerowrelax, SCIP_Bool *hasfprelax)
SCIP_RETCODE SCIPgetRowSolActivityExact(SCIP *scip, SCIP_ROWEXACT *row, SCIP_SOL *sol, SCIP_Bool useexact, SCIP_RATIONAL *result)
SCIP_RETCODE SCIPgetRowSolFeasibilityExact(SCIP *scip, SCIP_ROWEXACT *row, SCIP_SOL *sol, SCIP_RATIONAL *result)
SCIP_RETCODE SCIPchgRowExactLhs(SCIP *scip, SCIP_ROWEXACT *row, SCIP_RATIONAL *lhs)
SCIP_RETCODE SCIPcreateEmptyRowConsExact(SCIP *scip, SCIP_ROWEXACT **rowexact, SCIP_ROW *fprow, SCIP_ROW *fprowrhs, SCIP_RATIONAL *lhs, SCIP_RATIONAL *rhs, SCIP_Bool isfprelaxable)
SCIP_RETCODE SCIPchgRowExactRhs(SCIP *scip, SCIP_ROWEXACT *row, SCIP_RATIONAL *rhs)
SCIP_RETCODE SCIPaddVarsToRowExact(SCIP *scip, SCIP_ROWEXACT *row, int nvars, SCIP_VAR **vars, SCIP_RATIONAL **vals)
SCIP_Bool SCIPlpExactIsSolved(SCIP *scip)
SCIP_RETCODE SCIPcaptureRowExact(SCIP *scip, SCIP_ROWEXACT *row)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
BMS_BUFMEM * SCIPbuffer(SCIP *scip)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_Bool SCIPrationalIsLTReal(SCIP_RATIONAL *rat, SCIP_Real real)
void SCIPrationalMin(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_RETCODE SCIPrationalCreateBlock(BMS_BLKMEM *blkmem, SCIP_RATIONAL **rational)
SCIP_RETCODE SCIPrationalCreate(SCIP_RATIONAL **rational)
void SCIPrationalMult(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsAbsEQ(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
void SCIPrationalSetInfinity(SCIP_RATIONAL *res)
void SCIPrationalAdd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Real SCIPrationalGetReal(SCIP_RATIONAL *rational)
SCIP_RETCODE SCIPrationalCreateString(BMS_BLKMEM *mem, SCIP_RATIONAL **rational, const char *desc)
void SCIPrationalFreeBlock(BMS_BLKMEM *mem, SCIP_RATIONAL **rational)
#define SCIPrationalDebugMessage
void SCIPrationalAbs(SCIP_RATIONAL *res, SCIP_RATIONAL *op)
void SCIPrationalDiv(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsAbsInfinity(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsLT(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
void SCIPrationalSetReal(SCIP_RATIONAL *res, SCIP_Real real)
SCIP_Bool SCIPrationalIsGT(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
SCIP_RETCODE SCIPrationalCopyBlock(BMS_BLKMEM *mem, SCIP_RATIONAL **result, SCIP_RATIONAL *src)
void SCIPrationalFreeBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
SCIP_RETCODE SCIPrationalCopyBlockArray(BMS_BLKMEM *mem, SCIP_RATIONAL ***target, SCIP_RATIONAL **src, int len)
void SCIPrationalDiff(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsLEReal(SCIP_RATIONAL *rat, SCIP_Real real)
SCIP_Bool SCIPrationalIsPositive(SCIP_RATIONAL *rational)
int SCIPrationalGetSign(const SCIP_RATIONAL *rational)
SCIP_RETCODE SCIPrationalCreateBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
void SCIPrationalAddProd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsZero(SCIP_RATIONAL *rational)
void SCIPrationalSetRational(SCIP_RATIONAL *res, SCIP_RATIONAL *src)
SCIP_Bool SCIPrationalIsGEReal(SCIP_RATIONAL *rat, SCIP_Real real)
void SCIPrationalMessage(SCIP_MESSAGEHDLR *msg, FILE *file, SCIP_RATIONAL *rational)
void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
void SCIPrationalSetFraction(SCIP_RATIONAL *res, SCIP_Longint nom, SCIP_Longint denom)
void SCIPrationalNegate(SCIP_RATIONAL *res, SCIP_RATIONAL *op)
SCIP_Bool SCIPrationalIsNegative(SCIP_RATIONAL *rational)
void SCIPrationalDiffReal(SCIP_RATIONAL *res, SCIP_RATIONAL *rat, SCIP_Real real)
SCIP_Bool SCIPrationalIsInfinity(SCIP_RATIONAL *rational)
void SCIPrationalFreeBlockArray(BMS_BLKMEM *mem, SCIP_RATIONAL ***ratblockarray, int size)
SCIP_Real SCIPrationalRoundReal(SCIP_RATIONAL *rational, SCIP_ROUNDMODE_RAT roundmode)
SCIP_Bool SCIPrationalIsEQReal(SCIP_RATIONAL *rat, SCIP_Real real)
SCIP_RETCODE SCIPrationalCreateBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***rational, int size)
SCIP_Bool SCIPrationalIsNegInfinity(SCIP_RATIONAL *rational)
void SCIPrationalFree(SCIP_RATIONAL **rational)
SCIP_Bool SCIPrationalIsGTReal(SCIP_RATIONAL *rat, SCIP_Real real)
SCIP_Bool SCIPrationalIsEQ(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
SCIP_RETCODE SCIPrationalReallocBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***result, int oldlen, int newlen)
void SCIPrationalMultReal(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_Real op2)
void SCIPrationalComputeApproximation(SCIP_RATIONAL *res, SCIP_RATIONAL *src, SCIP_Longint maxdenom, int forcegreater)
void SCIPrationalFreeBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***ratbufarray, int size)
SCIP_Bool SCIPrationalIsAbsGT(SCIP_RATIONAL *rat1, SCIP_RATIONAL *rat2)
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 SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetDualfarkas(SCIP_ROW *row)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
void SCIPgetSolValExact(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_RATIONAL *res)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Bool SCIPsolIsExact(SCIP_SOL *sol)
int SCIPgetNSepaRounds(SCIP *scip)
SCIP_Bool SCIPisUbBetter(SCIP *scip, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPparseRational(SCIP *scip, const char *str, SCIP_RATIONAL *value, char **endptr)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisLbBetter(SCIP *scip, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisHugeValue(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_Real SCIPgetHugeValue(SCIP *scip)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPinRepropagation(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_RETCODE SCIPvarGetProbvarBound(SCIP_VAR **var, SCIP_Real *bound, SCIP_BOUNDTYPE *boundtype)
SCIP_Bool SCIPvarIsDeleted(SCIP_VAR *var)
SCIP_Real SCIPvarGetNegationConstant(SCIP_VAR *var)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetAggrScalarExact(SCIP_VAR *var)
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_Real SCIPadjustedVarLbExactFloat(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetAggrConstantExact(SCIP_VAR *var)
SCIP_Bool SCIPvarIsTransformed(SCIP_VAR *var)
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)
int SCIPvarGetCertificateIndex(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_RETCODE SCIPinferVarLbConsExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RATIONAL * SCIPvarGetMultaggrConstantExact(SCIP_VAR *var)
SCIP_RETCODE SCIPgetProbvarLinearSumExact(SCIP *scip, SCIP_VAR **vars, SCIP_RATIONAL **scalars, int *nvars, int varssize, SCIP_RATIONAL *constant, int *requiredsize, SCIP_Bool mergemultiples)
SCIP_RATIONAL * SCIPvarGetUbLocalExact(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 SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPparseVarsLinearsumExact(SCIP *scip, char *str, SCIP_VAR **vars, SCIP_RATIONAL **vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success)
SCIP_RETCODE SCIPflattenVarAggregationGraph(SCIP *scip, SCIP_VAR *var)
SCIP_VAR ** SCIPvarGetMultaggrVars(SCIP_VAR *var)
SCIP_RETCODE SCIPinferVarUbConsExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
int SCIPvarGetMultaggrNVars(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetBestBoundLocalExact(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetLbGlobalExact(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
SCIP_RATIONAL ** SCIPvarGetMultaggrScalarsExact(SCIP_VAR *var)
SCIP_Real SCIPadjustedVarUbExactFloat(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Bool SCIPvarIsOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
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_RATIONAL * SCIPvarGetLbLocalExact(SCIP_VAR *var)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
SCIP_RETCODE SCIPgetProbvarSumExact(SCIP *scip, SCIP_VAR **var, SCIP_RATIONAL *scalar, SCIP_RATIONAL *constant)
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_RETCODE SCIPwriteVarsLinearsumExact(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_RATIONAL **vals, int nvars, SCIP_Bool type)
SCIP_RATIONAL * SCIPvarGetUbGlobalExact(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetAggrVar(SCIP_VAR *var)
void SCIPsort(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
SCIP_RETCODE SCIPskipSpace(char **s)
static SCIP_RETCODE updateActivities(SCIP *scip, SCIP_Real *minactivities, SCIP_Real *maxactivities, SCIP_ROW **violrows, int *violrowpos, int *nviolrows, int *nviolfracrows, int *nfracsinrow, int nlprows, SCIP_VAR *var, SCIP_Real oldsolval, SCIP_Real newsolval)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
interval arithmetics for provable bounds
SCIP_Bool SCIProwExactIsInLP(SCIP_ROWEXACT *row)
SCIP_RATIONAL ** SCIProwExactGetVals(SCIP_ROWEXACT *row)
int SCIProwExactGetNNonz(SCIP_ROWEXACT *row)
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
public methods for conflict analysis handlers
public methods for managing constraints
public methods for managing events
public methods for LP management
public methods for LP management
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for problem variables
wrapper for rational number arithmetic
public methods for branching rule plugins and branching
public methods for certified solving
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 exact solving
public methods for the LP relaxation, rows and columns
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 querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
internal methods for storing separated exact cuts
datastructures for problem statistics
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSEXIT(x)
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSINITLP(x)
#define SCIP_DECL_CONSEXITPRE(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
#define SCIP_DECL_CONSINIT(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
#define SCIP_DECL_CONSDELVARS(x)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
#define SCIP_EVENTTYPE_BOUNDCHANGED
#define SCIP_EVENTTYPE_VARUNLOCKED
#define SCIP_EVENTTYPE_TYPECHANGED
#define SCIP_EVENTTYPE_GUBCHANGED
#define SCIP_EVENTTYPE_GBDCHANGED
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_UBTIGHTENED
#define SCIP_EVENTTYPE_VARFIXED
#define SCIP_EVENTTYPE_VARDELETED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_GLBCHANGED
#define SCIP_EVENTTYPE_BOUNDRELAXED
#define SCIP_EVENTTYPE_LBCHANGED
#define SCIP_EVENTTYPE_UBCHANGED
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
#define SCIP_EVENTTYPE_LBTIGHTENED
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_RowExact SCIP_ROWEXACT
struct SCIP_HashMap SCIP_HASHMAP
#define SCIP_DECL_SORTINDCOMP(x)
struct SCIP_Rational SCIP_RATIONAL
enum SCIP_Result SCIP_RESULT
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_EXITPRESOLVE
@ SCIP_STAGE_TRANSFORMING
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_ORIGINAL
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
enum SCIP_LockType SCIP_LOCKTYPE
enum SCIP_Vartype SCIP_VARTYPE
internal methods for problem variables