1

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.

4 Answers 4

4

I'm wondering what sort of roadblocks I will face when attempting to apply this technique programatically.

None in particular (assuming a fairly straightforward implementation without a lot of tricks). The algorithms aren’t complicated – they are complex, that’s a fundamental difference.

Techniques such as branch and bound or branch and cut try to prune the search tree and thus speed up the running time. But the whole problem tree is nevertheless exponentially large, hence the problem.

Sign up to request clarification or add additional context in comments.

3 Comments

So what sort of optimization techniques are there to handle larger and larger data sets?
@canistr The problem isn’t so much optimisation, it’s finding better algorithms. I don’t know the state of the art since this is very active research but one algorithm that may help is the interior point method. If you’re really interested, look how professional programs like CPLEX (closed source) or SCIP or lp_solve (both Open Source) do it.
2

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.

2 Comments

What’s the problem with the simplex implementation? That should be pretty straightforward, once you understand the underlying maths (which are simple).
@Konrad Avoid loops on degenerated nodes is a little bit tricky (not really hard thought). People often want to implement it with the full arrays in memory instead of the revised simplex method. Plus a lot of optimisations... I'm not saying you can't do it, but I don't see the point as they are a lot of very good (and free) implementations out there and it is certainly a lot of work.
2

Integer programming is NP-hard. That's why it is so difficult.

There is a tutorial that you might be interested.

Comments

0

The first thing you do before you solve any mathematical optimization problem is you categorize it. Except special cases, most of the time, integer programming problems will be np-hard. So instead of using an "algorithm", you will use a "heuristic". The final solution you will find will not be a guaranteed optimum, but it will be a pretty good solution for real life problems.

Your main roadblock will your programming skills. Heuristic programming requires a good level of programming understanding. So instead of programming your own heuristic you are better of using well known package (eg, COIN-OR, free). This way you can focus on your problem instead of the heuristic.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.