6.3.1 Imposing lower and upper bounds on the objective
One may want to utilize the knowledge he/she has about the objective value of an opti- mization problem in form of min cTx. If we knew lower and upper bound on the objective we could impose the constraint lb ≤ cTx ≤ ub in order to prune the search space. However, when a constraint contains all the variables presented in the problem, this turns out to be inefficient (in case of ILOG CPLEX7 this would even slow down the computation). Imposing the constraint over the objective involving complex linear expression complicates the search space, thus it could make task harder to solve.
More efficient way of incorporating bounds on the objective is to work with nodes in the branch and bound tree constructed by the IP solver. For example, if the LP relaxation in some node yields a value greater than the upper bound given in advance, such node can be cut off. In ILOG CPLEX it can be done by setting parameters CutLo and CutUp to proper values.
6 ADDITIONAL OBSERVATIONS
We use those parameters both in MIP pricing solver (see Chapter 3.3.2) and for resolving restricted the master problem as an IP (see Chapter 4.6).
6.3.2 Branching priorities for variables
In every integer programming model we can specify priorities over variables for branching. Simply said, if the continuous relaxation of the model does contain fractional values, the solver will start branch on the variable with the highest priority. If we had some background knowledge, which variables have bigger impact on the objective, it would be desired to settle assignment for them as soon as possible (Gilpin and Sandholm, 2011).
In our MIP model for the pricing problem (see Chapter 3.3.2), variables for assignments during weekends are more important than other ones in most cases (Maenhout and Vanhoucke, 2010). This fact follows from the typical structure of the constraints which restricts frequently shift assignments during Saturdays and Sundays in some way.
6.3.3 Solution pool
Although the main aim of integer programming is usually to find a single optimal solu- tion, MIP-based pricing model described in Chapter 3.3.2 can also provide multiple solutions (columns) at single iteration.
This can be arranged using technique introduced in (Danna et al., 2007) and implemented in ILOG CPLEX. After finding an optimal solution the algorithm enters into the second stage, where it uses information gathered in previous stage such as partial branch and bound tree, integer solutions found so far and other. During this stage, additional solutions are generated, which are not necessarily the optimal ones. These solutions are then stored in a data structure called solution pool.
One can specify various parameters of solutions stored in the pool as well as the parameters of the pool itself. For example, we can demand to find additional 5 solutions with the best objective value. Or, as it turns out to be useful for us, store good, diverse solutions (defined as the average pairwise Hamming distance on the vectors of integer variables).
In our experiments we found out this feature to be very useful even when there is a little additional time spent for finding another solutions in pool.
6 ADDITIONAL OBSERVATIONS
6.3.4 Subproblem skipping
As we pointed out in Chapter 3.2, determining whether the column with negative reduced cost exists is N P-complete problem. Moreover, this problem has to be solved for every em- ployee separately, since each of them is a subproblem (recall the block-diagonal matrix F in Chapter 2.2). When we have a master problem to solve with tens of employees, it becomes difficult even just to check whether the column generation has converged.
However, we can exploit the symmetry of the employees. Consider a subset of employees having the same working contract, skill competency and working preferences. During the solution of the root node in branch and bound tree, the algorithm finds out that for some employee i there is no column with negative reduced cost. The algorithm then switches to the next employee (subproblem) j. However, when γi ≤ γj holds (i.e. the upper bound on
the pricing problem for j is looser than for the i) there is obviously no column with negative reduced cost for employee j too. Thus, we do not have to prove the non-existence of a negative reduced cost column by running the pricing solver. However, this is possible only when no column was added since the last time the subproblem i yielded with no column with negative reduced cost, i.e. dual prices π has to be the same.
Similar strategy can be used also in non-root node. However, additional condition for skipping a subproblem has to be considered, since branching constraints were imposed. One has to check whether the set of branching constraints for the subproblem (employee) to be skipped is a super set of the branching constraints for the subproblem which has provably failed (i.e. no column with negative reduced cost exists).
Essentially, we can skip the subproblem whether its relaxation (less constrained subprob- lem) failed, thus sometimes, even employees with different working contract, workload and preferences can be skipped.