55#define AGERESETAVG_INIT 1000.0
56#define AGERESETAVG_MIN 100.0
57#define AGERESETAVG_DECAY 0.0005
58#define AGERESETAVG_AGELIMIT 2.0
60#define AGERESETAVG_OBSOLETEAGE 1.8
91 assert(num <= conshdlr->consssize);
115 assert(num <= conshdlr->initconsssize);
139 assert(num <= conshdlr->sepaconsssize);
163 assert(num <= conshdlr->enfoconsssize);
187 assert(num <= conshdlr->checkconsssize);
211 assert(num <= conshdlr->propconsssize);
235 assert(num <= conshdlr->updateconsssize);
247#define checkConssArrays(conshdlr)
249#ifdef CHECKCONSARRAYS
250#undef checkConssArrays
365 && ((
set->cons_agelimit > 0 && cons->
age >
set->cons_agelimit)
380 && ((
set->cons_obsoleteage > 0 && cons->
age >
set->cons_obsoleteage)
866 if( delpos < conshdlr->ninitconsskept )
874 if( delpos < conshdlr->ninitconss-1 )
951 assert(0 <= delpos && delpos < conshdlr->nusefulsepaconss);
953 if( delpos < conshdlr->lastnusefulsepaconss )
964 if( delpos < conshdlr->nsepaconss-1 )
1052 assert(0 <= delpos && delpos < conshdlr->nusefulenfoconss);
1054 if( delpos < conshdlr->lastnusefulenfoconss )
1073 if( delpos < conshdlr->nenfoconss-1 )
1118 assert(0 <= insertpos && insertpos <= conshdlr->ncheckconss);
1149 assert(0 <= delpos && delpos < conshdlr->nusefulcheckconss);
1156 if( delpos < conshdlr->ncheckconss-1 )
1256 assert(0 <= delpos && delpos < conshdlr->nusefulpropconss);
1258 if( delpos < conshdlr->lastnusefulpropconss )
1270 if( delpos < conshdlr->npropconss-1 )
1327 SCIPdebugMessage(
"disable separation of constraint <%s> in constraint handler <%s>\n", cons->
name, conshdlr->
name);
1387 SCIPdebugMessage(
"disable propagation of constraint <%s> in constraint handler <%s>\n", cons->
name, conshdlr->
name);
1454 if( conshdlr->consenable !=
NULL )
1456 SCIP_CALL( conshdlr->consenable(
set->scip, conshdlr, cons) );
1493 if( conshdlr->consdisable !=
NULL )
1495 SCIP_CALL( conshdlr->consdisable(
set->scip, conshdlr, cons) );
1563 SCIPsetDebugMsg(
set,
"activate constraint <%s> in constraint handler <%s> (depth %d, focus=%u)\n",
1590 if( conshdlr->consactive !=
NULL )
1592 SCIP_CALL( conshdlr->consactive(
set->scip, conshdlr, cons) );
1640 if( conshdlr->consdeactive !=
NULL )
1642 SCIP_CALL( conshdlr->consdeactive(
set->scip, conshdlr, cons) );
1706 SCIPsetDebugMsg(
set,
"processing %d constraints that have to be updated in constraint handler <%s>\n",
1722 SCIPsetDebugMsg(
set,
" -> constraint <%s>: insert=%u, activate=%u, deactivate=%u, enable=%u, disable=%u, sepaenable=%u, sepadisable=%u, propenable=%u, propdisable=%u, obsolete=%u, free=%u (consdata=%p)\n",
1889 SCIPdebugMessage(
"constraint updates of constraint handler <%s> will be delayed (count:%d)\n",
1909 SCIPsetDebugMsg(
set,
"constraint updates of constraint handler <%s> will be processed immediately (count:%d)\n",
1938 SCIPsetDebugMsg(
set,
"constraint <%s> of age %g has to be updated in constraint handler <%s> (consdata=%p)\n",
1976 return ((
SCIP_CONS*)elem2)->conshdlr->checkpriority - ((
SCIP_CONS*)elem1)->conshdlr->checkpriority;
1991 if( conshdlr->conshdlrcopy !=
NULL )
2067 assert(conssepalp !=
NULL || conssepasol !=
NULL || sepafreq == -1);
2070 assert(!needscons || ((conshdlrcopy ==
NULL) == (conscopy ==
NULL)));
2077 SCIPmessagePrintError(
"ERROR: 'PRESOLDELAY'-flag no longer available since SCIP 3.2, use an appropriate "
2078 "'SCIP_PRESOLTIMING' for <%s> constraint handler instead.\n", name);
2091 (*conshdlr)->sepapriority = sepapriority;
2092 (*conshdlr)->enfopriority = enfopriority;
2093 (*conshdlr)->checkpriority = checkpriority;
2094 (*conshdlr)->sepafreq = sepafreq;
2095 (*conshdlr)->propfreq = propfreq;
2096 (*conshdlr)->eagerfreq = eagerfreq;
2097 (*conshdlr)->maxprerounds = maxprerounds;
2098 (*conshdlr)->conshdlrcopy = conshdlrcopy;
2099 (*conshdlr)->consfree = consfree;
2100 (*conshdlr)->consinit = consinit;
2101 (*conshdlr)->consexit = consexit;
2102 (*conshdlr)->consinitpre = consinitpre;
2103 (*conshdlr)->consexitpre = consexitpre;
2104 (*conshdlr)->consinitsol = consinitsol;
2105 (*conshdlr)->consexitsol = consexitsol;
2106 (*conshdlr)->consdelete = consdelete;
2107 (*conshdlr)->constrans = constrans;
2108 (*conshdlr)->consinitlp = consinitlp;
2109 (*conshdlr)->conssepalp = conssepalp;
2110 (*conshdlr)->conssepasol = conssepasol;
2111 (*conshdlr)->consenfolp = consenfolp;
2112 (*conshdlr)->consenforelax = consenforelax;
2113 (*conshdlr)->consenfops = consenfops;
2114 (*conshdlr)->conscheck = conscheck;
2115 (*conshdlr)->consprop = consprop;
2116 (*conshdlr)->conspresol = conspresol;
2117 (*conshdlr)->consresprop = consresprop;
2118 (*conshdlr)->conslock = conslock;
2119 (*conshdlr)->consactive = consactive;
2120 (*conshdlr)->consdeactive = consdeactive;
2121 (*conshdlr)->consenable = consenable;
2122 (*conshdlr)->consdisable = consdisable;
2123 (*conshdlr)->consprint = consprint;
2124 (*conshdlr)->consdelvars = consdelvars;
2125 (*conshdlr)->conscopy = conscopy;
2126 (*conshdlr)->consparse = consparse;
2127 (*conshdlr)->consgetvars = consgetvars;
2128 (*conshdlr)->consgetnvars = consgetnvars;
2129 (*conshdlr)->conshdlrdata = conshdlrdata;
2130 (*conshdlr)->consgetdivebdchgs = consgetdivebdchgs;
2131 (*conshdlr)->consgetpermsymgraph = consgetpermsymgraph;
2132 (*conshdlr)->consgetsignedpermsymgraph = consgetsignedpermsymgraph;
2133 (*conshdlr)->conss =
NULL;
2134 (*conshdlr)->consssize = 0;
2135 (*conshdlr)->nconss = 0;
2136 (*conshdlr)->nactiveconss = 0;
2137 (*conshdlr)->maxnactiveconss = 0;
2138 (*conshdlr)->startnactiveconss = 0;
2139 (*conshdlr)->initconss =
NULL;
2140 (*conshdlr)->initconsssize = 0;
2141 (*conshdlr)->ninitconss = 0;
2142 (*conshdlr)->ninitconsskept = 0;
2143 (*conshdlr)->sepaconss =
NULL;
2144 (*conshdlr)->sepaconsssize = 0;
2145 (*conshdlr)->nsepaconss = 0;
2146 (*conshdlr)->nusefulsepaconss = 0;
2147 (*conshdlr)->enfoconss =
NULL;
2148 (*conshdlr)->enfoconsssize = 0;
2149 (*conshdlr)->nenfoconss = 0;
2150 (*conshdlr)->nusefulenfoconss = 0;
2151 (*conshdlr)->checkconss =
NULL;
2152 (*conshdlr)->checkconsssize = 0;
2153 (*conshdlr)->ncheckconss = 0;
2154 (*conshdlr)->nusefulcheckconss = 0;
2155 (*conshdlr)->propconss =
NULL;
2156 (*conshdlr)->propconsssize = 0;
2157 (*conshdlr)->npropconss = 0;
2158 (*conshdlr)->nusefulpropconss = 0;
2159 (*conshdlr)->nmarkedpropconss = 0;
2160 (*conshdlr)->updateconss =
NULL;
2161 (*conshdlr)->updateconsssize = 0;
2162 (*conshdlr)->nupdateconss = 0;
2163 (*conshdlr)->nenabledconss = 0;
2164 (*conshdlr)->lastnusefulpropconss = 0;
2165 (*conshdlr)->lastnusefulsepaconss = 0;
2166 (*conshdlr)->lastnusefulenfoconss = 0;
2168 (*conshdlr)->storedpropconss =
NULL;
2169 (*conshdlr)->storedpropconsssize = 0;
2170 (*conshdlr)->storednmarkedpropconss = 0;
2171 (*conshdlr)->storedpropdomchgcount = 0;
2184 (*conshdlr)->nsepacalls = 0;
2185 (*conshdlr)->nenfolpcalls = 0;
2186 (*conshdlr)->nenfopscalls = 0;
2187 (*conshdlr)->nenforelaxcalls = 0;
2188 (*conshdlr)->npropcalls = 0;
2189 (*conshdlr)->ncheckcalls = 0;
2190 (*conshdlr)->nrespropcalls = 0;
2191 (*conshdlr)->ncutoffs = 0;
2192 (*conshdlr)->ncutsfound = 0;
2193 (*conshdlr)->ncutsapplied = 0;
2194 (*conshdlr)->nconssfound = 0;
2195 (*conshdlr)->ndomredsfound = 0;
2196 (*conshdlr)->nchildren = 0;
2197 (*conshdlr)->lastpropdomchgcount = -1;
2198 (*conshdlr)->lastsepalpcount = -1;
2199 (*conshdlr)->lastenfolplpcount = -1;
2200 (*conshdlr)->lastenfolpdomchgcount = -1;
2201 (*conshdlr)->lastenfopsdomchgcount = -1;
2202 (*conshdlr)->lastenforelaxdomchgcount = -1;
2203 (*conshdlr)->lastenforelaxrelaxcount = -1;
2204 (*conshdlr)->lastenfolpnode = -1;
2205 (*conshdlr)->lastenfopsnode = -1;
2209 (*conshdlr)->lastnfixedvars = 0;
2210 (*conshdlr)->lastnaggrvars = 0;
2211 (*conshdlr)->lastnchgvartypes = 0;
2212 (*conshdlr)->lastnchgbds = 0;
2213 (*conshdlr)->lastnaddholes = 0;
2214 (*conshdlr)->lastndelconss = 0;
2215 (*conshdlr)->lastnaddconss = 0;
2216 (*conshdlr)->lastnupgdconss = 0;
2217 (*conshdlr)->lastnchgcoefs = 0;
2218 (*conshdlr)->lastnchgsides = 0;
2219 (*conshdlr)->nfixedvars = 0;
2220 (*conshdlr)->naggrvars = 0;
2221 (*conshdlr)->nchgvartypes = 0;
2222 (*conshdlr)->nchgbds = 0;
2223 (*conshdlr)->naddholes = 0;
2224 (*conshdlr)->ndelconss = 0;
2225 (*conshdlr)->naddconss = 0;
2226 (*conshdlr)->nupgdconss = 0;
2227 (*conshdlr)->nchgcoefs = 0;
2228 (*conshdlr)->nchgsides = 0;
2229 (*conshdlr)->npresolcalls = 0;
2230 (*conshdlr)->delayupdatecount = 0;
2232 (*conshdlr)->needscons = needscons;
2233 (*conshdlr)->sepalpwasdelayed =
FALSE;
2234 (*conshdlr)->sepasolwasdelayed =
FALSE;
2235 (*conshdlr)->propwasdelayed =
FALSE;
2236 (*conshdlr)->duringsepa =
FALSE;
2237 (*conshdlr)->duringprop =
FALSE;
2238 (*conshdlr)->initialized =
FALSE;
2243 "frequency for separating cuts (-1: never, 0: only in root node)",
2248 "frequency for propagating domains (-1: never, 0: only in root node)",
2258 "frequency for using all instead of only the useful constraints in separation, propagation and enforcement (-1: never, 0: only in first evaluation)",
2263 "maximal number of presolving rounds the constraint handler participates in (-1: no limit)",
2264 &(*conshdlr)->maxprerounds,
TRUE, maxprerounds, -1, INT_MAX,
NULL,
NULL) );
2268 "should separation method be delayed, if other separators found cuts?",
2269 &(*conshdlr)->delaysepa,
TRUE, delaysepa,
NULL,
NULL) );
2273 "should propagation method be delayed, if other propagators found reductions?",
2274 &(*conshdlr)->delayprop,
TRUE, delayprop,
NULL,
NULL) );
2277 (void)
SCIPsnprintf(paramdesc,
SCIP_MAXSTRLEN,
"timing mask of the constraint handler's presolving method (%u:FAST, %u:MEDIUM, %u:EXHAUSTIVE, %u:FINAL)",
2348 assert(conssepalp !=
NULL || conssepasol !=
NULL || sepafreq == -1);
2351 assert(!needscons || ((conshdlrcopy ==
NULL) == (conscopy ==
NULL)));
2354 checkpriority, sepafreq, propfreq, eagerfreq, maxprerounds, delaysepa, delayprop, needscons, proptiming,
2355 presoltiming, conshdlrcopy, consfree, consinit, consexit, consinitpre, consexitpre, consinitsol, consexitsol,
2356 consdelete, constrans, consinitlp, conssepalp, conssepasol, consenfolp, consenforelax, consenfops, conscheck,
2357 consprop, conspresol, consresprop, conslock, consactive, consdeactive, consenable, consdisable, consdelvars,
2358 consprint, conscopy, consparse, consgetvars, consgetnvars, consgetdivebdchgs, consgetpermsymgraph,
2359 consgetsignedpermsymgraph, conshdlrdata),
2372 if( *conshdlr ==
NULL )
2374 assert(!(*conshdlr)->initialized);
2375 assert((*conshdlr)->nconss == 0);
2379 if( (*conshdlr)->consfree !=
NULL )
2381 SCIP_CALL( (*conshdlr)->consfree(
set->scip, *conshdlr) );
2427 if(
set->misc_resetstat )
2497 if( conshdlr->consinit !=
NULL )
2541 if( conshdlr->consexit !=
NULL )
2608 if( conshdlr->consinitpre !=
NULL )
2632 if( stat->
nruns >= 2 )
2664 if( conshdlr->consexitpre !=
NULL )
2708 if( conshdlr->consinitsol !=
NULL )
2745 if( conshdlr->consexitsol !=
NULL )
2790 if( conshdlr->consinitlp !=
NULL )
2796 SCIPsetDebugMsg(
set,
"initializing LP with %d initial constraints of handler <%s> (ninitconss=%d, kept=%d, initkept=%u)\n",
2841 assert(currentdepth >= 0);
2901 if( conshdlr->conssepalp !=
NULL
2907 if( !conshdlr->
delaysepa || execdelayed )
2920 nusefulconss = nconss;
2931 assert(firstcons + nconss <= conshdlr->nsepaconss);
2932 assert(nusefulconss <= nconss);
2942 int oldnactiveconss;
2943 int lastnusefulsepaconss;
2945 SCIPsetDebugMsg(
set,
"separating constraints %d to %d of %d constraints of handler <%s> (%s LP solution)\n",
2946 firstcons, firstcons + nconss - 1, conshdlr->
nsepaconss, conshdlr->
name,
2950 lastsepalpcount = stat->
lpcount;
2954 conss = &(conshdlr->
sepaconss[firstcons]);
2964 nusefulconss = nconss;
2977 SCIP_CALL( conshdlr->conssepalp(
set->scip, conshdlr, conss, nconss, nusefulconss,
result) );
3014 SCIPerrorMessage(
"LP separation method of constraint handler <%s> returned invalid result <%d>\n",
3057 if( conshdlr->conssepasol !=
NULL
3063 if( !conshdlr->
delaysepa || execdelayed )
3071 assert(nusefulconss <= nconss);
3073 if( nconss > 0 || !conshdlr->
needscons )
3079 int oldnactiveconss;
3081 SCIPsetDebugMsg(
set,
"separating %d constraints of handler <%s> (primal solution %p)\n",
3082 nconss, conshdlr->
name, (
void*)
sol);
3095 nusefulconss = nconss;
3141 SCIPerrorMessage(
"SOL separation method of constraint handler <%s> returned invalid result <%d>\n",
3207 && ( strcmp(conshdlr->
name,
"integral") != 0 )
3222 lastinfeasible =
TRUE;
3225 lastinfeasible =
FALSE;
3231 nusefulconss = nconss;
3233 relaxchanged =
FALSE;
3241 relaxchanged =
TRUE;
3242 lastinfeasible =
FALSE;
3245 assert(firstcons + nconss <= conshdlr->nenfoconss);
3246 assert(nusefulconss <= nconss);
3249 if( nconss > 0 || (!conshdlr->
needscons && relaxchanged) )
3255 int oldnactiveconss;
3259 SCIPdebugMessage(
"enforcing constraints %d to %d of %d constraints of handler <%s> (%s relaxation solution)\n",
3260 firstcons, firstcons + nconss - 1, conshdlr->
nenfoconss, conshdlr->
name, relaxchanged ?
"new" :
"old");
3272 conss = conshdlr->
enfoconss + firstcons;
3283 nusefulconss = nconss;
3295 SCIP_CALL( conshdlr->consenforelax(
set->scip, relaxsol, conshdlr, conss, nconss, nusefulconss, solinfeasible,
result) );
3336 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for relaxation solutions returned invalid result <%d>\n",
3383 if( conshdlr->consenfolp !=
NULL )
3405 lastinfeasible =
FALSE;
3410 lastinfeasible =
TRUE;
3417 nusefulconss = nconss;
3428 lastinfeasible =
FALSE;
3431 assert(firstcons + nconss <= conshdlr->nenfoconss);
3432 assert(nusefulconss <= nconss);
3435 if( nconss > 0 || (!conshdlr->
needscons && lpchanged) )
3441 int oldnactiveconss;
3443 SCIPsetDebugMsg(
set,
"enforcing constraints %d to %d of %d constraints of handler <%s> (%s LP solution)\n",
3444 firstcons, firstcons + nconss - 1, conshdlr->
nenfoconss, conshdlr->
name, lpchanged ?
"new" :
"old");
3453 conss = nconss > 0 ? conshdlr->
enfoconss + firstcons :
NULL;
3463 nusefulconss = nconss;
3475 SCIP_CALL( conshdlr->consenfolp(
set->scip, conshdlr, conss, nconss, nusefulconss, solinfeasible,
result) );
3515 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for LP solutions returned invalid result <%d>\n",
3549 if( conshdlr->consgetdivebdchgs !=
NULL )
3595 if( conshdlr->consenfops !=
NULL )
3622 lastinfeasible =
TRUE;
3625 lastinfeasible =
FALSE;
3631 nusefulconss = nconss;
3642 lastinfeasible =
FALSE;
3645 assert(firstcons + nconss <= conshdlr->nenfoconss);
3646 assert(nusefulconss <= nconss);
3649 if( nconss > 0 || (!conshdlr->
needscons && pschanged) )
3655 SCIPsetDebugMsg(
set,
"enforcing constraints %d to %d of %d constraints of handler <%s> (%s pseudo solution, objinfeasible=%u)\n",
3656 firstcons, firstcons + nconss - 1, conshdlr->
nenfoconss, conshdlr->
name, pschanged ?
"new" :
"old", objinfeasible);
3667 conss = conshdlr->
enfoconss + firstcons;
3676 nusefulconss = nconss;
3688 SCIP_CALL( conshdlr->consenfops(
set->scip, conshdlr, conss, nconss, nusefulconss, solinfeasible, objinfeasible,
result) );
3700 else if( !objinfeasible )
3702 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for pseudo solutions was skipped, even though the solution was not objective-infeasible\n",
3742 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for pseudo solutions returned invalid result <%d>\n",
3754 else if( objinfeasible )
3806 sol, checkintegrality, checklprows, printreason, completely,
result) );
3857 if( conshdlr->consprop !=
NULL
3864 if( !conshdlr->
delayprop || execdelayed )
3868 int nmarkedpropconss;
3878 nusefulconss = nconss;
3889 assert(firstcons + nconss <= conshdlr->npropconss);
3890 assert(nusefulconss <= nconss);
3895 if( nconss > 0 || fullpropagation
3902 int lastnusefulpropconss;
3904 SCIPsetDebugMsg(
set,
"propagating constraints %d to %d of %d constraints of handler <%s> (%s pseudo solution, %d useful)\n",
3905 firstcons, firstcons + nconss - 1, conshdlr->
npropconss, conshdlr->
name,
3913 conss = nconss > 0 ? (conshdlr->
propconss + firstcons) :
NULL;
3921 nusefulconss = nconss;
3931 if( instrongbranching )
3936 assert(nusefulconss <= nconss);
3937 assert(nmarkedpropconss <= nconss);
3940 SCIP_CALL( conshdlr->consprop(
set->scip, conshdlr, conss, nconss, nusefulconss, nmarkedpropconss, proptiming,
result) );
3944 if( instrongbranching )
3981 SCIPerrorMessage(
"propagation method of constraint handler <%s> returned invalid result <%d>\n",
4041 if( conshdlr->conspresol !=
NULL
4052 int nnewchgvartypes;
4096 nnewfixedvars, nnewaggrvars, nnewchgvartypes, nnewchgbds, nnewholes,
4097 nnewdelconss, nnewaddconss, nnewupgdconss, nnewchgcoefs, nnewchgsides,
4098 nfixedvars, naggrvars, nchgvartypes, nchgbds, naddholes,
4099 ndelconss, naddconss, nupgdconss, nchgcoefs, nchgsides,
result) );
4127 SCIPerrorMessage(
"presolving method of constraint handler <%s> returned invalid result <%d>\n",
4154 if( conshdlr->consdelvars !=
NULL )
4211 return conshdlr->
name;
4221 return conshdlr->
desc;
4257 assert(conssepalp !=
NULL || conssepasol !=
NULL || sepafreq == -1);
4259 conshdlr->conssepalp = conssepalp;
4260 conshdlr->conssepasol = conssepasol;
4279 conshdlr->consprop = consprop;
4293 conshdlr->consenforelax = consenforelax;
4307 conshdlr->conshdlrcopy = conshdlrcopy;
4308 conshdlr->conscopy = conscopy;
4319 conshdlr->consfree = consfree;
4330 conshdlr->consinit = consinit;
4341 conshdlr->consexit = consexit;
4352 conshdlr->consinitsol = consinitsol;
4363 conshdlr->consexitsol = consexitsol;
4374 conshdlr->consinitpre = consinitpre;
4385 conshdlr->consexitpre = consexitpre;
4398 conshdlr->conspresol = conspresol;
4406 SCIPmessagePrintError(
"ERROR: 'PRESOLDELAY'-flag no longer available since SCIP 3.2, use an appropriate "
4407 "'SCIP_PRESOLTIMING' for <%s> constraint handler instead.\n", conshdlr->
name);
4425 conshdlr->consdelete = consdelete;
4436 conshdlr->constrans = constrans;
4447 conshdlr->consinitlp = consinitlp;
4458 conshdlr->consresprop = consresprop;
4469 conshdlr->consactive = consactive;
4480 conshdlr->consdeactive = consdeactive;
4491 conshdlr->consenable = consenable;
4502 conshdlr->consdisable = consdisable;
4513 conshdlr->consdelvars = consdelvars;
4524 conshdlr->consprint = consprint;
4535 conshdlr->consparse = consparse;
4546 conshdlr->consgetvars = consgetvars;
4557 conshdlr->consgetnvars = consgetnvars;
4568 conshdlr->consgetdivebdchgs = consgetdivebdchgs;
4580 conshdlr->consgetpermsymgraph = consgetpermsymgraph;
4592 conshdlr->consgetsignedpermsymgraph = consgetsignedpermsymgraph;
4607 return conshdlr->
conss;
5184 return (conshdlr->conspresol !=
NULL);
5254 return (conshdlr->conshdlrcopy !=
NULL);
5307 return conshdlr->consgetpermsymgraph !=
NULL;
5317 return conshdlr->consgetsignedpermsymgraph !=
NULL;
5335 (*conssetchg)->addedconss =
NULL;
5336 (*conssetchg)->disabledconss =
NULL;
5337 (*conssetchg)->addedconsssize = 0;
5338 (*conssetchg)->naddedconss = 0;
5339 (*conssetchg)->disabledconsssize = 0;
5340 (*conssetchg)->ndisabledconss = 0;
5386 if( *conssetchg !=
NULL )
5419 assert(num <= conssetchg->addedconsssize);
5443 assert(num <= conssetchg->disabledconsssize);
5466 if( *conssetchg ==
NULL )
5473 (*conssetchg)->addedconss[(*conssetchg)->naddedconss] = cons;
5474 (*conssetchg)->naddedconss++;
5508 if( *conssetchg ==
NULL )
5515 (*conssetchg)->disabledconss[(*conssetchg)->ndisabledconss] = cons;
5516 (*conssetchg)->ndisabledconss++;
5537 assert(0 <= arraypos && arraypos < conssetchg->naddedconss);
5542 SCIPsetDebugMsg(
set,
"delete added constraint <%s> at position %d from constraint set change data\n", cons->
name, arraypos);
5555 for( ; arraypos < conssetchg->
naddedconss-1; ++arraypos )
5580 assert(0 <= arraypos && arraypos < conssetchg->ndisabledconss);
5583 SCIPsetDebugMsg(
set,
"delete disabled constraint <%s> at position %d from constraint set change data\n",
5610 if( nconss !=
NULL )
5627 if( conssetchg ==
NULL )
5630 SCIPsetDebugMsg(
set,
"applying constraint set changes at %p: %d constraint additions, %d constraint disablings\n",
5678 SCIPsetDebugMsg(
set,
"constraint <%s> of handler <%s> was deactivated -> remove it from disabledconss array\n",
5712 if( conssetchg ==
NULL )
5715 SCIPsetDebugMsg(
set,
"undoing constraint set changes at %p: %d constraint additions, %d constraint disablings\n",
5738 SCIPsetDebugMsg(
set,
"constraint <%s> of handler <%s> was deactivated -> remove it from disabledconss array\n",
5803 if( *conssetchg ==
NULL )
5806 SCIPsetDebugMsg(
set,
"moving constraint set changes at %p to global problem: %d constraint additions, %d constraint disablings\n",
5807 (
void*)*conssetchg, (*conssetchg)->
naddedconss, (*conssetchg)->ndisabledconss);
5812 for(
i = (*conssetchg)->naddedconss-1;
i >= 0; --
i )
5814 cons = (*conssetchg)->addedconss[
i];
5841 for(
i = (*conssetchg)->ndisabledconss-1;
i >= 0; --
i )
5843 cons = (*conssetchg)->disabledconss[
i];
5861 if( (*conssetchg)->naddedconss == 0 && (*conssetchg)->ndisabledconss == 0 )
5925 assert(!original || deleteconsdata);
5931 (*cons)->scip =
set->scip;
5933 (*cons)->conshdlr = conshdlr;
5934 (*cons)->consdata = consdata;
5935 (*cons)->transorigcons =
NULL;
5936 (*cons)->addconssetchg =
NULL;
5937 (*cons)->addarraypos = -1;
5938 (*cons)->consspos = -1;
5939 (*cons)->initconsspos = -1;
5940 (*cons)->sepaconsspos = -1;
5941 (*cons)->enfoconsspos = -1;
5942 (*cons)->checkconsspos = -1;
5943 (*cons)->propconsspos = -1;
5944 (*cons)->activedepth = -2;
5945 (*cons)->validdepth = (local ? -1 : 0);
5948 (*cons)->nupgradelocks = 0;
5949 (*cons)->initial = initial;
5950 (*cons)->separate = separate;
5951 (*cons)->enforce = enforce;
5952 (*cons)->check = check;
5954 (*cons)->sepaenabled = separate;
5956 (*cons)->local = local;
5957 (*cons)->modifiable = modifiable;
5958 (*cons)->dynamic = dynamic;
5959 (*cons)->removable = removable;
5960 (*cons)->stickingatnode = stickingatnode;
5961 (*cons)->original = original;
5962 (*cons)->deleteconsdata = deleteconsdata;
5963 (*cons)->active =
FALSE;
5964 (*cons)->conflict =
FALSE;
5965 (*cons)->enabled =
FALSE;
5966 (*cons)->obsolete =
FALSE;
5967 (*cons)->markpropagate =
TRUE;
5968 (*cons)->deleted =
FALSE;
5969 (*cons)->update =
FALSE;
5970 (*cons)->updateinsert =
FALSE;
5971 (*cons)->updateactivate =
FALSE;
5972 (*cons)->updatedeactivate =
FALSE;
5973 (*cons)->updateenable =
FALSE;
5974 (*cons)->updatedisable =
FALSE;
5975 (*cons)->updatesepaenable =
FALSE;
5976 (*cons)->updatesepadisable =
FALSE;
5977 (*cons)->updatepropenable =
FALSE;
5978 (*cons)->updatepropdisable =
FALSE;
5979 (*cons)->updateobsolete =
FALSE;
5980 (*cons)->updatemarkpropagate =
FALSE;
5981 (*cons)->updateunmarkpropagate =
FALSE;
5982 (*cons)->updatefree =
FALSE;
5983 (*cons)->updateactfocus =
FALSE;
5987 (*cons)->nlockspos[
i] = 0;
5988 (*cons)->nlocksneg[
i] = 0;
6001 (*cons)->updateinsert =
TRUE;
6004 assert((*cons)->nuses == 2);
6064 if( sourceconshdlr->conscopy !=
NULL )
6066 SCIP_CALL( sourceconshdlr->conscopy(
set->scip, cons, name, sourcescip, sourceconshdlr, sourcecons, varmap, consmap,
6067 initial, separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
6126 if ( endptr ==
NULL || endptr == str )
6136 if ( endptr ==
NULL || endptr == str )
6165 if( conshdlr ==
NULL )
6167 SCIPmessagePrintWarning(messagehdlr,
"constraint handler <%s> doesn't exist in SCIP data structure\n", conshdlrname);
6172 if ( conshdlr->consparse ==
NULL )
6174 SCIPmessagePrintWarning(messagehdlr,
"constraint handler <%s> does not support parsing constraints\n", conshdlrname);
6178 SCIP_CALL( conshdlr->consparse(
set->scip, conshdlr, cons, consname, str,
6179 initial, separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, success) );
6216 assert((*cons)->nuses == 0);
6217 assert(!(*cons)->active);
6218 assert(!(*cons)->update);
6219 assert(!(*cons)->original || (*cons)->transorigcons ==
NULL);
6225 (*cons)->name, (*cons)->consspos, (*cons)->conshdlr->name);
6228 if( (*cons)->conshdlr->consdelete !=
NULL && (*cons)->consdata !=
NULL && (*cons)->deleteconsdata )
6230 SCIP_CALL( (*cons)->conshdlr->consdelete(
set->scip, (*cons)->conshdlr, *cons, &(*cons)->
consdata) );
6232 else if( !(*cons)->deleteconsdata )
6233 (*cons)->consdata =
NULL;
6237 if( (*cons)->transorigcons !=
NULL )
6239 assert(!(*cons)->original);
6240 assert((*cons)->transorigcons->original);
6241 assert((*cons)->transorigcons->transorigcons == *cons);
6243 (*cons)->transorigcons->transorigcons =
NULL;
6247 if( !(*cons)->original )
6252 assert((*cons)->consspos == -1);
6284 assert((*cons)->nuses >= 1);
6288 SCIPsetDebugMsg(
set,
"release constraint <%s> with nuses=%d, cons pointer %p\n", (*cons)->name, (*cons)->nuses, (
void*)(*cons));
6290 if( (*cons)->nuses == 0 )
6292 assert(!(*cons)->active || (*cons)->updatedeactivate);
6298 (*cons)->updatefree =
TRUE;
6301 assert((*cons)->nuses == 1);
6332 if( conshdlr->consprint !=
NULL )
6334 SCIP_CALL( conshdlr->consprint(
set->scip, conshdlr, cons, file) );
6337 SCIPmessageFPrintInfo(messagehdlr, file,
"constraint handler <%s> doesn't support printing constraint", conshdlr->
name);
6370 if( conshdlr->consgetvars !=
NULL )
6372 SCIP_CALL( conshdlr->consgetvars(
set->scip, conshdlr, cons,
vars, varssize, success) );
6405 if( conshdlr->consgetnvars !=
NULL )
6441 if( conshdlr->consgetpermsymgraph !=
NULL )
6443 SCIP_CALL( conshdlr->consgetpermsymgraph(
set->scip, conshdlr, cons, graph, success) );
6474 if( conshdlr->consgetsignedpermsymgraph !=
NULL )
6476 SCIP_CALL( conshdlr->consgetsignedpermsymgraph(
set->scip, conshdlr, cons, graph, success) );
6608 if( cons->
initial != initial )
6676 if( cons->
enforce != enforce )
6711 if( cons->
check != check )
6713 cons->
check = check;
6791 cons->
local = local;
6850 cons->
name = (
char*)name;
6890 SCIPsetDebugMsg(
set,
"delayed activation of constraint <%s> in constraint handler <%s> (depth %d)\n",
6926 SCIPsetDebugMsg(
set,
"delayed deactivation of constraint <%s> in constraint handler <%s>\n",
7228 cons->
age += deltaage;
7353 if( conshdlr->consresprop !=
NULL )
7358 SCIP_CALL( conshdlr->consresprop(
set->scip, conshdlr, cons, infervar, inferinfo, inferboundtype, bdchgidx,
7370 SCIPerrorMessage(
"propagation conflict resolving method of constraint handler <%s> returned invalid result <%d>\n",
7377 SCIPerrorMessage(
"propagation conflict resolving method of constraint handler <%s> is not implemented\n",
7405 assert(-2 <= nlockspos && nlockspos <= 2);
7406 assert(-2 <= nlocksneg && nlocksneg <= 2);
7411 oldnlockspos = cons->
nlockspos[locktype];
7412 oldnlocksneg = cons->
nlocksneg[locktype];
7419 updlockpos = (int)(cons->
nlockspos[locktype] > 0) - (int)(oldnlockspos > 0);
7420 updlockneg = (int)(cons->
nlocksneg[locktype] > 0) - (int)(oldnlocksneg > 0);
7423 if( updlockpos != 0 || updlockneg != 0 )
7455 SCIP_CALL( conshdlr->conscheck(
set->scip, conshdlr, &cons, 1,
sol, checkintegrality, checklprows, printreason,
7461 SCIPerrorMessage(
"feasibility check of constraint handler <%s> on constraint <%s> returned invalid result <%d>\n",
7491 SCIP_CALL( conshdlr->consenfops(
set->scip, conshdlr, &cons, 1, 1, solinfeasible, objinfeasible,
result) );
7503 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for pseudo solutions returned invalid result <%d>\n",
7534 SCIP_CALL( conshdlr->consenfolp(
set->scip, conshdlr, &cons, 1, 1, solinfeasible,
result) );
7545 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for LP returned invalid result <%d>\n",
7589 SCIPerrorMessage(
"enforcing method of constraint handler <%s> for relaxation returned invalid result <%d>\n",
7617 if( conshdlr->consinitlp !=
NULL )
7619 SCIP_CALL( conshdlr->consinitlp(
set->scip, conshdlr, &cons, 1, infeasible) );
7643 if( conshdlr->conssepalp !=
NULL )
7657 SCIPerrorMessage(
"separation method of constraint handler <%s> returned invalid result <%d>\n", conshdlr->
name,
7686 if( conshdlr->conssepasol !=
NULL )
7700 SCIPerrorMessage(
"separation method of constraint handler for arbitrary primal solution <%s> returned invalid result <%d>\n",
7728 if( conshdlr->consprop !=
NULL )
7730 SCIP_CALL( conshdlr->consprop(
set->scip, conshdlr, &cons, 1, 1, 1, proptiming,
result) );
7740 SCIPerrorMessage(
"propagation method of constraint handler <%s> returned invalid result <%d>\n",
7774 if( conshdlr->consresprop !=
NULL )
7776 SCIP_CALL( conshdlr->consresprop(
set->scip, conshdlr, cons, infervar, inferinfo, boundtype, bdchgidx, relaxedbd,
result) );
7782 SCIPerrorMessage(
"propagation conflict resolving method of constraint handler <%s> returned invalid result <%d>\n",
7799 int nnewchgvartypes,
7841 if( conshdlr->conspresol !=
NULL )
7843 SCIP_CALL( conshdlr->conspresol(
set->scip, conshdlr, &cons, 1, nrounds, timing,
7844 nnewfixedvars, nnewaggrvars, nnewchgvartypes, nnewchgbds, nnewholes, nnewdelconss, nnewaddconss,
7845 nnewupgdconss, nnewchgcoefs, nnewchgsides, nfixedvars, naggrvars, nchgvartypes,
7846 nchgbds, naddholes, ndelconss, naddconss, nupgdconss, nchgcoefs, nchgsides,
result) );
7856 SCIPerrorMessage(
"presolving method of constraint handler <%s> returned invalid result <%d>\n",
7881 if( conshdlr->consactive !=
NULL )
7883 SCIP_CALL( conshdlr->consactive(
set->scip, conshdlr, cons) );
7905 if( conshdlr->consdeactive !=
NULL )
7907 SCIP_CALL( conshdlr->consdeactive(
set->scip, conshdlr, cons) );
7953 assert(num <= conshdlr->storedpropconsssize);
7969 assert(conshdlrs !=
NULL || nconshdlrs == 0);
7971 for(
c = nconshdlrs - 1;
c >= 0; --
c )
7973 conshdlr = conshdlrs[
c];
8011 assert(conshdlrs !=
NULL || nconshdlrs == 0);
8013 for(
c = nconshdlrs - 1;
c >= 0; --
c )
8015 conshdlr = conshdlrs[
c];
8089 linconsstats->
sum = 0;
8102 return linconsstats->
counter[(int)linconstype];
8112 return linconsstats->
sum;
8127 linconsstats->
counter[(int)linconstype] += increment;
8128 linconsstats->
sum += increment;
8175#undef SCIPconsGetName
8176#undef SCIPconsGetPos
8177#undef SCIPconsGetHdlr
8178#undef SCIPconsGetData
8179#undef SCIPconsGetNUses
8180#undef SCIPconsGetActiveDepth
8181#undef SCIPconsGetValidDepth
8182#undef SCIPconsIsActive
8183#undef SCIPconsIsEnabled
8184#undef SCIPconsIsSeparationEnabled
8185#undef SCIPconsIsPropagationEnabled
8186#undef SCIPconsIsDeleted
8187#undef SCIPconsIsObsolete
8188#undef SCIPconsIsConflict
8189#undef SCIPconsGetAge
8190#undef SCIPconsIsInitial
8191#undef SCIPconsIsSeparated
8192#undef SCIPconsIsEnforced
8193#undef SCIPconsIsChecked
8194#undef SCIPconsIsMarkedPropagate
8195#undef SCIPconsIsPropagated
8196#undef SCIPconsIsGlobal
8197#undef SCIPconsIsLocal
8198#undef SCIPconsIsModifiable
8199#undef SCIPconsIsDynamic
8200#undef SCIPconsIsRemovable
8201#undef SCIPconsIsStickingAtNode
8202#undef SCIPconsIsInProb
8203#undef SCIPconsIsOriginal
8204#undef SCIPconsIsTransformed
8205#undef SCIPconsIsLockedPos
8206#undef SCIPconsIsLockedNeg
8207#undef SCIPconsIsLocked
8208#undef SCIPconsGetNLocksPos
8209#undef SCIPconsGetNLocksNeg
8210#undef SCIPconsIsLockedTypePos
8211#undef SCIPconsIsLockedTypeNeg
8212#undef SCIPconsIsLockedType
8213#undef SCIPconsGetNLocksTypePos
8214#undef SCIPconsGetNLocksTypeNeg
8215#undef SCIPconsIsAdded
8216#undef SCIPconsGetNUpgradeLocks
8312 return (!cons->
local ? 0
8457 return !cons->
local;
static GRAPHNODE ** active
int SCIPbranchcandGetNPseudoCands(SCIP_BRANCHCAND *branchcand)
internal methods for branching rules and branching candidate storage
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
void SCIPclockReset(SCIP_CLOCK *clck)
void SCIPclockFree(SCIP_CLOCK **clck)
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
internal methods for clocks and timing issues
SCIP_RETCODE SCIPconshdlrsStorePropagationStatus(SCIP_SET *set, SCIP_CONSHDLR **conshdlrs, int nconshdlrs)
void SCIPconshdlrSetExitpre(SCIP_CONSHDLR *conshdlr,)
static SCIP_RETCODE conshdlrAddInitcons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
SCIP_RETCODE SCIPconsAddLocks(SCIP_CONS *cons, SCIP_SET *set, SCIP_LOCKTYPE locktype, int nlockspos, int nlocksneg)
SCIP_RETCODE SCIPconshdlrSeparateLP(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsParse(SCIP_CONS **cons, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *str, 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 *success)
void SCIPconshdlrSetGetPermsymGraph(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconssetchgUndo(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconsEnableSeparation(SCIP_CONS *cons, SCIP_SET *set)
static SCIP_RETCODE conssetchgEnsureAddedconssSize(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
SCIP_RETCODE SCIPconshdlrSetPresol(SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
void SCIPconshdlrIncNCutsFound(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPconshdlrInit(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
static SCIP_RETCODE conssetchgDelAddedCons(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, int arraypos)
static SCIP_RETCODE conshdlrEnableCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
void SCIPconshdlrSetDelvars(SCIP_CONSHDLR *conshdlr,)
void SCIPconsMarkConflict(SCIP_CONS *cons)
SCIP_RETCODE SCIPconsEnable(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat)
void SCIPconsCapture(SCIP_CONS *cons)
SCIP_RETCODE SCIPconsProp(SCIP_CONS *cons, SCIP_SET *set, SCIP_PROPTIMING proptiming, SCIP_RESULT *result)
static SCIP_RETCODE conssetchgCreate(SCIP_CONSSETCHG **conssetchg, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPconsPrint(SCIP_CONS *cons, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
SCIP_RETCODE SCIPconsCreate(SCIP_CONS **cons, BMS_BLKMEM *blkmem, SCIP_SET *set, 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 original, SCIP_Bool deleteconsdata)
void SCIPconshdlrIncNAppliedCuts(SCIP_CONSHDLR *conshdlr)
static SCIP_RETCODE conshdlrEnsureCheckconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
static void conshdlrDelPropcons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static SCIP_Bool conshdlrAreUpdatesDelayed(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetInit(SCIP_CONSHDLR *conshdlr,)
void SCIPconsSetLocal(SCIP_CONS *cons, SCIP_Bool local)
SCIP_RETCODE SCIPconsMarkPropagate(SCIP_CONS *cons, SCIP_SET *set)
SCIP_RETCODE SCIPconshdlrEnforceRelaxSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_SEPASTORE *sepastore, SCIP_SOL *relaxsol, SCIP_Bool solinfeasible, SCIP_RESULT *result)
static SCIP_RETCODE conshdlrDisableConsSeparation(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static SCIP_Real conshdlrGetAgeresetavg(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetGetNVars(SCIP_CONSHDLR *conshdlr,)
static SCIP_RETCODE conssetchgEnsureDisabledconssSize(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
void SCIPconshdlrSetGetSignedPermsymGraph(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsDeactivate(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat)
static SCIP_RETCODE conshdlrEnsurePropconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
SCIP_RETCODE SCIPconshdlrExitsol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool restart)
SCIP_RETCODE SCIPconshdlrSeparateSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsDisable(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconsDeactive(SCIP_CONS *cons, SCIP_SET *set)
static SCIP_RETCODE conshdlrMarkConsObsolete(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPconshdlrLockVars(SCIP_CONSHDLR *conshdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconshdlrEnforceLPSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_SEPASTORE *sepastore, SCIP_Bool solinfeasible, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsGetPermsymGraph(SCIP_CONS *cons, SCIP_SET *set, SYM_GRAPH *graph, SCIP_Bool *success)
SCIP_RETCODE SCIPconsGetNVars(SCIP_CONS *cons, SCIP_SET *set, int *nvars, SCIP_Bool *success)
static SCIP_RETCODE conshdlrEnsureUpdateconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
void SCIPconsSetStickingAtNode(SCIP_CONS *cons, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPconsSetSeparated(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool separate)
#define checkConssArrays(conshdlr)
SCIP_RETCODE SCIPconsSepalp(SCIP_CONS *cons, SCIP_SET *set, SCIP_RESULT *result)
static SCIP_RETCODE conssetchgRelease(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set)
static SCIP_RETCODE conshdlrProcessUpdates(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconsEnfops(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool solinfeasible, SCIP_Bool objinfeasible, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsActive(SCIP_CONS *cons, SCIP_SET *set)
#define AGERESETAVG_AGELIMIT
SCIP_RETCODE SCIPconsResetAge(SCIP_CONS *cons, SCIP_SET *set)
static SCIP_RETCODE conshdlrEnsureInitconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
void SCIPconshdlrSetExit(SCIP_CONSHDLR *conshdlr,)
void SCIPconshdlrSetResprop(SCIP_CONSHDLR *conshdlr,)
void SCIPconshdlrSetTrans(SCIP_CONSHDLR *conshdlr,)
static SCIP_RETCODE conshdlrAddCheckcons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
static SCIP_RETCODE ensurePropagationStorage(SCIP_SET *set, SCIP_CONSHDLR *conshdlr, int num)
void SCIPconshdlrSetDelete(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsResprop(SCIP_CONS *cons, SCIP_SET *set, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd, SCIP_RESULT *result)
void SCIPconshdlrSetParse(SCIP_CONSHDLR *conshdlr,)
void SCIPconsSetRemovable(SCIP_CONS *cons, SCIP_Bool removable)
void SCIPconshdlrSetExitsol(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconshdlrCreate(SCIP_CONSHDLR **conshdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int sepapriority, int enfopriority, int checkpriority, int sepafreq, int propfreq, int eagerfreq, int maxprerounds, SCIP_Bool delaysepa, SCIP_Bool delayprop, SCIP_Bool needscons, SCIP_PROPTIMING proptiming, SCIP_PRESOLTIMING presoltiming, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSFREE((*consfree)), SCIP_DECL_CONSINIT((*consinit)), SCIP_DECL_CONSEXIT((*consexit)), SCIP_DECL_CONSINITPRE((*consinitpre)), SCIP_DECL_CONSEXITPRE((*consexitpre)), SCIP_DECL_CONSINITSOL((*consinitsol)), SCIP_DECL_CONSEXITSOL((*consexitsol)), SCIP_DECL_CONSDELETE((*consdelete)), SCIP_DECL_CONSTRANS((*constrans)), SCIP_DECL_CONSINITLP((*consinitlp)), SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFORELAX((*consenforelax)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSPROP((*consprop)), SCIP_DECL_CONSPRESOL((*conspresol)), SCIP_DECL_CONSRESPROP((*consresprop)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_DECL_CONSACTIVE((*consactive)), SCIP_DECL_CONSDEACTIVE((*consdeactive)), SCIP_DECL_CONSENABLE((*consenable)), SCIP_DECL_CONSDISABLE((*consdisable)), SCIP_DECL_CONSDELVARS((*consdelvars)), SCIP_DECL_CONSPRINT((*consprint)), SCIP_DECL_CONSCOPY((*conscopy)), SCIP_DECL_CONSPARSE((*consparse)), SCIP_DECL_CONSGETVARS((*consgetvars)), SCIP_DECL_CONSGETNVARS((*consgetnvars)), SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)), SCIP_DECL_CONSGETPERMSYMGRAPH((*consgetpermsymgraph)), SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH((*consgetsignedpermsymgraph)), SCIP_CONSHDLRDATA *conshdlrdata)
void SCIPconshdlrEnableOrDisableClocks(SCIP_CONSHDLR *conshdlr, SCIP_Bool enable)
static SCIP_RETCODE conssetchgDelDisabledCons(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, int arraypos)
void SCIPconshdlrSetDisable(SCIP_CONSHDLR *conshdlr,)
void SCIPconshdlrSetActive(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsTransform(SCIP_CONS *origcons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONS **transcons)
static SCIP_Bool consExceedsAgelimit(SCIP_CONS *cons, SCIP_SET *set)
static SCIP_RETCODE conshdlrAddSepacons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
SCIP_RETCODE SCIPconsCheck(SCIP_CONS *cons, SCIP_SET *set, SCIP_SOL *sol, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool printreason, SCIP_RESULT *result)
#define AGERESETAVG_OBSOLETEAGE
static void conshdlrDelEnfocons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPconssetchgAddAddedCons(SCIP_CONSSETCHG **conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons, int depth, SCIP_Bool focusnode, SCIP_Bool active)
SCIP_RETCODE SCIPconshdlrInitLP(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_Bool initkeptconss, SCIP_Bool *cutoff)
static SCIP_RETCODE conshdlrDisableConsPropagation(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static SCIP_RETCODE conshdlrEnsureConssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
static void conshdlrUnmarkConsPropagate(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static void conshdlrMarkConsPropagate(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPconsAddAge(SCIP_CONS *cons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real deltaage, SCIP_REOPT *reopt)
SCIP_RETCODE SCIPconsEnablePropagation(SCIP_CONS *cons, SCIP_SET *set)
static void conshdlrDelCheckcons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static void conshdlrDelayUpdates(SCIP_CONSHDLR *conshdlr)
static void conshdlrDelInitcons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static SCIP_RETCODE conshdlrForceUpdates(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconsEnfolp(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool solinfeasible, SCIP_RESULT *result)
static SCIP_RETCODE conshdlrAddCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
SCIP_RETCODE SCIPconsSetInitial(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool initial)
SCIP_RETCODE SCIPconssetchgFree(SCIP_CONSSETCHG **conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set)
static SCIP_RETCODE conshdlrEnsureEnfoconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
SCIP_RETCODE SCIPconsChgName(SCIP_CONS *cons, BMS_BLKMEM *blkmem, const char *name)
static SCIP_RETCODE conshdlrDisableCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
SCIP_RETCODE SCIPconsIncAge(SCIP_CONS *cons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_REOPT *reopt)
static SCIP_Bool consExceedsObsoleteage(SCIP_CONS *cons, SCIP_SET *set)
void SCIPconshdlrSetEnable(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconshdlrInitpre(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
void SCIPconsSetDynamic(SCIP_CONS *cons, SCIP_Bool dynamic)
SCIP_RETCODE SCIPconsSepasol(SCIP_CONS *cons, SCIP_SET *set, SCIP_SOL *sol, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsFree(SCIP_CONS **cons, BMS_BLKMEM *blkmem, SCIP_SET *set)
static SCIP_RETCODE conshdlrMarkConsUseful(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
static SCIP_RETCODE conshdlrEnableConsPropagation(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
SCIP_RETCODE SCIPconssetchgAddDisabledCons(SCIP_CONSSETCHG **conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONS *cons)
void SCIPconshdlrSetDeactive(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsDelete(SCIP_CONS *cons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_REOPT *reopt)
void SCIPconshdlrSetGetVars(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsPresol(SCIP_CONS *cons, SCIP_SET *set, int nrounds, SCIP_PRESOLTIMING timing, int nnewfixedvars, int nnewaggrvars, int nnewchgvartypes, int nnewchgbds, int nnewholes, int nnewdelconss, int nnewaddconss, int nnewupgdconss, int nnewchgcoefs, int nnewchgsides, int *nfixedvars, int *naggrvars, int *nchgvartypes, int *nchgbds, int *naddholes, int *ndelconss, int *naddconss, int *nupgdconss, int *nchgcoefs, int *nchgsides, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsDisablePropagation(SCIP_CONS *cons, SCIP_SET *set)
SCIP_RETCODE SCIPconsCopy(SCIP_CONS **cons, SCIP_SET *set, const char *name, SCIP *sourcescip, SCIP_CONSHDLR *sourceconshdlr, SCIP_CONS *sourcecons, 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)
static void conshdlrDelCons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
void SCIPconshdlrSetGetDiveBdChgs(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsRelease(SCIP_CONS **cons, BMS_BLKMEM *blkmem, SCIP_SET *set)
SCIP_RETCODE SCIPconsResolvePropagation(SCIP_CONS *cons, SCIP_SET *set, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE inferboundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsSetPropagated(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool propagate)
SCIP_RETCODE SCIPconsDisableSeparation(SCIP_CONS *cons, SCIP_SET *set)
static SCIP_RETCODE conshdlrEnsureSepaconssMem(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, int num)
void SCIPconshdlrSetInitsol(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsGetSignedPermsymGraph(SCIP_CONS *cons, SCIP_SET *set, SYM_GRAPH *graph, SCIP_Bool *success)
SCIP_RETCODE SCIPconshdlrUnlockVars(SCIP_CONSHDLR *conshdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconsSetChecked(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool check)
SCIP_RETCODE SCIPconsInitlp(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPconsEnforelax(SCIP_CONS *cons, SCIP_SET *set, SCIP_SOL *sol, SCIP_Bool solinfeasible, SCIP_RESULT *result)
static SCIP_RETCODE conshdlrAddUpdateCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
static SCIP_RETCODE doConshdlrCreate(SCIP_CONSHDLR **conshdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int sepapriority, int enfopriority, int checkpriority, int sepafreq, int propfreq, int eagerfreq, int maxprerounds, SCIP_Bool delaysepa, SCIP_Bool delayprop, SCIP_Bool needscons, SCIP_PROPTIMING proptiming, SCIP_PRESOLTIMING presoltiming, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSFREE((*consfree)), SCIP_DECL_CONSINIT((*consinit)), SCIP_DECL_CONSEXIT((*consexit)), SCIP_DECL_CONSINITPRE((*consinitpre)), SCIP_DECL_CONSEXITPRE((*consexitpre)), SCIP_DECL_CONSINITSOL((*consinitsol)), SCIP_DECL_CONSEXITSOL((*consexitsol)), SCIP_DECL_CONSDELETE((*consdelete)), SCIP_DECL_CONSTRANS((*constrans)), SCIP_DECL_CONSINITLP((*consinitlp)), SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFORELAX((*consenforelax)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSPROP((*consprop)), SCIP_DECL_CONSPRESOL((*conspresol)), SCIP_DECL_CONSRESPROP((*consresprop)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_DECL_CONSACTIVE((*consactive)), SCIP_DECL_CONSDEACTIVE((*consdeactive)), SCIP_DECL_CONSENABLE((*consenable)), SCIP_DECL_CONSDISABLE((*consdisable)), SCIP_DECL_CONSDELVARS((*consdelvars)), SCIP_DECL_CONSPRINT((*consprint)), SCIP_DECL_CONSCOPY((*conscopy)), SCIP_DECL_CONSPARSE((*consparse)), SCIP_DECL_CONSGETVARS((*consgetvars)), SCIP_DECL_CONSGETNVARS((*consgetnvars)), SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)), SCIP_DECL_CONSGETPERMSYMGRAPH((*consgetpermsymgraph)), SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH((*consgetsignedpermsymgraph)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPconshdlrsResetPropagationStatus(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_CONSHDLR **conshdlrs, int nconshdlrs)
SCIP_RETCODE SCIPconshdlrCopyInclude(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_Bool *valid)
SCIP_RETCODE SCIPconsActivate(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool focusnode)
static SCIP_RETCODE conshdlrAddEnfocons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
static SCIP_RETCODE conshdlrEnableConsSeparation(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
static void conshdlrDelSepacons(SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_CONS * SCIPconsGetTransformed(SCIP_CONS *cons)
#define AGERESETAVG_DECAY
SCIP_RETCODE SCIPconshdlrPropagate(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool fullpropagation, SCIP_Bool execdelayed, SCIP_Bool instrongbranching, SCIP_PROPTIMING proptiming, SCIP_RESULT *result)
void SCIPconshdlrSetInitlp(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconsUnmarkPropagate(SCIP_CONS *cons, SCIP_SET *set)
SCIP_RETCODE SCIPconshdlrGetDiveBoundChanges(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_DIVESET *diveset, SCIP_SOL *sol, SCIP_Bool *success, SCIP_Bool *infeasible)
static void conshdlrUpdateAgeresetavg(SCIP_CONSHDLR *conshdlr, SCIP_Real age)
void SCIPconshdlrSetCopy(SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
void SCIPconshdlrSetFree(SCIP_CONSHDLR *conshdlr,)
static SCIP_RETCODE conshdlrAddPropcons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_CONS *cons)
SCIP_RETCODE SCIPconshdlrPresolve(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRESOLTIMING timing, int nrounds, int *nfixedvars, int *naggrvars, int *nchgvartypes, int *nchgbds, int *naddholes, int *ndelconss, int *naddconss, int *nupgdconss, int *nchgcoefs, int *nchgsides, SCIP_RESULT *result)
SCIP_RETCODE SCIPconsGetVars(SCIP_CONS *cons, SCIP_SET *set, SCIP_VAR **vars, int varssize, SCIP_Bool *success)
void SCIPconsSetNamePointer(SCIP_CONS *cons, const char *name)
SCIP_RETCODE SCIPconshdlrEnforcePseudoSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_BRANCHCAND *branchcand, SCIP_Bool solinfeasible, SCIP_Bool objinfeasible, SCIP_Bool forced, SCIP_RESULT *result)
void SCIPconshdlrSetInitpre(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconssetchgApply(SCIP_CONSSETCHG *conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool focusnode)
SCIP_RETCODE SCIPconshdlrDelVars(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconsSetEnforced(SCIP_CONS *cons, SCIP_SET *set, SCIP_Bool enforce)
void SCIPconsSetModifiable(SCIP_CONS *cons, SCIP_Bool modifiable)
static SCIP_RETCODE conshdlrDeactivateCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
SCIP_RETCODE SCIPconshdlrExitpre(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconshdlrInitsol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconssetchgMakeGlobal(SCIP_CONSSETCHG **conssetchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_REOPT *reopt)
void SCIPconshdlrSetPrint(SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPconshdlrCheck(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *sol, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool printreason, SCIP_Bool completely, SCIP_RESULT *result)
SCIP_RETCODE SCIPconshdlrExit(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
static SCIP_RETCODE conshdlrActivateCons(SCIP_CONSHDLR *conshdlr, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons, int depth, SCIP_Bool focusnode)
SCIP_RETCODE SCIPconshdlrFree(SCIP_CONSHDLR **conshdlr, SCIP_SET *set)
internal methods for constraints and constraint handlers
common defines and data types used in all packages of SCIP
#define SCIP_MAXTREEDEPTH
#define SCIP_CALL_FINALLY(x, y)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
void SCIPconshdlrSetEnforelax(SCIP_CONSHDLR *conshdlr,)
int SCIPconshdlrGetMaxNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetCheckTime(SCIP_CONSHDLR *conshdlr)
SCIP_PROPTIMING SCIPconshdlrGetPropTiming(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrWasSolSeparationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNCheckCalls(SCIP_CONSHDLR *conshdlr)
SCIP_CONS ** SCIPconshdlrGetCheckConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNChgSides(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetPresolTime(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetEagerFreq(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrDoesPresolve(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetProp(SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING timingmask)
int SCIPconshdlrGetNFixedVars(SCIP_CONSHDLR *conshdlr)
SCIP_PRESOLTIMING SCIPconshdlrGetPresolTiming(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetEnfoLPTime(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNPresolCalls(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNDomredsFound(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetSepaPriority(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNCutsApplied(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNChgCoefs(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetPresolTiming(SCIP_CONSHDLR *conshdlr, SCIP_PRESOLTIMING presoltiming)
int SCIPconshdlrGetNUpdateConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONS ** SCIPconshdlrGetEnfoConss(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetSepa(SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_Real SCIPconshdlrGetStrongBranchPropTime(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNCutsFound(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrSupportsSignedPermsymDetection(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrIsPropagationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetPropTime(SCIP_CONSHDLR *conshdlr)
void SCIPconssetchgGetAddedConsData(SCIP_CONSSETCHG *conssetchg, SCIP_CONS ***conss, int *nconss)
SCIP_Real SCIPconshdlrGetEnfoPSTime(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetPropFreq(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNCutoffs(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNEnabledConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONS ** SCIPconshdlrGetUpdateConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrIsSeparationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNSepaCalls(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNDelConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrWasLPSeparationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNChildren(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetEnfoRelaxTime(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetPropTiming(SCIP_CONSHDLR *conshdlr, SCIP_PROPTIMING proptiming)
SCIP_Bool SCIPconshdlrNeedsCons(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNAggrVars(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNEnfoPSCalls(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNAddHoles(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNEnfoConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrIsInitialized(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNUpgdConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetStartNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrWasPropagationDelayed(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNAddConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrSupportsPermsymDetection(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNChgBds(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetDesc(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNConssFound(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetCheckPriority(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetSepaFreq(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNPropCalls(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNEnfoLPCalls(SCIP_CONSHDLR *conshdlr)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetEnfoPriority(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetSetupTime(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNRespropCalls(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetSepaTime(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconshdlrIsClonable(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNChgVarTypes(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPconshdlrGetRespropTime(SCIP_CONSHDLR *conshdlr)
SCIP_Longint SCIPconshdlrGetNEnfoRelaxCalls(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconsIsLockedNeg(SCIP_CONS *cons)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
void SCIPconsAddUpgradeLocks(SCIP_CONS *cons, int nlocks)
int SCIPconsGetPos(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsConflict(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_Real SCIPconsGetAge(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
int SCIPconsGetActiveDepth(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLockedPos(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagationEnabled(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsMarkedPropagate(SCIP_CONS *cons)
int SCIPconsGetNLocksTypeNeg(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
int SCIPconsGetValidDepth(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsOriginal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsUpdatedeactivate(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
int SCIPconsGetNLocksPos(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLockedType(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInProb(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsGlobal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
int SCIPconsGetNLocksNeg(SCIP_CONS *cons)
int SCIPconsGetNUses(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLockedTypePos(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsSeparationEnabled(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLockedTypeNeg(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsAdded(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsObsolete(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
int SCIPconsGetNLocksTypePos(SCIP_CONS *cons, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
int SCIPlinConsStatsGetSum(SCIP_LINCONSSTATS *linconsstats)
void SCIPlinConsStatsIncTypeCount(SCIP_LINCONSSTATS *linconsstats, SCIP_LINCONSTYPE linconstype, int increment)
int SCIPlinConsStatsGetTypeCount(SCIP_LINCONSSTATS *linconsstats, SCIP_LINCONSTYPE linconstype)
void SCIPlinConsStatsFree(SCIP *scip, SCIP_LINCONSSTATS **linconsstats)
void SCIPlinConsStatsReset(SCIP_LINCONSSTATS *linconsstats)
void SCIPprintLinConsStats(SCIP *scip, FILE *file, SCIP_LINCONSSTATS *linconsstats)
SCIP_RETCODE SCIPlinConsStatsCreate(SCIP *scip, SCIP_LINCONSSTATS **linconsstats)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPsnprintf(char *t, int len, const char *s,...)
void SCIPstrCopySection(const char *str, char startchar, char endchar, char *token, int size, char **endptr)
SCIP_RETCODE SCIPskipSpace(char **s)
static SCIP_DIVESET * diveset
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
static const char * paramname[]
#define BMSduplicateBlockMemoryArray(mem, ptr, source, num)
#define BMSfreeMemory(ptr)
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
#define BMSduplicateMemoryArray(ptr, source, num)
#define BMSclearMemory(ptr)
#define BMScopyMemoryArray(ptr, source, num)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessagePrintError(const char *formatstr,...)
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
SCIP_RETCODE SCIPprobDelCons(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
SCIP_RETCODE SCIPprobAddCons(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
internal methods for storing and manipulating the main problem
public data structures and miscellaneous methods
SCIP_Bool SCIPreoptConsCanBeDeleted(SCIP_REOPT *reopt, SCIP_CONS *cons)
data structures and methods for collecting reoptimization information
int SCIPsepastoreGetNCuts(SCIP_SEPASTORE *sepastore)
internal methods for storing separated cuts
SCIP_RETCODE SCIPsetAddIntParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, 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 SCIPsetAddBoolParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_CONSHDLR * SCIPsetFindConshdlr(SCIP_SET *set, const char *name)
SCIP_STAGE SCIPsetGetStage(SCIP_SET *set)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
internal methods for global SCIP settings
internal methods for problem statistics
SCIP_CONS ** disabledconss
unsigned int nupgradelocks
int nlocksneg[NLOCKTYPES]
unsigned int updatesepaenable
unsigned int updateobsolete
unsigned int updatesepadisable
SCIP_CONSSETCHG * addconssetchg
unsigned int updateenable
unsigned int updateactfocus
unsigned int updateunmarkpropagate
unsigned int updateactivate
SCIP_CONS * transorigcons
unsigned int updatedisable
unsigned int updatedeactivate
unsigned int updatepropenable
unsigned int stickingatnode
int nlockspos[NLOCKTYPES]
unsigned int markpropagate
unsigned int updatemarkpropagate
unsigned int updatepropdisable
unsigned int updateinsert
SCIP_RESULT lastenfolpresult
SCIP_Longint ndomredsfound
SCIP_PRESOLTIMING presoltiming
SCIP_Longint lastenfolpdomchgcount
SCIP_CLOCK * enforelaxtime
int storednmarkedpropconss
SCIP_Longint nenfolpcalls
SCIP_RESULT lastenfopsresult
SCIP_Longint nenforelaxcalls
SCIP_Longint lastsepalpcount
SCIP_Longint lastenfolplpcount
SCIP_Bool sepasolwasdelayed
SCIP_Bool sepalpwasdelayed
SCIP_Longint ncutsapplied
SCIP_RESULT lastenforelaxresult
SCIP_Longint nenfopscalls
SCIP_Longint lastenforelaxrelaxcount
SCIP_Longint storedpropdomchgcount
SCIP_Longint lastenfolpnode
SCIP_PROPTIMING proptiming
SCIP_Longint lastenforelaxnode
SCIP_CONS ** storedpropconss
SCIP_Longint lastpropdomchgcount
SCIP_Longint lastenfopsnode
SCIP_Longint lastenforelaxdomchgcount
SCIP_Longint nrespropcalls
SCIP_CONSHDLRDATA * conshdlrdata
SCIP_Longint lastenfopsdomchgcount
int counter[SCIP_NLINCONSTYPES]
SCIP_Longint nprobholechgs
SCIP_Longint ninitconssadded
SCIP_Longint nprobboundchgs
datastructures for constraints and constraint handlers
SCIP_Bool SCIPtreeProbing(SCIP_TREE *tree)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
internal methods for branch and bound tree
struct SCIP_BranchCand SCIP_BRANCHCAND
#define SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(x)
#define SCIP_DECL_CONSGETPERMSYMGRAPH(x)
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSINITPRE(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSEXIT(x)
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSINITSOL(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
#define SCIP_DECL_CONSDISABLE(x)
struct SCIP_ConsSetChg SCIP_CONSSETCHG
struct SYM_Graph SYM_GRAPH
#define SCIP_DECL_CONSENFORELAX(x)
struct SCIP_LinConsStats SCIP_LINCONSSTATS
#define SCIP_DECL_CONSGETDIVEBDCHGS(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
@ SCIP_LINCONSTYPE_BINPACKING
@ SCIP_LINCONSTYPE_VARBOUND
@ SCIP_LINCONSTYPE_INVKNAPSACK
@ SCIP_LINCONSTYPE_PRECEDENCE
@ SCIP_LINCONSTYPE_AGGREGATION
@ SCIP_LINCONSTYPE_MIXEDBINARY
@ SCIP_LINCONSTYPE_SINGLETON
@ SCIP_LINCONSTYPE_SETCOVERING
@ SCIP_LINCONSTYPE_EQKNAPSACK
@ SCIP_LINCONSTYPE_KNAPSACK
@ SCIP_LINCONSTYPE_SETPARTITION
@ SCIP_LINCONSTYPE_INTKNAPSACK
@ SCIP_LINCONSTYPE_SETPACKING
@ SCIP_LINCONSTYPE_GENERAL
@ SCIP_LINCONSTYPE_CARDINALITY
#define SCIP_DECL_CONSACTIVE(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSENABLE(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_NLINCONSTYPES
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
enum SCIP_LinConstype SCIP_LINCONSTYPE
#define SCIP_DECL_CONSDELVARS(x)
struct SCIP_Diveset SCIP_DIVESET
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
struct SCIP_HashMap SCIP_HASHMAP
#define SCIP_DECL_SORTPTRCOMP(x)
#define SCIP_DECL_HASHGETKEY(x)
struct SCIP_Prob SCIP_PROB
struct SCIP_Reopt SCIP_REOPT
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_SepaStore SCIP_SEPASTORE
struct SCIP_Stat SCIP_STAT
#define SCIP_PRESOLTIMING_MAX
#define SCIP_PRESOLTIMING_FINAL
unsigned int SCIP_PROPTIMING
#define SCIP_PRESOLTIMING_MEDIUM
unsigned int SCIP_PRESOLTIMING
#define SCIP_PROPTIMING_AFTERLPLOOP
#define SCIP_PRESOLTIMING_FAST
#define SCIP_PRESOLTIMING_EXHAUSTIVE
#define SCIP_PROPTIMING_BEFORELP
#define SCIP_PROPTIMING_ALWAYS
#define SCIP_PROPTIMING_DURINGLPLOOP
struct SCIP_Tree SCIP_TREE
struct SCIP_BdChgIdx SCIP_BDCHGIDX
enum SCIP_LockType SCIP_LOCKTYPE
internal methods for problem variables