| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ground transport Description
Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 10: Ground transport
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
Data Files
e2minflow.mos
(!******************************************************
Mosel Example Problems
======================
file e2minflow.mos
``````````````````
Choosing the mode of transport (Minimum cost flow)
A company needs to transport chemical products stores in
4 depots to 3 recycling centers by road or rail. Each depot
transports to only specific recycling centers with varying
cost per available transportation types. A single rail delivery
must be between 10 and 50 tons. How should the company
transport 180 tons of chemicals to minimize the total
transport cost?
This contains the classical problem of coding a graph through
an N x N matrix with flow across arcs between pairs of nodes.
The set of 'NODES' is the union of all nodes connected by elements
in 'ARCS'.
(c) 2008-2022 Fair Isaac Corporation
author: S. Heipcke, Mar. 2002, rev. Mar. 2022
*******************************************************!)
model "E-2 Minimum cost flow"
uses "mmxprs", "mmsystem"
declarations
NODES: set of string ! Set of nodes
MINQ : integer ! Total quantity to transport
A: array(ARCS:range,1..2) of string ! Arcs
COST: array(ARCS) of integer ! Transport cost on arcs
MINCAP,MAXCAP: array(ARCS) of integer ! Minimum and maximum arc capacities
end-declarations
initializations from 'e2minflow.dat'
A MINQ MINCAP MAXCAP COST
end-initializations
! Calculate the set of nodes
NODES:=union(a in ARCS) {A(a,1),A(a,2)}
declarations
flow: array(ARCS) of mpvar ! Flow on arcs
end-declarations
! Objective: total transport cost
Cost:= sum(a in ARCS) COST(a)*flow(a)
! Flow balance: inflow equals outflow
forall(n in NODES | n<>"SOURCE" and n<>"SINK")
sum(a in ARCS | A(a,2)=n) flow(a) = sum(a in ARCS | A(a,1)=n) flow(a)
! Min and max flow capacities
forall(a in ARCS | MAXCAP(a) > 0) do
flow(a) >= MINCAP(a)
flow(a) <= MAXCAP(a)
end-do
! Minimum total quantity to transport
sum(a in ARCS | A(a,1)="SOURCE" ) flow(a) >= MINQ
! Solve the problem
minimize(Cost)
! Solution printing
writeln("Total cost: ", getobjval)
forall(a in ARCS | flow(a).sol>0)
writeln(formattext("%7s -> %-7s: %g", A(a,1), A(a,2), getsol(flow(a))))
end-model
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| © Copyright 2025 Fair Isaac Corporation. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||