#
# Example: solving a min-cost-flow problem
# using the Xpress Python interface
#
from __future__ import print_function
try:
import networkx as netx # nice (di-)graph Python package
except ImportError:
print ("Install the NetworkX Python package to use this example")
quit()
import numpy as np # for matrix and vector products
import xpress as xp
# digraph definition
V = [1,2,3,4,5] # vertices
E = [[1,2], [1,4], [2,3], [3,4], [4,5], [5,1]] # arcs
n = len (V) # number of nodes
m = len (E) # number of arcs
G = netx.DiGraph (E)
A = (netx.incidence_matrix (G, oriented = True).toarray()) # Get NumPy representation
print ("incidence matrix:\n", A)
demand = np.random.randint (100, size = n) # One (random) demand for each node
demand[0] = - sum (demand[1:]) # Balance demand at nodes
cost = np.random.randint (20, size = m) # (Random) costs
flow = np.array ([xp.var () for i in E]) # flow variables declared on arcs
p = xp.problem ('network flow')
p.addVariable (flow)
p.addConstraint (xp.Dot (A, flow) == - demand)
p.setObjective (xp.Dot (cost, flow))
p.solve ()
for i in range (m):
print ('flow on', E[i], ':', p.getSolution (flow [i]))
|