Skip to main content
Log in

On the safety of Gomory cut generators

  • Full Length Paper
  • Published:
Mathematical Programming Computation Aims and scope Submit manuscript

Abstract

Gomory mixed-integer cuts are one of the key components in Branch-and-Cut solvers for mixed-integer linear programs. The textbook formula for generating these cuts is not used directly in open-source and commercial software that work in finite precision: Additional steps are performed to avoid the generation of invalid cuts due to the limited numerical precision of the computations. This paper studies the impact of some of these steps on the safety of Gomory mixed-integer cut generators. As the generation of invalid cuts is a relatively rare event, the experimental design for this study is particularly important. We propose an experimental setup that allows statistically significant comparisons of generators. We also propose a parameter optimization algorithm and use it to find a Gomory mixed-integer cut generator that is as safe as a benchmark cut generator from a commercial solver even though it generates many more cuts.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Institutional subscriptions

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9
Fig. 10
Fig. 11
Fig. 12
Fig. 13

Similar content being viewed by others

Notes

  1. This is not necessary if the cuts being tested can be generated independently of the bounds on the variables, or are lifted to be globally valid.

  2. The smallest integrality tolerance is \(0.0\), but the user manual warns that such a small tolerance may not always be attainable.

  3. This setting should have no effect on the outcome since we intercept each solution discovered and store it in a separate pool; we mention it only for completeness.

References

  1. Achterberg, T.: SCIP: solving constraint integer programs. Math. Program. Comput. 1(1), 1–41 (2009)

    Article  MathSciNet  MATH  Google Scholar 

  2. Achterberg, T., Koch, T., Martin, A.: MIPLIB 2003. Oper. Res. Lett. 34(4), 361–372 (2006)

    Article  MathSciNet  MATH  Google Scholar 

  3. Ailon, N.: Aggregation of partial rankings, \(p\)-ratings and top-\(m\) lists. Algorithmica 57, 284–300 (2010)

    Article  MathSciNet  MATH  Google Scholar 

  4. Applegate, D.L., Cook, W., Dash, S., Espinoza, D.G.: Exact solutions to linear programming problems. Oper. Res. Lett. 35(6), 693–699 (2007)

    Article  MathSciNet  MATH  Google Scholar 

  5. Balas, E., Ceria, S., Cornuéjols, G., Natraj, N.: Gomory cuts revisited. Oper. Res. Lett. 19(1), 1–9 (1996)

    Article  MathSciNet  MATH  Google Scholar 

  6. Bixby, R., Rothberg, E.: Progress in computational mixed integer programming—a look back from the other side of the tipping point. Ann. Oper. Res. 149(1), 37–41 (2007)

    Article  MathSciNet  MATH  Google Scholar 

  7. Bixby, R.E., Ceria, S., McZeal, C.M., Savelsbergh, M.W.P.: An updated mixed integer programming library: MIPLIB 3.0. Optima 58, 12–15 (1998)

    Google Scholar 

  8. COIN-OR Branch-and-Cut 2.7 stable r1676. https://projects.coin-or.org/Cbc/

  9. COIN-OR Linear Programming 1.14 stable r1753. https://projects.coin-or.org/Clp/

  10. COIN-OR Cut Generation Library 0.57 stable r1033. https://projects.coin-or.org/Cgl/

  11. Conover, W.J.: Practical Nonparametric Statistics, 3rd edn. Wiley, New York (1999)

    Google Scholar 

  12. Cook, W., Dash, S., Fukasawa, R., Goycoolea, M.: Numerically safe Gomory mixed-integer cuts. INFORMS J. Comput. 21(4), 641–649 (2009)

    Article  MathSciNet  MATH  Google Scholar 

  13. Cook, W., Koch, T., Steffy, D.E., Wolter, K.: An exact rational mixed-integer programming solver. In: Günlük, O., Woeginger, G.J. (eds.) Proceedings of IPCO 2011. Lecture Notes in Computer Science, vol. 6655, pp. 104–116. Springer, Berlin (2011)

  14. Espinoza, D.G.: On linear programming, integer programming and cutting planes. PhD thesis, School of Industrial and Systems Engineering, Georgia Institute of Technology (2006)

  15. Gomory, R.E.: An algorithm for the mixed-integer problem. Technical Report RM-2597, RAND Corporation (1960)

  16. Gutmann, H.-M.: A radial basis function method for global optimization. J. Glob. Optim. 19, 201–227 (2001). doi:10.1023/A:1011255519438

    Article  MathSciNet  MATH  Google Scholar 

  17. Hemker, T.: Derivative free surrogate optimization for mixed-integer nonlinear black-box problems in engineering. Master’s thesis, Technischen Universität Darmstadt (2008)

  18. Holmström, K., Quttineh, N.H., Edvall, M.M.: An adaptive radial basis algorithm (ARBF) for expensive black-box mixed-integer constrained global optimization. Optim. Eng. 9(4), 311–339 (2008)

    Article  MathSciNet  MATH  Google Scholar 

  19. Ibm, ILOG CPLEX 12.2 User’s Manual. http://www-01.ibm.com/software/integration/optimization/cplex-optimizer/

  20. Kahan, W.: Pracniques: further remarks on reducing truncation errors. Commun. ACM 8(1), 40 (1965)

    Article  Google Scholar 

  21. Koch, T., Achterberg, T., Andersen, E., Bastert, O., Berthold, T., Bixby, R.E., Danna, E., Gamrath, G., Gleixner, A.M., Heinz, S., Lodi, A., Mittelmann, H., Ralphs, T., Salvagnin, D., Steffy, D.E., Wolter, K.: MIPLIB 2010. Math. Program. Comput. 3(2), 103–163 (2011)

    Article  MathSciNet  Google Scholar 

  22. Litzkow, M., Livny, M., Mutka, M.: Condor—a hunter of idle workstations. In: Proceedings of the 8th International Conference on Distributed Computing System, pp. 104–111 (1998)

  23. Margot, F.: Testing cut generators for mixed-integer linear programming. Math. Program. Comput. 1(1), 69–95 (2009)

    Article  MathSciNet  MATH  Google Scholar 

  24. Neumaier, A., Shscherbina, O.: Safe bounds in linear and mixed-integer linear programming. Math. Program. A 99, 283–296 (2004)

    Article  MATH  Google Scholar 

  25. R Development Core Team: R: a language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN: 3-900051-07-0 (2008)

  26. Regis, R., Shoemaker, C.: Improved strategies for radial basis function methods for global optimization. J. Glob. Optim. 37, 113–135 (2007). doi:10.1007/s10898-006-9040-1

    Article  MathSciNet  MATH  Google Scholar 

  27. Sheskin, D.J.: Handbook of Parametric and Nonparametric Statistical Procedures. Chapman & Hall/CRC, London (2007)

    MATH  Google Scholar 

  28. van Zuylen, A., Williamson, D.P.: Deterministic algorithms for rank aggregation and other ranking and clustering problems. Math. Oper. Res. 34, 594–620 (2009)

    Article  MathSciNet  MATH  Google Scholar 

Download references

Acknowledgments

We thank the referees for their constructive comments. We are extremely grateful to Jeff Linderoth and the entire Condor team at UW-Madison for giving us the opportunity of running experiments on the grid. G. Cornuéjols was supported in part by NSF Grant CMMI 1263239 and ONR Grant N00014-12-10032. F. Margot was supported by ONR Grant N00014-12-10032. G. Nannicini was supported in part by SUTD Grant SRES11012 and IDC Grants IDSF1200108, IDG21300102.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Giacomo Nannicini.

Appendices

Appendix A: Dive-and-Cut Solution-Generation phase

In this section, we describe the algorithm GenerateSolutions (see Algorithm 4) used to generate a set \(S\) of (\(\epsilon _{\text {abs}}, \epsilon _{\text {rel}}, 0\))-feasible solutions for a problem instance \(P\). GenerateSolutions applies a Branch-and-Cut solver \(\mathcal{B }\) to the instance at hand \(P\) and acts whenever the solver discovers an integer solution. In Cplex, this can be achieved by a call to the function incumbentcallback().

Whenever a candidate solution \(\tilde{x}\) is discovered, GenerateSolutions rounds each integer variable to the nearest integer, and checks the feasibility of this rounded solution. If it fails to satisfy the constraints within an absolute feasibility tolerance \(\epsilon _{\text {abs}}\) and a relative feasibility tolerance \(\epsilon _{\text {rel}}\), it is rejected.

If \(\tilde{x}\) is not rejected, we use a rational LP solver to generate provably feasible solutions to the problem \(P\) that have value \(\tilde{x}_i\) for all integer variables \(x_i\). First, we seek a provably feasible solution \(x^*\) that minimizes the original objective function. If we are able to compute \(x^*\), it is added to the set \(S\) of feasible solutions. If its Euclidean distance to \(\tilde{x}\) is less than \(\epsilon _{\text {rel}}\), we are done and \(\tilde{x}\) is accepted. Otherwise, we seek the point \(x'\) in the feasible region of the LP that is closest to \(\tilde{x}\) in \(\ell _1\)-norm. If \(\Vert \tilde{x} - x'\Vert _2 \le \mathtt{{ZERO}}\), these two points are essentially the same and \(x'\) is added to \(S\). If \(\Vert \tilde{x} - x'\Vert _2 \le \epsilon _{\text {rel}}\), \(\tilde{x}\) is “feasible enough” according to our criteria and is added to \(S\). In both cases, \(\tilde{x}\) is accepted. Otherwise, it is rejected.

figure d

Note that GenerateSolutions uses the \(\ell _1\)-norm for the problem of finding \(x'\) close to \(\tilde{x}\) since this can be formulated as an LP using the usual reformulation: The objective function \(\min _{x \in \mathbb{R }^n} \Vert \tilde{x} - x\Vert _1\) can be expressed in linear form by adding \(n\) extra variables and \(2n\) constraints: \(\min _{w, x \in \mathbb{R }^n} \{ \mathbf{1 }_n w \; | \;\tilde{x} - x \le w, x - \tilde{x} \le w\}\). Since the \(\ell _1\)-norm overestimates the \(\ell _2\)-norm this guarantees that \(x'\) is also at most \(\epsilon _{\text {rel}}\) away from \(\tilde{x}\) in \(\ell _2\)-norm. As a consequence, if such an \(x'\) exists, the relative violation of any nonnegative linear combinations of rows of \(Ax \ge b\) by \(\tilde{x}\) is at most \(\epsilon _{\text {rel}}\).

GenerateSolutions accomplishes several desirable goals. First, it does not modify the original instances. Second, given enough time, it finds an optimal solution (feasible according to our criteria) and adds it to the set \(S\). Third, it potentially returns a large and diverse set of feasible solutions, with different values for the integer variables. This is valuable for our purposes, as this allows testing the validity of cutting planes with respect to solutions in different parts of the feasible region.

However, GenerateSolutions has also some drawbacks. First, the generated solutions are the nearest floating point representation (component-wise) of the feasible solutions computed in rational numbers. Therefore, they could be infeasible when the left-hand side of the constraints is computed in finite precision. Second, the generated solutions might be cut off in terms of absolute violation by linear combinations of the problem constraints. Using only a relative violation tolerance would address the second issue, as explained above. However, using also an absolute feasibility tolerance makes sense, because all available Branch-and-Cut codes have an absolute feasibility tolerance \(\epsilon _{\text {abs}} > 0\).

1.1 A.1: Implementation

GenerateSolutions’s implementation is tied to Cplex 12.2 because it uses advanced Branch-and-Cut functions. In particular, we use the incumbentcallback() function to intercept the discovery of feasible solutions and run our implementation of Algorithm 4. The feasibility and integrality tolerances for Cplex were set to \(10^{-9}\), the smallest feasibility tolerance allowed by Cplex.Footnote 2 The rational LP solver used by GenerateSolutions is QSopt_ex [4].

We parameterize the Branch-and-Cut algorithm of Cplex as follows. The integrality gap allowed for optimality is set to 0 (both relative and absolute). The time limit is set to 6 h, the number of parallel threads to 2, and SolutionPoolIntensity is set to 2. We disable rescaling of the LP matrix, in order to avoid discovery of solutions that are infeasible for the unscaled problem (Cplex error code: OptimalInfeas). If the instance is solved to optimality before the 6 hours time limit, we call the CPXpopulate() procedure to generate more solutions until the time limit is hit or an additional 100 solutions are found. The strategy for replacing solutions in the pool when it is full is set to Diversify.Footnote 3

The experiments in this section are run on a machine equipped with an AMD Opteron 4176 HE processor clocked at 2.4GHz and 48GB RAM, running Linux.

1.2 A.2: Computational experiments on MIPLIB instances

Our initial test set contains all instances from MIPLIB3 [7], MIPLIB2003 [2], and the Benchmark set of MIPLIB2010 [21] beta (downloaded March 2011) for a total of 169 instances. Ten instances are eliminated, as GenerateSolutions does not find any feasible solution for them. We are left with the 159 instances listed in Table 13. On the satellites1-25 instance, more than \(10^6\) solutions are found during the initial Branch-and-Cut; we keep the best solution found and an additional 1,499 solutions selected at random.

Table 13 Number of feasible solutions found by GenerateSolutions on each instance

The vast majority of the solutions found by GenerateSolutions are feasible with very small tolerances. In Fig. 14 we report a histogram of the maximum absolute violation for the generated solutions, computed as \(\max _{i \in [m]} \{b_i - a^i x^*\}\). The maximum violation for 62.99 % of the solution is 0, i.e., they are feasible even when checked using finite precision and compensated summation [20]. We note that the use of compensated summation here has a small effect, increasing the fraction of solutions with a 0 violation by 0.27 %.

Fig. 14
figure 14

Maximum absolute violation of the solutions found by GenerateSolutions

For 98.8 % of the solutions the maximum violation is smaller than \(10^{-11}\). We eliminate the solutions for which the maximum violation is \(10^{-9}\) or more.

For 152 instances out of 159 the optimal solution is known, therefore we can analyze the objective value of the solutions found by GenerateSolutions on these instances. We compute the relative distance from the known optimum \(f^*\) of the best solution value \(\bar{f}\) among the solutions accepted by GenerateSolutions, using the formula: \((\bar{f}-f^*)/|f^*|\) if \(f^*\ne 0\), or \((\bar{f}-f^*)\) otherwise. In 138 cases out of 152, this value is \(<0.5\,\%\), hence we found a solution that satisfies our criteria and can be considered optimal. For the remaining 14 cases, the average relative distance is 231.02 %. This large value is due to a small number of instances where GenerateSolutions returns solutions of poor quality: markshare1 (200 % away from the optimum), markshare2 (2,100 % away from the optimum), satellites1-25 (700 % away from the optimum).

The 51 instances in bold face in Table 13 form the Failure Set. The selection is discussed in Sect. 4.2. The 69 instances in italics in Table 13 form the Extended Set used to validate our results on the Failure Set. The Extended Set contains all instances of Table 13 that are not part of Failure Set and for which 300 dives require \(<24\) h of CPU time and generate \(<30\) failures of Type 3.

The instances, solutions and code used in this paper are available on the website of the authors.

Appendix B: Parameter sensitivity

This section contains a sensitivity analysis of the failure and rejection rates when small changes are applied to the parameters of the cut generator Bestgen from Table 7, denoted by \(g^*\) in this section. Experiments were run in the Condor setup.

We start with the parameterization \(p^*\) of \(g^*\) given in Table 7 and we investigate changes in a single parameter at a time. For each parameter \(i\), we want to find a range \(R_i\) such that changing the value in \(p^*\) of \(p^*_i\) to any value in \(R_i\) yields a generator such that both a Friedman test on the rejection rate and a Friedman test on the failure rate deem the generator comparable to \(g^*\). We then determine the variation of the failure rate and cut rejection rate for values slightly outside of \(R_i\).

The algorithm we use is a simple sampling algorithm. It maintains an interval \(\underline{R_i}\) containing the convex hull of all tested values of \(p_i\) for which the modified generator is deemed similar to \(g^*\). The initial interval \(\underline{R}_i\) is the single point \(p^*\). The algorithm also maintains the smallest interval \(\overline{R}_i\) containing \(\underline{R}_i\) such that one tested point on each side of \(\underline{R}_i\) is deemed different between \(g^*\) and the modified generator. The initial interval \(\overline{R}_i\) is chosen as the initial range of parameter \(i\) used in Sect. 6.4. However, if we already know from previous experiments one value \(p_i\) smaller (resp. larger) than \(p^*_i\) such that the corresponding cut generator is not equivalent to \(g^*\), we remove all values smaller (resp. larger) than \(p_i\) from the initial interval \(\overline{R}_i\).

At each iteration, we select \(k\) parameter values \(p_1,\ldots ,p_k \in \overline{R}_i{\setminus }\underline{R}_i\), compare the corresponding cut generators with \(g^*\) and update both \(\underline{R}_i\) and \(\overline{R}_i\). The algorithm continues until we are satisfied with the gap between \(\underline{R}_i\) and \(\overline{R}_i\). We use \(k = 10\), except when the gap between \(\underline{R}_i\) and \(\overline{R}_i\) is very small. In that case, we use a smaller value for \(k\). The tested values \(p_1,\ldots ,p_k\) are equally spaced in \(\overline{R}_i{\setminus }\underline{R}_i\), with \(k/2\) points on each side of \(\underline{R}_i\). We use a logarithmic scale for all parameters that have a logarithmic scale in Table 3.

A similar algorithm is used to compute intervals \(\underline{F_i}\) and \(\overline{F_i}\) such that all generators in \(\underline{F_i}\) have a safety level similar to \(g^*\) according a Friedman test on the failure rate, without regard to the rejection rate. The interval \(\overline{F}_i\) contains \(\underline{F}_i\) and one tested point on each side of \(\underline{F}_i\) for which the modified generator is deemed different to \(g^*\) in term of safety.

Results are reported in Table 14. The columns are as follows. “\(p^*\)” contains the optimal value of the parameter in cut generator #1 of Table 7. For the parameters that are not reported in Table 7, we use the value corresponding to disabling the cut modification or numerical check that employs the parameter. For the _LUB parameters, we set the value to the corresponding non-LUB parameter. In this table, LUB was set to \(10^3\) (see Sect. 5.1). Columns “\(\underline{R}\)”, “\(\overline{R}\)”, “\(\underline{F}\)”, and “\(\overline{F}\)” contain the four intervals of interest for each parameter. “Increase” indicates the direction along which the cut rejection rate increases; the column contains “–” if our experiments did not provide enough information for computing the direction.

Table 14 Sensitivity analysis of the parameters of the reference cut generator

Rights and permissions

Reprints and permissions

About this article

Cite this article

Cornuéjols, G., Margot, F. & Nannicini, G. On the safety of Gomory cut generators. Math. Prog. Comp. 5, 345–395 (2013). https://doi.org/10.1007/s12532-013-0057-4

Download citation

  • Received:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s12532-013-0057-4

Mathematics Subject Classification

Navigation