cons_pseudoboolean.c
Go to the documentation of this file.
23 * The constraint handler deals with pseudo Boolean constraints. These are constraints of the form 25 * \mbox{lhs} \leq \sum_{k=0}^m c_k \cdot x_k + \sum_{i=0}^n c_i \cdot \prod_{j \in I_i} x_j \leq \mbox{rhs} 32 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 54 #define CONSHDLR_ENFOPRIORITY -1000000 /**< priority of the constraint handler for constraint enforcing */ 55 #define CONSHDLR_CHECKPRIORITY -5000000 /**< priority of the constraint handler for checking feasibility */ 56 #define CONSHDLR_EAGERFREQ 100 /**< frequency for using all instead of only the useful constraints in separation, 58 #define CONSHDLR_MAXPREROUNDS -1 /**< maximal number of presolving rounds the constraint handler participates in (-1: no limit) */ 59 #define CONSHDLR_NEEDSCONS TRUE /**< should the constraint handler be skipped, if no constraints are available? */ 61 #define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_MEDIUM /**< presolving timing of the constraint handler (fast, medium, or exhaustive) */ 63 #define DEFAULT_DECOMPOSENORMALPBCONS FALSE /**< decompose all normal pseudo boolean constraint into a "linear" constraint and "and" constraints */ 64 #define DEFAULT_DECOMPOSEINDICATORPBCONS TRUE /**< decompose all indicator pseudo boolean constraint into a "linear" constraint and "and" constraints */ 66 #define DEFAULT_SEPARATENONLINEAR TRUE /**< if decomposed, should the nonlinear constraints be separated during LP processing */ 67 #define DEFAULT_PROPAGATENONLINEAR TRUE /**< if decomposed, should the nonlinear constraints be propagated during node processing */ 68 #define DEFAULT_REMOVABLENONLINEAR TRUE /**< if decomposed, should the nonlinear constraints be removable */ 74 #define HASHSIZE_PSEUDOBOOLEANNONLINEARTERMS 131101 /**< minimal size of hash table in and constraint tables */ 77 /* - create special linear(knapsack, setppc, logicor, (eqknapsack)) and and-constraints with check flags FALSE, to 78 * get smaller amount of locks on the term variables, do all presolving ...?! in these constraint handlers 80 * - do the checking here, lock and-resultants in both directions and all and-variables according to their 82 * @note this only works if the and-resultant has no objective cofficient, otherwise we need to lock variables also in both directions 84 * - need to keep and constraint pointer for special propagations like if two ands are due to their variables in 88 * check/IP/PseudoBoolean/normalized-PB07/OPT-SMALLINT-NLC/submittedPB07/manquinho/bsg/normalized-bsg_1000_25_1.opb.gz 109 /* @todo - in and-constraint better count nfixed zeros in both directions and maybe nfixedones for better propagation 111 * - do better conflict analysis by choosing the earliest fixed variable which led to a conflict instead of maybe 114 * - how to make sure that we aggregate in a right way, when aggregating a resultant and a "normal" variable, 115 * maybe add in SCIPaggregateVars a check for original variables, to prefer them if the variable type is the 116 * same; probably it would be better too if we would aggregate two resultants that the one with less variables 119 * @note since product resultants are artificial, we do not care for their solution value, but this can lead to fixation 120 * of the resultant not representing the product, in 'optimization mode' we do not care, but this might make 126 { 140 }; 150 SCIP_LINEARCONSTYPE linconstype; /**< type of linear constraint which represents this pseudoboolean constraint */ 184 CONSANDDATA** allconsanddatas; /**< array of all and-constraint data objects inside the whole problem, 196 SCIP_Bool decomposenormalpbcons;/**< decompose the pseudo boolean constraint into a "linear" constraint and "and" constraints */ 197 SCIP_Bool decomposeindicatorpbcons;/**< decompose the indicator pseudo boolean constraint into a "linear" constraint and "and" constraints */ 208 /** comparison method for sorting consanddatas according to the index of their corresponding resultant variables, if a 209 * consanddata object is delete it is handled like it has an inactive resultant, so this will be put in front while 214 { 281 /** returns TRUE iff both keys are equal; two non-linear terms are equal if they have the same variables */ 284 { 373 /** initializes the hashmap and -table used in this constraint handler data for artificial variables and specific 395 SCIP_CALL( SCIPhashtableCreate(&((*conshdlrdata)->hashtable), SCIPblkmem(scip), (*conshdlrdata)->hashtablesize, 400 SCIP_CALL( SCIPhashmapCreate(&((*conshdlrdata)->hashmap), SCIPblkmem(scip), (*conshdlrdata)->hashmapsize) ); 423 SCIP_CALL( SCIPallocBlockMemoryArray(scip, &((*conshdlrdata)->allconsanddatas), (*conshdlrdata)->sallconsanddatas ) ); 470 SCIPfreeBlockMemoryArray(scip, &((*conshdlrdata)->allconsanddatas), (*conshdlrdata)->sallconsanddatas ); 593 SCIP_VAR**const vars, /**< array to store sorted (after indices) variables of linear constraint */ 743 /** calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 744 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 754 SCIP_VAR**const linvars, /**< array to store not and-resultant variables of linear constraint, or NULL */ 755 SCIP_Real*const lincoefs, /**< array to store coefficients of not and-resultant variables of linear 758 SCIP_VAR**const andress, /**< array to store and-resultant variables of linear constraint, or NULL */ 761 SCIP_Bool*const andnegs, /**< array to store negation status of and-resultant variables of linear 790 /* @note it is necessary that the linear constraint is merged (not needed for negated variables) and sorted after 818 /* if and resultant is not a resultant anymore (meaning the corresponding and-constraint was deleted/upgraded), 825 CONSANDDATA* consanddata = (CONSANDDATA*) SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)(hashmapvar)); 933 SCIP_CALL_ABORT( getLinearConsSides(scip, consdata->lincons, consdata->linconstype, &newlhs, &newrhs) ); 955 SCIP_CALL_ABORT( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 959 SCIP_CALL_ABORT( getLinVarsAndAndRess(scip, cons, vars, coefs, nvars, linvars, lincoefs, &nlinvars, 977 if( res == andresultant && consdata->andnegs[c] == andnegs[v] && consdata->andcoefs[c] == andcoefs[v] ) 980 assert(SCIPvarIsActive(res) || (SCIPvarIsNegated(res) && SCIPvarIsActive(SCIPvarGetNegationVar(res)))); 983 /* all and-resultants should be merged, so it is only allowed that each variable exists one time */ 1013 /** transforming transformed consanddata object back to original space, if an corresponding original constraint exists, 1087 SCIP_CALL( SCIPduplicateBlockMemoryArray(scip, &(consanddata->vars), SCIPgetVarsAnd(scip, consanddata->origcons), consanddata->nvars) ); 1100 assert(consanddata == (CONSANDDATA*)(SCIPhashtableRetrieve(conshdlrdata->hashtable, (void*)consanddata))); 1101 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->origcons))); 1102 assert(consanddata == (CONSANDDATA*)(SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->origcons)))); 1132 assert(consanddata == (CONSANDDATA*)(SCIPhashtableRetrieve(conshdlrdata->hashtable, (void*)consanddata))); 1133 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->origcons))); 1134 assert(consanddata == (CONSANDDATA*)(SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->origcons)))); 1150 SCIP_CONS*const lincons, /**< linear constraint with artificial and-resultants representing this pseudoboolean constraint */ 1152 SCIP_CONS**const andconss, /**< array of and-constraints which occur in this pseudoboolean constraint */ 1154 SCIP_Bool*const andnegs, /**< negation status of and-constraints (or NULL, if no negated resultants) */ 1159 SCIP_VAR* const intvar, /**< a artificial variable which was added only for the objective function, 1193 SCIPerrorMessage("left hand side of pseudo boolean constraint greater than right hand side\n"); 1238 /* do not capture the and constraint when scip is in transformed mode; this automatically happens in 1265 SCIP_CALL( SCIPduplicateBlockMemoryArray(scip, &((*consdata)->andcoefs), andcoefs, nandconss) ); 1292 (*consdata)->consanddatas[c] = (CONSANDDATA*) SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)andress[c]); 1294 assert((*consdata)->consanddatas[c]->origcons == andconss[c] || (*consdata)->consanddatas[c]->cons == andconss[c]); 1299 if( (*consdata)->consanddatas[c]->origcons != NULL && (*consdata)->consanddatas[c]->cons == NULL ) 1305 /* do not capture the and constraint when scip is in transformed mode; this automatically happens in 1308 SCIP_CALL( SCIPtransformCons(scip, (*consdata)->consanddatas[c]->origcons, &((*consdata)->consanddatas[c]->cons)) ); 1322 /* resort variables in transformed problem, because the order might change while tranforming */ 1345 SCIPsortPtrPtrRealBool((void**)andress, (void**)((*consdata)->consanddatas), (*consdata)->andcoefs, (*consdata)->andnegs, SCIPvarComp, nandconss); 1410 /* count down uses and if necessary release constraints and delete data from hashtable and -map */ 1426 /* if the consanddata is not used anymore, release the constraint and clear the hashmap- and table */ 1440 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->cons))); 1441 SCIP_CALL( SCIPhashmapRemove(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->cons)) ); 1461 conshdlrdata->allconsanddatas[d] = conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas]; 1481 /* if the consanddata is not used anymore, release the constraint and clear the hashmap- and table */ 1494 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->origcons))); 1495 SCIP_CALL( SCIPhashmapRemove(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->origcons)) ); 1527 conshdlrdata->allconsanddatas[d] = conshdlrdata->allconsanddatas[conshdlrdata->nallconsanddatas]; 1594 assert(consanddatas[c] == (CONSANDDATA*)(SCIPhashtableRetrieve(conshdlrdata->hashtable, (void*)consanddatas[c]))); 1595 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->origcons))); 1596 assert(consanddatas[c] == (CONSANDDATA*)(SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddatas[c]->origcons)))); 1611 /** check the locks of an AND resultant and removes it from all global structures if the resultant is not locked anymore */ 1621 /* the resultant has no locks left and might be dual fixed now, we need to delete all its cliques */ 1657 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 1704 CONSANDDATA*const consanddata, /**< CONSANDDATA object for which we want to delete the locks */ 1808 /* more than one and-constraint is needed, otherwise this pseudoboolean constraint should be upgraded to a linear constraint */ 1830 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 1833 /* calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 1834 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 1841 /* number of variables should be consistent, number of 'real' linear variables plus number of and-constraints should 1897 SCIPinfoMessage(scip, file, " %+.15g %s<%s>[B]", andcoefs[v], negated ? "~" : "", SCIPvarGetName(aggrvar)); 1980 SCIP_Bool const stickingatnode, /**< should the constraint always be kept at the node where it was added, even 2070 (void)SCIPsnprintf(name, SCIP_MAXSTRLEN, ARTIFICIALVARNAMEPREFIX"%d", conshdlrdata->nallconsanddatas); 2074 #if 1 /* @todo: check whether we want to branch on artificial variables, the test results show that it is of advantage */ 2082 #if 0 /* does not work for since the value of artificial resultants must not be equal to the value computed by their 2102 if( (SCIPvarIsOriginal(resultant) || SCIPvarIsTransformedOrigvar(resultant)) && !SCIPisFeasEQ(scip, debugsolval, val) ) 2104 SCIPerrorMessage("computed solution value %g for resultant <%s> violates debug solution value %g\n", val, SCIPvarGetName(resultant), debugsolval); 2140 SCIP_CALL( SCIPensureBlockMemoryArray(scip, &(conshdlrdata->allconsanddatas), &(conshdlrdata->sallconsanddatas), SCIPcalcMemGrowSize(scip, conshdlrdata->sallconsanddatas + 1)) ); 2227 SCIPconsIsInitial(cons), SCIPconsIsEnforced(cons), SCIPconsIsChecked(cons), SCIPconsIsLocal(cons), 2235 SCIP_CALL( SCIPensureBlockMemoryArray(scip, &(consdata->consanddatas), &(consdata->sconsanddatas), consdata->sconsanddatas + 1) ); 2242 consdata->consanddatas[consdata->nconsanddatas] = (CONSANDDATA*) SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)res); 2284 SCIP_CALL( lockRoundingAndCons(scip, cons, consdata->consanddatas[consdata->nconsanddatas - 1], val, consdata->lhs, consdata->rhs) ); 2392 SCIP_CALL( getLinearConsSides(scip, consdata->lincons, consdata->linconstype, &oldlhs, &oldrhs) ); 2414 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 2417 /* calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 2418 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 2421 SCIP_CALL( getLinVarsAndAndRess(scip, cons, vars, coefs, nvars, linvars, lincoefs, &nlinvars, andress, andcoefs, andnegs, &nandress) ); 2507 /* check whether the left hand side is increased, if and only if that's the case we maybe can propagate, tighten and add more cliques */ 2565 SCIP_CALL( getLinearConsSides(scip, consdata->lincons, consdata->linconstype, &oldlhs, &oldrhs) ); 2587 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 2590 /* calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 2591 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 2594 SCIP_CALL( getLinVarsAndAndRess(scip, cons, vars, coefs, nvars, linvars, lincoefs, &nlinvars, andress, andcoefs, andnegs, &nandress) ); 2680 /* check whether the right hand side is decreased, if and only if that's the case we maybe can propagate, tighten and add more cliques */ 2730 SCIP_Bool const stickingatnode, /**< should the constraint always be kept at the node where it was added, even 2807 SCIP_Bool const removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 2810 SCIP_Bool const stickingatnode, /**< should the constraint always be kept at the node where it was added, even 2815 SCIP_LINEARCONSTYPE*const linconstype /**< pointer to store the type of the linear constraint */ 2926 SCIPdebugMessage("While creating the linear constraint of the pseudoboolean constraint we found %d zero coefficients that were removed\n", nzero); 2941 * - logic or constraints have left hand side of +1.0, and right hand side of +infinity: x(S) >= 1.0 2953 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 2987 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3001 /* check, if linear constraint can be upgraded to set partitioning, packing, or covering constraint 3002 * - all set partitioning / packing / covering constraints consist only of binary variables with a 3009 * - a set partitioning constraint has left hand side of +1.0, and right hand side of +1.0 : x(S) == 1.0 3011 * - a set packing constraint has left hand side of -infinity, and right hand side of +1.0 : x(S) <= 1.0 3013 * - a set covering constraint has left hand side of +1.0, and right hand side of +infinity: x(S) >= 1.0 3021 if( SCIPisEQ(scip, *lhs, *rhs) && (SCIPisEQ(scip, *lhs, 1.0 - ncoeffsnone) || SCIPisEQ(scip, *lhs, ncoeffspone - 1.0)) ) 3025 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 3059 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3075 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 3109 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3127 SCIPwarningMessage(scip, "Does not expect this, because this constraint should be a set packing constraint.\n"); 3131 SCIPwarningMessage(scip, "Does not expect this, because this constraint should be a logicor constraint.\n"); 3136 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 3170 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3190 if( upgrconshdlr != NULL && !created && (ncoeffspone + ncoeffsnone + ncoeffspint + ncoeffsnint == nvars) && (SCIPisInfinity(scip, -*lhs) != SCIPisInfinity(scip, *rhs)) ) 3204 /* if the right hand side is non-infinite, we have to negate all variables with negative coefficient; 3205 * otherwise, we have to negate all variables with positive coefficient and multiply the row with -1 3258 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3279 if( upgrconshdlr != NULL && !created && (ncoeffspone + ncoeffsnone + ncoeffspint + ncoeffsnint == nvars) && SCIPisEQ(scip, *lhs, *rhs) ) 3346 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3368 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3466 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 3469 /* number of variables should be consistent, number of 'real' linear variables plus number of and-constraints should 3486 /* split variables into original and artificial variables and compute activity on normal linear variables (without 3553 /* if after during or before presolving a solution will be transformed into original space and will be checked 3554 * there, but origcons was already removed and only the pointer to the transformed and-constraint is existing 3590 SCIPinfoMessage(scip, NULL, "violation: left hand side is violated by %.15g\n", lhs - activity); 3606 SCIPinfoMessage(scip, NULL, "violation: right hand side is violated by %.15g\n", activity - rhs); 3623 /** checks all and-constraints inside the pseudoboolean constraint handler for feasibility of given solution or current 3706 SCIP_HASHMAP*const varmap, /**< a SCIP_HASHMAP mapping variables of the source SCIP to corresponding 3708 SCIP_HASHMAP*const consmap, /**< a hashmap to store the mapping of source constraints to the corresponding 3718 SCIP_Bool const removable, /**< should the relaxation be removed from the LP due to aging or cleanup? */ 3719 SCIP_Bool const stickingatnode, /**< should the constraint always be kept at the node where it was added, even 3795 SCIP_CALL( SCIPgetConsCopy(sourcescip, targetscip, sourcelincons, &targetlincons, conshdlrlinear, varmap, consmap, SCIPconsGetName(sourcelincons), 3796 SCIPconsIsInitial(sourcelincons), SCIPconsIsSeparated(sourcelincons), SCIPconsIsEnforced(sourcelincons), SCIPconsIsChecked(sourcelincons), 3797 SCIPconsIsPropagated(sourcelincons), SCIPconsIsLocal(sourcelincons), SCIPconsIsModifiable(sourcelincons), SCIPconsIsDynamic(sourcelincons), 3804 /* @note due to copying special linear constraints, now leads only to simple linear constraints, we check that 3805 * our target constraint handler is the same as our source constraint handler of the linear constraint, 3848 SCIP_CALL( SCIPgetConsCopy(sourcescip, targetscip, oldcons, &targetandconss[ntargetandconss], conshdlrand, varmap, consmap, SCIPconsGetName(oldcons), 3849 SCIPconsIsInitial(oldcons), SCIPconsIsSeparated(oldcons), SCIPconsIsEnforced(oldcons), SCIPconsIsChecked(oldcons), 3850 SCIPconsIsPropagated(oldcons), SCIPconsIsLocal(oldcons), SCIPconsIsModifiable(oldcons), SCIPconsIsDynamic(oldcons), 3866 SCIPdebugMessage("no and-constraints copied for pseudoboolean constraint <%s>\n", SCIPconsGetName(sourcecons)); 3885 SCIP_CALL( SCIPgetVarCopy(sourcescip, targetscip, indvar, &indvar, varmap, consmap, global, valid) ); 3891 SCIP_CALL( SCIPgetVarCopy(sourcescip, targetscip, intvar, &intvar, varmap, consmap, global, valid) ); 3905 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 3909 SCIPverbMessage(sourcescip, SCIP_VERBLEVEL_MINIMAL, NULL, "could not copy constraint <%s>\n", SCIPconsGetName(sourcecons)); 3985 assert(consanddata->nnewvars == 0 && ((consanddata->snewvars > 0) == (consanddata->newvars != NULL))); 4027 /* check for changings, if and-constraint did not change we do not need to copy all variables */ 4051 SCIP_CALL( SCIPensureBlockMemoryArray(scip, &(consanddata->newvars), &(consanddata->snewvars), nnewvars) ); 4075 CONSANDDATA*const consanddata, /**< CONSANDDATA object for which we want to delete the locks and the 4103 CONSANDDATA*const consanddata, /**< CONSANDDATA object for which we want to delete the locks and the 4135 SCIP_Real*const andcoefs, /**< current and-resultants-coeffcients in pseudoboolean constraint */ 4136 SCIP_Bool*const andnegs, /**< current negation status of and-resultants in pseudoboolean constraint */ 4167 SCIPsortPtrRealBool((void**)(consdata->consanddatas), consdata->andcoefs, consdata->andnegs, resvarCompWithInactive, consdata->nconsanddatas); 4182 /* check that consanddata objects are sorted due to the index of the corresponding resultants, and coefficents are 4276 /* collect new consanddata objects in sorted order due to the variable index of corresponding and-resultants */ 4283 SCIP_CALL( removeOldLocks(scip, cons, consanddatas[c], oldandnegs[c] ? -oldandcoefs[c] : oldandcoefs[c], 4294 newconsanddatas[nnewconsanddatas] = (CONSANDDATA*) SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)res2); 4300 SCIP_CALL( addNewLocks(scip, cons, newconsanddatas[nnewconsanddatas], newandnegs[nnewconsanddatas] ? 4333 lhschanged = (SCIPisInfinity(scip, -consdata->lhs) && !SCIPisInfinity(scip, -newlhs)) || (!SCIPisInfinity(scip, -consdata->lhs) && SCIPisInfinity(scip, -newlhs)) 4335 rhschanged = (SCIPisInfinity(scip, consdata->rhs) && !SCIPisInfinity(scip, newrhs)) || (!SCIPisInfinity(scip, consdata->rhs) && SCIPisInfinity(scip, newrhs)) 4339 if( coefsignchanged || lhschanged || rhschanged || newconsanddatas[nnewconsanddatas]->nnewvars > 0) 4344 SCIP_CALL( addNewLocks(scip, cons, newconsanddatas[nnewconsanddatas], newandnegs[nnewconsanddatas] ? 4393 SCIP_CALL( removeOldLocks(scip, cons, consanddatas[c], oldandnegs[c] ? -oldandcoefs[c] : oldandcoefs[c], 4410 newconsanddatas[nnewconsanddatas] = (CONSANDDATA*) SCIPhashmapGetImage(conshdlrdata->hashmap, (void*)res2); 4416 SCIP_CALL( addNewLocks(scip, cons, newconsanddatas[nnewconsanddatas], newandnegs[nnewconsanddatas] ? 4448 SCIP_CALL( getLinearConsNVars(scip, consdata->lincons, consdata->linconstype, &(consdata->nlinvars)) ); 4460 /* we need to re-sort and-constraints after indices of corresponding and-resultants, since we might have replaced 4463 SCIPsortPtrRealBool((void**)(consdata->consanddatas), consdata->andcoefs, consdata->andnegs, resvarCompWithInactive, consdata->nconsanddatas); 4470 /* check that consanddata objects are sorted with respect to the index of the corresponding resultants */ 4526 /* if we have no and-constraints left, we should not be here and this constraint should be deleted (only the linaer should survive) */ 4554 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, NULL, &nvars) ); 4556 /* calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 4557 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 4597 if( !SCIPvarIsActive(var1) && (!SCIPvarIsNegated(var1) || !SCIPvarIsActive(SCIPvarGetNegationVar(var1))) ) 4614 if( !SCIPvarIsActive(var2) && (!SCIPvarIsNegated(var2) || !SCIPvarIsActive(SCIPvarGetNegationVar(var2))) ) 4626 /* if variable in and-constraint1 is the negated variable of a normal linear variable, than we can add a 4627 * clique between the and-resultant and the normal linear variable, negated variables are not save in 4649 /* @todo: check whether it is better to only add the clique or to add the setppc constraint or do both */ 4658 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "%s_clq_%s_%s", SCIPconsGetName(cons), SCIPvarGetName(clqvars[0]), SCIPvarGetName(clqvars[1]) ); 4671 /* if a variable in an and-constraint is in a clique with another normal linear variable, we can add the 4692 /* @todo: check whether it is better to only add the clique or to add the setppc constraint or do both */ 4701 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "%s_clq_%s_%s", SCIPconsGetName(cons), SCIPvarGetName(clqvars[0]), SCIPvarGetName(clqvars[1]) ); 4767 if( !SCIPvarIsActive(var1) && (!SCIPvarIsNegated(var1) || !SCIPvarIsActive(SCIPvarGetNegationVar(var1))) ) 4784 if( !SCIPvarIsActive(var2) && (!SCIPvarIsNegated(var2) || !SCIPvarIsActive(SCIPvarGetNegationVar(var2))) ) 4796 /* if a variable in and-constraint1 is the negated variable of a variable in and-constraint2, than we can 4818 /* @todo: check whether it is better to only add the clique or to add the setppc constraint or do both */ 4827 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "%s_clq_%s_%s", SCIPconsGetName(cons), SCIPvarGetName(clqvars[0]), SCIPvarGetName(clqvars[1]) ); 4840 /* if a variable in an and-constraint is in a clique with a variable in another and-constraint, we can add 4862 /* @todo: check whether it is better to only add the clique or to add the setppc constraint or do both */ 4871 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "%s_clq_%s_%s", SCIPconsGetName(cons), SCIPvarGetName(clqvars[0]), SCIPvarGetName(clqvars[1]) ); 5010 assert(consanddata->nnewvars == 0 || (consanddata->newvars != NULL && consanddata->snewvars > 0)); 5056 /* the consanddata object is not used anymore, so extract the and constraint and delete other data */ 5082 /* @note due to aggregations or fixings the resultant may need to be propagated later on, so we can only 5106 /* all inactive variables have a loose, column, fixed or multi-aggregated variable as counterpart, 5127 SCIP_CALL( SCIPgetProbvarLinearSum(scip, activevars, activescalars, &nactivevars, SCIPgetNVars(scip), 5147 assert(SCIPvarGetStatus(activevars[i]) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(activevars[i]) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(activevars[i]) == SCIP_VARSTATUS_FIXED); 5155 assert(SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_FIXED); 5166 if( SCIPsortedvecFindPtr((void**)fixedvars, SCIPvarComp, SCIPgetResultantAnd(scip, consanddata->cons), nfixedvars, &pos) ) 5198 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->cons))); 5199 SCIP_CALL( SCIPhashmapRemove(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->cons)) ); 5264 /** update the uses counter of consandata objects which are used in pseudoboolean constraint, that were deleted and 5310 SCIP_CALL( removeOldLocks(scip, cons, consanddata, consdata->andcoefs[c], consdata->lhs, consdata->rhs) ); 5344 /* @note due to aggregations or fixings the resultant may need to be propagated later on, so we can only 5365 /* all inactive variables have a loose, column, fixed or multi-aggregated variable as counterpart, but 5369 * @todo for multi-aggregated variables check also all active representatives for this resultant 5376 assert(SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_LOOSE || SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(fixedvars[w]) == SCIP_VARSTATUS_FIXED); 5389 /* we can only delete and constraints if the resultant is an artificial variable and also active, because 5390 * then the assigned value is not of interest and the artificial and constraint does not need to be 5393 * if this variable is not such an artificial variable we need the IRRELEVANT vartype which should be the 5399 strncmp(SCIPvarGetName(resvar)+2, ARTIFICIALVARNAMEPREFIX, strlen(ARTIFICIALVARNAMEPREFIX)) == 0 5410 /* @note due to aggregations or fixings the resultant may need to be propagated later on, so we can only 5439 assert(SCIPhashmapExists(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->cons))); 5440 SCIP_CALL( SCIPhashmapRemove(conshdlrdata->hashmap, (void*)SCIPgetResultantAnd(scip, consanddata->cons)) ); 5453 /* maximal number to enumerate solutions for one pseudoboolean constraint to check for an upgrade to an XOR constraint */ 5456 /** calculate result for a given pseudoboolean constraint with given values, this is used to decide whether a 5476 SCIP_Bool*const consanddatanegs, /**< negation status of and resultants in pseudo-boolean constraint */ 5514 if( SCIPsortedvecFindPtr((void**)vars, SCIPvarCompActiveAndNegated, linvars[v], nvars, &pos) ) /*lint !e613*/ 5540 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 5563 assert(!negated[v] || (SCIPvarIsNegated(repvars[v]) && SCIPvarGetNegatedVar(repvars[v]) != NULL)); 5628 /** try upgrading pseudoboolean linear constraint to an XOR constraint and/or remove possible and-constraints 5630 * @note An XOR(x_1,..,x_n) = 1 <=> XOR(x1,..,~x_j,..,x_n) = 0, for j in {1,..,n}, which is not yet checked while 5697 assert(consdata->linconstype == SCIP_LINEARCONSTYPE_LINEAR || consdata->linconstype == SCIP_LINEARCONSTYPE_SETPPC); 5700 if( !SCIPisEQ(scip, consdata->lhs, consdata->rhs) || (!SCIPisEQ(scip, consdata->lhs, 1.0) && !SCIPisZero(scip, consdata->lhs)) ) 5727 SCIP_CALL( getLinearConsVarsData(scip, lincons, consdata->linconstype, allvars, allcoefs, &nallvars) ); 5731 SCIP_CALL( getLinVarsAndAndRess(scip, cons, allvars, allcoefs, nallvars, linvars, lincoefs, &nlinvars, 5739 SCIP_CALL( SCIPgetProbvarLinearSum(scip, linvars, lincoefs, &nlinvars, MAXNVARS, &constant, &requiredsize, TRUE) ); 5780 /* determine all different variables over the linear variables and all variables in all and constraints */ 5790 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 5829 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 5857 /* check values for variables which result in solutions which in the end lead to an XOR upgrade */ 5873 SCIP_CALL( checkSolution(scip, linvars, nlinvars, values, activelinvars, lincoefs, firstnlinvars, constant, 5887 SCIP_CALL( SCIPcreateConsXor(scip, &newcons, newname, (unsigned int) xortype, nlinvars, linvars, 5888 SCIPconsIsInitial(lincons), SCIPconsIsSeparated(lincons), SCIPconsIsEnforced(lincons), SCIPconsIsChecked(lincons), 5890 SCIPconsIsDynamic(lincons), SCIPconsIsRemovable(lincons), SCIPconsIsStickingAtNode(lincons)) ); 5923 /** try upgrading pseudoboolean logicor constraint to a linear constraint and/or remove possible and-constraints */ 5988 /* if we have only one term left in the logicor constraint, the presolving should be done by the logicor 5996 /* for every old logicor constraint: sum_i (x_i) + res >= 1 , with an and-constraint of res as the resultant, 6009 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 6028 SCIPconsIsInitial(lincons), SCIPconsIsSeparated(lincons), SCIPconsIsEnforced(lincons), SCIPconsIsChecked(lincons), 6030 SCIPconsIsDynamic(lincons), SCIPconsIsRemovable(lincons), SCIPconsIsStickingAtNode(lincons)) ); 6045 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, allvars, allcoefs, &nallvars) ); 6049 SCIP_CALL( getLinVarsAndAndRess(scip, cons, allvars, allcoefs, nallvars, linvars, lincoefs, &nlinvars, 6129 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 6198 /* if all and-constraints in pseudoboolean constraint have some equal variables we can extract them and create a new 6199 * linear constraint; iff the number of equal variables is equal to the number of variables - 1 in all consanddata 6200 * objects then the new constraint will not contain any products; if no normal linear variables exist we can fix all 6210 * => x1 = 1 /\ x2 * x3 + x4 >= 1 (constraint is created indirectly, caused by the fixing of x1) 6231 /* if we have no normal linear variable in the logicor constraint, we can fix all equal variables */ 6237 /* fix all equal variable in logicor constraints which have to be one to fulfill the constraint */ 6252 /* if a complete consanddata object have all variables in common with all other consanddata objects, than we can 6283 SCIPconsIsInitial(lincons), SCIPconsIsSeparated(lincons), SCIPconsIsEnforced(lincons), SCIPconsIsChecked(lincons), 6285 SCIPconsIsDynamic(lincons), SCIPconsIsRemovable(lincons), SCIPconsIsStickingAtNode(lincons)) ); 6287 /* if createcons == TRUE add all variables which are not in the eqvars array to the new constraint with 6300 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 6351 /* if we have normal linear variable in the logicor constraint, we did not fix all equal variables and we have to 6353 * we have to add also all normal linear variables with a coefficient of 'nconsanddatas * neqvars + 1' 6381 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 6397 SCIP_CALL( SCIPaddCoefLinear(scip, newcons, linvars[v], (SCIP_Real)(nconsanddatas * neqvars + 1)) ); /*lint !e732 !e790*/ 6401 SCIP_CALL( SCIPchgLhsLinear(scip, newcons, (SCIP_Real)(nconsanddatas * neqvars + 1)) ); /*lint !e732 !e790*/ 6435 /** try upgrading pseudoboolean setppc constraint to a linear constraint and/or remove possible and-constraints */ 6500 /* if we have only one term left in the setppc constraint, the presolving should be done by the setppc constraint handler */ 6509 * sum_i (x_i) + res <= 1 , with and-constraint of res as the resultant like res = y_1 * ... * y_n 6574 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 6642 /* if all and-constraints in pseudoboolean constraint have the same length and some equal variables we can upgrade 6658 * => x1 = 1 /\ x2 * x3 + x4 == 1 (constraint is created indirectly, caused by the fixing of x1) 6672 if( neqvars > 0 && ((nminvars == nmaxvars && nminvars == neqvars + 1) || (nminvars == neqvars) || (type == SCIP_SETPPCTYPE_PARTITIONING)) ) 6699 /* if one and-constraint was completely contained in all other and-constraints, we have to reduced the right hand 6705 createcons = (SCIPisLE(scip, lhs, rhs) && ((nminvars == nmaxvars && nminvars == neqvars + 1) || (nminvars == neqvars))); 6717 SCIPconsIsInitial(lincons), SCIPconsIsSeparated(lincons), SCIPconsIsEnforced(lincons), SCIPconsIsChecked(lincons), 6719 SCIPconsIsDynamic(lincons), SCIPconsIsRemovable(lincons), SCIPconsIsStickingAtNode(lincons)) ); 6722 /* if createcons == TRUE add all variables which are not in the eqvars array to the new constraint with 6725 * otherwise (if createcons == FALSE) fix all variables to zero which are not in the eqvars array and if we have a 6738 /* choose correct variable array to add locks for, we only add locks for now valid variables */ 6751 /* if the consanddata object has at least two more different variables then the equal variables we have to fix the resultant to zero */ 6757 SCIP_CALL( SCIPfixVar(scip, SCIPgetResultantAnd(scip, consanddata->cons), 0.0, &infeasible, &fixed) ); 6770 /* if the consanddata object has at exactly one more different variable then the equal variables we have to fix it to zero */ 6843 /* fix all equal variable in set-partitioning constraints which have to be one, in set-packing constraint we have 6874 SCIP_CALL( SCIPchgRhsLinear(scip, newcons, rhs + (SCIP_Real)((nconsanddatas - 1) * neqvars)) ); /*lint !e790*/ 6911 /** try upgrading pseudoboolean constraint to a linear constraint and/or remove possible and-constraints */ 6950 /* if no consanddata-objects in pseudoboolean constraint are left, create the corresponding linear constraint */ 6956 /* @TODO: maybe it is better to create everytime a standard linear constraint instead of letting the special 6972 SCIP_CALL( tryUpgradingXor(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, cutoff) ); 6975 SCIP_CALL( tryUpgradingLogicor(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, cutoff) ); 6980 SCIP_CALL( tryUpgradingSetppc(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, cutoff) ); 6983 SCIP_CALL( tryUpgradingXor(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, cutoff) ); 6988 SCIP_CALL( tryUpgradingXor(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, cutoff) ); 6998 /* update the uses counter of consandata objects which are used in pseudoboolean constraint, which was deleted and 7057 if( consdata->linconstype != SCIP_LINEARCONSTYPE_SETPPC || SCIPgetTypeSetppc(scip, consdata->lincons) != SCIP_SETPPCTYPE_PARTITIONING ) 7125 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 7126 assert(SCIPvarIsActive(repvars[v-1]) || (SCIPvarIsNegated(repvars[v-1]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v-1])))); 7143 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 7183 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 7184 assert(SCIPvarIsActive(repvars[v-1]) || (SCIPvarIsNegated(repvars[v-1]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v-1])))); 7201 assert(SCIPvarIsActive(repvars[v]) || (SCIPvarIsNegated(repvars[v]) && SCIPvarIsActive(SCIPvarGetNegationVar(repvars[v])))); 7205 if( SCIPsortedvecFindPtr((void**)allvars, SCIPvarCompActiveAndNegated, repvars[v], nvars, &pos) ) 7259 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, consvars, conscoefs, &nconsvars) ); 7272 SCIP_CALL( getLinVarsAndAndRess(scip, cons, consvars, conscoefs, nconsvars, &linvar, &lincoef, &nlinvars, 7312 SCIPdebugMessage("aggregating variables <%s> == 1 - <%s> in pseudoboolean <%s>\n", SCIPvarGetName(linvar), SCIPvarGetName(var), SCIPconsGetName(cons)); 7314 SCIP_CALL( SCIPaggregateVars(scip, linvar, var, 1.0, 1.0, 1.0, &infeasible, &redundant, &aggregated) ); 7317 SCIPdebugMessage("aggregation of variables: <%s> == 1 - <%s>, infeasible = %u, aggregated = %u\n", SCIPvarGetName(linvar), SCIPvarGetName(var), infeasible, aggregated); 7336 /* delete allvars[samepos] from all and-constraints which appear in this pseudoboolean constraint, and delete 7339 * it is the same like aggregating linvar with the resultant of the product, which is the same in all and- 7350 * @todo: implement more general step, that one combination of the variables in the and constraints is missing in 7351 * the pseudoboolean constraint, which leads to the same result, that the only linear variable is the 7372 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, consvars, conscoefs, &nconsvars) ); 7385 SCIP_CALL( getLinVarsAndAndRess(scip, cons, consvars, conscoefs, nconsvars, &linvar, &lincoef, &nlinvars, 7423 (void)SCIPsnprintf(name, SCIP_MAXSTRLEN, "andcons_%s_%s", SCIPconsGetName(cons), SCIPvarGetName(linvar)); 7439 /* update the uses counter of consandata objects which are used in pseudoboolean constraint, which was deleted and 7478 /** destructor of constraint handler to free constraint handler data (called when SCIP is exiting) */ 7548 SCIP_CALL( SCIPhashmapInsert(conshdlrdata->hashmap, (void*)resultant, (void*)(conshdlrdata->allconsanddatas[c])) ); 7550 SCIPdebugMessage("insert into hashmap <%s> (%p) -> <%s> (%p/%p)\n", SCIPvarGetName(resultant), (void*)resultant, 7551 SCIPconsGetName(conshdlrdata->allconsanddatas[c]->cons), (void*)(conshdlrdata->allconsanddatas[c]), 7558 /** presolving initialization method of constraint handler (called when presolving is about to begin) */ 7572 /* decompose all pseudo boolean constraints into a "linear" constraint and "and" constraints */ 7601 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 7673 SCIP_CALL( SCIPcreateConsLinear(scip, &lincons, name, nvars, vars, coefs, lhs, SCIPinfinity(scip), 7689 /* second we are modelling the implication that if the slack variable is on( negation is off), the constraint 7696 SCIP_CALL( SCIPcreateConsLinear(scip, &lincons, name, nvars, vars, coefs, -SCIPinfinity(scip), lhs - 1, 7718 SCIP_CALL( SCIPcreateConsLinear(scip, &lincons, name, nvars, vars, coefs, -SCIPinfinity(scip), rhs, 7736 /* second we are modelling the implication that if the slack variable is on( negation is off), the constraint 7743 SCIP_CALL( SCIPcreateConsLinear(scip, &lincons, name, nvars, vars, coefs, rhs + 1, SCIPinfinity(scip), 7761 /* first we are modelling the implication that if the negation of the indicator variable is on, the constraint 7783 /* second we are modelling the implication that if the negation of the indicator variable is on, the constraint 7808 /* remove pseudo boolean and corresponding linear constraint, new linear constraints were created, 7832 /* remove pseudo boolean constraint, old linear constraint is still active, and-constraints too */ 7875 assert((*consdata)->consanddatas[c]->noriguses == 0 || ((*consdata)->consanddatas[c]->origcons != NULL && SCIPconsIsOriginal((*consdata)->consanddatas[c]->origcons))); 7922 SCIP_CALL( consdataCreate(scip, conshdlr, &targetdata, sourcedata->lincons, sourcedata->linconstype, 7923 andconss, sourcedata->andcoefs, sourcedata->andnegs, sourcedata->nconsanddatas, sourcedata->indvar, sourcedata->weight, 7924 sourcedata->issoftcons, sourcedata->intvar, sourcedata->lhs, sourcedata->rhs, SCIPconsIsChecked(sourcecons), 7932 SCIPconsIsInitial(sourcecons), SCIPconsIsSeparated(sourcecons), SCIPconsIsEnforced(sourcecons), 7935 SCIPconsIsDynamic(sourcecons), SCIPconsIsRemovable(sourcecons), SCIPconsIsStickingAtNode(sourcecons)) ); 8120 SCIP_CALL( getLinearConsSides(scip, consdata->lincons, consdata->linconstype, &newlhs, &newrhs) ); 8138 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 8141 /* calculate all not artificial linear variables and all artificial and-resultants which will be ordered like the 8142 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 8149 SCIP_CALL( correctLocksAndCaptures(scip, cons, conshdlrdata, newlhs, newrhs, andress, andcoefs, andnegs, nandress) ); 8174 /* try upgrading pseudoboolean constraint to a linear constraint and/or remove possible and-constraints */ 8175 SCIP_CALL( tryUpgrading(scip, cons, conshdlrdata, ndelconss, naddconss, nfixedvars, nchgcoefs, nchgsides, &cutoff) ); 8184 /* remember the first constraint that was not yet tried to be upgraded, to begin the next upgrading round with */ 8228 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss 8266 SCIPdebugMessage("%socking constraint <%s> by [%d;%d].\n", (nlocksneg < 0) || (nlockspos < 0) ? "Unl" : "L", SCIPconsGetName(cons), nlocksneg, nlockspos); 8315 /* probably we need to store the resultant too, now it's not possible to remove the resultant from the and-constraint */ 8410 SCIP_CALL( copyConsPseudoboolean(scip, cons, sourcescip, sourcecons, consname, varmap, consmap, 8411 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode, global, 8468 SCIP_CALL( getLinearConsNVars(scip, consdata->lincons, consdata->linconstype, &nlinconsvars) ); 8492 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, linconsvars, NULL, &nlinconsvars) ); 8494 /* calculate all non-artificial linear variables and all artificial and-resultants which will be ordered like the 8495 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 8498 SCIP_CALL( getLinVarsAndAndRess(scip, cons, linconsvars, NULL, nlinconsvars, linvars, NULL, &nlinvars, 8587 /** constraint method of constraint handler which returns the number of variables (if possible) */ 8632 SCIP_CALL( getLinearConsNVars(scip, consdata->lincons, consdata->linconstype, &nlinconsvars) ); 8649 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, linconsvars, NULL, &nlinconsvars) ); 8651 /* calculate all non-artificial linear variables and all artificial and-resultants which will be ordered like the 8652 * 'consanddatas' such that the and-resultant of the and-constraint is the and-resultant in the 'andress' array 8655 SCIP_CALL( getLinVarsAndAndRess(scip, cons, linconsvars, NULL, nlinconsvars, linvars, NULL, &nlinvars, 8730 consEnfolpPseudoboolean, consEnfopsPseudoboolean, consCheckPseudoboolean, consLockPseudoboolean, 8735 SCIP_CALL( SCIPsetConshdlrCopy(scip, conshdlr, conshdlrCopyPseudoboolean, consCopyPseudoboolean) ); 8742 SCIP_CALL( SCIPsetConshdlrPresol(scip, conshdlr, consPresolPseudoboolean, CONSHDLR_MAXPREROUNDS, 8750 "decompose all normal pseudo boolean constraint into a \"linear\" constraint and \"and\" constraints", 8754 "decompose all indicator pseudo boolean constraint into a \"linear\" constraint and \"and\" constraints", 8755 &conshdlrdata->decomposeindicatorpbcons, TRUE, DEFAULT_DECOMPOSEINDICATORPBCONS, NULL, NULL) ); 8757 "constraints/" CONSHDLR_NAME "/nlcseparate", "should the nonlinear constraints be separated during LP processing?", 8760 "constraints/" CONSHDLR_NAME "/nlcpropagate", "should the nonlinear constraints be propagated during node processing?", 8763 "constraints/" CONSHDLR_NAME "/nlcremovable", "should the nonlinear constraints be removable?", 8775 SCIP_LINEARCONSTYPE linconstype, /**< linear constraint type of associated linear constraint */ 8805 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 8807 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 8872 /* if allocated memory in this for loop was already used, allocate a new block, otherwise we only need to copy the variables */ 8937 SCIPwarningMessage(scip, "Another and-constraint with the same variables but different and-resultant is added to the global and-constraint hashtable of pseudoboolean constraint handler.\n"); 8943 SCIP_CALL( SCIPensureBlockMemoryArray(scip, &(conshdlrdata->allconsanddatas), &(conshdlrdata->sallconsanddatas), SCIPcalcMemGrowSize(scip, conshdlrdata->sallconsanddatas + 1)) ); 9015 /* todo: make the constraint upgrade flag global, now it works only for the common linear constraint */ 9020 /* checking for and-constraints will be FALSE, we check all information in this constraint handler */ 9021 SCIP_CALL( consdataCreate(scip, conshdlr, &consdata, lincons, linconstype, andconss, andcoefs, NULL, nandconss, 9026 SCIP_CALL( SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate, 9034 * @note linear and nonlinear terms can be added using SCIPaddCoefPseudoboolean() and SCIPaddTermPseudoboolean(), 9037 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 9076 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 9078 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 9153 /* checking for original linear constraint will be FALSE, transformed linear constraints get the check flag like this 9156 SCIP_CALL( createAndAddLinearCons(scip, conshdlr, linvars, nlinvars, linvals, andress, nandconss, andcoefs, andnegs, 9157 &lhs, &rhs, initial, separate, enforce, FALSE/*check*/, propagate, local, modifiable, dynamic, removable, 9163 /* checking for and-constraints will be FALSE, we check all information in this constraint handler */ 9164 SCIP_CALL( consdataCreate(scip, conshdlr, &consdata, lincons, linconstype, andconss, andcoefs, andnegs, nandconss, 9175 SCIP_CALL( SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate, 9184 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 9218 * @todo if adding a coefficient would change the type of the special linear constraint, we need to erase it and 9295 * @todo if adding a coefficient would change the type of the special linear constraint, we need to erase it and 9394 /** gets number of linear variables without artificial terms variables of pseudoboolean constraint */ 9467 SCIP_CALL( getLinearConsVarsData(scip, consdata->lincons, consdata->linconstype, vars, coefs, &nvars) ); 9470 SCIP_CALL( getLinVarsAndAndRess(scip, cons, vars, coefs, nvars, linvars, lincoefs, nlinvars, NULL, NULL, NULL, NULL) ); 9526 assert(consdata->consanddatas[c]->istransformed ? (consdata->consanddatas[c]->cons != NULL) : TRUE); 9527 assert(consdata->consanddatas[c]->isoriginal ? (consdata->consanddatas[c]->origcons != NULL) : TRUE); 9528 assert(consdata->consanddatas[c]->cons != NULL || consdata->consanddatas[c]->origcons != NULL); 9529 assert(isorig ? consdata->consanddatas[c]->origcons != NULL : consdata->consanddatas[c]->cons != NULL); 9531 andconss[c] = (isorig ? consdata->consanddatas[c]->origcons : consdata->consanddatas[c]->cons); 9568 * @note you can only change the left hand side if the special type of linear constraint won't changed 9570 * @todo if changing the left hand side would change the type of the special linear constraint, we need to erase it 9619 * @note you can only change the right hand side if the special type of linear constraint won't changed 9621 * @todo if changing the right hand side would change the type of the special linear constraint, we need to erase it void SCIPsortPtrPtrRealBool(void **ptrarray1, void **ptrarray2, SCIP_Real *realarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) static SCIP_RETCODE checkLocksAndRes(SCIP *const scip, SCIP_VAR *res) Definition: cons_pseudoboolean.c:1614 SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed) Definition: scip.c:22777 Definition: cons_setppc.h:54 static SCIP_DECL_CONSENFOLP(consEnfolpPseudoboolean) Definition: cons_pseudoboolean.c:7943 SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name) Definition: scip.c:5878 Definition: type_result.h:37 SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans))) Definition: scip.c:5588 #define SCIPallocClearBlockMemoryArray(scip, ptr, num) Definition: scip.h:20560 static SCIP_DECL_CONSCHECK(consCheckPseudoboolean) Definition: cons_pseudoboolean.c:7993 SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated) Definition: scip.c:22886 SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples) Definition: scip.c:17373 Definition: struct_scip.h:53 SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1567 SCIP_RETCODE SCIPcreateConsSetpart(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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) Definition: cons_setppc.c:8890 static SCIP_DECL_CONSINIT(consInitPseudoboolean) Definition: cons_pseudoboolean.c:7503 void SCIPwarningMessage(SCIP *scip, const char *formatstr,...) Definition: scip.c:1248 SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata) Definition: scip.c:15737 static SCIP_RETCODE addCliques(SCIP *const scip, SCIP_CONS *const cons, SCIP_Bool *const cutoff, int *const naggrvars, int *const nchgbds) Definition: cons_pseudoboolean.c:4495 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41920 SCIP_RETCODE SCIPgetLinDatasWithoutAndPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int *const nlinvars) Definition: cons_pseudoboolean.c:9422 Definition: type_result.h:49 static SCIP_RETCODE computeConsAndDataChanges(SCIP *const scip, SCIP_CONSHDLRDATA *const conshdlrdata) Definition: cons_pseudoboolean.c:3949 static SCIP_DECL_CONSCOPY(consCopyPseudoboolean) Definition: cons_pseudoboolean.c:8398 Definition: type_set.h:35 static SCIP_RETCODE getLinearConsNVars(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, int *const nvars) Definition: cons_pseudoboolean.c:484 SCIP_RETCODE SCIPcreateConsBasicPseudoboolean(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR **linvars, int nlinvars, SCIP_Real *linvals, SCIP_VAR ***terms, int nterms, int *ntermvars, SCIP_Real *termvals, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, SCIP_Real lhs, SCIP_Real rhs) Definition: cons_pseudoboolean.c:9187 SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy))) Definition: scip.c:5334 SCIP_Longint SCIPgetCapacityKnapsack(SCIP *scip, SCIP_CONS *cons) Definition: cons_knapsack.c:13238 Definition: struct_var.h:196 constraint handler for indicator constraints SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars))) Definition: scip.c:5818 SCIP_RETCODE SCIPwriteVarsList(SCIP *scip, FILE *file, SCIP_VAR **vars, int nvars, SCIP_Bool type, char delimiter) Definition: scip.c:15915 SCIP_RETCODE SCIPcreateConsSetpack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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) Definition: cons_setppc.c:8948 SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize) Definition: misc.c:2057 SCIP_RETCODE SCIPremoveVarFromGlobalStructures(SCIP *scip, SCIP_VAR *var) Definition: scip.c:22366 int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:16768 Definition: type_var.h:53 SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons) Definition: cons_knapsack.c:13333 SCIP_RETCODE SCIPgetBinvarRepresentatives(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **repvars, SCIP_Bool *negated) Definition: scip.c:17280 static SCIP_RETCODE tryUpgradingXor(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff) Definition: cons_pseudoboolean.c:5635 SCIP_RETCODE SCIPgetConsCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_CONS *sourcecons, SCIP_CONS **targetcons, SCIP_CONSHDLR *sourceconshdlr, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *name, 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 *success) Definition: scip.c:2365 static SCIP_RETCODE addCoefTerm(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, int const nvars, SCIP_Real const val) Definition: cons_pseudoboolean.c:2196 Definition: cons_setppc.h:55 public methods for problem variables static SCIP_RETCODE consdataFree(SCIP *const scip, SCIP_CONSDATA **consdata, SCIP_Bool isorig, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons_pseudoboolean.c:1385 SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var) Definition: scip.c:34983 SCIP_RETCODE SCIPcreateConsIndicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode) Definition: cons_indicator.c:6948 Constraint handler for "and" constraints, . void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2116 SCIP_RETCODE SCIPaddCoefSetppc(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var) Definition: cons_setppc.c:9063 SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file) Definition: scip.c:26237 #define HASHSIZE_PSEUDOBOOLEANNONLINEARTERMS Definition: cons_pseudoboolean.c:75 SCIP_Real SCIPgetRhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9690 Constraint handler for the set partitioning / packing / covering constraints . SCIP_VAR ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons) Definition: cons_knapsack.c:13312 SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree))) Definition: scip.c:5359 static SCIP_RETCODE checkOrigPbCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_SOL *const sol, SCIP_Bool *const violated, SCIP_Bool const printreason) Definition: cons_pseudoboolean.c:3401 SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr) Definition: misc.c:1480 SCIP_RETCODE SCIPcreateConsXor(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_Bool rhs, int nvars, SCIP_VAR **vars, 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) Definition: cons_xor.c:5424 Definition: struct_sol.h:50 static SCIP_RETCODE transformToOrig(SCIP *const scip, CONSANDDATA *consanddata, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons_pseudoboolean.c:1018 SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit))) Definition: scip.c:5383 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) Definition: scip.c:3547 SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2159 static SCIP_RETCODE chgLhsLinearCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real const lhs) Definition: cons_pseudoboolean.c:2299 static SCIP_RETCODE updateAndConss(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:4938 static SCIP_RETCODE createAndAddAndCons(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const vars, int const nvars, SCIP_Bool const initial, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const stickingatnode, SCIP_CONS **const andcons) Definition: cons_pseudoboolean.c:1959 SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr) Definition: cons.c:3917 static SCIP_DECL_CONSLOCK(consLockPseudoboolean) Definition: cons_pseudoboolean.c:8240 Definition: struct_misc.h:101 SCIP_RETCODE SCIPgetBinvarRepresentative(SCIP *scip, SCIP_VAR *var, SCIP_VAR **repvar, SCIP_Bool *negated) Definition: scip.c:17233 SCIP_RETCODE SCIPcreateConsKnapsack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Longint *weights, SCIP_Longint capacity, 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) Definition: cons_knapsack.c:13130 Constraint handler for knapsack constraints of the form , x binary and . static SCIP_DECL_SORTPTRCOMP(resvarCompWithInactive) Definition: cons_pseudoboolean.c:214 static SCIP_RETCODE propagateCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_Bool *const cutoff, int *const ndelconss) Definition: cons_pseudoboolean.c:4899 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) Definition: scip.c:1781 void SCIPsortPtrRealBool(void **ptrarray, SCIP_Real *realarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_RETCODE SCIPchgAndConsCheckFlagWhenUpgr(SCIP *scip, SCIP_CONS *cons, SCIP_Bool flag) Definition: cons_and.c:5176 static SCIP_RETCODE getLinearConsSides(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real *const lhs, SCIP_Real *const rhs) Definition: cons_pseudoboolean.c:527 static SCIP_DECL_CONSPRESOL(consPresolPseudoboolean) Definition: cons_pseudoboolean.c:8045 SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar) Definition: scip.c:17075 SCIP_RETCODE SCIPgetAndDatasPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONS **const andconss, SCIP_Real *const andcoefs, int *const nandconss) Definition: cons_pseudoboolean.c:9482 static SCIP_RETCODE findAggregation(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naggrvars, SCIP_Bool *const cutoff) Definition: cons_pseudoboolean.c:7012 Definition: type_result.h:35 Definition: struct_cons.h:36 SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:19526 #define SCIPfreeBlockMemoryArrayNull(scip, ptr, num) Definition: scip.h:20574 int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons) Definition: cons_logicor.c:5228 Definition: cons_pseudoboolean.c:126 static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyPseudoboolean) Definition: cons_pseudoboolean.c:7465 Definition: struct_cons.h:116 static SCIP_DECL_CONSPRINT(consPrintPseudoboolean) Definition: cons_pseudoboolean.c:8384 void SCIPsortPtrBool(void **ptrarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_LINEARCONSTYPE SCIPgetLinearConsTypePseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9372 Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo... static SCIP_RETCODE copyConsPseudoboolean(SCIP *const targetscip, SCIP_CONS **targetcons, SCIP *const sourcescip, SCIP_CONS *const sourcecons, const char *name, SCIP_HASHMAP *const varmap, SCIP_HASHMAP *const consmap, SCIP_Bool const initial, SCIP_Bool const separate, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const propagate, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const removable, SCIP_Bool const stickingatnode, SCIP_Bool const global, SCIP_Bool *const valid) Definition: cons_pseudoboolean.c:3701 static SCIP_RETCODE checkAndConss(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_SOL *const sol, SCIP_Bool *const violated) Definition: cons_pseudoboolean.c:3628 SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9107 SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar) Definition: scip.c:17163 SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming) Definition: scip.c:5527 Definition: type_result.h:36 SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos) SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41907 static SCIP_RETCODE consdataPrint(SCIP *const scip, SCIP_CONS *const cons, FILE *const file) Definition: cons_pseudoboolean.c:1770 Definition: type_set.h:45 Definition: type_var.h:42 static SCIP_DECL_CONSINITPRE(consInitprePseudoboolean) Definition: cons_pseudoboolean.c:7561 SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:16705 Definition: type_var.h:44 SCIP_VAR * SCIPgetResultantAnd(SCIP *scip, SCIP_CONS *cons) Definition: cons_and.c:5100 Definition: cons_setppc.h:53 Definition: type_retcode.h:33 void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) static SCIP_RETCODE unlockRoundingAndCons(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:1702 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) Definition: scip.c:5192 SCIP_Bool SCIPvarsHaveCommonClique(SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics) Definition: var.c:10742 SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1719 void SCIPconsAddUpgradeLocks(SCIP_CONS *cons, int nlocks) Definition: cons.c:7979 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41946 static SCIP_DECL_CONSTRANS(consTransPseudoboolean) Definition: cons_pseudoboolean.c:7891 SCIP_RETCODE SCIPaddCoefKnapsack(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Longint weight) Definition: cons_knapsack.c:13217 static SCIP_RETCODE consdataCreate(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_CONSDATA **consdata, SCIP_CONS *const lincons, SCIP_LINEARCONSTYPE const linconstype, SCIP_CONS **const andconss, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int const nandconss, SCIP_VAR *const indvar, SCIP_Real const weight, SCIP_Bool const issoftcons, SCIP_VAR *const intvar, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool check, SCIP_Bool transforming) Definition: cons_pseudoboolean.c:1147 SCIP_CONS * SCIPgetLinearConsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9348 static SCIP_RETCODE tryUpgradingLogicor(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff) Definition: cons_pseudoboolean.c:5926 Definition: type_retcode.h:34 static SCIP_RETCODE createAndAddLinearCons(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const linvars, int const nlinvars, SCIP_Real *const linvals, SCIP_VAR **const andress, int const nandress, SCIP_Real const *const andvals, SCIP_Bool *const andnegs, SCIP_Real *const lhs, SCIP_Real *const rhs, SCIP_Bool const initial, SCIP_Bool const separate, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const propagate, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const removable, SCIP_Bool const stickingatnode, SCIP_CONS **const lincons, SCIP_LINEARCONSTYPE *const linconstype) Definition: cons_pseudoboolean.c:2775 SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars) Definition: scip.c:17116 static SCIP_RETCODE lockRoundingAndCons(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:1634 static SCIP_RETCODE chgRhsLinearCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:2330 SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITPRE((*consinitpre))) Definition: scip.c:5479 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) Definition: scip.c:24772 SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs) Definition: scip.c:21810 static SCIP_RETCODE tryUpgrading(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff) Definition: cons_pseudoboolean.c:6914 static SCIP_RETCODE checkSolution(SCIP *const scip, SCIP_VAR **const vars, int const nvars, SCIP_Bool *const values, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int const nlinvars, SCIP_Real const constant, SCIP_Real const side, CONSANDDATA **const consanddatas, SCIP_Real *const consanddatacoefs, SCIP_Bool *const consanddatanegs, int const nconsanddatas, int const cnt, int *const xortype) Definition: cons_pseudoboolean.c:5461 Definition: type_message.h:43 Definition: type_var.h:46 SCIP_RETCODE SCIPcreateConsPseudoboolean(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR **linvars, int nlinvars, SCIP_Real *linvals, SCIP_VAR ***terms, int nterms, int *ntermvars, SCIP_Real *termvals, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, 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) Definition: cons_pseudoboolean.c:9040 SCIP_Real SCIPgetLhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9667 int SCIPgetNLinVarsWithoutAndPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9396 static SCIP_RETCODE conshdlrdataCreate(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata) Definition: cons_pseudoboolean.c:410 methods for debugging static SCIP_DECL_HASHKEYEQ(hashKeyEqAndConsDatas) Definition: cons_pseudoboolean.c:284 static SCIP_RETCODE chgRhs(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real rhs) Definition: cons_pseudoboolean.c:2534 SCIP_RETCODE SCIPtransformCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **transcons) Definition: scip.c:25360 Definition: type_var.h:41 Definition: type_var.h:45 #define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize) Definition: scip.h:20570 static SCIP_DECL_CONSGETNVARS(consGetNVarsPseudoboolean) Definition: cons_pseudoboolean.c:8590 SCIP_RETCODE SCIPchgVarBranchPriority(SCIP *scip, SCIP_VAR *var, int branchpriority) Definition: scip.c:22487 SCIP_RETCODE SCIPaddCoefPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR *const var, SCIP_Real const val) Definition: cons_pseudoboolean.c:9222 Constraint handler for linear constraints in their most general form, . SCIP_RETCODE SCIPcreateConsPseudobooleanWithConss(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONS *lincons, SCIP_LINEARCONSTYPE linconstype, SCIP_CONS **andconss, SCIP_Real *andcoefs, int nandconss, SCIP_VAR *indvar, SCIP_Real weight, SCIP_Bool issoftcons, SCIP_VAR *intvar, 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) Definition: cons_pseudoboolean.c:8771 SCIP_Bool SCIPisAndConsSorted(SCIP *scip, SCIP_CONS *cons) Definition: cons_and.c:5123 void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key) Definition: misc.c:1627 #define DEFAULT_DECOMPOSENORMALPBCONS Definition: cons_pseudoboolean.c:64 static SCIP_RETCODE addNewLocks(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:4101 SCIP_RETCODE SCIPincludeConshdlrPseudoboolean(SCIP *scip) Definition: cons_pseudoboolean.c:8718 void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...) Definition: scip.c:1298 SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) Definition: cons_linear.c:16436 SCIP_RETCODE SCIPwriteVarsLinearsum(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool type) Definition: scip.c:15966 SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete))) Definition: scip.c:5565 static SCIP_DECL_HASHGETKEY(hashGetKeyAndConsDatas) Definition: cons_pseudoboolean.c:276 Definition: type_set.h:34 static SCIP_DECL_CONSGETVARS(consGetVarsPseudoboolean) Definition: cons_pseudoboolean.c:8421 static SCIP_DECL_CONSFREE(consFreePseudoboolean) Definition: cons_pseudoboolean.c:7481 Constraint handler for "xor" constraints, . static SCIP_RETCODE correctConshdlrdata(SCIP *const scip, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss) Definition: cons_pseudoboolean.c:4982 Definition: struct_misc.h:80 SCIP_RETCODE SCIPchgLhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs) Definition: cons_linear.c:16729 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2177 #define DEFAULT_DECOMPOSEINDICATORPBCONS Definition: cons_pseudoboolean.c:65 SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint))) Definition: scip.c:5772 static SCIP_DECL_HASHKEYVAL(hashKeyValAndConsDatas) Definition: cons_pseudoboolean.c:345 SCIP_RETCODE SCIPsetConsSeparated(SCIP *scip, SCIP_CONS *cons, SCIP_Bool separate) Definition: scip.c:25072 void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...) Definition: scip.c:1281 SCIP_Bool SCIPvarIsTransformedOrigvar(SCIP_VAR *var) Definition: var.c:12120 SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons) Definition: cons_logicor.c:5249 int SCIPgetNVarsKnapsack(SCIP *scip, SCIP_CONS *cons) Definition: cons_knapsack.c:13291 static SCIP_RETCODE getLinVarsAndAndRess(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, SCIP_Real *const coefs, int const nvars, SCIP_VAR **const linvars, SCIP_Real *const lincoefs, int *const nlinvars, SCIP_VAR **const andress, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int *const nandress) Definition: cons_pseudoboolean.c:749 SCIP_RETCODE SCIPcreateConsAnd(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars, 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) Definition: cons_and.c:4922 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) Definition: cons_linear.c:16099 static SCIP_RETCODE removeOldLocks(SCIP *const scip, SCIP_CONS *const cons, CONSANDDATA *const consanddata, SCIP_Real const coef, SCIP_Real const lhs, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:4073 #define SCIPduplicateBufferArray(scip, ptr, source, num) Definition: scip.h:20593 static SCIP_RETCODE chgLhs(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real lhs) Definition: cons_pseudoboolean.c:2361 static SCIP_RETCODE tryUpgradingSetppc(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss, int *const naddconss, int *const nfixedvars, int *const nchgcoefs, int *const nchgsides, SCIP_Bool *const cutoff) Definition: cons_pseudoboolean.c:6438 SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:19453 SCIP_RETCODE SCIPchgLhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real const lhs) Definition: cons_pseudoboolean.c:9574 static SCIP_RETCODE getLinearConsVarsData(SCIP *const scip, SCIP_CONS *const cons, SCIP_LINEARCONSTYPE const constype, SCIP_VAR **const vars, SCIP_Real *const coefs, int *const nvars) Definition: cons_pseudoboolean.c:590 static SCIP_RETCODE correctLocksAndCaptures(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, SCIP_Real const newlhs, SCIP_Real const newrhs, SCIP_VAR **const andress, SCIP_Real *const andcoefs, SCIP_Bool *const andnegs, int const nandress) Definition: cons_pseudoboolean.c:4129 int SCIPgetNAndsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9542 SCIP_RETCODE SCIPsetConsInitial(SCIP *scip, SCIP_CONS *cons, SCIP_Bool initial) Definition: scip.c:25047 SCIP_RETCODE SCIPcreateConsSetcover(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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) Definition: cons_setppc.c:9007 SCIP_RETCODE SCIPsetConsChecked(SCIP *scip, SCIP_CONS *cons, SCIP_Bool check) Definition: scip.c:25122 SCIP_RETCODE SCIPchgRhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs) Definition: cons_linear.c:16750 #define SCIPduplicateBlockMemoryArray(scip, ptr, source, num) Definition: scip.h:20568 void SCIPsortPtrReal(void **ptrarray, SCIP_Real *realarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:16681 Definition: type_retcode.h:45 SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1692 SCIP_RETCODE SCIPaddTermPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_VAR **const vars, int const nvars, SCIP_Real const val) Definition: cons_pseudoboolean.c:9299 static SCIP_DECL_CONSDELETE(consDeletePseudoboolean) Definition: cons_pseudoboolean.c:7848 SCIP_RETCODE SCIPchgRhsPseudoboolean(SCIP *const scip, SCIP_CONS *const cons, SCIP_Real const rhs) Definition: cons_pseudoboolean.c:9625 SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup) Definition: scip.c:19399 static SCIP_RETCODE inithashmapandtable(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata) Definition: cons_pseudoboolean.c:378 constraint handler for pseudoboolean constraints SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9128 SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:16792 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2094 static SCIP_RETCODE updateConsanddataUses(SCIP *const scip, SCIP_CONS *const cons, SCIP_CONSHDLRDATA *const conshdlrdata, int *const ndelconss) Definition: cons_pseudoboolean.c:5269 Definition: type_retcode.h:43 static SCIP_DECL_CONSENFOPS(consEnfopsPseudoboolean) Definition: cons_pseudoboolean.c:7968 Definition: objbranchrule.h:33 SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars))) Definition: scip.c:5841 SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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) Definition: cons_logicor.c:5111 Definition: type_var.h:43 SCIP_VAR * SCIPgetIndVarPseudoboolean(SCIP *const scip, SCIP_CONS *const cons) Definition: cons_pseudoboolean.c:9324 static SCIP_RETCODE createAndAddAnds(SCIP *const scip, SCIP_CONSHDLR *const conshdlr, SCIP_VAR **const *const terms, SCIP_Real *const termcoefs, int const nterms, int const *const ntermvars, SCIP_Bool const initial, SCIP_Bool const enforce, SCIP_Bool const check, SCIP_Bool const local, SCIP_Bool const modifiable, SCIP_Bool const dynamic, SCIP_Bool const stickingatnode, SCIP_CONS **const andconss, SCIP_Real *const andvals, SCIP_Bool *const andnegs, int *const nandconss) Definition: cons_pseudoboolean.c:2707 SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value) Definition: scip.c:3740 static SCIP_RETCODE conshdlrdataFree(SCIP *const scip, SCIP_CONSHDLRDATA **conshdlrdata) Definition: cons_pseudoboolean.c:445 SCIP_RETCODE SCIPaddCoefLogicor(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var) Definition: cons_logicor.c:5205 void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons.c:3927 SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:16816 Definition: type_result.h:39 SCIP_RETCODE SCIPchgAndConsRemovableFlagWhenUpgr(SCIP *scip, SCIP_CONS *cons, SCIP_Bool flag) Definition: cons_and.c:5207 |