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

Telecommunication problems

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


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

mosel_app_7.zip[download all files]

Source Files

Data Files





g2dimens.mos

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

   file g2dimens.mos
   `````````````````
   Diminsioning of a mobile phone network
   
   Consider a network of 10 cells and a 5-node ring of hubs 
   (simple hubs + one MTSO=Mobile Telephone Switching Office
   that controls the network) with defined capacity. 
   The more links between a cell and the ring increases
   the reliability of the network. The traffic in this type of 
   system is equivalent to bidirectional circuits. The capacity 
   is the number of simultaneous calls during peak periods. The
   required number of connections, forecasted traffic, and the
   cost per connection is known. Which connections of cells to
   the ring minimize the connection costs while still meeting 
   the traffic demand within the capacity limit?
   
   First, ensure that the ring capacity is sufficiently large to 
   meet all the traffic requirements with an 'if-then' condition.
   If not, the function 'exit' is used to stop the execution. 
   A simple MIP formulation follows.

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

model "G-2 Mobile network dimensioning"
 uses "mmxprs"

 declarations
  HUBS = 1..4
  MTSO = 5                                ! Node number of MTSO
  NODES = HUBS+{MTSO}                     ! Set of nodes (simple hubs + MTSO)
  CELLS = 1..10                           ! Cells to connect

  CAP: integer                            ! Capacity of ring segments
  COST: array(CELLS,NODES) of integer     ! Connection cost
  TRAF: array(CELLS) of integer           ! Traffic from every cell
  CNCT: array(CELLS) of integer           ! Connections of a cell to the ring
  
  ifconnect: array(CELLS,NODES) of mpvar  ! 1 if cell connected to node,
                                          ! 0 otherwise
 end-declarations

 initializations from 'g2dimens.dat'
  CAP COST TRAF CNCT
 end-initializations

! Check ring capacity
 if not (sum(c in CELLS) TRAF(c)*(1-1/CNCT(c)) <= 2*CAP) then
  writeln("Ring capacity not sufficient")
  exit(0)
 end-if 

! Objective: total cost
 TotCost:= sum(c in CELLS, n in NODES) COST(c,n)*ifconnect(c,n)

! Number of connections per cell
 forall(c in CELLS) sum(n in NODES) ifconnect(c,n) = CNCT(c) 

! Ring capacity
 sum(c in CELLS, n in HUBS) (TRAF(c)/CNCT(c))*ifconnect(c,n) <= 2*CAP

 forall(c in CELLS, n in NODES) ifconnect(c,n) is_binary

! Solve the problem
 minimize(TotCost)
 
! Solution printing
 writeln("Total cost: ", getobjval, " (total traffic in the ring: ",
   getsol(sum(c in CELLS, n in HUBS) (TRAF(c)/CNCT(c))*ifconnect(c,n)), ")")

 forall(c in CELLS) do
  write(c, " ->")
  forall(n in NODES | getsol(ifconnect(c,n))>0) write(" ", n)
  writeln
 end-do 

end-model

Back to examples browserPrevious exampleNext example