Está en la página 1de 32

MÉTODOS CUANTITATIVOS DE GESTIÓN

Resolución de Problemas

LIBRERÍAS DE OPTIMIZACIÓN LINGO

1
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

 Software de Optimización (Programación Lineal, Programación Entera,


Programación No Lineal)
 www.lindo.com
 Freeware

LINGO
Modelo + Datos Modelo + Datos
Archivo Interfaz Interfaz Archivo
Ejecución
Entrada Entrada Resultados Salida

2
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

FORMATO BÁSICO: El formato extendido

ESTRUCTURA
1. Encabezado
2. Función Objetivo: Maximizar o minimizar con los valores de los costes
de todas las variables
3. Restricciones del problema
4. Restricciones asociadas al tipo de variable
5. Fin

3
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

1. ENCABEZADO.
FORMATO: MODEL:

2. FUNCIÓN OBJETIVO
FORMATO: {[NOMBRE]} (MAX/MIN) = x1 + 2 * x2 + 3 * x3 – 5*x4;

3. RESTRICCIONES
FORMATO: {[NOMBRE DE LA RESTRICCIÓN]} x1 + x2<=1;

4
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
4. RESTRICCIONES DE TIPO DE VARIABLES
• Por defecto, las variables son Continuas 0
• Variable Entera
FORMATO: @GIN(X3);
• Variable Binaria
FORMATO: @BIN(X2);
• Variable Libre
FORMATO: @FREE(X2);

5. FIN
FORMATO: END

5
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

OTRAS CONSIDERACIONES
• Se ignoran las líneas en blanco.
• Los comentarios van precedidos del símbolo ! y al final ;
• No se distingue entre mayúsculas y minúsculas.
• La longitud máxima de una línea es de 512 caracteres.

6
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLO: Archivo de entrada


MODEL:

Max x1  x2  y [OBJETIVO] MAX = x1 + x2 + y ;

s.a. [PRIMERA] x1 <=2; !ejemplo de comentario;


x1  2
[SEGUNDA] x1 + y <=3;
x1  y  3
[TERCERA] y + 2*x2 <=4;
y  2 x2  4
x1  0, x2  0 Entera @GIN(X2);
y binaria
@BIN(y);

END

7
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
Interfaz
1 2

8
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
Interfaz
4

9
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
Interfaz
6

10
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

FORMATO ABSTRACTO: El USO DE CONJUNTOS


Cuando queremos expresar un modelo de forma simplificada (abstracta), es necesario el
uso de conjuntos. Los conjuntos tienen una equivalencia directa con los actores del
problema, con una diferencia. LINGO distingue dos tipos de conjuntos:
- Conjuntos primitivos: Recogen los actores conjunto del problema y sus atributos propios
o compartidos con actores que no estén en un conjunto
- Conjuntos derivados: Recogen las características compartidas entre actores conjunto.
Están formados, por tanto, por los actores primitivos ya definidos.
Las características sólo se definen, por tanto, una única vez.
Los actores que no forman conjunto no es necesario definirlos. Sus características se
definen directamente en la sección de valores (DATA).
LINGO posee dos secciones para la definición de los conjuntos.
- Sección SET: Se definen los nombres y número de elementos de los conjuntos
- Sección DATA: Se definen los valores de las características.

11
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Nos ilustraremos con un ejemplo:

El problema de transporte

Una empresa dispone de m almacenes donde se encuentran las unidades de su producto.


Cada almacén Ai (i=1...10) posee Ki unidades.
Existe un conjunto de Clientes (j=1..12) con una demanda Dj de unidades del producto.
La empresa tiene que abastecer la demanda de los 12 clientes desde los almacenes.
El coste de envío de un producto desde cada almacén Ai (i=1...10) a cada cliente Cj
(j=1..12) se estima en cij.
Especificaciones
Capacidad de cada almacén
Abastecimiento a cada Cliente de su Demanda
Objetivo
Minimizar el coste de envío

12
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Actores Tipo Características


Almacenes Conjunto - Existencias (Ai ; Valor entero; Compartida)
i=1..10 - Coste (cij; Continuo; Compartida)
Unitario
Clientes Conjunto - Demanda (Dj; Valor entero; Compartida)
j=1..12 - cij
Unitario
Producto Medible - Ai; Dj; cij
discreto

Actividades de decisión
Envíar productos (Almacenes; Clientes; Producto)
Valor: Entero ; Medida=nº unidades
Variable: xij = Nº unidades de producto enviadas desde Almacén i a Cliente j

13
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

MODELO:
10 12
Min c
i 1 j 1
ij xij

s.a.
12
i : x
j 1
ij  Ai

10
j : x
i 1
ij  Dj

i, j : xij  0
14
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
Sección SET Sección DATA
SETS: DATA:
Definición de Conjuntos Valores
ENDSETS ENDDATA

Sección SET
Definición de un conjunto primitivo:
Nombre_conjunto {/ lista de actores /} {: lista de atributos};

lista de actores y lista de atributos separados por coma

Ejemplo:
Almacen / Almacen1, Almacen2, Almacen3, Almacen4, Almacen5, Almacen6,
Almacen7, Almacen8, Almacen9, Almacen10/: existencias;
15
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Posibilidades de simplificación en la definición de la lista de actores:

Formatos Ejemplo Actores del conjunto


1..n 1..10 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10
LetraM..letraN a..g a, b, c, d, e, f, g
cadenaM..cadenaN Almacen1..Almacen10 Almacen1, Almacen2, ..., Almacen10

día..día MON..FRI MON, TUE, WED, THU, FRI


mesM..mesN OCT..JAN OCT, NOV, DEC, JAN
mesAñoM..mesAñoN OCT2001..JAN2002 OCT2001, NOV2001, DEC2001,JAN2002

16
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Definición de un conjunto derivado:


Nombre_Conjunto(Lista de Conjuntos Primitivos) {/ lista de elementos /} {: lista
de atributos};
lista de conjuntos primitivos y lista de atributos separados por coma

Ejemplo:
SETS:
Almacences / 1..10/: Existencias; Conjunto primitivo
Clientes / 1.. 12/: Demanda; Conjunto primitivo
Almacen_Cliente (Almacenes, Clientes): Coste; Conjunto derivado
ENDSETS

17
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

La asociación la realiza en el siguiente orden: Índice Actores


1 (1,1)
2 (1,2)
3 (1,3)
… …
12 (1,12)
13 (2,1)
14 (2,2)
… …

Si no existen todas las combinaciones, es necesario indicar las combinaciones


existentes, dejando espacio entre cada actor de una combinación y separando
por comas cada combinación existente:
Almacen_Cliente(Almacenes, Clientes)/1 1, 1 3, 2 3,3 1, 3 4,4 3,5 1,5 2/: Coste;

18
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
Sección DATA
Lista de atributos = lista de valores

Ejemplos:
SETS:
SET1 /A, B, C/: X, Y;
ENDSETS
DATA:
X = 3, 2, 3;
Y = 5, 5, 8;
ENDDATA

También podemos asignar de esta forma:


SETS:
SET1 /A, B, C/: X, Y;
ENDSETS
DATA:
X, Y = 3, 5, 2, 5, 3, 8;
19
ENDDATA
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Inventándonos los valores de nuestro problema de referencia, la secciones SET y DATA


podrían quedar como:
SETS:
Almacenes /1..10/: Existencias;
Clientes /1..12/: Demanda;
Almacences_Clientes(Almacenes, Clientes) : Coste;
ENDSETS
DATA:
Existencias = 40, 50, 30, 45, 100, 34, 15, 12, 18, 50;
Demanda = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35, 30, 13;
Coste = 1, 4, 3, 2, 5, 5, 7, 9, 1, 2 , 3, 3, 1, 4, 3, 2, 5, 5, 5, 5, 1, 2 , 3, 3,
4, 4, 3, 2, 5, 5, 7, 9, 1, 2 , 3, 2, 3, 1, 4, 3, 2, 5, 4, 7, 9, 1, 2 , 3, 2,
5, 4, 3, 5, 5, 5, 7, 7, 1, 2 , 3, 3, 1, 4, 3, 2, 3, 5, 7, 9, 1, 2 , 1, 1,
7, 4, 3, 6, 5, 5, 7, 2, 1, 2 , 7, 1, 1, 4, 3, 2, 5, 2, 7, 6, 1, 2 , 2, 3,
3, 4, 5, 7, 5, 5, 7, 3, 1, 2 , 5, 3, 1, 4, 3, 2, 5, 2, 7, 6, 1, 2 , 2, 4,
9, 4, 3, 2, 5, 5, 7, 1, 1, 2 , 3, 3, 1, 4, 3, 2, 1, 5, 7, 7, 1, 2 , 3, 3;
ENDDATA
20
MÉTODOS CUANTITATIVOS DE GESTIÓN

1. Librerías LINGO

Actividades y Cálculos Auxiliares


Se definen en la Sección SET como un atributo más, al que no asignaremos valor en la
sección DATA.

SETS:
Almacenes /A1..A10/: Existencias;
Clientes /C1..C12/: Demanda;
Producto;
Almacences_Clientes(Almacenes, Clientes) : Coste, X;
ENDSETS

21
MÉTODOS CUANTITATIVOS DE GESTIÓN

1. Librerías LINGO

Especificaciones

Función Uso
@FOR @FOR es usado par generar restricciones sobre los
miembros de un conjunto.

@SUM @SUM calcula la suma de una expresión sobre los miembros


de un conjunto.

12
Aplicación: i : x
j 1
ij  Ai

@FOR @SUM

22
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO
SINTAXIS
@función (nombre_conjunto [ ( lista de índices) [ | calificador condicional]] : expresión);
@función corresponde con una de las funciones de la tabla (FOR, SUM)
La lista de índices es opcional. Se corresponde con los índices que vamos a usar para el
conjunto.
El calificador condicional es opcional. Se usaría para limitar los elementos del conjunto
sobre los que se aplica la restricción (/ condiciones).
El formato de signo para expresiones condicionales que utiliza LINGO es:
#EQ# = #And# y
#NE#  #or# o
#GE# 
#GT# >
#LT# <
#LE# 

La expresión es la restricción que se aplica.


Para @FOR, expresión puede contener múltiples expresiones, separadas por ;
23
La función(@SUM sólo admite una expresión.
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLOS
@FOR

Sistema con 100 proveedores a los que compro unidades de un producto


Hay que imponer que a cada proveedor no se le compren más de 2500 uds

SETS:
Proveedores / 1..100/: X;
Producto;
ENDSETS
@FOR( Proveedores(i): X(i) <= 2500);

Podemos trabajar sin el subíndice:


@FOR(Proveedores: x<=2500);

24
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Sistema anterior en el que cada proveedor tiene su propio dato de capacidad y un valor
de distancia en Km, de forma que sólo se aplica la restricción de capacidad a los que
posean una distancia inferior a los 100 Km.

SETS:
Proveedores / 1..100/: Capacidad, Distancia, X;
Producto;
ENDSETS
DATA:
Capacidad = 40, 50, 30, 45, 100, 34, 15, 12, 18, 50,….;
Distancia = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35, 30, 13,….;
ENDDATA

@FOR( Proveedores(i) | Distancia(i) #LT# 100 : X(i) <= Capacidad (i) );

25
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLOS
@SUM

SETS:
Clientes/1..12/: Demanda;
ENDSETS
DATA:
Demanda = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35, 30, 13;
ENDDATA
Si queremos suma el total de lo que se demanda:
DemandaTotal = @SUM( Clientes(j): Demanda(j) );

También valdría sin subíndice:


DemandaTotal = @SUM( Clientes: Demanda );

Si sólo voy a sumar la demanda de los 3 primeros clientes:


DEMANDA_3 = @SUM( Clientes(j) | j #LE# 3: Demanda(j) );
en este caso si necesitaba el subíndice.
26
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

@SUM

SETS:
Proveedores / 1..100/: Capacidad, Distancia, X;
Producto;
ENDSETS
DATA:
Capacidad = 40, 50, 30, 45, 100, 34, 15, 12, 18, 50,….;
Distancia = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35, 30, 13,….;
ENDDATA

Si la función objetivo minimiza la distancia por el número de unidades compradas.


100
Min  d i xi
i 1

Min = @SUM(Proveedores(i): Distancia(i)*x(i));


27
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLO
El problema de la mochila
Dada una mochila con un volumen V y un conjunto de 10 objetos, cada uno caracterizado por un
volumen vi y un peso pi, se trata de maximizar el peso total de los objetos introducidos en la
mochila.
Especificaciones
Capacidad de la mochila
Objetivo
Maximizar el peso total de los objetos seleccionados

Actores Tipo Atributo


Objetos Conjunto - Peso (pi ; Valor continuo; Propio )
i=1..10 - Volumen (vi; Valor continuo ; Propio)
Unitario
Mochila Unitario - Volumen (V; Valor entero; Propio)

28
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Actividades de decisión
Seleccionar objetos (Objetos)
Valor: Binario
Variable: i = 1 si selecciono objeto i; 0 si no.

MODELO: 10
Min  pi 1
i i

s.a.
10


i 1
i V

i :  i binaria
29
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLO: Problema de la Mochila


MODEL:
SETS:
Objetos /1..10/: Peso, Volumen, Seleccion;
ENDSETS
DATA:
Peso = 40, 50, 30, 45, 100, 34, 15, 12, 18, 50;
Volumen = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35;
VolumenM = 200;
ENDDATA

MIN = @SUM( Objetos( i): peso(i) * Seleccion(i));

@SUM( Objetos( i): Volumen( i)*Selección(i) ) <= VolumenM;

@FOR(Objetos(i): @BIN(Seleccion(i)));

END 30
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

EJEMPLO: Problema del transporte


SETS:
Almacenes /1..10/: Existencias;
Clientes /1..12/: Demanda;
Almacences_Clientes(Almacenes, Clientes) : Coste, X;
ENDSETS
DATA:
Existencias = 40, 50, 30, 45, 100, 34, 15, 12, 18, 50;
Demanda = 20, 25, 25, 30, 10, 10 ,16, 23, 25, 35, 30, 13;
Coste = 1, 4, 3, 2, 5, 5, 7, 9, 1, 2 , 3, 3, 1, 4, 3, 2, 5, 5, 5, 5, 1, 2 , 3, 3…;
ENDDATA

MIN = @SUM( Almacences_Clientes( i, j): Coste(i, j) * X(i, j));


! Especificación de Demanda;
@FOR( Clientes(j): @SUM( Almacences( i): X( i, j) ) >= Demanda(j));
! Especificación de capacidad;
@FOR( Almacences(i): @SUM( Clientes(j): X( i, j)) <= Existencias(i));
31
MÉTODOS CUANTITATIVOS DE GESTIÓN

Librerías LINGO

Lingo es muy flexible y permite que la función objetivo del problema:

MIN = @SUM( Almacences_Clientes( i, j): Coste(i, j) * X(i, j));

pueda ser definida también de la siguiente manera:

MIN = @SUM( Almacences (i): @SUM(Clientes(j): Coste(i, j) * X(i, j)));

32