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

g4cable.mos

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

file g4cable.mos
````````````````
Connecting terminals through cables

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

model "G-4 Cabled network"
uses "mmxprs"

declarations
NTERM = 6
TERMINALS = 1..NTERM                  ! Set of terminals to connect

DIST: array(TERMINALS,TERMINALS) of integer  ! Distance between terminals

connect: array(TERMINALS,TERMINALS) of mpvar ! 1 if direct connection
! between terminals, 0 otherwise
level: array(TERMINALS) of mpvar      ! level value of nodes
end-declarations

initializations from 'g4cable.dat'
DIST
end-initializations

! Objective: length of cable used
Length:= sum(s,t in TERMINALS | s<>t) DIST(s,t)*connect(s,t)

! Number of connections
sum(s,t in TERMINALS | s<>t) connect(s,t) = NTERM - 1

! Avoid subcycle
forall(s,t in TERMINALS | s<>t)
level(t) >= level(s) + 1 - NTERM + NTERM*connect(s,t)

! Direct all connections towards the root (node 1)
forall(s in 2..NTERM) sum(t in TERMINALS | s<>t) connect(s,t) = 1

forall(s,t in TERMINALS | s<>t) connect(s,t) is_binary

! Solve the problem
minimize(Length)

! Solution printing
writeln("Cable length: ", getobjval)

write("Connections:")
forall(s,t in TERMINALS | s<>t)
write(if(getsol(connect(s,t))>0, " " + s + "-" + t, ""))
writeln

end-model

```