Get feasible solution from Couenne after time limit (JuMP)

Dear all,

I am solving a non-convex MINLP model with couenne with a time limit, let’s say 20 seconds. After 20 seconds, I obtain the following output:

Couenne 0.5.8 -- an Open-Source solver for Mixed Integer Nonlinear Optimization
Mailing list: couenne@list.coin-or.org
Instructions: http://www.coin-or.org/Couenne
couenne: 
ANALYSIS TEST: NLP0012I 
              Num      Status      Obj             It       time                 Location
NLP0014I             1         OPT 20       52 5.882371
NLP0014I             2         OPT 507.45347        4 0.462479
Couenne: new cutoff value 5.0745346562e+02 (8.04239 seconds)
Loaded instance "/var/folders/bb/nwhjpt2x3zg3v6c121fh1x180000gq/T/jl_uGV38x/model.nl"
Constraints:            1
Variables:             41 (40 integer)
Auxiliaries:          615 (613 integer)

Coin0506I Presolve 233 (-505) rows, 177 (-479) columns and 776 (-1946) elements
Clp0000I Optimal - objective value -9.99e+12
Clp0032I Optimal objective -9.99e+12 - 0 iterations time 0.002, Presolve 0.00
Clp0000I Optimal - objective value -9.99e+12
NLP Heuristic: time limit reached.
Clp0000I Optimal - objective value -9.99e+12
Optimality Based BT: 0 improved bounds
Probing: 0 improved bounds
NLP Heuristic: Couenne: new cutoff value 5.3793103438e+01 (19.9272 seconds)
solution found, obj. 53.7931
Cbc0012I Integer solution of 53.793103 found by Couenne Rounding NLP after 100 iterations and 0 nodes (11.88 seconds)
Cbc0031I 40 added rows had average density of 2
Cbc0013I At root node, 40 cuts changed objective from -9.99e+12 to -9.99e+12 in 2 passes
Cbc0014I Cut generator 0 (Couenne convexifier cuts) - 40 row cuts average 2.0 elements, 484 column cuts (484 active)
Cbc0010I After 0 nodes, 1 on tree, 53.793103 best solution, best possible -9.99e+12 (11.88 seconds)
Optimality Based BT: 0 improved bounds
Cbc0020I Exiting on maximum time
Cbc0005I Partial search - best objective 53.793103 (best possible -9.99e+12), took 100 iterations and 1 nodes (12.07 seconds)
Cbc0035I Maximum depth 0, 0 variables fixed on reduced cost
Clp1001I Initial range of elements is 1 to 507.46347
Clp1003I Final range of elements is 0.15811388 to 6.3245553
Clp0022I Absolute values of scaled rhs range from 1 to 1.024e+08, minimum gap 1e+100
Clp0020I Absolute values of scaled objective range from 9.99e+17 to 9.99e+17
Clp0021I Absolute values of scaled bounds range from 5.0797144e-16 to 2.3449428e+36, minimum gap 1e-05
Clp0006I 0  Obj -9.99e+12 Primal inf 2.3611832e+21 (41) Dual inf 6.3245553e+10 (1)
Clp0006I 1  Obj -9.99e+12 Primal inf 1.7561684e-05 (40)
Clp0017I Looking optimal with tolerance of 1e-07
Clp0006I 1  Obj -9.99e+12 Primal inf 1.7561684e-05 (40)
Clp0001I Primal infeasible - objective value -9.99e+12

 	"Not finished"

Linearization cuts added at root node:        738
Linearization cuts added in total:            738  (separation time: 0.004031s)
Total solve time:                         12.0817s (12.0817s in branch-and-bound)
Lower bound:                                 -inf
Upper bound:                              53.7931  (gap: 100.00%)
Branch-and-bound nodes:                         1
Performance of                           FBBT:	   0.006745s,        6 runs. fix:          0 shrnk:          0 ubd:    139.333 2ubd:    1.16667 infeas:          0
Performance of                           OBBT:	   0.114768s,        2 runs. fix:          0 shrnk:          0 ubd:          0 2ubd:          1 infeas:          0

From the output, it’s clear that Couenne obtain a local solution, whose value is 53.793103. I would ask you how can I get that value and the corresponding solution.

Thanks very much for all your help.

This is probably the same issue as Couenne reports problem as optimal on time-limit · Issue #160 · jump-dev/AmplNLWriter.jl · GitHub. See also

Julia/JuMP - Couenne: How to get intermediate or best feasible solutions when TIME_LIMIT has been reached? - Stack Overflow.

I think this is an upstream problem in Couenne. The bad news is that it’s unlikely to get fixed anytime soon.

I’d suggest you try a different MINLP solver, like GitHub - lanl-ansi/Juniper.jl: A JuMP-based Nonlinear Integer Program Solver.