Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Python - Gurobi
Parte 1. Estructura básica de un modelo en Python-Gurobi
from gurobipy import GRB, Model
from gurobipy import quicksum #para las sumatorias
model = Model()
model.setParam("TimeLimit", 60) #Establece el tiempo máximo en segundos
model.update()
# Tiempo ejecución:
tiempo_ejecucion = model.Runtime
# Valor objetivo:
valor_objetivo = model.ObjVal
# Solucion para una variable que no depende de conjuntos:
print(f"La variable x toma el valor de {x.x}")
# Solucion para variables que dependen de conjuntos:
for t in T:
print(f"Para t = {t} la variable y toma el valor de {y[t].x}")
# Mostrar los valores de todas las soluciones que no son cero
model.printAttr("X")
1 Optimize a model with 784 rows, 272 columns and 2100 nonzeros
2 Model fingerprint: 0x7d7514fd
3 Variable types: 16 continuous, 256 integer (256 binary)
4 Coefficient statistics:
5 Matrix range [1e+00, 2e+01]
6 Objective range [5e+01, 3e+03]
7 Bounds range [1e+00, 1e+00]
8 RHS range [1e+00, 2e+01]
9 Found heuristic solution: objective 14755.000000
10 Presolve removed 542 rows and 17 columns
11 Presolve time: 0.01s
12 Presolved: 242 rows, 255 columns, 2228 nonzeros
13 Variable types: 15 continuous, 240 integer (240 binary)
14
15 Root relaxation: objective 5.669972e+03, 53 iterations, 0.00 seconds (0.00 work units)
16
46 Cutting planes:
47 Learned: 6
48 Gomory: 4
49 Cover: 5
50 Implied bound: 9
51 Projected implied bound: 1
52 MIR: 2
53 Flow cover: 59
54 Inf proof: 5
55 Relax-and-lift: 1
56
57 Explored 6549 nodes (43980 simplex iterations) in 2.13 seconds (1.35 work units)
58 Thread count was 1 (of 8 available processors)
59
⋄ Fila 1: Se menciona que el modelo tiene 784 filas, 272 columnas y 2100 elementos no nulos.
⋄ Fila 3: Los tipos de variables en el modelo son 16 continuas y 256 enteras, de las cuales 256 son binarias.
⋄ Fila 10-13: Por defecto Gurobi hace un presolve primero. Su objetivo es realizar transformaciones en el
modelo original para simplificarlo y reducir su tamaño antes de ser resuelto por el algoritmo de Branch
and Bound.
⋄ Fila 15: La relajación inicial del modelo (root relaxation) resultó en un valor objetivo de 5.669972e+03
después de 53 iteraciones del algoritmo simplex. Esta relajación proporciona una estimación inicial del
valor óptimo del modelo.
⋄ Filas 17 a 44:
• La tabla proporciona información detallada sobre el progreso del algoritmo Branch and Bound
durante la resolución del problema, incluyendo información sobre nodos explorados, valores de
objetivo, lı́mites y mejor incumbente. Esta información es esencial para monitorear y evaluar el
rendimiento del algoritmo y comprender el proceso de búsqueda utilizado para encontrar la solución
óptima.
• La columna ”Nodes” indica el número de nodos explorados durante el proceso de búsqueda del
algoritmo Branch and Bound. En este caso, se exploraron un total de 6549 nodos.
• La columna ”Gap” indica el gap relativo entre el mejor incumbente y la mejor cota actual infe-
rior/superior para problemas de minimización/maximización. Mide la diferencia porcentual entre
estos dos valores y proporciona una indicación de cuánto se ha progresado en la búsqueda de la
solución óptima.
• La columna ”Incumbent” representa el valor del mejor incumbente o mejor solución encontrada
hasta el momento. A medida que el algoritmo encuentra soluciones mejores, este valor puede ir
mejorando. La ”H” que aparece en algunas filas, corresponde a la obtención de un mejor incumbente
vı́a una heurı́stica y ”*” lo es vı́a branching.
• La columna ”BestBd” muestra la mejor cota inferior/superior del valor objetivo en el nodo actual.
Se utiliza para realizar podas y reducir el espacio de búsqueda.
⋄ Fila 46 a la 55: ”Cutting planes” se refiere a los diferentes tipos de planos de corte utilizados durante
la resolución del modelo para mejorar la relajación lineal inicial y obtener soluciones enteras. Los tipos
de planos de corte incluyen Learned, Gomory, Cover, Implied bound, Projected implied bound, MIR
(Mixed Integer Rounding), Flow cover, Inf proof (proof of infeasibility), y Relax-and-lift.
⋄ Fila 57: ”Explored” indica el número de nodos explorados durante la búsqueda del árbol de ramificación
y acotamiento.
⋄ Fila 60: ”Solution count” muestra el número de soluciones encontradas durante el proceso de optimiza-
ción.
⋄ Fila 62: ”Optimal solution found” indica que se ha encontrado una solución óptima para el modelo.
⋄ Fila 63: ”Best objective” muestra el valor de la función objetivo en la mejor solución encontrada. ”Best
bound” es una cota inferior para la función objetivo en el modelo. Si la brecha (gap) es cero, significa
que la mejor solución encontrada es óptima.