0

I'm using the neos bonmin solver to find a global minimum solution to a highly constrained mixed integer non-linear problem. Below are results for models that are identical, except the coefficients in the cost objective function are smaller for the results that find an optimal solution.

Could someone example to me why this could happen?

Are there any Ipopt or Bonmin options that will allow the solver to get past the first infeasible solution for the model with the higher cost coefficants?

I've gone through the both solver options here

Bonmin options

https://projects.coin-or.org/Bonmin/browser/stable/1.8/Bonmin/doc/BONMIN_UsersManual.pdf?format=raw

Ipopt options

https://www.coin-or.org/Ipopt/documentation/node40.html

Objective cost coefficients are higher in this example and I get a final infeasible solution

Presolve eliminates 26984 constraints and 25542 variables.
    Substitution eliminates 3585 variables.
    Adjusted problem:
    6113 variables:
        24 binary variables
        3873 nonlinear variables
        2216 linear variables
    5693 constraints; 57445 nonzeros
        2338 nonlinear constraints
        3355 linear constraints
        5328 equality constraints
        365 inequality constraints
    1 linear objective; 9 nonzeros.

Setting $presolve_fixeps >= 1.9e-14 could change presolve results.

Bonmin 1.8.4 using Cbc 2.9.6 and Ipopt 3.12.4
bonmin: bonmin.algorithm B-Hyb


******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt
******************************************************************************

NLP0012I 
              Num      Status      Obj             It       time                 Location
NLP0014I             1      INFEAS 8957753.5     5688 534.7767     build initial OA
NLP3017W OA on non-convex constraint is very experimental.
Cbc0006I The LP relaxation is infeasible or too expensive

    "Finished"

bonmin: Infeasible problem
solve_result_num = 220
solve_result = infeasible

cost.result = infeasible

and objective cost coefficients are lower in this result where I get an optimal solution

Presolve eliminates 26984 constraints and 25542 variables.
Substitution eliminates 3585 variables.
Adjusted problem:
6113 variables:
    24 binary variables
    3873 nonlinear variables
    2216 linear variables
5693 constraints; 57445 nonzeros
    2338 nonlinear constraints
    3355 linear constraints
    5328 equality constraints
    365 inequality constraints
1 linear objective; 9 nonzeros.

Setting $presolve_fixeps >= 1.9e-14 could change presolve results.

Bonmin 1.8.4 using Cbc 2.9.6 and Ipopt 3.12.4

NLP0012I 
              Num      Status      Obj             It       time                 Location
NLP0014I             1      INFEAS 1.5097545e-05     6467 621.84647     build initial OA
NLP3017W OA on non-convex constraint is very experimental.
NLP0014I             2         OPT 26013213      214 16.333517         FP for MINLP
NLP0014I             3         OPT 26013213      160 9.492557   check integer sol.
OA0003I New best feasible of 26013213 found after 26.516969 sec and
NLP0014I             4         OPT 26013213      160 9.377574   check integer sol.
OA0003I New best feasible of 26013213 found after 36.294482 sec and
Cbc0012I Integer solution of 26013213 found by nonlinear programm after 0 iterations and 0 nodes (35.85 seconds)
Cbc0031I 373 added rows had average density of 11.38874
Cbc0013I At root node, 699 cuts changed objective from 26013213 to 26013213 in 2 passes
Cbc0014I Cut generator 0 (NLP solution based oa cuts) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 1 (Mixed Integer Gomory) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 2 (Mixed Integer Rounding) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 3 (Clique) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 4 (Flow Covers) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 5 (Feasibility Pump for MINLP.) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 6 (Outer Approximation feasibility check.) - 921 row cuts average 8.0 elements, 0 column cuts (0 active)
Cbc0014I Cut generator 7 (Outer Approximation strong branching solution check.) - 0 row cuts average 0.0 elements, 0 column cuts (0 active)
Cbc0001I Search completed - best objective 26013212.66256024, took 434 iterations and 0 nodes (36.09 seconds)
Cbc0035I Maximum depth 0, 0 variables fixed on reduced cost
 Outer Approximation feasibility check. was tried 2 times and created 921 cuts of which 0 were active after adding rounds of cuts

    "Finished"

bonmin: Optimal
solve_result_num = 3
solve_result = solved

cost.result = solved

Here are the cost objective function and cost constraints from my model. I'm unable to share my entire model because it is several thousand lines long.

minimize cost: CLuSet1 + CLuSet2 + CLuSet3 + CLuSet4 + CLuSet5 + CLuSet6 + CLuSet7 + CLuSet8 + CWMake + CGwMake + CRipTotal;

subject to c_luset1:
  CLuSet1 = 0;
subject to c_luset2:
  CLuSet2 = 54018.1562808425 * DALu12 + 11773.6164636535 * DALu12 + 54018.1562808425 * DALu22 + 11773.6164636535 * DALu22 + 122347.053122918 * DALu32 + 14046.1548008848 * DALu32 + 122347.053122918 * DALu42 + 14046.1548008848 * DALu42 + 67585.1670257089 * DALu52 + 26063.9453787701 * DALu52 + 67585.1670257089 * DALu62 + 26063.9453787701 * DALu62 + 83360.0744735154 * DALu72 + 8648.92263104654 * DALu72 + 83360.0744735154 * DALu82 + 8648.92263104654 * DALu82;
subject to c_luset3:
  CLuSet3 = 16800.6706442194 * DALu13 + 13662.2690399705 * DALu13 + 16800.6706442194 * DALu23 + 13662.2690399705 * DALu23 + 66478.7502894276 * DALu33 + 16299.3542773528 * DALu33 + 66478.7502894276 * DALu43 + 16299.3542773528 * DALu43 + 67585.1670257089 * DALu53 + 30244.9663709661 * DALu53 + 67585.1670257089 * DALu63 + 30244.9663709661 * DALu63 + 63736.1798227559 * DALu73 + 10036.3306598302 * DALu73 + 63736.1798227559 * DALu83 + 10036.3306598302 * DALu83;
subject to c_luset4:
  CLuSet4 = 94366.3428878643 * DALu14 + 11248.1445775008 * DALu14 + 94366.3428878643 * DALu24 + 11248.1445775008 * DALu24 + 94366.3428878643 * DALu34 + 13419.2565594482 * DALu34 + 94366.3428878643 * DALu44 + 13419.2565594482 * DALu44 + 94366.3428878643 * DALu54 + 24900.6774414253 * DALu54 + 94366.3428878643 * DALu64 + 24900.6774414253 * DALu64 + 94366.3428878643 * DALu74 + 8262.90991336076 * DALu74 + 94366.3428878643 * DALu84 + 8262.90991336076 * DALu84;
subject to c_luset5:
  CLuSet5 = 19152.7645344101 * DALu15 + 4752.09357912019 * DALu15 + 19152.7645344101 * DALu25 + 4752.09357912019 * DALu25 + 19152.7645344101 * DALu35 + 5669.34061820967 * DALu35 + 19152.7645344101 * DALu45 + 5669.34061820966 * DALu45 + 19152.7645344101 * DALu55 + 10519.9883029447 * DALu55 + 19152.7645344101 * DALu65 + 10519.9883029447 * DALu65 + 19152.7645344101 * DALu75 + 3490.89762081051 * DALu75 + 19152.7645344101 * DALu85 + 3490.89762081051 * DALu85;
subject to c_luset6:
  CLuSet6 = 139205.556766389 * DALu16 + 4051.46439758324 * DALu16 + 139205.556766389 * DALu26 + 4051.46439758324 * DALu26 + 663624.894768934 * DALu36 + 4833.47629629414 * DALu36 + 663624.894768934 * DALu46 + 4833.47629629414 * DALu46 + 605356.079435318 * DALu56 + 8968.96438648493 * DALu56 + 605356.079435318 * DALu66 + 8968.96438648493 * DALu66 + 605356.079435318 * DALu76 + 2976.21399722947 * DALu76 + 605356.079435318 * DALu86 + 2976.21399722947 * DALu86;
subject to c_luset7:
  CLuSet7 = 178407.121602901 * DALu17 + 5178.5635157079 * DALu17 + 178407.121602901 * DALu27 + 5178.5635157079 * DALu27 + 226482.571822542 * DALu37 + 6178.12759676694 * DALu37 + 226482.571822542 * DALu47 + 6178.12759676694 * DALu47 + 219086.348711828 * DALu57 + 11464.0898173116 * DALu57 + 219086.348711828 * DALu67 + 11464.0898173116 * DALu67 + 219086.348711828 * DALu77 + 3804.1833047294 * DALu77 + 219086.348711828 * DALu87 + 3804.1833047294 * DALu87;
subject to c_luset8:
  CLuSet8 = 4800.19161263411 * DALu18 + 5178.5635157079 * DALu18 + 4800.19161263411 * DALu28 + 5178.5635157079 * DALu28 + 6276.63444832917 * DALu38 + 6178.12759676694 * DALu38 + 6276.63444832917 * DALu48 + 6178.12759676694 * DALu48 + 6065.71404322987 * DALu58 + 11464.0898173116 * DALu58 + 6065.71404322987 * DALu68 + 11464.0898173116 * DALu68 + 6065.71404322987 * DALu78 + 3804.1833047294 * DALu78 + 6065.71404322987 * DALu88 + 3804.1833047294 * DALu88;


subject to c_wmake:
  CWMake = sum{t in time}0.264172052358148 * DQWMake[t];
subject to c_gwmake:
  CGwMake = sum{t in time}264172.052358148 * DQGwMake[t];

Here variables that start with "DRipSet" are binary decisions

subject to c_ripset111:
  CRipSet111 = DRipSet1112 * (101811.344386982);

subject to c_ripset112:
  CRipSet112 = DRipSet1122 * (382859.370549274);

subject to c_ripset113:
  CRipSet113 = DRipSet1132 * (206.655198893719);

subject to c_ripset121:
  CRipSet121 = DRipSet1212 * (127794.539554323);

subject to c_ripset122:
  CRipSet122 = DRipSet1222 * (365971.521880556);

subject to c_ripset123:
  CRipSet123 = DRipSet1232 * (668.274604214754);

subject to c_ripset131:
  CRipSet131 = DRipSet1312 * (60888.2524447538);

subject to c_ripset132:
  CRipSet132 = DRipSet1322 * (66799.0180114126);

subject to c_ripset133:
  CRipSet133 = DRipSet1332 * (1433.75877136016);

subject to c_ripset141:
  CRipSet141 = DRipSet1412 * (26751.9382774102);

subject to c_ripset142:
  CRipSet142 = DRipSet1422 * (59526.2633940657);

subject to c_ripset143:
  CRipSet143 = DRipSet1432 * (1868.05965227538);

subject to c_ripset151:
  CRipSet151 = DRipSet1512 * (11834.6866568883);

subject to c_ripset152:
  CRipSet152 = DRipSet1522 * (51682.9497507372);

subject to c_ripset161:
  CRipSet161 = DRipSet1612 * (9385.83301215532);

subject to c_ripset162:
  CRipSet162 = DRipSet1622 * (72091.8418398067);

subject to c_ripset171:
  CRipSet171 = DRipSet1712 * (9256.58730682722);

subject to c_ripset172:
  CRipSet172 = DRipSet1722 * (84265.8291042471);

subject to c_ripset173:
  CRipSet173 = DRipSet1732 * (433.057013317928);

subject to c_ripset181:
  CRipSet181 = DRipSet1812 * (11542.679010938);

subject to c_ripset182:
  CRipSet182 = DRipSet1822 * (130979.048843908);

subject to c_ripset183:
  CRipSet183 = DRipSet1832 * (8666.62200070436);

subject to c_riptotal:
  CRipTotal = CRipSet111 + CRipSet112 + CRipSet113 + CRipSet121 + CRipSet122 + CRipSet123 + CRipSet131 + CRipSet132 + CRipSet133 + CRipSet141 + CRipSet142 + CRipSet143 + CRipSet151 + CRipSet152 + CRipSet161 + CRipSet162 + CRipSet171 + CRipSet172 + CRipSet173 + CRipSet181 + CRipSet182 + CRipSet183;
Krantz
  • 1,424
  • 1
  • 12
  • 31
user_123
  • 62
  • 12
  • 1
    Well, **hint 1** is in the output: *NLP3017W OA on non-convex constraint is very experimental.* **Hint 2**: *The LP relaxation is infeasible **OR** too expensive* (one should do research what that means here). And what do you mean by global-min? If it's convex, you probably should not use Bonmin, if it's non-convex, Bonmin does not guarantee an global optimum (but i'm unsure about other things which can happen then)! Couenne on the other hand would find the optimum, but only given infinite-time (probably not going to happen for your problem while you are watching it). – sascha Jan 22 '18 at 21:03
  • Yes I should mention I'm using the bonmin hybrid algorithm (B-Hyb), and I've tried using the branch and bound (B-BB)_ instead but I get the same errors. And the same thing happens ( NLP3017W OA on non-convex constraint is very experimental.) in the model that solves, why would this happen? – user_123 Jan 22 '18 at 21:05
  • 1
    Additionally your **objective value looks quite high ~ 26013212**, even for the lower-coeff version. Scale your problem! – sascha Jan 22 '18 at 21:08
  • And yes I know it seems high but these are real-world costs at a large watershed scale – user_123 Jan 22 '18 at 21:10
  • 1
    The solver does not care if those are real-world costs or if you did preprocess these a-priori. But he probably does care about magnitudes! No reason to calculate something in cents, when you can do the same with thousands. – sascha Jan 22 '18 at 21:15
  • What do mean by magnitudes? And some of the coefficients that I have set-up could be 100,000 or larger. and Why does the solver stop when the objective cost gets too high? – user_123 Jan 22 '18 at 21:21
  • 1
    [Orders of magnitude](https://en.wikipedia.org/wiki/Orders_of_magnitude_(numbers)). The reasons are complex. It's related to the limits of limited-memory floating-point math (and iterative-algorithms which are needed if there is no closed-form solution). Numerical-robustness is somewhat tuned for values around 0. (and obviously models with terms like ```x^2``` or ```exp(x)```, which is even worse, will be more affected by bad scaling than linear models although in your case even the LP looks like trouble) – sascha Jan 22 '18 at 21:27
  • Do you have any suggestions to where I should start to change my model? – user_123 Jan 22 '18 at 22:28
  • For example if I change a cost efficient that has several numbers after the decimal (130979.048843908) to an integer number (130979), that could possibly fix my model? – user_123 Jan 23 '18 at 13:02
  • 1
    That won't change much. It's about the order of magnitude, not the precision / resolution. But there is no model here and there is no way we can help. Try to find some general modelling-guide for MINLP. – sascha Jan 23 '18 at 13:19
  • Thank you for your help. I've shared my cost objective function and cost constraints. – user_123 Jan 23 '18 at 13:31
  • I understand the orders of magnitude problem now and it turns out this was a scaling issue. I scaled the cost coefficients to have units of Thousands of dollars and it can easily solve now. Thanks sascha – user_123 Jan 23 '18 at 18:26

0 Answers0