Search code examples
algorithmoptimizationlinear-programmingminimization

Algorithm to do Minimization in Integer Programming


I understand that doing minimization in integer programming is a very complex problem. But what makes this problem so difficult?

If I were to (attempt) to write an algorithm to solve it, what would I need to take into account? I'm only familiar with the branch-and-bound technique for solving it and I'm wondering what sort of roadblocks I will face when attempting to apply this technique programatically.


Solution

  • Like the other said, those problem are very hard and there are no simple solution nor simple algorithm that apply to all classes of problems.

    The "classic" way of solving those problem is to do a branch-and-bound and apply the simplex algorithm at each node, as you say in your question. However, I would not recommand implementing this yourself if you are not an expert.

    As for a lot of numerical methods, it is very hard to get it right (good parameter values, good optimisations), and a lot have been done (see CPLEX, COIN_OR, etc).

    It's not that you can't do it: the branch-and-bound part is pretty straigtforward, but without all the tricks your program will be really slow.

    Also, you will need a simplex implementation and this is not something you want to do yourself: you will have to use a third-part lib anyway.

    Most likely, wether

    • if your data set is not that big (try it !), and you are not interested in solving it really fast: use something like COIN-OR or lp_solve with the default method, it will work;
    • if your data set is really big (and/or you need to find a solution quickly each time), you need to work with an expert in this field.

    My main point is that only experienced people will know which algorithm will perform better on your problem, wich form of the model will be the easiest to solve, which method to apply and what kind of optimisations you can try.

    If you are interested in those problems, I would recommend this book for an introduction to the math behind all this (with a lot of examples). It is incredibly expansive, so you may want to go to a library instead of buying it: Nemhauser and Wolsey.