 FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home   Telecommunication problems

Description
G‑1 G‑2 G‑3 Problem name and type, features Difficulty Network reliability: Maximum flow with unitary capacities *** encoding of arcs, range, exists, create, algorithm for printing paths, forall-do, while-do, round Dimensioning of a mobile phone network ** if-then, exit Routing telephone calls: Multi-commodity network flow problem *** encoding of paths, finalize, getsize Construction of a cabled network: Minimum weight spanning tree problem *** formulation of constraints to exclude subcycles Scheduling of telecommunications via satellite: Preemptive open shop scheduling ***** data preprocessing, algorithm for preemptive scheduling that involves looping over optimization, ``Gantt chart'' printing Location of GSM transmitters: Covering problem * modeling an equivalence; sparse data format

Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 12: Telecommunication problems

Source Files

Data Files

g1rely.mos

(!******************************************************
Mosel Example Problems
======================

file g1rely.mos
```````````````
Reliability of a telecommunications network

(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Mar. 2002
*******************************************************!)

model "G-1 Network reliability"
uses "mmxprs"

declarations
NODES: range                        ! Set of nodes
SOURCE = 10; SINK = 11              ! Source and sink nodes

ARC: dynamic array(NODES,NODES) of integer ! 1 if arc defined, 0 otherwise

flow: dynamic array(NODES,NODES) of mpvar  ! 1 if flow on arc, 0 otherwise
end-declarations

initializations from 'g1rely.dat'
ARC
end-initializations

forall(n,m in NODES | exists(ARC(n,m)) and n<m ) ARC(m,n):= ARC(n,m)
forall(n,m in NODES | exists(ARC(n,m)) )  create(flow(n,m))

! Objective: number of disjunctive paths
Paths:= sum(n in NODES) flow(SOURCE,n)

! Flow conservation and capacities
forall(n in NODES | n<>SOURCE and n<>SINK) do
sum(m in NODES) flow(m,n) = sum(m in NODES) flow(n,m)
sum(m in NODES) flow(n,m) <= 1
end-do

sum(n in NODES) flow(n,SOURCE) = 0

forall(n,m in NODES | exists(ARC(n,m)) )  flow(n,m) is_binary

! Solve the problem
maximize(Paths)

! Solution printing
writeln("Total number of paths: ", getobjval)

forall(n in NODES | n<>SOURCE and n<>SINK and getsol(flow(SOURCE,n))>0) do
write(SOURCE, " - ",n)
nnext:=n
while (nnext<>SINK) do
nnext:=round(getsol(sum(m in NODES) m*flow(nnext,m)))
write(" - ", nnext)
end-do
writeln
end-do

end-model   