0

I have a mixed integer nonconvex nonlinear programming problem and it takes forever to solve. I use Couenne through pyomo and couenne is based on branching and bound. So there is algorithm guarantee on the global optimization.

Basically, I used midaco to solve the same problem and it is much quicker. However, since midaco is based on ant colony, there is no guarantee of the global optimization.

I firstly tried to use the solution of midaco as the initial value of the couenne, there is no improvement on the speed. Then I want to use the objective value obtained from midaco as the upper bound of couenne solver (this is a minimization problem). However, pyomo could only set the sense = minimize. Does anybody know how to set the stopping criteria for pyomo?

Jin
  • 3
  • 3
  • 1
    If passing a feasible solution with objective x does not help, why should adding an upper bound on the objective help? Or do you mean something like an absolute mip-gap? – sascha Dec 02 '17 at 22:25
  • I want to speed up the coding. By setting the objective value from midaco as upper bound, now I speed up at about 1/3. – Jin Dec 02 '17 at 23:25
  • The coding, the solving? What do you want to do exactly? Adding an upper-bound is useless when there is a initial-solution given with this bound. If you want to make couenne faster solve because of something like: this solution would be enough for me, then it's something achievable by MIPGaps, which i asked you before if that's what you want? This is also related to *stopping-criteria*- – sascha Dec 02 '17 at 23:55
  • 1
    I think Couenne ignores the initial point but uses the bounds you set, You should also try Baron. With MINLP there is no single "best" solver and you can see a wide variety in performance. Baron actually uses the initial integer point as an incumbent and you will see clear messages to that effect in the log. – Erwin Kalvelagen Dec 03 '17 at 11:14
  • Erwin seem's to be [right](https://list.coin-or.org/pipermail/couenne/2010-March/000088.html). So it maybe also depends on how you did pass the value and how pyomo treats it. It's a bit questionable if pyomo will pass the ```art_cutoff``` (except you explicitly pass this option). – sascha Dec 03 '17 at 13:10
  • Two thoughts: if you are using the scripting method (with `SolverFactory`), then you can try `SolverFactory('couenne').solve(m, warmstart=True)` after setting the variable values with the midaco solution. If you want to enforce the upper bound, then you can simply add a constraint on your objective expression. – Qi Chen Dec 05 '17 at 22:13
  • Thanks! I basically add a constraint on the objective expression and the solving time runs from 3 mins to 2 mins. But it is still too long, since I need to run 15*2500 times of each case. I am considering using parallel computing of python. – Jin Dec 06 '17 at 01:07

0 Answers0