launch.gms : Launch Vehicle Design and Costing

Description

This model designs a three stage launch vehicle, taking into
account cost-estimation relationships for R&D and production costs
for airframe, engines and an instrument unit.


Reference

  • Bracken, J, and McCormick, G P, Chapter 7. In Selected Applications of Nonlinear Programming. John Wiley and Sons, New York, 1968, pp. 58-82.

Small Model of Type : NLP


Category : GAMS Model library


Main file : launch.gms

$title Launch Vehicle Design (LAUNCH,SEQ=161)

$onText
This model designs a three stage launch vehicle, taking into
account cost-estimation relationships for R&D and production costs
for airframe, engines and an instrument unit.


Bracken, J, and McCormick, G P, Chapter 7. In Selected Applications
of Nonlinear Programming. John Wiley and Sons, New York, 1968,
pp. 58-82.

Keywords: nonlinear programming, launch vehicle designment, energy economics, engineering
$offText

Set
   s 'stages'       / stage-1*stage-3 /
   b 'bound labels' / lower, upper    /;

Alias (s,ss);

Set ge(s,ss) 's is greater than ss';
ge(s,ss) = yes$(ord(s) >= ord(ss));

Scalar
   pl   'pay load (thousands of pound)'  / 20   /
   numl 'number of launches'             / 10   /
   g    'average gravity         (est)'  / 31.8 /;

Table pwbound(s,b) 'propellant weight'
            lower  upper
   stage-1     12     16
   stage-2     10     12
   stage-3      7      9;

Parameter
   iwf(s)  'weight fraction'    /  stage-1 .5, stage-2 .6, stage-3 .7           /
   nume(s) 'number of engines'  / (stage-1,stage-2) 5, stage-3 1                /
   rde1(s) 'engine R&D cost 1'  / (stage-1,stage-2) -257.963, stage-3  32.591   /
   rde2(s) 'engine R&D cost 2'  / (stage-1,stage-2)  160.990, stage-3 181.806   /
   rde3(s) 'engine R&D cost 3'  / (stage-1,stage-2)   -0.146, stage-3   0.539   /
   rde4(s) 'engine R&D cost 4'  / (stage-1,stage-2)  282.874, stage-3 232.570   /
   rde5(s) 'engine R&D cost 5'  / (stage-1,stage-2)    0.648, stage-3   0.772   /
   pre1(s) 'engine cost 1'      / (stage-1,stage-2)   0.2085, stage-3   0.0705  /
   pre2(s) 'engine cost 2'      / (stage-1,stage-2)   2.509 , stage-3  -0.01807 /
   pre3(s) 'engine cost 3'      / (stage-1,stage-2)   0.736 , stage-3  -1.33    /
   pre4(s) 'engine cost 4'      / (stage-1,stage-2)   0.9744, stage-3  16.687   /
   pre5(s) 'engine cost 5'      / (stage-1,stage-2)  -0.229 , stage-3   0.498   /;

* adjust from c*(x/100)**b to (c*10**b)*(x/1000)**b for stage-3
pre2('stage-3') = pre2('stage-3')*10**pre3('stage-3');
pre4('stage-3') = pre4('stage-3')*10**pre5('stage-3');

Variable
   aweight(s) 'airframe weight        (thousands of pounds)'
   iweight(s) 'inert weight           (thousands of pounds)'
   pweight(s) 'propellant weight      (thousands of pounds)'
   instweight 'instrument unit weight (thousands of pounds)'
   weight(s)  'total initial weight   (thousands of pounds)'
   length(s)  'length of stage                       (feet)'
   thrust(s)  'thrust                 (thousands of pounds)'
   ethrust(s) 'single engine thrust   (thousands of pounds)'
   ms(s)      'mass fraction'
   t2w(s)     'thrust to weight ratio'
   t(s)       'operating time'
   vfac(s)    'velocity factor'
   v(s)       'incremental velocity'
   vt         'total velocity'
   cost       'total cost';

Equation
   diweight(s) 'definition of inert weight'
   dweight(s)  'definition of weight'
   dthrust(s)  'definition of thrust'
   t2wr(s)     'thrust to initial weight ratio definition'
   msd(s)      'mass fraction definition'
   pwlower(s)  'lower bound of propellant weight'
   pwupper(s)  'upper bound of propellant weight'
   defvfac(s)  'velocity factor definition'
   defv(s)     'definition of velocity'
   defvt       'definition of total velocity'
   costdef     'cost definition';

diweight(s).. iwf(s)*iweight(s) =e= aweight(s);

dweight(s)..  weight(s) =e= sum(ss$ge(ss,s), iweight(ss) + pweight(ss)) + instweight + pl;

dthrust(s)..  thrust(s) =e= nume(s)*ethrust(s);

t2wr(s)..     t2w(s)*weight(s) =e= thrust(s);

msd(s)..      (1 - ms(s))*weight(s) =e= pweight(s);

pwlower(s)..  pwbound(s,'lower')*iweight(s) =l= pweight(s);

pwupper(s)..  pweight(s) =l= pwbound(s,'upper')*iweight(s);

defvfac(s)..  vfac(s)*pweight(s) =e= thrust(s)*t(s);

defv(s)..     v(s) =e= vfac(s)*g*log(1/ms(s));

defvt..       vt =e= sum(s, v(s));

costdef..     cost =e=

* airframe R&D cost
   + 5272.77*sum(s, aweight(s)**1.2781*iweight(s)**(-0.1959)
                  * ms(s)**2.4242*thrust(s)**0.38745*pweight(s)**(-0.9904))

* airframe production cost
   + .185214*sum(s, aweight(s)**0.3322*ms(s)**(-1.5935)*pweight(s)**0.2362
                  * length(s)**0.1079*nume(s)**0.1616*numl**0.9)

* engine R&D cost
   + sum(s, rde1(s) + rde2(s)*(ethrust(s)/1000)**rde3(s) + rde4(s)*(ethrust(s)/1000)**rde5(s))

* engine production cost
   + sum(s, (pre1(s)*(ethrust(s)/1000) + pre2(s)*(ethrust(s)/1000)**pre3(s)
          +  pre4(s)*(ethrust(s)/1000)**pre5(s))*(nume(s)*numl)**0.93)

* instrument unit
   + 10.35*(15822e-6*(instweight*1000)**0.786 - 35.5)
   + numl**0.9*15822e-6*(instweight*1000)**0.786

* launch operations
   + 8.5*numl*(3*sum(s, pweight(s))/1000)**0.460;

Model launch / all /;

t2w.lo('stage-1') = 1.2;
t2w.lo('stage-2') =  .6;
t2w.lo('stage-3') =  .7;
t2w.up('stage-1') = 1.4;
t2w.up('stage-2') =  .75;
t2w.up('stage-3') =  .9;

ms.lo('stage-1')  = .25;
ms.lo('stage-2')  = .24;
ms.lo('stage-3')  = .16;
ms.up('stage-1')  = .30;
ms.up('stage-2')  = .29;
ms.up('stage-3')  = .21;

length.lo('stage-1') = 125;
length.lo('stage-2') =  75;
length.lo('stage-3') =  50;
length.up('stage-1') = 150;
length.up('stage-2') = 100;
length.up('stage-3') =  70;

vfac.lo('stage-1') = 240;
vfac.lo('stage-2') = 240;
vfac.lo('stage-3') = 340;
vfac.up('stage-1') = 290;
vfac.up('stage-2') = 290;
vfac.up('stage-3') = 375;

vt.lo         = 35000;
vt.up         = 50000;
instweight.lo =   2.5;
instweight.up =   4.0;
v.lo(s)       =  1000;
t.lo(s)       =   100;
thrust.lo(s)  =     1;
aweight.lo(s) =     1;
iweight.lo(s) =     5;
pweight.lo(s) =    50;
ethrust.lo(s) =    20;

* this are the solution values the book
t.l ('stage-1') = 155;
t.l ('stage-2') = 314;
t.l ('stage-3') = 403;

iweight.l ('stage-1') = 136;
iweight.l ('stage-2') =  47;
iweight.l ('stage-3') =  16;

pweight.l ('stage-1') = 2176;
pweight.l ('stage-2') =  564;
pweight.l ('stage-3') =  144;

ethrust.l('stage-1') = 746;
ethrust.l('stage-2') =  96;
ethrust.l('stage-3') = 129;

length.l('stage-1') = 125;
length.l('stage-2') =  75;
length.l('stage-3') =  50;

ms.l('stage-1') = .3;
ms.l('stage-2') = .29;
ms.l('stage-3') = .21;

instweight.l = 2.5;
vt.l         = 38632;

solve launch using nlp minmizing cost;