Constraint Density Detector
Overview
ID | Full Name | Propagate | Finish | Postprocess |
---|---|---|---|---|
D | densemasterconss | ✓ |
This detector adds all constraints that have at least two variable coefficients that are closer than \(1\) apart from another to the master constraints.
Algorithmic Details
- Iterate over all open constraints ( \(N\) many)
- For each constraint, get the number of nonzeros ( \(n_{\text{nonzeros}}=\)
getNVarsForCons()
) and make a tuple of the two: \((n,c)\), with \(c\) the constraint and add it to the listl
- For each constraint, get the number of nonzeros ( \(n_{\text{nonzeros}}=\)
- Sort the tuples in
l
in ascending order by the first element (the neighborhood, higher means more dense). - Set the
last index
to be \(r_{max}*N\), with \(r_{max}\) being the parameter "maximal ratio" (by default \(0.2\)) - Iterate over all constraints
- If the
last index
(i.e. by default the first \(20\%\) of the constraints, starting with the greatest number of nonzeros) is reached, stop. - If the difference in nonzeros between the current item
l[i]
and the next iteml[i+1]
is smaller than the defaultmaximum difference index
= \(1\), seti
to be themaximum difference index
, i.e. if there is a jump between two constraints in their number of nonzero entries, stop.
- If the
- Set all constraints up until the
maximum difference index
to be master constraints, i.e. at max the first \(20\%\) of the constraints with the highest and similar neighborhood size.
Theoretical Details
Parameters
enabled flag to indicate whether detector <densemasterconss> is enabled [TRUE] finishingenabled flag to indicate whether detector <densemasterconss> is enabled for finishing of incomplete decompositions [FALSE] freqcallround frequency the detector gets called in detection loop ,ie it is called in round r if and only if minCallRound <= r <= maxCallRound AND (r - minCallRound) mod freqCallRound == 0 <densemasterconss> [1] maxcallround maximum round the detector gets called in detection loop <densemasterconss> [0] mincallround minimum round the detector gets called in detection loop <densemasterconss> [0] origenabled flag to indicate whether detector <densemasterconss> is enabled for detecting in the original problem [TRUE] origfreqcallround frequency the detector gets called in detection loop,i.e., it is called in round r if and only if minCallRound <= r <= maxCallRound AND (r - minCallRound) mod freqCallRound == 0 <densemasterconss> [1] origmaxcallround maximum round the detector gets called in detection loop <densemasterconss> [2147483647] origmincallround minimum round the detector gets called in detection loop <densemasterconss> [0] overruleemphasis flag to indicate whether emphasis settings for detector <densemasterconss> should be overruled by normal settings [FALSE] postprocessingenabled flag to indicate whether detector <densemasterconss> is enabled for postprocessing of finished decompositions [FALSE] priority priority of detector <densemasterconss> [0] skip flag to indicate whether detector <densemasterconss> should be skipped if others found decompositions [FALSE] usefullrecall flag to indicate whether detector <densemasterconss> should be called on descendants of the current partialdec [FALSE]
Links
- Documentation: dec_densemasterconss.cpp