thai.gms : Thai Navy Problem

Description

This model is used to allocate ships to transport personnel from
different port to a training center.


Small Model of Type : MIP


Category : GAMS Model library


Main file : thai.gms

$title Thai Navy Problem (THAI,SEQ=98)

$onText
This model is used to allocate ships to transport personnel from
different port to a training center.


Choypeng, P, Puakpong, P, and Rosenthal, R E, Optimal Ship Routing
and Personnel Assignment for Naval Recruitment in Thailand.
Interfaces 16, 4 (1986), 356-366.

Keywords: mixed integer linear programming, routing, naval recruitment,
          scheduling
$offText

Set
   i       'ports'           / chumphon, surat, nakon, songkhla /
   j       'voyages'         / v-01*v-15 /
   k       'ship classes'    / small, medium, large /
   sc(i,k) 'ship capability' / chumphon.(small,medium,large)
                              (surat,nakon).(medium,large)
                               songkhla.large                /
   vc(j,k) 'voyage capability';

Parameter
   d(i)       'number of men at port p needing transport' / chumphon  475
                                                            surat     659
                                                            nakon     672
                                                            songkhla 1123 /
   shipcap(k) 'ship capacity in men'                      / small     100
                                                            medium    200
                                                            large     600 /
   n(k)       'number of ships available'                 / small       2
                                                            medium      3
                                                            large       4 /;

Table a(j,*) 'assignment of ports to voyages'
              dist  chumphon  surat  nakon  songkhla
   v-01        370         1
   v-02        460                1
   v-03        600                       1
   v-04        750                                 1
   v-05        515         1      1
   v-06        640         1             1
   v-07        810         1                       1
   v-08        665                1      1
   v-09        665                1                1
   v-10        800                       1         1
   v-11        720         1      1      1
   v-12        860         1      1                1
   v-13        840         1             1         1
   v-14        865                1      1         1
   v-15        920         1      1      1         1;

Scalar
   w1 'ship assignment weight'           / 1.00   /
   w2 'ship distance traveled weight'    /  .01   /
   w3 'personnel distance travel weight' /  .0001 /;

vc(j,k) = prod(i$a(j,i), sc(i,k));
display vc;

Variable
   z(j,k)   'number of times voyage jk is used'
   y(j,k,i) 'number of men transported from port i via voyage jk'
   obj;

Integer  Variable z;
Positive Variable y;

Equation
   objdef
   demand(i)   'pick up all the men at port i'
   voycap(j,k) 'observe variable capacity of voyage jk'
   shiplim(k)  'observe limit of class k';

demand(i)..           sum((j,k)$(a(j,i)$vc(j,k)), y(j,k,i)) =g= d(i);

voycap(j,k)$vc(j,k).. sum(i$a(j,i), y(j,k,i)) =l= shipcap(k)*z(j,k);

shiplim(k)..          sum(j$vc(j,k), z(j,k))  =l= n(k);

objdef.. obj =e= w1*sum((j,k)$vc(j,k), z(j,k))
              +  w2*sum((j,k)$vc(j,k), a(j,"dist")*z(j,k))
              +  w3*sum((j,k,i)$(a(j,i)$vc(j,k)), a(j,"dist")*y(j,k,i));

Model thainavy / all /;

z.up(j,k)$vc(j,k) = n(k);

solve thainavy minimizing obj using mip;

display y.l, z.l;