Está en la página 1de 3

Optimización Industrial Iker Ruiz de Esquide e Irene Izco

Grupo 2

Resolución del problema 8 de la hoja de formulación de enteros


con MATLAB
El problema a resolver
Se desea encontrar la solución óptima del problema 8 de la hoja de formulación de enteros. En
este primer apartado se planteará el problema, llevando a cabo la definición de las variables, la
función objetivo y las restricciones para definir el problema de programación lineal entero.

Definición de las variables:

xi: Unidades de producto que se fabrican con el proceso i, siendo i=A, B, C, D.

Se considera que el producto que se comercializa es indivisible, y por lo tanto las variables
definidas son enteras. Se debe indicar con el comando “gin” en LINDO que las cuatro primeras
variables son enteras.

Se definen cuatro variables binarias para decidir si el proceso se pone en marcha o no.
1, 𝑠𝑖 𝑠𝑒 𝑝𝑜𝑛𝑒 𝑒𝑛 𝑚𝑎𝑟𝑐ℎ𝑎 𝑒𝑙 𝑝𝑟𝑜𝑐𝑒𝑠𝑜 𝑖
yi: {
0, 𝑠𝑖 𝑛𝑜 𝑠𝑒 𝑝𝑜𝑛𝑒 𝑒𝑛 𝑚𝑎𝑟𝑐ℎ𝑎 𝑒𝑙 𝑝𝑟𝑜𝑐𝑒𝑠𝑜 𝑖
Se indica con el comando “int” que las variables yA, yB, yC e yD son binarias.

Función objetivo:

Se desea decidir qué procesos usar y a qué capacidad con el objetivo de minimizar los costes.

Restricciones:

Se introducen tres bloques de restricciones: uno para cubrir la demanda, otro para no
sobrepasar la capacidad de producción y, por último, las condiciones lógicas para las variables
binarias.

Formato de programación en MATLAB


Se utiliza la función intlinprog, que sirve para resolver un problema lineal mixto (de variables
continuas y enteras) en forma estándar a minimizar.

Fig. 1 Definición del problema lineal mixto a minimizar que resuelve el solver intlinprog en MatLab
Fuente: Documentación de MathWorks Help

El vector x queda definido en la función como el vector que recoge las variables del problema.
El número de variables y su orden en el vector x queda definido con el tamaño de la matriz A,
en concreto con el número de columnas, que en este caso son 8. La parte independiente de las
restricciones en el vector b. Las restricciones de desigualdad se deben escribir en forma menor
o igual (≤) y se introducen en la matriz A. Para las restricciones de tipo igual se utiliza el vector
fila Aeq. Por último, el vector f recoge los coeficientes de la función objetivo.
Optimización Industrial Iker Ruiz de Esquide e Irene Izco
Grupo 2
El vector “intcon” se utiliza para indicar la posición de las variables que son enteras. En este caso
se introduce intocon= [5, 6, 7, 8], ya que las variables. Finalmente, para acotar los valores de las
variables se definen los valores máximos (upper bound) y mínimos (lower bound) en los vectores
ub y lb. Se debe cumplir la condición de no-negatividad para las variables continuas (ub=infinito
y lb=0) y las binarias se definen de lb=0 a ub=1.

A = [-1,-1,-1,-1,0,0,0,0;
0,0,0,0,1,-1,0,0;
0,0,0,0,0,0,1,1;
1,0,0,0,-2000,0,0,0;
0,1,0,0,0,-2200,0,0;
0,0,1,0,0,0,-2500,0;
0,0,0,1,0,0,0,-2800];
b = [-4400,0,1,0,0,0,0];
Aeq = [0,0,0,0,1,0,-1,0];
beq = 0;
lb = [0;0;0;0;0;0;0;0];
ub = [inf;inf;inf;inf;1;1;1;1];
Fig. 2 Formulación de los datos del problema en Matlab.

El algoritmo de MATLAB
Como se explica en la página web de MathWorks la función intlinprog ejecuta un algoritmo
en 6 pasos. Si llega a la solución del problema en alguno de estos pasos deja de ejecutar el
algoritmo.

1. Reduce el tamaño del problema utilizando la función de preprocesado de programación


lineal, reduciendo las matrices del problema original.
2. Resuelve el problema relajado, es decir, tomando todas las variables como continúas
utilizando técnicas de resolución de programación lineal. Estas técnicas pueden ser el
algoritmo dual-simplex o el algoritmo de punto interior. En ambos algoritmos MATLAB
debe generar un punto inicial, ejecutar iteraciones y detener las iteraciones en base a
unas condiciones de detención.
3. Ejecutar el preprocesamiento de programación mixta-entera para ajustar los valores
obtenidos de la resolución del problema relajado. El objetivo de este preprocesamiento
es descartar candidatos para la resolución de los pasos 5 y 6 (Ramificación y acotación).
4. Se realiza una generación de corte para ajustar todavía más los valores obtenidos del
problema relajado.

Los pasos 5 y 6 se tratan de técnicas para resolver problemas de programación lineal enteros.
MATLAB solo saltará de uno al otro si no consigue resolver el problema con el primero.

5. Métodos heurísticos: Se obtiene una aproximación intuitiva de la solución del problema


ejecutando iteraciones del método de ramificación y acotación (Branch & Bound) para
encontrar soluciones factibles.
6. Método de ramificación y acotación (Branch & Bound): Busca la solución óptima
acotando los rangos de los posibles valores de las variables enteras.
Optimización Industrial Iker Ruiz de Esquide e Irene Izco
Grupo 2

Resolución del problema


MATLAB devuelve la solución óptima del problema en un vector x, donde se almacenan los
valores de la solución de las variables del problema. El valor de la función objetivo es
almacenado en la variable fval.

La solución obtenida en MATLAB es x= [0, 1600, 0, 2800, 0, 1, 0, 1] y fval= 13150 como se muestra
en la Fig. 3.

Fig. 3 Solución obtenida con Matlab

Del resultado obtenido podemos destacar que el valor de la función objetivo y por tanto el coste
mínimo de producción es de 13150 unidades monetarias. Para alcanzar esa solución óptima
únicamente se pondrán en marcha únicamente las máquinas B y D, fabricando 1600 unidades
de producto mediante la máquina A y 2800 unidades con la D.
Se incluye la formulación y resolución del mismo problema con LINDO para poder verificar que
la solución obtenida es exactamente la misma con ambos softwares.

Fig. 4 Formulación y solución del problema obtenido en LINDO

También podría gustarte