Initializing help system before first use

Min-cost-flow problem


Type: Programming
Rating: 2 (easy-medium)
Description: solving a min-cost-flow problem using the Xpress Python interface.
File(s): netflow.py


netflow.py
#
# 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]))