DIP

DIP (Decomposition for Integer Programming) is an open-source extensible software framework for implementing decomposition-based bounding algorithms for use in solving large-scale discrete optimization problems. The framework provides a simple API for experimenting with various decomposition-based algorithms, such as Dantzig-Wolfe decomposition, Lagrangian relaxation, and various cutting plane methods. Given a compact formulation and a relaxation, the framework takes care of all algorithmic details associated with implementing any of a wide range of decomposition-based algorithms, such as branch and cut, branch and price, branch and cut and price, subgradient-based Lagrangian relaxation, branch and relax and cut, and decompose and cut. The user can specify customizations, such as methods for generating valid inequalities and branching, in terms of the variables of the compact formulation, without having to worry about the details of any required reformulations. DIP is used in combination with ​CHiPPS, which provides the underlying tree search methodology. DIP does not currently have extensive documentation, but the design and implementation of DIP are described in more detail in Chapter 4 of the doctoral dissertation of Matthew Galati (linked below) and the thoery behind DIP is described in both of the following below links. M. Galati, ​Decomposition in Integer Linear Programming, Doctoral Dissertation, Lehigh University, December 2009. T.K. Ralphs and M. Galati, ​Decomposition in Integer Programming, in ​Integer Programming: Theory and Practice, John Karlof, ed. (2005), 57-110.