13
Gu´ ıa b´ asica para el uso de Xpress 22 de octubre de 2004 Xpress-MP es un software de optimizaci´ on desarrollado por la empresa brit´ anica Dash Optimization. Xpress- MP consiste en una familia de herramientas para el modelado y optimizaci´ on de problemas lineales, cuadr´ aticos y enteros, utilizando t´ ecnicas de programaci´ on lineal y diversos algoritmos de b´ usqueda. Para tener acceso a Xpress, siga la ruta: Inicio, Programas, Xpress-Mp, Xpress IVE. Para abrir la ventana de c´ odigo, de click en New y dele un nombre al programa, especificando donde quiere que sea guardado. Recuerde que la extensi´ on de los archivos de Xpress es .mos Antes de trabajar en la ventana de c´ odigo, es necesario que usted tenga la formulaci´ on del problema que desea implementar y as´ ı pasarlo al lenguaje que usa Xpress. Por eso, consideremos el siguiente ejemplo: Una compa˜ ıa fabrica televisores y grabadoras. La compa˜ ıa tiene 3 almacenes y 2 tiendas de venta al menudeo. En los tres almacenes se dispone, respectivamente, de 60, 80, y 50 televisores y de 80, 50 y 50 grabadoras. En las tiendas de venta al menudeo, se requieren respectivamente 100 y 90 televisores y 60 y 120 grabadoras. La Tabla 1 muestra los costos de envi´ o por unidad de los almacenes a las tiendas. Plantee un problema de optimizaci´ on que minimice el costo total de transporte. Almac´ en Tienda 1 Tienda 2 1 300 500 2 200 300 3 600 300 Tabla 1: Datos para el problema de Electrodom´ esticos Indices y Conjuntos: i ∈E = Conjunto de art´ ıculos. j ∈A= Conjunto de almacenes. k ∈T = Conjunto de tiendas. Par´ ametros: c jk = Costo de envio por unidad del almac´ en j a la tienda k. h ij = Inventario disponible del art´ ıculo i en el almac´ en j . d ik = Demanda del art´ ıculo i en la tienda k. Variable de decisi´ on: x ijk =Cantidad de art´ ıculo i que env´ ıa del almac´ en j a la tienda k. 1

Gui Ax Press

Embed Size (px)

Citation preview

Guıa basica para el uso de Xpress

22 de octubre de 2004

Xpress-MP es un software de optimizacion desarrollado por la empresa britanica Dash Optimization. Xpress-MP consiste en una familia de herramientas para el modelado y optimizacion de problemas lineales, cuadraticosy enteros, utilizando tecnicas de programacion lineal y diversos algoritmos de busqueda.

Para tener acceso a Xpress, siga la ruta: Inicio, Programas, Xpress-Mp, Xpress IVE.

Para abrir la ventana de codigo, de click en New y dele un nombre al programa, especificando donde quiereque sea guardado. Recuerde que la extension de los archivos de Xpress es .mos

Antes de trabajar en la ventana de codigo, es necesario que usted tenga la formulacion del problema quedesea implementar y ası pasarlo al lenguaje que usa Xpress.

Por eso, consideremos el siguiente ejemplo:

Una companıa fabrica televisores y grabadoras. La companıa tiene 3 almacenes y 2 tiendas de venta almenudeo. En los tres almacenes se dispone, respectivamente, de 60, 80, y 50 televisores y de 80, 50 y 50grabadoras. En las tiendas de venta al menudeo, se requieren respectivamente 100 y 90 televisores y 60 y120 grabadoras. La Tabla 1 muestra los costos de envio por unidad de los almacenes a las tiendas. Planteeun problema de optimizacion que minimice el costo total de transporte.

Almacen Tienda 1 Tienda 21 300 5002 200 3003 600 300

Tabla 1: Datos para el problema de Electrodomesticos

Indices y Conjuntos:i ∈ E= Conjunto de artıculos.j ∈ A= Conjunto de almacenes.k ∈ T = Conjunto de tiendas.

Parametros:cjk= Costo de envio por unidad del almacen j a la tienda k.hij= Inventario disponible del artıculo i en el almacen j.dik= Demanda del artıculo i en la tienda k.

Variable de decision:xijk=Cantidad de artıculo i que envıa del almacen j a la tienda k.

1

Formulacion:

En este problema, se busca minimizar los costos totales por el envıo de unidades de cada uno de los productosde los almacenes a las tiendas. Las restricciones incluyen:

1. Una restriccion de demanda que debe ser satisfecha. Para esto, lo que se envıe de todos los almacenes aesa tienda y de ese producto sea igual a lo que se demanda. Esta restriccion debe funcionar para cadatienda y para cada producto. Esta restriccion se escribe como aparece en (1)

2. Una restriccion que indique que lo que cada almacen envıe a todas las tiendas de cada producto nopuede superar el numero de artıculos disponibles de ese almacen. Por lo tanto, esta restriccion debefuncionar para cada almacen y producto. Esta restriccion se escribe como aparece en (2)

3. Restricciones de no negatividad sobre las variables de decision. Esta restriccion se escribe como apareceen (3)

Minimizar z =∑i∈E

∑j∈A

∑k∈T

cjkxijk

sujeto a∑j∈A

xijk = dik i ∈ E , k ∈ T (1)

∑k∈T

xijk ≤ hij i ∈ E , j ∈ A (2)

xijk ≥ 0 i ∈ E , j ∈ A, k ∈ T (3)

Para pasar el programa a Xpress, consideremos inicialmente la siguiente plantilla de trabajo:

Archivo plantilla.mos

model ”Nombre”uses ”mmxprs”

( ! Con e s t a i n s t r u c c i o n se van a l lamar l o s datos d e l problemadesde un arch ivo cuya ex t ens i o n es . dat ! )

parametersi npu tF i l e =

end−parameters

( ! Esta func i on permite determinar como es l a so l u c i o n d e l problemaEsta func i on fue d e s a r r o l l a d a por e l Pro fesor Andres M. Medaglia ! )

forward function getProblemStatus ( s t a tu s : integer ) : string

( ! Para dec l a ra r l o s conjuntos y parametros d e l problemausamos usamos e l s i g u i e n t e b l oque ! )

declarations

end−declarations

! El s i g u i e n t e b l oque permite ” l lamar ” l o s datos desde e l arch ivo de datos

2

in i t i a l i zat ions from i npu tF i l e

end−in i t i a l i zat ions

!En e s t a par t e declaramos l a s v a r i a b l e s de d e c i s i o ndeclarations

end−declarations

( !En e s t a par t e se e s c r i b e e l problema en Xpress , de acuerdo al o que se d e f i n i o en l a par t e de a r r i ba ! )

! Funcion o b j e t i v o

! Re s t r i c c c i one s

( ! Para determinar s i l o que se busca es maximizar o minimizarl a func i on o b j e t i v o , se e s c r i b e l a s i g u i e n t e i n s t r u c c i o n :

minimize ( ) en caso de minimizaci onmaximize ( ) en caso de maximizacion ! )

! Para generar e l r epor t e tenemos :

writeln ( ”SOLUCION” )writeln ( ”Costo : ” + g e t s o l ( ) + ” \n ” ) ;! Funcion que retorma e l s t a t u s d e l problema

writeln ( ” Status : ” , getProblemStatus ( ge tp robs ta t ) )f o ra l l ( )write ( g e t s o l ( ) , ”\n” )

! Codigo de l a func ion que retorma e l s t a t u s d e l problemafunction getProblemStatus ( s t a tu s : integer ) : string

case s t a tu s ofXPRS OPT: returned := ”Se ha l l o un optimo . ”XPRS UNF : returned := ”Sin terminar . ”XPRS INF : returned := ”No Fac t i b l e . ”XPRS UNB: returned := ”Problema no acotado . ”

else returned := ” Status desconoc ido . ”end−case

end−functionend−model

Dado el problema que se quiere solucionar, la formulacion en Xpress, es la siguiente:

Archivo Articulos.mos

model ” a r t i c u l o s ”uses ”mmxprs”

parametersi npu tF i l e=”datos . dat”

3

end−parameters

declarationsARTICULOS: set of stringALMACENES: set of realTIENDAS : set of stringInven ta r i o : array (ARTICULOS,ALMACENES) of realDemanda : array (ARTICULOS,TIENDAS) of realCosto : array (ALMACENES,TIENDAS) of realx : array (ARTICULOS,ALMACENES,TIENDAS) of mpvar

end−declarations

in i t ia l i zat ions from i npu tF i l eARTICULOSALMACENESTIENDASInventa r i oDemandaCosto

end−in i t i a l i zat ions

fora l l ( i in ARTICULOS, j in ALMACENES, k in TIENDAS)doc r e a t e ( x ( i , j , k ) )

end−do

CostoTotal := sum( i in ARTICULOS, j in ALMACENES, k in TIENDAS) Costo ( j , k )∗x ( i , j , k )

f o ra l l ( i in ARTICULOS, j in ALMACENES)sum( k in TIENDAS) x ( i , j , k) <= Inventa r i o ( i , j )

f o ra l l ( i in ARTICULOS, k in TIENDAS)sum( j in ALMACENES) x ( i , j , k ) = Demanda( i , k )

f o ra l l ( i in ARTICULOS, j in ALMACENES, k in TIENDAS)x ( i , j , k ) i s integer

minimize ( CostoTotal )

! De f in i c i o n de l a func i on S ta tu sfunction getProblemStatus ( s t a tu s : integer ) : string

case s t a tu s ofXPRS OPT: returned :=”Solved to opt ima l i ty . ”XPRS UNF : returned :=” Unf in i shed . ”XPRS INF : returned :=” I n f e a s i b l e . ”XPRS UNB: returned :=”Unbounded . ”else returned := ”Unknown Status . ”

end−caseend−function

! Report genera t ionwriteln ( ” Transportat ion problem” )

4

! w r i t e l n (” Ins tance : ” , i n pu tF i l e )writeln ( ” Status : ” , getProblemStatus ( ge tp robs ta t ) )writeln ( ”Total co s t : ” , g e t s o l ( CostoTotal ) )f o ra l l ( i in ARTICULOS, j in ALMACENES, k in TIENDAS | g e t s o l ( x ( i , j , k))<>0)

writeln ( ”x ( ” , i , ” , ” , j , ” , ” ,k , ”)=” , g e t s o l ( x ( i , j , k ) ) )

end−model

El archivo de datos es:

Archivo datos.dat

ARTICULOS : [ ” Te l e v i s o r e s ” ”Grabadoras” ]ALMACENES: [ 1 2 3 ]TIENDAS : [ ”1” ”2” ]

Inven ta r i o : [ 6 0 8 0 5 080 50 50 ]

Demanda : [ 1 0 0 9 060 120 ]

Costo : [ 3 0 0 5 0 0200 300600 300 ]

1. DEFINICION DE ALGUNOS TIPOS DE VARIABLES

Variables Binarias: Son variables de decision que toman el valor de 0 o 1. Para decir en Xpressque un conjunto de variables son binarias se escribe:

forall(i in C) x(i)is binary

Variables Enteras: Son variables de decision que toman solo valores enteros. Se definen de lasiguiente forma:

forall(i in C) x(i)is integer

Variables Libres: Son aquellas que pueden tomar valores entre menos infinito y mas infinito. Sedefinen de la siguiente forma:

forall(i in C) x(i)is free

2. CONJUNTOS

Otra ventaja que tiene Xpress es la forma como permite manipular los conjuntos, para eso consideremoslos siguientes 3 conjuntos:

A:[1 3 5 7]B:[2 4 6 8]C:[1 2 3]

5

Unir Conjuntos: La forma como Xpress permite unir los tres conjuntos es:NUMEROS:=A+B+CNUMEROS:[1 2 3 4 5 6 7 8]

Interseccion de Conjuntos: La forma como Xpress permite la interseccion de conjuntos es:INTERSECCION:=A*CINTERSECCION:[1 3]

Diferencia de Conjuntos: La forma como Xpress permite la diferencia de conjuntos es:INTERSECCION:=A-CINTERSECCION:[5 7]

3. CONDICIONALES

Consideremos el siguiente caso en una restriccion:

It = It−1 + xt −Dt t = 1, . . . , T Balance de Inventario

Xpress nos permite reescribirla de la siguiente forma

forall(t in PERIODOS)invent(t)=if (t¿1,invent(t-1),I INIC)+pnorm(t)-DEM(t)

Donde I INIC es un parametro y representa el inventario inicial. Esta instruccion con el if nos dice quesi t>1 se debe seleccionar el inventario del periodo anterior, y si t<1 debe tomar el inventario inicial.

Ademas de hacer condiciones sobre las restricciones de un problema, podemos hacerlas sobre los indicesy conjuntos que trabajemos como se ilustra a continuacion:

forall(i in -10..10, j in 0..5 | A(i) > 20)y(i,j) ≥ U(i,j)

forall(i in -10..10, j in 0..5)if A(i) > 20y(i,j)≥U(i,j)end-if

forall(i in -10..10, j in 0..5 | A(i) > 20 and B(i,j) <> 0 )y(i,j) ≤ U(i,j)

forall(i in -10..10 | A(i) > 20, j in 0..5 | B(i,j) <> 0 )y(i,j) ≤ U(i,j)

Ejemplos tomados del libro Applications of optimization with Xpress-Mp.

Ejemplo 1:

Una companıa necesita transportar 180 toneladas de productos quımicos de sus 4 depositos (D1 a D4)a 3 centros de reciclaje (C1 a C4). Cada deposito contiene respectivamente 50,40,35 y 65 toneladas, loque representa 190 toneladas en total. Existen 2 formas de transportar los quımicos, por tren y porcarretera. El deposito 1 solo puede enviar al centro 1 y 2 por carretera a un costo de $12 y $11. Eldeposito 2 solo envıa al centro 1 por tren a un costo de $12 y al centro 2 por tren a un costo de $14. Eldeposito 3 envıa al centro 2 por carretera a un costo de $9 y al centro 3 por tren y carretera a un costode $4 y $5 respectivamente. El deposito 4 puede enviar al centro 2 por tren y carretera a un costo de$11 y $14 y al centro 3 por tren o por carretera a un costo de $10 $14 respectivamente.

6

La companıa tiene un contrato con la empresa duena del los trenes, en el cual lo mınimo que se puedetransportar es 10 toneladas y lo maximo 50. Por carretera no existen limitaciones de envıo. ¿Comopuede la companıa enviar las 180 toneladas minimizando el costo de transporte?

Indices y Conjuntos: A = Conjunto de arcos de precedencia. Es decir (`, j) ∈ A si ` precede a j.

Parametros:cij = Costo de envıo de i a j.

minij = Envıo mınimo de i a j (para el tren).maxij = Envıo maximo de i a j (para el tren).

E = Cantidad que necesita ser transportada.

Variables de decision:xji = Variable que determina la cantidad de quımico que es necesario enviar de i

a j.

Formulacion:

Minimizar z =∑j∈A

cijxij (4a)

sujeto a∑

(i,j)∈A

xij =∑

i,j∈Axji (∀i 6= origen,destino) ∈ A (4b)

xij ≥ minij (i, j) ∈ A (4c)xij ≤ maxij (i, j) ∈ A (4d)∑

(origen,j)∈A

xij ≥ E (4e)

Archivo quimicos.mos

model ”E−2 Minimum cos t x”uses ”mmxprs”

declarationsNODOS: set of stringE : integerA: array (ARCS: range , 1 . . 2 ) of stringCOST: array (ARCS) of integerMINCAP,MAXCAP: array (ARCS) of integer

end−declarations

in i t ia l i zat ions from ’ datosquimicos . dat ’A E MINCAP MAXCAP COST

end−in i t i a l i zat ions

NODOS:=union ( a in ARCS) {A(a , 1 ) ,A(a , 2 )}

declarationsx : array (ARCS) of mpvar ! x on arcs

end−declarations

! Ob j e c t i v e : t o t a l t r an spo r t co s tCost := sum( a in ARCS) COST( a )∗x ( a )

7

! x ba lance : inx e qua l s outxf o ra l l (n in NODOS | n<>”Source ” and n<>”Sink” )sum( a in ARCS |A(a ,2)=n)x ( a)=sum( a in ARCS |A(a ,1)=n)x ( a )

! Min and max x c a p a c i t i e sf o ra l l ( a in ARCS | MAXCAP(a ) > 0) dox ( a) >= MINCAP(a )x ( a) <= MAXCAP(a )

end−do

! Minimum t o t a l q uan t i t y to t r an spo r tsum( a in ARCS |A(a ,1)=”Source ” )x ( a)>= E

! So l ve the problemminimize ( Cost )

! So l u t i on p r i n t i n gwriteln ( ”Total co s t : ” , g e t ob j va l )f o ra l l ( a in ARCS)write ( i f ( g e t s o l ( x ( a )) >0 ,

A(a , 1 ) + ” −> ”+ A(a , 2 ) + ” : ”+ g e t s o l ( x ( a))+”\n” , ”” ) )

end−model

El archivo de datos es:

Archivo datosquimicos.dat

! Data f i l e f o r ‘ e2minf low .mos ’

A: [ ( 1 1 ) ”Source ” ”D1”( 2 1 ) ”Source ” ”D2”( 3 1 ) ”Source ” ”D3”( 4 1 ) ”Source ” ”D4”( 5 1 ) ”D1” ”road−C1”( 6 1 ) ”D1” ”road−C2”( 7 1 ) ”D2” ” r a i l −C1”( 8 1 ) ”D2” ”road−C1”( 9 1 ) ”D3” ”road−C2”

( 1 0 1 ) ”D3” ” r a i l −C3”( 1 1 1 ) ”D3” ”road−C3”( 1 2 1 ) ”D4” ” r a i l −C2”( 1 3 1 ) ”D4” ”road−C2”( 1 4 1 ) ”D4” ” r a i l −C3”( 1 5 1 ) ”D4” ”road−C3”

( 1 6 1 ) ” r a i l −C1” ”C1”( 1 7 1 ) ”road−C1” ”C1”( 1 8 1 ) ” r a i l −C2” ”C2”( 1 9 1 ) ”road−C2” ”C2”( 2 0 1 ) ” r a i l −C3” ”C3”( 2 1 1 ) ”road−C3” ”C3”( 2 2 1 ) ”C1” ”Sink”( 2 3 1 ) ”C2” ”Sink”( 2 4 1 ) ”C3” ”Sink” ]

8

MINCAP: [ ( 7 ) 1 0 ( 1 0 ) 1 0 ( 1 2 ) 1 0 ( 1 4 ) 1 0 ]

MAXCAP: [ ( 1 ) 5 0 40 35 6 5 ( 7 ) 5 0 ( 1 0 ) 5 0 ( 1 2 ) 5 0 ( 1 4 ) 5 0 ]

COST: [ ( 5 ) 1 2 1 1 1 2 1 4 9 4 5 1 1 1 4 1 0 1 4 ]

E: 1 8 0

Ejemplo 2:

Una empresa produce un producto el cual es ensamblado en 4 estaciones. Este producto es ensambladoen 12 operaciones las cuales tienen algunas precedencias. La Tabla 2 describe la duracion para cadaproceso ası como los predecesores de dicha actividad:

Operacion Duracion Predecesor1 3 -2 6 13 7 14 6 25 4 26 8 2,37 9 38 11 69 2 4,5,810 13 8,1111 4 712 3 9,10

Tabla 2: Lista de operaciones y predecesores

Cualquiera de las 4 estaciones puede hacer cualquiera de las operaciones sujeto a las restricciones deprecedencia. Es decir, una operacion solo puede ser asignada a una estacion si las operaciones prede-cesoras fueron asignadas a esa estacion o a una anterior.

Plantee un modelo para hacer un balanceo de linea y obtener la mayor tasa de produccion posible(o, equivalentemente, minimizar el tiempo de ciclo, que es el tiempo asignado a la estacion que mastrabajo tiene).

Indices y Conjuntos:T = Conjunto de Operaciones o tareas (indexados con j y `).E = Conjunto de Estaciones (indexados con k).A = Conjunto de arcos de precedencia. Es decir (`, j) ∈ A si ` precede a j.

Parametros:Dj = Duracion de la tarea j.

Variables de decision:

9

T = Variable de decision que representa el tiempo de ciclo.xjk = Variable binaria que vale i si si la tarea j es asignada a la estacion k y 0 en

caso contrario.

Formulacion:

Minimizar z = T (5a)

sujeto a∑j∈T

Djxjk ≤ T k ∈ E (5b)

∑k∈E

xjk = 1 j ∈ T (5c)∑k∈E

kx`k ≤∑k∈E

kxjk (`, j) ∈ A (5d)

xjk ∈ {0, 1} j ∈ T , k ∈ E (5e)

Archivo balanceo.mos

model ”B−6 Assembly l i n e ba lanc ing ”uses ”mmxprs”

declarationsESTACIONES=1. .4TAREAS=1. .12DUR: array (TAREAS) of integerARC: array (RA: range , 1 . . 2 ) of integerx : array (TAREAS,ESTACIONES) of mpvarc i c l o : mpvar

end−declarations

in i t ia l i zat ions from ’ datosba lanceo . dat ’DUR ARC

end−in i t i a l i zat ions

! Una e s t a c i o n por tareaf o ra l l ( i in TAREAS) sum(m in ESTACIONES) x ( i ,m) = 1

! Secuencia de l a s t a r ea sf o ra l l ( a in RA)sum(m in ESTACIONES) m∗x (ARC(a , 1 ) ,m) <= sum(m in ESTACIONES) m∗x (ARC(a , 2 ) ,m)

! Tiempo de c i c l of o ra l l (m in ESTACIONES) sum( i in TAREAS) DUR( i )∗x ( i ,m) <= c i c l o

f o ra l l ( i in TAREAS, m in ESTACIONES) x ( i ,m) is binary

! Minimizar e l tiempo de c i c l ominimize ( c i c l o )

! So l u t i on p r i n t i n gwriteln ( ”Minimo Tiempo de c i c l o : ” , g e t ob j va l )f o ra l l (m in ESTACIONES) dowrite ( ” Estac i on ” , m, ” : ” )f o ra l l ( i in TAREAS)

10

write ( i f ( g e t s o l (sum( k in ESTACIONES) k∗x ( i , k ) ) = m, ” ”+i , ”” ) )writeln ( ” ( durac i on : ” , g e t s o l (sum( i in TAREAS) DUR( i )∗x ( i ,m) ) , ” ) ” )

end−do

end−model

El archivo de datos es:

Archivo datosbalanceo.dat

ARC: [ ( 1 1 ) 1 2( 2 1 ) 1 3( 3 1 ) 2 4( 4 1 ) 2 5( 5 1 ) 2 6( 6 1 ) 3 6( 7 1 ) 3 7( 8 1 ) 4 9( 9 1 ) 5 9

( 1 0 1 ) 6 8( 1 1 1 ) 7 11( 1 2 1 ) 8 9( 1 3 1 ) 8 10( 1 4 1 ) 9 12( 1 5 1 ) 1 0 12( 1 6 1 ) 1 1 1 0 ]

DUR: [ 3 6 7 6 4 8 9 1 1 2 1 3 4 3 ]

Ejemplo 3:

Un Modelo de Transporte

Archivo Transporte.mos

model Transport

uses ”mmxprs”

parametersi npu tF i l e=”datos2 . dat”

end−parameters

forward function getProblemStatus ( s t a tu s : integer ) : string

declarationsREGION: set of string ! Conjunto de c l i e n t e sPLANTA: set of string ! Conjunto de PlantasDemanda : array (REGION) of real ! DemandaCapacidad : array (PLANTA) of real ! Capacidad de ProduccionCosto : array (PLANTA) of real ! Costo por unidad de Produccion! Capacidad de t r an spo r t e para cada rutaCapTransporte : array (PLANTA,REGION) of real! D i s t ac i a en t re l a pa ln ta y l a reg i onDis tanc ia : array (PLANTA,REGION) of realGasol ina : real ! Costo de ga so l i na por unidad de d i s t an c i ax : array (PLANTA,REGION) of mpvar ! Envıo

11

end−declarations

in i t ia l i zat ions from i npu tF i l eDemanda[ Capacidad , Costo ] as ”PLANTDATA”[ Distanc ia , CapTransporte ] as ”ROUTES”Gasol ina

end−in i t i a l i zat ions

! Crear l a s v a r i b l e s x que e x i s t e nf o ra l l (p in PLANTA, r in REGION | e x i s t s ( CapTransporte (p , r ) ) ) c r e a t e ( x (p , r ) )

! Funcion Ob j e t i vo : minimizar e l cos toCostoTotal := sum(p in PLANTA, r in REGION | e x i s t s ( x (p , r ) ) )( Gasol ina ∗ Dis tanc ia (p , r ) + Costo (p ) ) ∗ x (p , r )

! Re s t r i c c i o n de l a capacidad de p lan taf o ra l l (p in PLANTA) sum( r in REGION) x (p , r ) <= Capacidad (p)! Re s t r i c c i o n de l a s a t i s f a c c i o n de l a demandaf o ra l l ( r in REGION) sum(p in PLANTA) x (p , r ) = Demanda( r )! Re s t r i c c i o n de l a s capacidad de l a s ru ta sf o ra l l (p in PLANTA, r in REGION | e x i s t s ( x (p , r ) ) )x (p , r ) <= CapTransporte (p , r )

minimize ( CostoTotal )fopen ( ” s o l u c i on . txt ” ,F OUTPUT)writeln ( ”Problema de Transporte ” )writeln ( ” Status : ” , getProblemStatus ( ge tp robs ta t ) )writeln ( ”Total co s t : ” , g e t s o l ( CostoTotal ) )f o ra l l (p in PLANTA, r in REGION | g e t s o l ( x (p , r ))<>0)writeln ( ”De l a p lanta ” ,p , ” a l a r eg i o n ” , r , ” se deben env ia r ” , g e t s o l ( x (p , r ) ) ,” unidades ” )f c l o s e (F OUTPUT)

function getProblemStatus ( s t a tu s : integer ) : stringcase s t a tu s of

XPRS OPT: returned := ”Se ha l l o un optimo . ”XPRS UNF : returned := ”Sin terminar . ”XPRS INF : returned := ”No Fac t i b l e . ”XPRS UNB: returned := ”Problema no acotado . ”

else returned := ” Status desconoc ido . ”end−case

end−functionend−model

El archivo de datos es:

Archivo datos2.dat

Demanda : [ ( Scot land ) 2 8 4 0 ( North ) 2 8 0 0 ( SWest ) 2 6 0 0 ( SEast ) 2 8 2 0 ( Midlands ) 2 7 5 0 ]

PLANTDATA: [ ( Corby ) [ 3 0 0 0 1 7 0 0 ]( Dees ide ) [ 2 7 0 0 1 6 0 0 ]( Glasgow ) [ 4 5 0 0 2 0 0 0 ]( Oxford ) [ 4 0 0 0 2 1 0 0 ] ]

12

ROUTES: [ ( Corby North ) [ 4 0 0 1 0 0 0 ](Corby SWest ) [ 4 0 0 1 0 0 0 ](Corby SEast ) [ 3 0 0 1 0 0 0 ](Corby Midlands ) [ 1 0 0 2 0 0 0 ]( Dees ide Scot land ) [ 5 0 0 1 0 0 0 ]( Dees ide North ) [ 2 0 0 2 0 0 0 ]( Dees ide SWest ) [ 2 0 0 1 0 0 0 ]( Dees ide SEast ) [ 2 0 0 1 0 0 0 ]( Dees ide Midlands ) [ 4 0 0 3 0 0 ]( Glasgow Scot land ) [ 2 0 0 3 0 0 0 ]( Glasgow North ) [ 4 0 0 2 0 0 0 ]( Glasgow SWest ) [ 5 0 0 1 0 0 0 ]( Glasgow SEast ) [ 9 0 0 2 0 0 ]( Oxford Scot land ) [ 8 0 0 ∗ ]( Oxford North ) [ 6 0 0 2 0 0 0 ]( Oxford SWest ) [ 3 0 0 2 0 0 0 ]( Oxford SEast ) [ 2 0 0 2 0 0 0 ]( Oxford Midlands ) [ 4 0 0 5 0 0 ] ]

Gasol ina : 1 7

Archivo solucion.txt

Problema de TransporteStatus : Se ha l l o un optimo .Total co s t : 8 . 1 0 1 8 e+007De l a p lanta Corby a l a r eg i o n SWest se debe env ia r 180 unidadesDe l a p lanta Corby a l a r eg i o n SEast se debe env ia r 820 unidadesDe l a p lanta Corby a l a r eg i o n Midlands se debe env ia r 2000 unidadesDe l a p lanta Dees ide a l a r eg i o n North se debe env ia r 1530 unidadesDe l a p lanta Dees ide a l a r eg i o n SWest se debe env ia r 920 unidadesDe l a p lanta Dees ide a l a r eg i o n Midlands se debe env ia r 250 unidadesDe l a p lanta Glasgow a l a r eg i o n Scot land se debe env ia r 2840 unidadesDe l a p lanta Glasgow a l a r eg i o n North se debe env ia r 1270 unidadesDe l a p lanta Oxford a l a r eg i o n SWest se debe env ia r 1500 unidadesDe l a p lanta Oxford a l a r eg i o n SEast se debe env ia r 2000 unidadesDe l a p lanta Oxford a l a r eg i o n Midlands se debe env ia r 500 unidades

Referencias

[1] Applications of optimization with Xpress-Mp. Christelle Gueret, Christian Prins and Marc SevauxTranslated and revised by Susanne Heipcke Dash Optimization, 2002,ISBN 0-9543503-0-8.

[2] Manuales:Xpress-MP Essentials,Xpress-Mosel User Guide.

[3] Palacios F., Medaglia A. y Riano G., Ejemplos de Formulacion de Modelos usando Xpress-MP. 4 deSeptiembre de 2003.

[4] http://www.dashoptimization.com/

13