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

Universidad de Chile

Facultad de Ciencias Físicas y Matemáticas


Departamento de Ingeniería Matemática

Tarea 1
Problemas de optimización con el uso de Gurobi®

Integrantes: Diego Gonzalez D.


Profesores: Jorge Amaya A.
Auxiliares: Emilio Molina
Gustavo Navarro P.
Fecha de entrega: 7 de mayo de 2018
Santiago, Chile
Índice de Contenidos i

Índice de Contenidos
1. Introducción 1

2. Resolución de problemas 2
2.1. Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.1. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.3. Función Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.4. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Pregunta 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1. Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3. Función objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.4. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3. Anexo 12

Lista de Figuras
1 Datos entregados por el software gurobi . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Datos entregados por el software, para 1000Hrs. . . . . . . . . . . . . . . . . . . . . 5
3 Múltiples resultados dado distinto mínimo en Ha en ”Rent” 1-20Ha . . . . . . . . . 6
4 Múltiples resultados dado distinto mínimo en Ha en ”Rent” 45-75Ha . . . . . . . . . 6

Lista de Tablas
1 Variables: Pregunta 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Valores optimización granjero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Equipos sorteados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4 Equipos clasificados Mundial 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Grupos mundial 2018 con ranking FIFA . . . . . . . . . . . . . . . . . . . . . . . . . 10
6 Grupos mundial 2018 con ranking relativo . . . . . . . . . . . . . . . . . . . . . . . . 10
7 Grupos considerando ranking FIFA Sin restricciones de pot . . . . . . . . . . . . . . 11

Lista de Códigos
1. Pregunta 1 (Python-Gurobi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2. Pregunta 2 (Python-Gurobi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Tarea 1 MA3701-2 Optimización


Introducción 1

1. Introducción
En el presente texto se expondrá varios problemas de decisión/optimización, que se resolverán
mediante el uso algoritmos matemáticos para su resolución. Para esto se usará el software Gurobi®
, que será el encargado de recibir las variables y restricciones dadas por el usuario para entregar la
solución optima del problema.

Además se verá la resolución de estos mismos a través de su relación con la matemática aplicada.

Tarea 1 MA3701-2 Optimización


Resolución de problemas 2

2. Resolución de problemas
2.1. Problema 1
El problema 1 consiste en en optimizar como un granjero debe racionar y administrar sus tierras
para tener un mayor beneficio.

De una forma mas precisa el señor debe considerar que porción de sus tierras (100 Ha), deberá
usar para el cultivo de maíz o trigo; y que animales(cerdos y aves) decide criar en un espacio de
10.000 m2 , donde se decidirá respecto a sus limitaciones.
Donde cada maíz y trigo, tiene su precio y costo respectivo al igual que la crianza de animales.

Así que, se resolverá que es lo adecuado para el granjero, para obtener la relación perfecta de
tierra. Y cual será su beneficio máximo respecto a las utilidades.

Primero se crean las variables para su próxima inclusión

2.1.1. Variables

Tabla 1: Variables: Pregunta 1


Cultivos (Trigo) Cultivos (Maíz) Animales Horas (anuales)
Tc: Trigo comprado Mc: Maíz comprado Cerdos HrC: Horas contratadas
Tp: Trigo producido Mp: Maíz producido Pollo eq. HrF: Horas familia
Tv: Trigo vendido Mv: Maíz vendido HrGS: Horas granjero para supervision
Tpig: Trigo para cerdos Mpig: Maíz para cerdos HrGP: Horas granjero para producción
Ta: Trigo para aves Ma: Maíz para aves HrProd: Horas de producción

Donde se tomará como supuesto que no hay maíz ni trigo libre, es decir,todo se vende o es
para los animales, Además que los granos que se producen se pueden usar para los animales. Esto
implica que:
T c + T p = T v + T pig + T a (1)
M c + M p = M v + M pig + M a (2)
También, por definición se dice que el total de horas de producción, es la suma de las horas
propuestas de cada uno, es decir:

HrP rod = HrGP + HrF + HrC (3)

Además estas variables están sujetas a restricciones, ya que el terreno es finito al igual que los
insumos y horas, entonces.

Tarea 1 MA3701-2 Optimización


Resolución de problemas 3

2.1.2. Restricciones
Iniciando, dado a que el terreno de cultivo es finito (100 Ha). Donde el rendimiento por hectárea
es de 60 y 95 quintales, para trigo y maíz respectivamente, tenemos que:
h i h i
 
Tp 
quintales

 Mp 
quintales


i + ≤ 100 Ha (4)
 
h h i
60  
quintales 
quintales
95 
Ha Ha

Los cerdos necesitan alimentarse con 25 quintales de trigo o 20 quintales de maíz (o combinación)
para poder crecer, entonces:
h i h i
 
T pig 
quintales
 M pig 
quintales

h i + h i = Cerdos (5)
quintales quintales
25  
cerdo 20  
cerdo

Análogo para los pollos equivalentes:


Ta Ma
+ = P ollos eq (6)
10 25

Además el terreno para la crianza es de 10.000 m2 , donde cada cerdo usa 25m2 y pollo equivalente
15m2 , dando:
25 ∗ cerdos + 15 ∗ pollo_eq ≤ 10000 m2 (7)
 

Ahora respecto a las limitaciones de horas, tenemos que:

El granjero tiene un tiempo máximo de 2000 hrs. anuales para trabajar, además puede emplear a
su familia, disponiendo de 2000 horas adicionales.

HrGP + HrGS ≤ 2000 hrs (8)


 

HrF ≤ 2000 hrs (9)


 

También puede contratar personal extra por $150 la hora, pero requiere su supervisión, que corres-
ponde a 0.15 Hrs por hora contratada, es decir.

HrGS = 0,15 ∗ HrC (10)

Y por ultimo tenemos que ingresar el tiempo que se necesita para la producción tanto de trigo y
maíz, como para la crianza de animales.
Tp Mp
HrP rod = 4 +4 + 0,15T p + 0,7M p + 25Cerdos + 40P olloEq (11)
60 95
Donde se incluyó las 4 horas que se necesitan por Hectárea, el tiempo por quintal de trigo y maíz,
0.15 y 0.7 respectivamente. Además de las horas por crianza de cerdos y pollos equivalentes, 25 y
40 horas respectivamente.

Tarea 1 MA3701-2 Optimización


Resolución de problemas 4

Ahora bien, ya que se tiene las restricciones, se debe dar paso a la función objetivo.

2.1.3. Función Objetivo


Dado a que en este problema se busca maximizar las utilidades (Ventas - Costos) del granjero,
usando los precios de mercado de los productos e insumos, tenemos lo siguiente.

Fobj = 175T v+95M v+4000cerdos+4000P olloEq−250T c−150M c−20T p−12M p−150HrC (12)

2.1.4. Implementación
Para su implementación se usa el software Gurobi® con lenguaje de Python, para buscar el
punto optimo de la función objetivo. Se ejecuta el Código de la pregunta 1 (Ver anexo).

Donde las variables:

HrF, HrGP, HrGS ∈ R+


La variable HrC pertenece a Z+ , ya que el obrero no va a trabajar por periodos de tiempo menores
a 1 ni trabajos que involucren una fracción de tiempo. Los animales (cerdos y pollos eq) ∈ Z+ .
Y por ultimo los granos (trigos y maíz) serán ∈ R+ , debido a que corresponden a unidades de
quintales, que es equivalente a 100 kilos, y se asume que se puede vender o producir fracción de
esta.

Provocando cuando se ejecuta el Código 1, los siguientes resultados:

Figura 1: Datos entregados por el software gurobi

Extrapolando los resultados a una tabla, se tiene:

Tarea 1 MA3701-2 Optimización


Resolución de problemas 5

Tabla 2: Valores optimización granjero


Variables Valor
Nº Cerdos 2
Nº Pollos eq 66
Horas Familia 2000
Horas Granjero 2000
Horas supervisión 0
Trigo producido 5989.5652
Trigo vendido 5329.5652
Trigo comprado 0
Trigo pollo 660
Trigo cerdo 0
Maíz producido 16.5217
Maíz vendido 0
Maíz comprado 23.4782
Maíz pollo 0
Maíz cerdo 40

M áx Fobj = U tilidad = 1081162,60869$


Con esto se obtiene, lo que el granjero debe producir sus tierras para obtener la máxima utili-
dad posible, con 998.260m2 para trigo y 1739m2 de maíz aproximadamente de las 100Ha y de los
10.000m2 para la crianza de animales, 990m2 para pollos y 50m2 para cerdos.

Ahora bien, si se bajan las horas de trabajo anuales del granjero a 1000Hrs. el punto
óptimo que entrega el problema es:

Figura 2: Datos entregados por el software, para 1000Hrs.

Dando una utilidad de 1024912.6086$ con 1000 horas anuales de trabajo menos del granjero.
Esto produce que se baje el numero de pollos criados desde 66 a 41, siendo esta baja correspondiente
a 1000 hrs. ya que cada pollo equivalente requiere 40 hrs, entonces 25*40=1000 hrs. Es decir los
valores de las otras variables se mantiene igual, solo aumenta los quintales de trigo vendido debido

Tarea 1 MA3701-2 Optimización


Resolución de problemas 6

a que se baja el consumo de trigo por parte de los pollos, y es mas conveniente vender el excedente.

Luego el granjero tiene la opción de arrendar parte de su terreno a un vecino, para esto
se agrega la variable rent que corresponde a las hectáreas que puede arrendar y la variable precio
que es el Valor por Ha, al agregarlo a la función objetivo y a las restricciones entrega los siguientes
valores:

(a) Mi- (b) Mi- (c) Mi-


nimo nimo nimo
1Ha 10Ha 20Ha

Figura 3: Múltiples resultados dado distinto mínimo en Ha en ”Rent” 1-


20Ha

(a) Mi- (b) Mi- (c) Mi-


nimo nimo nimo
45Ha 50Ha 75Ha

Figura 4: Múltiples resultados dado distinto mínimo en Ha en ”Rent” 45-


75Ha

Como se aprecia en la figura a distintos mínimos aplicados a la variable rent, dado el uso de
lb(lower bound), se obtienen diferentes precios por Ha para que sea conveniente arrendar.

Pero generalizando, que el granjero debe arrendar como mínimo una Ha, se obtiene que le con-
viene arrendar 1 Ha por el precio de 8184$ como mínimo para que obtenga mayor utilidades.

NOTA: El proceso para que se obtenga el precio para cada lower bound distin-
to, se hace mediante una iteración mediante un for con rango de 1 a 100

Tarea 1 MA3701-2 Optimización


Resolución de problemas 7

2.2. Pregunta 2
Dado a las varias faltas de transparencia en torno a la FIFA, especialmente en los sorteos de la
copa del mundo, se hará un programa que entregue la combinación optima, para que los grupos en
disputa este equilibrados.

2.2.1. Parte 1
En este caso se desarrollará una heurística que permite encontrar una asignación de grupos que
cumpla con las restricciones del sorteo.

Dado a los equipos que se presentan a continuación (tabla 3), se crea un proceso que pueda orde-
narlos en grupos que cumplan las siguientes restricciones:

1. Cada uno de los grupos debe contener 4 equipos.

2. Solo puede haber un equipo por confederación, exceptuando a la UEFA.

3. No puede haber más de dos equipos de la UEFA por grupo.

4. Cada grupo esta compuesto por un equipo de cada pot.

Tabla 3: Equipos sorteados


Equipo Confederación Ranking
A Organizador 65
B UEFA 8
C CONMEBOL 10
D CONMEBOL 2
E UEFA 7
F CAF 42
G CONMEBOL 17
H UEFA 11
I AFC 44

Entonces se crean los pot’s de la siguiente manera. El pot 1 contiene el equipo organizador +
los de mejor ranking, el pot 2 los siguientes 3 equipos de mejor ranking, y el pot 3 los restantes.

Luego se insertan en los grupos los equipos del pot 1, uno en cada grupo, después se toma el mejor
equipo(menor ranking) del pot 2 y se ingresa el grupo que contenga la mayor suma, si cumple que
el grupo no contenga un equipo de su confederación(exceptuando un equipo de la UEFA(máximo
2)), si cumple con esta restricción se ingresa finalmente al grupo.

Después se usa el equipo que lo precede para ingresarlo en uno de los dos grupos que quedan
usando el mismo criterio y así se obtiene los 3 grupos cumpliendo las restricciones.

Tarea 1 MA3701-2 Optimización


Resolución de problemas 8

Entonces siguiendo este procedimiento, tenemos que:


Se dividen en tres grupos los equipos A,D,E → (A,X,X) ; (D,X,X) ; (E,X,X), luego se revisa el
mejor del pot 2, en este caso corresponde al equipo B (UEFA). Este equipo se ingresa al grupo con
mayor suma de ranking, siempre y cuanso cumpla con las restricciones mencionadas anteriormen-
te. Entonces queda de la siguiente manera: (A,B,X) ; (D,X,X) ; (E,X,X). Análogamente para los
siguientes equipos
1. Ingresa equipo C → (A,B,X) ; (D,X,X) ; (E,C,X)

2. Ingresa equipo H → (A,B,X) ; (D,H,X) ; (E,C,X)

3. Ingresa equipo G → (A,B,G) ; (D,H,X) ; (E,C,X)

4. Ingresa equipo F → (A,B,G) ; (D,H,F) ; (E,C,X)

5. Ingresa equipo I → (A,B,G) ; (D,H,F) ; (E,C,I)


Quedando finalmente los grupos y suma: (A,B,G)=90 ; (D,H,F)=55 ; (E,C,I)=61

2.3. Parte 2
En esta parte se intentará corregir el desbalance en la formación de grupos en el sorteo de la
copa del mundo de la FIFA, para esto usaremos al igual que al inicio, el software Gurobi con python
de lenguaje.

Como se tiene los equipos clasificados (Tabla 4) para el mundial, con su respectivo ranking, mode-
lamos este problema creando las siguientes variables y restricciones.

Tabla 4: Equipos clasificados Mundial 2018


POT 1 POT 2 POT 3 POT 4
Rusia (65) España (8) Dinamarca (19) Serbia (38)
Alemania (1) Perú (10) Islandia (21) Nigeria (41)
Brasil (2) Suiza (11) Costa Rica (22) Australia (43)
Portugal(3) Inglaterra (12) Suecia (25) Japón (44)
Argentina(4) Colombia (13) Túnez (28) Marruecos (48)
Bélgica (5) Mexico (16) Egipto (30) Panamá (49)
Polonia (6) Uruguay (17) Senegal (32) Corea del Sur (62)
Francia( 7) Croacia (18) Irán (34) Arabia Saudita (63)

2.3.1. Variables
Conjuntos
E: Equipos

G: Grupos

P: Pot’s

C: Confederación

Tarea 1 MA3701-2 Optimización


Resolución de problemas 9

Luego se crea las variables.

Variables
1 si el equipo i es puesto en el grupo g (i ∈ E, g ∈ G)
(
Ni,g =
0 si no

Dmin = Menor suma de los rankings de los equipos en un grupo

Dmax = Menor suma de los rankings de los equipos en un grupo

Con los parámetros:

Ranking:Ranking FIFA del equipo i (i ∈ E)

Rkg_Rel:Ranking relativo del equipo i (i ∈ E)

M axc =Máximo equipos por confederación c (c ∈ C)

2.3.2. Restricciones
Dado a que el sorteo de la copa del mundo de la FIFA, esta condicionado a algunas reglas (ver
pág. 6) que se deben cumplir, se crean las siguientes restricciones:

Todo equipo i sea asignado a algún grupo g

Nig = 1 (13)
X
∀i ∈ E
g∈G

Cada grupo contiene 4 equipos

Nig = 4 (14)
X
∀g ∈ G
i∈E

Existe un máximo de equipos por confederación en un mismo grupo

(15)
X
Nig ≤ M axc ∀g ∈ G
i∈C

Cada pot aporta con un equipo a un grupo

Nig = 1 (16)
X
∀g ∈ G
i∈P

Tarea 1 MA3701-2 Optimización


Resolución de problemas 10

Dado a como definimos Dmax y Dmin . Esto ayuda a calcular la suma mínima y máxima de
cada grupo
(17)
X
Dmin ≤ Ranking[i] ∗ Nig ∀g ∈ G
i∈E

(18)
X
Dmax ≥ Ranking[i] ∗ Nig ∀g ∈ G
i∈E

NOTA:Según sea el caso del ranking elegido, solo se debe cambiar en la ec. (17) y
(18)

2.3.3. Función objetivo


Para obtener una buena distribución de los equipos, se busca minimizar la siguiente ecuación:

Fobj = Dmax − Dmin (19)

2.3.4. Implementación
Para obtener una buena relación de grupos,se utiliza el software Gurobi mediante un código(Ver
anexo) escrito en python.

En este caso, se utilizará el ranking de la FIFA, y el ranking relativo según los clasificados.
Ejecutando el código, nos entrega los siguientes grupos, que fueron extrapolados en una tabla:

Tabla 5: Grupos mundial 2018 con ranking FIFA


GRUPO A GRUPO B GRUPO C GRUPO D GRUPO E GRUPO F GRUPO G GRUPO H
RUSIA ALEMANIA BRASIL PORTUGAL ARGENTINA BELGICA POLONIA FRANCIA
PERÚ SUIZA ESPAÑA MEXICO CROACIA COLOMBIA URUGUAY INGLATERRA
DINAMARCA COSTA RICA ISLANDIA IRAN SUECIA TÚNEZ EGIPTO SENEGAL
SERBIA COREA DEL SUR ARABIA SAUDITA NIGERIA MARRUECOS PANAMA AUSTRALIA JAPON
132 96 94 94 95 95 96 95

Tabla 6: Grupos mundial 2018 con ranking relativo


GRUPO A GRUPO B GRUPO C GRUPO D GRUPO E GRUPO F GRUPO G GRUPO H
RUSIA ALEMANIA BRASIL PORTUGAL ARGENTINA BELGICA POLONIA FRANCIA
INGLATERRA URUGUAY CROACIA PERÚ SUIZA MÉXICO ESPAÑA COLOMBIA
SENEGAL IRAN SUECIA TÚNEZ ISLANDIA DINAMARCA EGIPTO COSTA RICA
PANAMA SERBIA AUSTRALIA COREA DEL SUR ARABIA SAUDITA MARRUECOS JAPON NIGERIA
66 66 66 66 66 66 66 66

La gran diferencia(132−84 = 38) de la tabla 5, es debido a que los equipos clasificados no fueron
los mejores(según el ranking), es decir, que existe una gran diferencia en algunos equipos clasifi-
cados, ya que se inferir que hubo equipos intermedios que no clasificaron, y más las restricciones
que se deben cumplir, esta diferencia aumenta, ya que descarta algunas posibilidades de equipos
en algunos grupos.
Pero aunque este valor es grande, es la menor diferencia posible, es decir, es la mejor conformación
de grupos posible, tomando el ranking FIFA como referencia.

Y en el caso de la tabla 6, donde el ranking es tomado con solo los equipos clasificados, es de-
cir cada equipo le corresponde un lugar del 1 al 32, con el ranking de Rusia 1, Alemania 2, Brasil 3,

Tarea 1 MA3701-2 Optimización


Resolución de problemas 11

32 
X
etc. Entonces para que los grupos estén equilibrados, se debe cumplir que i /8 = 66, lo cual
i=1
se cumple a pesar de estar sujeto a restricciones, provocando que el valor de la función objetivo sea 0.

Además esta relación de grupos optima no es única(tabla 5), ya que se pueden generar las misma
diferencia mínima con distinto equipos distribuidos en los grupos, ya que se pueden hacer la misma
suma de los grupos con distintas relacionas.
De una mirada mas matemática, la variable principal Nig que corresponde a una variable binaria,
produce varias soluciones optimas dado el poliedro que genera y su forma, además con el tema del
ranking, se tiene que equipo intermedios no clasificaron, generando que se produzca combinaciones
de equipos inferiores o menores para que igualen la suma máxima y mínima de los grupos.

Pero proponiendo una mejor manera de crear los grupos. Se considera que no existan 4 pot’s,
es decir, que exista solo 1 pot que contenga a todos los equipos clasificados para su próxima dis-
tribución, además se mantiene las restricción del máximo de equipos por confederación, ya que no
sería un buen espectáculo ver equipos de la misma confederación en un grupo, debido a que sería
igual a partidos de eliminatoria o Copas de confederación.
Entonces los grupos con la nueva forma de serían:

Tabla 7: Grupos considerando ranking FIFA Sin restricciones de pot


GRUPO A GRUPO B GRUPO C GRUPO D GRUPO E GRUPO F GRUPO G GRUPO H
RUSIA POLONIA PORTUGAL INGLATERRA FRANCIA PERU BRASIL ALEMANIA
BELGICA COLOMBIA ARGENTINA MEXICO SUIZA ISLANDIA DINAMARCA URUGUAY
ESPAÑA CROACIA EGIPTO TUNEZ IRAN AUSTRALIA SERBIA SENEGAL
COSTA RICA ARABIA SAUDITA COREA DEL SUR JAPON MARRUECOS SUECIA NIGERIA PANAMA
100 100 99 100 100 99 100 99

Esto se genera eliminando la ecuacion 16.

Tarea 1 MA3701-2 Optimización


Anexo 12

3. Anexo
Código 1: Pregunta 1 (Python-Gurobi)
1 from gurobipy import *
2
3 m=Model("Granjero")
4
5 ###########DICCIONARIOS###########
6
7 T={} #Trigo
8 M={} #Maiz
9
10 ###########VARIABLES###########
11
12 for i in range(5):
13 M[i]=m.addVar(vtype="C",lb=0,name=’M %d’ %i)
14
15 for i in range(5):
16 T[i]=m.addVar(vtype="C",lb=0,name=’T %d’ %i) #se usa el name
17
18 #T0=Trigo comprado M0=Maiz comprado
19 #T1=Trigo producido M1=Maiz producido
20 #T2=Trigo vendido M2=Maiz vendido
21 #T3=Trigo cerdo M3=Maiz cerdo
22 #T4=Trigo aves M4=Maiz aves
23
24
25 cerdos=m.addVar(vtype="I",lb=0,name=’cerdos’)
26 pollo_eq=m.addVar(vtype="I",lb=0,name=’pollo_eq’)
27 Hr_C=m.addVar(vtype="I",lb=0,name=’Hr_C’)#Horas contratadas
28 Hr_F=m.addVar(vtype="C",lb=0,name=’Hr_F’)#Horas familia
29 Hr_GP=m.addVar(vtype="C",lb=0,name=’Hr_GP’)#Horas granjero produccion
30 Hr_GS=m.addVar(vtype="C",lb=0,name=’Hr_GS’)#Horas granjero supervision
31 Hr_Produccion=m.addVar(vtype="C",lb=0,name=’Hr_Produccion’)#Horas totales produccion
32
33 #rent=m.addVar(vtype="I",lb=1,ub=100,name=’arriendo’) #Variable rent para parte de
arriendo
34
35
36 m.update() #Actualizar variables
37
38 ###########RESTRICCIONES###########
39
40
41 #Cultivo
42 m.addConstr(T[0]+T[1]==T[2]+T[3]+T[4],name="Trigo")#Todo el trigo se usa
43 m.addConstr(M[0]+M[1]==M[2]+M[3]+M[4],name="Maiz")#Todo el maiz se usa
44
45 m.addConstr((T[1]/60)+(M[1]/95)<=100,name="Terreno cultivo")
46

Tarea 1 MA3701-2 Optimización


Anexo 13

47 #Crianza
48 m.addConstr(((T[3]/25)+(M[3]/20))==cerdos,name="ec. de cerdos")
49 m.addConstr(((T[4]/10)+(M[4]/25))==pollo_eq,name="ec. de pollos eq")
50
51 m.addConstr((25*cerdos)+(15*pollo_eq)<=10000,name="terreno crianza")
52
53 #Horas
54 m.addConstr(Hr_Produccion==Hr_GP+Hr_C+Hr_F,name="Horas de produccion")
55 m.addConstr(0.15*Hr_C==Hr_GS,name="Horas de supervision del granjero")
56
57 m.addConstr(Hr_GP+Hr_GS<=2000,name="Horas granjero")
58 m.addConstr(Hr_F<=2000,name="Horas familia")
59
60 m.addConstr(Hr_Produccion==4*(T[1]/60) + 4*(M[1]/95) + (T[1]*0.15) + (M[1]*0.7) + (25*
cerdos) + (40*pollo_eq),name="Horas de producciones")
61
62
63
64 ###########OBJETIVO###########
65

66 m.setObjective((175*T[2]) + (95*M[2]) + (4000*cerdos) + (4000*pollo_eq) - (250*T[0]) -


(150*M[0]) - (150*Hr_C) - (20*T[1]) - (12*M[1]),GRB.MAXIMIZE)
67 #En caso de la parte de arriendo se agrega + rent*precio
68
69 m.optimize()
70

71 print(’ Valor’,m.Objval)
72 print(’ Horas produccion’,Hr_Produccion.X)
73 print(’ Horas Granjero produccion’,Hr_GP.X)
74 print(’ Horas Granjero supervision’,Hr_GS.X)
75
76

77 print(’ Horas Contrato’,Hr_C.X)


78
79
80 print(’ Cerdos’,cerdos.X)
81 print(’ pollo’,pollo_eq.X)
82
83 print(’ Horas familia’,Hr_F.X)
84 print(’ Trigo comprado’,T[0].X)
85 print(’ Maiz comprado’,M[0].X)
86
87

88 print(’ Trigo producido’,T[1].X)


89 print(’ Maiz producido’,M[1].X)
90
91
92 print(’ Trigo vendido’,T[2].X)
93 print(’ Maiz vendido’,M[2].X)
94
95 print(’ Trigo cerdo’,T[3].X)
96 print(’ Maiz cerdo’,M[3].X)

Tarea 1 MA3701-2 Optimización


Anexo 14

97
98 print(’ Trigo pollo’,T[4].X)

Código 2: Pregunta 2 (Python-Gurobi)


1
2 from gurobipy import *
3
4 m=Model("Mundial")
5

6 ##############VARIABLES##############
7
8 Dmin=m.addVar(vtype="I",lb=0,name=’Wmin’)
9 Dmax=m.addVar(vtype="I",lb=0,name=’Wmax’)
10
11 N=m.addVars(32,8,vtype="B",name=’Matriz de equipos’)
12
13 #Parametros
14 Ranking={0: 65, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 10, 10: 11, 11: 12,
12: 13, 13: 16, 14: 17, 15: 18, 16: 19, 17: 21, 18: 22, 19: 25, 20: 28, 21: 30, 22:
32, 23: 34, 24: 38, 25: 41, 26: 43, 27: 44, 28: 48, 29: 49, 30: 62, 31: 63}
15

16 Rkg_rel={0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10, 10: 11, 11: 12, 12:


13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 20: 21, 21: 22, 22: 23,
23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 30: 31, 31: 32}
17
18 Equipos={0:’RUSIA’,1:’ALEMANIA’,2:’BRASIL’,3:’PORTUGAL’,4:’ARGENTINA’,5:’BELGICA’,6:’
POLONIA’,7:’FRANCIA’,8:’ESPANA’,9:’PERU’,10:’SUIZA’,11:’INGLATERRRA’,12:’COLOMBIA’
,13:’MEXICO’,14:’URUGUAY’,15:’CROACIA’,16:’DINAMARCA’,17:’ISLANDIA’,18:’COSTA RICA’
,19:’SUECIA’,20:’TUNEZ’,21:’EGIPTO’,22:’SENEGAL’,23:’IRAN’,24:’SERBIA’,25:’NIGERIA’
,26:’AUSTRALIA’,27:’JAPON’,28:’MARRUECOS’,29:’PANAMA’,30:’COREA DEL SUR’,31:’ARABIA
SAUDITA’}
19 grupos=[’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’]
20

21 #Confederaciones
22 UEFA=[1,3,5,6,7,8,10,11,15,16,17,19,24]
23 Conmebol=[2,4,9,12,14]
24 Concacaf=[13,18,29]
25 Afc=[23,26,27,30,31]
26 Caf=[20,21,22,25,28]
27 organizador=[0]
28
29 #Pots
30 p1=[0,1,2,3,4,5,6,7]
31 p2=[8,9,10,11,12,13,14,15]
32 p3=[16,17,18,19,20,21,22,23]
33 p4=[24,25,26,27,28,29,30,31]
34
35 m.update()
36
37 ############RESTRICCIONES############
38

Tarea 1 MA3701-2 Optimización


Anexo 15

39 #Ecuacion (13)
40 for i in range(32):
41 m.addConstr(quicksum(N[i,g] for g in range(8))==1)
42
43 #Ecuacion (14)
44 for g in range(8):
45 m.addConstr(quicksum(N[i,g] for i in range(32))==4)
46

47 #Ecuacion (16)
48 for g in range(8):
49 m.addConstr(quicksum(N[i,g] for i in p1)==1)
50 m.addConstr(quicksum(N[i,g] for i in p2)==1)
51 m.addConstr(quicksum(N[i,g] for i in p3)==1)
52 m.addConstr(quicksum(N[i,g] for i in p4)==1)
53
54 #Ecuacion (15)
55 for g in range(8):
56 m.addConstr(quicksum(N[i,g] for i in UEFA)<=2)
57 m.addConstr(quicksum(N[i,g] for i in Conmebol)<=1)
58 m.addConstr(quicksum(N[i,g] for i in Concacaf)<=1)
59 m.addConstr(quicksum(N[i,g] for i in Afc)<=1)
60 m.addConstr(quicksum(N[i,g] for i in Caf)<=1)
61 m.addConstr(quicksum(N[i,g] for i in organizador)<=1)
62
63 #Ecuacion (17)
64 for g in range(8):
65 m.addConstr(Dmin<=quicksum(Ranking[i]*N[i,g] for i in range(32)))
66
67 #Ecuacion (18)
68 for g in range(8):
69 m.addConstr(Dmax>=quicksum(Ranking[i]*N[i,g] for i in range(32)))
70

71 ##########FUNCION OBJETIVO##########
72
73
74 m.setObjective(Dmax-Dmin,GRB.MINIMIZE)
75

76 m.optimize()
77
78 print(’DIFERENCIA MAXIMA ’,m.Objval)
79 #Imprimir grupos
80 for g in range(8):
81 n=0
82 print(grupos[g])
83 for i in range(32):
84 if(N[i,g].X==1):
85 print(Equipos[i]+’\t\t’)
86 n=n+Ranking[i]
87 print()
88 print(’SUMA ’,grupos[g],’=’,n)
89 print()

Tarea 1 MA3701-2 Optimización

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