Académique Documents
Professionnel Documents
Culture Documents
de Nuevo León
PISIS
Oliver Avalos Rosales
Leonardo Gabriel Hernández
Análisis a un modelo de logı́stica militar.
Diciembre del 2009.
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.
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:
2
2 Modelo matemático
Variables de decisión.
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
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.
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.
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.
Nodes Cuts/
Node Left Objective IInf Best Integer Best Node ItCnt Gap
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.
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
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.
0
3
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.
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