Page 1 of 1

Getting wrong answer for an MINLP

Posted: Wed Jun 02, 2021 4:35 pm
by parag_patil
I should get x = 3 ; but I am getting x = 1 as the answer for following MINLP. Can you please tell me, why is it so?

Code: Select all

integer variable
x;
x.lo = 1;
x.up = 3;

scalar
p1 /5/
p2 /10/
p3 /15/;

variable cost, y;

equations con1_eqn;

con1_eqn..
y =e= (x-1)*(x-2)*p3 + (x-2)*(x-3)*p1 + (x-3)*(x-1)*p2;

model all_eqn /all/;

solve all_eqn maximize y using MINLP;


Re: Getting wrong answer for an MINLP

Posted: Wed Jun 02, 2021 5:37 pm
by abhosekar
which solver are you using? If you are using a local solver, you should expect a local solution (which very well could be x=1).

try giving initial value
x.l=3;
After this you will find the global solution.

- Atharv

Re: Getting wrong answer for an MINLP

Posted: Wed Jun 02, 2021 6:00 pm
by parag_patil
Thank you for your answer. Indeed, I got global solution when I wrote, x.l = 3.

But I did not understand two things:
1. What do you mean by 'local solver' ? I did not choose any. Meaning, I did not wrote any option. The solver is by default.

Code: Select all

--- DICOPT: Starting major iteration 1
--- DICOPT: Setting up first (relaxed) NLP.

CONOPT 3         34.3.0 rac355f3 Released Feb 25, 2021 WEI x86 64bit/MS Window

How to know, so and so is an appropriate solver to use?

Re: Getting wrong answer for an MINLP

Posted: Wed Jun 02, 2021 6:05 pm
by abhosekar
You are using the default solver but you can choose the solver by using
option minlp = <solver_name>;

You are using DICOPT which can handle nonconvexities but does not necessarily find the global optimum.
Based on your license, you can try a solver such as baron.

For more details on solvers and their abilities, please refer to 'model types' table here https://www.gams.com/latest/docs/S_MAIN.html
The ones with * are deterministic global solvers. Please also read the paragraphs following the table where the difference in local vs global solvers is described.

- Atharv