You are on page 1of 2

!

pip install ortools

Collecting ortools
Downloading ortools-9.0.9048-cp37-cp37m-manylinux1_x86_64.whl (14.4 MB)
|████████████████████████████████| 14.4 MB 85 kB/s
Requirement already satisfied: absl-py>=0.11 in /usr/local/lib/python3.7/dist-pac
Requirement already satisfied: protobuf>=3.15.8 in /usr/local/lib/python3.7/dist-
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from
Installing collected packages: ortools
Successfully installed ortools-9.0.9048

# Importar la librería de Google OR-Tools
from __future__ import print_function
from ortools.graph import pywrapgraph

nodos_fuente  = [ 0, 0, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6]
nodos_destino = [ 1, 2, 3, 6, 7, 3, 4, 6, 2, 5, 4, 6, 7]
capacidades   = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
distancia     = [ 599, 180, 497, 420, 691, 432, 100, 345, 100, 138, 138, 526, 440]
 
suministros = [1, 0, 0, 0, 0, 0, 0, -1]

# Crea una instancia para el solucionador
min_cost_flow = pywrapgraph.SimpleMinCostFlow()
 
# Define cada arco del problema
for i in range(0, len(nodos_fuente)):
  min_cost_flow.AddArcWithCapacityAndUnitCost(nodos_fuente[i], nodos_destino[i],
                                              capacidades[i], distancia[i])
 
# Define los suministros para cada nodo.
for i in range(0, len(suministros)):
  min_cost_flow.SetNodeSupply(i, suministros[i])
 
# Encuentra el costo mínimo entre el nodo 0 y el nodo 8
if min_cost_flow.Solve() == min_cost_flow.OPTIMAL:
  print('Distancia mínima:', min_cost_flow.OptimalCost())
  print('')
  print(' Arco Flujo / Capacidad Distancia')
  for i in range(min_cost_flow.NumArcs()):
    cost = min_cost_flow.Flow(i) * min_cost_flow.UnitCost(i)
    print('%1s -> %1s %3s / %3s %3s' % (
        min_cost_flow.Tail(i),
        min_cost_flow.Head(i),
        min_cost_flow.Flow(i),
        min_cost_flow.Capacity(i),
        cost))
else:
  print('Hubo un problema con la entrada de flujo de distancia mínima.')

Distancia mínima: 1282


Arco Flujo / Capacidad Distancia
0 -> 1 0 / 1 0
0 -> 2 0 / 1 0
0 -> 3 1 / 1 497
1 -> 6 0 / 1 0
1 -> 7 0 / 1 0
2 -> 3 0 / 1 0
2 -> 4 0 / 1 0
3 -> 6 1 / 1 345
4 -> 2 0 / 1 0
4 -> 5 0 / 1 0
5 -> 4 0 / 1 0
5 -> 6 0 / 1 0
6 -> 7 1 / 1 440

check 0 s completado a las 4:53

You might also like