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

Air transport

Problem name and type, featuresDifficultyRelated examples
F‑1 Flight connections at a hub: Assignment problem * assignment_graph.mos, i1assign.mos, c6assign.mos
F‑2 Composing flight crews: Bipartite matching **** matching_graph.mos
2 problems, data preprocessing, incremental definition of data array, encoding of arcs, logical or (cumulative version) and and, procedure for printing solution, forall-do, max, finalize
F‑3 Scheduling flight landings: Scheduling problem with time windows ***
generalization of model to arbitrary time windows; calculation of specific BigM, forall-do
F‑4 Airline hub location: Hub location problem ***
quadruple indices; improved (re)formulation (first model not usable with student version), union of index (range) sets
F‑5 Planning a flight tour: Symmetric traveling salesman problem ***** tsp_graph.mos
loop over problem solving, TSP subtour elimination algorithm; procedure for generating additional constraints, recursive subroutine calls, working with sets, forall-do, repeat-until, getsize, not

Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 11: Air transport[download all files]

Source Files

Data Files


   Mosel Example Problems

   file f1connect.mos
   Planning flight connections at a hub

   An airline has 6 planes landing within 90 minutes. During
   the following hour, these planes must travel to 6 new
   destinations. How should the incoming planes be used for
   the new departures to minimize the number of passengers who
   must change planes during the connection?

   For infeasible departure assignments, we assign a large negative
   number for how many passengers will remain on the plane during
   the connection. By maximizing the number of passengers who stay
   on the plane, this eliminates these infeasible departures.
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Mar. 2002

model "F-1 Flight connections"
 uses "mmxprs"

  PLANES = 1..6                         ! Set of airplanes
  PASS: array(PLANES,PLANES) of integer ! Passengers with flight connections
  cont: array(PLANES,PLANES) of mpvar   ! 1 if flight i continues to j

 initializations from 'f1connect.dat'

! Objective: number of passengers on connecting flights
 Transfer:= sum(i,j in PLANES) PASS(i,j)*cont(i,j)

! One incoming and one outgoing flight per plane
 forall(i in PLANES) sum(j in PLANES) cont(i,j) = 1
 forall(j in PLANES) sum(i in PLANES) cont(i,j) = 1

 forall(i,j in PLANES) cont(i,j) is_binary

! Solve the problem: maximize the number of passengers staying on board
! Solution printing
 writeln("Passengers staying on board: ", getobjval)
 forall(i in PLANES)
 writeln(i, " -> ", getsol(sum(j in PLANES) j*cont(i,j)), " (",
         getsol(sum(j in PLANES) PASS(i,j)*cont(i,j)), ")")

Back to examples browserPrevious exampleNext example