Algorithms of Scheduling Ac Landing Problem
Algorithms of Scheduling Ac Landing Problem
Min Wen
Master thesis
Department of Informatics and Mathematical Modelling
Technical University of Denmark
November 2005
Table of Contents
Table of Contents i
List of Figures iv
Abstract v
Acknowledgements vii
1 Introduction 1
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Overview of the contribution of the thesis . . . . . . . . 4
1.3 Outline of the thesis . . . . . . . . . . . . . . . . . . . . 4
i
3.4 Implementation Details . . . . . . . . . . . . . . . . . . . 35
3.4.1 Preprocessing . . . . . . . . . . . . . . . . . . . . 35
3.4.2 Columns Generation . . . . . . . . . . . . . . . . 38
3.4.3 Branch-and-Bound . . . . . . . . . . . . . . . . . 43
3.4.4 The overall algorithm . . . . . . . . . . . . . . . . 44
4 Case Studies 47
4.1 A Small Instance . . . . . . . . . . . . . . . . . . . . . . 47
4.2 General Problems . . . . . . . . . . . . . . . . . . . . . . 50
5 Conclusion 57
5.1 Achievements . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2 Future research . . . . . . . . . . . . . . . . . . . . . . . 59
Bibliography 61
ii
List of Tables
iii
List of Figures
iv
Abstract
v
vi
vii
Chapter 1
Introduction
1.1 Motivation
Over the past few decades, air traffic has experienced a tremendous
growth. As an example, the world’s largest airport - Atlanta, USA -
alone handles more than 80 million embarkations and disembarkations
per year. The biggest cargo airport, located in Memphis, TN, trans-
ports 2.5 million tons of cargo each year. Congonhas, the Brazilian
airport through which passes the largest number of aircraft, manages
an average of 22 thousand movements a month (Mello (2002)). At Syd-
ney airport, landing slots are allocated at 3 minuts intervals (Ciesielski
et al. (1998)). Air transport has definitely established itself as one of
the most important means of transport in the future.
However, as the air traffic develops, the limitation of the runway
becomes the bottleneck during the airport operation. For example,
London Heathrow airport, one of the busiest airports in the world,
has only two runways (Atkin et al. (2004)). When the number of
approaching flights exceeds the airport capacity, some of these aircraft
can not be landed on its ′ perfect′ landing time. There is a cost mainly on
the waste of fuel for each plane flying faster than its most economical
speed. Airlines also experience different costs for delays of different
1
2
thesis
This thesis is the first attempt to develop a branch-and-price based
algorithm for the ALP. Contributions are made on the following aspects:
We present a set partitioning formulation for the problem of which the
linear relaxation provides excellent lower bound for the integer problem.
We propose a mixed integer formulation for solving the subproblem in
the column generation. The model not only determines the column
with the minimum reduced cost that is to be added to the master
problem, but also solves the sequence problem and gives the landing
time for the aircraft appearing in the column. Moreover, 4 kinds of
constraints are added to the model in order to make it operational for
all the branch nodes throughout the branch-and-bound procedure. We
also propose a new branching strategy for the ALP, which makes the
branch-and-bound more efficient.
used to guarrantee the optimal integer solution for the ALP. A mathe-
matical fomulation for the subproblem in the column generation is also
proposed. In Chapter 4, an algorithm based on the branch-and-price
method is developed. It is implemented and tested on the public data
from OR-Library involving up to 50 aircraft. Computational results
and data analysis are also presented. In Chapter 5, we summarize the
achievements in this thesis and point out the future research on this
work.
Chapter 2
6
7
Cost
6
!!
!!!
!
@
!!!
@ !
@ !!!
@!! -
Earliest T arget Latest Time
Figure 2.1: Variation in cost for a plane within its time window
• each plane lands at some time within the corresponding time win-
dow
xi ∈ [Ei , Li ] ∀i ∈ P ; (2.2.1)
MIP:
P
X
min (giαi + hi βi ) (2.2.3)
i=1
s.t. Ei ≤ xi ≤ Li ∀i ∈ P ; (2.2.4)
δij + δji = 1 ∀i, j ∈ P ; i 6= j (2.2.5)
R
X
yir = 1 ∀i ∈ P ; r ∈ R (2.2.6)
r=1
xj ≥ xi − (Li + Sij − Ej )
the same as
xj − Ej ≥ xi − Li − Sij
which always holds since xj − Ej ≥ 0 and xi − Li − Sij ≤ 0.
xj ≥ xi + 0 − 0
the same as
xj − Ej ≥ xi − Li
which always holds since the left handside is always larger than
or equal to zero while the right handsize is non-positive.
xj ≥ xi + Sij
ALP. Both heuristic methods and optimal methods have been devel-
oped to solve the ALP including simple heuristic, population heuristic,
genetic algorithm etc.
Beasley et al. (2000) present a mixed integer formulation of the
ALP and a detailed review of published work addressing the ALP. They
propose 6 kinds of additional constraints in order to reduce the zero-
one space of the mixed integer formulation. The problem is then solved
optimally by using linear programming-based tree search for the public
data from OR-Library involving up to 50 aircraft. An effective heuristic
algorithm is also presented.
Ernst et al. (1999) present a specialized simplex algorithm which
evaluates the landing time very rapidly, based on some partial order in-
formation. This method is then used in a problem space search heuris-
tic as well as a branch-and-bound method for both single and multiple
runway ALP. Preprocessing steps involving time window tightening and
partial ordering based on problem data or an upper bound are used.
The algorithm is tested by the instances from OR-Library involving up
to 50 aircraft and 4 runways.
Jung et al. (2003) propose a heuristic algorithm based on the seg-
mentation of time. The time horizon is divided into time segments
that determine subproblems of ALP. Each subproblem is formulated
as a mixed integer zero-one linear problem as in Beasley et al. (2000)
and solved optimally in turn. Computational results are presented for
instances from OR-Library and for randomly generated instances in-
volving up to 75 aircraft and 4 runways.
Cheng et al. (1999) develop four different genetic-search formula-
tions for the multiple runway ALP. Three of these schemes use a genetic
algorithm approach while the last scheme uses a genetic programming
approach. Computational results are presented involving 12 aircraft
and 3 runways.
Pinol et al. (2005) first apply the scatter search and bionomic algo-
rithm for the multiple runway ALP. The initial population consists of
14
The Branch-and-Price
Method for ALP
16
17
by,
P
X
cs = (giαi asi + hi βi asi )
i=1
zs binary (3.1.4)
plane Ei Ti Li gi hi
1: 50 88 95 3 1
2: 88 95 105 3 1
3: 75 100 120 3 1
2. xj ≥ xi + Sij ∀(i, j) ∈ Us
3. the sum of the weighted deviation from the target time is mini-
mized
The notations αi and βi are used to denote the earliness and tardiness.
The mathematical model can be formulated as
19
SEQ:
X
min (gi αi + hi βi ) (3.1.5)
i∈Ps
s.t. Ei ≤ xi ≤ Li ∀i ∈ Ps (3.1.6)
xj ≥ xi + Sij ∀(i, j) ∈ Us (3.1.7)
αi ≥ Ti − xi ∀i ∈ Ps (3.1.8)
0 ≤ αi ≤ Ti − Ei ∀i ∈ Ps (3.1.9)
βi ≥ xi − Ti ∀i ∈ Ps (3.1.10)
0 ≤ βi ≤ Li − Ti ∀i ∈ Ps (3.1.11)
xi = Ti − αi + βi ∀i ∈ Ps (3.1.12)
xi , αi , βi ≥ 0 ∀i ∈ Ps (3.1.13)
20
Note here that the column in the formulation does not state the
information of the order of the landings. For instance, for the last
column [1 1 1]′ in the set partitioning model, there exist two feasible
landing sequences including sequence 9 ({1 → 2 → 3}) with cost 11
and sequence 10 ({1 → 3 → 2}) with cost 34, as shown in Fig.3.2.
However, because that the objective of the ALP is to minimize the
total cost, if the last column is selected, it is obvious that the planes
21
will land in the order of sequence 10 which has the minimum cost
among the costs of the two feasible sequences corresponding to this
column. Therefore, the coefficient in the objective function should be
the minimum cost of landing the planes appearing in the corresponding
column. For the small example, we enumerate all the feasible sequences
corresponding to the column, calculate the costs for these sequences
and choose the minimum cost to be the coefficient (called enumeration
method). However, for large-scale problems, it is time consuming to use
the enumeration method, since there exist too many feasible sequences
for the columns. Instead, a mathematical model can be formed to
determine the minimum cost for a column. This optimization problem
is slightly different formulated than determining the minimum cost for
a given landing sequence, since the order of the planes is unknown here.
Based on the SEQ, this model can be obtained by adding an additional
variable δij which is 1 if plane i lands before plane j and 0 otherwise,
the constraints (Eq.3.1.14) to ensure that plane i lands either before or
after plane j, and the separation time constraints (Eq.3.1.15).
COL:
X
min (gi αi + hi βi ) (3.1.16)
i∈Pa
s.t. Ei ≤ xi ≤ Li ∀i ∈ Pa ; (3.1.17)
δij + δji = 1 ∀i, j ∈ Pa ; i 6= j (3.1.18)
xj ≥ xi + Sij δij − (Li − Ej )δji ∀i, j ∈ Pa ; i 6= j (3.1.19)
αi ≥ Ti − xi ∀i ∈ Pa (3.1.20)
0 ≤ αi ≤ Ti − Ei ∀i ∈ Pa (3.1.21)
βi ≥ xi − Ti ∀i ∈ Pa (3.1.22)
0 ≤ βi ≤ Li − Ti ∀i ∈ Pa (3.1.23)
xi = Ti − αi + βi ∀i ∈ Pa (3.1.24)
xi , αi, βi ≥ 0 ∀i ∈ Pa (3.1.25)
δij binary ∀i, j ∈ Pa ; i 6= j (3.1.26)
Figure 3.4: The complete information for the set partitioning model.
3.2 Preprocessing
In order to make the calculation more efficient, the formulation is tight-
ened before we start to solve the optimization problem. This can be
done by fixing some variables, reducing the feasible interval of some
variables etc. Thereby, the solution space is narrowed.
In the ALP, the predetermined landing time window for each plane
depends on the airspeed at which the plane flies. As mentioned above,
the earliest time is the landing time of the plane flying at its maximum
airspeed while the latest time is at its most fuel-effiicient airspeed.
Due to the difference of the airspeed, a plane is allowed to land in a
very wide time window without considering the total cost. However, in
practical, the cost has to be considered. For example, in practical airline
operations, a plane would never land at its latest landing time since this
costs too much although it is feasible. This makes the predetermined
latest time to be of no consequence. Moreover, the overlapes of the
allowable landing time of two different planes will also be large intervals
with the ′ loose′ time windows. This will result in a huge number of
feasible solutions. For example, we have two planes 1 and 2 with time
windows of [50, 571] and [200, 760], respectively, and we assume the
separation time is S12 = 20 and S21 = 30. We can see that plane 1
can be landed either before or after plane 2 (i.e δ12 = 1 or δ21 = 1). In
other words, landing sequences {1 → 2} and {2 → 1} are both feasible
here, although {2 → 1} may incur a very large cost.
Suppose we already know the upper bound of the cost (denoted as
ZU B ) which will definitely be large or equal to the optimal solution.
Then it is possible to limit the deviation from target time for each
plane. For plane i, if we assume that all other planes make a zero
contribution to the objective function value, we can update Ei using
because the cost would exceed the ZU B if we land i more than ZU B /gi
time units before its target time. Similarly, for the latest time, we have
that
3.3 Branch-and-Price
Branch-and-price is known to be an efficient method for solving large-
scale scheduling problems such as the vehicle routing problem, the crew
scheduling problem etc. However, it has not been applied for the ALP
in the literature. In this section, we propose a branch-and-price method
for the ALP.
26
cj = cj − πa
e ∀j ∈ S
where cj is the cost coefficient for column a, π is the dual values cor-
responding to each constraints of the linear system provided by the
optimal basic solution of the master problem.
This method of solving linear program is called column generation.
It has been demonstrated to be a successful method for solving the
linear program with huge number of variables.
In our case, the linear relaxation program (denoted as LSP) can
be obtained from the integer program (SP) without the integrality
constraints (Eq.3.1.4). The master problem is initiated with a set of
columns that is generated during the initilizaiton. The subproblem is
to find the column with the minimum reduced cost. A mathematial
formulation for the subproblem is proposed and shown as following:
27
SUB:
P
X P
X
min (gi αi + hi βi ) − πi ai − λ (3.3.1)
i=1 i=1
s.t. ai Ei ≤ xi ≤ ai Li ∀i ∈ P (3.3.2)
δij ≤ ai ∀i, j ∈ P ; i 6= j (3.3.3)
δij ≤ aj ∀i, j ∈ P ; i 6= j (3.3.4)
1 ≥ δij + δji ≥ ai + aj − 1 ∀i, j ∈ P ; i 6= j (3.3.5)
xj ≥ xi + Sij δij − (Li − Ej )δji − (ai Li
− aj Ej ) + (Li − Ej )(δij + δji ) ∀i, j ∈ P ; i 6= j (3.3.6)
αi ≥ ai Ti − xi ∀i ∈ P (3.3.7)
0 ≤ αi ≤ Ti − Ei ∀i ∈ P (3.3.8)
βi ≥ xi − ai Ti ∀i ∈ P (3.3.9)
0 ≤ βi ≤ Li − Ti ∀i ∈ P (3.3.10)
xi = ai Ti − αi + βi ∀i ∈ P (3.3.11)
δij , ai binary ∀i, j ∈ P (3.3.12)
d. If ai = 0 aj = 0, it becomes 0 ≥ 0.
3.3.2 Branch-and-Bound
In most cases, the solution of LSP is a fractional solution. In order to
guarantee that we end up with an integer solution, the column gener-
ation method is combined with a branch-and-bound method (so called
branch-and-price) in which the column generation provides the lower
bound for each node throughout the exploration of branch-and-bound
tree.
Branch-and-bound is a general search method. Suppose we wish to
minimize a function f (x), where x is restricted to some feasible region
(defined, i.e. by explicit mathematical constraints). To apply branch
and bound, one must have a means of computing a lower bound on the
30
Bounding
Branching
PartA. Neither of the two planes exist (i.e. a2 = a3 = 0). For example,
planes land in the sequence {1 → 5 → 8 → 10}.
am = an (3.3.14)
P P
k∈P δkm = k∈P δkn − am (3.3.15)
PartA. Neither of the two planes exist (i.e. a2 = a3 = 0). For example,
planes land in the sequence {1 → 5 → 8 → 10}.
am + an ≤ 1 + Mdmn (3.3.16)
P P
2 − Mδnm ≤ k∈P δkn − k∈P δkm + M(1 − dmn ) (3.3.17)
Selection
In our case, the node selection strategy used is the DFS. If the cur-
rent branch-and-bound node is not pruned (i.e.the solution is fractional
and is less than the upper bound ZU B of the branch-and-bound tree),
then the branching scheme is made on this node, and the child node
with ȳmn = 1 is selected as the next node to be explored.
3.4.1 Preprocessing
initialization
sort the planes by the target time
for j = 1 to P
for r = 1 to R
Bjr := the best time that j can be land on runway r
end
Xj := min{ Bjr |r = 1, ..., R}
rway := the corresponding r to the min{ Bjr |r = 1, ..., R}
Arway := [Arway , j] (add the plane j on runway rway)
end
return X (the landing time for each plane)
if X 6= T
X:= the solution of the LP problem with the fixed order
end P
ZU B = Pi=1 gi max(0, Ti − Xi ) + hi max(0, Xi − Ti )
return ZU B
and j is satisfied for landing both of them on their target time (i.e.
Tj − Ti > Sij ), the column has the minimum cost that equals to 0,
the corresponding landing sequence {i, j} and landing time {Ti , Tj }.
Otherwise, either plane i needs to speed up or plane j has to land after
its target time, therefore, the minimun cost is min{gi , hj }(Sij −Tj +Ti ).
If there exist three or more planes in the column, then the problem
becomes more complex. However, it is important to note that the cost
of a complete sequence is always bigger than or equal to the cost of its
partial sequence. It is therefore possible to quickly find a large number
of sequences that have larger cost than the upper bound ZU B by just
checking the cost of their partial sequences. Based on this principle,
38
we start with landing only one plane. In each iteration, one new plane
is inserted into each of the existing landing sequences, which contain
the planes that have been considered in the previous iterations. The
plane is allowed to be put into any position of the existing sequences if
it is feasible (the time windows and separation time satisfied). We then
calculate the costs for all feasible sequences and remove those with costs
lager than the upper bound ZU B . The rest of the sequences become
the current sequences for the next iteration.
Initial columns
Basically, the initial columns for our column generation method consist
of two main parts. The first part is P dummy columns. Each column
contains one plane without taking account of the runways, that is,
the column contains a single 1 for the i′ th row (asi = 1). They are
added to ensure a feasible LP upon branching and they are assigned
a cost sufficiently high in order to force them out of the basis in the
optimal solution. Fig.3.8 shows an example of the dummy column part
in the master problem for a landing problem involving 4 aircraft and 2
runways. The second part is the columns corresponding to the heuristic
solution obtained in the preprocessing. This is added in order to get a
good starting objective value.
In order to improve the initial dual value of the master problem,
we also do some experiments on adding some additional initial columns
besides those initial columns mentioned above. The way we used to
39
Figure 3.8: The dummy part in the master problem for an small ex-
ample
Master problem
initialization
ordindT = sortindex(T);
cost0 col = zeros(num,P);
nonexist = [];
col0 col(1, ordindT (1)) = 1;
for j = 2 to P
if {the separation time between T (ordindT (j))
and the previous landings is satisfied}
cost0 col(1, ordindT (j)) = 1;
else
nonexist = [nonexist, j];
end
end
k=length(nonexist);
for i = 1 to k
for j = 1 to P
if {the separation time between T (ordindT (j))
and the previous landings is satisfied}
cost0 col(i+1,ordindT (j)) = 1;
end
end
end
return cost0 col[]
zs = 0 ∀s ∈ S; f ix(s) = 1 (3.4.1)
Subproblem
to be 0 for all node(i, j). Based on the node[] of its father node, the
corresponding node(i, j) is set to be 1 for the branch of yij = 1 and
node(i, j) = 2 for yij = 0. It is updated for exploring the node in each
branch-and-bound iteration. With the same example above, the values
of node[] for the root node and its two child node are shown in Fig.
3.10.
3.4.3 Branch-and-Bound
The above column generation algorithm provides the lower bound for
each node of the branch-and-bound tree. Here, we focus on the branch-
ing variables and the node selection. Initially, we pick out the non-zero
variables and save these in vector (Z I[]). The corresponding land-
ing sequence can be found in Seq[]. The matrix W eight[] (P by P )
represents the connection flow between the planes. It is an implemen-
tation of calculating the branching variable yij by Eq.3.3.13 metioned
in section 3.3.2. The two-dimension vector Branch[] is used to save
the information of the branch nodes that have been considered. Before
we choose a new node, those nodes appearing in Branch[] need to be
removed. This can be achieved by resetting the value of these afore-
mentioned node in W eight[] to be 0. Finally, we just pick the largest
fractional value in the Branch[] and set the corresponding node to be
the next one to be explored. The implementation details are shown in
the following figure Fig.3.11. (Codes see Appendix D).
For example, for the same instance as shown in Fig.3.1, we assume
that the solution of the linear relaxation of the problem is Z = [0.7
0.2 0.3 0.1 0 0.5 0.2] as shown in Fig.3.12. In the implementation, the
matrix W eight[] has the value of
− 0.3 0
W eight =
0 − 0.7
0 0 −
Since, the current node is the root node of the branch tree, the Branch[]
is empty. The maximum value in the matrix W eight[] is 0.7, hence
44
initialization;
ro = number of nodes in Branch[];
W eight[] = zeros(P,P);
Z I = f ind(Z =0);
for i = 1 to length(Z I)
seq = Seq(Z I(i),:)
for i = 1 to length(seq)-1
W eight(j,j+1) = W eight(j,j+1) + ZI (i);
end
end
for m = 1 to ro
W eight(Branch(m,1), Branch(m,2))=0
end
max weight = max(max(W eight));
max wei node = f ind(W eight==max weight);
return max wei node
max weight = 0.7. By using the matlab function f ind.m, the index
of the max weight is returned and is stored in max wei node[] (i.e.
max wei node = [2,3]). In the next branch-and-bound iteration, the
branching node with ymax weight =1 is selected to be explored.
model defined in section 3.1. A[], C[], Seq[], T ime[] are used to store the
information corresponding to the variable Z[], this information includes:
binary column, cost, landing sequence and landing time. Function
air1 Branch(node[]) is used to excute the column generation given the
feasible region defined by node[] using the way mentioned above. The
LP solution of the root node is denoted as the LP lower bound of the
entire problem LP LB. The obj val is the optimal value determined by
the column generation for the current branch node. Next node() im-
plements the selection of the next node in the branch and bound, and
the branch node information Branch[] is uppdated by Next node().
Boolean variale delete shows whether the current node is pruned or
not. The implementation is shown in Fig.3.13. The corresponding
program is Algorithm air1 MinSub.m in Appendix D.
46
Case Studies
47
48
Iteration 1 2 3 4 5 6
Obj value 450.00 450.00 450.00 450.00 323.33 323.33
min ecj -811 -1201 -2541 -2181 -1194 -1194
Iteration 7 8 9 10 11 12
Obj value 243.33 209.17 189.00 172.08 148.67 123.33
min ecj -554.33 -321.83 -359 -324.33 -289 -169.33
Iteration 13 14 15 16 17
Obj value 123.33 115.00 90.00 90.00 90.00
min ecj -187.67 -216.0 -91.0 -91.0 0
the whole procedure. And the column generation stopped at the 17th
iteration, in which the minimum reduced cost was 0 showing that the
LSP was solved optimally. And it is worth to note that, the optimal
solution for LSP was 90 which is equal to the optimal solution for this
problem presented in Beasley et al. (2000). In other words, the lower
bound provided by column generation reached the optimal solution
of this problem. This small experiment illustrates that the column
generation is often not only effective but also very efficient, and provides
very good lower bound for solving the ALP.
In the following, the branch-and-bound method is combined to se-
cure an integer solution of the SP problem. The column generation
method tested above is used to determine the lower bound for each
branch node, and the new branching variable proposed in chapter 3.3.2
is used. Only 7 branching decisions were made: y(6,8) = 1, y(8,1) = 1,
y(7,9) = 1, y(3,4) = 1, y(1,2) = 1, y(9,10) = 1 and y(4,5) = 1. Afterwards,
the algorithm achieved the optimal integer solution shown in table 4.2.
50
optimal to the integer problem SP. This once again shows the effec-
tiveness of applying the set partitioning model and column generation
on the aircraft landing problems.
However, comparing the running time in column 7 with that in col-
umn 11, our branch-and-price algorithm is currently not competitive.
Most of the time is used for solving the subproblems in our algorithm.
Besides, our algorithm is implemented in Matlab which is not as effi-
cient as C++ or JAVA. In the future, improvements can be made in
order to enhance the efficiency of the branch-and-price algorithm. One
way is to use a fast heuristic method instead of solving SUB at the
beginning of the column generation procedure. Another way, which is
investigated in our next computational experiment, is to generate some
good initial columns for the column generation.
As a conclusion of the comparision between the two exact algo-
rithms, the advantages of our branch-and-price exact algorithm include
the following: Our set partitioning fomulation SP is a much better for-
mulation of ALP than the mixed integer formulaiton MIP, its linear
relaxation provides a lower bound that is significantly better than the
MIP. The branch-and-bound strategies used in our algorithm is much
more efficient than the tree search in the LP-based exact algorithm
according to the number of the branch nodes explored. This indicates
that the proposed branching decision method is very suitable and good
for aircraft landing problems. Furthermore, the column generation is an
efficient way to solve the LSP due to the low number of columns gener-
ated for solving the entire problem. These points show the potential of
solving very large aircraft landing problems optimally by the branch-
and-price algorithm, while the branch-and-bound algorithm presum-
ably is too inefficient and may lead to an excessive computational time
in search of the optimum.
Our next computational experiment (II) aims at invesitigating the
initial columns. As discussed in chapter 3.4.2, starting with some good
54
B&P B&B
LSP No.of Total LMIP No.of Total
Pro. -IP Tree Tot. Time Opt. -IP Tree Time Opt.
Num. P R Gap Nodes Col. (sec) Sol. Gap Nodes (sec) Sol.
1 10 2 0.0 1 25 36.4 90 100 91 0.13 90
3 - - - - 0 - - - 0
2 15 2 0.0 1 43 72.8 210 100 115 0.13 210
3 - - - - 0 - - - 0
3 20 2 0.0 1 56 96.4 60 100 142 0.27 60
3 - - - - 0 - - - 0
4 20 2 0.0 1 93 267.9 640 100 193319 417.2 640
3 0.0 1 61 117.0 130 100 39901 7.48 130
4 - - - - 0 - - - 0
5 20 2 0.0 9 192 1133.3 650 100 282160 130.74 650
3 0.0 12 142 624.2 170 100 20035 21.30 170
4 - - - - 0 - - - 0
6 30 2 0.0 9 461 2960.6 554 100 25316 5.86 554
3 - - - - 0 - - - 0
7 44 2 - - - - 0 - - - 0
8 50 2 0.0 1 199 769.7 135 100 9020 4.56 135
3 - - - - 0 - - - 0
II I
LSP No.of Total Total
Pro. -IP Tree Add. Tot. Time Opt. Tot. Time
Num. P R Gap Nodes Col. Col. (sec) Sol. Col. (sec)
1 10 2 0.0 1 4 18 7.5 90 25 36.4
3 - - - - - 0 - -
2 15 2 0.0 1 6 26 10.0 210 43 72.8
3 - - - - - 0 - -
3 20 2 0.0 1 6 33 15.5 60 56 96.4
3 - - - - - 0 - -
4 20 2 0.0 1 10 86 304.1 640 93 267.9
3 0.0 1 10 53 59.7 130 93 117.0
4 - - - - - 0 - -
5 20 2 0.0 9 9 204 1626.6 650 192 1133.3
3 0.0 12 9 98 790.8 170 142 624.2
4 - - - - - 0 - -
6 30 2 0.0 9 16 446 2854.1 554 461 2960.6
3 - - - - - 0 - -
7 44 2 - - - - - 0 - -
8 50 2 0.0 1 18 158 502.9 135 199 769.7
3 - - - - - 0 - -
Conclusion
5.1 Achievements
This thesis is the first attempt to develop and implement a branch-and-
price algorithm for the aircraft landing problem. The achievements of
this thesis are shown in the following aspects:
57
58
61
62
function [C,t,X_star,x,Seq,Xrun,C_seq,E,T,L,g,h,S]
= airland_heuristic(Pro,Run)
% Find the upbound (a feasible solution) by using the heuristic method
%
% Usage: [C,A,x,E,T,L,g,h,S] = airland(Pro,Run)
%
% Input: Pro: The number of the problem
% Run: The number of the runways
% Output: C: The total cost
% x: Landing time for each plane
% A: The order of the planes on each runway’
% t: Time consuming
% E: The earliest landing time
% T: The target landing time
% L: The latest landing time
% g: The unit cost of landing before target time
% h: The unit cost of landing after target time
% S: The seperation time between the planes
% starting time
tic
% Get the data
[P,E,T,L,g,h,S] = Getdata(Pro);
% Get the index corresponding to the sorted plane
ord = sortindex(T);
% initialization
mS = zeros(1,P);
A = zeros(Run,P+1);
x = zeros(1,P);
X_star = zeros(1,P);
C = 0;
64
65
Xrun = zeros(Run,P);
if Run == 1
C = 1;
A = ord;
end
if Run > 1
% for each planes
for i = 1:P
j = ord(i);
B = zeros(1,Run);
% at each runway
for r = 1:Run
mS = zeros(1,P);
l = 1;
if (find(A(r,:)>0))
Q = find(A(r,:)>0);
for m = 1:length(Q)
k = A(r, Q(m));
mS(l) = x(k) + S(k,j);
l = l+1;
end
end
B(r) = max (T(j), max(mS));
end
% the best landing time for plane j
x(j) = min(B);
% feasible runway for x(j)
rway = find(B==min(B));
emp = find (A(rway(1),:) == 0);
% put j into the runway r
A(rway(1), emp(1)) = j;
[xcurrent,fval] = linprog(f,AA,b,Aeq,beq,lb,ub);
Xrun(r,1:n) = xcurrent(2*n+1:end);
X_star = opttime(X_star,Xrun(r,:),Q);
[B,false,SS,xx]=seperationtest(X_star,S,Q);
if false == 1
[f,AA,b,Aeq,beq,lb,ub] = recalculateXXXX(Q);
[xcurrent,fval] = linprog(f,AA,b,Aeq,beq,lb,ub);
Xrun(r,1:n) = xcurrent(2*n+1:end);
X_star = opttime(X_star,Xrun(r,:),Q);
Rere = 1
end
% calculating the cost
C_seq(r)=fval;
C = C + fval;
clear xcurrent;
end
end
% Output the sequence and cost
C;
Seq = A ;
t=toc ;
function v = sortindex(a)
% Get the index corresponding to the sorted plane
%
% Usage: [v , c]= sortindex(a)
%
%Input: a: The vector which want to be sorted
%Output: v: The vector of the original index
b = sort(a);
for i = 1:length(a)
c = find(a==b(i));
d = c(1);
a(d) = NaN;
v(i) = c(1);
end
LL(m) = L(k);
if m < length(Q)
SS(m) = S(k, k1);
end
end
71
72
node_parameter(node_1(i,1),1:node_1(i,2)-1) = 2;
node_parameter(node_1(i,1),node_1(i,2)+1:end)=2;
node_parameter(node_1(i,1),node_1(i,1)) = 0;
% the other elements in the same column
node_parameter(1:(node_1(i,1)-1),node_1(i,2)) = 2;
node_parameter(node_1(i,1)+1:end,node_1(i,2))=2;
node_parameter(node_1(i,2),node_1(i,2)) = 0;
end
end
if ~isempty(node_0)
for i = 1:ro_0
node_parameter(node_0(i,1),node_0(i,2))=2;
end
end
node = node_parameter;
% The number of the iterations
Num = 1000000;
obj_val =[];
temp = ones(P,1);
Fix(1:P)=zeros(P,1);
for n = 1:Num
% Solve the master problem by ’air.gms’
[z,u,ulast,obj] = gams(’air’,A,B,C,temp,Fix,R);
master_solution = find(z.val~=0);
size(A);
% The objective value
obj_val = [obj_val z.val(1:length(C))’*C];
% The dual variables for the equations
pi = u.val;
dual_value = pi’;
pilast = ulast.val;
% Solve the subproblem by ’subproblem.gms’
[x,col,Re_cost] = gams(’subproblem’,E,T,L,g,h,S,pi,pilast,node);
if Re_cost.val > -0.000001
Z = z.val(1:length(C))’;
break
end
for i = P+1:(length(C))
if A(:,i)==col.val
here=1;
end
end
c= Re_cost.val + [pi’ pilast]*[col.val; 1];
temp_seq = sortindex(x.val);
s = [temp_seq(length(find(x.val==0))+1:end) ...
zeros(1,P-length(find(x.val~=0)))];
ti = [sort(x.val(find(x.val~=0)))
zeros(P-length(find(x.val~=0)),1)]’;
% Update the C[], A[], Seq[], Time[], and Fix[]
C = [C; c];
73
A = [A col.val ];
Seq = [Seq; s];
Time = [Time; ti];
Fix(length(C))=0;
end
function initialization(p,r)
% initialize the parameters P, E[], T[], g[], h[]
% initialize matrix for saving the computational results for
% A[], C[], I[], Seq[], Time[]
% initialize the initial columns for column generation
global P E T L g h S R oriE oriL
global A C I Seq Time
global UB All_Nodes Nnode
%parameter initialization
Pro = p;
R = r;
[P,oriE,T,oriL,g,h,S] = Getdata(Pro);
for i = 1:P
S(i,i) = 9999;
end
% Calculate the upper bound by airland_heuristic.m
[UB,t,X_star,x,heuristic_Seq,heuristic_Time,heuristic_C]
= airland_heuristic(p,r);
All_Nodes = avail_nodes_90;
Nnode = length(All_Nodes);
ordind = sortindex(T);
for i = 1:P
E(i) = max(oriE(i), T(i)-UB/g(i));
L(i) = min(oriL(i), T(i)+UB/h(i));
end
% the ’dummy’ part of the initial column
C = ones(P,1)*5000;
Seq = [[1:P]’, zeros(P,P-1)];
A = eye(P);
Time = [T,zeros(P,P-1) ] ;
% the ’heuristic solution’ part of the initial column
heuristic_col = zeros(R,P);
for i = 1:R
for j = 1:length(find(heuristic_Seq(i,:)~=0))
heuristic_col(i,heuristic_Seq(i,j))=1;
end
end
C = [C; heuristic_C];
Seq = [Seq; heuristic_Seq(:,1:P)];
Time = [Time; heuristic_Time];
A = [A, heuristic_col’];
% the good initial columns generated by ini_good_col.m
[cost0_c,cost0_col,cost0_Seq,cost0_Time] = ini_good_cols(Pro);
C = [C; cost0_c];
74
t = TT(1);
s = ordindT(1);
for j = 2:P
q = find(cost0_col(1,:)~=0);
if max(T(q) + S(q,ordindT(j))) <= TT(j)
cost0_col(1,ordindT(j)) = 1;
t = [t TT(j)];
s = [s ordindT(j)];
else
nonexist = [nonexist j];
end
end
cost0_Time = [cost0_Time; t, zeros(1, P-length(t))];
cost0_Seq = [cost0_Seq; s, zeros(1, P-length(s))];
for i = 1:length(nonexist)
t = []; s = [];
for j = 1:P
if j < nonexist(i)
q = find(cost0_col(i+1,ordindT(1:nonexist(i))));
if (TT(j)+S(j, ordindT(j))) <= TT(nonexist(i))
if isempty(q)
cost0_col(i+1,ordindT(j)) = 1;
t = [t TT(j)];
s = [s ordindT(j)];
elseif max(TT(q) + S(ordindT(q),ordindT(j))) <= TT(j)
cost0_col(i+1,ordindT(j)) = 1;
t = [t TT(j)];
s = [s ordindT(j)];
end
end
elseif j == nonexist(i)
cost0_col(i+1,ordindT(j)) = 1;
t = [t TT(j)];
s = [s ordindT(j)];
else
q = find(cost0_col(i+1,:));
if max(T(q) + S(q,ordindT(j))) <= TT(j)
cost0_col(i+1,ordindT(j)) = 1;
t = [t TT(j)];
s = [s ordindT(j)];
end
end
end
cost0_Time = [cost0_Time; t, zeros(1, P-length(t))];
cost0_Seq = [cost0_Seq; s, zeros(1, P-length(s))];
end
for i = 1:num
if cost0_col(i,:)==0
cost0_c = cost0_c(1:i-1);
cost0_col = cost0_col(1:i-1,:);
76
cost0_Seq = cost0_Seq(1:i-1,:);
cost0_Time = cost0_Time(1:i-1,:);
break
end
end
Appendix C
Air1.gms
Set
i /1*100/
j /1*10000/;
Parameter
A(i,j) the column matrix
B(i) each plane lands on one runway
C(j) the cost coefficient
Fix(j) the control variable for z
temp(j) the column using runway;
Scalars
R the number of runways /2 /;
Variable
zzz the sum of the cost;
Positive variable
z(j) the decision variable;
Equation
cost the objective function
dual(i) the row for each plane
duallast the limit on the number of available runways
check(j) the feasibility of the decision variable;
cost.. zzz =e= sum(j, C(j)*z(j)) ;
dual(i).. sum(j, A(i,j)*z(j)) =e= B(i);
duallast.. sum(j$(temp(j)=0), z(j))=e= R;
check(j)$(Fix(j) > 0) ..z(j) =e= 0;
model air1 /all/;
77
78
Subproblem.gms
Sets
i planes / 1*100 /
r runways / 1*1 /;
alias (i,j);
alias (i,k);
Parameters
E(i) the earliest landing time for plane i
T(i) the target landing time for plan i
L(i) the latest landing time for plan i
g(i) the unit cost for landing before target time
h(i) the unit cost for landing after target time
pi(i) the dual value for plane i
node(i,j) equals to 1 if j -> i or 2 otherwise
S(i,j) seperation time between i and j;
Scalars
pilast the dual for the last equation ;
Variable RC;
Positive Variable x(i), a(i), b(i);
Binary Variable theta(i,j), col(i), y(i,j);
Equations
Recost define objective function
ETime(i) the earlest time for plane i
LTime(i) the latest time for plane i
a1(i) the relation between a and T x
a2(i) the relation between a and T E
b1(i) the relation between b and x T
b2(i) the relation between b and L T
axb(i) the relation between x and a b
Comp1(i,j) either i before j or j before i
Comp2(i,j) either i before j or j before i
Comp3(i,j) either i before j or j before i
Comp4(i,j) either i before j or j before i
U(i,j) seperation time requirment for all planes
choose(i,j) set node to be 1
choose2(i,j) set node to be 1
delete(i,j) set node to be 0
delete2(i,j) set node to be 0;
80
81
numberofcolumn = [length(C)]
% Branching and Bound
nodess = [];
delete = 0;
for n = 1:100
% Update the information of the node to be explored
[ro_1,co_1] = size(node_1);
if delete==0 & ro_1 < (P-1)
% choose a child node
node = Node_choosing(Z,[node_1; node_0]);
node_1 = [node_1; node];
nodess = [nodess; node];
else
% remove the node and search for the next node
num = find(nodess(:,1)==node_1(end,1)...
& nodess(:,2)==node_1(end,2));
nodess = nodess(1:num,:);
[row,col] = size(node_0);
temp = [];
for i = 1:row
if ~isempty(find(nodess(1:num,1)==node_0(i,1) ...
&nodess(1:num,2)==node_0(i,2)))
temp = [temp; node_0(i,:)];
end
end
node_0 = [temp; node_1(end,:)];
node_1 = node_1(1:end-1,:);
end
delete = 0;
% solve the linear relaxation problem for the current node by column
% generation ’air1_Branch.m’
[Z,A,C,obj_val,Seq,Time] = air1_Branch(node_1,node_0);
numberofcolumn = [numberofcolumn length(C)]
if obj_val(end) > UB+0.0001
%% LP > UB, prune the node
delete = 1;
else
%% LP <= UB , Check if it is integer or not
if floor(Z) == Z
%%% LP is integer
if abs(obj_val(end)-LP_LB)<0.0001
%% IP = LP_LB, then output the solution
index = find(Z==1);
for i = 1:length(index)
Sequence = [Sequence; Seq(index(i),:)];
LandingTime = [LandingTime; Time(index(i),:)];
Cost = Cost + C(index(i),:);
end
t = toc
break
82
else
%% LP > LP_LB, update the UB, delete the node
delete = 1;
UB = obj_val(end);
index = find(Z==1);
end
end
end
end
% output the result
if isempty(index)
for i = 1:length(index)
Sequence = [Sequence; Seq(index(i),:)];
LandingTime = [LandingTime; Time(index(i),:)];
Cost = Cost + C(index(i),:);
end
end
% the total running time
t = toc