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