Download
language Essence 1.3
given n_warehouses, n_transshipment, n_customer : int(1..)
letting
Warehouse be domain int(1..n_warehouses),
Transshipment be domain int(1..n_transshipment),
Customer be domain int(1..n_customer)
given
$ cost of transporting items from a Warehouse to a Transshipment point
costWT : function (total) tuple (Warehouse, Transshipment) --> int(1..),
$ cost of transporting items from a Transshipment point to a Customer
costTC : function (total) tuple (Transshipment, Customer) --> int(1..),
$ available stock at each Warehouse
stock : function (total) Warehouse --> int(1..),
$ demand for each customer
demand : function (total) Customer --> int(1..)
letting maxStock be max(range(stock))
letting maxDemand be max(range(demand))
find amountWT : function (Warehouse, Transshipment) --> int(1..maxStock)
find amountTC : function (Transshipment, Customer) --> int(1..maxDemand)
$ preservation of flow
such that
forAll t : Transshipment .
sum([ amount | ((w, t'), amount) <- amountWT, t = t' ]) =
sum([ amount | ((t', c), amount) <- amountTC, t = t' ])
$ meet the demand
such that
forAll c : Customer .
sum([ amount | ((t, c'), amount) <- amountTC, c = c' ]) = demand(c)
$ stay within the stock
such that
forAll w : Warehouse .
sum([ amount | ((w', t), amount) <- amountWT, w = w' ]) <= stock(w)
given maxCost : int(1..)
$ calculate the total cost
find totalCost : int(1..maxCost)
such that
totalCost = sum([ costWT(key) | (key, amount) <- amountWT ])
+ sum([ costTC(key) | (key, amount) <- amountTC ])