cutsel_ensemble.h
Go to the documentation of this file.
36 * normalised directed cutoff distance (only at the root node), normalised expected objective improvement,
37 * objective parallelism, integer support, density, dynamism, normalised pseudo-costs, and normalised number of locks.
38 * It also has a variety of filtering methods. If density filtering is enabled, then it filters all cuts before
39 * scoring over some relative density threshold. After scoring, it selects the cuts with the highest score,
40 * where after each selection, the remaining cuts are either filtered or penalised via parallelism checks.
42 * The algorithm terminates when some limit of selected cuts is reached, there are no cuts remaining to select,
46 * - the efficacy is defined as the distance between the LP solution and the hyperplane \f$ a^T x = b \f$.
47 * It is normalised by the largest efficacy from the given array of cuts. ((log(eff(cut) + 1) / log(maxeff + 1))**2 ;
48 * - the directed cutoff distance is defined as the distance between the LP solution and the hyperplane \f$ a^T x = b \f$
49 * restricted to the line segment joining the LP solution to the currently best primal solution; therefore, it is only
50 * defined when a primal solution is available. It is normalised by the largest cutoff distance from the
52 * - the objective parallelism is how parallel the vector \f$ a \f$ is w.r.t. the objective function \f$ c \f$. That
53 * is, the objective parallelism is given by \f$ \frac{a^T c}{\|a\| \|c\|} \f$. Notice that the vectors are parallel
55 * - the expected objective improvement is defined by the difference of the objective evaluated at the LP solution
56 * and when evaluated at the orthogonal projection onto the cut. As we normalise the value, we remove the
57 * objective vector multiplication from its calculation. We calculate it as efficacy * objective parallelism.
58 * We also normalise it according to the equation ((log(expimprov(cut) + 1) / log(maxexpimprov + 1))**2;
59 * - the integer support of a cut is the ratio between the number of nonzero integer columns and the number of nonzero
61 * - the density of a cut is the ratio of non-zero entries divided by the number of columns in the LP;
62 * - the dynamism of a cut is the ratio between the maximum absolute value over all coefficients and the
63 * minimum absolute value over all coefficients. If this ratio is below a threshold, we give the cut a flat reward
65 * - the pseudo-cost score of the cut is the pseudo-cost score of each variable with non-zero coefficient in the cut
66 * multiplied by the distance in that variable dimension to the orthogonal projection of the LP solution onto
68 * - the number of variable locks for a cut is the average amount of locks attached to variables with
69 * non-zero coefficients in the cut. We normalise the result by the maximum over all cuts: numlocks / maxnumlocks
71 * These features of a cut can be recovered and/or computed with the functions @ref SCIPgetCutEfficacy(), @ref
72 * SCIPgetCutLPSolCutoffDistance(), @ref SCIPgetRowObjParallelism(), and @ref SCIPgetRowNumIntCols(), @ref
73 * SCIProwGetNNonz(), @ref SCIProwGetVals(), @ref SCIProwGetCols(), @ref SCIPgetVarPseudocostScore(),
77 * The non-forced cuts are scanned through, and any cut over a density threshold (0,1) is dropped from
81 * First, the forced cuts --- cuts that are going to enter the LP no matter what --- are used to filter / penalise
82 * the non-forced cuts. This means that for each forced cut, @p fcut, the parallelism between @p fcut and
83 * every non-forced cut, @p cut, is computed (the parallelism between two cuts \f$ a^T x \leq b \f$ and \f$ d^T x \leq e\f$
85 * If the parallelism with @p fcut is larger or equal than some maximum threshold then it is either removed from
86 * consideration (if filter by parallelism), or its score is decreased (if penalise by parallelism).
87 * If the score drops below some threshold @p minscore, then the cut is removed from consideration.
88 * Each time a cut is selected (which is always greedily w.r.t. the scores), the same filtering procedure for
91 * @note The maximum parallelism is a parameter that can be set, as well as the weights for the score.
93 * @note In the case of no primal solution, the weight assigned to the directed cutoff distance is transferred to the
97/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
125 * This is the selection method of the ensemble cut selector. It uses a weighted sum of normalised efficacy,
128 * In addition to the weighted sum score, there are optionally parallelism-based filtering and penalties,
131 * The input cuts array gets re-sorted such that the selected cuts come first and the remaining ones are the end.
SCIP_RETCODE SCIPselectCutsEnsemble(SCIP *scip, SCIP_ROW **cuts, SCIP_ROW **forcedcuts, SCIP_CUTSELDATA *cutseldata, SCIP_Bool root, int ncuts, int nforcedcuts, int maxselectedcuts, int *nselectedcuts)
Definition: cutsel_ensemble.c:681
SCIP_RETCODE SCIPincludeCutselEnsemble(SCIP *scip)
Definition: cutsel_ensemble.c:556
Definition: objbenders.h:44
SCIP callable library.
Definition: struct_lp.h:202
Definition: struct_scip.h:70