# transportation.mod
#
# Written by Mike O'Sullivan & Cameron Walker 2004
#
# This file contains the balanced
# transportation model.
#
# Last modified: 2/4/2008
model;
# The supply nodes
set SUPPLY_NODES;
# The demand nodes
set DEMAND_NODES;
# The supply at the supply nodes
param Supply {SUPPLY_NODES} >= 0, integer;
# The demand at the demand nodes
param Demand {DEMAND_NODES} >= 0, integer;
# The cost of sending one unit of flow
param Cost {SUPPLY_NODES, DEMAND_NODES} default 0;
# The bounds on the flow of goods
param Lower {SUPPLY_NODES, DEMAND_NODES}
integer default 0;
param Upper {SUPPLY_NODES, DEMAND_NODES}
integer default Infinity;
# The flow of goods from supply nodes to demand nodes
var Flow {i in SUPPLY_NODES, j in DEMAND_NODES}
>= Lower[i, j], <= Upper[i, j], integer;
# The objective is to minimise the transportation cost
minimize TotalCost:
sum {i in SUPPLY_NODES, j in DEMAND_NODES}
Cost[i, j] * Flow[i, j];
# Flow must not exceed supply
subject to UseSupply {i in SUPPLY_NODES}:
sum {j in DEMAND_NODES} Flow[i, j] = Supply[i];
# Flow must meet demand
subject to MeetDemand {j in DEMAND_NODES}:
sum {i in SUPPLY_NODES} Flow[i, j] = Demand[j];