# Integer programming

What is Integer Programming? Integer programming is a field of applied mathematics that studies optimization problems in which the decision variables must take integer values. There are many applications in which the indivisibility of some variables is inherent to the problem. For example, • In the facility location problem, one has to decide on a certain number of facilities to open to serve some clients. This number of facilities must be integer. • In the cutting stock problem, we look for the best way to cut patterns in a roll of material in order to minimize the quantity of wasted material. • In a similar vein, in the bin packing problem, one wants to minimize the number of bins needed to carry a certain number of indivisible objects. Problems with on/off or yes/no decisions also belong to the domain of applications of integer programming. We have for example, • The traveling salesman problem, i.e. finding the smallest tour to visit a given number of cities. • The network design problem in which we have to decide on arcs to open in a network to allow a certain flow to pass through the network but minimizing the cost of opening the arcs at the same time. • Integer programming also appears in airplane or train scheduling for example.

INTRODUCTION
Hardness of Integer Programming However solving optimization problems with integer variables turns out to be a difficult task. For most of the problems described above, it is very difficult to find an algorithm that can be guaranteed to find an optimal solution in a reasonable amount of time. In fact, related to the work of Cook [12] and the complexity theory, it has been shown hat integer programming in general belongs to a class of problems for which no one has ever found an efficient algorithm working on all instances. It is strongly believed that it is impossible to find an algorithm that solves all the instances of integer programming efficiently (i.e. in what is called polynomial time). Main ideas to handle integer programs The last paragraph indicated the difficulty of solving integer programs and in particular the fact that finding one good general algorithm is probably impossible. However integer programs do occur in practice and we need to find ways to tackle them. In today’s algorithms, we find three basic ingredients that we now discuss. Relaxation. We assume that integer problems are hard to solve. It is therefore natural to start by trying to solve easier variants of the problem. The easier variant is called a relaxation. From the solution of the relaxation, one can deduce some interesting conclusions for the solution of the initial problem. Example. This is a common situation in physics for example. When a real problem is too hard to handle, one tries to rely on an easier model to obtain information about the original problem: the perfect gas law comes from assumptions made on the gas that simplify the model and make it computable. On the other hand, we know that the assumptions are too strong and the perfect gas model only gives an idea of how a real gas behaves. The most common relaxation used in integer programming is the linear relaxation, i.e. solving a continuous problem where the integrality requirements on the variables are dropped. Indeed in this thesis, we only look at linear integer

Reformulation. we could imag1. Example. This approach has turned out to be successful on many integer problems and it is used in all the commercial integer programming systems. performing intelligent enumeration (branch) using the bounds. it is possible to reduce the number of total cases to study. and adding redundant linear inequalities that make the linear relaxation tighter (cut). Therefore another interesting relaxation is to keep the integrality but drop the bounds on the variables. In other words. if we relax the integrality requirements. There are different ways to reformulate. _). A last major ingredient of today’s methods is reformulation. In this case. However it is not the only relaxation used in integer programming.problems. the choice of coordinates can be crucial to reduce the computational complexity. The most natural way to do it is to fix the value of some variable and consider all the possible subproblems arising with each possible value of the variable. we obtain a linear program for which “efficient” algorithms exist (like the simplex algorithm which has a good running time in practice. Assuming that the number of possible values of the integer variables is finite. These redundant linear inequalities are also called cutting planes or valid inequalities. However the number of cases to test is typically so huge that a pure enumeration approach is hopeless. which is almost always the case in practice.2. The fact that the new problem is close enough to the original but computable is of course very important. We can represent a point of the euclidian plane either with traditional cartesian coordinates (x. Enumeration. or interior point methods which are guaranteed to run in polynomial time). A first way to reformulate is to describe the problem differently: change the variables and the constraints. For some problems.5) has become the most standard algorithm to solve integer programs. But since integer problems are hard to solve. A third way to reformulate is to express the problem with other unknowns. A second way to reformulate is to add extra information to the problem even if it may look redundant. For example adding properly chosen linear inequalities to a problem provides the same set of feasible integer points but changes the linear relaxation. This is called “intelligent enumeration”. By using the cheap bound information provided by solving a relaxation of each subproblem. INTEGER PROGRAMMING 13 ine enumerating all possible cases to find the best feasible one.1. the integer problem can be solved in polynomial time. It is based on the three main ingredients as explained above: using the bound information provided by the linear relaxation. Indeed if all the variables of an equality constrained integer program can take any integer value (not restricted to any interval in Z). Sometimes redundant information added to the original may be of interest for a relaxation. The concept of reformulation appears in mathematics in other cases. We explain now . we can try to take a different viewpoint. We can do this for all the variables or just a fraction of them. y) or with polar coordinates (r. if the problem is too hard. Nevertheless there still exist some problems for which branch-and-cut does not work. such as nonnegativity constraints which often occur in practice. a good idea is to decompose the problem into different subproblems of smaller sizes: “divide and conquer”. The state of the art in integer programming The branch-and-cut algorithm (see Section 1. or simply add new variables to a formulation.

However they have all put different amounts of money into the house. It has led to many results on polyhedral studies and cutting planes for specific algorithms. even for small problems. In the case of the sharing of the contents the attic. The branch-and-cut method relies on the power of enumeration and linear relaxation. the problem becomes too easy.2. Suppose that you have fixed the value of 90% of the variables. In this category fall new ideas to solve integer programs in general but also problem specific algorithms that work particularly well when the branch and cut fails. Trying to improve the standard branch-and-cut algorithm is the most popular and active field in integer programming. A result can either be general or problem specific. 14 CHAPTER 1. to find a partition of the objects that minimizes the unfairness. In a typical problem. The problem is.8) allows us to solve this and related problems within seconds. you will always manage to complete a perfect sharing by allowing splitting of the remaining objects. Suppose that a group of people decide to share between themselves the objects contained in an attic of a house that they own together. therefore. good implementations or polyhedral studies that enhance the efficiency of the method. You can sometimes avoid exploring a partial solution further because the linear relaxation tells you that the variables fixed lead to bad solutions. In most of the cases. if you fix a large proportion of the variables. The fifth chapter of this thesis shows that a proper reformulation of the problem using lattice methods (see Section 1. experiments show that. For example. standard systems spend hours without finding an optimal solution. This is an integer problem which is hard for the standard methods and we explain briefly why. There is a fixed number of each type of object and each object has a fixed value. • Providing new ideas of algorithms that could be possible alternatives to the branch-and-cut. Therefore they want to share the objects in such a way that every one gets a total value and a number of objects proportional to their investment in the house. as soon as you allow fractions of some objects. the situation is different. it consists in providing interesting cutting planes. This small example shows the necessity of having good alternatives to the branch-and-cut algorithm. The quantity of papers written on the subject is of course a rich reservoir of results. The main content of the thesis These two lines of research are pursued in this text. the linear relaxation gives you a good idea on how good a solution obtained from the fixing can be.one such problem. Since the objects are indivisible. On the other hand the basics used in all the papers are often the same and it is . This suggests that research in integer programming has to focus on two ideas. The people want to perform the sharing in a fair way. • Continuing to improve the performance of the branch-and-cut methods. INTRODUCTION it is typically impossible to find a perfect solution. In practice. In other words. Therefore the value given by the linear relaxation never gives any interesting information and the standard methods reduce to complete enumeration.

There is a natural way to combine the two methods and we explore it in detail. The first five subsections introduce the basics of integer programming . One could expect it from the complexity theory. A lot of research has been carried out on the so-called single node flow set and its variants. In the first part of the thesis. 1. However the computation of the reformulation may be slow for large instances and we show how to decompose the problem in order to speed up the method. The complete section is dedicated to a survey of all the methods to which we refer later in the text.1. In the second part of the thesis. INTEGER PROGRAMMING 15 i. This procedure is often efficiently used in practice and several papers were written on the subject. We also treat another topic related to the standard branch-and-cut algorithm and more particularly to the generation of efficient cutting planes.7) and the Integral Basis Method published in 2003 by Haus. Köppe and Weismantel [29] (see Section 1.e. namely the group approach proposed by Gomory in 1969 [19] (see Section 1. we come more formally to the mathematics of integer programming. the method is to reformulate the problem before using a branch-and-cut algorithm. In this case. Therefore possible unifications of all the theories are always welcome. As we indicated earlier. the reformulation allows us to reduce considerably the computation time. Finally we explore a solution method for the sharing problem mentioned earlier (in a financial form) and for which the traditional approaches are inefficient. For example we touch the recurrent question of lifting. Here we try to give a presentation of the lifting procedure. This entails a study of “extended formulations” for the group relaxation. Although our model is not completely general. The problem of sharing the contents of an attic showed that one may find problems for which the branch-and-cut is inefficient.6). The goal of this is first to show that one procedure is sufficient to generate a lot of the known valid inequalities and secondly that one can classify the inequalities with respect to the way they can be generated. In the next section of the introduction. a second line of attack on integer programs is to find alternatives to the standard systems.2. The two viewpoints are investigated.2. we explore ways to unify a series of results on polyhedral studies. There is again a large quantity of results in the literature and we try to unify them in the sense that we show that they all can be obtained using a procedure combining MIR and lifting. it allows us to handle most of the cases of the literature and hopefully simplify the presentation of the procedure. Our first study is an attempt to combine two non standard approaches to integer programming. We present several algorithms to solve general integer programs or mixed integer programs (or both). we explore alternatives that have been recently proposed. Remark that an extended formulation can also be used on its own as an added feature of a branch-and-cut system. generate cutting planes from the knowledge of cutting planes for simpler lower-dimensional sets. It is in fact assumed that it is impossible to find an algorithm which solves efficiently all instances of integer programming.sometimes difficult to see that many of these results are in fact particular cases of each other. The problem being better posed. MIR being the most basic way to generate cutting planes for mixed integer problems.

INTRODUCTION can skip this part without losing important information. These three subsections refer to topics that are less known in the integer programming world. the last section of this introduction outlines more formally the content and the main results of this text. namely an introduction to two primal methods. The reader used to the integer programming formalism and standard approaches 16 CHAPTER 1. we also present a review of the existing literature. After this long presentation of methods. The last three subsections introduce the non standard approaches explored in the thesis. For each topic.and the most classical methods used today to solve integer programs. the group approach as it was introduced by Gomory in 1969 [19] and an introduction to lattices and the way to use them to reformulate integer programs. .