FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Telecommunication problems

Problem name and type, featuresDifficulty
G‑1 Network reliability: Maximum flow with unitary capacities ***
encoding of arcs, range, exists, create, algorithm for printing paths, forall-do, while-do, round
G‑2 Dimensioning of a mobile phone network **
if-then, exit
G‑3 Routing telephone calls: Multi-commodity network flow problem ***
encoding of paths, finalize, getsize
G‑4 Construction of a cabled network: Minimum weight spanning tree problem ***
formulation of constraints to exclude subcycles
G‑5 Scheduling of telecommunications via satellite: Preemptive open shop scheduling *****
data preprocessing, algorithm for preemptive scheduling that involves looping over optimization, ``Gantt chart'' printing
G‑6 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[download all files]

Source Files

Data Files


   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"

  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

 initializations from 'g1rely.dat'

 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

! No return to SOURCE node
 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
! 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)
  while (nnext<>SINK) do
   nnext:=round(getsol(sum(m in NODES) m*flow(nnext,m)))
   write(" - ", nnext)


Back to examples browserPrevious exampleNext example