Vous êtes sur la page 1sur 17

Universidad Autónoma

de Nuevo León
PISIS
Oliver Avalos Rosales
Leonardo Gabriel Hernández
Análisis a un modelo de logı́stica militar.
Diciembre del 2009.

Nombre del articulo: A Dinamic Distribution Model for Combat Logistics


Nombre del autor: Kevin R. Gue

1 Introducción
Los crecientes cambios en la tecnologı́a de la información y el ambiente polı́tico han llevado a cam-
bios dramáticos en la forma de planear los servicios militares para luchar y apoyar en las batallas.

Por razones tácticas los modelos modernos de guerra enfatizan fuerzas en enviar pequeñas
pero altamente unidades móviles que pueden ser apoyadas por bases marı́timas.

La logı́stica con bases desde mar es la doctrina que propone minimizar ó eliminar las unidades
de suministro y remplazarlas con transportación rapida, principalmente aérea.

La ventaja potencial de esta doctrina incluye una menor vulnerabilidad a ataques y beneficios
polı́ticos de una logı́stica reducida. Más aún la unidad en el mar puede fácilmente reposicionarse
para un apoyo en el avance de la batalla.

La idea es insertar estas pequeñas unidades de combate que se muevan rapidamente para
conseguir ciertos objetivos. El objetivo de los planeadores logı́sticos es apoyar estas fuerzas con
pequeños inventarios en tierra.

Las unidades de suministro están libres de desplegarse, moverse, reunirse y agotar inventarios
como sea necesario para conocer las demandas de las unidades de combate.

Hay una flotilla de vehı́culos disponibles de diferentes tipos.

El problema consiste en encontrar la ubicación adecuada para las unidades de apoyo y la


carga de provisiones enviada de forma que se satisfagan las demandas en cada periodo.

Los nodos de combate son dados en el plan de batalla y un conjunto de posibles lugares de
suministro pueden ser conocidos o considerados.

1
La solución requiere:

• Las posiciones de la unidades de apoyo.

• Inventarios mantenidos por las unidades de apoyo.


• Cantidades de cada provisiones enviadas entre unidades.

2
2 Modelo matemático
Variables de decisión.

Xijkt = Cantidad de mercancia k empacada del nodo


i al nodo jen el periodo de tiempo t.

INVikt = Inventario de mercancia k en el nodo


i en el periodo de tiempo t.

 1 Si una unidad se mueve del nodo i al nodo
Yijt = j en el periodo de tiempo t.

0 en otro caso
Conjuntos

I = Conjunto de nodos
Ic = Conjunto de nodos de combate
Is = Conjunto de nodos de suministro
Isl = Conjunto de nodos de suministro con base en tierra
Icl = Conjunto de nodos de combate base en tierra
Il = Conjunto de nodos con base en tierra
Ib = Conjunto de nodos con base en playa
Ii = Conjunto de nodos con base en tierra (no en playa)

Parámetros
Ws = Peso de las unidades de apoyo
Wc = Peso de las unidades de combate
Sij = Distancia del nodo i al nodo j
Bit = Inventario máximo que puede estar en el nodo i en el tiempo t
Djkt = Demanda de la mercancı́a k del nodo j en el periodo de tiempo t
N = Número máximo de las unidades de apoyo
La = Unidades aéreas disponibles en el periodo t (en kg-km)
Ls = Carga disponible del buque en un periodo t (en kg-km)
Tijt = Indicador si se mueve una unidad de combate del nodo i al nodo j
M = Número muy grande

Función Objetivo.

La función objetivo es minimizar el inventario total en tierra más la suma de los pesos de las
unidades de apoyo.
∑∑∑ ∑ ∑∑
Minimizar Z = INVikt + Ws Yijt (1)
i∈Il k t i∈Isl j∈Isl t

3
Restricciones

∑ ∑
INVikt + Xjikt − Xijkt − Dikt = INVik,t+1 ∀i ∈ Icl , k, t
j∈I j∈I

∑ ∑
INVikt + Xjikt − Xijkt = INVik,t+1 ∀i ∈ Isl , k, t
j∈Is j∈I

∑ ∑
Yjit − Yij,t+1 = 0 ∀i ∈ Isl , t
j∈Is j∈Is


Xijkt − M (Yiit + Yijt ) ≤ 0 ∀i ∈ Is , j ∈ Is , t
k
∑ ∑
Xijkt − M Yiit ≤ 0 ∀i ∈ Isl , t
j∈Ic k

∑ ∑
INVikt − M Yijt ≤ 0 ∀i ∈ Isl , t
k j∈Isl


Xijk,t+1 − INVikt ≤ 0 ∀i ∈ Isl , k, t
j∈Il

∑ ∑ ∑ ∑
S0j X0jkt − Wc Sij Tijt ≤ La ∀t
j∈Il k j∈Il i∈Il

∑ ∑
S0j X0jk1 − Wc S0j T0jk1 +
j∈Ib k

∑ ∑ ∑
S0j X0jk1 + Wc S0j Tij1 ≤ La + Ls
j∈Il k i∈Il


INVikt ≤ Bit ∀i ∈ Icl
k

Xijkt , INVikt ≤ 0 ∀i, j, k, t

Yijt ∈ {0, 1} ∀i, j, t

4
3 Método de solución.
Se implementó el modelo matemático en GAMS (Gue, 1999), debido a su facilidad de uso y lo
complicado de este modelo, para ası́ poder modificar rápidamente el modelo a las posibles rela-
jaciones propuestas con el objetivo de observar su comportamiento con respecto a las mejores
soluciones.

Se utilizó una instancia de 29 nodos(Gue, 1999), localizados estratégicamente como zonas de


combate y zonas de tolerancia para el flujo de nuestras unidades de combate y de suministro
respectivamente. Dentro de esta instancia existe un nodo en el mar, uno en playa, diversos nodos
de suministro y de combate.

Las unidades de combate deben obedecer una ruta fija y movimientos programados para cada
periodo, estas deben tener consigo el menor peso posible con respecto a sus provisiones tanto de
armamento, comida y combustible en la localización actual, por ello nuestra solución se enfoca
a el suminstro de provisiones en los periodos.

3.1 Modificaciones al modelo.


El objetivo de este proyecto era obtener mejores o posibles soluciones de este modelo en base a
modificaciones, ya sea relajando el modelo o reduciendo y/ó incrementando el número de zonas
de ataque y suministro.

En los primeros intentos de modificar la instancia aumentando el número de nodos nos di-
mos cuenta que estos jugaban una vital importancia, ya que los tiempos de solución de nuestro
modelo se incrementaba drásticamente y no conseguiamos llegar a un óptimo. De aquı́ la idea
de reducir entonces el número de instancias, ya que podriamos reducir el tiempo de solución. La
sorpresa fué que nuestro tiempo de solución se incrementaba también, la explicación lógica de
este fenómeno nos la dió el graficar nuestras soluciones, que mostraremos en la siguiente sección,
ya que nuestras soluciones dependı́an directamente de la ruta definida de nuestras unidades de
combate. Es decir, quitar algún nodo que tal vez facilitaba el abastecimiento complica el prob-
lema.

También hicimos unas pequeñas modificaciones a nuestro modelo y con la instancia original
probamos el comportamiento de estas.

La primera modificacion se obtuvo del hecho de quitar las restricciones del movimiento de las
unidades de apoyo en tierra, con lo cual obtuvimos la misma solución, pero en un menor tiempo.
Entonces, podriamos clasificar a esta restricción como una restricción difı́cil para el problema.

Esto nos llevó a sospechar que el relajar la restricción de lı́mite de las unidades de apoyo
nos darı́a buenas soluciones y ası́ fué ya que también redujo nuestros tiempos de solución, en
menor manera que la anterior, pero también alcanzaba un óptimo en menor tiempo que el modelo
original.

5
3.2 Solver.
Como ya se habia mencionado se utilizó el codigo de GAMS (Apéndice 7.1), debido a que
éste problema esta catalogado como un problema entero mixto(MIP), utilizamos cplex como
solver para nuestro modelo, el cual uso una busqueda dinámica, por medio de ramificación y
acotamiento, haciendo cortes de optimalidad y factibilidad hasta alcanzar el óptimo.

4 Resultados
Los resultados obtenidos para el modelo completo con la instancia original fueron obtenidos en
un tiempo de 0:44:04.431 minutos, obteniendo el valor de la función objetivo de 690085.95 en
1026667 iteraciones, explorando un total de 4038 nodos.

Se muestra una parte del avance de gams mientras busca converger al óptimo.

Iteration: 1 Scaled dual infeas = 1600000.000000


Iteration: 18 Dual objective = 0.000000
Iteration: 110 Dual objective = 0.000000
Perturbation started.
Iteration: 119 Dual objective = 0.000000
Iteration: 221 Dual objective = 0.094421
Iteration: 314 Dual objective = 0.306253
Iteration: 410 Dual objective = 23492.463852
Iteration: 523 Dual objective = 65860.727719
Iteration: 659 Dual objective = 85133.529497
Iteration: 768 Dual objective = 93090.152490
Iteration: 854 Dual objective = 94592.246890
Iteration: 927 Dual objective = 94822.905944
Iteration: 1006 Dual objective = 95053.569011
Iteration: 1115 Dual objective = 95284.111292
Iteration: 1214 Dual objective = 95284.179484
Iteration: 1308 Dual objective = 95284.203808
Iteration: 1388 Dual objective = 95284.205439
Removing perturbation.
Root relaxation solution time = 0.67 sec.

Nodes Cuts/
Node Left Objective IInf Best Integer Best Node ItCnt Gap

0 0 95284.1621 26 95284.1621 1391


0 0 227551.1249 28 Cuts: 32 1922
0 0 233323.8331 35 Cuts: 28 2397
0 0 263429.0543 41 Cuts: 24 2933
0 0 264357.3138 39 Cuts: 27 3080
0 0 266017.8183 46 Cuts: 30 3637
0 0 266683.9548 52 Cuts: 27 3940
0 0 267607.9617 43 Cuts: 21 4177
0 0 269196.7094 52 Flowcuts: 19 4542

6
0 0 271903.2659 35 Cuts: 22 4759
0 0 272280.1638 45 Flowcuts: 21 5083
0 0 274871.8712 61 Flowcuts: 18 5323
0 0 276136.7186 63 Cuts: 37 5510
0 0 278968.2227 66 Cuts: 40 5850
0 0 283855.7947 80 Cuts: 31 6703
0 0 297969.8349 52 Cuts: 42 7794
0 0 314245.6244 81 Flowcuts: 19 8323
0 0 319086.7802 66 Cuts: 37 8988
0 0 324924.6820 75 Cuts: 18 9415
0 0 328714.6093 106 Flowcuts: 17 9713
0 0 335937.9612 137 Cuts: 37 10251
0 0 344349.5295 128 Cuts: 35 10807
0 0 346194.5982 129 Cuts: 30 11207
0 0 348009.9846 137 Flowcuts: 30 11499
0 0 349823.9805 97 Cuts: 33 12286
0 0 351418.3884 151 Cuts: 19 12635
0 0 353175.7191 153 Flowcuts: 28 12941
0 0 354837.5488 159 Flowcuts: 27 13235
0 0 356111.9436 100 Flowcuts: 29 13669
0 0 356344.8595 103 Flowcuts: 12 13880
0 0 356575.0788 103 Flowcuts: 12 14077
0 0 356695.9528 97 Flowcuts: 12 14264
0 0 356728.1325 89 Flowcuts: 6 14319
0 0 356755.9078 71 Flowcuts: 5 14434
Heuristic still looking.
A continuación se muestran las tablas obtenidas para esta solución.

4.1 Tablas.

Movimientos que realizan las unidades de combate


Origen Destino 0 1 2 3 4 5 6 7
0 .0 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
0 .2 1.000
2 .2 1.000 1.000
2 .16 1.000
16 .0 1.000
16 .16 1.000 1.000

Tabla de inventarios de las unidades de suministro


Nodo Provisión 2 3 5 6
2 .food 646.672 646.672
2 .water 10989.000 10989.000
2 .fuel 7666.000 7666.000
2 .ammo 2676.000 2676.000
16 .food 1734.303 1734.303
16 .water 10989.000 10989.000
16 .fuel 7666.000 7666.000
16 .ammo 2676.000 2676.000

7
Envio de provisiones desde el buque en el mar (nodo 0)
Ori Dest Prov 1 2 3 4 5 6
0 1 .food 926.000
0 1 .water 10989.000
0 1 .fuel 7666.000
0 1 .ammo 2676.000
0 2 .food 646.672
0 2 .water 10989.000
0 2 .fuel 7666.000
0 2 .ammo 2676.000
0 6 .food 926.000
0 6 .water 10989.000
0 6 .fuel 7666.000
0 6 .ammo 2676.000
0 14 .food 926.000 926.000
0 14 .water 10989.000 10989.000
0 14 .fuel 7666.000 7666.000
0 14 .ammo 2676.000 2676.000
0 16 .food 1734.303
0 16 .water 10989.000
0 16 .fuel 7666.000
0 16 .ammo 2676.000
0 17 .food 926.000 926.000
0 17 .water 10989.000 10989.000
0 17 .fuel 7666.000 7666.000
0 17 .ammo 2676.000 2676.000
0 18 .food 926.000 117.697
0 18 .water 10989.000 10989.000
0 18 .fuel 7666.000 7666.000
0 18 .ammo 2676.000 2676.000
0 21 .food 926.000 926.000
0 21 .water 10989.000 10989.000
0 21 .fuel 7666.000 7666.000
0 21 .ammo 2676.000 2676.000
0 23 .food 926.000
0 23 .water 10989.000
0 23 .fuel 7666.000
0 23 .ammo 2676.000
0 26 .food 279.328 926.000 926.000
0 26 .water 10989.000 10989.000
0 26 .fuel 7666.000 7666.000
0 26 .ammo 2676.000 2676.000
0 28 .food 926.000 926.000

Envio de provisiones de tropas de suministro en tierra


Origen Destino Provision 1 2 3 4 5 6
2 26 .food 646.672
2 26 .water 10989.000
2 26 .fuel 7666.000
2 26 .ammo 2676.000
16 18 .food 808.303
16 22 .food 926.000
16 22 .water 10989.000
16 22 .fuel 7666.000
16 22 .ammo 2676.000

8
3

4.2 Grafos.
2
Para observar mejor la solución vamos a ver su solucion grafica. Recordemos de tenemos 29
posibles nodos de combate y suministro, en base a estos moveremos nuestras unidades de uno a
otro.

De esta manera se observa como quedan definidos nuestros movimientos.

0
3

La solución para el primer modelo relajado de la restricción de balance fue de un tiempo


0:04:07.592, que es mucho mejor que el del modelo original, dando el mismo valor de la función
objetivo de 690085.95, reduciendo a 72488 iteracionesy 327 nodos explorados.
2
Aquı́ es muy imortante observar la variación que hubo en los movimientos por los nodos, ya
que cambio debido a la relajación.

Las lineas representan lo mismo que e gráfico pasado.

0
3

Para el segundo modelo relajado sobre e lı́mite 2de unidades de apoyo se resolvı́o en un tiempo
de 15:48:30 con e mismo resultado obtenido.

Observemos su comportamiento.

0
5 Conclusiones.
Se probó que para este problema con respecto a su modelo, se pueden hacer varias modificaciones
o relajaciones sin alterar la escencia de la solución, cosa que consideramos como un caso especial.
Aunque en este resumen solo demostramos 2 posibles variantes, también hicimos pruebas de otro
tipo que nos enviaban a soluciones no tan buenas pero mantenian la escencia.

Una desventaja que se observó en este modelo es que las soluciones propuestas a veces pueden
superar la disponibilidad de recursos que se pueden asignar de transporte, por ejemplo puede
disponer rápidamente de una unidad dado que esta necesite mantenimiento.

En general, el modelo mostró un buen desempeño al momento de obtener soluciones y al


poder visualizar estas el tomador de desiciones tiene a la mano una poderosa herramienta que le
ayudará a plantear sus rutas con mayor eficiencia.

12
6 Referencias.
En su mayor
ia se presenta material de consulta para un mejor manejo de grafos en LATEXtanto para docu-
mentos como para presentaciones en Beamer.

[1]Kevin R. Gue.A dinamic distribution model for combats logistics. Office of Naval Research.
Naval Postgraduate School, Monterey California.
November 23, 1999, pags 1-31.

[2]http://www.aprendematematicas.org/latex.html

[3]http://www.texample.net/tikz/examples/tkz-berge/

[4]http://graphtheoryinlatex.glogspot.com/

[5]http://www.math.umbc.edu/rouben/2008-01-math481/tikz-tutorial.html

13
7 Apéndice
7.1 Código GAMS
$TITLE Dynamic Unit Location and Distribution Model for OMFTS
$INLINECOM { }
$OFFSYMLIST OFFSYMXREF
$OFFLISTING
$onuellist
OPTIONS
LIMCOL = 0, LIMROW = 0, SOLPRINT = OFF, OPTCR = 1e-4, MIP = cplex, SYSOUT = OFF, RESLIM = 50000, ITERLIM = 50000;
* SETS, PARAMETERS, AND TABLES
SETS
loc "locations" / 0 * 29/
lloc(loc) "land locations" / 1 * 29 /
bloc(loc) "locations reachable by LCAC--(beach locs)" /3/
iloc(loc) "locations reachable only by acft--(inland locs)"
/ 1,2, 4 * 29 /
sloc(loc) "locations for support units"
/ 0,2,3,4,5,7,8,9,10,11,13,15,16,19,20,24,25,29/
slloc(loc) "land locs for support units"
/ 2,3,4,5,7,8,9,10,11,13,15,16,19,20,24,25,29 /
cloc(loc) "locations for combat units"
/ 0,1,6,12,14,17,18,21,22,23,26,27,28 /
clloc(loc) "land locs for combat units"
/ 1,6,12,14,17,18,21,22,23,26,27,28 /
t "time periods" / 0 * 7 /
k "consumables" / food, water, fuel, ammo /
a "attributes" / xval, yval /
aa(a) "loc attribs" / xval, yval /
* Identify aliases
alias(loc,loc1,loc2)
alias(lloc,lloc1,lloc2)
alias(sloc,sloc1,sloc2)
alias(slloc,slloc1,slloc2)
alias(cloc,cloc1,cloc2) ;
alias(clloc,clloc1,clloc2)
alias(t,t1)
SET
cmove(loc1,loc2,t) "combat unit movements" /
0 .1 .1
1 .6 .2
6 .14 .3
14 .14 .4
14 .18 .5
18 .18 .6
18 .18 .7
0 .17 .2
17 .17 .3
17 .21 .4
21 .21 .5
21 .23 .6
23 .23 .7
0 .28 .1
28 .28 .2
28 .26 .3
26 .26 .4
26 .26 .5
26 .22 .6
22 .22 .7
/;
PARAMETER
daily(k) "daily reqts per company (in equiv MV-22 lbs)"
/food 926,
water 10989,
fuel 7666,
ammo 2676/;
PARAMETER
troop(loc1,loc2,t) "one if troops moved fm locl to loc2 in t";
PARAMETER
cfactor(loc,k,t) "factor indicating intensity of consumption";
cfactor(loc,k,t) = 1 ;

14
TABLE
inloc(loc,aa) "information on locations"
xval yval
0 -65 0
1 30 80
2 30 50
3 30 40
4 40 60
5 40 40
6 50 70
7 50 50
8 50 30
9 60 60
10 60 50
11 60 40
12 60 30
13 60 10
14 70 80
15 70 70
16 70 50
17 70 20
18 80 70
19 80 60
20 80 50
21 80 40
22 90 60
23 90 30
24 90 10
25 100 70
26 100 40
27 100 30
28 110 60
29 110 20
;
* Construct ordered sets for time periods
PARAMETER val(t);
val(t) = ord(t) ;
PARAMETER lval(loc);
lval(loc) = ord(loc);
* SCALARS AND THE DISTANCE PARAMETER
scalars maxunit "Max number of units" / 100 /
lair "Max air lift in a pd" / 65606400 /
lship "Max ship lift" / 146000000 /
bigM "big number" / 10000000 /
doslim "combat unit capacity" / 0 /
wtroop "weight of company" / 75894 /
supsize "weight of support u." / 100000 /
PARAMETER
d(loc1,loc2) "round trip distance between locations (in miles)";
d(loc1,loc2) = 2 * max( 0.1, sqrt( abs(inloc(loc1,’xval’)
- inloc(loc2,’xval’))**2 + abs(inloc(loc1,’yval’)
- inloc(loc2,’yval’))**2 ) );
PARAMETER
ld(loc1,loc2) "same as d(locl,loc2), zero if locl or loc2 is seabase";
ld(loc1,loc2) = d(loc1,loc2);
PARAMETER
ad(loc1,loc2) ’air distance; assumes origin is sea base’;
loop((loc1,loc2),
if( (lval(loc1)=0 or lval(loc2)=0),
ad(loc1,loc2) = d(loc1,loc2);
else
ad(loc1,loc2) = 0.5 * (d(’0’,loc1)+d(’0’,loc2)+d(loc1,loc2));
)
);
*VARIABLES
BINARY VARIABLE
X(loc1,loc2,t) one if unit moves from locl to loc2 in t;
POSITIVE VARIABLES
W(loc1,loc2,t) combat units
I(loc,k,t) inventory of k in loc in t
Y(loc,loc,k,t) qty of k shipped from locl to ioc2 in t;
Free variable
zinv objective function value;

15
*EQUATIONS AND INEQUALITIES
EQUATIONS
totalinv ’the objective function’
balcom(clloc,k,t) ’material balance equations for combat units’
balsupp(slloc,k,t) ’material balance equations for support units’
unitbal(slloc,t) ’unit balance equations’
unitlimit(t) ’limits number of support units’
nodelimit(slloc,t) ’limits number of units at a node’
shipzunit(cloc,clloc1,t) ’no shipping unless combat unit present’
shipcunit(clloc,clloc1,t) ’no shipping unless combat unit present’
shipsunit(sloc,t) ’no shipping unless support unit is there’
shipsc1(slloc,t) ’no shipping unless support unit is there’
shipsc2(clloc,t) ’no shipping unless combat unit is there’
invcunit(clloc,t) ’no inventory unless combat unit is there’
invsunit(slloc,t) ’no inventory unless support unit is there’
air(t) ’air lift constraint’
airship ’air-ship lift constraint’
nomoveship(sloc1,sloc2,t) ’prevents moving unit from shipping’
invlimit(clloc,t) ’limits inventory in combat units’
nocross(slloc,k,t) ’prevents crossdocking’
initial1(loc1,loc2,k) ’initial conditions’
initial2(slloc,sloc) ’initial conditions’
initial3(lloc,k,t) ’initial conditions’
initial4(loc,k,t) ’initial conditions’;
totalinv.. zinv =e=
sum(t, sum((lloc,k), I(lloc,k,t)) +
supsize*sum((sloc1,slloc2), X(sloc1,slloc2,t)));
balcom(clloc,k,t+1).. I(clloc,k,t) + sum(loc1, Y(loc1,clloc,k,t))
- sum(loc1, Y(clloc,loc1,k,t))
- cfactor(clloc,k,t)*daily(k)*sum(cloc1,
W(cloc1,clloc,t))
=e= I(clloc,k,t+1) ;
balsupp(slloc,k,t+1).. I(slloc,k,t) + sum(sloc1, Y(sloc1,slloc,k,t))
- sum(loc1, Y(slloc,loc1,k,t))
=e= I(slloc,k,t+1);
unitbal(slloc,t+1).. sum(sloc1, X(sloc1,slloc,t))-
sum(sloc1, X(slloc,sloc1,t+1)) =e= 0;
unitlimit(t).. sum(sloc, sum(sloc1, X(sloc,sloc1,t))) =l= maxunit;
nodelimit(slloc,t).. sum(sloc1, X(sloc1,slloc,t)) =l= 1;
shipzunit(cloc,clloc1,t).. sum(k, Y(’0’,clloc1,k,t))
- bigM * sum(cloc1, W(cloc1,clloc1,t)) =l= 0;
shipcunit(clloc,clloc1,t).. sum(k, Y(clloc,clloc1,k,t))
- bigM * W(clloc,clloc1,t) =l= 0;
shipsunit(sloc,t).. sum((k,sloc1), Y(sloc,sloc1,k,t))
-bigM * sum(sloc1,X(sloc,sloc1,t)) =l= 0;
shipsc1(slloc,t).. sum((k,cloc1), Y(slloc,cloc1,k,t))
- bigM * X(slloc,slloc,t) =l= 0;
shipsc2(clloc,t).. sum((k,sloc1), Y(sloc1,clloc,k,t))
- bigM * sum(cloc1, W(cloc1,clloc,t)) =l= 0;
invcunit(clloc,t).. sum(k, I(clloc,k,t))
- bigM * sum(clloc1, W(clloc,clloc1,t)) =l= 0;
invsunit(slloc,t).. sum(k, I(slloc,k,t))
- bigM * sum(slloc1, X(slloc,slloc1,t)) =l= 0;
nocross(slloc,k,t+1).. sum(lloc1, Y(slloc,lloc1,k,t+1)) =l= I(slloc,k,t);
air(t).. sum(iloc, (sum(k, (Y(’0’,iloc,k,t)))) * ad(’0’,iloc) ) +
wtroop*sum((loc1,loc2) ,troop(loc1,loc2,t)*ad(loc1,loc2))
=l= lair;
airship.. sum(bloc, ( sum(k, (Y(’0’,bloc,k,’1’))))*
ad(’0’,bloc) ) +
sum(loc1, (sum(k, (Y(’0’,loc1,k,’1’)) )
+ wtroop*troop(’0’,loc1,’1’))*
ad(’0’,loc1))
=l= lair + lship;
invlimit(clloc,t).. sum(k, I(clloc,k,t))
=l= doslim * sum(k, daily(k));
nomoveship(sloc1,sloc2,t).. sum(k, Y(sloc1,sloc2,k,t))
- bigM *(X(sloc1,sloc1,t)+X(sloc1,sloc2,t))
=l= 0;
initial1(loc1,loc2,k).. Y(loc1,loc2,k,’0’) =e= 0;
initial2(slloc,sloc).. X(slloc,sloc, ’0’) =e= 0;
initial3(lloc,k,t).. Y(lloc,’0’,k,t) =e= 0;
initial4(loc1,k,t).. Y(loc1,’0’,k,t) =e= 0;

16
*Compute input quantities
*Determine where troop movements must occur
loop( (cloc1,cloc2,t)$cmove(cloc1,cloc2,t),
if( ( lval(cloc1) ne lval(cloc2) ),
troop(cloc1,cloc2,t) = 1;
else
troop(cloc1,cloc2,t) = 0;
)
);
display troop;
*Define the model
Model support
/totalinv,balcom,balsupp ,unitbal,shipcunit,nomoveship,air, airship,
shipsc1 ,shipsc2 ,invsunit ,invcunit, invlimit ,nocross ,shipzunit,
nodelimit ,initial1, initial2 ,initial3 ,initial4/ ;
*Solve the model
*Fix locations of combat units
W.fx(cloc1,cloc2,t) = 0;
W.fx(cloc1,cloc2,t)$cmove(cloc1,cloc2,t)= 1;
* Now solve it!
Solve support using mip minimizing zinv ;
*Display the results
display X.l, I.l, Y.l, W.l;

17

Vous aimerez peut-être aussi