83#define CONSHDLR_NAME "exactlinear"
84#define CONSHDLR_DESC "exact linear constraints of the form lhs <= a^T x <= rhs"
85#define CONSHDLR_SEPAPRIORITY +100000
86#define CONSHDLR_ENFOPRIORITY -1000000
87#define CONSHDLR_CHECKPRIORITY -1000000
88#define CONSHDLR_SEPAFREQ 0
89#define CONSHDLR_PROPFREQ 1
90#define CONSHDLR_EAGERFREQ 100
92#define CONSHDLR_DELAYSEPA FALSE
93#define CONSHDLR_DELAYPROP FALSE
94#define CONSHDLR_NEEDSCONS TRUE
96#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
98#define EVENTHDLR_NAME "exactlinear"
99#define EVENTHDLR_DESC "bound change event handler for exact linear constraints"
101#define DEFAULT_TIGHTENBOUNDSFREQ 1
102#define DEFAULT_MAXROUNDS 5
103#define DEFAULT_MAXROUNDSROOT -1
104#define DEFAULT_MAXSEPACUTS 50
105#define DEFAULT_MAXSEPACUTSROOT 200
106#define DEFAULT_SORTVARS TRUE
108#define DEFAULT_LIMITDENOM FALSE
109#define DEFAULT_BOUNDMAXDENOM 256L
151 int minactivityneginf;
152 int minactivityposinf;
153 int maxactivityneginf;
154 int maxactivityposinf;
155 int minactivityneghuge;
156 int minactivityposhuge;
157 int maxactivityneghuge;
158 int maxactivityposhuge;
159 int glbminactivityneginf;
160 int glbminactivityposinf;
161 int glbmaxactivityneginf;
162 int glbmaxactivityposinf;
163 int glbminactivityneghuge;
164 int glbminactivityposhuge;
165 int glbmaxactivityneghuge;
166 int glbmaxactivityposhuge;
172 unsigned int boundstightened:2;
173 unsigned int rangedrowpropagated:2;
175 unsigned int validmaxabsval:1;
176 unsigned int validminabsval:1;
177 unsigned int validactivities:1;
178 unsigned int validminact:1;
179 unsigned int validmaxact:1;
180 unsigned int validglbminact:1;
181 unsigned int validglbmaxact:1;
182 unsigned int presolved:1;
183 unsigned int removedfixings:1;
184 unsigned int changed:1;
185 unsigned int normalized:1;
186 unsigned int coefsorted :1;
187 unsigned int merged:1;
188 unsigned int cliquesadded:1;
189 unsigned int implsadded:1;
190 unsigned int indexsorted:1;
191 unsigned int varsdeleted:1;
192 unsigned int hascontvar:1;
193 unsigned int hasnonbinvar:1;
194 unsigned int hasnonbinvalid:1;
195 unsigned int onerowrelax:1;
196 unsigned int hasfprelax:1;
209struct SCIP_ConshdlrData
219 int tightenboundsfreq;
263 unsigned int proprule:8;
279 return inferinfo.val.asint;
296 inferinfo.val.asbits.proprule = (
unsigned int) proprule;
297 inferinfo.val.asbits.pos = (
unsigned int) pos;
323 assert(consdata->nvars <= consdata->varssize);
325 if( num > consdata->varssize )
333 for( k = consdata->varssize; k < newsize; ++k )
336 if( consdata->eventdata !=
NULL )
340 consdata->varssize = newsize;
342 assert(num <= consdata->varssize);
366 (*conshdlrdata)->naddconss = 0;
367 (*conshdlrdata)->ncheckserrorbound = 0;
368 (*conshdlrdata)->nabotserrorbound = 0;
369 (*conshdlrdata)->nsuccesserrorbound = 0;
370 (*conshdlrdata)->nconsprop = 0;
371 (*conshdlrdata)->nconspropnoninit = 0;
372 (*conshdlrdata)->propnonzeros = 0;
373 (*conshdlrdata)->propnonzerosnoninit = 0;
380 (*conshdlrdata)->eventhdlr = eventhdlr;
500 consdata->eventdata[pos]->cons = cons;
501 consdata->eventdata[pos]->varpos = pos;
502 consdata->eventdata[pos]->rowvar =
false;
507 eventhdlr, consdata->eventdata[pos], &consdata->eventdata[pos]->filterpos) );
509 consdata->removedfixings = consdata->removedfixings &&
SCIPvarIsActive(consdata->vars[pos]);
537 assert(consdata->eventdata[pos]->cons == cons);
538 assert(consdata->eventdata[pos]->varpos == pos);
543 eventhdlr, consdata->eventdata[pos], consdata->eventdata[pos]->filterpos) );
574 for(
i = 0;
i < consdata->nvars; ++
i )
601 for(
i = consdata->nvars - 1;
i >= 0; --
i )
643 (*consdata)->varssize = 0;
644 (*consdata)->nvars =
nvars;
645 (*consdata)->hascontvar =
FALSE;
646 (*consdata)->hasnonbinvar =
FALSE;
647 (*consdata)->hasnonbinvalid =
TRUE;
648 (*consdata)->vars =
NULL;
649 (*consdata)->vals =
NULL;
650 (*consdata)->valsreal =
NULL;
668 for( v = 0; v <
nvars; ++v )
691 if( !(*consdata)->hascontvar )
697 (*consdata)->hasnonbinvar =
TRUE;
700 (*consdata)->hascontvar =
TRUE;
706 (*consdata)->nvars = k;
714 (*consdata)->varssize = k;
722 (*consdata)->eventdata =
NULL;
737 (*consdata)->rowlhs =
NULL;
738 (*consdata)->rowrhs =
NULL;
739 (*consdata)->rowexact =
NULL;
742 (*consdata)->lhsreal = lhsrel;
743 (*consdata)->rhsreal = rhsrel;
753 (*consdata)->maxactdeltavar =
NULL;
754 (*consdata)->minactivityneginf = -1;
755 (*consdata)->minactivityposinf = -1;
756 (*consdata)->maxactivityneginf = -1;
757 (*consdata)->maxactivityposinf = -1;
758 (*consdata)->minactivityneghuge = -1;
759 (*consdata)->minactivityposhuge = -1;
760 (*consdata)->maxactivityneghuge = -1;
761 (*consdata)->maxactivityposhuge = -1;
766 (*consdata)->glbminactivityneginf = -1;
767 (*consdata)->glbminactivityposinf = -1;
768 (*consdata)->glbmaxactivityneginf = -1;
769 (*consdata)->glbmaxactivityposinf = -1;
770 (*consdata)->glbminactivityneghuge = -1;
771 (*consdata)->glbminactivityposhuge = -1;
772 (*consdata)->glbmaxactivityneghuge = -1;
773 (*consdata)->glbmaxactivityposhuge = -1;
774 (*consdata)->validmaxabsval =
FALSE;
775 (*consdata)->validminabsval =
FALSE;
776 (*consdata)->validactivities =
FALSE;
777 (*consdata)->validminact =
FALSE;
778 (*consdata)->validmaxact =
FALSE;
779 (*consdata)->validglbminact =
FALSE;
780 (*consdata)->validglbmaxact =
FALSE;
781 (*consdata)->boundstightened = 0;
782 (*consdata)->presolved =
FALSE;
783 (*consdata)->removedfixings =
FALSE;
784 (*consdata)->changed =
TRUE;
785 (*consdata)->normalized =
FALSE;
786 (*consdata)->indexsorted = (
nvars <= 1);
787 (*consdata)->merged = (
nvars <= 1);
788 (*consdata)->cliquesadded =
FALSE;
789 (*consdata)->implsadded =
FALSE;
790 (*consdata)->coefsorted =
FALSE;
791 (*consdata)->nbinvars = -1;
792 (*consdata)->varsdeleted =
FALSE;
793 (*consdata)->rangedrowpropagated = 0;
794 (*consdata)->onerowrelax =
FALSE;
795 (*consdata)->hasfprelax =
FALSE;
807 for( v = 0; v < (*consdata)->nvars; v++ )
831 assert((*consdata)->varssize >= 0);
834 if( (*consdata)->rowlhs !=
NULL )
838 if( (*consdata)->rowrhs !=
NULL && !(*consdata)->onerowrelax )
844 for( v = 0; v < (*consdata)->nvars; v++ )
888 if( consdata->nvars == 0 )
949 if( consdata->nvars == 0 )
956 for( v = 0; v < consdata->nvars; ++v )
958 if( consdata->vals !=
NULL )
972 else if( consdata->nvars > 0 )
1028 consdata->validactivities =
FALSE;
1029 consdata->validminact =
FALSE;
1030 consdata->validmaxact =
FALSE;
1031 consdata->validglbminact =
FALSE;
1032 consdata->validglbmaxact =
FALSE;
1033 consdata->validmaxabsval =
FALSE;
1034 consdata->validminabsval =
FALSE;
1035 consdata->hasnonbinvalid =
FALSE;
1045 consdata->maxactdeltavar =
NULL;
1046 consdata->minactivityneginf = -1;
1047 consdata->minactivityposinf = -1;
1048 consdata->maxactivityneginf = -1;
1049 consdata->maxactivityposinf = -1;
1050 consdata->minactivityneghuge = -1;
1051 consdata->minactivityposhuge = -1;
1052 consdata->maxactivityneghuge = -1;
1053 consdata->maxactivityposhuge = -1;
1058 consdata->glbminactivityneginf = -1;
1059 consdata->glbminactivityposinf = -1;
1060 consdata->glbmaxactivityneginf = -1;
1061 consdata->glbmaxactivityposinf = -1;
1062 consdata->glbminactivityneghuge = -1;
1063 consdata->glbminactivityposhuge = -1;
1064 consdata->glbmaxactivityneghuge = -1;
1065 consdata->glbmaxactivityposhuge = -1;
1076 int pseudoactivityposinf;
1077 int pseudoactivityneginf;
1083 pseudoactivityposinf = 0;
1084 pseudoactivityneginf = 0;
1086 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1089 val = consdata->vals[
i];
1095 ++pseudoactivityposinf;
1097 ++pseudoactivityneginf;
1102 ++pseudoactivityneginf;
1104 ++pseudoactivityposinf;
1113 else if( pseudoactivityposinf > 0 && ( pseudoactivityneginf == 0 || !
SCIPrationalIsInfinity(consdata->rhs) ) )
1128 consdata->minactivity = 0.0;
1132 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1134 if( consdata->valsreal[
i].sup < 0.0 )
1136 assert(consdata->valsreal[
i].inf <= 0.0);
1145 assert(consdata->valsreal[
i].inf >= 0.0);
1153 contribution *= contribution < 0.0 ? consdata->valsreal[
i].sup : consdata->valsreal[
i].inf;
1158 consdata->minactivity += contribution;
1162 consdata->validminact =
TRUE;
1165 consdata->lastminactivity = consdata->minactivity;
1180 consdata->maxactivity = 0.0;
1184 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1186 if( consdata->valsreal[
i].sup < 0.0 )
1188 assert(consdata->valsreal[
i].inf <= 0.0);
1197 assert(consdata->valsreal[
i].inf >= 0.0);
1205 contribution *= contribution < 0.0 ? consdata->valsreal[
i].inf : consdata->valsreal[
i].sup;
1210 consdata->maxactivity += contribution;
1214 consdata->validmaxact =
TRUE;
1217 consdata->lastmaxactivity = consdata->maxactivity;
1233 consdata->glbminactivity = 0.0;
1237 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1239 if( consdata->valsreal[
i].sup < 0.0 )
1241 assert(consdata->valsreal[
i].inf <= 0.0);
1250 assert(consdata->valsreal[
i].inf >= 0.0);
1258 contribution *= contribution < 0.0 ? consdata->valsreal[
i].sup : consdata->valsreal[
i].inf;
1263 consdata->glbminactivity += contribution;
1267 consdata->validglbminact =
TRUE;
1270 consdata->lastglbminactivity = consdata->glbminactivity;
1286 consdata->glbmaxactivity = 0.0;
1290 for(
i = consdata->nvars - 1;
i >= 0; --
i )
1292 if( consdata->valsreal[
i].sup < 0.0 )
1294 assert(consdata->valsreal[
i].inf <= 0.0);
1303 assert(consdata->valsreal[
i].inf >= 0.0);
1311 contribution *= contribution < 0.0 ? consdata->valsreal[
i].inf : consdata->valsreal[
i].sup;
1316 consdata->glbmaxactivity += contribution;
1320 consdata->validglbmaxact =
TRUE;
1323 consdata->lastglbmaxactivity = consdata->glbmaxactivity;
1335 assert(!consdata->validminabsval);
1337 consdata->validminabsval =
TRUE;
1339 if( consdata->nvars > 0 )
1347 for(
i = 1;
i < consdata->nvars; ++
i )
1364 assert(!consdata->hasnonbinvalid);
1365 consdata->hasnonbinvar =
FALSE;
1366 consdata->hascontvar =
FALSE;
1368 for( v = consdata->nvars - 1; v >= 0; --v )
1374 consdata->hasnonbinvar =
TRUE;
1378 consdata->hascontvar =
TRUE;
1383 assert(consdata->hascontvar || v < 0);
1385 consdata->hasnonbinvalid =
TRUE;
1388#ifdef SCIP_MORE_DEBUG
1409 for( v = consdata->nvars - 1; v >= 0; --v )
1424 if( SCIPrationalisGT(delta,maxactdelta) )
1437#define checkMaxActivityDelta(scip, consdata)
1449 consdata->maxactdelta = 0.0;
1451 if( !consdata->hasnonbinvalid )
1455 if( !consdata->hasnonbinvar )
1457 for( v = consdata->nvars - 1; v >= 0; --v )
1463 if( delta > consdata->maxactdelta )
1465 consdata->maxactdelta = delta;
1466 consdata->maxactdeltavar = consdata->vars[v];
1473 for( v = consdata->nvars - 1; v >= 0; --v )
1485 consdata->maxactdeltavar = consdata->vars[v];
1492 if( delta > consdata->maxactdelta )
1494 consdata->maxactdelta = delta;
1495 consdata->maxactdeltavar = consdata->vars[v];
1515 int* activityposinf;
1516 int* activityneginf;
1517 int* activityposhuge;
1518 int* activityneghuge;
1534 assert(consdata->validactivities);
1539 assert(consdata->minactivityneginf >= 0);
1540 assert(consdata->minactivityposinf >= 0);
1541 assert(consdata->maxactivityneginf >= 0);
1542 assert(consdata->maxactivityposinf >= 0);
1543 assert(consdata->minactivityneghuge >= 0);
1544 assert(consdata->minactivityposhuge >= 0);
1545 assert(consdata->maxactivityneghuge >= 0);
1546 assert(consdata->maxactivityposhuge >= 0);
1551 assert(consdata->glbminactivityneginf >= 0);
1552 assert(consdata->glbminactivityposinf >= 0);
1553 assert(consdata->glbmaxactivityneginf >= 0);
1554 assert(consdata->glbmaxactivityposinf >= 0);
1555 assert(consdata->glbminactivityneghuge >= 0);
1556 assert(consdata->glbminactivityposhuge >= 0);
1557 assert(consdata->glbmaxactivityneghuge >= 0);
1558 assert(consdata->glbmaxactivityposhuge >= 0);
1573 if( valrange.
sup < 0.0 )
1577 activity = &(consdata->glbmaxactivity);
1578 lastactivity = &(consdata->lastglbmaxactivity);
1579 activityposinf = &(consdata->glbmaxactivityneginf);
1580 activityneginf = &(consdata->glbmaxactivityposinf);
1581 activityposhuge = &(consdata->glbmaxactivityposhuge);
1582 activityneghuge = &(consdata->glbmaxactivityneghuge);
1583 validact = consdata->validglbmaxact;
1585 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1586 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1592 activity = &(consdata->glbminactivity);
1593 lastactivity = &(consdata->lastglbminactivity);
1594 activityposinf = &(consdata->glbminactivityposinf);
1595 activityneginf = &(consdata->glbminactivityneginf);
1596 activityposhuge = &(consdata->glbminactivityposhuge);
1597 activityneghuge = &(consdata->glbminactivityneghuge);
1598 validact = consdata->validglbminact;
1600 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1601 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1606 if( valrange.
sup < 0.0 )
1610 activity = &(consdata->glbminactivity);
1611 lastactivity = &(consdata->lastglbminactivity);
1612 activityposinf = &(consdata->glbminactivityneginf);
1613 activityneginf = &(consdata->glbminactivityposinf);
1614 activityposhuge = &(consdata->glbminactivityposhuge);
1615 activityneghuge = &(consdata->glbminactivityneghuge);
1616 validact = consdata->validglbminact;
1618 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1619 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1625 activity = &(consdata->glbmaxactivity);
1626 lastactivity = &(consdata->lastglbmaxactivity);
1627 activityposinf = &(consdata->glbmaxactivityposinf);
1628 activityneginf = &(consdata->glbmaxactivityneginf);
1629 activityposhuge = &(consdata->glbmaxactivityposhuge);
1630 activityneghuge = &(consdata->glbmaxactivityneghuge);
1631 validact = consdata->validglbmaxact;
1633 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1634 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1649 if( valrange.
sup < 0.0 )
1653 activity = &(consdata->maxactivity);
1654 lastactivity = &(consdata->lastmaxactivity);
1655 activityposinf = &(consdata->maxactivityneginf);
1656 activityneginf = &(consdata->maxactivityposinf);
1657 activityposhuge = &(consdata->maxactivityposhuge);
1658 activityneghuge = &(consdata->maxactivityneghuge);
1659 validact = consdata->validmaxact;
1661 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1662 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1668 activity = &(consdata->minactivity);
1669 lastactivity = &(consdata->lastminactivity);
1670 activityposinf = &(consdata->minactivityposinf);
1671 activityneginf = &(consdata->minactivityneginf);
1672 activityposhuge = &(consdata->minactivityposhuge);
1673 activityneghuge = &(consdata->minactivityneghuge);
1674 validact = consdata->validminact;
1676 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1677 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1682 if( valrange.
sup < 0.0 )
1686 activity = &(consdata->minactivity);
1687 lastactivity = &(consdata->lastminactivity);
1688 activityposinf = &(consdata->minactivityneginf);
1689 activityneginf = &(consdata->minactivityposinf);
1690 activityposhuge = &(consdata->minactivityposhuge);
1691 activityneghuge = &(consdata->minactivityneghuge);
1692 validact = consdata->validminact;
1694 oldval = oldbound < 0.0 ? valrange.
sup : valrange.
inf;
1695 newval = newbound < 0.0 ? valrange.
sup : valrange.
inf;
1701 activity = &(consdata->maxactivity);
1702 lastactivity = &(consdata->lastmaxactivity);
1703 activityposinf = &(consdata->maxactivityposinf);
1704 activityneginf = &(consdata->maxactivityneginf);
1705 activityposhuge = &(consdata->maxactivityposhuge);
1706 activityneghuge = &(consdata->maxactivityneghuge);
1707 validact = consdata->validmaxact;
1709 oldval = oldbound < 0.0 ? valrange.
inf : valrange.
sup;
1710 newval = newbound < 0.0 ? valrange.
inf : valrange.
sup;
1716 newcontribution = newval * newbound;
1723 if( oldbound > 0.0 )
1725 assert((*activityposinf) >= 1);
1728 if( finitenewbound || newbound < 0.0 )
1731 (*activityposinf)--;
1734 if( !finitenewbound && newbound < 0.0 )
1735 (*activityneginf)++;
1736 else if( hugevalnewcont )
1739 if( newcontribution > 0.0 )
1740 (*activityposhuge)++;
1742 (*activityneghuge)++;
1746 delta = newcontribution;
1753 assert((*activityneginf) >= 1);
1756 if( finitenewbound || newbound > 0.0 )
1759 (*activityneginf)--;
1762 if( !finitenewbound && newbound > 0.0 )
1763 (*activityposinf)++;
1764 else if( hugevalnewcont )
1767 if( newcontribution > 0.0 )
1768 (*activityposhuge)++;
1770 (*activityneghuge)++;
1774 delta = newcontribution;
1781 if( -oldcontribution > 0.0 )
1783 assert((*activityposhuge) >= 1);
1788 (*activityposhuge)--;
1790 if( !finitenewbound )
1793 if( newbound > 0.0 )
1794 (*activityposinf)++;
1797 (*activityneginf)++;
1799 else if( hugevalnewcont )
1802 if( newcontribution > 0.0 )
1803 (*activityposhuge)++;
1806 (*activityneghuge)++;
1810 delta = newcontribution;
1815 assert(-oldcontribution < 0.0);
1816 assert((*activityneghuge) >= 1);
1821 (*activityneghuge)--;
1823 if( !finitenewbound )
1826 if( newbound > 0.0 )
1827 (*activityposinf)++;
1830 (*activityneginf)++;
1832 else if( hugevalnewcont )
1835 if( newcontribution > 0.0 )
1836 (*activityposhuge)++;
1839 (*activityneghuge)++;
1843 delta = newcontribution;
1849 if( !finitenewbound )
1854 if( newbound > 0.0 )
1856 (*activityposinf)++;
1857 delta = oldcontribution;
1866 (*activityneginf)++;
1867 delta = oldcontribution;
1871 else if( hugevalnewcont )
1873 if( newcontribution > 0.0 )
1875 (*activityposhuge)++;
1876 delta = oldcontribution;
1880 (*activityneghuge)++;
1881 delta = oldcontribution;
1886 delta = newcontribution + oldcontribution;
1890 if( validact && (delta != 0.0) )
1895 (*activity) = (*activity) + delta;
1900 (*lastactivity) = (*activity);
1921 if( consdata->validactivities )
1945 if( consdata->validactivities )
1967 if( consdata->validactivities )
1989 if( consdata->validactivities )
2013 if( consdata->validmaxabsval )
2020 consdata->maxabsval =
MAX(consdata->maxabsval, absval);
2023 if( consdata->validminabsval )
2030 consdata->minabsval =
MIN(consdata->minabsval, absval);
2034 if( consdata->validmaxabsval )
2038 consdata->validmaxabsval =
FALSE;
2044 if( consdata->validminabsval )
2048 consdata->validminabsval =
FALSE;
2054 if( consdata->validactivities )
2083 if( consdata->validmaxabsval )
2091 consdata->validmaxabsval =
FALSE;
2097 if( consdata->validminabsval )
2105 consdata->validminabsval =
FALSE;
2111 if( consdata->validmaxabsval )
2115 consdata->validmaxabsval =
FALSE;
2121 if( consdata->validminabsval )
2125 consdata->validminabsval =
FALSE;
2131 if( consdata->validactivities )
2155 if( !consdata->validminabsval )
2157 assert(consdata->validminabsval);
2159 return consdata->minabsvalexact;
2180 if( consdata->validmaxabsval )
2186 if( absval >= consdata->maxabsval )
2188 consdata->maxabsval = absval;
2197 consdata->validmaxabsval =
FALSE;
2204 if( consdata->validminabsval )
2210 if( absval <= consdata->minabsval )
2212 consdata->minabsval = absval;
2221 consdata->validminabsval =
FALSE;
2227 if( consdata->validmaxabsval )
2238 consdata->validmaxabsval =
FALSE;
2244 if( consdata->validminabsval )
2255 consdata->validminabsval =
FALSE;
2273 if( delta > consdata->maxactdelta )
2275 consdata->maxactdelta = delta;
2276 consdata->maxactdeltavar =
var;
2281 if( consdata->maxactdeltavar ==
var )
2317 for(
i = 0;
i < consdata->nvars;
i++ )
2347 assert(!consdata->validactivities);
2353 consdata->validmaxabsval =
TRUE;
2354 consdata->validminabsval =
TRUE;
2355 consdata->validactivities =
TRUE;
2356 consdata->validminact =
TRUE;
2357 consdata->validmaxact =
TRUE;
2358 consdata->validglbminact =
TRUE;
2359 consdata->validglbmaxact =
TRUE;
2360 consdata->maxabsval = 0.0;
2361 consdata->minabsval = (consdata->nvars == 0 ? 0.0 :
SCIPintervalAbsMax(consdata->valsreal[0]));
2362 consdata->minactivity = 0.0;
2363 consdata->maxactivity = 0.0;
2364 consdata->lastminactivity = 0.0;
2365 consdata->lastmaxactivity = 0.0;
2366 consdata->minactivityneginf = 0;
2367 consdata->minactivityposinf = 0;
2368 consdata->maxactivityneginf = 0;
2369 consdata->maxactivityposinf = 0;
2370 consdata->minactivityneghuge = 0;
2371 consdata->minactivityposhuge = 0;
2372 consdata->maxactivityneghuge = 0;
2373 consdata->maxactivityposhuge = 0;
2374 consdata->glbminactivity = 0.0;
2375 consdata->glbmaxactivity = 0.0;
2376 consdata->lastglbminactivity = 0.0;
2377 consdata->lastglbmaxactivity = 0.0;
2378 consdata->glbminactivityneginf = 0;
2379 consdata->glbminactivityposinf = 0;
2380 consdata->glbmaxactivityneginf = 0;
2381 consdata->glbmaxactivityposinf = 0;
2382 consdata->glbminactivityneghuge = 0;
2383 consdata->glbminactivityposhuge = 0;
2384 consdata->glbmaxactivityneghuge = 0;
2385 consdata->glbmaxactivityposhuge = 0;
2387 for(
i = 0;
i < consdata->nvars; ++
i )
2389 consdata->lastminactivity = consdata->minactivity;
2390 consdata->lastmaxactivity = consdata->maxactivity;
2391 consdata->lastglbminactivity = consdata->glbminactivity;
2392 consdata->lastglbmaxactivity = consdata->glbmaxactivity;
2422 if( consdata->rowlhs ==
NULL )
2424 for( v = 0; v < consdata->nvars; ++v )
2434 sum += consdata->valsreal[v].inf * solval;
2448 sum =
MAX(sum, -inf);
2449 sum =
MIN(sum, +inf);
2495 *issettoinfinity =
TRUE;
2499 else if( neginf > 0 )
2502 *issettoinfinity =
TRUE;
2506 else if( neghuge > 0 )
2509 *issettoinfinity =
TRUE;
2513 else if( !goodrelax && poshuge > 0 )
2516 *issettoinfinity =
TRUE;
2526 if( !consdata->validglbminact )
2528 assert(consdata->validglbminact);
2530 tmpactivity = consdata->glbminactivity;
2534 if( !consdata->validminact )
2536 assert(consdata->validminact);
2538 tmpactivity = consdata->minactivity;
2548 *issettoinfinity =
FALSE;
2554 *minactivity = tmpactivity - delta;
2555 *issettoinfinity =
FALSE;
2596 *issettoinfinity =
TRUE;
2600 else if( posinf > 0 )
2603 *issettoinfinity =
TRUE;
2607 else if( poshuge > 0 )
2610 *issettoinfinity =
TRUE;
2614 else if( !goodrelax && neghuge > 0 )
2617 *issettoinfinity =
TRUE;
2627 if( !consdata->validglbmaxact )
2629 assert(consdata->validglbmaxact);
2631 tmpactivity = consdata->glbmaxactivity;
2635 if( !consdata->validmaxact )
2637 assert(consdata->validmaxact);
2639 tmpactivity = consdata->maxactivity;
2649 *issettoinfinity =
FALSE;
2655 *maxactivity = tmpactivity - delta;
2656 *issettoinfinity =
FALSE;
2689 if( !consdata->validactivities )
2692 assert(consdata->validminact);
2693 assert(consdata->validmaxact);
2697 assert(consdata->minactivityneginf >= 0);
2698 assert(consdata->minactivityposinf >= 0);
2699 assert(consdata->maxactivityneginf >= 0);
2700 assert(consdata->maxactivityposinf >= 0);
2702 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2703 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2704 minactivity, minisrelax, isminsettoinfinity);
2706 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2707 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2708 maxactivity, maxisrelax, ismaxsettoinfinity);
2749 if( !consdata->validactivities )
2752 assert(consdata->validminact);
2753 assert(consdata->validmaxact);
2757 assert(consdata->minactivityneginf >= 0);
2758 assert(consdata->minactivityposinf >= 0);
2759 assert(consdata->maxactivityneginf >= 0);
2760 assert(consdata->maxactivityposinf >= 0);
2761 assert(consdata->minactivityneghuge >= 0);
2762 assert(consdata->minactivityposhuge >= 0);
2763 assert(consdata->maxactivityneghuge >= 0);
2764 assert(consdata->maxactivityposhuge >= 0);
2788 assert(consdata->minactivityposinf >= 1);
2790 getMinActivity(
scip, consdata, consdata->minactivityposinf - 1, consdata->minactivityneginf,
2791 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2792 minresactivity, minisrelax, isminsettoinfinity);
2796 assert(consdata->minactivityneginf >= 1);
2798 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf - 1,
2799 consdata->minactivityposhuge, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2800 minresactivity, minisrelax, isminsettoinfinity);
2804 assert(consdata->minactivityposhuge >= 1);
2806 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2807 consdata->minactivityposhuge - 1, consdata->minactivityneghuge, 0.0,
FALSE, goodrelax,
2808 minresactivity, minisrelax, isminsettoinfinity);
2812 assert(consdata->minactivityneghuge >= 1);
2814 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2815 consdata->minactivityposhuge, consdata->minactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2816 minresactivity, minisrelax, isminsettoinfinity);
2821 delta = absval * minactbound;
2824 getMinActivity(
scip, consdata, consdata->minactivityposinf, consdata->minactivityneginf,
2825 consdata->minactivityposhuge, consdata->minactivityneghuge, delta,
FALSE, goodrelax,
2826 minresactivity, minisrelax, isminsettoinfinity);
2834 assert(consdata->maxactivityneginf >= 1);
2836 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf - 1,
2837 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2838 maxresactivity, maxisrelax, ismaxsettoinfinity);
2842 assert(consdata->maxactivityposinf >= 1);
2844 getMaxActivity(
scip, consdata, consdata->maxactivityposinf - 1, consdata->maxactivityneginf,
2845 consdata->maxactivityposhuge, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2846 maxresactivity, maxisrelax, ismaxsettoinfinity);
2850 assert(consdata->maxactivityposhuge >= 1);
2852 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2853 consdata->maxactivityposhuge - 1, consdata->maxactivityneghuge, 0.0,
FALSE, goodrelax,
2854 maxresactivity, maxisrelax, ismaxsettoinfinity);
2858 assert(consdata->maxactivityneghuge >= 1);
2860 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2861 consdata->maxactivityposhuge, consdata->maxactivityneghuge - 1, 0.0,
FALSE, goodrelax,
2862 maxresactivity, maxisrelax, ismaxsettoinfinity);
2867 delta = absval * maxactbound;
2870 getMaxActivity(
scip, consdata, consdata->maxactivityposinf, consdata->maxactivityneginf,
2871 consdata->maxactivityposhuge, consdata->maxactivityneghuge, delta,
FALSE, goodrelax,
2872 maxresactivity, maxisrelax, ismaxsettoinfinity);
2906 for( v = 0; v < consdata->nvars; ++v )
2925 assert(nneginf >= 0 && nposinf >= 0);
3001 for(
i = 0;
i < consdata->nvars; ++
i )
3038 return SCIPvarCompare(consdata->vars[ind1], consdata->vars[ind2]);
3053 var1 = consdata->vars[ind1];
3054 var2 = consdata->vars[ind2];
3077 if( vartype1 < vartype2 )
3081 else if( vartype1 > vartype2 )
3150 for( v = 0; v <
nvars; ++v )
3154 varv = consdata->vars[v];
3155 valv = consdata->vals[v];
3156 valrealv = consdata->valsreal[v];
3157 if( consdata->eventdata !=
NULL )
3158 eventdatav = consdata->eventdata[v];
3164 consdata->vars[
i] = consdata->vars[perm[
i]];
3165 consdata->vals[
i] = consdata->vals[perm[
i]];
3166 consdata->valsreal[
i] = consdata->valsreal[perm[
i]];
3167 if( consdata->eventdata !=
NULL )
3169 consdata->eventdata[
i] = consdata->eventdata[perm[
i]];
3170 consdata->eventdata[
i]->varpos =
i;
3176 while( perm[
i] != v );
3177 consdata->vars[
i] = varv;
3178 consdata->vals[
i] = valv;
3179 consdata->valsreal[
i] = valrealv;
3180 if( consdata->eventdata !=
NULL )
3182 consdata->eventdata[
i] = eventdatav;
3183 consdata->eventdata[
i]->varpos =
i;
3190 for( v = 0; v <
nvars; ++v )
3193 assert(consdata->eventdata ==
NULL || consdata->eventdata[v]->varpos == v);
3220 if( consdata->nvars <= 1 )
3222 consdata->indexsorted =
TRUE;
3223 consdata->coefsorted =
TRUE;
3224 consdata->nbinvars = (consdata->nvars == 1 ? (int)
SCIPvarIsBinary(consdata->vars[0]) : 0);
3237 SCIPsort(perm, consdataCompVar, (
void*)consdata, consdata->nvars);
3239 SCIPsort(perm, consdataCompVarProp, (
void*)consdata, consdata->nvars);
3248 consdata->indexsorted =
FALSE;
3249 consdata->coefsorted =
TRUE;
3252 consdata->nbinvars = 0;
3253 for( v = 0; v < consdata->nvars; ++v )
3256 ++consdata->nbinvars;
3263 consdata->indexsorted =
TRUE;
3264 consdata->coefsorted =
FALSE;
3294 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3322 vars = consdata->vars;
3323 vals = consdata->vals;
3325 for( v = 0; v < consdata->nvars; ++v )
3347 vars = consdata->vars;
3348 vals = consdata->vals;
3350 for( v = 0; v < consdata->nvars; ++v )
3370 consdata->boundstightened = 0;
3371 consdata->presolved =
FALSE;
3372 consdata->cliquesadded =
FALSE;
3373 consdata->implsadded =
FALSE;
3385 consdata->changed =
TRUE;
3386 consdata->normalized =
FALSE;
3387 consdata->rangedrowpropagated = 0;
3390 if( consdata->rowexact !=
NULL )
3416 assert(consdata->nvars == 0 || (consdata->vars !=
NULL && consdata->vals !=
NULL));
3446 vars = consdata->vars;
3447 vals = consdata->vals;
3449 for( v = 0; v < consdata->nvars; ++v )
3471 vars = consdata->vars;
3472 vals = consdata->vals;
3474 for( v = 0; v < consdata->nvars; ++v )
3494 consdata->boundstightened = 0;
3495 consdata->presolved =
FALSE;
3496 consdata->cliquesadded =
FALSE;
3497 consdata->implsadded =
FALSE;
3509 consdata->changed =
TRUE;
3510 consdata->normalized =
FALSE;
3511 consdata->rangedrowpropagated = 0;
3514 if( consdata->rowexact !=
NULL )
3557 consdata->vars[consdata->nvars] =
var;
3568 if( consdata->eventdata !=
NULL )
3580 consdata->eventdata[consdata->nvars-1] =
NULL;
3599 consdata->boundstightened = 0;
3600 consdata->presolved =
FALSE;
3603 consdata->changed =
TRUE;
3604 consdata->normalized =
FALSE;
3605 consdata->cliquesadded =
FALSE;
3606 consdata->implsadded =
FALSE;
3607 consdata->rangedrowpropagated = 0;
3609 if( consdata->nvars == 1 )
3611 consdata->indexsorted =
TRUE;
3612 consdata->coefsorted =
TRUE;
3613 consdata->merged =
TRUE;
3617 consdata->merged =
FALSE;
3621 consdata->indexsorted = consdata->indexsorted && (consdataCompVar((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3622 consdata->coefsorted =
FALSE;
3626 consdata->indexsorted =
FALSE;
3627 consdata->coefsorted = consdata->coefsorted && (consdataCompVarProp((
void*)consdata, consdata->nvars-2, consdata->nvars-1) <= 0);
3632 if( consdata->hasnonbinvalid && !consdata->hascontvar )
3638 consdata->hasnonbinvar =
TRUE;
3641 consdata->hascontvar =
TRUE;
3646 if( consdata->rowexact !=
NULL )
3673 var = consdata->vars[pos];
3674 val = consdata->vals[pos];
3693 if( consdata->eventdata !=
NULL )
3701 if( pos != consdata->nvars - 1 )
3703 consdata->vars[pos] = consdata->vars[consdata->nvars-1];
3705 consdata->valsreal[pos] = consdata->valsreal[consdata->nvars -1];
3707 if( consdata->eventdata !=
NULL )
3709 consdata->eventdata[pos] = consdata->eventdata[consdata->nvars-1];
3711 consdata->eventdata[pos]->varpos = pos;
3714 consdata->indexsorted = consdata->indexsorted && (pos + 2 >= consdata->nvars);
3715 consdata->coefsorted = consdata->coefsorted && (pos + 2 >= consdata->nvars);
3725 consdata->boundstightened = 0;
3726 consdata->presolved =
FALSE;
3727 consdata->changed =
TRUE;
3728 consdata->normalized =
FALSE;
3729 consdata->cliquesadded =
FALSE;
3730 consdata->implsadded =
FALSE;
3731 consdata->rangedrowpropagated = 0;
3736 consdata->hasnonbinvalid =
FALSE;
3769 var = consdata->vars[pos];
3770 val = consdata->vals[pos];
3796 consdata->valsreal[pos] = newvalfp;
3797 if( consdata->coefsorted )
3800 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos - 1, pos) <= 0);
3801 if( consdata->coefsorted && pos < consdata->
nvars - 1 )
3802 consdata->coefsorted = (consdataCompVarProp((
void*)consdata, pos, pos + 1) <= 0);
3810 consdata->boundstightened = 0;
3811 consdata->presolved =
FALSE;
3812 consdata->changed =
TRUE;
3813 consdata->normalized =
FALSE;
3814 consdata->cliquesadded =
FALSE;
3815 consdata->implsadded =
FALSE;
3816 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 )
5234 SCIPdebugMsg(
scip,
"Enforcement method of linear constraints for %s solution\n",
sol ==
NULL ?
"LP" :
"relaxation");
5243 for(
c = 0;
c < nusefulconss; ++
c )
5340 for(
c = 0;
c < nconss; ++
c )
5366 for(
c = nconss - 1;
c >= 0; --
c )
5373 if( consdata->eventdata !=
NULL )
5394 for(
c = 0;
c < nconss; ++
c )
5420 for(
c = 0;
c < nconss; ++
c )
5427 if( consdata->rowlhs !=
NULL )
5432 if( consdata->rowrhs !=
NULL )
5434 assert(!consdata->onerowrelax);
5475 if( consdata->eventdata !=
NULL )
5497 if( (*consdata)->eventdata !=
NULL )
5533 assert(sourcedata->rowlhs ==
NULL && sourcedata->rowexact ==
NULL);
5539 if( sourcedata->nvars > 0 )
5563 *infeasible =
FALSE;
5565 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
5605 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
5606 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
5610 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
5617 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
5626 else if( ncuts > 0 )
5663 if( (
depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
5664 || (
depth > 0 && conshdlrdata->maxrounds >= 0 && nrounds >= conshdlrdata->maxrounds) )
5668 maxsepacuts = (
depth == 0 ? conshdlrdata->maxsepacutsroot : conshdlrdata->maxsepacuts);
5675 for(
c = 0;
c < nusefulconss && ncuts < maxsepacuts && !
cutoff; ++
c )
5684 else if( ncuts > 0 )
5750 SCIPdebugMsg(
scip,
"-> pseudo solution is objective infeasible, return.\n");
5758 for(
c = 0;
c < nconss && !violated; ++
c )
5876 tightenbounds =
TRUE;
5881 int tightenboundsfreq;
5885 tightenboundsfreq = propfreq * conshdlrdata->tightenboundsfreq;
5886 tightenbounds = (conshdlrdata->tightenboundsfreq >= 0)
5887 && ((tightenboundsfreq == 0 &&
depth == 0) || (tightenboundsfreq >= 1 && (
depth % tightenboundsfreq == 0)));
5894 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
5898 conshdlrdata->sortvars, &
cutoff, &nchgbds) );
5904 else if( nchgbds > 0 )
5932 for(
i = 0;
i < consdata->nvars; ++
i )
5998 const char* consname;
6017 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
6029 char** firstoperator,
6030 char** secondoperator,
6040 *firstoperator =
NULL;
6041 *secondoperator =
NULL;
6047 while( *curr && *success )
6060 if( curr[1] ==
'=' )
6069 if( strncmp(curr,
"[free]", 6) == 0 )
6084 if( *firstoperator ==
NULL )
6086 *firstoperator = curr;
6090 if( *secondoperator !=
NULL )
6095 else if( strncmp(*firstoperator,
"<=", 2) != 0 )
6097 SCIPerrorMessage(
"Two operators in line that is not a ranged row: %s", str);
6100 else if( strncmp(curr,
"<=", 2) != 0 )
6102 SCIPerrorMessage(
"Bad second operator, expected ranged row specification: %s", str);
6106 *secondoperator = curr;
6116 if( *firstoperator ==
NULL )
6134 int coefssize = 100;
6142 char* lhsstrptr =
NULL;
6143 char* rhsstrptr =
NULL;
6144 char* varstrptr = (
char*)str;
6174 if( ! operatorsuccess )
6185 assert(firstop[1] ==
'=');
6187 if( secondop !=
NULL )
6189 assert(secondop[0] ==
'<' && secondop[1] ==
'=');
6190 lhsstrptr = (
char *)str;
6191 varstrptr = firstop + 2;
6192 rhsstrptr = secondop + 2;
6198 varstrptr = (
char *)str;
6199 rhsstrptr = firstop + 2;
6203 assert(firstop[1] ==
'=');
6206 lhsstrptr = firstop + 2;
6209 assert(firstop[1] ==
'=');
6212 rhsstrptr = firstop + 2;
6213 lhsstrptr = firstop + 2;
6216 assert(strncmp(firstop,
"[free]", 6) == 0);
6222 SCIPerrorMessage(
"Parsing has wrong operator character '%c', should be one of <=>[", *firstop);
6228 if( lhsstrptr !=
NULL )
6232 SCIPerrorMessage(
"error parsing left hand side number from <%s>\n", lhsstrptr);
6238 if( rhsstrptr == lhsstrptr )
6243 if( rhsstrptr !=
NULL && rhsstrptr != lhsstrptr )
6247 SCIPerrorMessage(
"error parsing right hand side number from <%s>\n", lhsstrptr);
6260 SCIP_CALL_TERMINATE( retcode,
SCIPparseVarsLinearsumExact(
scip, varstrptr,
vars, coefs, &
nvars, coefssize, &requsize, &endptr, success), TERMINATE );
6262 if( *success && requsize > coefssize )
6268 coefssize = requsize;
6270 SCIP_CALL_TERMINATE( retcode,
SCIPparseVarsLinearsumExact(
scip, varstrptr,
vars, coefs, &
nvars, coefssize, &requsize, &endptr, success), TERMINATE );
6271 assert(!*success || requsize <= coefssize);
6277 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode),
6306 if( varssize < consdata->
nvars )
6329 (*nvars) = consdata->nvars;
6356 cons = eventdata->cons;
6359 if( consdata ==
NULL )
6367 updateActivities = ((consdata->rowexact !=
NULL) == eventdata->rowvar) && consdata->validactivities;
6368 assert(!consdata->validactivities || (consdata->validminact && consdata->validmaxact && consdata->validglbminact && consdata->validglbmaxact));
6376 varpos = eventdata->varpos;
6381 valrange = consdata->valsreal[varpos];
6400 consdata->presolved =
FALSE;
6404 consdata->rangedrowpropagated = 0;
6412 if( consdata->maxactdeltavar ==
var )
6415 consdata->maxactdeltavar =
NULL;
6419 if( consdata->boundstightened > 0)
6425 consdata->boundstightened = 0;
6429 consdata->boundstightened = 0;
6453 if( delta > consdata->maxactdelta )
6455 consdata->maxactdelta = delta;
6456 consdata->maxactdeltavar =
var;
6463 consdata->presolved =
FALSE;
6464 consdata->removedfixings =
FALSE;
6465 consdata->rangedrowpropagated = 0;
6468 if( consdata->maxactdeltavar ==
var )
6471 consdata->maxactdeltavar =
NULL;
6479 consdata->presolved =
FALSE;
6488 varpos = eventdata->varpos;
6496 valrange = consdata->valsreal[varpos];
6498 consdata->rangedrowpropagated = 0;
6514 consdata->indexsorted =
FALSE;
6516 consdata->coefsorted =
FALSE;
6531 consdata->varsdeleted =
TRUE;
6558 eventExecExactLinear,
NULL) );
6566 consEnfolpExactLinear, consEnfopsExactLinear, consCheckExactLinear, consLockExactLinear,
6599 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
6603 "maximal number of separation rounds per node (-1: unlimited)",
6607 "maximal number of separation rounds per node in the root node (-1: unlimited)",
6611 "maximal number of cuts separated per separation round",
6615 "maximal number of cuts separated per separation round in the root node",
6618 "constraints/" CONSHDLR_NAME "/sortvars",
"apply binaries sorting in decr. order of coeff abs value?",
6622 "should bounds on continuous variables be tightened by propagation?",
6626 "should denominators of rational bounds on continuous variables be controlled?",
6630 "maximal denominator for rational bounds on continuous variables after propagation",
6683 if( conshdlr ==
NULL )
6694 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
6722 if( requiredsize > nconsvars )
6728 assert(requiredsize <= nconsvars);
6737 SCIPerrorMessage(
"while creating constraint <%s> inactive variables lead to an infinite constant\n", name);
6764 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
6765 local, modifiable, dynamic, removable, stickingatnode) );
6851 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
6859 if( sourcecoefs !=
NULL )
6871 for( v = 0; v <
nvars; ++v )
6884 if( requiredsize >
nvars )
6895 for( v = 0; v <
nvars; ++v )
6905 for( v = 0; v <
nvars && success; ++v )
6924 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
6951 SCIPerrorMessage(
"coefficient of variable <%s> in constraint <%s> is infinite,"
6972 SCIPerrorMessage(
"adding coefficients after presolving not supported yet in exact solving mode \n");
6986 if( requiredsize > nconsvars )
6992 assert(requiredsize <= nconsvars);
7007 SCIPerrorMessage(
"adding variable <%s> to constraint <%s> leads to infinite constant and cannot be handled safely\n",
7023 for( v = nconsvars - 1; v >= 0; --v )
7071 SCIPerrorMessage(
"method may only be called during problem creation stage for original constraints and variables\n");
7078 vars = consdata->vars;
7152 return consdata->lhs;
7171 return consdata->rhs;
7226 return consdata->nvars;
7245 return consdata->vars;
7264 return consdata->valsreal;
7283 return consdata->vals;
7307 if( consdata->rowexact !=
NULL )
7335 if( consdata->rowexact !=
NULL )
7364 if( consdata->rowlhs !=
NULL )
7391 if( consdata->rowlhs !=
NULL )
7415 return consdata->rowlhs;
7436 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_STRINGEQ(name, reference, retcode)
#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