trigx.gms : Another Trigonometric Example

Description

Another trigonometric problem from the LGO library (GO_test_2v_2c)

Find a solution to the system of nonlinear equations
x-sin(2x+3y)-cos(3x-5y)=0
y-sin(x-2y)+cos(x+3y)=0.

This is a 2-variable, 2-constraint global optimization test
problem in itself that could have (in fact, it has) multiple
solutions. Therefore we will determine the minimal norm solution
and iteratively increase the lower bound on the objective.


Reference

  • Pinter, J D, Nonlinear optimization with GAMS/LGO. Journal of Global Optimization 38, 1 (2007), 79-101.

Small Model of Type : NLP


Category : GAMS Model library


Main file : trigx.gms

$title  Another Trigonometric Example (TRIGX,SEQ=388)
$ontext
Another trigonometric problem from the LGO library (GO_test_2v_2c)

Find a solution to the system of nonlinear equations
x-sin(2x+3y)-cos(3x-5y)=0
y-sin(x-2y)+cos(x+3y)=0.

This is a 2-variable, 2-constraint global optimization test
problem in itself that could have (in fact, it has) multiple
solutions. Therefore we will determine the minimal norm solution 
and iteratively increase the lower bound on the objective.


Pinter, J D, Nonlinear optimization with GAMS/LGO.
Journal of Global Optimization 38 (2007), 79-101.
$offtext

Variables obj, x, y;
Equations defobj, con1, con2;

* Define an objective function as the squared norm of the
* solution to the equations.
defobj.. obj =e= x*x+y*y;

con1.. x-sin(2*x+3*y)-cos(3*x-5*y) =e= 0 ;
con2.. y-sin(x-2*y)+cos(x+3*y) =e= 0;

model m / all /;

solve m minimizing obj using nlp;

set sol / sol1*sol10 /; parameter res;

option solprint=on,optcr=0,decimals=6;
$if not set TOL $set TOL 1e-6

loop(sol$(m.solvestat=1 and m.modelstat<=2),
   res(sol,'obj') = obj.l;
   res(sol,'x') = x.l;
   res(sol,'y') = y.l;
   res(sol,'slack') = obj.l-obj.lo;
   res(sol,'m.objval') = m.objval;
   res(sol,'obj recalc') = x.l*x.l+y.l*y.l;
   res(sol,'con1 recalc') = x.l-sin(2*x.l+3*y.l)-cos(3*x.l-5*y.l);
   res(sol,'con2 recalc') = y.l-sin(x.l-2*y.l)+cos(x.l+3*y.l);
   res(sol,'defobj.slack') = defobj.slack + eps;
   abort$(abs(res(sol,'con1 recalc'))>%TOL%) 'Con1 violated', res;
   abort$(abs(res(sol,'con2 recalc'))>%TOL%) 'Con2 violated', res;
   obj.lo = obj.l*1.1;
   solve m minimizing obj using nlp);

display res;