/** * Create a search strategy which selects the variables to branch on with <code>VAR_SELECTOR * </code>, then select the value closest to the middle value of its domain, and split its domain * into two intervals (binary decisions will be used). If <code>LOWERFIRST</code> is set to true, * the domain is restricted to the left interval first. If <code>LOWERFIRST</code> is set to * false, the domain is restricted to the right interval first. * * @param VAR_SELECTOR a variable selector * @param LOWERFIRST set to true to select first the left interval, false otherwise * @param VARS variables to branch on * @return a dichotomic strategy for IntVar */ public static IntStrategy dichotomic( VariableSelector<IntVar> VAR_SELECTOR, boolean LOWERFIRST, IntVar... VARS) { if (LOWERFIRST) { return custom( VAR_SELECTOR, ISF.mid_value_selector(LOWERFIRST), DecisionOperator.int_split, VARS); } else { return custom( VAR_SELECTOR, ISF.mid_value_selector(LOWERFIRST), DecisionOperator.int_reverse_split, VARS); } }
/** * Splits the domain of the first non-instantiated variable in the middle and branch first on the * left interval * * @param VARS list of variables * @return int strategy based on domain splits */ public static IntStrategy lexico_Split(IntVar... VARS) { return dichotomic(ISF.lexico_var_selector(), true, VARS); }