cons_setppc.c
Go to the documentation of this file.
17 * @brief Constraint handler for the set partitioning / packing / covering constraints \f$1^T x\ \{=, \le, \ge\}\ 1\f$. 22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 39 #define CONSHDLR_ENFOPRIORITY -700000 /**< priority of the constraint handler for constraint enforcing */ 40 #define CONSHDLR_CHECKPRIORITY -700000 /**< priority of the constraint handler for checking feasibility */ 41 #define CONSHDLR_SEPAFREQ 0 /**< frequency for separating cuts; zero means to separate only in the root node */ 42 #define CONSHDLR_PROPFREQ 1 /**< frequency for propagating domains; zero means only preprocessing propagation */ 43 #define CONSHDLR_EAGERFREQ 100 /**< frequency for using all instead of only the useful constraints in separation, 45 #define CONSHDLR_MAXPREROUNDS -1 /**< maximal number of presolving rounds the constraint handler participates in (-1: no limit) */ 46 #define CONSHDLR_DELAYSEPA FALSE /**< should separation method be delayed, if other separators found cuts? */ 47 #define CONSHDLR_DELAYPROP FALSE /**< should propagation method be delayed, if other propagators found reductions? */ 48 #define CONSHDLR_NEEDSCONS TRUE /**< should the constraint handler be skipped, if no constraints are available? */ 53 #define LINCONSUPGD_PRIORITY +700000 /**< priority of the constraint handler for upgrading of linear constraints */ 54 #define QUADCONSUPGD_PRIORITY +700000 /**< priority of the constraint handler for upgrading of linear constraints */ 57 #define EVENTHDLR_DESC "bound change event handler for set partitioning / packing / covering constraints" 63 #define DEFAULT_PRESOLPAIRWISE TRUE /**< should pairwise constraint comparison be performed in presolving? */ 65 #define HASHSIZE_SETPPCCONS 131101 /**< minimal size of hash table in setppc constraint tables */ 66 #define DEFAULT_PRESOLUSEHASHING TRUE /**< should hash table be used for detecting redundant constraints in advance */ 68 #define MINGAINPERNMINCOMPARISONS 1e-06 /**< minimal gain per minimal pairwise presolving comparisons to repeat pairwise comparison round */ 70 /*#define VARUSES*/ /* activate variable usage counting, that is necessary for LP and pseudo branching */ 71 /*#define BRANCHLP*/ /* BRANCHLP is only useful if the ENFOPRIORITY is set to a positive value */ 76 #define DEFAULT_NPSEUDOBRANCHES 2 /**< number of children created in pseudo branching (0: disable branching) */ 79 #define DEFAULT_CLIQUELIFTING FALSE /**< should we try to lift variables into other clique constraints, fix 83 #define DEFAULT_ADDVARIABLESASCLIQUES FALSE/**< should we try to generate extra clique constraint out of all binary 86 #define DEFAULT_CLIQUESHRINKING TRUE /**< should we try to shrink the number of variables in a clique constraints, by 90 /* @todo maybe use event SCIP_EVENTTYPE_VARUNLOCKED to decide for another dual-presolving run on a constraint */ 100 SCIP_CONSHDLR* conshdlrlinear; /**< pointer to linear constraint handler or NULL if not included */ 105 int npseudobranches; /**< number of children created in pseudo branching (0 to disable branching) */ 113 SCIP_Bool enablecliquelifting;/**< check whether we have enough changes to run the lifting procedure again */ 117 SCIP_Bool addvariablesascliques;/**< should we try to generate extra clique constraint out of all binary 122 SCIP_Bool presolpairwise; /**< should pairwise constraint comparison be performed in presolving? */ 123 SCIP_Bool presolusehashing; /**< should hash table be used for detecting redundant constraints in advance */ 139 unsigned int cliqueadded:1; /**< was the set partitioning / packing constraint already added as clique? */ 141 unsigned int changed:1; /**< was constraint changed since last redundancy round in preprocessing? */ 155 /** compares two active constraints of type set partitioning or set packing such that a "-1" is return if 157 * 2. both constraints are set partitioning constraints and the second has more! variables than the first or 158 * 3. both constraints are set packing constraints and the second has less! variables than the first 188 (consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata1->nvars < consdata2->nvars) || /*lint !e641*/ 189 (consdata2->setppctype == SCIP_SETPPCTYPE_PACKING && consdata1->nvars > consdata2->nvars) ) /*lint !e641*/ 191 else if( (consdata1->setppctype == consdata2->setppctype && consdata1->nvars == consdata2->nvars) ) /*lint !e641*/ 195 assert(consdata1->setppctype > consdata2->setppctype || (consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata1->setppctype == consdata2->setppctype && consdata1->nvars > consdata2->nvars) || (consdata1->setppctype == SCIP_SETPPCTYPE_PACKING && consdata1->setppctype == consdata2->setppctype && consdata1->nvars < consdata2->nvars)); /*lint !e641*/ 200 /** sort constraints first after type (partitioning before packing before covering) and second after number of 201 * variables such that the partitioning constraints have increasing number of variables and the packing constraints 209 /** compares two setppc constraints such that a "-1" is return if the first constraint is active and 212 * 3. both constraints are set partitioning constraints and the second has more! variables than the first or 213 * 4. both constraints are set packing constraints and the second has less! variables than the first 247 assert(SCIP_SETPPCTYPE_PARTITIONING < SCIP_SETPPCTYPE_PACKING && SCIP_SETPPCTYPE_PACKING < SCIP_SETPPCTYPE_COVERING); 251 (((SCIP_SETPPCTYPE)consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata1->nvars < consdata2->nvars) || 252 ((SCIP_SETPPCTYPE)consdata2->setppctype == SCIP_SETPPCTYPE_PACKING && consdata1->nvars > consdata2->nvars))) ) 254 else if( ((SCIP_SETPPCTYPE)consdata2->setppctype == SCIP_SETPPCTYPE_COVERING || (consdata1->setppctype == consdata2->setppctype && consdata1->nvars == consdata2->nvars)) ) 258 assert(consdata1->setppctype > consdata2->setppctype || ((consdata1->setppctype == consdata2->setppctype) && 260 || (consdata1->setppctype == SCIP_SETPPCTYPE_PACKING && consdata1->nvars < consdata2->nvars)))); /*lint !e641*/ 265 /** sort constraints first after type (partitioning before packing before covering) and second after number of 266 * variables such that the partitioning constraints have increasing number of variables and the packing constraints 345 /** creates constraint handler data for set partitioning / packing / covering constraint handler */ 370 /** frees constraint handler data for set partitioning / packing / covering constraint handler */ 406 /* if the variable is the negation of a problem variable, count the varuses in the problem variable */ 534 SCIP_CONSDATA** consdata, /**< pointer to store the set partitioning / packing / covering constraint */ 537 SCIP_SETPPCTYPE setppctype /**< type of constraint: set partitioning, packing, or covering constraint */ 560 SCIP_CALL( SCIPgetTransformedVars(scip, (*consdata)->nvars, (*consdata)->vars, (*consdata)->vars) ); 567 (*consdata)->existmultaggr = (*consdata)->existmultaggr || (SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR); 606 SCIP_CONSDATA** consdata, /**< pointer to store the set partitioning / packing / covering constraint */ 609 SCIP_SETPPCTYPE setppctype /**< type of constraint: set partitioning, packing, or covering constraint */ 628 SCIP_CONSDATA** consdata /**< pointer to store the set partitioning / packing / covering constraint */ 702 } 775 SCIPdebugMessage(" -> converting <%s> into setppc type %d\n", SCIPconsGetName(cons), setppctype); 852 * - SCIP_EVENTTYPE_BOUNDCHANGED: Is used to count the number of variable fixed locally to zero and one. That helps 857 * - SCIP_EVENTTYPE_VARFIXED: Is used to get informed if a variable of the constraint was aggregated which means was 1028 if( !consdata->existmultaggr && SCIPvarGetStatus(SCIPvarGetProbvar(var)) == SCIP_VARSTATUS_MULTAGGR ) 1118 /** in case a part (more than one variable) in the setppc constraint is independent of every else (is locked only by 1130 * (ii) a variable x has exactly 0 uplocks and arbitrary downlocks and a variable y has exactly 1 downlock and 1142 * (ii) a variable x has exactly 1 uplock and arbitrary downlocks and a variable y has exactly 1 downlock and 1151 * - fix the variable with the smallest object coefficient to one if the object coefficient is negative or zero 1154 * (ii) a variable x has exactly 1 uplock and arbitrary downlocks and a variable y has exactly 0 downlocks and 1160 * Note: the following dual reduction for set covering and set packing constraints is already performed by the presolver 1163 * - if a variable in a set covering constraint is only locked by that constraint and has negative or zero 1166 * - if a variable in a set packing constraint is only locked by that constraint and has positive or zero 1169 * Note: all dual reduction (ii) could also be performed by the "domcol" presolver, but cause the pairwise comparison of 1170 * columns is only done heuristically (and here it should be even cheaper) we perform them here (too) 1179 SCIP_RESULT* result /**< pointer to store the result SCIP_SUCCESS, if presolving was performed */ 1207 /* constraints for which the check flag is set to FALSE, did not contribute to the lock numbers; therefore, we cannot 1208 * use the locks to decide for a dual reduction using this constraint; for example after a restart the cuts which are 1219 /* modifiable non-covering constraints cannot be deleted if one variable is fixed to one, because the propagation for 1231 /* we don't want to consider small constraints (note that the constraints can be modifiable, so we can't delete this 1265 /* check if we can apply the dual reduction; therefore count the number of variables where the setppc has the only 1298 /* in case another constraint has also downlocks on that variable we cannot perform a dual reduction on these 1329 /* in case another constraint has also downlocks on that variable we cannot perform a dual reduction on these 1358 /* if we got a set covering constraint and not all variables are locked from this constraint it might not get 1359 * redundant (which is case if it is not possible to fix at least one variable to one), we fix all redundant 1373 /* in case another constraint has also downlocks on that variable we cannot perform a dual reduction on these 1384 assert(SCIPvarGetNLocksDown(var) == SCIPvarGetNLocksDown(activevar) && SCIPvarGetNLocksUp(var) == SCIPvarGetNLocksUp(activevar)); 1396 /* if variables has a negative objective contribution, and is uplocked by another constraint we cannot fix 1406 SCIPdebugMessage(" -> dual-fixed dominated variable <%s> == %g\n", SCIPvarGetName(var), fixval); 1412 /* if all variables but the domination variable is fixed and the constraint is not modifiables or the constraint is a 1413 * covering constraint and the bestobjval is less than or equal to zero, we can fix the domination variable (with best 1416 if( ((*nfixedvars - noldfixed == nvars - 1) && !SCIPconsIsModifiable(cons)) || (setppctype == SCIP_SETPPCTYPE_COVERING && bestobjval <= 0.0) ) 1418 /* in case of a set packing constraint with positive objective values, all variables can be fixed to zero; in all 1421 if( (setppctype == SCIP_SETPPCTYPE_PACKING && bestobjval > 0.0 && SCIPvarGetNLocksDown(vars[idx]) == 0) || setppctype != SCIP_SETPPCTYPE_PACKING || bestobjval <= 0.0 ) 1432 SCIPdebugMessage(" -> dual-fixed best variable <%s> == %g\n", SCIPvarGetName(vars[idx]), fixval); 1473 { 1516 assert(SCIPvarIsActive(var1) || SCIPvarGetStatus(var1) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(var1) == SCIP_VARSTATUS_FIXED); 1526 assert(SCIPvarIsActive(var2) || SCIPvarGetStatus(var2) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(var2) == SCIP_VARSTATUS_FIXED); 1595 SCIP_CALL( delCoefPos(scip, cons, v) ); /* only some changed behind position v-1, so it's okay */ 1660 if( SCIPvarGetStatus(repvar) == SCIP_VARSTATUS_MULTAGGR || (SCIPvarGetStatus(repvar) == SCIP_VARSTATUS_NEGATED && SCIPvarGetStatus(SCIPvarGetNegatedVar(repvar)) == SCIP_VARSTATUS_MULTAGGR) ) 1677 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, nconsvars, &constant, &requiredsize, TRUE) ); 1684 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, requiredsize, &constant, &requiredsize, TRUE) ); 1699 SCIPerrorMessage("try to resolve a multi-aggregation with a non-binary variable <%s>\n", consvars[v2]); 1736 SCIPdebugMessage("trying to fix <%s> to 0 due to at least one variable is already fixed to 1\n", SCIPvarGetName(consdata->vars[v2])); 1761 if( ndelconss != NULL && (nfixedvars != NULL || consdata->nvars == 1 || (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_COVERING) ) 1787 assert(SCIPvarIsActive(consvars[v2]) || (SCIPvarGetStatus(consvars[v2]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(consvars[v2])))); 1802 /* it might happen that there are more than one multi-aggregated variable, so we need to get the whole 1808 /* memory needed is at least old number of variables - 1 + number of variables in first multi-aggregation */ 1824 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, size, &constant, &requiredsize, TRUE) ); 1826 /* if space was not enough (we found another multi-aggregation), we need to resize the buffers */ 1832 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, requiredsize, &constant, &requiredsize, TRUE) ); 1896 SCIPwarningMessage(scip, "setppc constraint <%s> has a multi-aggregated variable, which was not resolved and therefore could lead to aborts\n", SCIPconsGetName(cons)); 1926 /** analyzes conflicting assignment on given constraint where all of the variables where assigned to zero, 1932 SCIP_CONS* cons /**< set partitioning / packing / covering constraint that detected the conflict */ 1939 if( (SCIPgetStage(scip) != SCIP_STAGE_SOLVING && !SCIPinProbing(scip)) || !SCIPisConflictAnalysisApplicable(scip) ) 1947 /* initialize conflict analysis, and add all variables of infeasible constraint to conflict candidate queue */ 1960 /** analyzes conflicting assignment on given constraint where two of the variables where assigned to one, 1966 SCIP_CONS* cons /**< set partitioning / packing / covering constraint that detected the conflict */ 1974 if( (SCIPgetStage(scip) != SCIP_STAGE_SOLVING && !SCIPinProbing(scip)) || !SCIPisConflictAnalysisApplicable(scip) ) 1982 /* initialize conflict analysis, and add the two variables assigned to one to conflict candidate queue */ 2001 /** checks constraint for violation only looking at the fixed variables, applies further fixings if possible */ 2009 SCIP_Bool* mustcheck /**< pointer to store whether this constraint must be checked for feasibility */ 2011 { 2034 /*SCIPdebugMessage("processing constraint <%s> with respect to fixed variables (%d fixed to 0.0, %d fixed to 1.0)\n", 2063 SCIPdebugMessage(" -> fixing all other variables to zero in set packing/partitioning constraint <%s>\n", 2067 * this could result in additional variables fixed to one due to aggregations; in this case, the 2078 assert(SCIPisFeasZero(scip, SCIPvarGetUbLocal(var)) || SCIPisFeasEQ(scip, SCIPvarGetUbLocal(var), 1.0)); 2097 /* the fixed to one variable must have been found, and at least one variable must have been fixed */ 2108 SCIPdebugMessage(" -> disabling set packing/partitioning constraint <%s>\n", SCIPconsGetName(cons)); 2128 SCIPdebugMessage(" -> conflict on set packing/partitioning constraint <%s>\n", SCIPconsGetName(cons)); 2143 * - a set partitioning or covering constraint is infeasible, and if it's unmodifiable, the node 2159 SCIPdebugMessage(" -> set covering/partitioning constraint <%s> is infeasible\n", SCIPconsGetName(cons)); 2178 * - an unmodifiable set partitioning or covering constraint is feasible and can be disabled after the 2207 assert(SCIPisFeasZero(scip, SCIPvarGetUbLocal(var)) || SCIPisFeasEQ(scip, SCIPvarGetUbLocal(var), 1.0)); 2210 SCIPdebugMessage(" -> fixing remaining variable <%s> to one in set covering/partitioning constraint <%s>\n", 2237 SCIP_CONSDATA* consdata, /**< set partitioning / packing / covering constraint to be checked */ 2252 sumbound = ((SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_COVERING ? 1.0 : 1.0 + 2*SCIPfeastol(scip)); 2253 for( v = 0; v < nvars && sum < sumbound; ++v ) /* if sum >= sumbound, the feasibility is clearly decided */ 2312 SCIP_CALL( SCIPcreateEmptyRowCons(scip, &consdata->row, SCIPconsGetHdlr(cons), SCIPconsGetName(cons), lhs, rhs, 2315 SCIP_CALL( SCIPaddVarsToRowSameCoef(scip, consdata->row, consdata->nvars, consdata->vars, 1.0) ); 2364 { 2390 /* check constraint for violation only looking at the fixed variables, apply further fixings if possible */ 2449 { 2463 /* check constraint for violation only looking at the fixed variables, apply further fixings if possible */ 2508 /** returns TRUE iff both keys are equal; two constraints are equal if they have the same variables */ 2634 /* @todo: maybe sort cliques and accordingly the variables so it will be faster to add the constraints */ 2643 (void) SCIPsnprintf(name, SCIP_MAXSTRLEN, "extra_clq_%d_round_%d", cliquepartition[c], nrounds); 2657 /* @todo: try to find a good value for what are enough variables to create this constraint, maybe at least 2702 /** start to collect setpartitioning and setpacking constraints, and try to remove fixed variables and merged these 2743 /* we only want to consider constraints with either active or negated of active variables, applyfixings removes 2744 * aggregated and fixed variables to zero, processFixings removes fixings to one but no aggregation 2780 /* @todo: check for covering constraints with only two variables which are equal to a packing constraint with 2784 assert(consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || consdata->setppctype == SCIP_SETPPCTYPE_PACKING); /*lint !e641*/ 2794 /** creating all necessary data in array structure, collect all clique constraint variables and occurances, 2805 int*const varnconss, /**< storage for remembering the number of constraints a variable occurs */ 2807 int**const varconsidxs, /**< storage for constraint indices in which the corresponding variable exists */ 2841 /* here we should have no covering constraints anymore and the constraint data should be merged */ 2842 assert(consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || consdata->setppctype == SCIP_SETPPCTYPE_PACKING); /*lint !e641*/ 2862 assert(SCIPvarIsActive(var) || (SCIPvarIsNegated(var) && SCIPvarIsActive(SCIPvarGetNegationVar(var)))); 2876 SCIP_CALL( SCIPallocBufferArray(scip, &(varconsidxs[varindex]), maxnvarconsidx[varindex]) ); /*lint !e866*/ 2884 /* the number of occurances of a variable is not limited by the locks (so maybe we have to increase memory), 2885 * because for examples converted cuts are not check and therefore they have no locks on their variables */ 2889 SCIP_CALL( SCIPreallocBufferArray(scip, &(varconsidxs[varindex]), maxnvarconsidx[varindex]) ); /*lint !e866*/ 2909 int*const varnconss, /**< storage for remembering the number of constraints a variable occurs */ 2910 int**const varconsidxs /**< storage for constraint indices in which the corresponding variable exists */ 2955 int*const varnconss, /**< storage for remembering the number of constraints a variable occurs */ 2957 int**const varconsidxs /**< storage for constraint indices in which the corresponding variable exists */ 2976 assert(SCIPvarGetNegatedVar(addvar) != NULL && SCIPhashmapExists(vartoindex, (void*) SCIPvarGetNegatedVar(addvar))); 2978 /* @note because we can only have created a negated variable, and we already alloacted enough memory for 2981 SCIPsortedvecInsertDownPtr((void**)usefulvars, SCIPvarCompActiveAndNegated, addvar, nusefulvars, NULL); 2988 SCIP_CALL( SCIPallocBufferArray(scip, &(varconsidxs[varindex]), maxnvarconsidx[varindex]) ); /*lint !e866*/ 2999 SCIP_CALL( SCIPreallocBufferArray(scip, &(varconsidxs[varindex]), maxnvarconsidx[varindex]) ); /*lint !e866*/ 3012 /** check if constraint is already redundant or infeasible due to fixings, fix or aggregate left over variables if 3020 SCIP_VAR** undoneaggrvars, /**< array to store aggregation variables, if aggregation is not performed 3024 SCIP_Bool* undoneaggrtypes, /**< array to store aggregation type, if aggregation is not performed yet; 3028 int*const naggregations, /**< pointer to store number of aggregations which are not yet performed; 3031 int*const saggregations, /**< pointer to store size of the array for aggregation type and two times 3071 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || consdata->setppctype == SCIP_SETPPCTYPE_COVERING ) /*lint !e641*/ 3073 SCIPdebugMessage("empty set-partition/-covering constraint <%s> found -> cutoff\n", SCIPconsGetName(cons)); 3101 SCIPdebugMessage(" -> deleting set-covering constraint <%s>, at least two variables are fixed to 1\n", SCIPconsGetName(cons)); 3108 SCIPdebugMessage("set partitioning / packing constraint <%s> is infeasible, %d variables fixed to one\n", SCIPconsGetName(cons), consdata->nfixedones); 3120 if( consdata->setppctype != SCIP_SETPPCTYPE_COVERING && consdata->nfixedzeros < nvars - 1 ) /*lint !e641*/ 3128 SCIPdebugMessage("trying to fix <%s> to 0 due to at least one variable is already fixed to 1\n", SCIPvarGetName(vars[v])); 3146 if( !SCIPconsIsModifiable(cons) || consdata->setppctype == SCIP_SETPPCTYPE_COVERING ) /*lint !e641*/ 3149 SCIPdebugMessage(" -> deleting constraint <%s>, all variables are fixed\n", SCIPconsGetName(cons)); 3164 /* all variables were fixed to zero then either delete the constraint or stop with infeasibility */ 3173 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || consdata->setppctype == SCIP_SETPPCTYPE_COVERING ) /*lint !e641*/ 3175 SCIPdebugMessage("set partitioning / covering constraint <%s> is infeasible\n", SCIPconsGetName(cons)); 3182 SCIPdebugMessage(" -> deleting set-packing constraint <%s>, all variables are fixed to zero\n", SCIPconsGetName(cons)); 3190 /* all but one variable were fixed to zero then delete the constraint and for setpartition fix the remaining variable to 1 */ 3200 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || consdata->setppctype == SCIP_SETPPCTYPE_COVERING ) /*lint !e641*/ 3208 SCIPdebugMessage("trying to fix <%s> to 1 due to it's the last unfixed variable is the set-partitioning/covering constraint\n", SCIPvarGetName(vars[v])); 3229 SCIPdebugMessage(" -> deleting constraint <%s>, all %svariables are fixed\n", SCIPconsGetName(cons), consdata->setppctype == (int) SCIP_SETPPCTYPE_PACKING ? "but one " : ""); 3237 /* all but two variable were fixed to zero in a setpartitioning constraint then delete the constraint and 3240 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata->nfixedzeros + 2 == nvars ) /*lint !e641*/ 3269 SCIPdebugMessage("trying to aggregate <%s> and <%s> due to they are the last two unfixed variables in the set partitionning constraint <%s>\n", SCIPvarGetName(var), SCIPvarGetName(vars[v]), SCIPconsGetName(cons)); 3272 /* in order to not mess up the variable usage counting, we have to decrease usage counting, aggregate, 3280 SCIP_CALL( SCIPaggregateVars(scip, var, vars[v], 1.0, 1.0, 1.0, cutoff, &redundant, &aggregated) ); 3301 SCIPdebugMessage(" -> deleting constraint <%s>, all variables are fixed\n", SCIPconsGetName(cons)); 3314 SCIPdebugMessage("memorize the aggregation of <%s> + <%s> = 1, because they are the last two unfixed variable in the set partitioning constraints <%s>\n", SCIPvarGetName(var), SCIPvarGetName(vars[v]), SCIPconsGetName(cons)); 3324 /* clear the aggregation type array to set the default to the aggregation of the form x + y = 1 */ 3325 BMSclearMemoryArray(&(undoneaggrtypes[*naggregations]), *saggregations - *naggregations); /*lint !e866*/ 3337 SCIPdebugMessage(" -> deleting constraint <%s>, all variables are fixed\n", SCIPconsGetName(cons)); 3348 /* we should never be here, because the last to unfixed variables should have been either aggregated or a cutoff 3369 int*const varnconss, /**< storage for remembering the number of constraints a variable occurs */ 3371 int**const varconsidxs, /**< storage for constraint indices in which the corresponding variable exists */ 3372 int*const countofoverlapping, /**< the amount of variables of cons which overlap in all other constraint */ 3377 SCIP_VAR** undoneaggrvars, /**< array to store aggregation variables, if aggregation is not performed 3380 SCIP_Bool* undoneaggrtypes, /**< array to store aggregation type, if aggregation is not performed yet; 3384 int*const naggregations, /**< pointer to store number of aggregations which are not yet performed; */ 3385 int*const saggregations, /**< pointer to store size of the array for aggregation type and two times 3468 /* check if constraint is already redundant or infeasible due to fixings, fix or aggregate left over variables if 3471 SCIP_CALL( presolvePropagateCons(scip, cons1, FALSE, undoneaggrvars, undoneaggrtypes, naggregations, saggregations, nfixedvars, naggrvars, ndelconss, cutoff) ); 3496 SCIPdebugMessage("constraint <%s> overlaps with constraint <%s> by %d variables\n", SCIPconsGetName(cons), SCIPconsGetName(cons1), countofoverlapping[c]); 3517 /* sorting array after indices of variables, negated and active counterparts would stand side by side */ 3536 /* all variables inside the second clique constraint should be either active or negated of an active one */ 3537 assert(SCIPvarIsActive(vars1[v1]) || (SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1])))); 3565 assert(SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1]))); 3572 /* variable index in the constraint smaller than the other one, so go to the next variable in cons */ 3578 SCIPdebugMessage("trying to fix <%s> to 0 because it is in the same clique with a complete set partitioning constraint\n", SCIPvarGetName(vars1[v1])); 3595 /* because the constraint's are merged it is not possible that one constraint contains a negated 3611 SCIPdebugMessage("trying to fix <%s> to 0 because it is in the same clique with a complete set partitioning constraint\n", SCIPvarGetName(vars1[v1])); 3627 /* if caused by all fixings now this set partitioning constraint doesn't have any variable which was 3629 if( consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata1->nfixedzeros == nvars1 && consdata1->nfixedones != 1 ) /*lint !e641*/ 3631 SCIPdebugMessage("all variables in the set-partitioning constraint <%s> are fixed to zero, this leads to a cutoff\n", SCIPconsGetName(cons1)); 3639 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> because it includes the setpartitioning constraint <%s> number <%d>\n", SCIPconsGetName(cons1), c, SCIPconsGetName(cons), considx); 3645 /* could already be deleted because the constraint was included in another set partition constraint */ 3649 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> due to inclusion in constraint <%s> number <%d>\n", SCIPconsGetName(cons), considx, SCIPconsGetName(cons1), c); 3658 * @note that zero fixations from above can only appear through a set-partitioning constraint, this means if 3659 * cons was the set-partitioning constraint only variables which are not in this constraint could be fixed 3660 * to zero, and this also means that the overlapping variables in this particular case are still active or 3662 * later on it could be possible that even variables in cons are fixed to zero, which can lead to wrong 3663 * results when checking if countofoverlapping[c] + consdata1->nfixedzeros == nvars1, because a fixed 3666 else if( (!overlapdestroyed && countofoverlapping[c] + consdata1->nfixedzeros == nvars1) || countofoverlapping[c] == nvars1 ) 3682 /* sorting array after indices of variables, negated and active counterparts would stand side by side */ 3701 /* all variables inside the second clique constraint should be either active or negated of an active one */ 3702 assert(SCIPvarIsActive(vars1[v1]) || (SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1])))); 3703 /* all variables inside the first clique constraint should be either active or negated of an active one */ 3704 assert(SCIPvarIsActive(vars[v]) || (SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v])))); 3716 assert(SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v]))); 3733 assert(SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1]))); 3740 /* variable index in the constraint smaller than the other one, so go to the next variable in cons */ 3743 SCIPdebugMessage("trying to fix <%s> to 0 because it is in the same clique with a complete set partitioning constraint\n", SCIPvarGetName(var)); 3764 /* because the constraint's are merged it is not possible that one constraint contains a negated 3765 * variable of another and because all variables in cons1 are in cons this should be really the same 3781 SCIPdebugMessage("trying to fix <%s> to 0 because it is in the same clique with a complete set partitioning constraint\n", SCIPvarGetName(vars[v])); 3796 /* if caused by all fixings now this set partitioning constraint doesn't have any variable which was 3798 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata->nfixedzeros == nvars && consdata->nfixedones != 1 ) /*lint !e641*/ 3800 SCIPdebugMessage("all variables in the set-partitioning constraint <%s> are fixed to zero, this leads to a cutoff\n", SCIPconsGetName(cons1)); 3806 /* could already be deleted because the constraint was included in another set partition constraint */ 3810 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> because it includes the setpartitioning constraint <%s> number <%d>\n", SCIPconsGetName(cons), considx, SCIPconsGetName(cons1), c); 3818 /* due to fixings in cons0 mark overlapping invalid for checking with fixedzero variables together */ 3827 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> due to inclusion in constraint <%s> number <%d>\n", SCIPconsGetName(cons1), c, SCIPconsGetName(cons), considx); 3835 /* if cons has only one unfixed variable which is not in cons1 and cons1 has one variable which does not appaer in 3836 * cons and both constraints are setpartitioning constraints we might aggregate both not overlapping variables and 3839 else if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && countofoverlapping[c] == nvars - oldnfixedzeros - 1 && countofoverlapping[c] == nvars1 - 1 ) /*lint !e641*/ 3855 /* sorting array after indices of variables, negated and active counterparts would stand side by side */ 3874 /* all variables inside the second clique constraint should be either active or negated of an active one */ 3875 assert(SCIPvarIsActive(vars1[v1]) || (SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1])))); 3876 /* all variables inside the first clique constraint should be either active or negated of an active one */ 3877 assert(SCIPvarIsActive(vars[v]) || (SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v])))); 3887 assert(SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v]))); 3900 assert(SCIPvarGetStatus(vars1[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars1[v1]))); 3905 /* variable index in the constraint smaller than the other one, so go to the next variable in cons */ 3929 /* because the constraint's are merged it is not possible that one constraint contains a negated variable 3937 SCIPdebugMessage("two set-partitioning constraint <%s> and <%s> have only one variable not in common, but this variable <%s> appears in one constraint as the negated version as in the other constraint\n", SCIPconsGetName(cons), SCIPconsGetName(cons1), SCIPvarGetName(vars[v])); 3947 /* due to fixings, it is possible that there are no active variables left, we we did not recognize which variables we could aggregate */ 3977 /* due to fixings, it is possible that there are no active variables left, we we did not recognize which variables we could aggregate */ 3981 SCIPdebugMessage("memorize the aggregation of <%s> == <%s>, because they are the last two variable which are different in these two set partitioning constraints <%s> <%s>\n", SCIPvarGetName(aggvar1), SCIPvarGetName(aggvar2), SCIPconsGetName(cons), SCIPconsGetName(cons1)); 3991 /* clear the aggregation type array to set the default to the aggregation of the form x + y = 1 */ 3992 BMSclearMemoryArray(&(undoneaggrtypes[*naggregations]), *saggregations - *naggregations); /*lint !e866*/ 4004 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> because it is dominated by constraint <%s>\n", SCIPconsGetName(cons1), c, SCIPconsGetName(cons)); 4012 /* w.l.o.g. cons is a setpartitioning constraint and countofoverlapping == nvars - oldnfixedzeros - 1 we can 4013 * delete all overlapping variables in cons1 and add the negated variable of the not overlapped variable to cons 4016 else if( shrinking && !overlapdestroyed && countofoverlapping[c] > 1 && ((consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && countofoverlapping[c] == nvars - oldnfixedzeros - 1) || (consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING && countofoverlapping[c] == nvars1 - 1)) ) /*lint !e641*/ 4035 assert((consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING) != (consdata1->setppctype == SCIP_SETPPCTYPE_PARTITIONING) || countofoverlapping[c] != nvars - 1 || countofoverlapping[c] != nvars1 - 1); /*lint !e641*/ 4041 /* sorting array after indices of variables, negated and active counterparts would stand side by side */ 4047 if( consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && countofoverlapping[c] == nvars - oldnfixedzeros - 1) /*lint !e641*/ 4072 /* iterate over the both cliques variables the "same" time, here we need the backward loop, because we 4088 /* all variables inside the second clique constraint should be either active or negated of an active one */ 4089 assert(SCIPvarIsActive(varstochange[v1]) || (SCIPvarGetStatus(varstochange[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(varstochange[v1])))); 4090 /* all variables inside the first clique constraint should be either active or negated of an active one */ 4091 assert(SCIPvarIsActive(varstostay[v]) || (SCIPvarGetStatus(varstostay[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(varstostay[v])))); 4101 assert(SCIPvarGetStatus(varstostay[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(varstostay[v]))); 4114 assert(SCIPvarGetStatus(varstochange[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(varstochange[v1]))); 4119 /* variable index in the constraint smaller than the other one, so go to the next variable in cons */ 4133 /* because the constraint's are merged it is not possible that one constraint contains a negated variable 4140 SCIPdebugMessage("-> trying to fix <%s> to 0 because it would exist twice in a constraint\n", SCIPvarGetName(varstochange[v1])); 4154 /* the above fixing is equal to the fixation of varstostay[v] to 1, so we can call presolvePropagateCons() for consstay */ 4155 SCIP_CALL( presolvePropagateCons(scip, constostay, FALSE, NULL, NULL, NULL, NULL, nfixedvars, naggrvars, ndelconss, cutoff) ); 4161 /* correct local data structure, remove variable from constraint entry where it will be removed */ 4164 SCIPdebugMessage(" -> deleting variable <%s> in constraint <%s> number %d, because it will be replaced\n", SCIPvarGetName(varstochange[v1]), SCIPconsGetName(constochange), constochangeidx); 4186 /* all variables inside the first clique constraint should be either active or negated of an active one */ 4187 assert(SCIPvarIsActive(varstostay[v]) || (SCIPvarGetStatus(varstostay[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(varstostay[v])))); 4199 SCIPdebugMessage(" -> adding variable <%s> to constraint <%s> number %d\n", SCIPvarGetName(addvar), SCIPconsGetName(constochange), constochangeidx); 4209 SCIP_CALL( addCliqueDataEntry(scip, addvar, constochangeidx, TRUE, usefulvars, nusefulvars, vartoindex, varnconss, maxnvarconsidx, varconsidxs) ); 4221 /** @todo try another variant by determine lifting variables as the intersection of all cliques variables of the 4232 SCIP_Bool** cliquevalues, /**< pointer to clique values of constraint-variables, either one if the 4259 int nottocheck; /* will be the position for a variable in cons0 which is in negated form in the same clique */ 4312 /* check that constraint variables are still correctly sorted, indices of active variables should be decreasing */ 4319 /* all variables which we have inside the clique constraint and which can possibly be added should be either active or negated */ 4320 assert(SCIPvarIsActive(vars[v]) || (SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v])))); 4321 assert(SCIPvarIsActive(usefulvars[v1]) || (SCIPvarGetStatus(usefulvars[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(usefulvars[v1])))); 4323 /* constraint should during adding of variables stay merged, because for each variable which is added holds that 4324 * the index of this corresponding active variable is pairwise different to all indices of all active 4326 * @note it should not happen that we add one variable and the corresponding counterpart to the same constraint */ 4334 assert(SCIPvarGetStatus(vars[v]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[v]))); 4346 assert(SCIPvarGetStatus(usefulvars[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(usefulvars[v1]))); 4354 /* variable index in the constraint smaller than the other one, so go to the next variable in cons */ 4360 /* variable index in the constraint is greater than the other one, so check for possible inclusion of the variable */ 4372 assert(SCIPvarIsActive(vars[k]) || (SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k])))); 4381 assert(SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k]))); 4390 /* variable index in the constraint is equal to the index of the other variable, check if these variables are 4391 * negated of each other so memorize the position and check for possible inclusion of the new variable and if 4412 assert(SCIPvarIsActive(vars[k]) || (SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k])))); 4424 assert(SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k]))); 4433 /* don't decrease v because it might happen that the corresponding negated variable of var is next in 4439 /* if k is smaller than 0 than the possible new variables is in the same clique with all variables of cons, 4445 /* we found a variable which is the negated variable of another one in this clique so we can fix all 4446 * other variable to zero and if it's a partitioning constraint we can also fix the variable of the 4462 assert(SCIPvarIsActive(vars[k]) || (SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k])))); 4466 SCIPdebugMessage("trying to fix <%s> to 0 because we could lift a negated variable of another constraint variable\n", SCIPvarGetName(vars[k])); 4485 assert(SCIPvarIsActive(vars[nottocheck]) || (SCIPvarGetStatus(vars[nottocheck]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[nottocheck])))); 4487 SCIPdebugMessage("trying to fix <%s> to 1 due to this setpartitioning variable is with its negated in the same clique\n", SCIPvarGetName(vars[nottocheck])); 4488 /* fix the remaining variable to one, due to it's the only one left to satisfy the constraint */ 4502 SCIPdebugMessage(" -> deleting constraint <%s> number <%d> due to active and negated variable in the same clique constraint\n", SCIPconsGetName(cons), arraypos); 4509 /* we found a variable which could be added to a partitioning constraint so we can fix it to zero */ 4512 SCIPdebugMessage("trying to fix <%s> to 0 because this variable is in the same clique with a set partition\n", SCIPvarGetName(usefulvars[v1 + 1])); 4527 /* we have found a new variable for a set packing constraint cons, so add the found variable to the first constraint */ 4539 SCIPdebugMessage(" -> adding variable <%s> to constraint <%s> number %d\n", SCIPvarGetName(usefulvars[v1 + 1]), SCIPconsGetName(cons), arraypos); 4549 SCIP_CALL( addCliqueDataEntry(scip, addvar, arraypos, FALSE, usefulvars, nusefulvars, vartoindex, varnconss, maxnvarconsidx, varconsidxs) ); 4551 /* we need the new pointer to the variables, because due to adding variables it is possible that we 4552 * did reallocate the variables array inside the constraint, the index v should stay the same because the 4591 assert(SCIPvarGetStatus(usefulvars[v1]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(usefulvars[v1]))); 4607 assert(SCIPvarIsActive(vars[k]) || (SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k])))); 4616 assert(SCIPvarGetStatus(vars[k]) == SCIP_VARSTATUS_NEGATED && SCIPvarIsActive(SCIPvarGetNegationVar(vars[k]))); 4628 /* we found a variable which could be added to a partitioning constraint so we can fix it to zero */ 4631 SCIPdebugMessage("trying to fix <%s> to 0 because this variable is in the same clique with a set partition\n", SCIPvarGetName(usefulvars[v1])); 4658 SCIPdebugMessage(" -> adding variable <%s> to constraint <%s> number %d\n", SCIPvarGetName(addvar), SCIPconsGetName(cons), arraypos); 4668 SCIP_CALL( addCliqueDataEntry(scip, addvar, arraypos, FALSE, usefulvars, nusefulvars, vartoindex, varnconss, maxnvarconsidx, varconsidxs) ); 4670 /* we need the new pointer to the variables, because due to adding variables it is possible that we 4671 * did reallocate the variables array inside the constraint, the index v should stay the same because the 4703 SCIP_Bool*const undoneaggrtypes, /**< aggregation type storage, type FALSE means the aggregation is of the 4733 SCIPdebugMessage("trying to aggregate <%s> %s <%s>%s\n", SCIPvarGetName(var1), undoneaggrtypes[a] ? "=" : "+", SCIPvarGetName(var2), undoneaggrtypes[a] ? "" : " = 1"); 4736 /* in order to not mess up the variable usage counting, we have to decrease usage counting, aggregate, 4746 SCIP_CALL( SCIPaggregateVars(scip, var1, var2, 1.0, -1.0, 0.0, cutoff, &redundant, &aggregated) ); 4750 SCIP_CALL( SCIPaggregateVars(scip, var1, var2, 1.0, 1.0, 1.0, cutoff, &redundant, &aggregated) ); 4759 /* binary variables should always be aggregated, or due to fixation the aggregation is redundant */ 4775 /** check whether we can combine or grow cliques so some constraints become redundant or we can fix variables */ 4776 /** @todo try another variant, by building up the clique graph and delete unnecessary (transitive closure) edges and do 4796 /* extend cliques/constraints by checking whether some variables are in the same clique, no pairwise clique lifting 4799 SCIP_CONS** usefulconss; /* array with pointers of constraint of setpartitioning and setpacking type */ 4800 SCIP_VAR** usefulvars; /* array with pointers of variables in setpartitioning and setpacking constraints */ 4801 int** varconsidxs; /* array consisting of constraint indices in which the corresponding variable exists */ 4805 SCIP_Bool* cliquevalues = NULL; /* values of clique-variables, either one if the varibale is active or zero if the variable is negated */ 4821 SCIP_Bool* undoneaggrtypes; /* storage for not yet performed aggregation type (x = y or x + y = 1) */ 4847 susefulvars = 2 * nvars; /* two times because of negated vars, maybe due to deleted variables we need to increase this */ 4849 /* a hashmap from varindex to postion in varconsidxs array, because above is still too small */ 4850 SCIP_CALL( SCIPhashmapCreate(&vartoindex, SCIPblkmem(scip), SCIPcalcHashtableSize(5 * nvars)) ); 4852 /* get temporary memory for the aggregation storage, to memorize aggregations which will be performed later, otherwise we would destroy our local data structures */ 4859 /* get temporary memory for all clique constraints, all appearing variables and the mapping from variables to constraints */ 4891 /* try to create a clique-partition over all binary variables and create these cliques as new setppc constraints 4892 * and add them to the usefulconss array and adjust all necessary data this will hopefully lead to faster 4902 /* add extra clique constraints resulting from the cliquepartition calculation to SCIP and to the local data structure */ 4903 SCIP_CALL( addExtraCliques(scip, binvars, nbinvars, cliquepartition, ncliques, usefulconss, &nusefulconss, 4906 /* bad hack, we don't want to count these artificial created constraints if they got deleted, so ndelconss 4907 * can become negative which will be change to zero at the end of this method if it's still negative 4918 /* start to collect setpartitioning and setpacking constraints, and try to remove fixed variables and merged these 4921 SCIP_CALL( collectCliqueConss(scip, conss, nconss, usefulconss, &nusefulconss, nfixedvars, ndelconss, nchgcoefs, cutoff) ); 4922 /* @Note: Even after the call above some constraints can have fixed variables, because it might happen that caused by 4932 /* @todo: maybe sort them after biggest indices too, or another variant would be to restore the order as they were 4935 /* sort constraints first after type (partitioning before packing) and second after number of variables such that the 4936 * partitioning constraints have increasing number of variables and the packing constraints have decreasing number of 4937 * variables, because we loop from back to front we sort them downwards, so they are the other way around 4941 /* creating all necessary data in array structure, collect all clique constraint variables and occurances */ 4942 SCIP_CALL( collectCliqueData(scip, usefulconss, nusefulconss, usefulvars, &nusefulvars, vartoindex, varnconss, maxnvarconsidx, varconsidxs, &maxnvars) ); 4950 /* sort usefulvars after indices of variables, negated and active counterparts will stand side by side */ 4953 /* extend cliques/constraints by checking whether some variables of a second constraint are in the same clique */ 4972 /* check if constraint is already redundant or infeasible due to fixings, fix or aggregate left over variables if 4975 SCIP_CALL( presolvePropagateCons(scip, cons0, FALSE, undoneaggrvars, undoneaggrtypes, &naggregations, &saggregations, nfixedvars, naggrvars, ndelconss, cutoff) ); 4986 /* we need to determine the cliquedata in each iteration because we eventual will change it later */ 4993 /* sorting array after indices of variables, negated and active counterparts will stand side by side */ 5026 SCIP_CALL( checkForOverlapping(scip, cons0, c, c, usefulconss, nusefulconss, usefulvars, &nusefulvars, vartoindex, 5027 varnconss, maxnvarconsidx, varconsidxs, countofoverlapping, conshdlrdata->cliqueshrinking, &chgcons0, 5046 /* sorting array after indices of variables, negated and active counterparts will stand side by side */ 5052 /* check cons0 again for redundancy/fixings, because due to fixings in all other constraints it might happen that cons0 is redundant now */ 5055 /* check if constraint is already redundant or infeasible due to fixings, fix or aggregate left over variables if 5058 SCIP_CALL( presolvePropagateCons(scip, cons0, FALSE, undoneaggrvars, undoneaggrtypes, &naggregations, &saggregations, nfixedvars, naggrvars, ndelconss, cutoff) ); 5072 /* iterate over the cliques variables and all possible new clique variables at the "same" time, determine starting 5075 * @note: it might be better to start the first round with our computed v1, but maybe it's better to switch to 5079 /* we try to add all variables to the partitioning constraints, to try to fix as much as possible */ 5089 /* find start position of variable which we will try to add to our constraint, so we will get better clique constraints */ 5090 (void) SCIPsortedvecFindDownPtr((void**)usefulvars, SCIPvarCompActiveAndNegated, (void*)cons0vars[ncons0vars - 1], nusefulvars, &v1); 5092 /* if constraint is not merged and we found a variable which is negated the same as it's neighbour we have to 5094 if( v1 + 1 < nusefulvars && ((SCIPvarIsNegated(usefulvars[v1 + 1]) && SCIPvarGetNegatedVar(usefulvars[v1 + 1]) == usefulvars[v1]) || (SCIPvarIsNegated(usefulvars[v1]) && SCIPvarGetNegatedVar(usefulvars[v1]) == usefulvars[v1 + 1])) ) 5106 assert(SCIPvarIsActive(cons0vars[v]) || (SCIPvarGetStatus(cons0vars[v]) == SCIP_VARSTATUS_NEGATED && 5115 SCIP_CALL( liftCliqueVariables(scip, cons0, c, usefulvars, &nusefulvars, v1, &cliquevalues, vartoindex, varnconss, 5165 /* check for overlapping constraint after lifting, in the first round we will only check up front */ 5166 SCIP_CALL( checkForOverlapping(scip, cons0, c, (conshdlrdata->nclqpresolve > 0) ? nusefulconss : c, 5167 usefulconss, nusefulconss, usefulvars, &nusefulvars, vartoindex, varnconss, maxnvarconsidx, varconsidxs, 5184 /* free temporary memory for constraints, variables and the mapping between them in reverse order as they were 5205 SCIP_CALL( performAggregations(scip, conshdlrdata, undoneaggrvars, undoneaggrtypes, naggregations, naggrvars, cutoff) ); 5273 if( (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING || (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PACKING ) 5276 ((SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING), &infeasible, &nlocalbdchgs) ); 5287 /* a two-variable set covering constraint x + y >= 1 yields the implication x == 0 -> y == 1 */ 5305 /** perform multi-aggregation on variables resulting from a set-partitioning/-packing constraint */ 5309 SCIP_Bool linearconshdlrexist,/**< does the linear constraint handler exist, necessaray for multi-aggregations */ 5310 SCIP_VAR** vars, /**< all variables including the variable to which will be multi-aggregated */ 5315 ) 5332 SCIPdebugMessage("aggregating %s = 1 - %s\n", SCIPvarGetName(vars[pos]), SCIPvarGetName(vars[nvars - pos - 1])); 5335 SCIP_CALL( SCIPaggregateVars(scip, vars[pos], vars[nvars - pos - 1], 1.0, 1.0, 1.0, infeasible, &redundant, aggregated) ); 5359 SCIPdebugMessage("multi-aggregating binary variable <%s> (locks: [%d,%d]; to %d variables)\n", SCIPvarGetName(vars[pos]), SCIPvarGetNLocksDown(vars[pos]), SCIPvarGetNLocksUp(vars[pos]), nvars - 1); 5362 SCIP_CALL( SCIPmultiaggregateVar(scip, vars[pos], nvars - 1, tmpvars, scalars, 1.0, infeasible, aggregated) ); 5376 /** determine singleton variables in set-partitioning/-packing constraints, or doubleton variables (active and negated) 5379 * we can multi-aggregate the variable and either change the set-partitioning constraint to a set-packing constraint or 5382 * 1. c1: x + y + z = 1, uplocks(x) = 1, downlocks(x) = 1 => x = 1 - y - z and change c1 to y + z <= 1 5384 * 2. c2: x + y + z <= 1, uplocks(x) = 1, downlocks(x) = 0, obj(x) < 0 => x = 1 - y - z and change c2 to y + z <= 1 5390 * 4. e1: x + y + z == 1 and e2: ~x + u + v (<= or ==) 1, uplocks(x) = (1 or 2), downlocks(x) = 2 5393 * we can also aggregate a variable in a set-packing constraint with only two variables when the uplocks are equal to 5398 * @todo might want to multi-aggregate variables even with more locks, when the fill in is still smaller or equal to 5472 if( (nuplocks == 1 && ndownlocks <= 1) || (nuplocks <= 1 && ndownlocks == 1) || (nuplocks <= 2 && ndownlocks <= 2 && SCIPvarGetNegatedVar(binvars[v]) != NULL) ) 5483 SCIP_CALL( SCIPhashmapCreate(&vartoindex, SCIPblkmem(scip), SCIPcalcHashtableSize(5 * nposvars)) ); 5503 /* determine singleton variables in set-partitioning/-packing constraints, or doubleton variables (active and 5506 * we can multi-aggregate the variable and either change the set-partitioning constraint to a set-packing constraint 5577 /* if the constraint was not merged and consists of a variable with its negation, the constraint is redundant */ 5598 SCIPdebugMessage("empty set partition constraint <%s> led to infeasibility\n", SCIPconsGetName(cons)); 5604 SCIPdebugMessage("fixing <%s> to 1 because this variable is the last variable in a set partition constraint <%s>\n", SCIPvarGetName(consdata->vars[0]), SCIPconsGetName(cons)); 5624 if( !donotaggr && consdata->nvars == 2 && dualpresolvingenabled && (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PACKING ) 5632 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE); 5640 SCIPdebugMessage("dualpresolve, aggregating %s + %s = 1, in set-packing constraint %s\n", SCIPvarGetName(var), SCIPvarGetName(consdata->vars[1]), SCIPconsGetName(cons)); 5643 SCIP_CALL( SCIPaggregateVars(scip, var, consdata->vars[1], 1.0, 1.0, 1.0, &infeasible, &redundant, &aggregated) ); 5663 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE); 5671 SCIPdebugMessage("dualpresolve, aggregating %s + %s = 1, in set-packing constraint %s\n", SCIPvarGetName(var), SCIPvarGetName(consdata->vars[0]), SCIPconsGetName(cons)); 5674 SCIP_CALL( SCIPaggregateVars(scip, var, consdata->vars[0], 1.0, 1.0, 1.0, &infeasible, &redundant, &aggregated) ); 5691 else if( !donotaggr && consdata->nvars == 2 && (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING ) 5695 SCIPdebugMessage("aggregating %s + %s = 1, in set-partition constraint %s\n", SCIPvarGetName(consdata->vars[0]), SCIPvarGetName(consdata->vars[1]), SCIPconsGetName(cons)); 5698 SCIP_CALL( SCIPaggregateVars(scip, consdata->vars[0], consdata->vars[1], 1.0, 1.0, 1.0, &infeasible, &redundant, &aggregated) ); 5723 /* if the following condition does not hold, we have an unmerged constraint, and we might need to merge it first */ 5734 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN || SCIPvarGetStatus(var) == SCIP_VARSTATUS_LOOSE); 5739 assert(nuplocks >= 1 && ndownlocks >= 0); /* we are only treating set partitioning and set packing constraints, so every variable in there should have an uplock */ 5741 if( dualpresolvingenabled && (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PACKING && nuplocks <= 1 && nuplocks + ndownlocks <= 2 ) 5770 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, consdata->vars, consdata->nvars, v, &infeasible, &aggregated) ); 5817 /* if the following assert fails, the constraint was not merged, or something really strange happened */ 5829 /* if two variables in one constraint might be multi-aggregated, it might happen that this constraint was already removed */ 5838 /* it might be that due to other multi-aggregations the constraint has fewer variables than when we 5845 /* if the following assert is raised, then the constraint is redundant and we do not need to aggregate 5861 assert(SCIPvarGetStatus(var) == SCIP_VARSTATUS_NEGATED || SCIPvarGetStatus(negvar) == SCIP_VARSTATUS_NEGATED); 5885 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, consdata->vars, consdata->nvars, v, &infeasible, &aggregated) ); 5889 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, aggrconsdata->vars, aggrconsdata->nvars, varindex, &infeasible, &aggregated) ); 5898 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, aggrconsdata->vars, aggrconsdata->nvars, varindex, &infeasible, &aggregated) ); 5902 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, consdata->vars, consdata->nvars, v, &infeasible, &aggregated) ); 5917 else if( (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING && nuplocks == 1 && ndownlocks == 1 ) 5922 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, consdata->vars, consdata->nvars, v, &infeasible, &aggregated) ); 5940 /* if we have two times the same variable in a set-partitioning constraint, we cannot aggregate this */ 5947 assert(SCIPconsIsDeleted(usefulconss[considxs[image - 1]]) || chgtype[considxs[image - 1]] || (0 <= posincons[image - 1] && posincons[image - 1] < SCIPconsGetData(usefulconss[considxs[image - 1]])->nvars)); 5980 /* the negated variable did not occur in a set partitioning constraint (those will be iterated over 5995 /* if the following assert fails, the constraint was not merged, or something really strange happened */ 6007 /* if two variables in one constraint might be multi-aggregated, it might happen that this constraint was 6016 /* must not multi-aggregate variables that are locked more then twice by all setppc constraints */ 6027 /* we already removed a variable before, so our positioning information might be wrong, so we need to walk 6050 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, consdata->vars, consdata->nvars, v, &infeasible, &aggregated) ); 6061 /* @note it might have happened that we have a variable at hand which exists actually in a set-packing 6062 * constraint and due to some other aggregation we increased the number of locks and reached this 6073 SCIPdebugMessage("multi-aggregating in two set-partitioning or one set-partitioning and -packing constraint\n"); 6076 SCIP_CALL( multiAggregateBinvar(scip, linearconshdlrexist, aggrconsdata->vars, aggrconsdata->nvars, varindex, &infeasible, &aggregated) ); 6095 if( nuplocks == 1 && ndownlocks == 0 && (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PACKING ) 6102 else if( nuplocks == 1 && ndownlocks == 1 && (SCIP_SETPPCTYPE)consdata->setppctype == SCIP_SETPPCTYPE_PARTITIONING ) 6109 SCIPdebugMessage("changing constraint <%s> from set-partitioning to set-packing, due to multi-aggregation\n", SCIPconsGetName(cons)); 6120 SCIPdebugMessage("1: deleting redundant constraint <%s>, due to multi-aggregation\n", SCIPconsGetName(usefulconss[deleteconsindex])); 6128 SCIPdebugMessage("2: deleting redundant constraint <%s>, due to multi-aggregation\n", SCIPconsGetName(cons)); 6155 /** compares each constraint with all other constraints for possible redundancy and removes or changes constraint 6167 ) 6202 /* get constraint from current hash table with same variables as cons0 and with coefficients either equal or negated 6214 /* constraint found: create a new constraint with same coefficients and best left and right hand side; 6232 if( consdata1->setppctype != SCIP_SETPPCTYPE_PARTITIONING && consdata0->setppctype != consdata1->setppctype ) /*lint !e641*/ 6239 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */ 6349 || SCIPvarGetIndex(consdata1->vars[v1]) > SCIPvarGetIndex(consdata0->vars[consdata0->nvars-1])); 6373 ) 6416 SCIPerrorMessage("invalid setppc type <%d> of constraint <%s>\n", consdata1->setppctype, SCIPconsGetName(cons1)); 6439 SCIPerrorMessage("invalid setppc type <%d> of constraint <%s>\n", consdata1->setppctype, SCIPconsGetName(cons1)); 6466 SCIPerrorMessage("invalid setppc type <%d> of constraint <%s>\n", consdata1->setppctype, SCIPconsGetName(cons1)); 6472 SCIPerrorMessage("invalid setppc type <%d> of constraint <%s>\n", consdata0->setppctype, SCIPconsGetName(cons0)); 6525 for( c = (cons0changed ? 0 : firstchange); c < chkind && !(*cutoff) && SCIPconsIsActive(cons0); ++c ) 6618 /* one is a covering, the other one a packing constraint: replace them by a single partitioning constraint */ 6619 assert((consdata0->setppctype == SCIP_SETPPCTYPE_COVERING && consdata1->setppctype == SCIP_SETPPCTYPE_PACKING) 6620 || (consdata1->setppctype == SCIP_SETPPCTYPE_COVERING && consdata0->setppctype == SCIP_SETPPCTYPE_PACKING)); /*lint !e641*/ 6633 SCIPdebugMessage("setppc constraint <%s> is contained in <%s>\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1)); 6636 SCIP_CALL( processContainedCons(scip, cons0, cons1, cutoff, nfixedvars, ndelconss, nchgsides) ); 6641 SCIPdebugMessage("setppc constraint <%s> is contained in <%s>\n", SCIPconsGetName(cons1), SCIPconsGetName(cons0)); 6644 SCIP_CALL( processContainedCons(scip, cons1, cons0, cutoff, nfixedvars, ndelconss, nchgsides) ); 6708 SCIP_SETPPCTYPE setppctype, /**< type of constraint: set partitioning, packing, or covering constraint */ 6727 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 6729 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 6761 SCIP_CALL( SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate, 6795 SCIP_SETPPCTYPE setppctype, /**< type of constraint: set partitioning, packing, or covering constraint */ 6814 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 6816 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 6845 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 6853 /** check, if linear constraint can be upgraded to set partitioning, packing, or covering constraint */ 6860 /* check, if linear constraint can be upgraded to set partitioning, packing, or covering constraint 6861 * - all set partitioning / packing / covering constraints consist only of binary variables with a 6868 * - a set partitioning constraint has left hand side of +1.0, and right hand side of +1.0 : x(S) == 1.0 6870 * - a set packing constraint has left hand side of -infinity, and right hand side of +1.0 : x(S) <= 1.0 6872 * - a set covering constraint has left hand side of +1.0, and right hand side of +infinity: x(S) >= 1.0 6875 if( nposbin + nnegbin + nposimplbin + nnegimplbin == nvars && ncoeffspone + ncoeffsnone == nvars ) 6879 if( SCIPisEQ(scip, lhs, rhs) && (SCIPisEQ(scip, lhs, 1.0 - ncoeffsnone) || SCIPisEQ(scip, lhs, ncoeffspone - 1.0)) ) 6881 SCIPdebugMessage("upgrading constraint <%s> to set partitioning constraint\n", SCIPconsGetName(cons)); 6883 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 6886 /* create the set partitioning constraint (an automatically upgraded constraint is always unmodifiable) */ 6888 SCIP_CALL( createNormalizedSetppc(scip, upgdcons, SCIPconsGetName(cons), nvars, vars, vals, mult, 6898 SCIPdebugMessage("upgrading constraint <%s> to set packing constraint\n", SCIPconsGetName(cons)); 6900 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 6903 /* create the set packing constraint (an automatically upgraded constraint is always unmodifiable) */ 6905 SCIP_CALL( createNormalizedSetppc(scip, upgdcons, SCIPconsGetName(cons), nvars, vars, vals, mult, 6915 SCIPdebugMessage("upgrading constraint <%s> to set covering constraint\n", SCIPconsGetName(cons)); 6917 /* check, if we have to multiply with -1 (negate the positive vars) or with +1 (negate the negative vars) */ 6920 /* create the set covering constraint (an automatically upgraded constraint is always unmodifiable) */ 6922 SCIP_CALL( createNormalizedSetppc(scip, upgdcons, SCIPconsGetName(cons), nvars, vars, vals, mult, 6954 SCIPdebugMessage("try to upgrade quadratic constraint <%s> to setpacking constraint ...\n", SCIPconsGetName(cons)); 6975 if( SCIPvarGetType(term->var1) != SCIP_VARTYPE_BINARY || SCIPvarGetType(term->var2) != SCIP_VARTYPE_BINARY ) 6987 coefx = quadvarterms[0].lincoef + quadvarterms[0].sqrcoef; /* for binary variables, we can treat sqr coef as lin coef */ 6988 coefy = quadvarterms[1].lincoef + quadvarterms[0].sqrcoef; /* for binary variables, we can treat sqr coef as lin coef */ 7036 SCIPconsIsModifiable(cons), SCIPconsIsDynamic(cons), SCIPconsIsRemovable(cons), SCIPconsIsStickingAtNode(cons)) ); 7065 /** destructor of constraint handler to free constraint handler data (called when SCIP is exiting) */ 7114 /** presolving deinitialization method of constraint handler (called after presolving has been finished) */ 7124 { 7135 /** solving process deinitialization method of constraint handler (called before branch and bound process data is freed) */ 7181 /* if constraint belongs to transformed problem space, drop bound change events on variables */ 7225 SCIPconsIsInitial(sourcecons), SCIPconsIsSeparated(sourcecons), SCIPconsIsEnforced(sourcecons), 7228 SCIPconsIsDynamic(sourcecons), SCIPconsIsRemovable(sourcecons), SCIPconsIsStickingAtNode(sourcecons)) ); 7243 /** LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved) */ 7275 SCIPdebugMessage("separating %d/%d set partitioning / packing / covering constraints\n", nusefulconss, nconss); 7318 SCIPdebugMessage("separating %d/%d set partitioning / packing / covering constraints\n", nusefulconss, nconss); 7349 /** if fractional variables exist, chooses a set S of them and branches on (i) x(S) == 0, and (ii) x(S) >= 1 */ 7354 SCIP_RESULT* result /**< pointer to store the result SCIP_BRANCHED, if branching was applied */ 7372 /**@todo use a better set partitioning / packing / covering branching on LP solution (use SOS branching) */ 7394 /* sort fractional variables by number of uses in enabled set partitioning / packing / covering constraints */ 7415 /* if none of the fractional variables is member of a set partitioning / packing / covering constraint, 7426 /* select the first variables from the sorted candidate list, until MAXBRANCHWEIGHT is reached; 7441 /* @todo instead of taking the minimum into account try other variants like the maximum and the average */ 7442 /* calculate priorities and estimates by adding up/taking the minimum of all single priorities/estimates */ 7477 SCIPdebugMessage("fixing variable <%s> to 1.0 in right child node\n", SCIPvarGetName(sortcands[0])); 7486 (void) SCIPsnprintf(name, SCIP_MAXSTRLEN, "BSB%"SCIP_LONGINT_FORMAT, SCIPgetNTotalNodes(scip)); 7497 SCIPdebugMessage("binary set branching: nselcands=%d/%d, weight(S)=%g, A={", nselcands, nlpcands, branchweight); 7499 SCIPdebugPrintf(" %s[%g]", SCIPvarGetName(sortcands[i]), SCIPgetSolVal(scip, NULL, sortcands[i])); 7521 SCIP_RESULT* result /**< pointer to store the result SCIP_BRANCHED, if branching was applied */ 7538 /**@todo use a better set partitioning / packing / covering branching on pseudo solution (use SOS branching) */ 7566 /* sort unfixed variables by number of uses in enabled set partitioning / packing / covering constraints */ 7591 /* if none of the unfixed variables is member of a set partitioning / packing / covering constraint, 7602 /* @todo instead of taking the minimum into account try other variants like the maximum and the average */ 7620 SCIP_CALL( SCIPcreateChild(scip, &node, (SCIP_Real)nbranchcands, MIN(minestzero, estone[i])) ); 7670 SCIPdebugMessage("LP enforcing %d set partitioning / packing / covering constraints\n", nconss); 7729 /* if the solution is infeasible anyway due to objective value, skip the constraint processing and branch directly */ 7739 SCIPdebugMessage("pseudo enforcing %d set partitioning / packing / covering constraints\n", nconss); 7765 /* at least one constraint is violated by pseudo solution and we didn't find a better way to resolve this: 7818 SCIPinfoMessage(scip, NULL, "violation: the right hand side is violated by by %.15g\n", ABS(sum - 1)); 7846 SCIPdebugMessage("propagating %d/%d set partitioning / packing / covering constraints\n", nmarkedconss, nconss); 7856 /* during presolving, we do not want to propagate constraints with multiaggregated variables. After presolving, 7857 * we want to resolve the multiaggregation to have a clean data structure; All initial constraints should not 7858 * have multiaggregated variables, but this is not true for constraints that were introduced during solving 7922 conshdlrdata->enablecliquelifting = conshdlrdata->enablecliquelifting || conshdlrdata->updatedsetppctype 7923 || conshdlrdata->noldfixedvars != SCIPgetNFixedVars(scip) || conshdlrdata->noldimpls != SCIPgetNImplications(scip) 7948 /*SCIPdebugMessage("presolving set partitioning / packing / covering constraint <%s>\n", SCIPconsGetName(cons));*/ 8001 /* check if constraint is already redundant or infeasible due to fixings, fix or aggregate left over variables if 8004 SCIP_CALL( presolvePropagateCons(scip, cons, TRUE, NULL, NULL, NULL, NULL, nfixedvars, naggrvars, ndelconss, &cutoff) ); 8055 if( oldnfixedvars < *nfixedvars || oldnaggrvars < *naggrvars || oldndelconss < *ndelconss || oldnchgcoefs < *nchgcoefs ) 8060 /* detect redundant constraints; fast version with hash table instead of pairwise comparison */ 8061 SCIP_CALL( detectRedundantConstraints(scip, SCIPblkmem(scip), conss, nconss, &firstchange, ndelconss, nchgsides) ); 8066 /* determine singleton variables in set-partitioning/-packing constraints, or doubleton variables (active and 8070 && ((conshdlrdata->nsetpart > 0 && !SCIPdoNotMultaggr(scip) && conshdlrdata->conshdlrlinear != NULL) 8074 SCIP_CALL( removeDoubleAndSingletonsAndPerformDualpresolve(scip, conss, nconss, conshdlrdata->dualpresolving 8083 else if( oldnfixedvars < *nfixedvars || oldnaggrvars < *naggrvars || oldndelconss < *ndelconss ) 8088 if( conshdlrdata->cliquelifting && conshdlrdata->enablecliquelifting && (presoltiming & SCIP_PRESOLTIMING_EXHAUSTIVE) != 0 ) 8091 SCIP_CALL( addCliques(scip, conss, nconss, firstclique, lastclique, naddconss, ndelconss, nchgbds, &cutoff) ); 8103 SCIP_CALL( preprocessCliques(scip, conshdlrdata, conss, nconss, nrounds, &firstchange, &firstclique, 8112 else if( oldnfixedvars < *nfixedvars || oldnaggrvars < *naggrvars || oldndelconss < *ndelconss || oldnchgcoefs < *nchgcoefs ) 8135 npaircomparisons += (SCIPconsGetData(conss[c])->changed) ? (SCIP_Longint) c : ((SCIP_Longint) c - (SCIP_Longint) firstchange); 8137 SCIP_CALL( removeRedundantConstraints(scip, conss, firstchange, c, &cutoff, nfixedvars, ndelconss, nchgsides) ); 8146 if( (*ndelconss - oldndelconss + *nfixedvars - oldnfixedvars) / ((SCIP_Real)npaircomparisons) < MINGAINPERNMINCOMPARISONS ) 8159 SCIP_CALL( addCliques(scip, conss, nconss, MIN(firstclique, nconss), MIN(lastclique, nconss), naddconss, ndelconss, 8188 SCIPdebugMessage("conflict resolving method of set partitioning / packing / covering constraint handler\n"); 8198 /* the inference constraint is a set partitioning or covering constraint with the inference variable infered to 1.0: 8224 /* the inference constraint is a set partitioning or packing constraint with the inference variable infered to 0.0: 8302 SCIPdebugMessage("activation information for set partitioning / packing / covering constraint <%s>\n", 8305 /* we only might add the constraint to the propagation list, when we are not activating it in probing mode */ 8334 SCIPdebugMessage("deactivation information for set partitioning / packing / covering constraint <%s>\n", 8421 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode, global, valid) ); 8464 SCIP_CALL( SCIPparseVarsLinearsum(scip, str, vars, coefs, &nvars, coefssize, &requsize, &endptr, success) ); 8473 SCIP_CALL( SCIPparseVarsLinearsum(scip, str, vars, coefs, &nvars, coefssize, &requsize, &endptr, success) ); 8474 assert(!*success || requsize <= coefssize); /* if successful, then should have had enough space now */ 8498 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 8502 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 8506 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) ); 8543 /** constraint method of constraint handler which returns the number of variables (if possible) */ 8574 /*debugMessage("Exec method of bound change event handler for set partitioning / packing / covering constraints\n");*/ 8612 /* one variable was changed to a negated or aggregated variable, so maybe we can merge again */ 8613 if( SCIPvarGetStatus(var) != SCIP_VARSTATUS_FIXED && SCIPvarGetLbGlobal(var) < 0.5 && SCIPvarGetUbGlobal(var) > 0.5 ) 8633 if( (eventtype & SCIP_EVENTTYPE_BOUNDTIGHTENED) && (consdata->nfixedones >= 1 || consdata->nfixedzeros >= consdata->nvars - 1) ) 8671 /* for two (binary) variables we will create a set packing constraint and add the clique information of the conflict is global */ 8705 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "cf%d_%"SCIP_LONGINT_FORMAT, SCIPgetNRuns(scip), SCIPgetNConflictConssApplied(scip)); 8718 SCIPdebugMessage("new clique of conflict constraint %s led to %d fixings\n", consname, ncliquebdchgs); 8757 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "cf%d_%"SCIP_LONGINT_FORMAT, SCIPgetNRuns(scip), SCIPgetNConflictConssApplied(scip)); 8779 /** creates the handler for set partitioning / packing / covering constraints and includes it in SCIP */ 8793 SCIP_CALL( SCIPincludeConflicthdlrBasic(scip, NULL, CONFLICTHDLR_NAME, CONFLICTHDLR_DESC, CONFLICTHDLR_PRIORITY, 8822 SCIP_CALL( SCIPsetConshdlrPresol(scip, conshdlr, consPresolSetppc, CONSHDLR_MAXPREROUNDS, CONSHDLR_PRESOLTIMING) ); 8824 SCIP_CALL( SCIPsetConshdlrProp(scip, conshdlr, consPropSetppc, CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, 8827 SCIP_CALL( SCIPsetConshdlrSepa(scip, conshdlr, consSepalpSetppc, consSepasolSetppc, CONSHDLR_SEPAFREQ, 8835 /* include the linear constraint to setppc constraint upgrade in the linear constraint handler */ 8836 SCIP_CALL( SCIPincludeLinconsUpgrade(scip, linconsUpgdSetppc, LINCONSUPGD_PRIORITY, CONSHDLR_NAME) ); 8841 SCIP_CALL( SCIPincludeQuadconsUpgrade(scip, quadraticUpgdSetppc, QUADCONSUPGD_PRIORITY, TRUE, CONSHDLR_NAME) ); 8864 " should we try to lift variables into other clique constraints, fix variables, aggregate them, and also shrink the amount of variables in clique constraints", 8868 "should we try to generate extra cliques out of all binary variables to maybe fasten redundant constraint detection", 8872 "should we try to shrink the number of variables in a clique constraints, by replacing more than one variable by only one", 8880 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 8906 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 8908 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 8914 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode); 8920 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 8938 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 8964 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 8966 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 8972 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode); 8978 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 8997 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 9023 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? 9025 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even 9031 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode); 9037 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() 9086 { 9107 { 9128 { 9139 /** gets the dual solution of the set partitioning / packing / covering constraint in the current LP */ 9148 { 9163 /** gets the dual Farkas value of the set partitioning / packing / covering constraint in the current infeasible LP */ 9172 { 9187 /** returns the linear relaxation of the given set partitioning / packing / covering constraint; may return NULL if no 9198 { 9219 { 9241 {
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed) Definition: scip.c:22777 void SCIPpermuteArray(void **array, int begin, int end, unsigned int *randseed) Definition: misc.c:7884 Definition: cons_setppc.h:54 SCIP_RETCODE SCIPgetLPBranchCands(SCIP *scip, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars) Definition: scip.c:33125 SCIP_RETCODE SCIPaddVarsToRowSameCoef(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real val) Definition: scip.c:27932 Definition: type_result.h:33 static SCIP_RETCODE dualPresolving(SCIP *scip, SCIP_CONS *cons, int *nfixedvars, int *ndelconss, SCIP_RESULT *result) Definition: cons_setppc.c:1182 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 SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSACTIVE((*consactive))) Definition: scip.c:5657 SCIP_BILINTERM * SCIPgetBilinTermsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13414 static SCIP_RETCODE addCliques(SCIP *scip, SCIP_CONS **conss, int nconss, int firstclique, int lastclique, int *naddconss, int *ndelconss, int *nchgbds, SCIP_Bool *cutoff) Definition: cons_setppc.c:5232 static SCIP_RETCODE addExtraCliques(SCIP *const scip, SCIP_VAR **const binvars, int const nbinvars, int *const cliquepartition, int const ncliques, SCIP_CONS **const usefulconss, int *const nusefulconss, int const nrounds, int *const nfixedvars, int *const naddconss, int *const ndelconss, int *const nchgcoefs, SCIP_Bool *const cutoff) Definition: cons_setppc.c:2594 static SCIP_RETCODE analyzeConflictZero(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:1938 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 static SCIP_RETCODE addCoef(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var) Definition: cons_setppc.c:984 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 SCIP_RETCODE SCIPsetIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx, int val) Definition: scip.c:42709 Definition: struct_scip.h:53 SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1567 static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, int pos) Definition: cons_setppc.c:1065 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 SCIP_QUADVARTERM * SCIPgetQuadVarTermsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13353 static SCIP_RETCODE analyzeConflictOne(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:1972 void SCIPwarningMessage(SCIP *scip, const char *formatstr,...) Definition: scip.c:1248 static SCIP_RETCODE detectRedundantConstraints(SCIP *scip, BMS_BLKMEM *blkmem, SCIP_CONS **conss, int nconss, int *firstchange, int *ndelconss, int *nchgsides) Definition: cons_setppc.c:6167 SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop))) Definition: scip.c:5634 static SCIP_RETCODE collectCliqueData(SCIP *const scip, SCIP_CONS **const usefulconss, int const nusefulconss, SCIP_VAR **const usefulvars, int *const nusefulvars, SCIP_HASHMAP *const vartoindex, int *const varnconss, int *const maxnvarconsidx, int **const varconsidxs, int *const maxnvars) Definition: cons_setppc.c:2806 SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa) Definition: scip.c:5246 Definition: type_result.h:49 Definition: type_set.h:35 SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy))) Definition: scip.c:5334 Definition: struct_var.h:196 SCIP_RETCODE SCIPvarGetAggregatedObj(SCIP_VAR *var, SCIP_Real *aggrobj) Definition: var.c:16927 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:24320 static SCIP_RETCODE createNormalizedSetppc(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, int mult, SCIP_SETPPCTYPE setppctype, 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:6795 SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars))) Definition: scip.c:5818 Definition: cons_quadratic.h:75 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 SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7778 SCIP_ROW * SCIPgetRowSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9198 SCIP_RETCODE SCIPincludeConshdlrSetppc(SCIP *scip) Definition: cons_setppc.c:8788 SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17648 Definition: type_var.h:53 SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse))) Definition: scip.c:5795 static SCIP_RETCODE preprocessCliques(SCIP *const scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS **const conss, int const nconss, int const nrounds, int *const firstchange, int *const firstclique, int *const lastclique, int *const nfixedvars, int *const naggrvars, int *const ndelconss, int *const nchgcoefs, SCIP_Bool *const cutoff) Definition: cons_setppc.c:4788 static SCIP_RETCODE enforcePseudo(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, SCIP_Bool *infeasible, SCIP_Bool *reduceddom, SCIP_Bool *solvelp) Definition: cons_setppc.c:2449 SCIP_Real SCIPgetDualsolSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9148 Definition: cons_setppc.h:55 SCIP_RETCODE SCIPparseVarsLinearsum(SCIP *scip, const char *str, SCIP_VAR **vars, SCIP_Real *vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success) Definition: scip.c:16332 SCIP_RETCODE SCIPmarkConsPropagate(SCIP *scip, SCIP_CONS *cons) Definition: scip.c:25786 static SCIP_DECL_QUADCONSUPGD(quadraticUpgdSetppc) Definition: cons_setppc.c:6944 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15737 SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var) Definition: scip.c:34983 Definition: type_result.h:40 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 SCIP_RETCODE SCIPaddCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible) Definition: scip.c:30967 Constraint handler for the set partitioning / packing / covering constraints . SCIP_RETCODE SCIPcreateIntarray(SCIP *scip, SCIP_INTARRAY **intarray) Definition: scip.c:42624 static SCIP_RETCODE removeRedundantCons(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, int *ndelconss) Definition: cons_setppc.c:6275 static SCIP_RETCODE processContainedCons(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, SCIP_Bool *cutoff, int *nfixedvars, int *ndelconss, int *nchgsides) Definition: cons_setppc.c:6373 Definition: struct_tree.h:122 int SCIPgetIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx) Definition: scip.c:42693 SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree))) Definition: scip.c:5359 static SCIP_RETCODE checkForOverlapping(SCIP *const scip, SCIP_CONS *const cons, int const considx, int const endidx, SCIP_CONS **const usefulconss, int const nusefulconss, SCIP_VAR **const usefulvars, int *const nusefulvars, SCIP_HASHMAP *const vartoindex, int *const varnconss, int *const maxnvarconsidx, int **const varconsidxs, int *const countofoverlapping, SCIP_Bool const shrinking, SCIP_Bool *const chgcons, SCIP_VAR **undoneaggrvars, SCIP_Bool *undoneaggrtypes, int *const naggregations, int *const saggregations, int *const nfixedvars, int *const naggrvars, int *const nchgcoefs, int *const ndelconss, SCIP_Bool *const cutoff) Definition: cons_setppc.c:3367 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 SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success) Definition: scip.c:24720 Definition: struct_sol.h:50 static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_SETPPCTYPE setppctype) Definition: cons_setppc.c:540 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_RETCODE SCIPincIntarrayVal(SCIP *scip, SCIP_INTARRAY *intarray, int idx, int incval) Definition: scip.c:42728 SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2159 SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: scip.c:3573 SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr) Definition: cons.c:3917 SCIP_RETCODE SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDEACTIVE((*consdeactive))) Definition: scip.c:5680 int SCIPgetNFixedzerosSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9241 static SCIP_RETCODE removeDoubleAndSingletonsAndPerformDualpresolve(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool dualpresolvingenabled, SCIP_Bool linearconshdlrexist, int *nfixedvars, int *naggrvars, int *ndelconss, int *nchgcoefs, int *nchgsides, SCIP_Bool *cutoff) Definition: cons_setppc.c:5414 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:36622 static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *cutoff, SCIP_Bool *separated, SCIP_Bool *reduceddom) Definition: cons_setppc.c:2364 Definition: struct_misc.h:101 SCIP_RETCODE SCIPgetBinvarRepresentative(SCIP *scip, SCIP_VAR *var, SCIP_VAR **repvar, SCIP_Bool *negated) Definition: scip.c:17233 static SCIP_RETCODE fixAdditionalVars(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, SCIP_Bool *cutoff, int *nfixedvars) Definition: cons_setppc.c:6301 SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar) Definition: scip.c:17075 int SCIPgetNLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13298 Definition: type_result.h:35 Definition: struct_cons.h:36 #define SCIPfreeBlockMemoryArrayNull(scip, ptr, num) Definition: scip.h:20574 SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:19526 SCIP_Real SCIPcalcNodeselPriority(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR branchdir, SCIP_Real targetvalue) Definition: scip.c:33651 SCIP_RETCODE SCIPupdateConsFlags(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1) Definition: scip.c:25300 Definition: struct_cons.h:116 static SCIP_RETCODE addCut(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *cutoff) Definition: cons_setppc.c:2330 Definition: type_retcode.h:42 void SCIPsortDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) static SCIP_RETCODE addCliqueDataEntry(SCIP *const scip, SCIP_VAR *const addvar, int const considx, SCIP_Bool const maybenew, SCIP_VAR **const usefulvars, int *const nusefulvars, SCIP_HASHMAP *const vartoindex, int *const varnconss, int *const maxnvarconsidx, int **const varconsidxs) Definition: cons_setppc.c:2955 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15859 Definition: type_lp.h:47 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 SCIP_Real SCIPgetRowLPFeasibility(SCIP *scip, SCIP_ROW *row) Definition: scip.c:28151 Definition: type_result.h:36 SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41907 SCIP_RETCODE SCIPinferBinvarCons(SCIP *scip, SCIP_VAR *var, SCIP_Bool fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:20669 Definition: struct_misc.h:120 constraint handler for quadratic constraints Definition: type_var.h:42 SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITPRE((*consexitpre))) Definition: scip.c:5503 static int setppcCompare(SCIP_CONS *const cons1, SCIP_CONS *const cons2) Definition: cons_setppc.c:172 static SCIP_RETCODE consdataCreateTransformed(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_SETPPCTYPE setppctype) Definition: cons_setppc.c:612 SCIP_RETCODE SCIPgetPseudoBranchCands(SCIP *scip, SCIP_VAR ***pseudocands, int *npseudocands, int *npriopseudocands) Definition: scip.c:33464 static SCIP_DECL_CONSHDLRCOPY(conshdlrCopySetppc) Definition: cons_setppc.c:7059 #define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum) Definition: scip.h:20562 static SCIP_RETCODE multiAggregateBinvar(SCIP *scip, SCIP_Bool linearconshdlrexist, SCIP_VAR **vars, int nvars, int pos, SCIP_Bool *infeasible, SCIP_Bool *aggregated) Definition: cons_setppc.c:5315 SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata) Definition: scip.c:5962 static SCIP_RETCODE dropAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr) Definition: cons_setppc.c:961 static SCIP_RETCODE consdataEnsureVarsSize(SCIP *scip, SCIP_CONSDATA *consdata, int num) Definition: cons_setppc.c:516 static SCIP_RETCODE catchEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos) Definition: cons_setppc.c:838 SCIP_RETCODE SCIPvarGetProbvarBinary(SCIP_VAR **var, SCIP_Bool *negated) Definition: var.c:11573 static SCIP_RETCODE dropEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos) Definition: cons_setppc.c:902 Definition: type_set.h:41 Definition: cons_setppc.h:53 Definition: type_retcode.h:33 void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming) Definition: scip.c:5292 static SCIP_RETCODE performVarDeletions(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss) Definition: cons_setppc.c:6661 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 Definition: type_result.h:42 static SCIP_DECL_CONFLICTEXEC(conflictExecSetppc) Definition: cons_setppc.c:8660 const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:706 SCIP_RETCODE SCIPmultiaggregateVar(SCIP *scip, SCIP_VAR *var, int naggvars, SCIP_VAR **aggvars, SCIP_Real *scalars, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated) Definition: scip.c:23020 static SCIP_RETCODE processFixings(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, SCIP_Bool *addcut, SCIP_Bool *mustcheck) Definition: cons_setppc.c:2011 SCIP_RETCODE SCIPaddConsNode(SCIP *scip, SCIP_NODE *node, SCIP_CONS *cons, SCIP_NODE *validnode) Definition: scip.c:11929 SCIP_RETCODE SCIPaddVarImplication(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool *infeasible, int *nbdchgs) Definition: scip.c:21682 static SCIP_RETCODE lockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var) Definition: cons_setppc.c:285 Definition: type_retcode.h:34 SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars) Definition: scip.c:17116 static SCIP_Bool checkCons(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol) Definition: cons_setppc.c:2243 SCIP_RETCODE SCIPsetConshdlrDelvars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELVARS((*consdelvars))) Definition: scip.c:5749 static SCIP_RETCODE catchAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr) Definition: cons_setppc.c:938 public data structures and miscellaneous methods 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 int SCIPgetNFixedonesSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9219 SCIP_RETCODE SCIPfreeIntarray(SCIP *scip, SCIP_INTARRAY **intarray) Definition: scip.c:42641 SCIP_RETCODE SCIPcalcCliquePartition(SCIP *const scip, SCIP_VAR **const vars, int const nvars, int *const cliquepartition, int *const ncliques) Definition: scip.c:21859 Definition: type_message.h:43 Definition: type_var.h:46 SCIP_Bool SCIPhaveVarsCommonClique(SCIP *scip, SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics) Definition: scip.c:22165 Definition: struct_lp.h:189 static SCIP_RETCODE setSetppcType(SCIP *scip, SCIP_CONS *cons, SCIP_SETPPCTYPE setppctype) Definition: cons_setppc.c:767 Definition: type_set.h:38 Definition: cons_quadratic.h:92 SCIP_RETCODE SCIPcreateConsBasicSetpart(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars) Definition: cons_setppc.c:8930 int SCIPgetNQuadVarTermsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13339 Definition: type_var.h:41 Definition: type_var.h:45 SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp))) Definition: scip.c:5611 static SCIP_Longint consdataGetSignature(SCIP_CONSDATA *consdata) Definition: cons_setppc.c:714 static SCIP_RETCODE removeRedundantConstraints(SCIP *scip, SCIP_CONS **conss, int firstchange, int chkind, SCIP_Bool *cutoff, int *nfixedvars, int *ndelconss, int *nchgsides) Definition: cons_setppc.c:6489 static SCIP_RETCODE consdataPrint(SCIP *scip, SCIP_CONSDATA *consdata, FILE *file) Definition: cons_setppc.c:665 Constraint handler for linear constraints in their most general form, . void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key) Definition: misc.c:1627 static SCIP_RETCODE collectCliqueConss(SCIP *const scip, SCIP_CONS **const conss, int const nconss, SCIP_CONS **const usefulconss, int *const nusefulconss, int *const nfixedvars, int *const ndelconss, int *const nchgcoefs, SCIP_Bool *const cutoff) Definition: cons_setppc.c:2714 static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr) Definition: cons_setppc.c:355 SCIP_RETCODE SCIPgetChildren(SCIP *scip, SCIP_NODE ***children, int *nchildren) Definition: scip.c:36851 void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...) Definition: scip.c:1298 SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:19898 static SCIP_RETCODE unlockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var) Definition: cons_setppc.c:320 SCIP_RETCODE SCIPwriteVarsLinearsum(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool type) Definition: scip.c:15966 SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:36668 SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete))) Definition: scip.c:5565 static SCIP_RETCODE createConsSetppc(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_SETPPCTYPE setppctype, 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:6710 Definition: type_set.h:34 Definition: type_history.h:34 Definition: struct_misc.h:80 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2177 SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint))) Definition: scip.c:5772 static SCIP_RETCODE mergeMultiples(SCIP *scip, SCIP_CONS *cons, int *nfixedvars, int *ndelconss, int *nchgcoefs, SCIP_Bool *cutoff) Definition: cons_setppc.c:1473 Definition: type_history.h:35 void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...) Definition: scip.c:1281 int SCIPgetNBilinTermsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13400 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 presolvePropagateCons(SCIP *const scip, SCIP_CONS *const cons, SCIP_Bool const aggregate, SCIP_VAR **undoneaggrvars, SCIP_Bool *undoneaggrtypes, int *const naggregations, int *const saggregations, int *const nfixedvars, int *const naggrvars, int *const ndelconss, SCIP_Bool *const cutoff) Definition: cons_setppc.c:3024 static int setppcCompare2(SCIP_CONS *const cons1, SCIP_CONS *const cons2) Definition: cons_setppc.c:228 #define SCIPduplicateBufferArray(scip, ptr, source, num) Definition: scip.h:20593 SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITSOL((*consexitsol))) Definition: scip.c:5455 const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:278 Definition: type_result.h:43 SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41933 SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:19453 SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:19931 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_Real SCIPgetDualfarkasSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9172 SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable) Definition: scip.c:27600 SCIP_RETCODE SCIPcreateConsBasicSetpack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars) Definition: cons_setppc.c:8988 static SCIP_RETCODE conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata) Definition: cons_setppc.c:380 static SCIP_DECL_CONSGETNVARS(consGetNVarsSetppc) Definition: cons_setppc.c:8553 SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41959 SCIP_RETCODE SCIPincludeQuadconsUpgrade(SCIP *scip, SCIP_DECL_QUADCONSUPGD((*quadconsupgd)), int priority, SCIP_Bool active, const char *conshdlrname) Definition: cons_quadratic.c:12639 #define SCIPduplicateBlockMemoryArray(scip, ptr, source, num) Definition: scip.h:20568 SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip) Definition: scip.c:38114 Definition: type_set.h:42 SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup) Definition: scip.c:19399 SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname) Definition: cons_linear.c:16047 Definition: type_result.h:45 static void deleteCliqueDataEntry(SCIP_VAR *const var, int const considx, SCIP_HASHMAP *const vartoindex, int *const varnconss, int **const varconsidxs) Definition: cons_setppc.c:2913 static SCIP_RETCODE performAggregations(SCIP *const scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_VAR **const undoneaggrvars, SCIP_Bool *const undoneaggrtypes, int const naggregations, int *const naggrvars, SCIP_Bool *const cutoff) Definition: cons_setppc.c:4707 SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons) Definition: cons_setppc.c:9128 SCIP_RETCODE SCIPcreateChild(SCIP *scip, SCIP_NODE **node, SCIP_Real nodeselprio, SCIP_Real estimate) Definition: scip.c:33701 SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24573 static SCIP_RETCODE liftCliqueVariables(SCIP *const scip, SCIP_CONS *const cons, int const arraypos, SCIP_VAR **const usefulvars, int *const nusefulvars, int const endidx, SCIP_Bool **cliquevalues, SCIP_HASHMAP *const vartoindex, int *const varnconss, int *const maxnvarconsidx, int **const varconsidxs, int *const maxnvars, int *const nadded, SCIP_Bool *const chgcons, int *const nfixedvars, int *const ndelconss, SCIP_Bool *const cutoff) Definition: cons_setppc.c:4233 Definition: type_result.h:46 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2094 static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata) Definition: cons_setppc.c:634 SCIP_Real SCIPgetLhsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13426 Definition: type_retcode.h:43 SCIP_Real SCIPcalcChildEstimate(SCIP *scip, SCIP_VAR *var, SCIP_Real targetvalue) Definition: scip.c:33678 Definition: objbranchrule.h:33 SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars))) Definition: scip.c:5841 SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val) Definition: scip.c:27864 Definition: type_var.h:43 SCIP_RETCODE SCIPcopyConsLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_Real *sourcecoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode, SCIP_Bool global, SCIP_Bool *valid) Definition: cons_linear.c:16311 void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons.c:3927 SCIP_Real SCIPgetRhsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:13438 void SCIPsortedvecInsertDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *keyval, int *len, int *pos) SCIP_Bool SCIPsortedvecFindDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos) Definition: type_result.h:39 Definition: struct_event.h:185 SCIP_RETCODE SCIPcreateConsBasicSetcover(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars) Definition: cons_setppc.c:9047 static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, int *naddconss, int *ndelconss, int *nfixedvars, SCIP_Bool *cutoff) Definition: cons_setppc.c:1617 int SCIPvarCompareActiveAndNegated(SCIP_VAR *var1, SCIP_VAR *var2) Definition: var.c:11168 Definition: type_var.h:56 |