Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Couenne reports problem as optimal on time-limit #160

Closed
guanghuidatafuelx opened this issue Oct 31, 2022 · 8 comments
Closed

Couenne reports problem as optimal on time-limit #160

guanghuidatafuelx opened this issue Oct 31, 2022 · 8 comments

Comments

@guanghuidatafuelx
Copy link

guanghuidatafuelx commented Oct 31, 2022

In AmplNLWriter.Optimizer(Couenne_jll.amplexe)), both primal_status and termination_status show solutions are found. But both objective and decision variables are empty.

The issue was reported here https://stackoverflow.com/questions/74225064/julia-jump-couenne-how-to-get-intermediate-or-best-feasible-solutions-when-ti

Attaching couenne.opt file,
Couenne_model.lp.txt

and lp file below
couenne.opt.txt

@odow
Copy link
Member

odow commented Oct 31, 2022

Can you upload the .nl file?

@guanghuidatafuelx
Copy link
Author

Oscar, .nl file is here
Couenne_problem2.nl.txt

@odow
Copy link
Member

odow commented Oct 31, 2022

So I can reproduce this. But it looks like a bug in Couenne, not in AmplNLWriter. From the log, Couenne finds a solution with cost -3687.13, but the solution that it writes to the .sol file is just full of zeros. Not sure what we can do.

using JuMP, AmplNLWriter, Couenne_jll
model = read_from_file("/Users/Oscar/Downloads/Couenne_problem2.nl")
set_optimizer(model, () -> AmplNLWriter.Optimizer(Couenne_jll.amplexe))

julia> optimize!(model)
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: Reformulating problem: 0.2 seconds
NLP0012I 
              Num      Status      Obj             It       time                 Location
NLP0014I             1         OPT -0.4723512       54 0.29538
NLP0014I             2         OPT -0.45892851       25 0.01802
Couenne: new cutoff value -4.5892851204e-01 (60.027 seconds)
Loaded instance "/var/folders/bg/dzq_hhvx1dxgy6gb5510pxj80000gn/T/jl_tkWbpT/model.nl"
Constraints:           14
Variables:           1310 (1291 integer)
Auxiliaries:           10 (4 integer)

Clp0000I Optimal - objective value -3687.1319
Clp0032I Optimal objective -3687.13193 - 0 iterations time 0.002
Clp0000I Optimal - objective value -3687.1319
Cbc0004I Integer solution of -3687.1319 found after 0 iterations and 0 nodes (0.00 seconds)
Cbc0001I Search completed - best objective -3687.131929999996, took 0 iterations and 0 nodes (0.00 seconds)
Cbc0035I Maximum depth 0, 0 variables fixed on reduced cost
Clp0000I Optimal - objective value -3687.1319

 	"Finished"

Linearization cuts added at root node:          0
Linearization cuts added in total:              0  (separation time: 0s)
Total solve time:                        0.010356s (0.010356s in branch-and-bound)
Lower bound:                             -3687.13
Upper bound:                             -3687.13  (gap: 0.00%)
Branch-and-bound nodes:                         0
Performance of                           FBBT:	   0.041106s,        1 runs. fix:          0 shrnk:    154.008 ubd:          0 2ubd:          0 infeas:          0

julia> solution_summary(model)
* Solver : AmplNLWriter

* Status
  Termination status : LOCALLY_SOLVED
  Primal status      : FEASIBLE_POINT
  Dual status        : NO_SOLUTION
  Message from the solver:
  "couenne: Optimal"

* Candidate solution
  Objective value      : 0.00000e+00
  Dual objective value : 0.00000e+00

* Work counters
  Solve time (sec)   : 6.09340e+01


shell> cat /var/folders/bg/dzq_hhvx1dxgy6gb5510pxj80000gn/T/jl_tkWbpT/model.sol
 
couenne: Optimal

Options
3
1
1
0
14
0
1310
1310
0
0
100
100
100
100
0
0
0
0
... lots more 0 omitted ...
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
objno 0 3

If I let it run without the time limit, I get:

julia> solution_summary(model)
* Solver : AmplNLWriter

* Status
  Termination status : LOCALLY_SOLVED
  Primal status      : FEASIBLE_POINT
  Dual status        : NO_SOLUTION
  Message from the solver:
  "couenne: Optimal"

* Candidate solution
  Objective value      : 4.58901e-01
  Dual objective value : 4.58901e-01

* Work counters
  Solve time (sec)   : 1.16955e+02

Also, from what I could tell the only nonlinearity is a bilinear term x * y? If so, use Gurobi. It can find global optimal solutions to non-convex quadratically constrained problems with integer variables.

@guanghuidatafuelx
Copy link
Author

@odow Thank you for investigating this issue. I agree with you that this is a bug of couenne software. You are correct that x*y is the only nonlinear constraint. Couenne seems to have hard time handling this. I am trying to utilize open-source MINLP solvers and don't have license from Gurobi.

@guanghuidatafuelx
Copy link
Author

I will report this bug to gitbucket couenne.

@guanghuidatafuelx
Copy link
Author

@odow I also reported another couenne bug in coin-or/Couenne#67

@odow odow changed the title Julia/JuMP: Couenne primal_status=FEASIBLE_POINT, termination_status=LOCALLY_SOLVED but solutions are empty Couenne reports problem as optimal on time-limit Oct 31, 2022
@odow
Copy link
Member

odow commented Oct 31, 2022

Closing because this is not a bug in AmplNLWriter. Note that you shouldn't expect the Couenne issue to be fixed promptly (if at all).

If you want to try other MINLP solvers, give SCIP.jl, Alpine.jl, or Juniper.jl a go.

@odow odow closed this as completed Oct 31, 2022
@guanghuidatafuelx
Copy link
Author

@odow Thank you for all the great help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants