You are on page 1of 33

UNIVERSIDAD TÉCNICA

FEDERICO SANTA MARÍA

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE
PROGRAMACION PYTHON POR MEDIO DEL SOFTWARE
ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI
MOISÉS ALEJANDRO VERGARA ÁVILA

PROFESOR

: SR. GASTÓN FOURNIÉS L.

.
VALPARAÍSO, NOVIEMBRE 2014

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Introducción
En este trabajo se hará una reseña en lo que respecta el problema de predespacho (Unit Commitment) o la asignación de unidades generadoras en un
periodo de corto plazo, con tal de minimizar los costos de generación de un
sistema completo. Para resolver este problema de optimización, se utiliza
programación Lineal Entera Mixta (MILP en inglés) con el Método Branch & Bound
(Ramificación y acotamiento), ya que las restricciones de este problema de
optimización son del tipo continuo, entero no negativo y/o binario). El problema a
optimizar consta de una función objetivo, la cual en este caso es la función de
costo, definido por el precio de combustibles en las unidades térmicas.
Para desarrollar el problema se utilizó el software de programación Python, el cual
necesita un intérprete, el que en este caso será el programa Eclipse. Y como Solver
del problema el programa Gurobi, el cual posee una interfaz para ejecutarla desde
Python.

19-11-2014

MOISÉS VERGARA ÁVILA

2

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Programación Lineal entera Mixta
Antes de explicar lo que es la programación lineal entera
mixta, se indicará lo que es la programación entera (PE), ya
que al conocer este método de resolución de problemas de
optimización se podrá comprender el metido de
programación lineal entera mixta

19-11-2014

MOISÉS VERGARA ÁVILA

3

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Programación Lineal entera Mixta
La programación entera es un PL (Problema de programación
lineal), en el cual algunas o todas sus variables de decisión son
enteros no negativos.
Por ejemplo
máx 𝑧 = 3𝑥1 + 2𝑥2
s.a 𝑥1 + 𝑥2 ≤ 6 𝑥
1 , 𝑥2 ≥ 0, 𝑥1 , 𝑥2 enteros

19-11-2014

MOISÉS VERGARA ÁVILA

4

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Programación Lineal entera Mixta
La relajación del PL de la PE es la programación lineal obtenida
cuando se omiten los enteros o las restricciones binarias. Con esto
se concluye que la región factible del PE se encuentra dentro de la
región factible del PL correspondiente.
Valor óptimo de z para la relajación del PL ≥ valor óptimo de z para PE

19-11-2014

MOISÉS VERGARA ÁVILA

5

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Método Branch & Bound para resolver PE
La mayor parte de los PE se resuelven en la práctica mediante la
técnica Branch & Bound. Estos métodos encuentran la solución
óptima de un PE mediante la enumeración exhaustiva de los puntos
en una región factible de un subproblema. Si se resuelve la
relajación del PL de un PE puro y obtiene una solución en la cual
todas las variables son números enteros entonces la solución óptima
para la relajación del PL es también la solución óptima del PE
El método Branch & Bound empieza con la solución de la relajación del PL del
PE. El valor óptimo que dé para el caso entero (PE), será menor o igual que la
solución óptima de la relajación del PL. Si todas las variables de decisión
asumen valores enteros en la solución óptima de la relajación del PL,
entonces la solución óptima de la relajación óptima del PL, será la solución
óptima del PE. De esto se puede concluir que el valor óptimo para una
función objetivo para la relajación del PL es un límite o acotamiento superior.
19-11-2014

MOISÉS VERGARA ÁVILA

6

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Método de Branch & Bound para PE
Un ejemplo 𝑚
á𝑥 𝑧 = 8𝑥1 + 5𝑥2
s.a 𝑥
1 + 𝑥2 ≤ 6
9𝑥1 + 5𝑥2 ≤ 45

19-11-2014

MOISÉS VERGARA ÁVILA

7

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Programación Lineal entera Mixta
Se crearían dos subproblemas a partir
del original, subproblema 2 y
subproblema 3.

Analizaremos, el subproblema 2, la
solución de la relajación óptima del PL
en ese subproblema da las siguientes
9
soluciones 𝑧 = 41,𝑥1 = 4 y 𝑥2 = 5 =
1.8. Como la solución de la variable 𝑥1
es un valor entero y la solución de 𝑥2
se aplicara el método B&B en esta
variable, creando dos nuevos
subproblemas (subproblema 4 y
subproblema 5), con las siguientes
restricciones adicionales 𝑥2 ≤ 1y 𝑥
19-11-2014
2 ≥2
MOISÉS VERGARA ÁVILA

8

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Método Branch & Bound

19-11-2014

MOISÉS VERGARA ÁVILA

9

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Programación Lineal entera Mixta

A partir del subproblema 4, se crea los
subproblemas 6 y 7 (x1<=4, x1>=5,
respectivamente)

19-11-2014

MOISÉS VERGARA ÁVILA

10

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Método Branch & Bound

19-11-2014

MOISÉS VERGARA ÁVILA

11

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Método Branch & Bound para resolver
programación Lineal Entera Mixta

Un problema de programación mixta requiere que algunas variables sean
enteros y se permite que otras sean enteros o no enteros. Para resolver un
problema de programación mixta, se modifica el método de programación
entera, para ramificar solamente sobre las variables que deban asumir
valores enteros. Para resolver un subproblema que sea una solución
probable, se requiere sólo asignar valores enteros a aquellas variables que
necesiten ser enteros.

19-11-2014

MOISÉS VERGARA ÁVILA

12

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Unit Commitment
Unit Commitment (o la selección de unidades), tiene por objeto programar
la combinación más rentable de las unidades generadoras para satisfacer los
requisitos de demanda y de reserva previstos minimizando en general los
costos de producción, tomando en cuenta las restricciones de generación y
transmisión. En general, el Unit Commitment se completa para un
horizonte temporal de un día a una semana y determina qué generadores
estarán operando y durante qué horas. Las variables a determinar son los
estados horarios de operación: ON (comitted), Off (Uncommitted), así como
las potencias asignadas a cada una de las unidades generadoras. El UC toma
en cuenta los parámetros intertemporales de cada generador (tiempo
mínimo de funcionamiento, el tiempo inicial mínimo, etc.), pero no
especifica los niveles de producción, que se determinan cinco minutos antes
de la entrega (Despacho Económico. La determinación de estos niveles se
conoce como despacho económico y es el uso de menor costo de los activos
comprometidos durante un solo periodo para satisfacer la demanda.

19-11-2014

MOISÉS VERGARA ÁVILA

13

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Definición del Problema
Función objetivo
El objetivo en la coordinación hidrotérmica es minimizar los costos de
combustible de las unidades térmicas, cumpliendo con cada una de las
restricciones de operación, transmisión y las curvas de costo futuro, las
cuales dependen del agua almacenada al final de la operación 𝐶𝑜𝑠𝑡𝑜
𝑇𝑜𝑡𝑎𝑙 𝑇

= min 𝑁𝐶𝑇 𝑡

=1 𝑇 𝑖

=1 𝑁𝐵 𝑇

𝑁𝐶𝐻 𝑡 𝐶𝑑𝑒𝑓

,𝑗 ∗ 𝑞𝑑𝑒𝑓,𝑗 𝑃𝑓𝑛𝑡

+

+ 𝐶𝑓𝑎𝑙𝑙𝑎 ∗ 𝑡
=1 𝑛=1

19-11-2014 𝑡 𝑡 𝐶𝑜𝑛

,𝑖,𝑝𝑎𝑟
∗ 𝑌𝑖𝑡 + 𝐶𝑜𝑓𝑓,𝑖
∗ 𝑍𝑖𝑡 + 𝐶𝑓𝑢𝑡𝑢𝑟𝑜 𝑦𝑡

+ 𝑡

=1 𝑗=1

MOISÉS VERGARA ÁVILA

14

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Definición del problema
Función costo futuro
El costo fututo de operación es función de los volúmenes finales de los
embalses del sistema. La costo futuro es: 𝑁𝐶𝐻
,𝐸 𝐶𝐹𝑗

𝑉𝑜𝑙𝑗𝑇 𝐶𝑓𝑢𝑡𝑢𝑟𝑜

= 𝑗
=1

Función Costo de combustible
El costo de combustible de las unidades térmicas en un periodo de
operación t se puede modelar de la siguiente forma: 𝑁𝐶𝑇 𝐶𝐶𝑖

(𝑃𝑖𝑡 ) 𝑦𝑡

= 𝑖
=1

19-11-2014

MOISÉS VERGARA ÁVILA

15

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Las restricciones es este problema de programación se pueden dividir en
dos categorías, restricciones de acoplamiento y restricciones locales

19-11-2014

MOISÉS VERGARA ÁVILA

16

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Definición del problema
La función de costos de combustible de cada unidad por lo general se
modela como una función cuadrática, siguiendo la siguiente relación: 𝐶𝐶𝑖
𝑃𝑖𝑡 = 𝑎 + 𝑏 ∗ 𝑃𝑖𝑡 + 𝑐 ∗ 𝑃𝑖𝑡

19-11-2014

MOISÉS VERGARA ÁVILA

2

17

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Función de costos
No es simple modelar una curva de costos en función de la potencia
generada. Por ejemplo las turbinas de ciclo combinado al llegar a cierto
nivel de potencia, empiezan a abrirse secuencialmente las válvulas de
admisión de vapor. Existen modelaciones lineales que al utilizar variables
del tipo entero mixto permiten representar lo mejor posible el costo de
operación asociado a una unidad térmica.
La formulación para el caso de una curva de costos corresponde a lo
siguiente: 𝑁𝑖𝑣 𝐶𝐶𝑖

= 𝐶𝐶𝑖 𝑃min 𝑖 ∗ 𝐸𝑖𝑡 + 𝑡 𝑃𝑖

,𝑘
∗ 𝑚𝑖,𝑘 ∀𝑖 ∈ 𝑁𝐶𝑇 , ∀ 𝑡 ∈ 𝑇 𝑘
=1

19-11-2014

MOISÉS VERGARA ÁVILA

18

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Por lo tanto la función costo de combustible del sistema para la hora t 𝑁𝐶𝑇 𝐶𝐶𝑖𝑡

= 𝑦𝑡

= 𝑖
=1

19-11-2014 𝑁𝐶𝑇 𝑁𝑖𝑣 𝐶𝐶𝑖

𝑃min 𝑖 ∗ 𝐸𝑖𝑡 + 𝑖
=1 𝑡 𝑃𝑖

,𝑘
∗ 𝑚𝑖,𝑘 𝑘
=1

MOISÉS VERGARA ÁVILA

19

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Potencia máxima nominal y mínimo técnico
Esta restricción es del tipo acotamiento, limita la potencia máxima y
mínima a la cual está diseñada la máquina. 𝑃𝑖𝑡
≤ 𝑃𝑚á𝑥 𝑖 ∗ 𝐸𝑖𝑡 ∀𝑖 ∈ 𝑁𝐶𝑇 , ∀ 𝑡 ∈ 𝑇 𝑃𝑖𝑡
≥ 𝑃𝑚í𝑛 𝑖 ∗ 𝐸𝑖𝑡 ∀𝑖 ∈ 𝑁𝐶𝑇 , ∀ 𝑡 ∈ 𝑇 𝐸𝑖𝑡

:
Variable binaria que indica el estado de la unidad
térmica i, en la hora t 𝑃𝑖𝑡

:
Potencia generada por la unidad i en la hora t

19-11-2014

MOISÉS VERGARA ÁVILA

20

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Número máximo de arranques.
Se desea que la máquina tenga un mínimo de arranques en el horizonte
de planificación T 𝑇 𝑌𝑖𝑡

≤ 𝑁𝐴𝑇𝑚á𝑥,𝑖 𝑡
=1

19-11-2014

MOISÉS VERGARA ÁVILA

21

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Costo de arranque
El costo de poner en marcha a una unidad térmica depende del tiempo
que ésta ha permanecido fuera de servicio. No es lo mismo poner en
funcionamiento una unidad fría que una unidad recientemente apagada,
ya que esta no necesita volver a calentarse desde la temperatura
ambiente.
La función del costo de arranque para cada hora se puede representar por
medio de la siguiente ecuación exponencial: 𝐶𝑜𝑛

𝑖 = 𝐹𝐶𝑜𝑛 𝑖 ∗ 1 −

19-11-2014 𝑇𝐹𝑆𝑖𝑡

−1
− 𝜏 𝑖 𝑒

+ 𝐶𝑜𝑛 𝑐𝑜𝑙𝑑 ∀𝑖 ∈ 𝑁𝐶𝑇 , ∀ 𝑡 ∈ 𝑇

MOISÉS VERGARA ÁVILA

22

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Térmicas
Además de esas explicadas, se cuentan con muchas más restricciones que
hacen del problema casi parecido a una programación real.
- Contador de tiempo fuera de servicio
- Contador de tiempo en servicio
- Rampas de arranque, de parada, de aumento y de disminución.
- Tiempo de estabilización de generación.
- Arranque a potencia fija
- Arranque a potencia escalonada
- Detención a potencia fija
- Detención a potencia escalonada
- Energía mínima y máxima generable
- Encendido simultaneo de unidades térmicas
- Reserva en giro para unidades térmicas

19-11-2014

MOISÉS VERGARA ÁVILA

23

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones Unidades Hidráulicas
- Centrales hidroeléctricas tipo embalse
- Centrales hidroeléctricas tipo serie
- Centrales hidroeléctricas de pasada
- Ecuación de balance caudal serie para unidades hidroeléctricas.
- Potencia máxima nominal
- Potencia a mínimo teórico
- Rampas de aumento y disminución
- Reserva en giro para unidades hidráulicas

19-11-2014

MOISÉS VERGARA ÁVILA

24

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Restricciones
Restricciones de Operación del Sistema
Restricción de balance de demanda y central de falla.
La restricción de balance de demanda se debe cumplir en cada barra.
Desde el punto de vista matemático en cada barra n se considera una
central de falla, esto permite obtener el valor de la potencia no servida en
la barra n. 𝑁𝐶𝑇 𝑁𝐶𝐻 𝑡 𝑃𝑖

,𝑛
+ 𝑖

=1

19-11-2014 𝑡 𝑃

ℎ𝑗,𝑛
− 𝑗
=1 𝑡 𝐹𝑗

,𝑘
+ 𝑃𝑓𝑛𝑡 = 𝐷𝑒𝑚𝑛𝑡 + 𝑃𝑒𝑟𝑑𝑛𝑡 ∀ 𝑡, ∀𝑛 𝑗𝑘
∈𝐿

MOISÉS VERGARA ÁVILA

25

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Pasos a seguir
Restricciones de Operación del Sistema
Formulación del problema
La formulación del problema de optimización comienza definiendo las
variables con la cual se construye la función objetivo, luego, ya con las
variables definidas se construyen las restricciones que se desean
incorporar al sistema y posteriormente se agregan las cotas inferiores o
superiores a dichas variables.
Entrada de datos
La entrada de datos se realiza mediante el software Microsoft Excel
utilizando una librería existente en Python llamada xlrd, la cual permite
realizar una lectura de los datos.

19-11-2014

MOISÉS VERGARA ÁVILA

26

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Python
Python es un lenguaje de programación creado por Guido Van Rossum a
principios de los años 90 cuyo nombre está inspirado en el grupo de
comicos ingleses "Monty Python" Se trata de un lenguaje interpretado o
de script, con tipado dinámico, fuertemente tipado, multiplataforma y
orientado a objetos
La programación orientada a objetos es un paradigma (modelo) de
programación en el que los conceptos del mundo real relevantes para
nuestro problema se trasladan a clases y objetos en nuestro programa. La
ejecución del programa consiste en una serie de interacciones entre
objetos.

19-11-2014

MOISÉS VERGARA ÁVILA

27

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Python

Existen dos formas de ejecutar Python. Una es escribiendo líneas de
código en el intérprete ,y obtener una respuesta del interprete en cada
línea o se puede escribir el código completo en un archivo de texto y
ejecutarlo.

19-11-2014

MOISÉS VERGARA ÁVILA

28

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Python

En el campo de las IDEs (Entorno de desarrollo integrado)y editores de
códigos gratuitos se destaca PyDEV. PyDEV es un plugin para eclipse que
permite utilizar este IDE multiplataforma para programa en Python.
Cuenta con múltiples funcione

19-11-2014

MOISÉS VERGARA ÁVILA

29

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Gurobi

Gurobi es un Solver de optimización para programación lineal (LP),
programación cuadrática (PQ), programación restringida cuadráticamente
(QCP), programación lineal entera mixta (MILP),programación cuadrática
entera mixta (MIQP), y programación entera mixta restringida
cuadráticamente. Es un programa de uso comercial, el cual puede ser
descargado en las dependencias de la USM con licencia educacional.
Este Solver soporta interfaces para una variedad de lenguajes de
programación y modelado.
Por ejemplo
-Interfaces orientadas a objetos como el caso de C++, Java, .NET y Python.
- Interfaces orientadas a matrices para C, MATLAB®, Y R

19-11-2014

MOISÉS VERGARA ÁVILA

30

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Gurobi

Muchas acciones en la interfaz Gurobi Python son realizadas por los
llamados métodos en objetos Gurobi. El mas comúnmente usado es el
Model. Un model consiste en un grupo de variables de decisión (objeto
de clase Var), una función objetivo lineal o cuadrático en esas variables
(Model.setObjetive) y un grupo de restricciones con esas variables
(Objetos de class Constr, Qconstr o SOS). Cada variable está asociada a un
límite inferior, límite superior y un tipo (continuo, entero, binario) Cada
restricción tiene un sentido asociado (menor, menor o igual, etc.), y al lado
derecho el valor.

19-11-2014

MOISÉS VERGARA ÁVILA

31

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

Gurobi
from gurobipy import*
# Crear nuevo modelol
m = Model("PE")
# Crear variables
x = m.addVar(vtype=GRB.INTEGER, name="x")
y = m.addVar(vtype=GRB.INTEGER, name="y")
# Integrar nuevas variables
m.update()
# Set funcion Objetivo
m.setObjective(8*x + 5*y, GRB.MAXIMIZE)
# Agrega restricciones x + y <= 6
m.addConstr(x + y <= 6, "c0")
# Add constraint: x + y >= 1
m.addConstr(9*x + 5*y <= 45, "c1")
m.optimize(MIP)
for v in m.getVars():
print v.varName, v.x
print 'Obj:', m.objVal
Obteniendo como resultado:
Optimal solution found (tolerance 1.00e-04)
Best objective 4.000000000000e+01, best bound 4.000000000000e+01, gap 0.0%
x 5.0
y 0.0
Obj: 40.0

19-11-2014

MOISÉS VERGARA ÁVILA

32

ASIGNACION DE UNIDADES UTILIZANDO LENGUAJE DE PROGRAMACION PYTHON
POR MEDIO DEL SOFTWARE ECLIPSE, OPTIMIZANDO CON SOLVER GUROBI

MUCHAS GRACIAS

19-11-2014

MOISÉS VERGARA ÁVILA

33