Вы находитесь на странице: 1из 3

Programacio?

n_lineal

October 22, 2019

1 Programación Lineal
Para poder usar este programa debemos tener una formulación correcta del problema, para ello
debemos tener una función objetivo y un set de restricciones que sean lineales. Podemos mini-
mizar o maximizar la función objetivo y todos las restricciones deben ser de la forma:
LHS ≤ RHS

1.1 Poblema
• Un turno tiene una duración de 8h
• El horno puede utilizarse 6h por turno y tiene una capacidad de 30 kg de masa
• La unidad de fermentación puede utilizarse 7h por turno y tiene una capacidad de 25 kg de
masa

Importar los módulos necesarios

In [1]: import pulp


import numpy as np

1.2 Objetivo
maximizar f (x) = v1 × x1 + v2 × x2 + v3 × x3
donde la utilidad por producto esta indicada en la siguiente lista:

In [2]: utilidad_producto= [0.60, 0.10, 0.09]

1.3 Restricciones
Demanda máxima:

In [3]: demanda_máxima = [100, 1400, 1000]

Capacidad del horno y del fermentador:

In [4]: capacidad_máquinas = [6*30, 7*25]

Ahora creamos una matriz con todas las restricciones y le vamos a llamar RHS

1
In [5]: RHS = np.array(demanda_máxima + capacidad_máquinas)
print(RHS)

[ 100 1400 1000 180 175]

Ahora establecemos los requerimientos de cada restricción por unidad de producto

In [6]: requerimiento_demanda = [[1, 0, 0],


[0, 1, 0],
[0, 0, 1]]

In [7]: requerimiento_máquinas = [[0.75*0.5, 0.5*0.1, 0.15*0.03],


[2*0.5, 1.5*0.1, 1.5*0.03]]

Ahora creamos una matriz con los requerimientos de cada restricción por producto y le vamos
a llamar LHS

In [8]: LHS = requerimiento_demanda + requerimiento_máquinas


print(np.array(LHS))
print(LHS)

[[ 1. 0. 0. ]
[ 0. 1. 0. ]
[ 0. 0. 1. ]
[ 0.375 0.05 0.0045]
[ 1. 0.15 0.045 ]]
[[1, 0, 0], [0, 1, 0], [0, 0, 1], [0.375, 0.05, 0.0045], [1.0, 0.15000000000000002, 0.045]]

1.4 Método
Definir el método que va a solucionar el problema

In [9]: from lp import *

1.5 Solución
Si queremos maximizar la función objetivo escribimos ’max’ en el último input de la función ILP(),
caso contrario escribimos ’min’. Si simplemente deseamos resolver el problema con programación
lineal corremos lo siguiente:

In [10]: plan, objective = ILP(utilidad_producto, LHS, RHS, '', 'max')

donde el penúltimo input de la función ILP(), i.e. ’ ’, indica que queremos resolver el problema
con programmación lineal.

In [11]: print('El plan de producción es:{}'.format(plan))

El plan de producción es:[0.0, 866.66667, 1000.0]

2
In [12]: print('La utilidad obtenida es de {} USD.'.format(objective))

La utilidad obtenida es de 176.66666700000002 USD.

Sin embargo, en la realidad no es posible producir 0.66667 unidades de pan 2, y por ello nece-
sitamos resolver el problema con programación lineal entera. Para hacer esto debemos pasar el
parametro ’Integer’ al penúltimo input de la función ILP(), tal como se muestra a continuación:

In [13]: plan, objective = ILP(utilidad_producto, LHS, RHS, 'Integer', 'max')

In [14]: print('El plan de producción es:{}'.format(plan))

El plan de producción es:[0.0, 866.0, 1000.0]

In [15]: print('La utilidad obtenida es de {} USD.'.format(objective))

La utilidad obtenida es de 176.60000000000002 USD.

Вам также может понравиться