weapons.gms : Weapons Assignment

Description

This model determines an assignment of weapons to targets in order
to inflict maximum damage at minimal cost. This is a classic
NLP test problem.


Small Model of Type : NLP


Category : GAMS Model library


Main file : weapons.gms

$title Weapons Assignment (WEAPONS,SEQ=18)

$onText
This model determines an assignment of weapons to targets in order
to inflict maximum damage at minimal cost. This is a classic
NLP test problem.


Bracken, J, and McCormick, G P, Chapter 2. In Selected Applications of
Nonlinear Programming. John Wiley and Sons, New York, 1968, pp. 22-27.

Keywords: nonlinear programming, assignment problem, military application,
          nlp test problem
$offText

Set
   w 'weapons' / ICBM      'Intercontinental Ballistic Missiles'
                 MRBM-1    'Medium-Range Ballistic Missiles from first area'
                 LR-Bomber 'Longe-Range Bomber'
                 F-Bomber  'Fighter Bomber'
                 MRBM-2    'Medium-Range Ballistic Missiles from second area' /
   t 'targets' / 1*20 /;

Table td 'target data'
            1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  avail
icbm          .05             .15 .10 .15 .20                                 .05            200
mrbm-1    .16 .17 .15 .16 .15 .19 .19 .18 .20 .14     .02     .12 .13 .12 .15 .16 .15 .15    100
lr-bomber .04 .05 .04 .04 .04 .10 .08 .09 .08 .05 .01 .02 .01 .02 .03 .02 .05 .08 .07 .08    300
f-bomber                                      .04 .09 .08 .09 .08 .02 .07                    150
mrbm-2    .08 .06 .08 .05 .05 .02 .02         .10 .05 .04 .09 .02 .01 .01                    250
damage     60  50  50  75  40  60  35  30  25 150  30  45 125 200 200 130 100 100 100 150
target     30                 100              40              50  70  35              10       ;

Parameter
   wa(w) 'weapons availability'
   tm(t) 'minimum number of weapons per target'
   mv(t) 'military value of target';

wa(w) = td(w,"avail");
tm(t) = td("target",t);
mv(t) = td("damage",t);

display wa, tm, mv;

Variable
   x(w,t)   'weapons assignment'
   prob(t)  'probability for each target'
   tetd     'total expected damage';

Positive Variable x;

Equation
   maxw(w)  'weapons balance'
   minw(t)  'minimum number of weapons required per target'
   probe(t) 'probability definition'
   etdp     'total expected damage alternate formulation'
   etd      'total expected damage';

maxw(w)..       sum(t$td(w,t), x(w,t)) =l= wa(w);

minw(t)$tm(t).. sum(w$td(w,t), x(w,t)) =g= tm(t);

probe(t)..      prob(t) =e= 1 - prod(w$td(w,t), (1-td(w,t))**x(w,t));

etdp..          tetd =e= sum(t, mv(t)*prob(t));

etd..           tetd =e= sum(t, mv(t)*(1-prod(w$td(w,t), (1-td(w,t))**x(w,t))));

Model
   war  'traditional formulation' / maxw, minw, etd         /
   warp 'extended formulation'    / maxw, minw, probe, etdp /;

x.l(w,t)$td(w,t) = wa(w)/card(t);

solve war maximizing tetd using nlp;

Parameter report 'summary report';

* option report:0;
report(w,t)       = x.l(w,t);
report('total',t) = sum(w, x.l(w,t));
report(w,'total') = sum(t, x.l(w,t));

display report;