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?

```
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;
```

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.

Thank you for your answer. Indeed, I got global solution when I wrote, x.l = 3.

But I did not understand two things:

- What do you mean by ‘local solver’ ? I did not choose any. Meaning, I did not wrote any option. The solver is by default.

```
--- 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?

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.