Lathe : Optimization of a Multi-spindle Automatic Lathe

Reference

  • Neculai Andrei, Nonlinear Optimization Applications Using the GAMS Technology,Springer Optimization and Its Applications, Model Lathe (5.19) in chapter Applications of Mechanical Engineering , 2013

Category : GAMS NOA library


Mainfile : lathe.gms

$onText
Optimization of a multi-spindle automatic lathe.

Schittkowski, K., More test examples for nonlinear programming codes.
Lecture Notes in Economics and Mathematical Systems, Springer-Verlag,
Berlin, 1987. (Problem 376, pp. 195)
$offText

Variables x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, obj;
Equations e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12,
          e13,e14,e15, eobj;

* Objective function to be minimized:

eobj.. obj =e= -20000*(0.15*x1+14*x2-0.06)/(0.002+x1+60*x2);

* Constraints:

e1.. x1 - 0.75/(x3*x4) =g= 0;

e2.. x1 - x9/(x4*x5) =g= 0;

e3.. x1 - x10/(x4*x6) - 10/x4 =g= 0;

e4.. x1 - 0.19/(x4*x7) - 10/x4 =g= 0;

e5.. x1 - 0.125/(x4*x8) =g= 0;

e6.. 10000*x2 - 0.00131*x9*(x5**0.666)*(x4**1.5) =g= 0;

e7.. 10000*x2 - 0.001038*x10*(x6**1.6)*(x4**3) =g= 0;

e8.. 10000*x2 - 0.000223*(x7**0.666)*(x4**1.5) =g= 0;

e9.. 10000*x2 - 0.000076*(x8**3.55)*(x4**5.66) =g= 0;

e10.. 10000*x2 - 0.000698*(x3**1.2)*(x4**2) =g= 0;

e11.. 10000*x2 - 0.00005*(x3**1.6)*(x4**3) =g= 0;

e12.. 10000*x2 - 0.00000654*(x3**2.42)*(x4**4.17) =g= 0;

e13.. 10000*x2 - 0.000257*(x3**0.666)*(x4**1.5) =g= 0;

e14.. 30 - 2.003*x4*x5 - 1.885*x4*x6 - 0.184*x4*x8 -
           2*x4*(x3**0.803) =g= 0;

e15.. x9 + x10 - 0.255 =e= 0;

* Bounds on variables;
x1.lo  = 0;         x1.up = 10;
x2.lo  = 0;         x2.up = 0.1;
x3.lo  = 0.5e-4;    x3.up = 0.0081;
x4.lo  = 10;        x4.up = 1000;
x5.lo  = 0.5e-4;    x5.up = 0.0017;
x6.lo  = 0.5e-4;    x6.up = 0.0013;
x7.lo  = 0.5e-4;    x7.up = 0.0027;
x8.lo  = 0.5e-4;    x8.up = 0.002;
x9.lo  = 0.5e-4;    x9.up = 1;
x10.lo = 0.5e-4;    x10.up = 1;

Model lathe /all/;

Solve lathe minimizing obj using nlp;

$ifThenI x%mode%==xbook
file out /lathe1.dat/
put out;
put x1.l:15:7,  x2.l:15:7,  x3.l:15:7,  x4.l:15:7 /;
put x5.l:15:7,  x6.l:15:7,  x7.l:15:7,  x8.l:15:7 /;
put x9.l:15:7,  x10.l:15:7 /;
put /"Objective ="  obj.l:15:7 /;
$endIf

* End lathe