Methodology for Analysis, Modeling and Simulation of Airport Gate-waiting Delays A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy at George Mason University By Jianfeng Wang Master of Science George Mason University, 2007 Bachelor of Science Civil Aviation University of China, 2002 Director: Dr. John F. Shortle, Associate Professor Co-Director: Dr. Lance Sherry, Associate Professor Department of Systems Engineering and Operations Research Spring Semester 2011 George Mason University Fairfax, VA c 2011 by Jianfeng Wang Copyright ⃝ All Rights Reserved ii Dedication I dedicate this dissertation to my wife Xiaoxia Tang, my mother Hui Li, my father Bing Wang, and my grandfather Zhongxue Wang. iii Acknowledgments I would like to thank the following people who made this possible. I would like to deeply thank my dissertation director, Dr. John F. Shortle for his tremendous care, encouragement and help on my Ph.D. completion. Dr. Shortle cared very much for my Ph.D. study. At decision points in my Ph.D. study, the question in Dr. Shortle’s mind was what would benefit me the most. Dr. Shortle’s encouragement kept me motivated to complete the dissertation. With Dr. Shortle beside me, I never lost hope no matter how difficult the situation was. Dr. Shortle offered tremendous help on my Ph.D. study. He spent lots of time in advising me and thinking for me. He devoted much time to editing this dissertation. He is very dependable. When I needed help, he always made time for me, sometimes even over the weekend. After I started working full time, Dr. Shortle tried to accommodate my schedule. For me, Dr. Shortle is a role model of a first class professor, a responsible researcher and an integral person. The luckiest thing for me in this journey was to have him as my dissertation director, and it is a great honor for me having been one of his Ph.D. students. I would like to thank my dissertation co-director, Dr. Lance Sherry for his advice, connections, encouragement, and challenges. Dr. Sherry advised me to use a problem-oriented approach to identify a dissertation topic, to emphasize real world applications, and to use goal-oriented approach to plan daily activities. Dr. Sherry used his extraordinary capability to let me connect to many people to find shortcuts to complete the dissertation. For example, Dr. Sherry connected me to Juan Wang on statistics, to Guillermo Calderon-Meza on database and SQL, to Chris Smith in Sensis Corporation on an algorithm validation, to David Jacobs on gate operation visualization, to Mike Dupuy on dissertation editing, etc. When I had challenges and got frustrated, Dr. Sherry often noticed it and offered strong encouragement with his can-do spirit and bravery. For example, when I was frustrated for not getting airline data, he told me that data would not be an obstacle. When I saw only a few people in a conference room to listen to my presentation, he told me that my job was to present it to one person and to make the person understand. Dr. Sherry also offered tough questions for me to think more and be better prepared for presentations. I would like to thank Dr. George L. Donohue’s thought-provoking questions and suggestions to make my dissertation realistic and applicable for policy decisions. His insightful comments in seminars at the Center for Air Transportation Systems Research (CATSR) sparked thinking and shaped my view on the air transportation system. I would like to thank Dr. Alexander Brodsky for helping me to make this dissertation understandable outside of the aviation community. I especially thank him for improving my dissertation introduction, background, and conclusion. I would like to thank Dr. Chun-Hung Chen for offering my first assistantship in the U.S. so that I could pursuit my Ph.D. at George Mason University (GMU). I also thank him for teaching me simulation. iv I would like to thank fellow CATSR students for helping me in my Ph.D. study. I would like to thank Guillermo Calderon-Meza for setting up the BTS database server and Concurrent Versions System (CVS) at CATSR and helping me with SQL programming and Java programming. I would like to thank Juan Wang for helping me with statistics. I would like to thank Maricel Medina for helping me with Excel pivot tables. I would like to thank Abdul Qadar Kara for debugging in Java and recommending CVS. I would like to thank Raheem Rufai on Java programming and debugging. I would like to thank John Ferguson on his comments on my presentation slides and checking ATL airport gates for me in person. I would like to thank Yimin Zhang and Vivek Kumar for their comments on my presentation slides. I would like to thank the following people in industry. I would like to thank Chris Smith in Sensis Corporation for his courtesy to provide JFK airport surface operation videos in Aerobahn. I would like to thank Dr. Tony Diana and Akira Kondo in the FAA for providing access to the ASPM databases and help in understanding the databases. I would like to thank Dr. Terry Thompson in Metron Aviation for his advice on making a good presentation. I would like to thank the following GMU graduates, students, and friends. I would like to thank Dr. Donghai He for encouraging me not to be afraid of working on my Ph.D. while working full time. He let me work hard such that year 2010 — the last year of my Ph.D. study and the first year of my professional career — became the most achieving year for me in life so far. He also helps me technically in many ways, including simulation debug, LATEX, recommending JabRef to manage references, etc. I would like to thank Dr. Wei Sun on his advice on Ph.D. study and LATEX. I would like to thank Mike Dupuy for editing my dissertation. I would like to thank my supervisor at CSSI, inc., Melissa Ohsfeldt, who always encourages team members on continuing education and publishing papers and is flexible with work schedule. Finally, I would like to thank my family for their support and influence. I thank my wife Xiaoxia Tang, who keeps supporting me to accomplish this goal from September 2004 to February 2011 despite my limited economic and time contribution to the family in this long journey. I also appreciate her reminding me to stay focused on my study from distractions. I thank my mother Hui Li, who encourages me to work hard when young, to be brave to face difficulties, and to respect any work I do. I thank my grandfather Zhongxue Wang, who provided me with pre-school education and cultivated my interest in natural science. I learned from him to be truthful to the work I do and to be truthful as a person. v Table of Contents Page List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . List of Abbreviations . . . . . . . Abstract . . . . . . . . . . . . . . 1 Introduction . . . . . . . . . 1.1 Airport Gate Congestion . . . . xiv xv 1 2 Problem Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Research Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 1.2.2 Research Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Unique Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 Summary of Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 Potential Readers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Background and Literature Review . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 1.2 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Airport Operations and Gate-waiting Delays . . . . . . . . . . . . . . . . . 10 2.1.1 The Gate Assignment Process . . . . . . . . . . . . . . . . . . . . . . 10 2.1.2 2.1.3 Gate Arrival Process . . . . . . . . . . . . . . . . . . . . . . . . . . . Turnaround Operations . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 Related literature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Gate-waiting Delay Metric . . . . . . . . . . . . . . . . . . . . . . . . 14 14 2.2.2 Gate-waiting Delay Functional Causes . . . . . . . . . . . . . . . . . 15 2.2.3 Gate-waiting Delay Mitigation Strategies . . . . . . . . . . . . . . . 16 2.2.4 Relationship Between Gate, Taxiway and Runway Capacity . . . . . 22 Summary of Key Gaps in the Literature . . . . . . . . . . . . . . . . . . . . 23 Data Sources and Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1 Data Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 BTS Airline On-Time Performance Database . . . . . . . . . . . . . 3.1.2 ASPM Individual Flights Database and Taxi Times Database . . . . 25 25 26 3.1.3 26 2.2 2.3 3 . . . . ix xi Comparison of BTS and ASPM Databases . . . . . . . . . . . . . . . vi 3.2 3.3 4 3.2.1 Modeling of Taxi-in Process and Gate-occupancy Process . . . . . . 30 3.2.2 Algorithm 1: Estimation and Validation of Gate-waiting Delay . . . 31 3.2.3 Algorithm 2: Estimation of Gate Occupancy Time . . . . . . . . . . 33 Key Limitations and Assumptions . . . . . . . . . . . . . . . . . . . . . . . 34 . . . . . . . . . . . . 36 Gate Delay Characteristics at Major U.S. Airports . . . . . . . . . . . . . . 37 4.1.1 Gate Delay by Airport . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.2 Gate Delay by Day . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.3 Gate Delay by Time of Day . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.4 Gate Delay by Carrier . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.5 Gate Delay by Aircraft Size . . . . . . . . . . . . . . . . . . . . . . . 47 Functional Causes of Gate Delay in High Gate Delay Days . . . . . . . . . . 47 4.2.1 Analysis of Carrier Aggregated Data (6 Airports) . . . . . . . . . . . 49 4.2.2 Analysis of Carrier Specific Data (LGA) . . . . . . . . . . . . . . . . 56 Analysis Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.3.1 Average Gate Delay Across the OEP-35 Airports . . . . . . . . . . . 63 4.3.2 High Gate-Delay Days at Six Major Airports . . . . . . . . . . . . . 63 Gate Delay Simulation Model and Analysis . . . . . . . . . . . . . . . . . . . . . 65 5.1 Gate-delay Simulation Model . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.1.1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.1.3 Model Description and Data Sources . . . . . . . . . . . . . . . . . . 69 5.1.4 Modeling Assumptions and Limitations . . . . . . . . . . . . . . . . 78 5.1.5 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Simulation Results and Analysis . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2.1 Canonical Airport Simulation . . . . . . . . . . . . . . . . . . . . . . 80 5.2.2 5.2.3 5.2.4 5.2.5 LGA Simulation . . . . . . . ATL Simulation . . . . . . . DFW Simulation . . . . . . . Simulation Results Summary . . . . 88 92 94 98 Conclusions and Recommendations for Future Research . . . . . . . . . . . . . . 6.1 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Gate Delay Severity . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 102 102 4.2 4.3 5.2 6 28 30 Gate-waiting Delay Characteristics and Functional Causes 4.1 5 3.1.4 Other Data Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 6.1.2 Gate Delay Characteristics . . . . . . . . . . . . . . . . . . . . . . . 102 6.1.3 Gate Delay Functional Causes . . . . . . . . . . . . . . . . . . . . . 103 6.1.4 Gate Delay Mitigation Strategies . . . . . . . . . . . . . . . . . . . . 103 Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Improved Gate Delay Modeling . . . . . . . . . . . . . . . . . . . . . 103 103 6.2.2 104 Industrial Applications . . . . . . . . . . . . . . . . . . . . . . . . . . A Functional Cause Identification of Extreme Gate Delays Using Carrier Aggregated Data (BTS Data) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 A.1 A.2 A.3 A.4 A.5 A.6 A.7 . . . . . . . 106 107 108 109 110 111 112 B Simulation Model Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 169 LGA . . . . . . . . . ATL . . . . . . . . . JFK . . . . . . . . . EWR . . . . . . . . DFW . . . . . . . . MIA . . . . . . . . . 6 Airport Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . List of Tables Table Page 3.1 Coverage of BTS and ASPM databases . . . . . . . . . . . . . . . . . . . . . 27 3.2 Flights recorded in various data sources . . . . . . . . . . . . . . . . . . . . 27 3.3 Required parameters and data sources . . . . . . . . . . . . . . . . . . . . . 30 3.4 Results for arrival departure pairing, ATL, summer 2007, BTS data . . . . 34 4.1 Scope of the analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2 Top 10 airports (if available) which have high gate-waiting fraction flights, Algorithm 1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Gate-waiting delay by major carriers at several major U.S. airports, Algorithm 1a (ASPM data) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 41 46 Gate-waiting delay difference between major carriers, three major airports in the New York, Algorithm 1a (ASPM data) . . . . . . . . . . . . . . . . . 46 4.5 Pearson correlation coefficients between gate-waiting delay and aircraft size, 4.6 ASPM data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specific days analyzed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Gate Delay Functional Causes in 12 High Gate-delay Days at LGA in Summer 59 5.1 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deterministic simulation model parameters and assumptions illustrated with LGA, part 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.2 48 55 Deterministic simulation model parameters and assumptions illustrated with LGA, part 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.3 Stochastic simulation model parameters . . . . . . . . . . . . . . . . . . . . 72 5.4 Demand disaggregation, fictitious data . . . . . . . . . . . . . . . . . . . . . 76 5.5 Disruption: one factor at a time . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.6 Eight factors to be investigated, canonical airport (one carrier) . . . . . . . 86 5.7 One factor at a time for disruption and factorial design for mitigation strategies 87 5.8 Calculated mitigation effects on disruptions, canonical airport . . . . . . . . 89 5.9 Eight factors to be investigated, LGA (AA, MQ, DL, OH) . . . . . . . . . . 91 ix 5.10 Calculated mitigation effects on disruptions, LGA . . . . . . . . . . . . . . 93 5.11 Impact of common gates on gate delay reduction; disruption: arrival delay, LGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.12 Eight factors to be investigated, ATL (DL, FL) . . . . . . . . . . . . . . . . 95 5.13 Calculated mitigation effects on disruptions, ATL . . . . . . . . . . . . . . . 96 5.14 Impact of common gates on gate delay reduction; disruption: gate-blocking time extension, ATL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.15 Eight factors to be investigated, DFW (AA, MQ) . . . . . . . . . . . . . . . 99 5.16 Calculated mitigation effects on disruptions, DFW . . . . . . . . . . . . . . 100 A.1 Functional Causes of High Gate Delay in the Worst 3 Days at LGA in Summer 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Functional Causes of High Gate Delay in the Worst 3 Days at ATL in Summer 106 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Functional Causes of High Gate Delay in the Worst 3 Days at JFK in Summer 107 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4 Functional Causes of High Gate Delay in the Worst 3 Days at EWR in 108 Summer 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5 Functional Causes of High Gate Delay in the Worst 3 Days at DFW in 109 Summer 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.6 Functional Causes of High Gate Delay in the Worst 3 Days at MIA in Summer 110 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7 Gate Delay Functional Causes in 18 High Gate-delay Days in Summer 2007 111 112 x List of Figures Figure Page 1.1 Loop of aircraft phases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Gate waiting at penalty box at Chicago O’Hare airport . . . . . . . . . . . 3 1.3 High gate-delay-fraction days in OEP-35 airports, summer 2007, Algorithm 1b (will be discussed in Section 3.2.2) . . . . . . . . . . . . . . . . . . . . . 4 2.1 Chronological issues related to gate delay . . . . . . . . . . . . . . . . . . . 11 2.2 Gate assignment GUI (an arrow represents a flight; a color represents an aircraft type) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 Functional causes of gate-waiting delay . . . . . . . . . . . . . . . . . . . . . 15 2.4 Gate delay mitigation strategies . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1 Delta and Northwest terminal and five remote gates at LGA. The fact that Comair’s Gate 5A has no jet bridge or contact gate parking and that two regional jets park at the remote gates indicate that Comair uses the five remote gates; Source: Google Maps snapshot on 7/6/2009. . . . . . . . . . . 29 3.2 Taxi-in and gate-occupancy process . . . . . . . . . . . . . . . . . . . . . . . 30 3.3 Algorithm 1a: gate-waiting-delay estimation only using ASPM database . . 32 3.4 Algorithm 1b: gate-waiting-delay estimation primarily using BTS database 33 3.5 Arrival and departure pairing method . . . . . . . . . . . . . . . . . . . . . 34 4.1 Gate delay per scheduled fight in OEP 35 airports, summer 2007, Algorithm 4.2 1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gate-delay fraction in OEP 35 airports, summer 2007, Algorithm 1b . . . . 4.3 Gate delay per scheduled fight in OEP 35 airports, summer 2007, Algorithm 4.4 40 1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . High gate-delay-fraction days in OEP-35 airports, summer 2007, Algorithm 1b 40 4.5 Rough gate/runway capacity ratio at some major U.S. airports . . . . . . . 42 4.6 Gate-waiting delay by day at ORD, Algorithm 1b . . . . . . . . . . . . . . . 43 4.7 Daily gate delay of high gate-delay airports . . . . . . . . . . . . . . . . . . 44 4.8 Gate-waiting percentage by time, Algorithm 1b (BTS data) . . . . . . . . . 45 xi 38 39 4.9 Scatter plot of gate-waiting delay in minutes by number of seats at EWR, Algorithm 1a (ASPM data) . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.10 Comparison of daily total gate delay and schedule volume, ATL and LGA, summer 2007, BTS data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.11 Functional cause identification, ATL, 06/11/2007 . . . . . . . . . . . . . . . 51 4.12 Functional cause identification, ATL, 07/29/2007 . . . . . . . . . . . . . . . 52 4.13 Functional cause identification, LGA, 06/27/2007 . . . . . . . . . . . . . . . 54 4.14 Cancellations on 4 days, ATL, BTS data . . . . . . . . . . . . . . . . . . . . 55 4.15 Daily gate-waiting delay and QQ plot against gamma model, summer 2007 57 4.16 Total gate-waiting delay by time of day and carrier, LGA . . . . . . . . . . 58 4.17 Gate usage of American and American Eagle, LGA, 6/27/2007 . . . . . . . 60 4.18 Comair gate-waiting delay, arrival rate at LGA on 8/9/2007 . . . . . . . . . 61 4.19 Gate delay and gate-occupancy time by time of day (actual gate-in time), American and American Eagle . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.1 Gate delay functional causes and mitigation strategies . . . . . . . . . . . . 66 5.2 Critical times in gate operation . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.3 The remote gate area at Washington Dulles International Airport . . . . . . 69 5.4 5.5 Simulation model overview . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulation model demand input, LGA data . . . . . . . . . . . . . . . . . . 73 74 5.6 Demand disruption A: arrival delay; start hour: 19, duration: 2 hours; arrival delay: 3 hours; fictitious data . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7 75 Demand disruption B: regular turn gate-blocking time extension; start hour: 19, duration: 2 hours; gate-blocking time extension multiplier: 2; fictitious 5.8 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demand disruption C: regular turns converted to ending turns; start hour: 75 19, duration: 2 hours; fraction of regular turns converted to ending turns: 0.5; fictitious data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Simulation model supply disruption and mitigation; LGA data . . . . . . . 77 5.10 Canonical airport demand profile . . . . . . . . . . . . . . . . . . . . . . . . 81 5.11 Canonical airport gate occupancy . . . . . . . . . . . . . . . . . . . . . . . . 82 5.12 Impact of disruptions: one factor at a time, canonical airport . . . . . . . . 83 5.13 Impact of demand disruption A: arrival delay; canonical airport . . . . . . . 84 5.9 5.14 Impact of disruptions (AA, MQ) on total daily gate delays (AA, MQ, DL, OH): one factor at a time, LGA . . . . . . . . . . . . . . . . . . . . . . . . . xii 90 5.15 Impact of disruptions (DL) on total daily gate delays (DL, FL): one factor at a time, ATL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.16 Impact of disruptions (AA,MQ) on total daily gate delays (AA,MQ): one factor at a time, DFW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 A.1 Gate delay functional cause identification at LGA . . . . . . . . . . . . . . . 106 A.2 Gate delay functional cause identification at ATL . . . . . . . . . . . . . . . 107 A.3 Gate delay functional cause identification at JFK . . . . . . . . . . . . . . . 108 A.4 Gate delay functional cause identification at EWR . . . . . . . . . . . . . . 109 A.5 Gate delay functional cause identification at DFW . . . . . . . . . . . . . . 110 A.6 Gate delay functional cause identification at MIA . . . . . . . . . . . . . . . 111 xiii List of Abbreviations ASPM Aviation System Performance Metrics ATC Air Traffic Control BTS Bureau of Transportation Statistics FAA Federal Aviation Administration NAS National Airspace System NextGen Next Generation Air Transportation System OEP Operational Evolution Plan OOOI Out of the gate, Off the ground, On the ground and Into the Gate ASQP Airline Service Quality Performance ARINC Aeronautical Radio, Incorporated xiv Abstract METHODOLOGY FOR ANALYSIS, MODELING AND SIMULATION OF AIRPORT GATE-WAITING DELAYS Jianfeng Wang, PhD George Mason University, 2011 Dissertation Director: Dr. John F. Shortle Dissertation Co-Director: Dr. Lance Sherry This dissertation presents methodologies to estimate gate-waiting delays from historical data, to identify gate-waiting-delay functional causes in major U.S. airports, and to evaluate the impact of gate operation disruptions and mitigation strategies on gate-waiting delay. Airport gates are a resource of congestion in the air transportation system. When an arriving flight cannot pull into its gate, the delay it experiences is called gate-waiting delay. Some possible reasons for gate-waiting delay are: the gate is occupied, gate staff or equipment is unavailable, the weather prevents the use of the gate (e.g. lightning), or the airline has a preferred gate assignment. Gate-waiting delays potentially stay with the aircraft throughout the day (unless they are absorbed), adding costs to passengers and the airlines. As the volume of flights increases, ensuring that airport gates do not become a choke point of the system is critical. The first part of the dissertation presents a methodology for estimating gate-waiting delays based on historical, publicly available sources. Analysis of gate-waiting delays at major U.S. airports in the summer of 2007 identifies the following. (i) Gate-waiting delay is not a significant problem on majority of days; however, the worst delay days (e.g. 4% of the days at LGA) are extreme outliers. (ii) The Atlanta International Airport (ATL), the John F. Kennedy International Airport (JFK), the Dallas/Fort Worth International Airport (DFW) and the Philadelphia International Airport (PHL) experience the highest gate-waiting delays among major U.S. airports. (iii) There is a significant gate-waitingdelay difference between airlines due to a disproportional gate allocation. (iv) Gate-waiting delay is sensitive to time of a day and schedule peaks. According to basic principles of queueing theory, gate-waiting delay can be attributed to over-scheduling, higher-than-scheduled arrival rate, longer-than-scheduled gate-occupancy time, and reduced gate availability. Analysis of the worst days at six major airports in the summer of 2007 indicates that major gate-waiting delays are primarily due to operational disruptions — specifically, extended gate occupancy time, reduced gate availability and higher-than-scheduled arrival rate (usually due to arrival delay). Major gate-waiting delays are not a result of over-scheduling. The second part of this dissertation presents a simulation model to evaluate the impact of gate operational disruptions and gate-waiting-delay mitigation strategies, including building new gates, implementing common gates, using overnight off-gate parking and adopting selfdocking gates. Simulation results show the following effects of disruptions: (i) The impact of arrival delay in a time window (e.g. 7 pm to 9 pm) on gate-waiting delay is bounded. (ii) The impact of longer-than-scheduled gate-occupancy times in a time window on gate-waiting delay can be unbounded and gate-waiting delay can increase linearly as the disruption level increases. (iii) Small reductions in gate availability have a small impact on gate-waiting delay due to slack gate capacity, while larger reductions have a non-linear impact as slack gate capacity is used up. Simulation results show the following effects of mitigation strategies: (i) Implementing common gates is an effective mitigation strategy, especially for airports with a flight schedule not dominated by one carrier, such as LGA. (ii) The overnight off-gate rule is effective in mitigating gate-waiting delay for flights stranded overnight following departure cancellations. This is especially true at airports where the gate utilization is at maximum overnight, such as LGA and DFW. The overnight off-gate rule can also be very effective to mitigate gate-waiting delay due to operational disruptions in evenings. (iii) Self-docking gates are effective in mitigating gate-waiting delay due to reduced gate availability. Chapter 1: Introduction Growth in demand for air travel has outstripped the growth in capacity provided by airports and the Air Navigation Service Providers (ANSP). In 2007, flight delays cost passengers and airlines $12 to $14 billion in lost time and fuel [Robyn, 2008]. In 2010, nationwide air traffic congestion is predicted to cost $46 billion to the nation’s economy [FAA, 2009]. Air passenger traffic is forecasted to double in 15 years and triple in 20 years with an expected yearly growth rate of 5 percent [Yeamans, 2001]. To meet growing demand, aircraft manufacturers have developed the A380 ‘super-jumbo’ jet that will be capable of carrying from 555 to 800 passengers, and the Next Generation Air Transportation System (NextGen) is designed to increase the capacity of the national airspace system (NAS), while increasing efficiency and safety through the use of leading edge technology by using satellites for navigation and communication [JPDO, 2007]. Currently, the capacity of the air transportation system is limited by airport capacity in the U.S. [Dillingham, 2005] and airports will continue to be a primary element in the total capacity of the air transportation system [JPDO, 2007, chapter 3, page 5]. Airport capacity is affected by many factors such as the configuration and geometry of the airport, the organization and procedures for airspace use (i.e., air traffic management), airport operating procedures (i.e., how the runways are used), airmanship, and technology. Of prime concern to the air transport system are the adequacy of the runways to handle the number of aircraft movements and the adequacy of the number of terminal gates to load and unload passengers and cargo. If the runway capacity or the terminal gate capacity is inadequate, delays will occur [McGregor, 2004]. “Runway capacity at the busiest airports is the primary limiting factor in NAS operations today, and even with the maximum possible efficiency gains, some airports may need additional runways to accommodate the expected traffic growth. 1 Focus of this research Gate queue Travel starting and ending point Takeoff queue Landing queue Research scope Figure 1.1: Loop of aircraft phases Implementing super-density arrival/departure procedures enables closer spacing for arrivals and departures and new runways can be built much closer to existing runways” [JPDO, 2007, chapter 2, page 18]. The secondary major limiting factor is the number of gates at an airport [McGregor, 2004]. In enabling NextGen, one important component is “the reduction of ground movement delays and congestion due to constrained airport infrastructure” by “providing sufficient gate capacity” [JPDO, 2007, chapter 3, page 26]. 1.1 Airport Gate Congestion As an airplane arrives to and departs from an airport, it passes through several potential choke points. These include arrival and departure paths, runways, taxiways, ramps, gates, and so forth (Figure 1.1 shows a notional illustration). Depending on the demand and number of resources, different points in this process may become constrained and act as a choke point. For example, after an aircraft lands on a runway, there are scenarios in which it cannot pull into its assigned gate and must sit on the tarmac to wait. This phenomenon is defined as gate waiting. Several airports have created space for flights to “park” if their assigned gates are not available. This space is known as the “penalty box”. Figure 1.2 shows the penalty box at Chicago O’Hare airport [Matt, 2005]. Studies have identified the stages of flight in which delays occur and the causal factors that result in delays. For example, the Department of Transportation [Mead, 2001] classifies delays as turnaround delay, taxi-out delay, airborne delay and taxi-in delay. Taxi-in delay 2 Penalty box Figure 1.2: Gate waiting at penalty box at Chicago O’Hare airport accounts for about 8% of overall delay [Mueller and Chatterji, 2002], and gate-waiting delays (gate delay for short) are the dominant contributor to taxi-in delays [Idris et al., 1999, Gosling, 1993]. Figure 1.3 shows the gate-waiting severity at the U.S. OEP-35 airports1 in the summer of 2007. (The specific algorithms used to generate these results will be discussed in Section 3.2.2.) The dark bars in the graph, show the number of days during which 30% or more of the flights experienced a gate-waiting delay in the summer of 2007. Out of the 35 major airports, 10 had at least one such day; the other 24 airports did not have any such days, so they are not shown on the x-axis. The lighter bars in the graph show the number of days during which 30% or more of the flights experienced gate-waiting delay and pulled into the gate after the scheduled arrival time. Flights that experienced gate-waiting delay due to early arrival, but ended up arriving at the gate on time, are not counted. DFW, ATL, JFK and PHL have the most days during which 30% or more of the flights experienced a strictly positive gate-waiting delay. On average, 66% of these days in the three airports were due to early arrivals, representing padding in the schedule and inflexibility/inability to change 1 commercial U.S. airports with significant activity [FAA, 2007] 3 60 50 40 Number of days Early arrivals 30 30% or more flights experience gate waiting 30% or more flights experience gate waiting and arrive later than scheduled 20 10 0 DFW JFK PHL ATL MSP LGA IAH MIA EWR LAX Airport Figure 1.3: High gate-delay-fraction days in OEP-35 airports, summer 2007, Algorithm 1b (will be discussed in Section 3.2.2) gate assignments when early arrivals occur. Gate delays affect airline operations and scheduling in many ways. First, gate-waiting delay increases the cost of operating a flight, including fuel burned, crew cost, aircraft life and engine life. Second, gate-waiting delays may have a propagation effect due to aircraft turnaround and crew and passenger connections [Xu, 2007]. If the airport is the passenger’s final destination, the passenger’s trip delay is equal to this flight’s arrival delay. However, if gate-waiting delay causes passengers to miss their connections, the passenger’s trip delay can be much higher than the arrival delay [Wang, 2007, Sherry and Donohue, 2009]. Third, an airline’s schedule is limited by gate availability. For example, AirTran was not able to add new flights at ATL until 2007 when three new gates were added [Ramos, 2007]. Gate delays affect an airport’s attractiveness to carriers. Gate availability is a prerequisite to attract new entrant carriers and to expand operations of existing carriers [Belliotti, 2008, page 30]. Gate delay can also affect the FAA Air Traffic Control (ATC)’s surface operations if airports do not have enough space to hold aircraft waiting for a gate. For example, Boston Logan International Airport (BOS) does not have holding pads where aircraft can wait for 4 gates, so held aircraft may contribute to surface congestion [Idris et al., 1999]. Gate delay can cause severe customer service problems. Being “trapped on a plane for several hours causes a lot of frustration” [Stoller, 2009]. In January 1999, severe gate delays of Northwest Airlines flights at Detroit in stranded hundreds of passengers on aircraft queued on taxiways for up to 8.5 hours [Slater, 1999]. On August 8, 2009, Continental Airlines and ExpressJet Airlines caused the passengers on board Continental Express flight 2816 to remain on the aircraft at Rochester International Airport for almost 6 hours [DOT, 2009a]. In November 2008, the Department of Transportation proposed a rule to enhance airline passenger protections, including a provision that requires airlines to adopt contingency plans for lengthy tarmac delays and incorporate them in their contracts of carriage [DOT, 2009a]. New consumer rules prohibit U.S. airlines operating domestic flights from permitting an aircraft to remain on the tarmac for more than three hours [DOT, 2009b]. Early identification of potential gate congestion is important to take proactive approach. Atlanta airport has been historically gate constrained. Until 2007, it had not added gates since building the international E concourse prior to the 1996 Olympics [Ramos, 2007]. After its 5th runway was commissioned in 2006, gate constraints emerged as a bottleneck [Terreri, 2009] and three new gates were finally added in 2007 [Ramos, 2007]. However, the three new gates are not enough to meet demand and have become “a sore point between the airport and its two hub airlines, Delta and AirTran” as both airlines seek the gates’ exclusive use2 . The severe gate constraint was not realized until the fifth runway was commissioned. After high gate delay occurred, a reactive approach was taken to implement surface management system and to assign common gates [Terreri, 2009]. The gate delay could have been better mitigated if these processes were started earlier. As the volume of aircraft increases in the national airspace system, ensuring that airport gates do not become a choke point of the system is critical. 2 The airport finally assigned them as common use [Ramos, 2007] 5 1.2 Problem Statement Research on gate delay is limited and insufficient due to limited data availability and rarity of severe gate delays. Many researchers refer to the gate-waiting phenomenon [Idris, 2001, Richards, 2008]. But most existing research on gate delay is limited to anecdotes [Slater, 1999], experience or qualitative analysis [Gosling, 1993]. Few quantitative metrics have been given on the percentage of gate delay as a cause of taxi-in delay [Idris et al., 1999]. NextGen’s concept of operations “examines concepts that can advance the capabilities of existing infrastructure and enable new infrastructure to be developed as needed,” but do not identify or intend to identify specific locations for gate needs at existing airports [JPDO, 2007, chapter 3, page 1]. No methodology has been developed to identify functional causes of system-wide gate delay. Systematic analysis of functional causes of severe gate delay is limited because severe gate disruptions are rare [Slater, 1999]. Mitigation strategies of gate delay have been suggested individually, but their impacts have not been compared quantitatively or evaluated collectively. 1.2.1 Research Objectives The objectives of this research are as follows. 1. Estimate the severity of gate delay at major U.S. airports. The objective is to evaluate the degree to which airport gates are a limiting resource in the flow of airplanes arriving to and departing from an airport. 2. Investigate characteristics of gate delay (e.g. effects of carrier, aircraft type, time of day, etc.). The objective is to determine how gate delays are distributed across different carriers, aircraft types, and time, etc. For example, it is possible that gate delays are a problem only for local to specific carriers, in which case gate exchange among carriers would be helpful. 6 3. Identify functional causes of gate delay. The objective is to consider the system as a queueing system where airplanes are users and gates are servers. According to queueing theory [Gross et al., 2008], waiting time is a function of arrival (runway landing) patterns, service (gate occupancy) patterns, number of available servers (gates), and the queueing discipline (first-come-first served, priority, etc.). The objective is to identify which of these functions contributes most to the worst gate delays. 4. Evaluate mitigation strategies on gate delay. The objective is to compare different gate-delay reduction initiatives and investigate how effective these strategies are in dealing with gate delay under different functional causes. 1.2.2 Research Approach To achieve the four objectives, the following approach is adopted: 1. Develop a set of unique algorithms based on publicly available data to: (a) Estimate the gate delay of each arriving flight; (b) Estimate the gate occupancy time of each turn; (c) Construct aggregated hourly arrival rate, average gate occupancy time, and gate utilization; 2. Build a gate-delay simulation to evaluate mitigation strategies of different scenarios: (a) Develop a stochastic process-based discrete event simulation queueing model to simulate aircraft movements through gate system; (b) Construct disruption scenarios based on historical analysis; (c) Conduct experiments of disruption scenarios with mitigation strategies; (d) Conduct an experimental design to rank factors and interactions between them by effects on gate delay. 7 1.3 Unique Contributions There are three major contributions of this dissertation: 1. This research develops a systematic method for analysis of gate-delay severity and characteristics. Gate-delay comparison across different airports can be used to identify specific locations of airport development needs. The asymmetry of gate delay across airlines can be used by airports for decision making on airline gate allocation and common gate reservation. 2. This research develops a systematic method to identify functional causes for severe gate delays. 3. This research develops a gate-delay simulation model, which enables researchers to evaluate the impacts of major gate-delay functional causes and mitigation strategies collectively. For example, the simulation can be used to answer questions like, “How do common gates mitigate gate delay compared with adding new gates?” The model can also be used to predict gate congestion beyond historical boundaries. 1.4 Summary of Results This dissertation shows the asymmetry of gate delay across different airports, carriers, days and time of day. Airports with the biggest gate-delay problems in 2007 were ATL, JFK, DFW and PHL. There are significant gate delay differences between carriers as a result of disproportional gate allocation. On most days, gate delays are minor and do not limit throughput through the airport. However, the worst days tend to be extreme outliers. Observed severe gate delays were always related to operation disruptions, rather than over-scheduling. Disruptions include higher-than-scheduled arrival rate, longer gate occupancy time and reduced gate availability. Among the 18 worst days in the summer of 2007, higher-than-scheduled arrival delay occurred in 9 days, longer gate occupancy time occurred in 10 days, and reduced gate availability occurred in 10 days. 8 Use of common gates can mitigate gate delays effectively, especially for airports that are not dominated by a small number of carriers, such as LGA. Overnight off-gate parking can be effective in mitigating gate disruptions in evenings, especially at airports where gate utilization is at maximum overnight, such as DFW. There are diminishing returns in the use of multiple mitigation strategies. 1.5 Potential Readers Airlines can use this research to assist with the decision on flight cancellations and aircraft swapping — a process that often ignores gate constraints and delays. In addition, airlines can use this research to make decisions on gate exchange with other airlines, as well as investment on new gates/stands and automatic docking systems. Airports can use this research to gain insights of gate utilization and to assist policy decisions regarding common gates and gates allocation to airlines. The FAA can use this research to identify specific locations for airport development needs, considering runway/gate capacity expansion and departure/arrival operation management. 9 Chapter 2: Background and Literature Review This chapter reviews existing literature related to gate delay. Section 2.1 describes airport operations related to gate delay. Section 2.2 reviews research related to gate-waiting delays. Section 2.3 summarizes the key gaps in the literature. 2.1 Airport Operations and Gate-waiting Delays Gate delay occurs when a flight cannot pull into its gate and must therefore wait on the tarmac. This phenomenon is closely related to gate assignment, gate arrival process, turnaround process, etc. Figure 2.1 shows the chronological issues related to gate delay. 2.1.1 The Gate Assignment Process Gate-waiting delay is closely related to gate assignment, the process of assigning flights to gates. Gate assignment is usually handled in three phases [Bazargan, 2004]. Phase 1: Feasibility Check The first phase is a long term planning effort which occurs several months before the day of operation. Ground controllers check that a feasible gate assignment can be made with the proposed flight schedule, without making an actual gate assignment. A gate assignment planning tool (similar to what is shown in Figure 2.2) can be used to give an overall sense of the gate assignment plan. The schedule must be changed or reduced if there are not enough gates (except for over-scheduling). 10 Airports (sometimes with airlines): Terminal building and common gate allocation (sometimes exclusive gates allocation) (usually years before operation) Possible issue: over-scheduling, schedule padding (quick response to market) Airlines: publish schedule (about 3 months before operation) 0:00 Gate 1 Gate 2 Gate 3 …… Gate n 3:00 6:00 Possible issues: sub-optimal gate allocation to carriers and common gate reservation (slow response to market) 12:00 15:00 18:00 21:00 24:00 Airlines: make initial gate assignment (hours before operation, say 4 am on the operation day) Airlines / NAS / ATC: land aircraft (operation) Airlines: dock aircraft at gate (operation) Possible issue: not enough buffer time between two consecutive turns to absorb operation disruptions (early arrivals, late departures) Possible issue: arrival disruption (land early and no gate, land late and depart late, arrival cancellation) Possible issues: gate occupied, ground crew unavailable (manpower, weather), inflexible gate change policy Airlines: turn around aircraft (operation) Airlines: push back (sometimes needs ATC clearance or considers ATC information) ATC: sometimes hold aircraft at gate or other areas at an airport (operation) Possible issue: cancellation, flight crew shortage, ground crew shortage, gate hold due to GDP Figure 2.1: Chronological issues related to gate delay 0:00 3:00 6:00 12:00 15:00 18:00 21:00 24:00 Gate 1 Gate 2 Gate 3 …… Gate n Figure 2.2: Gate assignment GUI (an arrow represents a flight; a color represents an aircraft type) 11 Phase 2: Development of Daily Gate Assignment Plan The second phase involves development of a single-day plan prior to the start of the actual day of operation. A gate assignment tool, similar to the planning tool, can be used to get the initial gate assignment plan at the start of the day, or the initial gate board. This phase is the main focus of research on gate assignments. The objective is to improve the performance of initial gate assignments. The problem is usually modeled as an integer program [Haghani and Chen, 1998, Yan and Huo, 2001], a mixed integer program [Bolat, 1999, Bolat, 2000] or a network flow problem [Yan and Chang, 1998, Yan and Tang, 2007]. Due to uncertainty in the input data driving the gate assignment process, the gate assignment tool must be designed such that it produces solutions that are robust to uncertainty. Certain input parameters related to resource demand, such as the expected landing time and the expected pushback time, are difficult to predict prior to these events [Roling and Visser, 2007]. A gate assignment planning tool must therefore be able to adapt to perturbations in these input conditions, as well as to account for taxi-in delay due to taxiway congestions. Adding a buffer time usually improves robustness, but it is still a heuristic approach constrained by gate capacity. Phase 3: Change of Gate Assignment During Operation The third phase revises these daily plans throughout the day of operation due to irregular operations such as delays, bad weather, mechanical failures and maintenance requirements [Bolat, 2000]. The same gate assignment tool can be used to create the initial gate board at the beginning of the day (phase 2) and to update the gate assignment throughout the day (phase 3). These updates affect gate waiting, and hence flight on-time performance, as well as airport staffing and passenger relocations. The updates are made based on gate controllers’ experience sometimes with the assistance from computer algorithms. Some models have been developed to focus on gate changes [Gu and Chung, 1999, Yan and Tang, 2007]. In addition, some research has evaluated the relationship between the initial gate assignment plan and the real-time gate changes necessary to meet the stochastic 12 flight delays that occur in real operations [Yan et al., 2002, Yan and Tang, 2007, Dorndorf et al., 2007]. 2.1.2 Gate Arrival Process When an aircraft lands on a runway, it usually goes straight to the ramp (with possible taxiway delay) and pulls into its assigned gate. In some cases, an aircraft is unable pull into its gate and is obliged to hold on the tarmac to wait, due to gate unavailability, ground personnel unavailability, or other causes. The aircraft may stay on the ramp, penalty box, inactive taxiway, or inactive runway to wait. Generally, it is preferred to park the aircraft in a non-movement area to minimize disruption to taxiway and ramp operations. For example, Boston Logan International Airport (BOS) uses hangar positions to store aircraft that do not have a gate readily available [Idris, 2001]. Chicago O’Hare airport uses a penalty box to park gate-waiting aircraft temporarily [Matt, 2005]. New York John F. Kennedy International Airport (JFK) uses inactive taxiways (based on observation of Sensis Taxiview video1 ). 2.1.3 Turnaround Operations After arriving at the gate, an aircraft usually goes through a turnaround process to disembark passengers and embark passengers. The turnaround operation includes passenger deplaning and boarding, fueling, and other activities [Fricke and Schultz, 2008]. The turnaround operation has been mainly investigated using the Critical Path Method (CPM) [Braaksma and Shortreed, 1971, Idris et al., 1999, Wu and Caves, 2003, Fricke and Schultz, 2008] to study operational procedures consisting of several work flows in order to identify critical paths in the operation, including passenger flow, crew, catering, fueling, luggage, cleaning, maintenance, etc. After the turnaround operation, an aircraft may continue occupying its gate until its planned departure time to conform to its schedule or its destination airport capacity limit 1 http://www.sensis.com/docs/261/, accessed on Oct. 2, 2010 13 (Ground Delay Program). However, when its gate is requested by another aircraft, this flight may be pushed back to wait on the tarmac for runway departure. 2.2 Related literature Research related to this dissertation can be categorized into the following areas: 1. Gate-waiting delay metrics 2. Gate-waiting delay functional causes 3. Mitigation strategies of gate-waiting delay 4. Relationships between gate, taxiway and runway capacity 2.2.1 Gate-waiting Delay Metric Researchers have mainly described the gate-waiting delay phenomenon anecdotally [Slater, 1999, DOT, 2009a] or by experience [Gosling, 1993, Stoller, 2009, Richards, 2008]. Gatewaiting delay is considered to be the largest contributor of taxi-in delay [Gosling, 1993]. Metrics have been developed to quantify the severity of gate-waiting delay in several major airports. The Aircraft Communications Addressing and Reporting System (ACARS) records delay duration and cause based on voluntary pilot reports [Idris et al., 1999, Idris, 2001]. Percentages of total delays by cause show that, for Dallas/Fort Worth International Airport (DFW), Chicago O’Hare International Airport (ORD) and Boston Logan International Airport (BOS), there is a dominance of the taxi-in delays due to gate congestion (gate occupied) over the other delay categories, such as ramp and field congestion [Idris et al., 1999]. Based on an analysis by the Department of Transportation [Mead, 2001], taxi-in delay accounts for about 8% of overall delay [Mueller and Chatterji, 2002]. To date, the author is not aware of any system wide analysis of gate delay using quantitative metrics. 14 Estimation and characteristics Functional causes Stroller 2009 Idris 2001 United 2007 Gate Delay Factors •Airport •Day •Time •Carrier •Aircraft size Idris 2001 Idris 2001 Gross et al. 2008 Bazargan 2004 Over-scheduling Higher Arrival Rate Lower Service Rate Idris 2001 Richards 2008 Idris 1999 United 2007 Lower Gate Utilization Waiting time λ 0(t ) →1 µ 0(t )c 0 1 λ(t) µ(t) ⋅ c(t) λ (t ) > λ 0(t ) λ (t ) : Arrival rate µ (t ) : Service rate µ (t ) < µ 0(t ) c(t ) : No. servers c(t ) < c 0 Figure 2.3: Functional causes of gate-waiting delay 2.2.2 Gate-waiting Delay Functional Causes Gate-related delays can be understood according to concepts in queueing theory [Gross et al., 2008], where arriving flights can be thought of as “customers” and gates as “servers”. Generally speaking, congestion in queueing theory is determined by the utilization quantity, ρ(t) = λ(t)/c(t)µ(t), where λ(t) is the arrival rate at time t, c(t) is the number of servers at time t, and µ(t) is the service rate of each server at time t. Higher values of ρ(t) correspond to greater congestion. Flight operations are based on a schedule where the scheduled utilization quantity is ρ0 (t) = λ0 (t)/c0 µ0 (t), where λ0 (t) is the scheduled arrival rate at time t, c0 is the nominal number of servers, and µ0 (t) is the scheduled service rate of each server at time t. There are four functional causes for gate delay, over-scheduling (ρ0 (t) is already high (approaching 1)), higher-than-scheduled arrival rate (λ(t) > λ0 (t)), lower-than-scheduled service rate (µ(t) < µ0 (t)), and reduced available gates or reduced utilization (c(t) < c0 ), as shown in Figure 2.3. Over-scheduling can result in gate-waiting delays [Stoller, 2009]. For example, some airlines over-scheduled their gates at Boston Logan Airport and consequently had more aircraft on the ground than the number of available gates [Idris, 2001]. Typically, airlines schedule gates for only up to 80% occupancy, knowing that they will need reserve capacity to deal with random occurrences [Horonjeff and McKelvey, 1993]. 15 High aircraft arrival rates and long gate occupancy times (compared with scheduled operations) can also be a reason for gate-waiting delay. When an arrival flight finds its gate occupied, it may be because the arrival aircraft is early; however, it is often due to the departure delay of its previous flight assigned to the same gate [Idris, 2001]. Gate delay can be also be caused by a reduced number of usable gates, which can be caused by a variety of reasons, including awaiting gate assignment, unavailable ramp staff or ground equipment, inclement weather [Idris et al., 1999, Richards, 2008] and airline preference for keeping the original gate assignment. Based on communication with a gate manager of a major airline, this particular airline usually lets an arriving aircraft wait for its original assigned gate even if there is an open alternative, when the gate conflict is detected late. The reason is that last minute gate reassignment requires crew and passengers on the ground to be redirected with short notice. Another scenario for the preference of using the original assigned gate is for early landings, when the itineracy of the aircraft, the crew, and the passengers are not disrupted by gate delay, as long as the gate arrival is on time. Generally, the original assigned gate is preferred unless the expected gate-waiting delay is too long. 2.2.3 Gate-waiting Delay Mitigation Strategies To deal with different functional causes of gate delay, different strategies2 can be used to mitigate gate delay as follows (also see Figure 2.43 ): 1. Increase gate capacity (increase c0 ), 2. Reduce scheduled gate occupancy time (increase µ0 ), 3. Reduce scheduled flight volume (reduce λ0 ), 2 One strategy directly mitigates the impact of one particular functional cause. However, the strategy may indirect mitigate the impact of other functional causes. 3 Strategies in grey color are less recommended because these strategies have large adverse effects or their effects are not direct. 16 Estimation and characteristics Functional causes Gross et al. 2008 Bazargan 2004 Stroller 2009 Idris 2001 United 2007 Mitigation strategies JFK Jetblue 2008 ATL 2011 Fricke 2008 Airline: reduce gate occupancy time Steuart 1974 Airline: under-schedule Over-scheduling Le 2006 Gate Delay Factors •Airport •Day •Time •Carrier •Aircraft size Idris 2001 Idris 2001 Higher Arrival Rate Lower Service Rate Manley 2008 Richards 2008 Reduced Idris 1999 United 2007 Gate Availability FAA: runway slot control ATC: traffic flow management Slater 1999 Airline: arrival cancellations Wang 2010 Airline / airport: off-terminal parking Neufville 2002 Idris 2001 Idris 2001 Airline / airport : more gates Richards 2008 Gu 1999, Yan 2002, Yan 2007, Dorndorf 2007 Airline / airport : common gates Airline / airport: self-docking gates Airline / airport: gate reassignment Figure 2.4: Gate delay mitigation strategies 4. Use traffic flow management, such as Ground Delay Program (GDP) to slow runway arrivals (reduce λ), 5. Cancel arrivals (reduce λ), 6. Tow aircraft off-gate (increase µ), 7. Use common gates (may increase c), 8. Use self-docking systems to improve gate reliability (increase c), 9. Improve gate assignment algorithms (increase c). Mitigation Strategies for Over-scheduling To deal with over-scheduling, the key is to reduce gate demand relative to gate capacity. There are three basic strategies: Increase the number of gates (c0 ), reduce the scheduled gate occupancy time (1/µ0 ), and reduce the scheduled number of flights (λ0 ). The first strategy is to increase gate capacity, that is, to increase c0 . If there is a big imbalance between demand and capacity, this is the only way to meet demand. Of course, 17 this is expensive and limited by the land at airports. Gates have two forms, contact gates and remote gates. Contact-gate capacity expansion usually requires terminal expansion because the gates need to be built with terminals. For example, on October 22, 2008, JetBlue opened its new Terminal 5 at John F. Kennedy International Airport (JFK) at the cost of approximately $800 million. The new terminal has 26 gates and can handle 500 daily departures and arrivals, almost twice the 270 flights the airline used to operate at JFK [Maynard, 2008]. At ATL, the new international terminal is projected to feature 12 new international gates with a projected delivery in 2011, at a cost of $1.4 billion [Tharpe, 2008]. Another new terminal scheduled to be completed after the new international terminal, featuring 70 additional domestic gates, is estimated to cost around $1.8 billion [Garrett, 2005]. Remote gates are used to park the aircraft remotely on hardstands and transport passengers via buses or vans to the concourses and terminals. However, such operations — already being used at many airports to avoid the expense of terminal and apron expansions — have proven to be quite expensive operationally. This arrangement is also inconvenient for passengers and service crews [Yeamans, 2001]. A key question is how many gates are needed since flights do not always arrive and depart on time. Stochastic models have been developed to model the uncertainty of arrival punctuality and aircraft gate occupancy time [Hassounah and Steuart, 1993,Wu and Caves, 2003]. Hassounah and Steuart [Hassounah and Steuart, 1993, Steuart, 1974], Edwards and Newell [Edwards and Newell, 1969], and Bandara and Wirasinghe [Bandara and Wirasinghe, 1988] use empirical data to predict gate demand under uncertainty. The second strategy is to reduce the scheduled gate occupancy time, that is, to reduce (1/µ0 ) or increase µ0 . Gate occupancy time is commercially lost time and is therefore desired to be as short as possible. Gate-occupancy-time reduction can be achieved through turnaround reliability improvement using second jet-bridges, innovative boarding concepts, auto adjustment for conveyer belts and equipment, etc. The Single European Sky Air Traffic Management Research (SESAR) project has set the performance target to cut gate 18 occupancy time for short/medium range aircraft from around 30 minutes currently down to 15 minutes in 2020 [Fricke and Schultz, 2008]. The third strategy is to reduce the scheduled flight volume, that is, to reduce λ0 . Airline under-scheduling and reserving spare gates for operation disruption can effectively control gate congestion [Steuart, 1974, pages 169–189]. The FAA’s slot control may also reduce gate demand by limiting the number of landings allowed in an airport [Le, 2006]. The scheduled flight volume should be capped by both gate constraints and runway constraints, whichever is more restrictive. Runway capacity is more of a concern to the Federal Aviation Administration (FAA), whereas gate capacity is more of a concern to airlines. For an airport where runway capacity is more restrictive, if the scheduled arrival volume from airlines is higher than the runway capacity, the FAA may impose runway slot controls to reduce delay. Once the demand for runway is capped, the demand for gates is capped accordingly. See Section 2.2.4 for research on the relationship between runway and gate capacity. The disadvantage of reducing flight volume is that this measure may decrease airline revenue. Mitigation Strategies for Higher-Than-Scheduled Arrival Rate Gate delay can result from higher-than-scheduled arrival rate due to stochasticity in flight operations. Air Traffic Control (ATC) can be impacted because a higher arrival rate may require aircraft holding or lead to gridlock on the airport taxiway system. Another strategy to reduce gate delay is to use traffic flow management, such as Ground Delay Program (GDP) to slow runway arrivals, that is, to reduce λ. NextGen’s Trajectory Management has the prospect of better schedule compliance by assigning each arriving aircraft to an appropriate runway, arrival stream, and place in sequence [JPDO, 2007, chapter 2, page 21]. In addition, a higher-than-scheduled arrival rate can result from early arrivals, usually a result of schedule padding. Trajectory Management’s promise for better arrival time prediction may encourage airlines to remove some schedule padding and hence mitigate gate delay. 19 Another strategy is to cancel arrivals, that is, to reduce λ. If the gate-waiting delay is so large that too many arrival flights are stranded on tarmac for gate during severe operation disruption, airlines can cancel arrival flight to reduce gate demand. This approach is only needed in very rare occurrences when huge gate delay is anticipated. For example, DTW experienced a snowstorm in Jan. 2–4, 1999 and airline operations were disrupted. Many airlines cancelled their arrival flights. However, Northwest airline failed to realize the gate congestion and kept operating inbound flights to DTW and a huge gate delay occurred [Slater, 1999]. Mitigation Strategies for Longer-Than-Scheduled Gate Occupancy Time Gate delay can result from longer-than-scheduled gate occupancy time. Longer gate occupancy time is either a result of longer-than-scheduled gate service time, or a result of gate holding caused by downstream restrictions (discussed in Section 2.2.4). One strategy is to tow aircraft off-gate4 in order to reduce the time the aircraft occupies a gate, 1/µ [Wang et al., 2010]; however, towing leads to airlines’ increased operating cost. Mitigation Strategies for Reduced Available Gates Another strategy to reduce gate delay is to share gates among airlines, which may increase c for individual airlines. Two primary drivers that motivate the use of shared gates are peaking of traffic at different times and uncertainty in the level or type of traffic [de Neufville and Belin, 2002]. Some gates in airports are reserved for common use for the ease of exchange of gate usage between different airlines [Ramos, 2007]. Some airports do not have reserved common gates, but can force gate exchanges when needed. At Boston Logan Airport, the limited gate capacity problem is made worse by the inflexibility of the airlines to exchange the use of gates with each other. The Mass-Port Authority (MPA), which maintains Logan Airport, can force such an exchange when an airline is underutilizing a gate, especially for international flights, which have a limited number of gates in Terminal E [Idris and 4 mainly for aircraft having a long turnaround time, such as flights staying at an airport overnight 20 Hansman, 2000]. Then the next question becomes “What percentage should be allocated for common use?” According to integer programming, the fewer the constraints, the better the optimal solution could be. So all common use could achieve the best gate utilization and lowest gate delay possible. However, airlines prefer exclusive gate usage for their predictable planning and efficient operation. So some percentage of gates should be exclusive to specific airlines. There is also a third form, called preferential use, meaning one airline has preference to use a gate, but if it is not used, other airlines can use it. This form had been proven ineffective. “The greater the proportion of common and exclusive-use gates the greater the reduction in inefficiency5 . Common use gates means the airport controls gate use and will ensure they are used most efficiently. Similarly, when a gate has been given to a carrier for exclusive use, it is in the carrier’s best interest to use the resource efficiently. As the proportion of preferential-use gates rises, efficiency falls. A carrier that has preferential treatment may try to use gates as a barrier to entry and not necessarily use them efficiently.” [Gillen and Lall, 1997]. Ideally, the airport should reserve a certain fraction of gates as common use to account for uncertainty and individual carriers’ peak traffic only. Then individual carriers can schedule their gates to full capacity. This fraction could be a function of time of day since uncertainties later in the day are usually higher. The fraction could also be a function of weather forecasts which predicts the uncertainty level on a day to day basis. Steuart [Steuart, 1974] used queueing theory to estimate the fraction of gate capacity that should be reserved for unscheduled extra needs due to delays and other random events. The key finding is that the fraction decreases when the number of scheduled gates is larger (this is because random effects tend to cancel when there are more gates) [de Neufville and Belin, 2002]. The limitation of research in common gates is that the research is mainly focused on small operation perturbations, instead of major operation disruptions. If gate delay is because aircraft wait to dock in inclement weather or ramp staff is unavailable, self-docking systems can improve gate reliability (increase c) and reduce gate 5 Terminal efficiency was defined as number of passengers and pounds of cargo served given number of runways, number of gates and other airport resources. 21 delays. Self-docking systems use laser-based technology to allow pilots to self-park at the gate, without the need of a ramp worker to marshal it into its gate position. The system has already been implemented for 92 of 157 gates at Dallas/Forth Worth International Airport (DFW) since January 2008 [Richards, 2008]. If gate delay is a result of an airline’s reluctance to change gate assignment at the last moment, one strategy to reduce gate delay is to use more efficient gate assignment algorithms to effectively increase the number of usable gates, c. Algorithms were developed to improve gate assignment robustness in planning and reduce gate idle time in operation, as mentioned in Section 2.1.1. But there are three limitations in this research area. First, gate changes are usually undesirable. A gate change with a long lead time, say 4 hours in advance, is not so problematic. But a short lead time, say 30 minutes, may be problematic. Previous research neglected this fact. Second, research in robust gate planning has typically considered small stochastic delays in the schedule and not major disruptions. This dissertation shows that major schedule disruptions can have a significant impact on gate congestion, and corresponding gate assignment strategies need to be developed for these scenarios, including gate delay and cancellations. Third, one method to change gate assignment in operations in approximately an optimal way is to periodically solve an assignment model [Chandra, 1990], which has been applied to the problem of dynamic dispatching of vehicles [Durbin, 2003]. Previous research is limited to heuristic logic to change gates. 2.2.4 Relationship Between Gate, Taxiway and Runway Capacity Relationship of Runway Capacity and Gate Capacity Some research has transformed gate capacity into an equivalent runway capacity for the purpose of capacity matching using scheduled gate occupancy time and positioning time [de Neufville and Odoni, 2003]. If runway capacity is bigger than gate capacity, gate delay is expected under high flight volume. For example, since ATL added its fifth runway, its delay moved from the air to the airport surface [Terreri, 2009]. The capacity matching for runway and gate capacity planning has not been researched. 22 The current practice is usually reactive, instead of proactive. One challenge in planning runway capacity and gate capacity jointly is that simply making runway capacity and gate capacity equivalent and allowing the airport to operate under that capacity may easily saturate an airport surface under stochastic delays. Higher gate capacity might be desired to absorb stochastic delays [Idris, 2001] since ground holding is safer and cheaper than air holding. Quantitative research has not been found to design the capacity difference. Relationship of Gate Capacity and Ramp/Taxiway Capacity When an aircraft pushes back to the ramp, it may block the ramp from being used for pushback maneuvers from other gates. When a taxiway does not have enough capacity to hold taxi-out queueing, a departure flight may have to hold at a gate, requiring a longer gate-occupancy time [Idris, 2001]. 2.3 Summary of Key Gaps in the Literature Key gaps in the literature are. 1. No systematic method to quantitatively measure gate delays and identify functional causes 2. No method to evaluate the impacts of disruptions and the effects of mitigation strategies collectively 3. No evaluation of mitigation strategies for severe disruptions In the literature, gate-delay severity and causes are described anecdotally or based on experience. The author is not aware of any methods using quantitative metrics to estimate system-wide gate delay severity or to identify major functional causes. Individual strategies to reduce gate-waiting delays are identified, but no quantitative, comparative and collective 23 impact evaluations of gate-delay mitigation strategies has been found, especially under severe operation disruptions. This dissertation will address these issues. 24 Chapter 3: Data Sources and Algorithms This chapter describes the data sources and algorithms for estimating historical gate delay. Limitations and assumptions are also discussed. 3.1 Data Sources Gate-waiting delay is not recorded in actual operations and thus is not directly available in any database. Although several databases record the taxi-in time of individual flights, they do not break this time into its component parts, such as the delay due to waiting for a gate. Thus, gate-waiting delay must be inferred or approximated using other information available. This section discusses several data sources—in particular, the Bureau of Transportation Statistics (BTS) and Aviation System Performance Metrics (ASPM) databases—and associated fields that can be used to infer or approximate gate-waiting delay. The precise algorithms used to estimate gate-waiting delay are discussed in Section 3.2. 3.1.1 BTS Airline On-Time Performance Database This database is maintained by BTS, part of the United States Department of Transportation. This database has only one table, On-Time Performance. This table contains on-time arrival data for non-stop domestic flights by major air carriers and provides such additional items as departure and arrival delays, origin and destination airports, flight numbers, scheduled and actual departure and arrival times, cancelled and diverted flights, taxi-out and taxi-in times, air times, and non-stop distances [BTS, 2003]. Key fields in this table are flight date, destination airport, carrier, scheduled arrival time, “wheels-on” time (the time that an aircraft lands on the runway, see [USpatent, 2000] for a precise definition), “gate-in” time (the time that an aircraft pulls into a gate), “gate-out” time (the time that an aircraft 25 pushes back from a gate), and “taxi-in” time (the difference between “wheels-on” time and “gate-in” time). 3.1.2 ASPM Individual Flights Database and Taxi Times Database The ASPM database is maintained by the Federal Aviation Administration (FAA). Two tables used in this dissertation are the “Individual Flights” table and the “Taxi Times” table. Key fields in the “Individual Flights” table are “wheels-on” time (the time that an aircraft lands on a runway), “gate-in” time (the time that an aircraft pulls into a gate), the actual taxi-in time, the taxi-in delay, and the unimpeded taxi-in time. The actual taxi-in time is the gate-in time minus the wheels-on time (Figure 3.2). The taxi-in delay is the actual taxi-in time minus the unimpeded taxi-in time. The unimpeded taxi-in time represents the time it would take for an aircraft to taxi in the absence of delay-causing factors such as congestion or weather [ASPM, 2008]. This value is estimated using a regression model and is broken down by calendar year, by season, by carrier and by airport (for those reporting in the ASQP and Aeronautical Radio, Incorporated (ARINC) data). See [Kondo, 2009] for further details. In 2001, there were 14 reporting carriers and about 300 reporting airports. 3.1.3 Comparison of BTS and ASPM Databases The key difference between the BTS database and the ASPM database are the following [BTS, 2003, ASPM, 2008] (see also Table 3.1). • BTS includes data for air carriers that have at least one percent of total domestic scheduled-service passenger revenues (20 carriers); ASPM includes data for all carriers. • BTS includes data for operations to and from airports that account for at least one percent of the nation’s total domestic scheduled-service passenger enplanements (32 airports in 2007); ASPM includes data for 77 airports. • BTS includes cancelled flights; ASPM does not. 26 Table 3.1: Coverage of BTS and ASPM databases BTS ASPM Carrier 20 U.S. major All Airport 32 U.S. major 77 Cancelled flights Yes No International flights No Yes Aircraft type No Yes Tail number Yes BTS Flights Only Table 3.2: Flights recorded in various data sources ATL JFK Source 6/5/07 7/3/07 BTS 2239 675 ASPM 2690 1175 Average Daily Flights (ACI) 2724 1223 Flightstats.com 2794 1324 • BTS does not include international flights; ASPM does. (BTS covers nonstop scheduledservice flights between points within the United States, including territories.) • BTS does not include information regarding aircraft type; ASPM does. • BTS contains the tail number of flights; ASPM only contains the tail number of flights that are also in BTS. • BTS does not include unimpeded taxi-in times; ASPM does. Table 3.2 shows the number of flights recorded in the data sources for two example days at two airports. In both days, ASPM records more flights than BTS, due to the inclusion of international flights. Also, the gap between ASPM and BTS is larger for JFK than for ATL, since JFK has a higher percentage of international flights. As a reference, the third line gives the average number of daily flights for each airport (averaged over one year, 2007) obtained from Airport Council International. The last line shows the number of flights observed from the public website www.flightstats.com. 27 3.1.4 Other Data Sources c Other data sources used in this research are the following. Sensis1 Aerobahn⃝TaxiView surface movement video provides locations of aircraft and vehicles on the airport surface by time. Google Maps is used as a secondary source to get information about an airport’s terminal geometry, contact gates and remote gates (hard stand) when the information from the airport web site is not enough. The website www.flightstats.com provides flight information by airport and day, including the actual flight’s gate assignment, flight number, arrival time, departure time, carrier, and aircraft type. There are two main limitations of this data source. First, data are web-based and therefore lack support for mass data query. Second, some data, such as gate assignments, are missing. Besides www.flightstats.com, some other public web sites are also used. The following examples show how the information is used in this dissertation. In analysis of ATL, www.flightstats.com indicates that there were 179 gates at ATL on June 11, 2007. This value is used as the number of gates at ATL in the summer of 2007. The number of gates may not be the same as the number of gates today, due to new gates built recently [Ramos, 2007]. In analysis of LGA, the website panynj.gov provides a list of gates and gate users (carriers). The website www.flightstats.com shows that Comair flights (using regional jets) usually go to gate 5A. The website www.wikimapia.org/3557/LaGuardia-Airport-LGA-KLGA also shows that gate 5A is the Comair gate; but gate 5A can park multiple flights at the same time based on flightstats.com, which is almost impossible based on the geometry of the Delta terminal on Google Maps, as shown in Figure 3.1. Google Maps shows five remote gates on the east side of LGA (not given in panynj.gov) with two regional jets parked there. These collective data sources indicate that Comair flights use east remote gates to park but use 5A as the gate name for passenger boarding purposes. 1 Sensis Corporation is a private company based in Syracuse, NY, specializing in radar and passive sensors for airport surveillance and air defense. 28 Two regional jets Figure 3.1: Delta and Northwest terminal and five remote gates at LGA. The fact that Comair’s Gate 5A has no jet bridge or contact gate parking and that two regional jets park at the remote gates indicate that Comair uses the five remote gates; Source: Google Maps snapshot on 7/6/2009. 29 Possible Unimpeded taxi in Possible gateon taxiway and non-gate waiting ramp delay delay Positioning Scheduled gate in time occupancy time Possible gate occupancy delay Positioning out time Taxi-in delay Unimpeded taxi-in time Gate-occupancy time Taxi-in time Wheels-on time Gate-in time Gate-out time Figure 3.2: Taxi-in and gate-occupancy process Table 3.3: Required parameters and data sources Parameter Source Taxi-in time Database field in BTS and ASPM Unimpeded taxi-in time Database field in ASPM estimated via a regression model [Kondo, 2009] Gate-occupancy time Pairing algorithm using BTS database Positioning time Deterministic value (estimate) Calculated via equation (3.2) Gate-waiting delay 3.2 Algorithms This section describes the modeling of the taxi-in process and gate-occupancy process, two specific algorithms for estimating gate-waiting delay from the ASPM and BTS databases and one algorithm for calculating gate-occupancy time. 3.2.1 Modeling of Taxi-in Process and Gate-occupancy Process Figure 3.2 shows a realization of the actual taxi-in process and gate-occupancy process. The taxi-in time includes the unimpeded taxi-in time and the taxi-in delays. These delays may be gate related or non-gate related (e.g., due to taxiway congestion). The unimpeded taxi-in time (which is from wheels “on” to gate “in”) includes the positioning-in time (the time to position an aircraft into the gate). The actual gate-occupancy time includes scheduled gateoccupancy time and possible gate-occupancy delay. The gate-occupancy delay is allowed to be negative in the case that a late arriving flight leaves on time and thus absorbs delay [Xu, 2007]. A summary of the parameters and their sources in Figure 3.2 are shown in Table 3.3. 30 3.2.2 Algorithm 1: Estimation and Validation of Gate-waiting Delay Gate-waiting delay is the difference between taxi-in delay and non-gate delay (3.1). However, no existing database contains the non-gate taxi-in delay, so it must be estimated. Based on interviews with airport managers of a major U.S. airline, airport surface traffic is the main cause of non-gate delay, and this delay is usually smaller than 5 minutes. As a default, this paper assumes that up to 5 minutes of taxi-in delay is unrelated to gate delay, where the remaining taxi-in delay is the estimation of gate-waiting delay (3.2). Gate-waiting delay = taxi-in delay − non-gate delay (3.1) Gate-waiting delay ≈ max(Taxi-in delay − 5 min, 0). (3.2) The maximum function ensures that the estimated delay is non-negative. For example, suppose that the unimpeded taxi-in time is 6 minutes. Then a 7 minute taxi-in time is estimated to contain 0 minutes of gate-waiting delay, while a 12 minute taxi-in time is estimated to contain 1 minute of gate-waiting delay. The method is partially justified by research indicating that gate delays are the dominant contributor to taxi-in delay [Idris et al., 1999, Gosling, 1993]. The accuracy of (3.2) was also checked for a few sample flights from the surface operation video of JFK from Sensis Aerobahn TaxiView. Direct observation of the video identified the amount of time that an aircraft is moving (unimpeded taxi in), standing temporarily in front of a runway to cross or in front of another aircraft to move (taxi in delay due to traffic), and standing without any nearby runway or aircraft around it (gate-waiting delay). The movements of two long taxi-in delayed flights were observed and the estimation error was no more than 3 minutes. (One flight on 9/28/2008 was observed to have 32 minutes of gate-waiting delay compared with the original estimate of 34.4 minutes. Another flight on 10/10/2008 was observed to have 15 minutes gate-waiting delay compared with the original estimate of 16.4 minutes.) 31 ASPM Database Taxi-in Taxi in Delay Gate-waiting Gate waiting Delay = Max (Taxi-in Delay – 5 min, 0) Gate-waiting Gate waiting Delay Figure 3.3: Algorithm 1a: gate-waiting-delay estimation only using ASPM database Of course, this is an approximation, since the method assumes that non-gate-related delays comprise at most 5 minutes of the total taxi-in delay. Sensitivity analysis was performed on this 5-minute threshold, which will be discussed in Section 4.1.2. The overall implication of the approximation is that the gate-delay statistic does not provide an exact magnitude, but can be useful as a relative metric to identify qualitative trends. For example, the identification of high-delay days appears to be insensitive to the exact value of the threshold (see Figure 4.6 discussed later). Algorithm 1a: using ASPM Database The first algorithm is based on data found in the ASPM database (Figure 3.3). Here, taxiin delay is a specific field in the database (equal to the taxi-in time minus the unimpeded taxi-in time). The method extracts the taxi-in delay from the database and substitutes it into (3.2) to obtain the gate-waiting delay. A limitation of this algorithm is that it does not track data associated with cancelled flights. Algorithm 1b: using ASPM and BTS Databases Figure 3.4 shows a modified version of the basic algorithm that combines information from the ASPM and BTS databases. The main difference is that the actual taxi-in time is obtained from the BTS database instead of the ASPM database. First, data on each flight is obtained from the BTS database (from the on-time performance table), including actual taxi-in time, date, carrier, and airport. The last three fields are used to look up the unimpeded taxi-in time from the ASPM database. The taxi-in delay is then calculated as the difference between the actual taxi-in time and the unimpeded taxi-in time. The rest of the procedure is similar to algorithm 1a. It is 32 ASPM Database • Date • Carrier • Airport BTS Database Unimpeded Taxi-in Time + Taxi-in Delay Gate-waiting Delay = Max (Taxi-in Delay – 5 min, 0) Gate-waiting Delay Actual Taxi-in Time Figure 3.4: Algorithm 1b: gate-waiting-delay estimation primarily using BTS database assumed that any date between June 1 and August 31 is mapped to the summer season for the purpose of looking up the unimpeded taxi-in time in the ASPM database. Both Algorithms 1a and 1b have limitations in estimating gate-waiting delays. For example, to investigate the correlation between aircraft size and gate-waiting delay, Algorithm 1a is used because the ASPM database has aircraft-type information while BTS does not. On the other hand, when cancellations are considered, Algorithm 1b is used since the BTS database includes cancellations while ASPM does not. In gate-waiting-delay estimation in Chapter 4, “data source: ASPM database” refers to Algorithm 1a while “data source: BTS database” refers to Algorithm 1b. In Chapter 4, Algorithm 1a is used in the carrier difference analysis and aircraft-size correlation analysis. Algorithm 1b is used in all other places. 3.2.3 Algorithm 2: Estimation of Gate Occupancy Time Gate occupancy time is calculated using the tail-number tracking method to pair arrivals and departures in the BTS database. To calculate the gate occupancy time of a particular flight, the arrival flight and departure flight need to be paired (Figure 3.5), but this pairing is not included in the BTS or ASPM database. In this dissertation, they are paired using the tail number in the BTS database, assuming that the turnaround time is between 0 and 1,440 minutes (24 hours). If more than one departure has the same tail number as an arrival, the departure with the smallest turnaround time is selected. If a flight is not paired, it is deleted from the pairing table. The limitation of this method is the possible 33 Arrivals Departures Pairing algorithm: •Arrival’s destination = departure’s origin •Same tail number •Closest connection with turnaround time < 1 day Arrival departure pairs (turns) Figure 3.5: Arrival and departure pairing method Table 3.4: Results for arrival departure pairing, ATL, summer 2007, BTS data Number of input records 29,051(arrivals) + 28,996 (departures) = 58,047 Number of output records 28,383 pairs (98% arrivals remain) Algorithm complexity Quadratic in number of input records Query time 30 seconds on a Dell OptiPlex GX270 with 1.5 GB memory loss of flights due to unavailable pairing. Table 3.4 shows that 2% of flights are lost during this process for the data at ATL in the summer of 2007. 3.3 Key Limitations and Assumptions The key limitation of these algorithms is that non-gate taxi-in delay is assumed to be at most 5 minutes. This ignores traffic volume fluctuation by time of day. However, sensitivity analysis in previous research shows that this parameter does not affect qualitative conclusions from the analysis [Wang et al., 2009] (also see Figure 4.6). Also, the unimpeded taxi-in time from ASPM used in the analysis does not fully consider taxi path (runway assignment, gate assignment and route selected). This limitation may be improved by incorporating more accurate methods to estimate unimpeded taxi time considering runway and gate assignments [Simaiakis and Balakrishnan, 2009]. The gate occupancy time derivation algorithm does not consider maintenance or towing. It is possible that an aircraft is towed out of its gate after arrival and then towed into its gate before departure for maintenance or to make its gate available for other flights. There are approximately 1-2% of arrivals that cannot be paired with any departures, and these flights are deleted. This loss of data may be due to maintenance that separates an aircraft’s arrival and departure by more than 24 hours. This leads to an underestimation of 34 gate utilization. Conversely, towing may lead to an overestimation of gate utilization. For example, American Airlines and American Eagle usually have 9 more aircraft at night than their declared number of gates at LGA, which means some aircraft are towed out of their gates and do not occupy gates at night. This leads to an overestimation of gate utilization. Aircraft-gate compatibility constraints are not considered in this dissertation. In reality, each gate is compatible with only certain types of aircraft. The reason why an aircraft does not go to an open gate may simply be because the gate size is not compatible. A gate may also have adjacency constraints, meaning that an aircraft occupying a gate may block adjacent gates from being used. For example, a gate may be compatible with a Boeing 737 and a Boeing 767, but when a Boeing 767 parks there, an adjacent gate is blocked and cannot be used. This dissertation does not consider aircraft type because the current BTS database on-time-performance table does not have aircraft-type information. Also, www.panynj.gov does not give aircraft type constraints or adjacency constraints for LGA. A useful extension of this dissertation would be to use other data sources to include aircraft type in the analysis. The ASPM database can be used to get aircraft type information and flightstats.com can be used to partially infer gate compatibility information based on historical data (i.e., what aircraft types have been historically parked at each of these gates). As for the carrier specific analysis of LGA in Chapter 4 and the simulation of LGA in Chapter 5 (see Figure 5.9), this limitation should not be a major issue. First, aircraft sizes of same carriers are similar at LGA. For example, American Airlines and Delta Airlines usually use the size of Boeing 737, and their affiliates American Eagle and Comair use regional jets. While there can be dual-use gates, especially between American and American Eagle, there may be a preference of gate assignment based on aircraft size. Table 4.5 shows that the correlation coefficient between gate-waiting delay and aircraft size at LGA is only 0.035 (aircraft with 100 more seats generally experience 3.5 more minutes of gate delay). Secondly, the adjacency constraint usually only applies to a small portion of gates and very few heavy aircraft fly to LGA, so the gate adjacency constraint does not explain high gate delay when some gates are unused. 35 Chapter 4: Gate-waiting Delay Characteristics and Functional Causes In this chapter, summer 2007 data from the BTS and ASPM databases are used to estimate gate-waiting delay to investigate gate-delay characteristics and to identify gate-delay functional causes. Summer 2007 was chosen because it represents a historically delay season. This chapter is organized as follows. Section 4.1 investigates the gate-delay characteristics at major U.S. airports. Based on these results, Section 4.2 selects several high-gate delay days in several airports to investigate the functional causes of high gate delay. Table 4.1 shows the scope of the analysis. Seasonal average delay and daily total delay are estimated for all OEP-35 airports. Gate-runway capacity ratio is estimated for only 24 airports, because the required data for the other 11 airports are not publicly available. More detailed analysis is conducted on 8 airports, including LGA, JFK, EWR (3 airports in the congested New York region), ATL and DFW (super hubs with high gate delays dominated by one carrier), MIA (an airport with the highest average gate delay per delayed flight), LAX (an airport that has high gate delay in average but relatively low extreme days), and ORD (a super hub). LGA, ATL, JFK, EWR, DFW, MIA all have outlier days where gate delays are much higher than other days, and the worst 3 days at each of these airports are analyzed. LGA is the most space-constrained airport of the 8 airports, so gate delay has a high cost because it may also impact airport surface operations. In addition, LGA is not dominated by one airline, and two of its three major carriers experience high gate delay, so the use of common gates may mitigate gate delay. Therefore, carrier specific analysis is done for LGA. 36 Table 4.1: Scope of the analysis Seasonal average delay Daily total delay Gate-runway capacity ratio Carrier t test Aircraft size correlation test Worst 3 days by time of day, carrier aggregated Worst 12 days by time of day, carrier specific 4.1 LGA ATL JFK EWR DFW MIA LAX ORD Other 27 OEP airports X X X X X X X X X X X X X X X X X 5 X X X X X X X X X X X X X X X 16 X X X X X X X X X X X X X X Gate Delay Characteristics at Major U.S. Airports Algorithms 1a and 1b described in Section 3 are used for the analysis. “Data source: ASPM database” refers to Algorithm 1a while “data source: BTS database” refers to Algorithm 1b. In this chapter, Algorithm 1a is used in the carrier difference analysis and aircraft-size correlation analysis. Algorithm 1b is used in all other places. 4.1.1 Gate Delay by Airport The first step is to get an overview of gate-delay severity at the major U.S. OEP-35 airports. These airports serve major metropolitan areas and also serve as hubs for airline operations. More than 70 percent of passengers move through these airports. Delays at the OEP-35 airports have a ripple effect on other locations. Key FAA performance measures are based on data from this set of airports, including Airport Average Daily Capacity, On-Time Gate Arrivals, and On-Time Gate Departures [FAA, 2007]. 37 3.5 3 2.5 Gate delay per scheduled flight (min) 2 1.5 1 0.5 0 K F J L W T F A D IA M L H P X A L A G L D R O R H W A I W T E D P S M A C D X H P N E D T L C S A L C L S D IA I O W C B M S O B M E M O F S L W T D S M L L F A E S A P T N A S IT P E L C G V C L N H X D P Airport Figure 4.1: Gate delay per scheduled fight in OEP 35 airports, summer 2007, Algorithm 1b Figures 4.3 and 4.2 show the gate-delay severity at the OEP-35 airports. In the OEP35 airports, the gate-delay average is up to 3.2 min per scheduled flight at JFK, and the gate-delay fraction is up to 0.31 at ATL. Gate delays differ significantly across the OEP-35 airports. Hub airports, such as ATL, DFW and JFK, tend to have higher gate delay partly due to their higher gate-demand fluctuation as a result of waves of arrivals and departures in hub operations. Figure 4.4 (repeated from Figure 1.3 in Section 1.1) shows the airports having high gate-delay fraction days. The dark bars in the graph, show the number of days during which 30% or more of the flights experienced a gate waiting delay in the summer of 2007. Out of the 35 major airports, 10 had at least one such day; the other 24 airports did not have any such days, so they are not shown on the x-axis. The lighter bars in the graph show the number of days during which 30% or more of the flights experienced gate-waiting delay and pulled into the gate after the scheduled arrival time. Flights that experienced gate-waiting delay due to early arrival, but ended up arriving at the gate on time, are not counted. DFW, ATL, JFK and PHL have the most days during which 30% or more of the flights experienced a strictly positive gate-waiting delay. On average, 66% of these days in the three airports were due to early arrivals, representing padding in the schedule and 38 0.35 0.3 0.25 Fraction of scheduled flights having strictly positive gate delay 0.2 0.15 0.1 0.05 0 LT W KF X L H W R PS AI D A TL S X N M A CL S A D O O I W LT EL LL TI G N A L X A E P N P A FD J AL H P AI TD EW M M RO G L C O P ED EM CD S L S AI FS CM W B H B D S C F P VC AS T H D M Airport Figure 4.2: Gate-delay fraction in OEP 35 airports, summer 2007, Algorithm 1b inflexibility/inability to change gate assignments when early arrivals occur. Naturally, the estimate of gate delay is sensitive to the non-gate delay threshold from (3.2). Table 4.2 gives a sensitivity analysis of the airport gate-delay ranking. The sensitivity analysis varies the non-gate delay threshold as well as the fraction threshold for identifying days with a high percentage of gate-delayed flights. Several airports appear near the top of most lists regardless of the values of these two parameters. (In this table, gate-waiting delays that arise from early arrivals are not subtracted out.) Figure 4.5 shows a gate-runway capacity ratio at some major U.S. airports. This ratio is based on a dynamic apron capacity calculation [de Neufville and Odoni, 2003]. The calculation assumes that airports are busy non-hub airports and that all flights have a gate-service time of 60 minutes. This is only a rough estimation and does not consider the gate-by-gate configuration of carrier and aircraft size. Based on the estimation, HNL is more likely to experience gate waiting delay than JFK when runway capacity is saturated. This does not mean that HNL has more gate delay, but rather if runway capacity were saturated, it would have more gate delay. JFK has a high gate/runway capacity ratio and also a high delay. One possible reason is that gate allocation is not proportional to flight 39 3.5 3 2.5 Gate delay per scheduled flight (min) 2 1.5 1 0.5 0 K F J L W T F A D IA M L H P X A L A G L D R O R H W A I W T E D P S M A C D X H P N E D T L C S A L C L S D IA I O W C B M S O B M E M O F S L W T D S M L L F A E S A P T N A S IT P E L C G V C L N H X D P Airport Figure 4.3: Gate delay per scheduled fight in OEP 35 airports, summer 2007, Algorithm 1b 60 50 40 Number of days Early arrivals 30 30% or more flights experience gate waiting 30% or more flights experience gate waiting and arrive later than scheduled 20 10 0 DFW JFK PHL ATL MSP LGA IAH MIA EWR LAX Airport Figure 4.4: High gate-delay-fraction days in OEP-35 airports, summer 2007, Algorithm 1b 40 Table 4.2: Top 10 airports (if available) gorithm 1b Gate-waiting 30% 20% fraction threshold Non-gate delay 5 5 threshold (min) Top airports where DFW DFW ATL ATL fraction of flights experiencing JFK JFK PHL LAX strictly positive gate waiting IAH IAH exceeds x% EWR DTW (ordered by MIA EWR number of such MSP PHL “bad” days) LAX MSP LGA ORD which have high gate-waiting fraction flights, Al30% 20% 10% 30% 20% 10% 10 10 10 15 15 15 PHL JFK ATL JFK DFW PHL MIA ATL LGA JFK ATL DFW PHL LAX MIA LGA EWR IAH DTW PHL JFK JFK PHL ATL DFW JFK DFW MIA PHL ATL CLT DCA EWR IAH LGA volume, and airlines that have a larger market share than gate-allocation share contribute to high gate delays. 4.1.2 Gate Delay by Day Figure 4.6 shows the estimated daily total of gate-delay minutes at ORD for each day during the summer of 2007. The figure shows estimates using three different values for the non-gate delay threshold in (3.2). Naturally, the estimated amount of gate delay is smaller when the non-gate delay threshold is larger. The key observation from this figure is that extreme gate-waiting delays occur on several bad days at ORD. On most other days, delays are not that large. This observation is insensitive to the choice of the non-gate delay threshold. In other words, the two worst days (7/18 and 8/6) stand out as much worse than the other days, regardless of the non-gate delay threshold value. Analogous figures for other major airports show similar results (Figure 4.7). Most airports have several days for which the delay is much higher than other days. The only exception is LAX, where no outstanding days are observed. 41 2.5 2 Estimated gate / runway capacity ratio 1.5 1 0.5 0 LN TI A W N I W LT X TL W S AI O A D S LT H LH PS D R KF L RO AL A AI P M AI W H P CD FD ED W B M FS G B D S AL C TD O E J M Figure 4.5: Rough gate/runway capacity ratio at some major U.S. airports 4.1.3 Gate Delay by Time of Day Gate waiting is related to flight volume which has a dependency on time of day. As expected, gate-waiting percentage is also time dependent, as shown in Figure 4.8. For example, if a gate-waiting percentage of 30% is considered severe, then 8am to 10am at ATL and JFK, 11am to 9pm at DFW, and selected hours between 3pm to midnight at ATL, JFK, EWR, LAX are problematic time periods. 4.1.4 Gate Delay by Carrier Most gates in the U.S. are managed by carriers exclusively, compared with central control by airports in Europe and Asia. Therefore, it is natural to assume that gate-waiting delays are different among carriers since carriers have their own gate capacity and carriers determine the appropriate volume of scheduled flights. Usually, gate capacity has some slack because of spare gates. Flights can be accommodated by regular gates in the planning phase and spare gates in case of unexpected events, such as mechanical failures, schedule disruptions, etc. [Bazargan, 2004]. 42 7/18 8/6 setun im 51 0 0 0 01 0 0 02 0 0 03 s e tuni m ni yal ed gni tiaw- e tag yliad 43 setun im 01 setun im 5 d loh se rht y a led n i- ix at et ag-non 0 0 04 0 0 05 0 0 06 Figure 4.6: Gate-waiting delay by day at ORD, Algorithm 1b 8000 n)i (m 6000 ya le 4000 d tea 2000 g 0 ilya D )n 8000 i (m 6000 ya le d 4000 et ag 2000 ilya D 0 Daily gate delay (min) 5 /3 1 9 7 /4 2 0 8 /1 /9 7 6 6 /1 2 / 7 /1 1 / /2 8 /1 /2 2 / 6 6 7 7 7 8 8 8 6/1 6/15 6/29 7/13 7/27 8/10 8/24 (a) JFK Daily gate delay (min) 6/1 6/15 6/29 7/13 7/27 8/10 8/24 Date Date 3000 2500 2000 1500 1000 500 0 16000 14000 12000 10000 8000 6000 4000 2000 0 Date (b) DFW Daily gate delay (min) 6/1 6/15 6/29 7/13 7/27 8/10 8/24 (c) ATL 2000 3500 3000 2500 2000 1500 1000 500 0 Daily 1500 gate delay 1000 (min) 500 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 6/1 6/15 6/29 7/13 7/27 8/10 8/24 Date Date Date (d) MIA (e) PHL (f) LAX 2500 2000 Daily gate 1500 delay 1000 (min) 500 Daily gate delay (min) 0 6/1 6/156/297/137/278/108/24 2500 6000 5000 4000 3000 2000 1000 0 2000 Daily gate 1500 delay 1000 (min) 500 0 Date Date Date (g) LGA (h) ORD 2000 2000 Daily 1500 gate delay 1000 (min) 500 Daily 1500 gate delay 1000 (min) 500 6/1 6/15 6/29 7/13 7/27 8/10 8/24 6/1 6/15 6/29 7/13 7/27 8/10 8/24 Date Date (j) DTW (i) EWR Daily gate delay (min) 0 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 6/1 6/15 6/29 7/13 7/27 8/10 8/24 (k) IAH 1400 1200 1000 800 600 400 200 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 Date (l) MSP 2500 2000 Daily gate 1500 delay 1000 (min) 500 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 Date (m) DCA Figure 4.7: Daily gate delay of high gate-delay airports 44 60% 50% 40% ATL DFW Gate-waiting percentage EWR 30% JFK LAX LGA 20% MIA ORD 10% 0% 0 3 6 9 12 15 18 21 Hour of day (actual wheels on time) Figure 4.8: Gate-waiting percentage by time, Algorithm 1b (BTS data) Based on an analysis of the ASPM database, gate-waiting delays between carriers are often significantly different. Table 4.3 shows the average gate-waiting delays (per flight) for major carriers at several airports. For example, at JFK, the three major carriers are JetBlue Airways (JBU), Delta Air Lines (DAL) with its subsidiary Comair (COM), and American Airlines (AAL) with its partner American Eagle Airlines (EGF). Based on a ttest, the differences in gate-waiting delays between any two pairs of carriers are found to be statistically significant (Table 4.4). Similarly, gate-waiting delay at other airports are usually significantly different between carriers if there is more than one major carrier. Also, carriers with dominant market share in an airport tend to have higher gate-waiting delays, possibly due to their more aggressive scheduling based on the volume effect that aggregated uncertainties are less than the sum of non-aggregated uncertainties. COA has a dominant market share at EWR and gate-waiting delays of COA flights are significantly higher than those of AAL. AAL has a dominant market share at DFW, and its gate-waiting delay at DFW is higher than the delay at EWR. 45 Table 4.3: Gate-waiting delay by major carriers at several major U.S. airports, Algorithm 1a (ASPM data) Airport ATL JFK LGA EWR DFW LAX MIA Carrier DAL+ASQ TRS JBU DAL+COM AAL+EGF AAL+EGF USA+AWI+PDT DAL+COM COA+CJC COA+BTA AAL AAL+EGF SKW+ASQ AAL+EGF SWA UAL COA+BTA ASA+QXE DAL AAL+EGF GFT+COA DAL+COM Number of arrivals 82185 23495 16154 11891 8140 10656 10232 8406 4391 37171 2052 69951 13155 13242 10568 9098 5870 5135 4446 21903 3066 1209 Gate-waiting delay mean (min) 2.42 1.97 2.01 6.39 2.46 1.45 0.21 1.71 0.24 1.43 0.77 2.65 1.19 1.56 0.69 1.30 2.62 0.42 3.47 2.25 0.51 0.25 Gate-waiting delay variance (min) 41.03 46.65 40.93 226.75 47.44 32.74 2.42 32.24 3.52 25.34 7.21 52.78 10.90 19.85 7.36 11.99 35.70 6.69 61.11 71.06 14.00 7.72 Table 4.4: Gate-waiting delay difference between major carriers, three major airports in the New York, Algorithm 1a (ASPM data) Airport JFK LGA EWR Group (DAL+COM) vs. JBU (AAL+EGF) vs. JBU (DAL+COM) vs. (AAL+EGF) (AAL+EGF) vs. (USA+AWI+PDT) (DAL+COM) vs. (AAL+EGF) (AAL+EGF) vs. (COA+CJC) (DAL+COM) vs. (USA+AWI+PDT) (COA+CJC) vs. (USA+AWI+PDT) (DAL+COM) vs. (COA+CJC) (COA+BTA) vs. AAL 46 t statistic 29.8 19.56 9.10 21.58 3.07 19.5 23.46 0.87 21.57 10.23 Difference Significant Significant Significant Significant Significant Significant Significant Not significant Significant Significant gate-waiting delay (min) Number of seats Figure 4.9: Scatter plot of gate-waiting delay in minutes by number of seats at EWR, Algorithm 1a (ASPM data) 4.1.5 Gate Delay by Aircraft Size Figure 4.9 shows a scatter plot of gate-waiting delay versus aircraft size (in number of seats) for all flights at EWR during the summer of 2007. Table 4.5 gives the Pearson correlation coefficients between gate-waiting delay and aircraft size at several airports. In general, there is a relatively weak dependency of gate-waiting delay on aircraft size. Further, this correlation may be either positive or negative depending on the airports. For example, at EWR, the correlation coefficient is .047, meaning that an aircraft with 100 more seats statistically experiences 4.7 more minutes of gate-waiting delay. At JFK, the correlation is negative meaning that larger aircraft tend to experience less delay. Either way, the conclusion is that large aircraft are not exempt from gate-waiting delays. 4.2 Functional Causes of Gate Delay in High Gate Delay Days Though gate delay is small on average, it can be very high on the worst days (Figure 4.7). It is important to understand the functional causes of high gate delay on these days. As 47 Table 4.5: Pearson correlation coefficients between gate-waiting delay and aircraft size, ASPM data Coefficients between gate-waiting delay Airport and aircraft size ATL -0.026 JFK -0.015 LGA 0.035 EWR 0.047 0.0089 DFW LAX -0.019 0.068 MIA mentioned in Section 2.2.2, gate-waiting delay can be attributed to over-scheduling, higherthan-scheduled arrival rate(λ), longer-than-scheduled gate occupancy time (µ), and reduced available gates or fewer gates utilized than scheduled (c)(Figure 2.3). It is natural to inspect these four functional causes by analyzing historical data. The operation data can be extracted or approximated using the methods in Section 3.2, but the corresponding scheduling or planning data cannot be obtained from the existing databases mentioned in Section 3.1. For example, scheduled gate occupancy time and scheduled gate usage are unavailable due to operation disruptions, such as cancellations, aircraft swapping, etc. Therefore, this section compares gate operation statistics in high gate-delay days against seasonal averages, instead of the plan on those days. The rationale for this approach is that the high gate-delay days are only a few outliers in the season population, specifically, only 2-3 days out of 92 days. So if the functional difference between a bad day and the seasonal average can be identified, the functional causes can be identified. Note that gate service time needs to be investigated not only for same day arrivals, but also for previous day arrivals since some aircraft stay overnight at an airport and depart the next day (usually the next morning). Section 4.2.1 presents the analysis of carrier aggregated data at six airports. Section 4.2.2 presents the analysis of carrier specific data at LGA airport. 48 ATL 15000 LGA 2500 2000 Daily gate delay (min) 10000 Daily gate 1500 delay (min) 1000 5000 500 0 0 6/1 6/15 6/29 7/13 7/27 8/10 6/1 8/24 6/15 6/29 7/13 7/27 8/10 8/24 Date Date 1400 400 1200 350 300 1000 Number of scheduled arrivals Number of 250 scheduled 200 arrivals 150 800 600 400 100 200 50 0 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 6/1 Date 6/15 6/29 7/13 7/27 8/10 8/24 Date Figure 4.10: Comparison of daily total gate delay and schedule volume, ATL and LGA, summer 2007, BTS data 4.2.1 Analysis of Carrier Aggregated Data (6 Airports) This section identifies functional causes of extreme gate delays using carrier aggregated data. The following illustrates the identification with some examples. Functional Cause 1: Over-scheduling Over-scheduling was not a functional cause of extreme gate delays. Figure 4.10 shows two examples of ATL and LGA. In days where gate delays were much higher than average, schedule volumes were regular. This means that over-scheduling was not a cause for severe gate delays. Functional Cause 2: Reduced Available Gates Figure 4.11 shows an example of reduced available gates as the functional cause. The first figure shows that a gate queue formed between 18:00 and 24:00. At the beginning of this period, the number of utilized gates is significantly smaller than the seasonal average, indicating reduced gate availability. The other three figures show that the other major 49 operating statistics are close to the seasonal average. The third figure shows that the average gate occupancy time of arrivals at the beginning or the end of a day is much longer than that of arrivals in the middle of a day. The reason is that arrivals at the beginning or the end of a day have a higher fraction of flights staying at the airport overnight. The term “starting departures” in the last graph is defined as departures whose aircraft arrived on the previous day (before 3:00 am on the day studied). Gate under-utilization can be caused by a variety of reasons, including awaiting gate assignment, unavailable ramp staff or ground equipment, inclement weather, and airline operation preference (see Section 2.2.2). In addition, for carrier aggregated data (such as Figure 4.11), gate under-utilization can be caused by a carrier mismatch or an aircrafttype mismatch. In this example, the specific cause of gate under-utilization is not known. In Section 4.2.2, carrier specific analysis is conducted on LGA to determine when gate under-utilization is not caused by a carrier mismatch. Functional Cause 3: Higher Arrival Rate Figure 4.12 shows an example of a higher-than-average arrival rate as the functional cause. The first figure shows that gate waiting is most significant between 20:00 and 24:00, and gate utilization in this period is higher than the seasonal average, precluding gate underutilization as the functional cause. The second figure shows that the actual arrival rate is higher than the seasonal average, indicating that higher arrival rate is the functional cause. The third figure shows that gate occupancy time on this day is close to the seasonal average. The fourth figure shows that the number of departures from overnight stays is also close to the seasonal average. Functional Cause 4: Longer Gate-occupancy Time Figure 4.13 shows an example of longer gate-occupancy time as the functional cause. The first graph shows the gate queue (the area under it represents total gate delay accumulated in a certain period) and gate usage. The gate delay time period is between 19:00 and 23:00, 50 200 150 Parked in summer 2007 average Number 100 of aircraft 50 Parked on the day studied 0 waiting for gates on the day studied 0 Hourly landing rate 6 12 18 24 30 150 100 Summer 2007 average 50 Day studied 0 0 6 12 18 24 30 600 Average 400 service time (min) 200 Summer 2007 average Day studied 0 0 6 12 18 24 30 40 Number of starting departures 30 20 summer 2007 10 Day studied 0 0 6 12 18 24 30 Hour of day Figure 4.11: Functional cause identification, ATL, 06/11/2007 51 200 Number of aircraft Parked in summer 2007 average 150 100 Parked on the day studied 50 0 0 Hourly landing rate 12 18 24 30 120 100 80 60 40 20 0 Summer 2007 average Day studied 0 Average service time (min) 6 waiting for gates on the day studied 6 12 18 24 30 600 400 Summer 2007 average 200 Day studied 0 0 6 12 18 24 30 30 Number of starting departures 20 summer 2007 10 Day studied 0 0 6 12 18 24 30 Hour of day Figure 4.12: Functional cause identification, ATL, 07/29/2007 52 and peaks at 21:00. In this period, more aircraft were parked than the seasonal average, so reduced available gates are excluded from the functional causes. The second graph shows that in the gate delay period, 19:00 to 23:00, the arrival rate on this day is lower than the seasonal average, so higher-than-scheduled arrival rate is excluded from the functional causes. The third graph shows that the average gate-service time in the gate-delay period, 19:00 to 23:00, and its previous time period, 17:00 to 19:00 (also related), is much higher than the seasonal average. Increased gate service time for same day arrivals is identified as a functional cause. The last graph shows that the departure rate in the gate-delay period, 19:00 to 23:00, is similar to the seasonal average (both are close to zero). Therefore, increased gate service for previous day arrivals is excluded from the functional causes. In summary, the functional cause for high gate delay from 19:00 to 23:00 on 6/27/2007 is increased gate service time for arrivals from 14:00 to 24:00. Other Observations Figure 4.14 shows the hourly cancellation rate at ATL on four days. The cancellation rate is low on June 5, 2007 when the gate-waiting performance is good. The cancellation rate is high on the three worst days, especially between 3 pm and 10 pm, coinciding with the periods of high gate waiting. Cancellations can have a negative effect on gate delay, because a cancellation grounds an airplane for a period of time typically longer than it would otherwise remain at a gate, thus reducing overall gate capacity. In other words, flight cancellations reduce the number of active flights. This decreases the overall fleet’s airborne time and increases the overall fleet’s ground time, which has the potential to increase gate delay. Systematic Analysis of Extreme Gate Delays in 6 Airports A systematic analysis uses carrier aggregated data to investigate the functional causes of extreme gate delays in the worst 3 days at LGA, ATL, JFK, EWR, DFW and MIA, as shown in Table 4.6. 53 Number of aircraft 70 60 50 40 30 20 10 0 parked in summer 2007 average parked on the day studied 0 Hourly landing rate 6 12 18 24 30 25 20 15 10 5 0 waiting for gates on the day studied Summer 2007 average Day studied 0 6 12 18 24 30 800 Average service time (min) 600 400 Summer 2007 average 200 Day studied 0 0 Number of starting departures 6 12 18 24 30 25 20 15 10 5 0 Summer 2007 average Day studied 0 6 12 18 24 30 Hour of day Figure 4.13: Functional cause identification, LGA, 06/27/2007 54 30 2007-06-05 2007 06 05 (good day) 2007-06-11 (bad day) Cancellations 25 per hour (arrivals and departures) 20 2007-07-29 (bad day) 2007-08-24 (bad day) 15 10 5 0 0 3 6 9 12 15 18 21 Hour of day Figure 4.14: Cancellations on 4 days, ATL, BTS data Table 4.6: Specific days analyzed Airports 3 worst days in summer 2007 LGA 6/27, 8/8, 8/9 ATL 6/11, 7/29, 8/24 JFK 6/1, 6/10, 6/11 EWR 6/29, 7/26, 8/9 DFW 6/17, 7/1, 7/2 MIA 6/17, 7/3, 7/5 55 24 The results of the systematic analysis of the 6 airports show that severe gate delays are related to operation disruptions, rather than over-scheduling. Appendix A shows the functional cause identification and Table A.7 shows a summary. Among the operation disruptions, extended gate occupancy time for same day arrivals and reduced gate availability are major contributors of extreme gate delays. 4.2.2 Analysis of Carrier Specific Data (LGA) One limitation of the analysis using carrier aggregated data in Section 4.2.1 is that it does not identify functional causes at a carrier level. For example, the analysis does not identify whether an increase of arrival rate is due to the operation disruption of one carrier or multiple carriers. The analysis does not identify whether reduced available gates is due to gates being unavailable for use (due to bad weather, unavailable ramp staff or equipment, etc.), a carrier mismatch or an aircraft-type mismatch. This section analyzes carrier specific data to identify functional causes of high gatewaiting delays at the carrier level. Queueing parameters in the LGA system, including gate utilization, arrival rate, and gate occupancy time, are investigated. As discussed in Section 3.3, LGA is selected because aircraft sizes of same carriers are similar at LGA such that it is not be a major issue to ignore aircraft-gate compatibility constraints. High Gate-waiting Delay Days The left side of Figure 4.15 shows the total gate-waiting delay at LGA for each day of Summer 2007. On most days, the delay is not very high, but on a few days, the delay is very high. The right figure is a quantile-quantile (QQ) plot of the daily total gate delay against the best distributional fit of the data (77 + Gamma(1.4, 239)1 , in minutes, obtained c input analyzer). For a perfect fit, the data would fall on a straight line. using the Arena⃝ The four worst days are significantly above the straight line. This indicates that on the worst days, the delays are “really bad” — worse than what might be predicted using a 1 The distribution of a random variable X is Gamma(α, λ), λ > 0, α > 0 if its probability density function is given by f (x) = λe−λx (λx)α−1 /Γ(α), x ≥ 0. 56 QͲQplotofdailygateͲwaitingdelays(min) 2500 2500 2000 2000 Dailygate D il 1500 waiting delay(min) 1000 8/8 Extremedays(heavytails) 6/27 8/9 1500 7/9 Observedvalue 1000 500 500 0 0 Tobeanalyzed indetail 0 6/1 6/15 6/29 7/13 7/27 8/10 8/24 200 400 600 800 1000 1200 1400 1600 1800 Expectedgamma(bestfit) Dayofyear Figure 4.15: Daily gate-waiting delay and QQ plot against gamma model, summer 2007 model based on the best statistical fit. Roughly speaking, the 92 days can be divided into 3 sections. The lower section has 80 “good” days, the middle section has 8 “bad” days, and the top section has 4 “extremely bad” days. The division between 80 “good” days and 8 “bad” days is based on the gap of total delay, but it is somewhat arbitrary. Since one of this section’s objectives is to include more days to get the frequency of delay causes, the 12 worst days are analyzed in detail. Dependence of Delays on Carrier and Time Carriers that experienced high total gate-waiting delays include Comair Inc., Delta Airlines, American Airlines, American Eagle Airlines and AirTran Airways. US Airways has a big market share, so it is also included in the analysis of this section. When subsidiary carriers are merged with mainline carriers, the three major carriers are American with American Eagle, Delta with Comair, and US Airways. Delta has a higher average gate-waiting delay than American, which has a much higher delay than US Airways, during the summer of 2007. A t-test shows that these averages are statistically different between any two of the three carriers, as mentioned in Section 4.1.4. Gate-waiting delay is carrier specific possibly due to the difference among carriers’ capacity fraction used for scheduling. Average gatewaiting delay is positively correlated with utilization, which means that a larger portion of reserve capacity can accommodate bigger disruptions of gate operations. For example, US Airways maintains a high volume of flights and keeps gate-waiting delays low whereas AirTran has a small market share but has high total gate-waiting delays. The reason is that US Airways has a higher percentage of surplus gates than AirTran. 57 1600 Summer2007 400 1400 350 1200 Total 1000 gateͲ waiting 800 delays 600 (min) 400 Total 250 gateͲ waiting 200 delays 150 (min) 100 200 50 0 0 TwoHighestͲGateͲDelayDays 300 0 2 4 7 9 11 13 15 17 19 21 23 AirTranAirways AmericanAirlines AmericanEagleAirlines Comair DeltaAirLines USAirways 0 3 6 9 1215 1821 0 3 6 9 1215 1821 Landinghour / / 8/8/2007 8/9/2007 / / Landingdateandhour Figure 4.16: Total gate-waiting delay by time of day and carrier, LGA Gate delays are also strongly dependent on time of day, as shown in Figure 4.16. On average, American Airlines tended to have gate-waiting problems around 11am and in the evening while Comair tended to have problems in the morning. On the two highestgate-delay days, Comair had high gate-waiting delay in the early morning on 8/8/2007 while American had high gate-waiting delay around 11am on 8/9/2007. Similar analysis of the third highest gate-waiting-delay day, 6/27/2007, shows that American Airlines and American Eagle Airlines had high gate delays in the evening. Gate-waiting delay is time specific because carriers have schedules that peak at different times. For example, Comair has the biggest arrival peaks in the morning and generates the highest gate demand. At that time, it pushes its gate utilization to the maximum, so gate-waiting delays may occur when disruptions happen. On the other hand, different gate-demand peak times provide an opportunity to exchange gate usage among carriers via common gates. Systematic Analysis of Functional Cause Identification The following analysis tries to identify the functional causes for gate-waiting delays. This is done by performing an analysis of the queueing elements: gate utilization, aircraft arrival rate, and gate service rate. Table 4.7 shows a summary of the functional cause identification. Similar to Table A.7, the sum of the cause count is more than the number of days studied (12) because in each of the 12 high-gate-delay days, gate delay may occur for more than one carrier in more than 58 Table 4.7: Gate Delay Functional Causes in 12 High Gate-delay Days at LGA in Summer 2007 Functional cause Count Over-scheduling 0 Reduced available gate 12 Higher arrival rate 8 Increased service time 1 one time period. So there may be more than one cause for gate delay in a day. Functional Cause 1: Over-scheduling The airline schedules are similar across different days, but high gate-waiting delays happen only in a few days (results are similar to Figure 4.10). So the issue is not over-scheduling. Functional Cause 2: Reduced Available Gates In all the 12 days, high gate delays were observed even though not all the declared gate capacity was used. Figure 4.17 shows an example. From about 15:00 to 18:00, there were significant gate delays even though the number of parked aircraft was less than the number of gates. American and American Eagle’s operation on August 9, 2007 also showed that gates were not fully utilized when gate-waiting delays occurred. Figure 4.17 shows that after about 18:00, there were more parked aircraft than gates. This is because many overnight aircraft may be parked in hangars, ramps and taxiways. Note that in this period, gate delay still occurred when gates were fully used. This indicates that there were multiple functional causes for gate delays on this day. Comair’s gate usage on August 8, 2007 showed a similar pattern, in which unused gate capacity was followed by full gate utilization during a period of high gate-waiting delays. There are several possible reasons that there is unused gate capacity when gate delays occur, as mentioned in the literature section. If the reason is that aircraft wait to dock in inclement weather or that ramp staff are unavailable, self-docking systems can improve gate utilization and reduce gate delays [Richards, 2008]. If a flight chooses to wait for its original 59 35 number of parked aircraft on 6/27 30 25 average number of parked aircraft in summer 2007 20 15 number of gates 10 number of aircraft waiting for gates on 6/27 5 0 0:00 3:00 6:00 9:00 12:00 15:00 18:00 21:00 0:00 3:00 6:00 Time of day Figure 4.17: Gate usage of American and American Eagle, LGA, 6/27/2007 assigned gate instead of going to an alternative gate (to avoid crew, passenger and baggage relocation at the last moment), improved gate reassignment based on a better prediction of flight departure/arrival times can improve gate utilization. Gate delay may also be due to an aircraft type mismatch, which is not analyzed systematically in this dissertation. Functional Cause 3: Higher Arrival Rate One possible cause for high gate-waiting delays is higher-than-scheduled arrival rate due to arrival compression. Figure 4.18 shows one example. Comair flights landing from 7am to 8am and 2pm to 3pm on 8/9/2007 experience gate-waiting delays. The reason is arrival compression in the two time windows. Between 7 am an 8 am, 6 aircraft landed instead of 5 scheduled arrivals. Similarly, between 2 pm and 3 pm, 5 aircraft landed instead of 3 scheduled arrivals. This type of scenario happens in 8 out of 9 days. Therefore, arrival compression can be a cause of gate-waiting delay. Functional Cause 4: Longer Gate-occupancy Time An increase in the gate-occupancy time can lead to gate delays. Figure 4.19 shows the only example observed in the 12 worst days. On June 27, the observed gate occupancy time was much higher than the seasonal average after 3 pm. There were two contributors to 60 60 50 40 TotalgateͲ waitingdelay 30 (min) 20 10 0 0 2 4 6 8 10 12 14 16 18 20 22 24 landinghour 7 Actual wheelsͲon Actualwheels on 6 ScheduledgateͲin 5 Arrival count 4 3 2 1 0 0 2 4 6 8 10 12 14 16 18 20 22 24 Hourofday Figure 4.18: Comair gate-waiting delay, arrival rate at LGA on 8/9/2007 this longer-than-average gate occupancy time: the extension of the gate occupancy time of some regular turns2 and the conversion of some regular turns to ending turns3 . The latter is mainly a result of departures cancellations and reassignments of the aircraft for next day departures, which is discussed as following. Section 4.2.1 showed that a high gate occupancy time is related to a high cancellation rate at ATL. This correlation also happened at LGA this day. American and American Eagle cancelled 30 arrival flights and 36 departure flights after 3 pm (more than 50% of scheduled flights after 3 pm). Based on communication with a major U.S. carrier, arrival cancellations are usually coupled with departure cancellations, which together are coupled with aircraft swapping to deal with high delay. The driver of this behavior is to maintain the validity of the aircraft itinerary and the crew itinerary. However, aircraft swapping usually increases gate occupancy time and gate demand. For example, on this day, many aircraft arrived at LGA with scheduled departures cancelled. They were swapped to fly other departures early the next morning, so they stayed at the gates for 10 hours, instead 2 A regular turn is an arrival-departure flight pair in which the arrival and the departure are in the same day. 3 An ending turn is an arrival-departure flight pair in which the arrival and the departure are in different days. 61 600 500 400 TotalgateͲ waitingdelay 300 (min) 200 100 0 0 1200 2 4 6 8 10 12 14 16 18 20 22 24 Landinghour,6/27/07 1000 800 averagegateoccupancytime 600 6/27/2007 400 Average in summer 2007 Averageinsummer2007 200 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 gate arrival hour gatearrivalhour Figure 4.19: Gate delay and gate-occupancy time by time of day (actual gate-in time), American and American Eagle of 1 hour. Flight cancellations are usually correlated with airport capacity reductions and Ground Delay Programs (GDP). On this day, there was indeed a GDP from 4 pm though 3 am next day due to thunderstorms. So the complete story was likely as follows. The predicted airport capacity dropped based on weather prediction, and the FAA issued a GDP. American Airlines anticipated high delay and decided to cancel 50% of their flights after 3 pm. As a result, gate occupancy time of cancelled departures extended dramatically and no gates were available when arriving flights landed. American Airlines probably failed to consider that gates could be a choke point under a high cancellation rate. If this can be foreseen, it may be better to cancel fewer departure flights and cancel more arrival flights, based on the lessons learned from Northwest Airline’s response to the January 1999 Detroit snowstorm [Slater, 1999]. Sometimes long gate-occupancy times can be voluntary to save fuel and improve safety under GDP and taxi-out time saving initiatives [Simaiakis and Balakrishnan, 2009]. But if a gate is needed by an arriving aircraft, the departure aircraft usually pushes back and makes the gate available, unless there are pushback constraints [Idris, 2001]. Voluntary gate hold is not a major reason for high gate delay unless cancellations are involved, as 62 mentioned above. 4.3 Analysis Summary This chapter applied the algorithms developed in Chapter 3 to estimate gate-waiting delays at the OEP-35 airports and to identify functional causes of high-gate-delay days at LGA, ATL, JFK, EWR, DFW and MIA using data from the BTS and ASPM databases for the summer of 2007. 4.3.1 Average Gate Delay Across the OEP-35 Airports Analysis of the average gate delay across the OEP 35 airports identified the following: 1. For most airports on most days, gate waiting was not an excessive problem. Significant delays occurred relatively in frequently (e.g., once a month at ATL). 2. However, on the isolated bad days, the gate-waiting delays were typically very bad. 3. Gate-waiting delays had a strong dependency on time of day. 4. At airports with high gate delay, there were statistically significant differences between the gate delays experienced by the major carriers, meaning that different carriers usually use a different portion of gate capacity for scheduling. For example, at JFK, Delta schedules more aggressively on their gate capacity (over-scheduling) than JetBlue. This suggests that more common gates could improve gate-waiting delay. 5. The observed correlation between aircraft type and gate-waiting delay was typically small. 4.3.2 High Gate-Delay Days at Six Major Airports Analysis of the high gate-delay days at six major airports (including detailed carrier specific analysis of LGA) identified the following: 63 1. Gate delays in the worst days were usually time specific. 2. Analysis of possible functional causes identifies the following. (a) Over-scheduling is not a reason for high gate delays since the schedules of highgate-delay days are similar to those in low-gate-delay days. (b) In some days, a greater-than-scheduled arrival rate (over some period of time) due to arrival compression was a source of high gate delay. (c) In some days, gate delay can be attributed to longer-than-normal gate-occupancy times. (d) In some days, instances were observed where gate-waiting delays occurred even though some of the declared gate capacity in the airport was apparently available. (e) In some days at LGA, reduced gate availability was not due to carrier mismatch. Rather, some gates became unavailable due to inclement weather, unavailable ramp staff, or unavailable equipment. Overall, functional origins of gate-waiting delay included greater-than-scheduled arrival rate, extended gate occupancy times and reduced number of gates. Many of these origins are related to schedule disruptions which are the main common factor identified in the worst days. 64 Chapter 5: Gate Delay Simulation Model and Analysis To quantitatively evaluate the impact of individual disruptions identified in Chapter 4, and to evaluate the effect of gate-delay mitigation strategies, this chapter presents a simulation model to simulate delay causes and evaluate gate-delay mitigation strategies. The analysis in Chapter 4 was limited by the use of historical data. Thus, it could not isolate the effects of individual factors, nor could it determine the effects of mitigation strategies. A simulation model can be used to investigate the impact of individual disrupting factors. For example, when an airline-operation center cancels flights (leaving aircraft on the ground), they may not realize how much impact this will have on gate congestion. When airport runway capacity is reduced due to whether, air traffic controllers may not anticipate possible taxiway congestion when many flights arrive in later hours. A simulation model can also be used to investigate potential gate mitigation strategies. To deal with operation disruptions, airports may want to know how many gates should be reserved as common gates, airlines may want to know when they should park their flights remotely during a disruption, and regulators may want to weigh the impact on gate congestion before passing or blocking an airline’s gate swap proposal [Eckert, 2010]. Figure 5.1 shows the gate delay disruptions and mitigation strategies identified in the literature review (Chapter 2). This chapter quantitatively investigates the following four major disruptions to gate operations (identified in Chapter 4): A. Arrival delay, which may cause a greater-than-scheduled arrival rate at a later time B. Extension of gate-blocking time C. Conversion of regular turns to overnight turns D. Unavailable gates 65 Estimation and characteristics Gate Delay Factors •Airport •Day •Time •Carrier •Aircraft size Functional causes Mitigation strategies Airline: under-schedule Over-scheduling FAA: runway slot control Higher Arrival Rate Airline: reduce gate occupancy time A: Arrival Delay Lower Service Rate B: Regular turns C: New end turns D: Lower Gate Utilization I: Airline / airport : offterminal parking at night Airline / airport: gate reassignment II: Airline: self-docking gates III: Airline/airport: more gates Any Causes Above IV: Airline/airport: common gates Airline: arrival cancellations Figure 5.1: Gate delay functional causes and mitigation strategies This chapter also investigates the following four gate-delay mitigation strategies (identified in Chapter 2): I. Increase the number of gates II. Use common gates III. Use self-docking gates IV. Park overnight aircraft at an off-gate location The simulation model also considers the possibility that not all carriers may be impacted by a disruption and that a disruption may happen in a window of several hours, as identified in Chapter 4. 66 Gate arrival time Gate-in time Positioningin time Gate-out time Gate-occupancy time Gate departure time Positioningout time Gate-blocking time Figure 5.2: Critical times in gate operation 5.1 Gate-delay Simulation Model 5.1.1 Scope The model simulates gate operations for 24 hours1 . There are two types of entities in the simulation model — aircraft and gates. A gate is simulated for 24 hours while an aircraft is simulated from the time it arrives at the ramp until the time it leaves the ramp. 5.1.2 Terminology The section defines terminology used in this chapter, illustrated in Figure 5.2. • Gate-occupancy time: the amount of time that an aircraft spends at a gate [de Neufville and Odoni, 2003] (from gate-in time to gate-out time [BTS, 2003]). • Positioning time: the time to position an aircraft into (positioning-in time) and out of (positioning-out time) a gate [de Neufville and Odoni, 2003]. • Gate-blocking time: the time that an aircraft blocks a gate for exclusive use, which includes gate positioning-in time, gate occupancy time, and gate positioning-out time [de Neufville and Odoni, 2003, pages 424–430] (Figure 5.2). In this chapter, gate occupancy time refers to gate-blocking time since gate occupancy time is the major component of gate-blocking time and is a widely used term. 1 Specifically, from 3 am to the 3 am because there are usually no arrivals or departures around 3 am. This definition implies that delayed flights typically do not spill over to the next day. 67 • Nominal ramp arrival time: the time that an aircraft is expected to arrive at the ramp based on a seasonal average. • Nominal gate-blocking time: the time that an aircraft is expected to block the gate based on a seasonal average. • Turn: a process in which an aircraft arrives to a gate, occupies the gate for a period of time2 , and then departs from the gate. There are two types of turns depending on the arrival and departure time: – Regular turn: a turn in which both the arrival flight and the departure flight are in the same day. – Overnight turn: a turn in which the arrival flight and the departure flight are in different days. In the simulation purpose, a new day is defined to start at 3 am. An overnight turn is further divided into two “half turns”: ∗ Ending turn: a turn in which an aircraft arrives to a gate and then occupies the gate until the end of the day (3 am). ∗ Starting turn: a turn in which an aircraft occupies the gate from the start of the day (3 am) and then departs later in the day. • Regular arrival: the arrival flight of a regular turn. • Regular departure: the departure flight of a regular turn. • Ending arrival: the arrival flight of an overnight turn. • Starting departure: the departure flight of an overnight turn. • Remote gate: a gate that is far away from the terminal. Figure 5.3 shows the remote gate area at Washington Dulles International Airport. In order to board passengers, an airplane parked at the remote gate needs to be moved to the terminal to board 2 In the middle of this period, the aircraft may leave the gate for maintenance, a gate vacation or some other purpose and then come back. 68 Figure 5.3: The remote gate area at Washington Dulles International Airport passengers, or passengers need to take a bus to come to the remote gate to board the airplane. 5.1.3 Model Description and Data Sources Figure 5.4 shows an overview of the stochastic simulation model. There are three main components in the model: demand input generation, supply input generation and the gatedelay simulation engine. The gate-delay simulation engine inputs demand and supply and outputs gate delays. The three main components are sequentially described as follows, illustrated with LGA data or fictitious data. LGA data sources and related assumptions are listed in Table 5.1, Table 5.2 and Table 5.3. Demand The input for the demand module includes the following four sets of hourly operational parameters by carrier. These parameters are populated using historical seasonal averages from the summer of 2007. 69 70 b maps.google.com [Klein and Wang, 2006] c [Wang et al., 2010] d [Fricke and Schultz, 2008] e [Fricke and Schultz, 2008] f [de Neufville and Odoni, 2003] a Demand Mitigation Demand Deviation Demand Disruption Demand baseline Category Scope Table 5.1: Deterministic simulation model parameters and assumptions illustrated with LGA, part 1 Parameter Value Data source Notes a Airport LGA Public web site ; LGA is space constraint, A presentation b gate waiting is disruptive Airlines modeled AA,MQ,DL,OH A paper c high gate delay carriers c Time One day in summer 2007 A paper High delays Regular arrival rate Hourly average by carrier [BTS, 2003] Regular turn (RT) Gate Hourly average by carrier [BTS, 2003] Blocking Time (GBT) Starting departure rate Hour average by carrier [BTS, 2003] Ending arrival rate Hour average by carrier [BTS, 2003] Start Turn (ST) GBT 30 min A paper d Enough time e Off-gate End Turn (ET) GBT 30 min A paper Enough time On-gate ET GBT until day end Positioning-in time 1 minute A book f small portion of positioning time f Positioning-out time 4 minute A book large portion of positioning time Disruption start time 19:00 A paper c One sample day c Disruption duration 2 hours A paper Same as above Airlines disrupted AA, MQ A paper c One carrier per disruption Disrupted arrival delay 0 Baseline To model arrival rate increase GBT extension multiplier 1 Baseline Fraction of RT 0 Baseline converted to ET Fraction of ET 0.9 A paper c Seasonal average parked off-gate Arrival time deviation 0 Deterministic GBT deviation 0 Deterministic X X X X X X Variable 71 b American Airlines web sites Delta Air Lines web sites c Google Maps; http://wikimapia.org/3557/LaGuardia-Airport-LGA-KLGA; www.flightstats.com, etc. d http://www.panynj.gov/airports/lga-airport-map.html e with an airport manager of a major U.S. carrier a Simulation Others Matching Category Supply Table 5.2: Deterministic simulation model parameters and assumptions illustrated with LGA, part 2 Parameter Value Data source Notes a Number of AA gates 10 Public web site Number of MQ gates 6 Same as above Gate capacity expansion fraction 0 Baseline Number of DL gates 16 Public web site b Number of OH gates 5 Public web sites c Fraction of common gates 0 Public web sites d No indication of common gate usage Unavailable gate fraction 0 Baseline Queueing discipline FCFS Interview e Off-gate rule for ending arrivals FCFS Arbitrary Number of replications 1 Deterministic Aircraft type property of a gate Generic ASPM database similar aircraft used by a carrier Gate occupancy time for starting turns 30 min Chapter 4 usually no delay in the morning Airline compatibility of common gates AA/DL,MQ/OH ASPM database similar aircraft size X X X Variable 72 b Standard deviation of arrival delay in 10 airport is 17.94 minutes In this paper, time unit is second, alpha = 1.6, beta = 808; Weibull mean is 724.432 seconds, so -724.432 seconds offset is used to adjust distribution mean to be zero; Weibull standard deviation is 463.58 seconds c Caveat: This Weibull distribution is the best fit. But it is not a statistically proved weibull distribution(e.g. a Chi-Square Test wouldn’t pass) a Simulation Category Demand Table 5.3: Stochastic simulation model parameters Parameter Value Data source a Arrival time deviation Normal (0,18) min [Mueller and Chatterji, 2002] GBT deviation Weibull(1.6,808,-724.432) seconds b [Fricke and Schultz, 2008]c Number of replications 100 Stochastic Disruption and supply mitigation Baseline gate Modified gate capacity capacity Legend Moment Duration Ramp arrival time deviation Average ramp arrival time Average gate blocking time Actual ramp arrival time Modified ramp arrival time Disruption, disaggregation and mitigation FCFS Airline compatible Gate blocking time deviation Modified gate blocking time Gate arrival time Actual gate blocking time demand Gate delay Gate departure time Gate delay simulation engine Figure 5.4: Simulation model overview 1. Arrival rate for regular turns 2. Average gate-blocking time for regular turns 3. Arrival rate for overnight turns 4. Departure rate for overnight turns Figure 5.5 shows an example. Data sources come from the BTS database, as listed in Table 5.1. The limitation of the BTS database is that it does not contain international flights. Three demand disruptions are modeled: (A) arrival delay, (B) regular turn gate-blocking time extension, and (C) conversion from regular turns to ending turns. The three demand disruptions are described by six demand disruption parameters: disrupted airline, starting hour, duration (number of hours), arrival delay, gate-blocking time extension multiplier and fraction of regular turns converted to ending turns, as described in Table 5.1. The first three parameters are common to all disruptions and the other three parameters are specific to each disruption. Figure 5.6 illustrates the disruption of arrival delay (A), where arrivals between 19:00 to 21:00 are delayed 3 hours. This creates an arrival rate peak from 22:00 to 24:00. Figure 5.7 illustrates the disruption of regular turn gate-blocking time extension, where gate-blocking time is doubled for regular turns that arrive between 19:00 to 21:00. 73 Regular turns Overnight turns 5 Number of regular arrivals 5 4 4 Number of ending arrivals 3 2 1 0 3 Average gate blocking time for regular turns (min) 5 7 DL 2 MQ 1 OH 0 9 11 13 15 17 19 21 23 25 160 140 120 100 80 60 40 20 0 AA 3 3 5 7 9 11 13 15 17 19 21 23 25 5 4 Number of starting departures AA 3 DL 2 MQ 1 7 OH 0 9 11 13 15 17 19 21 3 Hour 5 7 9 11 13 15 17 19 21 23 25 Hour Figure 5.5: Simulation model demand input, LGA data Figure 5.8 illustrates the disruption of conversion from regular turns to ending turns, where half of the regular turns between 19:00 to 21:00 are converted to ending turns. There is one demand mitigation strategy that is modeled in the demand component of the simulation — parking aircraft staying at an airport overnight off-gate (IV). This strategy is specified by a single parameter: ending turns parked off-gate as a fraction of gate capacity. For example, if an airline has 10 gates and the fraction is 0.4, its first 4 ending turns stay at their gates for 30 minutes and then leave the gates and park elsewhere. The remaining ending turns stay overnight at their gates. This strategy increases gate capacity for overnight turns. Finally, the turn-disaggregation process generates individual turns from the hourly operational data. Table 5.4 illustrates the demand disaggregation process. In the aggregated process, there are two regular arrivals and one ending arrival. The disaggregation process evenly distributes ramp arrival times in an hour. So the arrival times of the two regular arrivals are 18:00 and 18:30. The arrival time of the ending arrival is 18:00. 74 80 70 60 Number of regular arrivals 50 40 Before disruption 30 After disruption 20 10 0 3 6 9 12 15 18 21 24 27 Hour Figure 5.6: Demand disruption A: arrival delay; start hour: 19, duration: 2 hours; arrival delay: 3 hours; fictitious data 140 120 100 Gate blocking time (min) 80 60 Before disruption 40 After disruption 20 0 6 9 12 15 18 21 24 Hour Figure 5.7: Demand disruption B: regular turn gate-blocking time extension; start hour: 19, duration: 2 hours; gate-blocking time extension multiplier: 2; fictitious data 75 Number of flights 50 50 40 40 30 Number of flights starting departures 20 regular arrivals 10 30 starting departures 20 regular arrivals 10 ending arrivals ending arrivals 0 0 3 6 9 12 15 18 21 24 27 3 6 9 12 15 18 21 24 27 Hour Hour (a) Before disruption (b) After disruption Figure 5.8: Demand disruption C: regular turns converted to ending turns; start hour: 19, duration: 2 hours; fraction of regular turns converted to ending turns: 0.5; fictitious data Table 5.4: Demand disaggregation, fictitious data (a) Before Disaggregation Hour 18 Carrier IATA Code AA No. regular arrivals 2 No. end arrivals 1 No. start departures 0 Regular arrival’s average gate occupancy time 60 (b) After Disaggregation Carrier IATA Code AA AA AA Turn type Regular Regular End Actual ramp arrival time 18:00 18:30 18:00 76 Actual gate departure time N/A N/A N/A Gate-blocking time (min) 60 60 N/A AA, MQ have 10% gate unavailable in a specific day Baseline Carrier IATA code AA MQ DL OH Aircraft type NB RJ NB RJ No. gates 10 6 16 5 AA, MQ expanded gate capacity by 10% 20% gates turned to common use AA, MQ’s 50% gates are selfdocking Carrier IATA No. regular No. selfcode Aircraft type Gates docking gates AA NB 5 5 MQ RJ 3 3 DL NB 16 0 OH RJ 5 0 Carrier Aircraft IATA code type AA NB MQ RJ DL NB OH RJ No. gates Carrier Aircraft IATA code type AA NB MQ RJ DL NB OH RJ No. gates Carrier Aircraft IATA code type AA NB MQ RJ DL NB OH RJ AA, DL NB MQ, OH RJ No. gates 11 7 16 5 9 5 16 5 8 5 13 4 5 2 Disruption (D): reduced gate availability Mitigation (I): more gates Mitigation (II): common gates Mitigation (III): self-docking gates Figure 5.9: Simulation model supply disruption and mitigation; LGA data Supply On the supply side, the nominal gate capacity specifies the number of carrier-specific gates and the number of common gates. Gate-capacity modification parameters include available gate fraction, gate capacity expansion fraction, common-gate fraction and self-docking-gate fraction. These parameters modify the new gate capacity as shown in the four examples in Figure 5.9. In the baseline scenario, American Airlines (AA) has 10 Narrow Body (NB) gates; American Eagle (MQ) has 6 Regional Jet (RJ) gates; Delta Airlines (DL) has 16 NB gates; Comair (OH) has 5 RJ gates. Disruption D (some gates become unavailable) is illustrated by a scenario in which 10% AA and MQ gates becomes unavailable. Mitigation strategy I (adding new gates) is illustrated by a scenario in which AA and MQ expanded gate capacity by 10%. Mitigation strategy II (use of common gates) is illustrated by a scenario in which all four airlines make their 20% gates common use while keeping aircraft type compatibility. Mitigation strategy III (use of self-docking gates) is illustrated by a scenario in which 50% AA and MQ gates are made self-docking gates. 77 Gate Delay Simulation Engine Figure 5.4 shows the logic of the simulation engine from an aircraft’s perspective. An aircraft enters the system at a ramp arrival time (which is the nominal ramp arrival time plus a stochastic deviation) and requests gate service immediately. The gate assignment rule is first-come, first-served, and requires that the carrier property of the aircraft and the gate match. If a matching gate (carrier match) is available, the aircraft immediately arrives at the gate and blocks the gate for exclusive use. Otherwise, the aircraft waits on the tarmac for a gate to become available and hence experience gate-waiting delay. The gate-blocking time is computed by adding the gate-blocking time deviation to the nominal gate-blocking time. After the gate-blocking time, the aircraft departs the gate and makes the gate available to next aircraft. For a starting turn, an aircraft is assumed to arrive at the ramp 30 minutes before its nominal ramp departure time. In actual operation, most aircraft occupy the gate overnight. This simplification in the simulation is based on the fact that starting turns usually do not contribute to gate delay [Wang et al., 2010] and that 30 minutes is usually more than enough to prepare a departure (including passenger enplaning) since the nominal service time for an arrival-departure pair (including passenger deplaning and enplaning) is about 30 minutes [Fricke and Schultz, 2008]. For an ending turn, the simulation is closer to operation in that it separates the ending turns parked at gates and ending turns parked away from gates. For ending turns parked away from gates, 30 minutes is also used as the gate-blocking time. The simulation parameters specify two stochastic factors, ramp arrival time deviation and gate-blocking time deviation, as shown in Table 5.3. 5.1.4 Modeling Assumptions and Limitations The following assumptions are made in the model. • This is a single airport model. No upstream or downstream effects are considered. 78 • There are no arrival cancellations. That is, all scheduled arrival flights are operated within the simulation. • The model only considers functional causes. Deeper causes, including upstream effects, downstream effects and pushback constraints, are not modeled. For example, an increase in gate-blocking time increase can be due to ground-delay problems and/or aircraft swaps, which are outside of the model scope. • The only gate compatibility constraint is carrier match. Actual compatibility constraints often include aircraft-type compatibility, gate-adjacency constraints, and business rules (for example, airlines may dedicate some gates to premium flights, and a gate can be leased to a specific airline). The assumption that a gate is generic in terms of aircraft size is appropriate if similar aircraft sizes are used for the same carrier, which is the case at LGA (RJs in American Airlines are usually part of its subsidiary, American Eagle, with a different airline code, MQ). • First-come, first-served gate assignment is used. In practice, every turn has its initial gate assignment, and it is usually preferred to keep the gate assignment if the delay is not too long. Based on an interview with an airport manager, if an aircraft sits on the tarmac for more than 10 minutes, it usually looks for an alternative. • Use of overnight parking: All starting departures are parked away from gates. Earliest ending arrivals park off-gate until a planned number is reached. • Use of common gates: There are only two types of common gates, main line (narrow body) and regional carriers (regional jets) at LGA. There is only one type of common gates (compatible with any carrier) at other modeled airports. • As a disruption scenario, gate capacity reduction lasts for a day while actual gate capacity reduction usually lasts only for a period of time due to weather, ground personnel shortage, etc. This assumption is appropriate to model gate capacity reduction in a high gate-utilization period, since a small gate capacity reduction in a 79 low gate-utilization period has no impact on gate delay. 5.1.5 Implementation The simulation is implemented using Java with the Java simulation library PsimJ2 [Garrido, 2009] and the Java library Stochastic Simulation in Java (SSJ)3 . The Java PsimJ2 library is a set of Java classes that implements the mechanisms necessary to develop simulation models and to carry out simulation runs using the process-interaction approach, where events and activities of major components of a system, defined as processes, are modeled together [Garrido, 2008]. The random number generator is from the SSJ library, which provides capabilities to generate random numbers by streams and substreams, which ensures independence among different random numbers in different locations of the model and different replications of simulations. It also has better properties compared with Excel and other random number generators [L’Ecuyer, 2008]. The source code of the simulation model is listed in Appendix B. 5.2 Simulation Results and Analysis Four disruption and four mitigation strategies are investigated, as discussed in Section 5.1.1. 5.2.1 Canonical Airport Simulation A canonical airport is first modeled using idealized input data. The purpose is to verify the simulation model behavior and develop an understanding of the baseline system response to disruptions and simulation parameters. In subsequent models of individual airports, the input data are not idealized and the input irregularity may confound the understanding of simulation results. 3 http://www.iro.umontreal.ca/˜simardr/ssj/indexe.html 80 50 40 Number of flights 30 starting departures 20 regular arrivals 10 ending arrivals 0 3 6 9 12 15 18 21 24 27 Hour Figure 5.10: Canonical airport demand profile Input Data For simplicity, only one airline is modeled in the canonical airport. Figure 5.10 shows the demand profile. There are three regular arrival peaks in the morning, afternoon, and evening, similar to ATL, as shown in Appendix A. The starting departures are concentrated in the early morning while ending arrivals are concentrated in the late afternoon. The gateblocking time is a constant 60 minutes, and the number of gates is 67. Verification To verify the simulation model, gate occupancy statistics are computed in both an analytical model and the simulation model. The analytical model assumes infinite gate capacity4 and uses a demand profile to compute gate occupancy. The results from the two models match each other, as seen in Figure 5.11. It can be seen that the gate utilization is at maximum in the evening, where disruptions are expected to have the most impact. 4 The infinite gate capacity assumption stands because 67 gates are enough to meet demand any time of the day (see Figure 5.11). 81 70 60 50 Number of aircraft parked 40 analytical model 30 simulation model 20 10 0 0 3 6 9 12 15 18 21 24 27 30 Hour Figure 5.11: Canonical airport gate occupancy Disruptions: One-Factor-at-a-Time A two hour window in the evening, 19:00 to 21:00, is selected for disruptions (see Table 5.5). This time window is selected based on historical data that disruptions often occur in the evenings (see Appendix A). Figure 5.12 shows the simulation results. The impact of arrival delay is relatively small because it only shifts demand around. The new demand peak does cause delay, but the peak demand can be quickly absorbed by slack capacity in non-peak hours. In contrast, the impact of gate-blocking time extension and turn conversion is linear after the slack capacity is used. The reason is that the extra gate demand grows linearly with the disruption magnitude. The impact of gate unavailability increases non-linearly after slack capacity is used. The reason for this is that gate capacity reduction is for the entire day and when slack gate capacity is used up, the system is saturated. To evaluate the quality of using a deterministic simulation, a stochastic simulation is conducted and compared against the deterministic simulation. The stochastic simulation parameters in Table 5.3 are used, if applicable. Figure 5.13 compares their results for arrival delay disruption and shows the following. 82 Table 5.5: Disruption: one factor at a time Factor A: Arrival delay (in min) B: Gate-blocking time multiplier C: Fraction of regular turns converted to ending turns D: Unavailable gate fraction min 0 1 0 max 360 4 1 disruption start hour 19 19 19 disruption duration 2 2 2 0 0.5 N/A N/A 20000 20000 15000 15000 Daily gate delay (min) 10000 Daily gate delay (min) 10000 5000 5000 0 0 0 60 120 180 240 300 360 1 Arrival delay (min) 1.5 2 2.5 3 3.5 4 Gate blocking time multiplier (a) Disruption A: Arrival delay (b) Disruption B: Gate-blocking time extension 20000 20000 Daily gate 15000 delay (min) 15000 Daily gate delay (min) 10000 10000 5000 5000 0 0 0.2 0.4 0.6 0.8 0 1 0 0.1 0.2 0.3 0.4 Unavailable gate fraction Fraction of regular turns converted to ending turns (c) Disruption C: Regular turn converted to ending turn (d) Disruption D: Gate unavailable Figure 5.12: Impact of disruptions: one factor at a time, canonical airport 83 0.5 Daily gate delay (min) 4800 4200 3600 3000 2400 1800 1200 600 0 Deterministic Stochastic average of 100 replications with 95% confidence interval 0 60 120 180 240 300 360 Ramp arrival delay (min) (a) Arrival deviation distribution standard deviation: 18 minutes Daily gate delay (min) 4800 4200 3600 3000 2400 1800 1200 600 0 Deterministic Stochastic average of 100 replications with 95% confidence interval 0 60 120 180 240 300 360 Ramp arrival delay (min) (b) Arrival deviation distribution standard deviation: 14 minutes Figure 5.13: Impact of demand disruption A: arrival delay; canonical airport • Deterministic simulation is able to capture the trend of system response to disruptions. It can be seen that the stochastic simulation produces similar results as the deterministic simulation. So later experiments will use deterministic runs. • Stochastic simulation generates smaller delay because the deviation washes out demand peaks to some degree. • As the deviation increases, gate delay decreases because the wash-out effect increases. 84 Mitigation Strategies: Factorial Design To evaluate the impact of mitigation strategies and their interactions while keeping experiments efficient, a two level design is adopted. Table 5.6 shows the factors, where eight factors in two categories are presented. The low level parameters represent baseline and the high level parameters represent the magnitudes of disruptions or mitigation strategies. For disruptions, the values of the high level parameters are selected to be in a reasonable range compared with the actual disruption, as shown in Appendix A. In addition, the parameters are selected such that the four disruptions generate similar gate delay based on results shown in Figure 5.12. The mitigation parameters are selected based on historical data or literature. For example, Horonjeff and McKelvey [Horonjeff and McKelvey, 1993] indicate that normally gates are scheduled for up to 80% occupancy. The remaining 20% gate capacity is the slack capacity to deal with operation disruptions. Therefore, it is reasonable to investigate the impact of converting the 20% slack gate capacity to be common gates. As a benchmark, the same 20% is used for new gate capacity. Richards [Richards, 2008] indicates that DFW airport began using self-docking systems at 92 of its 157 gates (58%). Wang et al. [Wang et al., 2010] show that American Airlines and American Eagle Airlines usually park 25 aircraft at LGA at night compared with their 16 gates (off-gate parking is 56% of their gate capacity). Table 5.7 shows the set of experiments. The disruption is investigated one at a time based on the analysis in Chapter 4. The mitigation strategies are investigated using a factorial design. Table 5.8 shows the effects of the four mitigation strategies and their interactions5 . First, “Gate delay under disruption” is the baseline that no mitigation strategies are in place. For example, gate delay is 3,630 minutes when the disruption of arrival delay occurs, and gate delay is 2,955 minutes when the disruption of gate-blocking time extension occurs. After that, for each of the four disruptions, mitigation strategies and their interactions are 5 The effects are calculated based on simulation results using the software Design-Ease 8.0.4 Trial (www.statease.com) 85 86 Factor A: Disrupted arrival delay (in min) B: Gate-blocking time extension multiplier C: Fraction of regular turns converted to ending turns D: Unavailable gate fraction I: New gate capacity fraction II: Common gate fraction III: Self-docking gate fraction IV: Ending turns parked off-gate as a fraction of gate capacity 0 1 0 0 0 0 0 0 + 120 2 0.35 0.35 0.2 0.2 0.5 0.5 start hour 19 19 19 N/A N/A N/A N/A N/A duration 2 2 2 N/A N/A N/A N/A N/A Table 5.6: Eight factors to be investigated, canonical airport (one carrier) carriers impacted one carrier one carrier one carrier one carrier one carrier N/A one carrier one carrier Table 5.7: One factor at a time for Formulation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 65 disruption and factorial design A B C D I II III + + - + + - + + - + + + + + - + + + - + + + - + + + + + - + + - + + - + + + + + - + + + - + + + - + + + - + - + - + - + - + - + - + + - + + - + - + + - + - + + - + - + + + - + - + - + - + - + - + - + + - + + - + - + + - + - + + - + - + + + ... ... ... ... ... ... ... - + + + + 87 for mitigation strategies IV + + + + + + + + + + + + + + + + ... + evaluated. For example, when the disruption of arrival delay occurs, the average effect (whether other strategies are in effect is unknown) of new gate capacity is reducing the gate delay by 1,614 minutes (a fraction of 0.44 of the baseline, 3,630 minutes6 ). The average effect of ending turns parked off-gate is reducing gate delay by 2013 minutes (a fraction of 0.55 of the baseline). The interaction of these two strategies increases gate delay by 762 minutes (a fraction of 0.21 of the baseline). This indicates that implementing multiple mitigation strategies has diminishing effects. In other words, if one strategy is in use, the effect of another strategy tends to be small. The results show that additional gates are very effective for all four types of disruptions, as expected. Surprisingly, ending turn off-gate parking is very effective not only for the disruption of regular turns converted to ending turns, but for other disruptions as well. This is because the disruptions in the experiment occur in the evening and ending turns can vacate gates at the same time using off-gate parking. Considering that disruptions often occur in evenings (see Appendix A), off-gate parking has the potential to mitigate gate delay effectively under different types of disruptions. 5.2.2 LGA Simulation LGA is simulated because delays at this airport are high, and it is a land constrained airport so gate delays can impact surface operations. Gate operations of four major airlines experiencing high gate delays, American Airlines (AA), its regional affiliates American Eagle Airlines (MQ), Delta Air Lines (DL), and its subsidiary Comair (OH), are modeled at LGA. Disruptions: One-Factor-at-a-Time The same parameter values as shown in Table 5.5 are selected for disruptions in the onefactor-at-a-time experiments. Figure 5.14 shows the simulation results. The impacts of the first three disruptions are moderate compared with those in the canonical airport. This is 6 This is just a benchmark for the comparison with other airports. It does not mean that new gate capacity would reduce the gate delay of 3,630 minutes by 1,614 minutes or 44% since 1,614 minutes delay reduction is the average effect whereas it is known that other strategies are not in effect for the baseline experiment. 88 89 Table 5.8: Calculated mitigation effects on disruptions, canonical airport Disruption Arrival Gate-blocking Regular turn converted delay time extension to ending turn Gate delay under disruption (min) 3630 2955 3015 Delay reduction under mitigation min fraction min fraction min fraction Main effects New gates, I -1614 -0.44 -1890 -0.64 -1443 -0.48 Common gates, II 0 0 0 0 0 0 Self-docking gates, III 0 0 0 0 0 0 Ending turns parked off-gate, IV -2013 -0.55 -975 -0.33 -1571 -0.52 Two-factor interactions I * II 0 0 0 0 0 0 I * III 0 0 0 0 0 0 I * IV 762 0.21 460 0.16 1443 0.48 II * III 0 0 0 0 0 0 II * IV 0 0 0 0 0 0 III * IV 0 0 0 0 0 0 Three-factor interactions I * II * III 0 0 0 0 0 0 I * II * IV 0 0 0 0 0 0 0 0 0 0 0 0 I * III * III II * III * IV 0 0 0 0 0 0 Four-factor interactions I * II * III * IV 0 0 0 0 0 0 -0.34 0 -0.36 -0.17 0 0.33 0.14 0 0 0.16 0 0 -0.13 0 0 -1071 0 -1144 -545 0 1048 449 0 0 522 0 0 -426 0 0 Gate unavailable 3187 min fraction 20000 20000 15000 15000 Daily gate delay (min) 10000 Daily gate delay (min) 10000 5000 5000 0 0 60 120 180 240 300 0 360 1 Arrival delay (min) 2 2.5 3 3.5 4 Gate blocking time multiplier (a) Disruption A: Arrival delay (b) Disruption B: Gate-blocking time extension 20000 Daily gate delay (min) 1.5 20000 15000 15000 Daily gate delay (min) 10000 10000 5000 5000 0 0 0.2 0.4 0.6 0.8 0 1 0 0.1 0.2 0.3 0.4 0.5 Unavailable gate fraction Fraction of regular turns converted to ending turns (c) Disruption C: Regular turn converted to ending turn (d) Disruption D: Gate unavailable Figure 5.14: Impact of disruptions (AA, MQ) on total daily gate delays (AA, MQ, DL, OH): one factor at a time, LGA because there is relatively more slack gate capacity at LGA in the disruption time period, 19:00 to 21:00 (see Figure 4.17). So when disruptions occur, the impacts are relatively small. Mitigation Strategies: Factorial Design Table 5.9 shows the factors, where eight factors in two categories are presented. The disruption parameters are selected such that the four disruptions generate similar magnitude of gate delay if possible, based on results shown in Figure 5.14. Some disruption parameter values are higher than those in canonical airports in order to create a significant disruption. The design shown in Table 5.7 is also used for LGA. Table 5.10 shows the simulation results. Additional gates are effective, as expected. Common gates can be more effective because Delta’s gate capacity is higher than American’s gate capacity, and therefore 20% of Delta’s gates are more helpful than 20% of American’s gates. This also indicates that schedules between American Airlines and Delta Airlines are strongly complementary. In addition, total gate-delay reduction using common gates is not 90 91 Factor A: Disrupted arrival delay (in min) B: Gate-blocking time extension multiplier C: Fraction of regular turns converted to ending turns D: Unavailable gate fraction I: New gate capacity fraction II: Common gate fraction III: Self-docking gate fraction IV: Ending turns parked off-gate as a fraction of gate capacity 0 1 0 0 0 0 0 0.9 + 360 4 1 0.2 0.2 0.2 0.5 1.4 start hour 19 19 19 N/A N/A N/A N/A N/A duration 2 2 2 N/A N/A N/A N/A N/A Table 5.9: Eight factors to be investigated, LGA (AA, MQ, DL, OH) carriers impacted AA, MQ AA, MQ AA, MQ AA, MQ AA, MQ AA,DL;MQ,OH AA, MQ AA, MQ 20000 20000 15000 15000 Daily gate delay (min) 10000 Daily gate delay (min) 10000 5000 5000 0 0 0 60 120 180 240 300 360 1 Arrival delay (min) 2 2.5 3 3.5 4 Gate blocking time multiplier (a) Disruption A: Arrival delay (b) Disruption B: Gate-blocking time extension 20000 Daily gate delay (min) 1.5 20000 15000 15000 Daily gate delay (min) 10000 10000 5000 5000 0 0 0.2 0.4 0.6 0.8 0 1 0 0.1 0.2 0.3 0.4 0.5 Unavailable gate fraction Fraction of regular turns converted to ending turns (c) Disruption C: Regular turn converted to ending turn (d) Disruption D: Gate unavailable Figure 5.15: Impact of disruptions (DL) on total daily gate delays (DL, FL): one factor at a time, ATL at the expense of any party for this data. Table 5.11 illustrates with an example that using common gates reduces gate delay of American and American Eagle flights without adding delay to Delta or Comair. 5.2.3 ATL Simulation Gate operations of the two major carriers, Delta Air Lines with Delta Connection (DL) and AirTran Airways (FL), are modeled at ATL. Disruptions: One-Factor-at-a-Time The same parameter values as shown in Table 5.5 are selected for disruptions in the onefactor-at-a-time experiments. Figure 5.15 shows the simulation results. The first three disruptions have a small impact because there is enough slack gate capacity to mitigate disruptions. The impact of gate capacity reduction is also non-linear, as expected. 92 93 Table 5.10: Calculated mitigation effects on disruptions, LGA Disruption Arrival Gate-blocking Regular turn converted delay time extension to ending turn Gate delay under disruption (min) 583 448 766 Delay reduction under mitigation min fraction min fraction min fraction Main effects New gates, I -254 -0.44 -224 -0.50 -286 -0.37 Common gates, II -256 -0.44 -224 -0.50 -316 -0.41 Self-docking gates, III 0 0 0 0 0 0 Ending turns parked off-gate, IV -38 -0.06 0 0 -98 -0.13 Two-factor interactions I * II 154 0.26 124 0.28 186 0.24 I * III 0 0 0 0 0 0 I * IV 36 0.06 0 0 68 0.09 II * III 0 0 0 0 0 0 II * IV 38 0.06 0 0 98 0.13 III * IV 0 0 0 0 0 0 Three-factor interactions I * II * III 0 0 0 0 0 0 I * II * IV -36 -0.06 0 0 -68 -0.09 0 0 0 0 0 0 I * III * III II * III * IV 0 0 0 0 0 0 Four-factor interactions I * II * III * IV 0 0 0 0 0 0 -0.44 -0.44 -0.01 -0.02 0.24 0.01 0.02 0.01 0.02 0.01 -0.01 -0.02 -0.01 -0.01 0.01 -745 -745 -15 -30 409 15 30 15 30 15 -15 -30 -15 -15 15 Gate unavailable 1709 min fraction Table 5.11: Impact of common gates on gate delay reduction; disruption: arrival delay, LGA Airline Gate delay (min) Gate delay (min) IATA code without common gates with common gates AA 147 0 MQ 436 100 DL 0 0 OH 0 0 Mitigation Strategies: Factorial Design Table 5.12 shows the factors, where eight factors in two categories are presented. The disruption parameters are selected such that the four disruptions generate similar magnitude of gate delay if possible, based on results shown in Figure 5.15. The design shown in Table 5.7 is also used for ATL. Table 5.13 shows the simulation results. Additional gates and common gates are effective mitigation strategies. Like LGA, the total gate-delay reduction using common gates is not at the expense of any party for this data. Table 5.14 shows that both Delta and AirTran benefit from using common gates, indicating that schedules between them are complementary. Compared with LGA benefit, the impact of common gates is smaller because Delta Airlines has a large market share at ATL and 20% of AirTran gates used as common gates does not help Delta much. Off-gate parking is effective for the disruption of regular turns converted to ending turns, as expected. If the disruption is due to unavailable gates, self-docking gates are effective, as expected. 5.2.4 DFW Simulation Gate operations of the two major airlines, American Airlines (AA) and its regional affiliates American Eagle Airlines (MQ), are modeled at DFW. 94 95 Factor A: Disrupted arrival delay (in min) B: Gate-blocking time extension multiplier C: Fraction of regular turns converted to ending turns D: Unavailable gate fraction I: New gate capacity fraction II: Common gate fraction III: Self-docking gate fraction IV: Ending turns parked off-gate as a fraction of gate capacity 0 1 0 0 0 0 0 0 + 120 4 1 0.1 0.2 0.2 0.5 0.5 start hour 19 19 19 N/A N/A N/A N/A N/A duration 2 2 2 N/A N/A N/A N/A N/A Table 5.12: Eight factors to be investigated, ATL (DL, FL) carriers impacted DL DL DL DL DL DL, FL DL DL 96 Table 5.13: Calculated mitigation effects on disruptions, ATL Disruption Arrival Gate-blocking Regular turn converted delay time extension to ending turn Gate delay under disruption (min) 3556 6097 7271 Delay reduction under mitigation min fraction min fraction min fraction Main effects New gates, I -1879 -0.53 -3039 -0.50 -3416 -0.47 Common gates, II -1429 -0.40 -1538 -0.25 -1749 -0.24 Self-docking gates, III 0 0 0 0 0 0 Ending turns parked off-gate, IV 0 0 -1161 -0.19 -1537 -0.21 Two-factor interactions I * II 134 0.04 243 0.04 454 0.06 I * III 0 0 0 0 0 0 I * IV 0 0 1161 0.19 1537 0.21 II * III 0 0 0 0 0 0 II * IV 0 0 110 0.02 321 0.04 III * IV 0 0 0 0 0 0 Three-factor interactions I * II * III 0 0 0 0 0 0 I * II * IV 0 0 -110 -0.02 -321 -0.04 0 0 0 0 0 0 I * III * III II * III * IV 0 0 0 0 0 0 Four-factor interactions I * II * III * IV 0 0 0 0 0 0 -0.50 -0.22 -0.19 0 -0.02 0.10 0 0.00 0 0 0.01 0 0 0 0 -2949 -1295 -1131 0 -119 570 0 -7 0 0 45 0 0 0 0 Gate unavailable 5911 min fraction Table 5.14: Impact of common gates on gate delay reduction; disruption: gate-blocking time extension, ATL Airline Gate delay (min) Gate delay (min) IATA code without common gates with common gates DL 4949 4044 FL 1148 52 20000 20000 15000 15000 Daily gate delay (min) 10000 Daily gate delay (min) 10000 5000 5000 0 0 0 60 120 180 240 300 360 1 Arrival delay (min) 1.5 2 2.5 3 3.5 4 Gate blocking time multiplier (a) Disruption A: Arrival delay (b) Disruption B: Gate-blocking time extension 20000 20000 Daily gate 15000 delay (min) 15000 Daily gate delay (min) 10000 10000 5000 5000 0 0 0.2 0.4 0.6 0.8 0 1 0 0.1 0.2 0.3 0.4 0.5 Unavailable gate fraction Fraction of regular turns converted to ending turns (c) Disruption C: Regular turn converted to ending turn (d) Disruption D: Gate unavailable Figure 5.16: Impact of disruptions (AA,MQ) on total daily gate delays (AA,MQ): one factor at a time, DFW Disruptions: One-Factor-at-a-Time The same parameter values as shown in Table 5.5 are selected for disruptions in the onefactor-at-a-time experiments. Figure 5.16 shows the simulation results. Ramp arrival delay has no impact. This indicates that there is enough slack gate capacity to accommodate such a disruption. Impacts of other disruptions are similar to those in the canonical airport — the impact of gate-blocking time extension and turn conversion is linear after slack capacity is used. The reason is that the extra gate demand grows linearly with the disruption magnitude. The impact of gate unavailability is non-linear after slack capacity is used up, as expected. The reason is that gate capacity reduction is for the entire day and when slack gate capacity is used up, the system is saturated. 97 Mitigation Strategies: Factorial Design Table 5.15 shows the factors, where eight factors in two categories are presented. The disruption parameters are selected such that the four disruptions generate similar magnitude of gate delay if possible, based on results shown in Figure 5.16. The design shown in Table 5.7 is also used for DFW. Table 5.16 shows the simulation results. As expected, new gates are very effective to mitigate gate delay. Off-gate parking is effective if the disruption is gate-blocking time extension or conversion from regular turns to ending turns. If the disruption is due to unavailable gates, self-docking gates are very effective. Common gates have no effect since only one airline is modeled at DFW. 5.2.5 Simulation Results Summary Simulation of a canonical airport, LGA, ATL and DFW identify the following: • The impact of arrival delay in a time window (e.g. 7 pm to 9 pm) on gate-waiting delay is bounded. • The impact of longer-than-scheduled gate-occupancy times in a time window on gatewaiting delay can be unbounded and gate-waiting delay can increase linearly as the disruption level increases. • Small reductions in gate availability have a small impact on gate-waiting delay due to slack gate capacity, while larger reductions have a non-linear impact as slack gate capacity is used up. • Using common gates can be a very effective mitigation strategy. This is due to complementary schedules of airlines and slack gate capacity. Common gates have a greater impact at LGA than at ATL and a greater impact at ATL than at DFW. This is because the flight schedule at LGA is not dominated by one carrier while the flight schedule at DFW is strongly dominated by one carrier. The less dominance by one 98 99 Factor A: Disrupted arrival delay (in min) B: Gate-blocking time extension multiplier C: Fraction of regular turns converted to ending turns D: Unavailable gate fraction I: New gate capacity fraction II: Common gate fraction III: Self-docking gate fraction IV: Ending turns parked off-gate as a fraction of gate capacity 0 1 0 0 0 0 0 0 + 120 4 0.8 0.35 0.2 0.2 0.5 0.5 start hour 19 19 19 N/A N/A N/A N/A N/A duration 2 2 2 N/A N/A N/A N/A N/A Table 5.15: Eight factors to be investigated, DFW (AA, MQ) carriers impacted AA, MQ AA, MQ AA, MQ AA, MQ AA, MQ N/A AA, MQ AA, MQ 100 Table 5.16: Calculated mitigation effects on disruptions, DFW Disruption Arrival Gate-blocking Regular turn converted delay time extension to ending turn Gate delay under disruption (min) 0 2298 1917 Delay reduction under mitigation min fraction min fraction min fraction Main effects New gates, I 0 -1114 -0.48 -959 -0.50 Common gates, II 0 0 0 0 0 Self-docking gates, III 0 0 0 0 0 Ending turns parked off-gate, IV 0 -1184 -0.52 -959 -0.50 Two-factor interactions I * II 0 0 0 0 0 I * III 0 0 0 0 0 I * IV 0 1114 0.48 959 0.50 II * III 0 0 0 0 0 II * IV 0 0 0 0 0 III * IV 0 0 0 0 0 Three-factor interactions I * II * III 0 0 0 0 0 I * II * IV 0 0 0 0 0 0 0 0 0 0 I * III * III II * III * IV 0 0 0 0 0 Four-factor interactions I * II * III * IV 0 0 0 0 0 -0.49 0 -0.50 0.00 0 0.49 0.00 0 0 0.00 0 0 0.00 0 0 -1194 0 -1219 -3 0 1194 3 0 0 3 0 0 -3 0 0 Gate unavailable 2419 min fraction carrier, the more benefit common gates would bring. In addition, studies of LGA and ATL both show that no party would be negatively impacted using common gates. • Off-gate overnight parking has higher impact at DFW than at ATL partly because DFW has maximum gate utilization overnight while ATL has maximum gate utilization during the day (See Appendix A). • Multiple mitigation strategies have diminishing effects. 101 Chapter 6: Conclusions and Recommendations for Future Research 6.1 Conclusions This dissertation developed a systematic method for analysis of gate-delay severity and characteristics across major U.S. airports. This included developing a set of unique data processing and joining algorithms to identify gate-delay functional causes. Finally, this dissertation developed a model to simulate gate-delay functional causes and mitigation strategies. 6.1.1 Gate Delay Severity Gate delays at the OEP-35 airports are asymmetric, with ATL, JFK, DFW and PHL experience much higher gate delay than others, representing the need for gate-capacity expansion, demand management, or more efficient gate-carrier allocation. 6.1.2 Gate Delay Characteristics On most days, gate delays are not problematic. However, most airports in this dissertation have several outlier days, in which gate delays are very bad. Gate delays are statistically different across different carriers. Gate delays are correlated with aircraft size, but the correlation is not universal (positive at some airports while negative at other airports). Gate delays tend to be more severe in the evenings when the schedule has a peak and the uncertainty tends to be large. 102 6.1.3 Gate Delay Functional Causes Analysis of historical data at LGA, ATL, JFK, EWR, DFW, and MIA shows that two major functional causes for gate delay are longer-than-scheduled gate-occupancy time and reduced available gates. Analysis using a simulation model shows that the impact of gateoccupancy time extension in a time window (e.g. 7 pm to 9 pm) is linear in response to the disruption magnitude. The impact of reduced gate availability is non-linear in response to the disruption magnitude. Higher-than-scheduled arrival rate can be a functional cause of gate delays, but the impact is smaller than the other two disruptions. From historical data, gate delay is often correlated with cancellations, which tend to increase gate-occupancy times. 6.1.4 Gate Delay Mitigation Strategies Additional gates and common gates are effective measures to combat gate delays. Considering the cost of new gates, common gates are especially effective for airports with multiple major carriers whose schedules are complementary, such as LGA. Self-docking gates can be very effective if the gate-delay cause is reduced gate availability. Off-terminal parking for overnight turns are very effective if the disruption cause is conversion from regular turns to ending turns or other disruptions in the evening. The benefits are larger at DFW than at ATL because DFW has maximum gate utilization overnight while ATL has maximum gate utilization during the day. Multiple mitigation strategies have diminishing effects. 6.2 Future Work 6.2.1 Improved Gate Delay Modeling This dissertation can be further improved with refined modeling using additional data sources. A useful extension is to include aircraft type into the analysis. This dissertation ignores existing aircraft-gate compatibility constraints. The ASPM database can be used to get 103 aircraft type information and flightstats.com can be used to partially infer gate compatibility information based on historical data (that is, by observing historically which aircraft types have been parked at which gates). Usage of data sources including international flights would also give a more complete picture of entire gate usage for an international hub, such as JFK. Root causes and chain effects can also be investigated with additional data. For example, reduced gate utilization can be due to bad weather, a shortage of ground crew, or an airline’s preference to keep the gate-assignment plan. This dissertation assumes the cause to be one of the first two, which means that the self-docking gates can help. However, if the cause is the airline’s preference, the corresponding mitigation strategy would be a flexible gateassignment strategy to combat disruptions. Another example is extended gate-occupancy time, which can be due to crew shortage or an imposed ground hold by ATC. Each calls for a different mitigation strategy. With airline operating data, ATC data and weather data, these chain effects can be investigated to explain correlations identified in this dissertation. For example, the whole story of weather impact might unfold as follows. Weather causes a decrease in airport-runway capacity. As a result, airlines start to cancel flights. Then, gate-occupancy time increases and gate demand is higher, which causes gate delay. More mitigation strategies can be evaluated. For example, the arrival stream to airport runways plays an important role on gate demand and hence gate delay. NextGen proposes gate-to-gate trajectory based operations. Better planning is expected for all phases of flights, including gate arrival, and its impact on gate delay can be evaluated. 6.2.2 Industrial Applications This dissertation can be applied to airport-capacity planning for the FAA and airline gate allocation for airports. This dissertation can be used for runway and gate capacity planning purposes to match gate and runway capacity. For example, ATL had its fifth runway commissioned in 2006. 104 As a result, air delay was moved to ground and gate constraints became apparent [Terreri, 2009]. With better synchronization on runway and gate capacity expansion, air delay and gate delay could be mitigated proactively. This dissertation can be used to evaluate different gate allocations to carriers and to evaluate common-gate allocation. This dissertation can also evaluate airport contingency plans to combat insufficient common gates during disruptions, such as the use of hard stands. 105 Appendix A: Functional Cause Identification of Extreme Gate Delays Using Carrier Aggregated Data (BTS Data) A.1 LGA Number of aircraft 6/27/2007 70 60 50 40 30 20 10 0 0 Hourly landing rate 6 12 18 24 30 0 6 12 18 8/9/2007 24 30 70 60 50 40 30 20 10 0 30 30 20 20 20 10 10 10 0 0 0 0 6 12 18 24 30 0 800 6 12 18 24 parked in summer 2007 average parked on the day studied 0 30 30 6 12 18 24 waiting for gates on the day studied 30 Summer 2007 average Day studied 0 6 12 18 24 30 800 800 600 600 400 400 Summer 2007 average 200 200 200 0 Day studied 0 0 Average 600 service time (min) 400 0 Number of starting departures 8/8/2007 70 60 50 40 30 20 10 0 6 12 18 24 0 30 6 12 18 24 30 0 6 12 18 24 30 40 40 40 30 30 30 20 20 20 10 Summer 2007 average 10 10 0 0 0 Day studied 0 6 12 18 Hour of day 24 30 0 6 12 18 Hour of day 24 30 0 6 12 18 24 30 Hour of day Figure A.1: Gate delay functional cause identification at LGA Table A.1: Functional Causes of High Gate Delay in the Worst 3 Days at LGA in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/27 X X 8/8 X 8/9 X X X 106 A.2 ATL 6/11/2007 Number of aircraft 7/29/2007 200 200 150 150 150 100 100 100 50 50 50 0 6 12 18 24 120 100 80 60 40 20 0 6 12 18 24 30 120 100 80 60 40 20 0 0 6 12 18 24 30 600 0 6 12 18 24 30 0 6 12 18 24 200 0 0 0 6 12 18 24 20 20 10 10 10 0 0 6 12 18 Hour of day 24 30 12 18 24 waiting for gates on the day studied 30 Summer 2007 average Day studied 0 6 12 18 24 30 Summer 2007 average Day studied 6 12 18 24 30 30 20 0 6 0 30 30 30 600 200 30 40 0 400 400 0 Parked on the day studied 120 100 80 60 40 20 0 600 Average 400 service time (min) 200 Number of starting departures 0 30 Parked in summer 2007 average 0 0 0 Hourly landing rate 8/24/2007 200 Summer 2007 average Day studied 0 0 6 12 18 Hour of day 24 30 0 6 12 18 24 30 Hour of day Figure A.2: Gate delay functional cause identification at ATL Table A.2: Functional Causes of High Gate Delay in the Worst 3 Days at ATL in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/11 X 7/29 X 8/24 X X X 107 A.3 JFK 6/1/2007 80 Number of aircraft 6/11/2007 80 60 60 40 40 40 20 20 20 0 6 12 18 24 30 parked in summer 2007 average 60 0 0 Hourly landing rate 6/10/2007 80 0 6 12 18 24 30 parked on the day studied 0 0 6 12 18 24 30 waiting for gates on the day studied 40 40 40 30 30 30 20 20 20 Summer 2007 average 10 10 10 Day studied 0 0 0 0 6 12 18 24 30 0 6 12 18 24 30 0 800 6 12 18 24 30 800 800 Average 600 service 400 time (min) 600 600 400 400 Summer 2007 average 200 200 200 Day studied 0 0 0 0 6 12 18 24 0 30 6 12 18 24 0 30 20 20 20 15 15 15 10 10 5 5 5 0 0 0 Number of 10 starting departures 0 6 12 18 Hour of day 24 30 0 6 12 18 Hour of day 24 30 6 12 18 24 30 Summer 2007 average Day studied 0 6 12 18 24 30 Hour of day Figure A.3: Gate delay functional cause identification at JFK Table A.3: Functional Causes of High Gate Delay in the Worst 3 Days at JFK in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/01 X 6/10 X X 6/11 X 108 A.4 EWR 6/29/2007 Number of aircraft 8/9/2007 100 100 100 80 80 80 60 60 60 40 40 40 20 20 0 0 20 0 Hourly landing rate 7/26/2007 6 12 18 24 30 0 6 12 18 24 30 parked in summer 2007 average parked on the day studied waiting for gates on the day studied 0 0 6 12 18 24 30 40 40 40 30 30 30 20 20 20 Summer 2007 average 10 10 10 Day studied 0 0 0 0 6 12 18 24 0 30 6 12 18 24 30 0 6 12 18 24 30 40 30 Number of 20 starting departures 10 0 0 6 12 18 24 Hour of day 30 0 6 12 18 24 30 1000 1000 1000 Average 800 600 service time (min) 400 200 0 800 800 600 600 400 400 200 200 0 0 0 6 12 18 24 30 Summer 2007 average Day studied 0 6 12 18 24 30 40 40 30 30 20 20 Summer 2007 average 10 10 Day studied 0 0 0 6 12 18 24 Hour of day 30 0 6 12 18 24 30 Hour of day Figure A.4: Gate delay functional cause identification at EWR Table A.4: Functional Causes of High Gate Delay in the Worst 3 Days at EWR in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/29 X X 7/26 X X 8/09 109 A.5 DFW 6/17/2007 7/1/2007 140 120 100 Number 80 of aircraft 60 40 20 0 0 Hourly landing rate 6 12 18 24 30 80 60 40 20 0 0 6 12 18 24 30 6 12 18 24 6 12 18 24 30 30 parked in summer 2007 average parked on the day studied 0 Summer 2007 average 20 20 Day studied 0 0 0 6 12 18 24 30 0 6 12 18 24 30 1000 800 600 400 200 0 20 10 Hour of day 30 0 0 6 12 18 Hour of day 24 30 0 6 12 18 24 30 Summer 2007 average Day studied 0 10 24 waiting for gates on day studied 40 20 18 30 40 Number of 20 starting 10 departures 12 24 80 30 6 18 60 30 0 12 60 30 0 6 80 1000 800 600 400 200 0 1000 800 Average 600 400 service time (min) 200 0 0 0 7/2/2007 140 120 100 80 60 40 20 0 140 120 100 80 60 40 20 0 6 12 18 24 30 Summer 2007 average Day studied 0 0 6 12 18 24 30 Hour of day Figure A.5: Gate delay functional cause identification at DFW Table A.5: Functional Causes of High Gate Delay in the Worst 3 Days at DFW in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/17 X 7/01 X 7/02 X 110 A.6 MIA 6/17/2007 Number of aircraft 7/3/2007 40 40 30 30 30 20 20 20 10 10 10 0 0 0 6 12 18 24 30 6 12 18 24 30 0 20 20 15 15 10 10 10 5 5 5 0 0 0 20 15 0 6 12 18 24 0 30 6 12 18 24 parked in summer 2007 average parked on the day studied waiting for gates on the day studied 0 25 800 12 18 24 30 Summer 2007 average Day studied 0 30 6 6 12 18 24 30 800 800 600 600 400 400 Summer 2007 average 200 200 200 Day studied 0 0 0 Average 600 service time (min) 400 0 Number of starting departures 0 25 25 Hourly landing rate 7/5/2007 40 6 12 18 24 30 0 6 12 18 24 0 30 6 12 18 24 30 8 8 8 6 6 6 4 4 4 Summer 2007 average 2 2 Day studied 0 0 2 0 0 6 12 18 24 Hour of day 30 0 6 12 18 24 Hour of day 30 0 6 12 18 24 30 Hour of day Figure A.6: Gate delay functional cause identification at MIA Table A.6: Functional Causes of High Gate Delay in the Worst 3 Days at MIA in Summer 2007 Date Reduced Higher Increased service Increased service available arrival time for same time for previous gate rate day arrivals day arrivals 6/17 X X X 7/03 X X X X 7/05 X X X 111 A.7 6 Airport Summary Table A.7: Gate Delay Functional Causes in 18 High Gate-delay Days in Summer 2007 Cause Count Reduced available gate 10 Higher arrival rate 9 Increased service time for same day arrivals 9 Increased service time for previous day arrivals 4 112 Appendix B: Simulation Model Source Code 1 package TurnGenerator ; 3 import j a v a . u t i l . A r r a y L i s t ; import j a v a . u t i l . L i s t ; 5 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 7 import j a v a . u t i l . L i s t I t e r a t o r ; // #[ r e g e n=yes , i d=DCE. 1 B268774−3BD9−B009−3537−A3AA880552CE ] 9 // </ e d i t o r −f o l d > public c l a s s AggregatedOneDayOneCarrierTurns { 11 private S t r i n g carrierIATACode ; 13 private A r r a y L i s t <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnsArray ; // e l e m e n t s a r e s o r t e d by hour , acscending order 15 17 19 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. ABF82C6F−ED13−53A3−FAC0−8D0CD71E7A64 ] // </ e d i t o r −f o l d > public AggregatedOneDayOneCarrierTurns ( ) { aggregatedOneHourOneCarrierTurnsArray = new A r r a y L i s t < AggregatedOneHourOneCarrierTurns >() ; } 21 23 25 public AggregatedOneDayOneCarrierTurns ( AggregatedOneHourOneCarrierTurns aggregatedOneHourOneCarrierTurns ) { carrierIATACode = aggregatedOneHourOneCarrierTurns . getCarrierIATACode () ; aggregatedOneHourOneCarrierTurnsArray = new A r r a y L i s t < AggregatedOneHourOneCarrierTurns >() ; aggregatedOneHourOneCarrierTurnsArray . add ( aggregatedOneHourOneCarrierTurns ) ; } 27 29 31 33 35 37 39 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 1 6 2 7 5 0 8A−79E2−D908−4C37−1CEE3A2BAA30 ] // </ e d i t o r −f o l d > public L i s t g e n e r a t e T u r n L i s t ( ) { L i s t <Turn> t u r n l i s t = new A r r a y L i s t <Turn >() ; L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnIterator = aggregatedOneHourOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; double numRegularArrivalsRemainder = 0 ; // s h o u l d be s m a l l e r than 1 double numEndingArrivalsRemainder = 0 ; // s h o u l d be s m a l l e r than 1 double numStartingDeparturesRemainder = 0 ; // s h o u l d be s m a l l e r t h an 1 while ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { AggregatedOneHourOneCarrierTurns aggregatedOneHourOneCarrierTurns = a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . next ( ) ; // c o n s t r u c t r e g u l a r t u r n s 113 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 double n u m R e g u l a r A r r i v a l s I n T h i s H o u r = aggregatedOneHourOneCarrierTurns . g e t N u m R e g u l a r A r r i v a l s ( ) ; numRegularArrivalsRemainder += n u m R e g u l a r A r r i v a l s I n T h i s H o u r ; while ( numRegularArrivalsRemainder >= 1 ) { numRegularArrivalsRemainder −−; i n t eventMinPastHour = ( i n t ) ( ( 1 − numRegularArrivalsRemainder / n u m R e g u l a r A r r i v a l s I n T h i s H o u r ) ∗ 6 0 ) ; // s h o u l d be no more t h a n 6 0 ; // now g e n e r a t e a r r i v a l t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” r e g u l a r T u r n ” // turnType , aggregatedOneHourOneCarrierTurns . getHourOfDay ( ) ∗60 + eventMinPastHour // actuaArrInMin ,−1 // actDepInMin , aggregatedOneHourOneCarrierTurns . getAverageGateOccupancyTimeInMinForRegularArrivals ( ) // gateOccTimeInMin )); } // c o n s t r u c t e n d i n g t u r n s double numEndingArrivalsInThisHour = aggregatedOneHourOneCarrierTurns . getNumEndingArrivals ( ) ; numEndingArrivalsRemainder += numEndingArrivalsInThisHour ; while ( numEndingArrivalsRemainder >= 1 ) { numEndingArrivalsRemainder −−; i n t eventMinPastHour = ( i n t ) ( ( 1 − numEndingArrivalsRemainder / numEndingArrivalsInThisHour ) ∗ 6 0 ) ; // s h o u l d be no more t h an 6 0 ; // now g e n e r a t e a r r i v a l t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” endingTurn ” // turnType , aggregatedOneHourOneCarrierTurns . getHourOfDay ( ) ∗60 + eventMinPastHour // actuaArrInMin ,−1 // actDepInMin ,−1 // gateOccTimeInMin )); } // c o n s t r u c t s t a r t i n g t u r n s double n u m S t a r t i n g D e p a r t u r e s I n T h i s H o u r = aggregatedOneHourOneCarrierTurns . g e t N u m S t a r t i n g D e p a r t u r e s ( ) ; numStartingDeparturesRemainder += n u m S t a r t i n g D e p a r t u r e s I n T h i s H o u r ; while ( numStartingDeparturesRemainder >= 1 ) { numStartingDeparturesRemainder −−; i n t eventMinPastHour = ( i n t ) ( ( 1 − numStartingDeparturesRemainder / n u m S t a r t i n g D e p a r t u r e s I n T h i s H o u r ) ∗ 6 0 ) ; // s h o u l d be no more t h a n 6 0 ; // now g e n e r a t e d e p a r t u r e t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” s t a r t i n g T u r n ” // turnType ,−1 // actuaArrInMin , aggregatedOneHourOneCarrierTurns . getHourOfDay ( ) ∗60 + eventMinPastHour // actDepInMin ,−1 // gateOccTimeInMin )); } 114 } return t u r n l i s t ; 79 } 81 public L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> l i s t I t e r a t o r ( ) { return aggregatedOneHourOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; } 83 85 public void add ( AggregatedOneHourOneCarrierTurns aggregatedOneHourOneCarrierTurns ) { // a c h e c k s h o u l d be done b e f o r e h a n d t o make s u r e t h a t carrierIATACodes match i f ( ! aggregatedOneHourOneCarrierTurns . getCarrierIATACode ( ) . e q u a l s ( carrierIATACode ) ) { System . e r r . p r i n t l n ( ” E r r o r i n ” + t h i s . g e t C l a s s ( ) . getName ( ) + ” ! carrierIATACodes do not match . ” ) ; System . e x i t ( −1) ; } aggregatedOneHourOneCarrierTurnsArray . add ( aggregatedOneHourOneCarrierTurns ) ; } 87 89 91 93 95 public S t r i n g getCarrierIATACode ( ) { return carrierIATACode ; } 97 99 public void setCarrierIATACode ( S t r i n g carrierIATACode ) { t h i s . carrierIATACode = carrierIATACode ; } 101 103 105 107 109 111 113 115 117 119 } @Override public S t r i n g t o S t r i n g ( ) { S t r i n g t h i s S t r i n g = ” hourOfDay ” + ” , carrierIATACode ” + ” , numRegularArrivals ” + ” , averageGateOccupancyTimeInMinForRegularArrivals ” + ” , numEndingArrivals ” + ” , numStartingDepartures ” ; L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnIterator = l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { t h i s S t r i n g += ” \n” + a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . nex t () ; } return t h i s S t r i n g ; } src/TurnGenerator/AggregatedOneDayOneCarrierTurns.java package TurnGenerator ; 2 import j a v a . i o . ∗ ; 4 import j a v a . s q l . ∗ ; import j a v a . u t i l . ∗ ; 115 6 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 8 import j a v a . u t i l . L i s t I t e r a t o r ; // #[ r e g e n=yes , i d=DCE. 2A51A4DA−EE03−FD9F−5084−86FC39F8F246 ] 10 import j a v a . u t i l . Scanner ; // </ e d i t o r −f o l d > 12 public c l a s s AggregatedOneDayTurns { private A r r a y L i s t <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnsArray ; 14 private A r r a y L i s t <AggregatedOneDayOneCarrierTurns> aggregatedOneDayOneCarrierTurnsArray ; 16 18 20 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 7 4 9 0 1 7 9C−2E76−E410−EC92−8AB2E0F5D4C8 ] // </ e d i t o r −f o l d > public AggregatedOneDayTurns ( ) { aggregatedOneDayOneCarrierTurnsArray = new A r r a y L i s t < AggregatedOneDayOneCarrierTurns >() ; } 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 public AggregatedOneDayTurns ( F i l e f i l e N a m e ) throws IOException { aggregatedOneHourOneCarrierTurnsArray = new A r r a y L i s t < AggregatedOneHourOneCarrierTurns >() ; aggregatedOneDayOneCarrierTurnsArray = new A r r a y L i s t < AggregatedOneDayOneCarrierTurns >() ; B u f f e r e d R e a d e r inputStream = null ; String line ; Scanner s = null ; try { inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r ( f i l e N a m e ) ) ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . out . p r i n t l n ( ” E r r o r i n u s i n g c l a s s AggregatedOneDayTurns ! Empty f i l e ” ) ; System . e x i t ( −1) ; } while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { s = new Scanner ( l i n e ) ; s . u s e D e l i m i t e r ( ” ,\\ s ∗” ) ; AggregatedOneHourOneCarrierTurns aggregatedOneHourOneCarrierTurns = new AggregatedOneHourOneCarrierTurns ( s . nextInt () , s . n ext ( ) , s . nextInt () , s . nextInt () , s . nextInt () , s . nextInt () ); aggregatedOneHourOneCarrierTurnsArray . add ( aggregatedOneHourOneCarrierTurns ) ; t h i s . add ( aggregatedOneHourOneCarrierTurns ) ; } } finally { i f ( inputStream != null ) { inputStream . c l o s e ( ) ; 116 } } s . close () ; 52 54 } 56 58 60 62 64 66 public void add ( AggregatedOneHourOneCarrierTurns aggregatedOneHourOneCarrierTurns ) { L i s t I t e r a t o r <AggregatedOneDayOneCarrierTurns> aggregatedOneDayOneCarrierTurnIterator = aggregatedOneDayOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { AggregatedOneDayOneCarrierTurns aggregatedOneDayOneCarrierTurns = a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . next ( ) ; i f ( aggregatedOneDayOneCarrierTurns . getCarrierIATACode ( ) . e q u a l s ( aggregatedOneHourOneCarrierTurns . getCarrierIATACode ( ) ) ) { aggregatedOneDayOneCarrierTurns . add ( aggregatedOneHourOneCarrierTurns ) ; return ; } } aggregatedOneDayOneCarrierTurnsArray . add (new AggregatedOneDayOneCarrierTurns ( aggregatedOneHourOneCarrierTurns ) ) ; } 68 70 72 74 76 78 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. FA2147A7−BDA8−758E−6D91−9E20BC30B817 ] // </ e d i t o r −f o l d > public L i s t g e n e r a t e T u r n L i s t ( ) { L i s t t u r n L i s t = new A r r a y L i s t <Turn >() ; L i s t I t e r a t o r <AggregatedOneDayOneCarrierTurns> aggregatedOneDayOneCarrierTurnIterator = aggregatedOneDayOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { t u r n L i s t . a d d A l l ( a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . next ( ) . generateTurnList () ) ; } return t u r n L i s t ; } 80 82 84 86 88 90 92 public L i s t g e n e r a t e T u r n L i s t O l d ( ) { L i s t t u r n L i s t = new A r r a y L i s t <Turn >() ; L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnIterator = aggregatedOneHourOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { t u r n L i s t . a d d A l l ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . next ( ) . generateTurnList () ) ; } return t u r n L i s t ; } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. CCEF15CE−B208−DA82−2ABF−1411555 F4529 ] // </ e d i t o r −f o l d > public void a d d D i s r u p t i o n ( OneDayDisruption oneDayDisruption ) { 117 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 } L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnIterator = aggregatedOneHourOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . next ( ) . a d d D i s r u p t i o n ( o ne Da y Di s ru ption ) ; } public i n t s i z e ( ) { return aggregatedOneHourOneCarrierTurnsArray . s i z e ( ) ; } public L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> l i s t I t e r a t o r ( ) { return aggregatedOneHourOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; } public L i s t I t e r a t o r <AggregatedOneDayOneCarrierTurns> l i s t I t e r a t o r B y C a r r i e r () { return aggregatedOneDayOneCarrierTurnsArray . l i s t I t e r a t o r ( ) ; } @Override public S t r i n g t o S t r i n g ( ) { S t r i n g t h i s S t r i n g = new S t r i n g ( ) ; L i s t I t e r a t o r <AggregatedOneDayOneCarrierTurns> aggregatedOneDayOneCarrierTurnIterator = l i s t I t e r a t o r B y C a r r i e r ( ) ; while ( a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { t h i s S t r i n g += ” \n” + a g g r e g a t e d O n e D a y O n e C a r r i e r T u r n I t e r a t o r . next ( ) ; } return t h i s S t r i n g ; } public S t r i n g t o S t r i n g O l d ( ) { S t r i n g t h i s S t r i n g = ” hourOfDay ” + ” , carrierIATACode ” + ” , numRegularArrivals ” + ” , averageGateOccupancyTimeInMinForRegularArrivals ” + ” , numEndingArrivals ” + ” , numStartingDepartures ” ; L i s t I t e r a t o r <AggregatedOneHourOneCarrierTurns> aggregatedOneHourOneCarrierTurnIterator = l i s t I t e r a t o r ( ) ; while ( a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . hasNext ( ) ) { t h i s S t r i n g += ” \n” + a g g r e g a t e d O n e H o u r O n e C a r r i e r T u r n I t e r a t o r . nex t () ; } return t h i s S t r i n g ; } public void t o F i l e ( F i l e f i l e N a m e ) throws IOException { P r i n t W r i t e r outputStream = null ; try { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( f i l e N a m e ) ) ; outputStream . p r i n t l n ( t o S t r i n g ( ) ) ; } finally { 118 142 144 146 } } } i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } src/TurnGenerator/AggregatedOneDayTurns.java 1 package TurnGenerator ; 3 import j a v a . u t i l . ∗ ; 5 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 9E11FDDD−A243−C1DE−2F41−1062BCC13E9D ] 7 // </ e d i t o r −f o l d > public c l a s s AggregatedOneHourOneCarrierTurns { 9 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 11 // #[ r e g e n=yes , i d=DCE. 8 7 7 8FBA5−A18E−351A−1AC0−F2E33C069013 ] // </ e d i t o r −f o l d > 13 private i n t hourOfDay ; 15 17 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. A10EAE86−77A9−37E7−8EE3−715FC2CA8B5E ] // </ e d i t o r −f o l d > private S t r i n g carrierIATACode ; 19 21 23 25 27 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. C226CC78−B139−1222−E5DF−8E888B731E9D ] // </ e d i t o r −f o l d > private i n t n u m R e g u l a r A r r i v a l s ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. A7CA86FD−7EA7−F3A5−5104−5851BB1C235F ] // </ e d i t o r −f o l d > private i n t averageGateOccupancyTimeInMinForRegularArrivals ; 29 31 33 35 37 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 0 CD4551D−8116−B2E8−7B72−E79ED252C667 ] // </ e d i t o r −f o l d > private i n t numEndingArrivals ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. EEFC6FB3−3557−AFE2−C1D1−459F7B1718F8 ] // </ e d i t o r −f o l d > private i n t n u m S t a r t i n g D e p a r t u r e s ; 39 41 43 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 4 9 3 9C2AD−ABDC−7501−F9E9−6E3C484AD091 ] // </ e d i t o r −f o l d > public AggregatedOneHourOneCarrierTurns ( ) { } 45 119 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 public AggregatedOneHourOneCarrierTurns ( in t hourOfDay , S t r i n g carrierIATACode , i n t numR egula rA rrivals , i n t averageGateOccupancyTimeInMinForRegularArrivals , in t numEndingArrivals , int numStartingDepartures ) { t h i s . hourOfDay = hourOfDay ; t h i s . carrierIATACode = carrierIATACode ; this . numRegularArrivals = numRegularArrivals ; t h i s . averageGateOccupancyTimeInMinForRegularArrivals = averageGateOccupancyTimeInMinForRegularArrivals ; t h i s . numEndingArrivals = numEndingArrivals ; this . numStartingDepartures = numStartingDepartures ; } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 1 ECBD177−FC2D−420E−862E−AB70344B4AE7 ] // </ e d i t o r −f o l d > public L i s t g e n e r a t e T u r n L i s t ( ) { L i s t <Turn> t u r n l i s t = new A r r a y L i s t <Turn >() ; // c o n s t r u c t r e g u l a r t u r n s i f ( g e t N u m R e g u l a r A r r i v a l s ( ) != 0 ) { i n t i n t e r A r r i v a l T i m e = 60/ g e t N u m R e g u l a r A r r i v a l s ( ) ; f o r ( i n t i =1; i <=g e t N u m R e g u l a r A r r i v a l s ( ) ; i ++) { t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” r e g u l a r T u r n ” // turnType , getHourOfDay ( ) ∗60 + i ∗ i n t e r A r r i v a l T i m e // actuaArrInMin ,−1 // actDepInMin , getAverageGateOccupancyTimeInMinForRegularArrivals ( ) // gateOccTimeInMin )); } } // c o n s t r u c t e n d i n g t u r n s i f ( getNumEndingArrivals ( ) != 0 ) { i n t i n t e r A r r i v a l T i m e = 60/ getNumEndingArrivals ( ) ; f o r ( i n t i =1; i <=getNumEndingArrivals ( ) ; i ++) { t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” endingTurn ” // turnType , getHourOfDay ( ) ∗60 + i ∗ i n t e r A r r i v a l T i m e // actuaArrInMin ,−1 // actDepInMin ,−1 // gateOccTimeInMin )); } } // c o n s t r u c t s t a r t i n g t u r n s i f ( g e t N u m S t a r t i n g D e p a r t u r e s ( ) != 0 ) { i n t i n t e r D e p a r t u r e T i m e = 60/ g e t N u m S t a r t i n g D e p a r t u r e s ( ) ; f o r ( i n t i =1; i <=g e t N u m S t a r t i n g D e p a r t u r e s ( ) ; i ++) { t u r n l i s t . add (new Turn ( getCarrierIATACode ( ) , ” s t a r t i n g T u r n ” // turnType ,−1 // actuaArrInMin , getHourOfDay ( ) ∗60 + i ∗ i n t e r D e p a r t u r e T i m e // actDepInMin ,−1 // gateOccTimeInMin )); 120 } } return t u r n l i s t ; 91 93 } 95 97 99 101 103 105 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. FC796D8C−2919−D540−C755−5240A81EFAB7 ] // </ e d i t o r −f o l d > public void a d d D i s r u p t i o n ( OneDayDisruption oneDayDisruption ) { L i s t I t e r a t o r <O n e H o u r C a r r i e r D i s r u p t i o n > d i s r u p t i o n L i s t I t e r a t o r = one D ay D is ru p ti on . g e t O n e H o u r C a r r i e r D i s r u p t i o n L i s t ( ) . l i s t I t e r a t o r ( ) ; while ( d i s r u p t i o n L i s t I t e r a t o r . hasNext ( ) ) { i f ( a d d O n e H o u r C a r r i e r D i s r u p t i o n ( d i s r u p t i o n L i s t I t e r a t o r . next ( ) ) ) { break ; // o n l y one d i s r u p t i o n may a p p l y } } } 107 109 111 113 115 // 117 119 121 123 125 127 129 131 133 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE.75700115 −BA85−CF16−CD86−139CD48FF709 ] // </ e d i t o r −f o l d > public boolean a d d O n e H o u r C a r r i e r D i s r u p t i o n ( O n e H o u r C a r r i e r D i s r u p t i o n oneHourCarrierDisruption ) { i f ( o n e H o u r C a r r i e r D i s r u p t i o n . g e t D i s r u p t i o n S t a r t i n g H o u r ( )<= t h i s . getHourOfDay ( ) && t h i s . getHourOfDay ( ) < o n e H o u r C a r r i e r D i s r u p t i o n . getDisruptionEndingHour ( ) && t h i s . getCarrierIATACode ( ) . e q u a l s ( o n e H o u r C a r r i e r D i s r u p t i o n . getDisruptedCarrierIATACode ( ) ) ) { add d i s r u p t i o n s i f ( oneHourCarrierDisruption . getFractionOfRegularTurnsConvertedToEndingTurns ( ) > 1 | | oneHourCarrierDisruption . getFractionOfRegularTurnsConvertedToEndingTurns ( ) < 0 ) { System . out . p r i n t l n ( ” E r r o r i n AggregatedOneHourOneCarrierTurns . addOneHourCarrierDisruption ( ) ! ” ) ; System . out . p r i n t l n ( ” U n r e a s o n a b l e f r a c t i o n o f c o n v e r s i o n ! ” ) ; System . e x i t ( −1) ; } i n t numOfRegularTurnsConvertedToEndingTurns = ( in t ) ( t h i s . numRegularArrivals ∗ oneHourCarrierDisruption . getFractionOfRegularTurnsConvertedToEndingTurns ( ) ) ; t h i s . n u m R e g u l a r A r r i v a l s −= numOfRegularTurnsConvertedToEndingTurns ; t h i s . numEndingArrivals += numOfRegularTurnsConvertedToEndingTurns ; t h i s . averageGateOccupancyTimeInMinForRegularArrivals ∗= o n e H o u r C a r r i e r D i s r u p t i o n . getDisruptedGateOccupancyTimeRatio ( ) ; return true ; // t h i s d i s r u p t i o n a p p l i e s } else { return f a l s e ; } } @Override public S t r i n g t o S t r i n g ( ) { return getHourOfDay ( ) 121 + + + + + 135 137 ” ,” ” ,” ” ,” ” ,” ” ,” + + + + + getCarrierIATACode ( ) getNumRegularArrivals ( ) getAverageGateOccupancyTimeInMinForRegularArrivals ( ) getNumEndingArrivals ( ) getNumStartingDepartures ( ) ; 139 } 141 public i n t getHourOfDay ( ) { return hourOfDay ; } 143 public S t r i n g getCarrierIATACode ( ) { return carrierIATACode ; } 145 147 public i n t g e t N u m R e g u l a r A r r i v a l s ( ) { return n u m R e g u l a r A r r i v a l s ; } 149 151 public i n t getAverageGateOccupancyTimeInMinForRegularArrivals ( ) { return averageGateOccupancyTimeInMinForRegularArrivals ; } 153 155 public i n t getNumEndingArrivals ( ) { return numEndingArrivals ; } 157 159 public i n t g e t N u m S t a r t i n g D e p a r t u r e s ( ) { return n u m S t a r t i n g D e p a r t u r e s ; } 161 163 165 } src/TurnGenerator/AggregatedOneHourOneCarrierTurns.java package TurnGenerator ; 2 import j a v a . i o . ∗ ; 4 import j a v a . u t i l . ∗ ; 6 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 1DE34DED−2AAE−FC57−ABA8−9AD89F844EC6 ] 8 // </ e d i t o r −f o l d > public c l a s s OneDayDisruption { 10 private A r r a y L i s t <O n e H o u r C a r r i e r D i s r u p t i o n > aggregatedOneHourCarrierDisruptionArray ; 12 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 14 // #[ r e g e n=yes , i d=DCE. 8 3E50ABE−3590−9CF3−07FB−510B50A8C333 ] // </ e d i t o r −f o l d > 16 public OneDayDisruption ( ) { a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y = new A r r a y L i s t < O n e H o u r C a r r i e r D i s r u p t i o n >() ; 18 } 122 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 public OneDayDisruption ( F i l e f i l e N a m e ) throws IOException { a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y = new A r r a y L i s t < O n e H o u r C a r r i e r D i s r u p t i o n >() ; B u f f e r e d R e a d e r inputStream = null ; String line ; Scanner s = null ; try { inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r ( f i l e N a m e ) ) ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . out . p r i n t l n ( ” E r r o r i n u s i n g c l a s s OneDayDisruption ! Empty f i l e ” ) ; System . e x i t ( −1) ; } while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { s = new Scanner ( l i n e ) ; s . u s e D e l i m i t e r ( ” ,\\ s ∗” ) ; a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y . add (new OneHourCarrierDisruption ( s . nextInt () , s . nextInt () , s . next ( ) , s . nextInt () , s . nextDouble ( ) , s . nextDouble ( ) , s . nextDouble ( ) )); } } finally { i f ( inputStream != null ) { inputStream . c l o s e ( ) ; } } s . close () ; } public boolean add ( O n e H o u r C a r r i e r D i s r u p t i o n o n e H o u r C a r r i e r D i s r u p t i o n ) { return a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y . add ( oneHourCarrierDisruption ) ; } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. D9F16AB8−D69B−4C61−2689−52D7BFF172FA ] // </ e d i t o r −f o l d > public L i s t g e t O n e H o u r C a r r i e r D i s r u p t i o n L i s t ( ) { return a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y ; } 62 64 public L i s t I t e r a t o r <O n e H o u r C a r r i e r D i s r u p t i o n > l i s t I t e r a t o r ( ) { return a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y . l i s t I t e r a t o r ( ) ; } 66 68 70 @Override public S t r i n g t o S t r i n g ( ) { String objectString = ” disruptionStartingHour ” + ” , disruptionEndingHour ” + 123 ” , disruptedCarrierIATACode ” + ” , disruptedCeilingOfRegularArrivalHourlyCount ” + ” , disruptedGateOccupancyTimeRatio ” + ” , disruptedRegularArrivalCancellationRate ” + ” , disruptedEndingArrivalCancellationRate ” ; ListIterator iter = l i s t I t e r a t o r () ; while ( i t e r . hasNext ( ) ) { o b j e c t S t r i n g += ” \n” + i t e r . next ( ) ; } return o b j e c t S t r i n g ; 72 74 76 78 80 } 82 84 86 } public i n t s i z e ( ) { return a g g r e g a t e d O n e H o u r C a r r i e r D i s r u p t i o n A r r a y . s i z e ( ) ; } src/TurnGenerator/OneDayDisruption.java 1 package TurnGenerator ; 3 import j a v a . i o . ∗ ; import j a v a . u t i l . ∗ ; 5 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 7 // #[ r e g e n=yes , i d=DCE. 5 5 4 5 FC58−FD76−C4E4−7BF4−847D6227919C ] // </ e d i t o r −f o l d > 9 public c l a s s OneDayTurns { 11 private A r r a y L i s t <Turn> turnArray ; 13 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 0 5 9CC1DE−C2EF−4DD0−3A1A−A2DA05F9CB08 ] // </ e d i t o r −f o l d > public OneDayTurns ( ) { } 15 17 19 21 23 25 27 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. EF4084EF−2975−2A82−B560−0E827B22FAAD ] // </ e d i t o r −f o l d > public OneDayTurns ( AggregatedOneDayTurns aggregatedOneDayTurns ) { turnArray = new A r r a y L i s t <Turn >() ; L i s t I t e r a t o r <Turn> t u r n I t e r a t o r = aggregatedOneDayTurns . generateTurnList () . l i s t I t e r a t o r () ; while ( t u r n I t e r a t o r . hasNext ( ) ) { turnArray . add ( t u r n I t e r a t o r . next ( ) ) ; } } 29 31 public i n t s i z e ( ) { return turnArray . s i z e ( ) ; } 33 35 public L i s t I t e r a t o r <Turn> l i s t I t e r a t o r ( ) { return turnArray . l i s t I t e r a t o r ( ) ; } 124 37 @Override public S t r i n g t o S t r i n g ( ) { S t r i n g o b j e c t S t r i n g = ” carrierIATACode ” + ” , turnType ” + ” , actuaArrInMin ” + ” , actDepInMin ” + ” , gateOccTimeInMin ” ; ListIterator iter = l i s t I t e r a t o r () ; while ( i t e r . hasNext ( ) ) { o b j e c t S t r i n g += ” \n” + i t e r . next ( ) ; } return o b j e c t S t r i n g ; } 39 41 43 45 47 49 51 53 55 57 59 61 63 } public void t o F i l e ( F i l e f i l e N a m e ) throws IOException { P r i n t W r i t e r outputStream = null ; try { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( f i l e N a m e ) ) ; outputStream . p r i n t l n ( t o S t r i n g ( ) ) ; } finally { i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } } src/TurnGenerator/OneDayTurns.java package TurnGenerator ; 2 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 4 // #[ r e g e n=yes , i d=DCE. 7 8 8 FC758−E21D−4C7B−DE74−6A3282DB5E8C ] // </ e d i t o r −f o l d > 6 public c l a s s O n e H o u r C a r r i e r D i s r u p t i o n { 8 10 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 5 5 F797F9−684C−40C0−2967−258AD5449771 ] // </ e d i t o r −f o l d > private i n t d i s r u p t i o n S t a r t i n g H o u r ; 12 14 16 18 20 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. D121DEA9−90B9−BA87−A382−71F0D347A3A1 ] // </ e d i t o r −f o l d > private i n t d i s r u p t i o n E n d i n g H o u r ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 7 C748FDF−2803−65AA−CDAC−1D95835A4B10 ] // </ e d i t o r −f o l d > private S t r i n g disruptedCarrierIATACode ; 22 24 26 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. CAE72C35−6F98−8260−B9EC−6865A11BB866 ] // </ e d i t o r −f o l d > private double f r a c t i o n O f R e g u l a r T u r n s C o n v e r t e d T o E n d i n g T u r n s ; 125 28 30 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 9 D0044F5−7F77−68D6−82FF−2AFE64E17404 ] // </ e d i t o r −f o l d > private double disruptedGateOccupancyTimeRatio ; 32 34 36 38 40 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. C8761637 −6122−3FA7−2543−57740A709AAC ] // </ e d i t o r −f o l d > private double d i s r u p t e d R e g u l a r A r r i v a l C a n c e l l a t i o n R a t e ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 5 BE1A3C4−9E17−B145−810F−51B646896534 ] // </ e d i t o r −f o l d > private double d i s r u p t e d E n d i n g A r r i v a l C a n c e l l a t i o n R a t e ; 42 44 46 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 5FEB7AC0−C739−76E4−D64A−948AB7102B3D ] // </ e d i t o r −f o l d > public O n e H o u r C a r r i e r D i s r u p t i o n ( ) { } 48 50 52 54 56 58 60 62 public O n e H o u r C a r r i e r D i s r u p t i o n ( i n t d i s r u p t i o n S t a r t i n g H o u r , int disruptionEndingHour , S t r i n g disruptedCarrierIATACode , double f r a c t i o n O f R e g u l a r T u r n s C o n v e r t e d T o E n d i n g T u r n s , double disruptedGateOccupancyTimeRatio , double d i s r u p t e d R e g u l a r A r r i v a l C a n c e l l a t i o n R a t e , double d i s r u p t e d E n d i n g A r r i v a l C a n c e l l a t i o n R a t e ) { this . disruptionStartingHour = disruptionStartingHour ; this . disruptionEndingHour = disruptionEndingHour ; t h i s . disruptedCarrierIATACode = disruptedCarrierIATACode ; this . fractionOfRegularTurnsConvertedToEndingTurns = fractionOfRegularTurnsConvertedToEndingTurns ; t h i s . disruptedGateOccupancyTimeRatio = disruptedGateOccupancyTimeRatio ; this . disruptedRegularArrivalCancellationRate = disruptedRegularArrivalCancellationRate ; this . disruptedEndingArrivalCancellationRate = disruptedEndingArrivalCancellationRate ; } 64 66 68 70 72 74 76 78 @Override public S t r i n g t o S t r i n g ( ) { return d i s r u p t i o n S t a r t i n g H o u r + ” , ” + getDisruptionEndingHour ( ) + ” , ” + getDisruptedCarrierIATACode ( ) + ” , ” + getFractionOfRegularTurnsConvertedToEndingTurns ( ) + ” , ” + getDisruptedGateOccupancyTimeRatio ( ) + ” ,” + getDisruptedRegularArrivalCancellationRate () + ” ,” + getDisruptedEndingArrivalCancellationRate () ; } public i n t g e t D i s r u p t i o n S t a r t i n g H o u r ( ) { return d i s r u p t i o n S t a r t i n g H o u r ; } 126 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 public void s e t D i s r u p t i o n S t a r t i n g H o u r ( in t d i s r u p t i o n S t a r t i n g H o u r ) { this . disruptionStartingHour = disruptionStartingHour ; } public i n t g e t D i s r u p t i o n E n d i n g H o u r ( ) { return d i s r u p t i o n E n d i n g H o u r ; } public void s e t D i s r u p t i o n E n d i n g H o u r ( i n t d i s r u p t i o n E n d i n g H o u r ) { this . disruptionEndingHour = disruptionEndingHour ; } public S t r i n g getDisruptedCarrierIATACode ( ) { return disruptedCarrierIATACode ; } public void se t D i s ru p t e dCa rr ier IA T ACode ( S t r i n g disruptedCarrierIATACode ) { t h i s . disruptedCarrierIATACode = disruptedCarrierIATACode ; } public double getDisruptedGateOccupancyTimeRatio ( ) { return disruptedGateOccupancyTimeRatio ; } public void setDisruptedGateOccupancyTimeRatio ( double disruptedGateOccupancyTimeRatio ) { t h i s . disruptedGateOccupancyTimeRatio = disruptedGateOccupancyTimeRatio ; } public double g e t D i s r u p t e d R e g u l a r A r r i v a l C a n c e l l a t i o n R a t e ( ) { return d i s r u p t e d R e g u l a r A r r i v a l C a n c e l l a t i o n R a t e ; } public void s e t D i s r u p t e d R e g u l a r A r r i v a l C a n c e l l a t i o n R a t e ( double disruptedRegularArrivalCancellationRate ) { this . disruptedRegularArrivalCancellationRate = disruptedRegularArrivalCancellationRate ; } public double g e t D i s r u p t e d E n d i n g A r r i v a l C a n c e l l a t i o n R a t e ( ) { return d i s r u p t e d E n d i n g A r r i v a l C a n c e l l a t i o n R a t e ; } public void s e t D i s r u p t e d E n d i n g A r r i v a l C a n c e l l a t i o n R a t e ( double disruptedEndingArrivalCancellationRate ) { this . disruptedEndingArrivalCancellationRate = disruptedEndingArrivalCancellationRate ; } /∗ ∗ ∗ @return t h e f r a c t i o n O f R e g u l a r T u r n s C o n v e r t e d T o E n d i n g T u r n s ∗/ public double getFractionOfRegularTurnsConvertedToEndingTurns ( ) { return f r a c t i o n O f R e g u l a r T u r n s C o n v e r t e d T o E n d i n g T u r n s ; 127 } 130 132 134 136 /∗ ∗ ∗ @param f r a c t i o n O f R e g u l a r T u r n s C o n v e r t e d T o E n d i n g T u r n s t h e fractionOfRegularTurnsConvertedToEndingTurns to s e t ∗/ public void se tF r a ct i on O f Reg ula r Turn sConvertedToEndingTurns ( double fractionOfRegularTurnsConvertedToEndingTurns ) { this . fractionOfRegularTurnsConvertedToEndingTurns = fractionOfRegularTurnsConvertedToEndingTurns ; } 138 } src/TurnGenerator/OneHourCarrierDisruption.java 1 package TurnGenerator ; 3 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 6 A4FB8A9−DAB7−6D6E−0F28−A8C8691E8897 ] 5 // </ e d i t o r −f o l d > public c l a s s Turn { 7 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> 9 // #[ r e g e n=yes , i d=DCE. 3 B3AC2A0−B10F−30CD−D47F−9BDBFC56B9C6 ] // </ e d i t o r −f o l d > 11 private S t r i n g carrierIATACode ; 13 15 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE.79835683 −B2A6−5A60−6976−197DEC98E6B7 ] // </ e d i t o r −f o l d > private S t r i n g turnType ; 17 19 21 23 25 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 9 FE13CBF−09F8−D096−0CDE−28D7A6188E70 ] // </ e d i t o r −f o l d > private i n t actuaArrInMin ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. D8028937−02DE−4369−2743−4308797B8051 ] // </ e d i t o r −f o l d > private i n t actDepInMin ; 27 29 31 33 35 37 39 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. ED214BA8−8A68−D8A5−6182−B5F02939F0D0 ] // </ e d i t o r −f o l d > private i n t gateOccTimeInMin ; // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , i d=DCE. 6 1 9 2 0 9 1F−2454−2277−F954 −80449F5CE32E ] // </ e d i t o r −f o l d > public Turn ( ) { } public Turn ( S t r i n g carrierIATACode , S t r i n g turnType 128 41 , i n t actuaArrInMin , i n t actDepInMin , i n t gateOccTimeInMin ) { t h i s . carrierIATACode = carrierIATACode ; t h i s . turnType = turnType ; t h i s . actuaArrInMin = actuaArrInMin ; t h i s . actDepInMin = actDepInMin ; t h i s . gateOccTimeInMin = gateOccTimeInMin ; 43 45 47 49 } 51 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE.12795900 −2D35−7E5D−0A3A−63D43A76E84F ] // </ e d i t o r −f o l d > public i n t getActDepInMin ( ) { return 0 ; } 53 55 57 59 61 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. 8 FA737A1−318E−CEF9−536E−1685F9758F5A ] // </ e d i t o r −f o l d > public void setActDepInMin ( i n t v a l ) { } 63 65 67 69 71 73 75 77 79 81 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. 5 2 5 9 0 7EA−B764−E5EE−E53A−069F3CECAB73 ] // </ e d i t o r −f o l d > public i n t getActuaArrInMin ( ) { return 0 ; } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. BA926895−EC0F−F286−30AC−09546F7BDBAA] // </ e d i t o r −f o l d > public void setActuaArrInMin ( in t v a l ) { } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. E558B18C−D0BC−3C70−C548−6A38A560F31B ] // </ e d i t o r −f o l d > public S t r i n g getCarrierIATACode ( ) { return null ; } 83 85 87 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. 7 DDE16A5−9895−D492−0EBF−C9BFA98660B4 ] // </ e d i t o r −f o l d > public void setCarrierIATACode ( S t r i n g v a l ) { } 89 91 93 95 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. 6 0 D79FD3−80FD−5014−48C5−57D21C04B7A8 ] // </ e d i t o r −f o l d > public i n t getGateOccTimeInMin ( ) { return 0 ; } 129 97 99 101 103 105 107 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. A99246CE−90C4−432E−8067−C7098588F07F ] // </ e d i t o r −f o l d > public void setGateOccTimeInMin ( i n t v a l ) { } // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. 0 A302812 −824A−154E−9F72−F74BCE0CB21C ] // </ e d i t o r −f o l d > public S t r i n g getTurnType ( ) { return null ; } 109 111 113 // <e d i t o r −f o l d d e f a u l t s t a t e =” c o l l a p s e d ” d e s c=” UML Marker ”> // #[ r e g e n=yes , regenBody=yes , i d=DCE. ADAC3992−C20D−4A9D−37FC−11161F31F501 ] // </ e d i t o r −f o l d > public void setTurnType ( S t r i n g v a l ) { } 115 117 119 121 123 @Override public S t r i n g t o S t r i n g ( ) { return carrierIATACode + ” , ” + turnType + ” , ” + actuaArrInMin + ” , ” + actDepInMin + ” , ” + gateOccTimeInMin ; } 125 } src/TurnGenerator/Turn.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ 2 6 package g a t e a s s i g n m e n t s i m u l a t i o n ; 8 import j a v a . u t i l . c o n c u r r e n t . TimeUnit ; import p s i m j a v a . Squeue ; 10 /∗ ∗ 12 ∗ ∗ @author J e f f r e y 14 ∗/ public c l a s s A i r p l a n e extends p s i m j a v a . P r o c e s s { 16 private Turn i t s T u r n ; 18 public A i r p l a n e ( 20 S t r i n g pname , Turn i t s T u r n ) { 22 super ( pname ) ; this . setItsTurn ( itsTurn ) ; 24 itsTurn . s e t I t s A i r p l a n e ( this ) ; 130 26 i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” c r e a t e d a t : ” + g e t c l o c k ( ) ) ; } 28 } 30 public void Main body ( ) { i f ( get name ( ) . c o n t a i n s ( ” k i l l e r ” ) ) { Gate g a t e = i t s T u r n . g e t A s s i g n e d G a t e ( ) ; // g e t t h e a s s i g n e d g a t e i f ( ! gate . i d l e () ) { itsTurn . enterPenaltyBox ( ) ; d ea c ti v at e ( this ) ; itsTurn . exitPenaltyBox () ; } i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” j o i n s ” + g a t e . getGateQueue ( ) . get name ( ) + ” at ” + g e t c l o c k ( ) ) ; } g a t e . getGateQueue ( ) . i n t o ( t h i s ) ; // p u t t h i s k i l l e r p l a n e i n t o t h e queue /∗ ∗ I f g a t e i s i d l e , r e a c t i v a t e g a t e , and t h e n d e a c t i v e a i r c r a f t . ∗ Ot h e r w i s e , d e a c t i v a t e a i r c r a f t d i r e c t l y , and l e t g a t e have continuous ∗ s e r v i c e in the f uture . ∗/ i f ( gate . i d l e () ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” a c t i v a t i n g ” + g a t e . get name ( ) + ” a t time ” + g e t c l o c k ( ) ) ; } r e a c t i v a t e ( gate ) ; Thread . y i e l d ( ) ; } d e a c t i v a t e ( t h i s ) ; // s u s p e n d i t s e l f u n t i l t h e g a t e becomes available t e r m i n a t e ( ) ; // t e r m i n a t i n g t h e k i l l e r a i r p l a n e return ; } i t s T u r n . touchDownRunway ( ) ; delay (( i n t ) GateAssignmentSimulation . g e t S i m u l a t i o n G r a n u l a r i t y () . c o n v e r t ( 6 , TimeUnit .MINUTES) ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” r e q u e s t s e r v i c e from ” + i t s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” at ” + g e t c l o c k ( ) ) ; } GateAssignmentSimulation . gateChangeHeuristic ( itsTurn ) ; Gate g a t e = i t s T u r n . g e t A s s i g n e d G a t e ( ) ; Squeue gateQueue = g a t e . getGateQueue ( ) ; // d e l a y ( 0 ) ; // remove t h i s l i n e t o l e t a i r c r a f t b l o c k g a t e i m m e d i a t e l y i f ( g a t e . i d l e ( ) == f a l s e | | gateQueue . empty ( ) == f a l s e | | ! g a t e . isCarrierAccepted ( itsTurn . getCarrier () ) ) { itsTurn . enterPenaltyBox ( ) ; 32 34 36 38 40 42 44 46 48 50 52 54 56 // 58 60 62 // 64 66 68 70 72 74 131 dea c ti v at e ( this ) ; itsTurn . exitPenaltyBox () ; } // t o be changed so t h a t a i r c r a f t g o e s t o p e n a l t y box i f g a t e i s unavailable g a t e = i t s T u r n . g e t A s s i g n e d G a t e ( ) ; // need t o be r e r e a d s i n c e g a t e can be r e a s s i g n e d i n p e n a l t y box gateQueue = g a t e . getGateQueue ( ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” j o i n s ” + gateQueue . get name ( ) + ” at ” + g e t c l o c k ( ) ) ; } gateQueue . i n t o ( t h i s ) ; itsTurn . startTaxiingToFinalGate () ; /∗ ∗ I f g a t e i s i d l e , r e a c t i v a t e g a t e , and t h e n d e a c t i v e a i r c r a f t . ∗ Ot h e r w i s e , d e a c t i v a t e a i r c r a f t d i r e c t l y , and l e t g a t e have continuous ∗ s e r v i c e in the f u t u r e . ∗/ i f ( g a t e . i d l e ( ) == true ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” a c t i v a t i n g ” + g a t e . get name ( ) + ” a t time ” + g e t c l o c k ( ) ) ; } r e a c t i v a t e ( gate ) ; Thread . y i e l d ( ) ; } else { System . out . p r i n t l n ( ” E r r o r a t ” + t h i s . g e t C l a s s ( ) . getName ( ) + ”.” + new E x c e p t i o n ( ) . g e t S t a c k T r a c e ( ) [ 0 ] . getMethodName ( ) + ”! ” + g a t e . get name ( ) + ” i s not i d l e ! ” ) ; } // i f n o t i d l e , a i r p l a n e s h o u l d go t o p e n a l t y box . Could be s e q u e n c e e r r o r o f two t h r e a d s a t same time de ac t iva t e ( this ) ; /∗ ∗ Here , g a t e r e a c t i v a t e s t h i s a i r c r a f t and l e t s t h e a i r c r a f t d e p a r t and ∗ terminates i t s e l f . ∗/ i t s T u r n . departFromGate ( ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( ) + ” terminates at ” + g e t c l o c k ( ) ) ; } terminate () ; 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 } 120 122 public Turn g e t I t s T u r n ( ) { return i t s T u r n ; } 124 public void s e t I t s T u r n ( Turn i t s T u r n ) { 132 126 this . itsTurn = itsTurn ; } 128 } src/gateassignmentsimulation/Airplane.java 1 /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates 3 ∗ and open t h e t e m p l a t e i n t h e e d i t o r . ∗/ 5 package g a t e a s s i g n m e n t s i m u l a t i o n ; 7 import j a v a . u t i l . I t e r a t o r ; 9 import j a v a . u t i l . c o n c u r r e n t . TimeUnit ; 11 /∗ ∗ ∗ 13 ∗ @author J e f f r e y ∗/ 15 public c l a s s A r r i v a l s extends p s i m j a v a . P r o c e s s { public A r r i v a l s ( S t r i n g name ) { super ( name ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” c r e a t e d a t ” + g e t c l o c k ( ) ) ; } } 17 19 21 23 25 27 29 31 33 35 // // 37 // 39 // 41 // public void Main body ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” A r r i v a l s s t a r i n g main body a t ” + g e t c l o c k ( ) ) ; } Turn [ ] turnArray = G a t e A s s i g n m e n t S i m u l a t i o n . turnArray ; i n t numberOfTurns = turnArray . l e n g t h ; f o r ( i n t i n d e x =0; index<numberOfTurns ; i n d e x++) { Turn t h i s T u r n = turnArray [ i n d e x ] ; t h i s T u r n . setWheelsOnScheduledTime ( t h i s T u r n . getGateInScheduledTime () − t h i s T u r n . g e t T a x i In S c he d u le d T im e ( ) ) ; t h i s T u r n . setWheelsOnActualTime ( t h i s T u r n . getWheelsOnScheduledTime ( ) // uncomment t h e f o l l o w i n g f o r s t o c h a s t i c a r r i v a l time + ( i n t ) ( GateAssignmentSimulation . getSimulationGranularity () . c o n v e r t ( Math . round ( G a t e A s s i g n m e n t S i m u l a t i o n . wheelOnDeviation . nextDouble () ) , TimeUnit .MINUTES) ) ); t h i s T u r n . setGroundActualTime ( t h i s T u r n . getGroundActualTime ( ) // uncomment t h e f o l l o w i n g f o r s t o c h a s t i c s e r v i c e time + ( i n t ) ( GateAssignmentSimulation . getSimulationGranularity () . c o n v e r t ( Math . round ( G a t e A s s i g n m e n t S i m u l a t i o n . groundDeviation . nextDouble () ) 133 // , TimeUnit .SECONDS) ) 43 ); } G a t e A s s i g n m e n t S i m u l a t i o n . turnArraySortByWheelOnActualTime ( ) ; i n t previousWheelOnActualTime = 0 ; i n t interWheelOnTime ; f o r ( i n t i n d e x =0; index<numberOfTurns ; i n d e x++) { Turn t h i s T u r n = turnArray [ i n d e x ] ; interWheelOnTime = t h i s T u r n . getWheelsOnActualTime ( )− previousWheelOnActualTime ; previousWheelOnActualTime = t h i s T u r n . getWheelsOnActualTime ( ) ; d e l a y ( interWheelOnTime ) ; // w a i t b e f o r e c r e a t i n g n e x t a i r p l a n e A i r p l a n e a i r p l a n e O b j = new A i r p l a n e ( ” a i r p l a n e ” + t h i s T u r n . getTurnIndex ( ) , thisTurn ); airplaneObj . start () ; Thread . y i e l d ( ) ; } /∗ Here , a l l a r r i v a l s have been c r e a t e d . ∗/ i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” A r r i v a l s t e r m i n a t e s ” ) ; } // g e n e r a t e t h e k i l l e r t h r e a d f o r a l l t h e s e g a t e s I t e r a t o r <Gate> i t = G a t e A s s i g n m e n t S i m u l a t i o n . g a t e A r r a y . i t e r a t o r ( ) ; while ( i t . hasNext ( ) ) { Gate g a t e = i t . next ( ) ; A i r p l a n e k i l l e r a i r = new A i r p l a n e ( ” k i l l e r O f ”+g a t e . get name ( ) , new Turn ( g a t e ) ) ; k i l l e r a i r . start () ; } 45 47 49 51 53 55 57 59 61 63 65 67 69 71 terminate () ; 73 } 75 } src/gateassignmentsimulation/Arrivals.java 1 /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates 3 ∗ and open t h e t e m p l a t e i n t h e e d i t o r . ∗/ 5 package g a t e a s s i g n m e n t s i m u l a t i o n ; 7 import j a v a . u t i l . Arrays ; 9 import j a v a . u t i l . L i s t ; import p s i m j a v a . ∗ ; 11 /∗ ∗ 13 ∗ ∗ @author J e f f r e y 15 ∗/ public c l a s s Gate extends p s i m j a v a . P r o c e s s { 17 134 19 private A i r p l a n e c u r r e n t A i r p l a n e A t G a t e ; private Squeue gateQueue ; private L i s t <S t r i n g > e l i g i b l e C a r r i e r L i s t ; 21 23 25 27 29 31 33 35 37 39 public Gate ( S t r i n g name ) { super ( name ) ; c u r r e n t A i r p l a n e A t G a t e = null ; gateQueue = new Squeue ( get name ( ) + ” Queue ” ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” c r e a t e d a t : ” + g e t c l o c k ( ) ) ; } } public Gate ( S t r i n g name , S t r i n g e l i g i b l e C a r r i e r L i s t S t r i n g ) { super ( name ) ; String [ ] eligibleCarrierArray = e li g i bl e Ca r r ie r L is t St r i ng . s p l i t (” ,”) ; e l i g i b l e C a r r i e r L i s t = Arrays . a s L i s t ( e l i g i b l e C a r r i e r A r r a y ) ; c u r r e n t A i r p l a n e A t G a t e = null ; gateQueue = new Squeue ( get name ( ) + ” Queue ” ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” c r e a t e d a t : ” + g e t c l o c k ( ) ) ; } } 41 43 45 47 49 51 53 55 57 59 61 63 65 public void Main body ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” s t a r t i n g main body a t ” + get clock () ) ; } while ( true ) { i f ( gateQueue==null ) { System . out . p r i n t l n ( ” E r r o r a t Gate . Main body ( ) ! ” + ” Queue i s n u l l a t : ” + g e t c l o c k ( ) ) ; } // f o r debug purpose , p r o b a b l y can be removed /∗ ∗ I f gateQueue i s empty , d e a c t i v a t e i t s e l f and ∗ w a i t t o be r e a c t i v a t e d t o s e r v i c e n e x t a i r p l a n e . ∗ Ot h e r w i s e , s e r v i c e n e x t a i r p l a n e d i r e c t l y . ∗/ i f ( gateQueue . empty ( ) ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” g o e s i d l e a t ” + get clock () ) ; } G a t e A s s i g n m e n t S i m u l a t i o n . penaltyBox . r e c e i v e I d l e S i g n a l ( t h i s ) ; d ea c ti v at e ( this ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( get name ( )+ ” r e a c t i v a t e d a t ” + get clock () ) ; } } i f ( s e r v i c e A i r p l a n e ( ) ==−1) break ; 67 69 } i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { 135 System . out . p r i n t l n ( t h i s . get name ( ) + ” t e r m i n a t e s a t ” + g e t c l o c k () ) ; } terminate () ; 71 73 } 75 public i n t s e r v i c e A i r p l a n e ( ) { i f ( gateQueue . empty ( ) != true ) { c u r r e n t A i r p l a n e A t G a t e = ( A i r p l a n e ) gateQueue . out ( ) ; i f ( c u r r e n t A i r p l a n e A t G a t e . get name ( ) . c o n t a i n s ( ” k i l l e r ” ) ) { r e a c t i v a t e ( currentAirplaneAtGate ) ; terminate () ; return −1; } Turn i t s T u r n = c u r r e n t A i r p l a n e A t G a t e . g e t I t s T u r n ( ) ; i f ( t h i s != i t s T u r n . g e t A s s i g n e d G a t e ( ) ) { System . out . p r i n t l n ( ” E r r o r i n Gate . s e r v i c e A i r p l a n e ( ) ! ” + c u r r e n t A i r p l a n e A t G a t e . get name ( ) + ” was f i n a l l y a s s i g n e d t o ” + i t s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” , but a r r i v e s a t ” + t h i s . get name ( ) ); } itsTurn . arriveAtGate ( ) ; d e l a y ( i t s T u r n . getGroundActualTime ( ) ) ; // ground time i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( c u r r e n t A i r p l a n e A t G a t e . get name ( ) + ” door c l o s e d a t g a t e ” + get name ( ) + ” at ” + g e t c l o c k ( ) ) ; } r e a c t i v a t e ( c u r r e n t A i r p l a n e A t G a t e ) ; // l e t a i r p l a n e t e r m i n a t e itself } else { System . out . p r i n t l n ( ” E r r o r a t Gate . s e r v i c e A i r p l a n e ( ) ! ” + ” Tried to s e r v i c e a i r p l a n e without a i r p l a n e . ” ) ; return 0 ; } return 0 ; 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 } 109 111 public Squeue getGateQueue ( ) { return gateQueue ; } 113 115 public void setGateQueue ( Squeue gateQueue ) { t h i s . gateQueue = gateQueue ; } 117 119 121 123 public boolean i s C a r r i e r A c c e p t e d ( S t r i n g c a r r i e r N a m e ) { i f ( e l i g i b l e C a r r i e r L i s t . contains ( carrierName ) ) { return true ; } else return f a l s e ; } 136 } src/gateassignmentsimulation/Gate.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ 2 6 package g a t e a s s i g n m e n t s i m u l a t i o n ; 8 import import 10 import import 12 import import 14 import import 16 import import 18 import java . i o . BufferedReader ; java . io . F i l e ; j a v a . i o . FileNotFoundException ; java . io . FileReader ; j a v a . i o . IOException ; java . s q l . ∗ ; java . u t i l . I t e r a t o r ; java . u t i l . LinkedList ; j a v a . u t i l . Scanner ; psimjava . StaticSync ; psimjava . Process ; 20 /∗ ∗ ∗ 22 ∗ @author J e f f r e y ∗/ 24 public c l a s s GateArray implements I t e r a b l e { private L i n k e d L i s t <Gate> g a t e A r r a y ; 26 private L i n k e d L i s t <GateCapacityofOneCarrierGroup > G a t e C a p a c i t y B y C a r r i e r ; 28 30 32 34 36 38 40 42 44 46 48 50 public GateArray ( S t r i n g f i l e N a m e ) { g a t e A r r a y = new L i n k e d L i s t <Gate >() ; B u f f e r e d R e a d e r inputStream = null ; String line ; Scanner s = null ; try { inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r (new F i l e ( f i l e N a m e ) )); i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . out . p r i n t l n ( ” E r r o r i n c l a s s GateArray ! Empty f i l e ” ) ; System . e x i t ( −1) ; } while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { s = new Scanner ( l i n e ) ; S t r i n g gateName = s . next ( ) ; S t r i n g c a r r i e r I A T A = s . next ( ) ; g a t e A r r a y . add (new Gate ( gateName , c a r r i e r I A T A ) ) ; } inputStream . c l o s e ( ) ; } catch ( FileNotFoundException e ) { System . out . p r i n t l n ( ” E r r o r : ” + e . t o S t r i n g ( ) + e . getMessa ge ( ) ) ; // i n p u t S t r e a m . c l o s e ( ) ; System . e x i t ( −1) ; } catch ( IOException e ) { 137 System . out . p r i n t l n ( ” E r r o r : ” + e . t o S t r i n g ( ) + e . getMessa ge ( ) ) ; // i n p u t S t r e a m . c l o s e ( ) ; System . e x i t ( −1) ; }finally { i f ( i n p u t S t r e a m != n u l l ) { System . o u t . p r i n t l n (” C l o s i n g B u f f e r e d R e a d e r ”) ; // i n p u t S t r e a m . c l o s e ( ) ; } else { System . o u t . p r i n t l n (” B u f f e r e d R e a d e r n o t open ”) ; } 52 54 // // 56 // // 58 // // 60 // 62 64 } } i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” g a t e A r r a y ”+ ” c r e a t e d a t : ” + S t a t i c S y n c . get clock () ) ; } 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 public GateArray ( S t r i n g g a t e C a p a c i t y F i l e N a m e , double ne w Gat eCap acityF ra ction , double g a t e A v a i l a b l e F r a c t i o n , double commonGateFraction , S t r i n g commonGateCarriers , String impactedCarriers , double o f f T e r m i n a l O v e r n i g h t P a r k i n g C a p a c i t y A s O f G a t e C a p a c i t y ) { G a t e C a p a c i t y B y C a r r i e r = new L i n k e d L i s t <GateCapacityofOneCarrierGroup >() ; B u f f e r e d R e a d e r inputStream = null ; String line ; Scanner s = null ; try { inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r (new F i l e ( gateCapacityFileName ) ) ) ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . out . p r i n t l n ( ” E r r o r i n c l a s s GateArray ! Empty f i l e ” ) ; System . e x i t ( −1) ; } while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { s = new Scanner ( l i n e ) ; S t r i n g c a r r i e r I A T A = s . next ( ) ; i n t numGates = s . n e x t I n t ( ) ; G a t e C a p a c i t y B y C a r r i e r . add (new GateCapacityofOneCarrierGroup ( c a r r i e r I A T A , numGates ) ) ; } inputStream . c l o s e ( ) ; } catch ( FileNotFoundException e ) { System . out . p r i n t l n ( ” E r r o r : ” + e . t o S t r i n g ( ) + e . getMessa ge ( ) ) ; // i n p u t S t r e a m . c l o s e ( ) ; System . e x i t ( 0 ) ; } catch ( IOException e ) { System . out . p r i n t l n ( ” E r r o r : ” + e . t o S t r i n g ( ) + e . getMessa ge ( ) ) ; // i n p u t S t r e a m . c l o s e ( ) ; System . e x i t ( 0 ) ; } 138 // modify g a t e c a p a c i t y f o r i m p a c t e d c a r r i e r s String [ ] impactedCarriersArray = impactedCarriers . s p l i t ( ” , ” ) ; f o r ( S t r i n g item : i m p a c t e d C a r r i e r s A r r a y ) { f o r ( GateCapacityofOneCarrierGroup aGroup : G a t e C a p a c i t y B y C a r r i e r ) { i f ( aGroup . g e t E l i g i b l e C a r r i e r L i s t ( ) . c o n t a i n s ( item ) ) { // assuming no common g a t e s a t i n i t i a l i z a t i o n , so a c t u a l l y equal aGroup . setNu mOf f Ter minalOvernightParkings ( ( in t ) Math . round ( aGroup . getNumGates ( ) ∗ offTerminalOvernightParkingCapacityAsOfGateCapacity ) ) ; aGroup . setNumGates ( ( i n t ) Math . round ( aGroup . getNumGates ( ) ∗ ((1+ new GateC ap acityFraction ) ∗ g a t e A v a i l a b l e F r a c t i o n ) )); } } } 102 104 106 108 110 112 // change some g a t e s f o r common u s e S t r i n g [ ] commonGateCarrierGroupArray = commonGateCarriers . s p l i t ( ” ; ” ) ; f o r ( S t r i n g item : commonGateCarrierGroupArray ) { i n t numCommonGates = 0 ; // assuming no common g a t e s a t initialization S t r i n g [ ] commonGateCarrierArray = item . s p l i t ( ” , ” ) ; f o r ( S t r i n g subItem : commonGateCarrierArray ) { f o r ( GateCapacityofOneCarrierGroup aGroup : GateCapacityByCarrier ) { i f ( aGroup . g e t E l i g i b l e C a r r i e r L i s t ( ) . s i z e ( ) == 1 // f i n d that carrier && aGroup . g e t E l i g i b l e C a r r i e r L i s t ( ) . c o n t a i n s ( subItem ) ) { i n t numGatesTurnedToCommon = ( i n t ) Math . round ( aGroup . getNumGates ( ) ∗ commonGateFraction ) ; aGroup . setNumGates ( aGroup . getNumGates ( ) − numGatesTurnedToCommon ) ; // d e c r e a s e number o f gates numCommonGates += numGatesTurnedToCommon ; // add t o numGates ; break ; } } } G a t e C a p a c i t y B y C a r r i e r . add (new GateCapacityofOneCarrierGroup ( item , numCommonGates ) ) ; // g e n e r a t e common g a t e s } g a t e A r r a y = new L i n k e d L i s t <Gate >() ; f o r ( GateCapacityofOneCarrierGroup aGroup : G a t e C a p a c i t y B y C a r r i e r ) { f o r ( i n t i = 1 ; i <= aGroup . getNumGates ( ) ; i ++) { g a t e A r r a y . add (new Gate ( aGroup . g e t E l i g i b l e C a r r i e r L i s t S t r i n g ( )+i , aGroup . g e t E l i g i b l e C a r r i e r L i s t S t r i n g ( ) ) ) ; } } 114 116 118 120 122 124 126 128 130 132 134 136 138 } 140 public Gate g e t G a t e O b j e c t ( S t r i n g gateName ) { 139 142 144 146 148 150 152 154 156 f o r ( Gate item : g a t e A r r a y ) { i f ( item . get name ( ) . e q u a l s ( gateName ) ) { return item ; } } /∗ The f o l l o w i n g code i s t o p r i n t o u t t h e c l a s s name and t h e method name f o r t h e e a s e o f l o c a t i n g a problem f o r d e b u g g i n g p u r p o s e s ∗/ System . out . p r i n t l n ( ” E r r o r a t ” + t h i s . g e t C l a s s ( ) . getName ( ) + ”.” + new E x c e p t i o n ( ) . g e t S t a c k T r a c e ( ) [ 0 ] . getMethodName ( ) + ”! ” + gateName + ” not found ! ” ) ; System . e x i t ( −1) ; return null ; } // c o n v e r t Gate S t r i n g t o Gate o b j e c t 158 160 public boolean i s G a t e C a r r i e r C o m p a t i b l e ( S t r i n g gateName , S t r i n g c a r r i e r N a m e ){ return g e t G a t e O b j e c t ( gateName ) . i s C a r r i e r A c c e p t e d ( c a r r i e r N a m e ) ; } 162 164 public I t e r a t o r <Gate> i t e r a t o r ( ) { return g a t e A r r a y . i t e r a t o r ( ) ; } 166 168 170 public void s t a r t A l l G a t e s ( ) { f o r ( Gate item : g a t e A r r a y ) { item . s t a r t ( ) ; // s t a r t g a t e t o s e r v i c e a i r p l a n e once s i m u l a t i o n starts } } 172 174 176 public void s t o p A l l G a t e s ( P r o c e s s g a t e A s s i g n m e n t S i m u l a t i o n ) { f o r ( Gate item : g a t e A r r a y ) { g a t e A s s i g n m e n t S i m u l a t i o n . r e a c t i v a t e ( item ) ; } } 178 180 public void c l e a r A l l ( ) { g a t e A r r a y = null ; } 182 184 public i n t s i z e ( ) { return g a t e A r r a y . s i z e ( ) ; } 186 188 190 192 194 @Override public S t r i n g t o S t r i n g ( ) { S t r i n g t o S t r i n g = ”” ; f o r ( Gate item : g a t e A r r a y ) { t o S t r i n g += item ; } return t o S t r i n g ; } 140 196 198 200 202 204 206 208 public Gate g e t F i r s t ( ) { return g a t e A r r a y . g e t F i r s t ( ) ; } public i n t g e t L e n g t h ( ) { return t h i s . g a t e A r r a y . s i z e ( ) ; } /∗ ∗ ∗ @return t h e G a t e C a p a c i t y B y C a r r i e r ∗/ public L i n k e d L i s t <GateCapacityofOneCarrierGroup > g e t G a t e C a p a c i t y B y C a r r i e r () { return G a t e C a p a c i t y B y C a r r i e r ; } 210 212 214 216 /∗ ∗ ∗ @param G a t e C a p a c i t y B y C a r r i e r t h e G a t e C a p a c i t y B y C a r r i e r t o s e t ∗/ public void s e t G a t e C a p a c i t y B y C a r r i e r ( L i n k e d L i s t < GateCapacityofOneCarrierGroup > G a t e C a p a c i t y B y C a r r i e r ) { this . GateCapacityByCarrier = GateCapacityByCarrier ; } 218 } src/gateassignmentsimulation/GateArray.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ 2 6 package g a t e a s s i g n m e n t s i m u l a t i o n ; 8 import TurnGenerator . ∗ ; import j a v a . i o . ∗ ; 10 import j a v a . s q l . ∗ ; import j a v a . u t i l . ∗ ; 12 import p s i m j a v a . ∗ ; import j a v a . u t i l . c o n c u r r e n t . TimeUnit ; 14 import umontreal . i r o . l e c u y e r . p r o b d i s t . P o i s s o n D i s t ; import umontreal . i r o . l e c u y e r . r andv ar . ∗ ; 16 import umontreal . i r o . l e c u y e r . rng . ∗ ; import umontreal . i r o . l e c u y e r . rng . RandomStream ; 18 /∗ ∗ 20 ∗ ∗ @author J e f f r e y 22 ∗/ public c l a s s G a t e A s s i g n m e n t S i m u l a t i o n extends p s i m j a v a . P r o c e s s { 24 public s t a t i c A r r i v a l s g e n A i r p l a n e ; 26 public s t a t i c G a t e A s s i g n m e n t S i m u l a t i o n g a t e A s s i g n m e n t S i m u l a t i o n ; public s t a t i c S i m u l a t i o n sim ; // n e c e s s a r y t o s t a r t t h e s i m u l a t i o n 141 28 30 32 34 36 38 40 42 44 46 48 50 public s t a t i c GateArray g a t e A r r a y ; public s t a t i c Turn [ ] turnArray ; private s t a t i c TimeUnit s i m u l a t i o n G r a n u l a r i t y = TimeUnit .MINUTES; // i t makes s i m u l a t i o n G r a n u l a r i t y f l e x i b l e private s t a t i c i n t s i m u l a t i o n P e r i o d I n H o u r s = 4 8 ; public s t a t i c i n t s i m u l a t i o n P e r i o d I n G r a n u l a r i t y = ( int ) g e t S i m u l a t i o n G r a n u l a r i t y ( ) . convert ( simulationPeriodInHours , TimeUnit .HOURS) ; private s t a t i c i n t n u m b e r O f R e p l i c a t i o n s = 1 ; public s t a t i c RandomStream uniformStreamForWheelOnDev = new MRG32k3a ( ) ; public s t a t i c RandomVariateGen wheelOnDeviation = new NormalGen ( uniformStreamForWheelOnDev , 0 , 1 8 ) ; // i n minu tes public s t a t i c RandomStream uniformStreamForGroundDev = new MRG32k3a ( ) ; public s t a t i c RandomVariateGen g r o u n d D e v i a t i o n = new WeibullGen ( uniformStreamForGroundDev , 1 . 6 , ( double ) 1 / 8 0 8 , −724.432) ; // i n s e c o n d s : mean 0 ; s t d : 4 5 3 . 5 8 public s t a t i c P r i n t W r i t e r t r a c e f ; public s t a t i c P r i n t W r i t e r s t a t f ; public s t a t i c boolean messageFla g = f a l s e ; public s t a t i c R e p l i c a t i o n S t a t i s t i c s [ ] s t a t i s t i c s A r r a y = new R e p l i c a t i o n S t a t i s t i c s [ numberOfReplications ] ; public s t a t i c S t r i n g turnArrayOutput ; public s t a t i c i n t maxWaitForOriginal = ( in t ) g e t S i m u l a t i o n G r a n u l a r i t y ( ) . c o n v e r t ( 0 , TimeUnit .MINUTES) ; public s t a t i c i n t maxWaitForAlternative = ( in t ) g e t S i m u l a t i o n G r a n u l a r i t y ( ) . c o n v e r t ( 0 , TimeUnit .MINUTES) ; public s t a t i c PenaltyBox penaltyBox ; public s t a t i c i n t g a t e H o l d T h r e s h o l d = ( in t ) g e t S i m u l a t i o n G r a n u l a r i t y ( ) . c o n v e r t ( 0 , TimeUnit .MINUTES) ; public s t a t i c f i n a l S t r i n g s i m u l a t e d A i r p o r t C o d e = ”CANON” ; public s t a t i c f i n a l S t r i n g experimentMode = ”DOMN” ; //DOMN: d i s r u p t i o n one −f a c t o r −at−a−time , m i t i g a t i o n none ; DOMF: d i s r u p t i o n one−f a c t o r −at−a− time , m i t i g a t i o n f a c t o r i a l . 52 54 public s t a t i c TimeUnit g e t S i m u l a t i o n G r a n u l a r i t y ( ) { return s i m u l a t i o n G r a n u l a r i t y ; } 56 58 public G a t e A s s i g n m e n t S i m u l a t i o n ( S t r i n g pname ) { super ( pname ) ; } 60 62 64 66 68 70 72 public s t a t i c void main ( S t r i n g [ ] a r g s ) { S t r i n g t r a c e f i l e = ” gateAssignmentT . t x t ” ; S t r i n g s t a t f i l e = ” gateAssignmentS . t x t ” ; sim = new S i m u l a t i o n ( ” Gate Assignment S i m u l a t i o n ” ) ; Simulation . s e t t r a c e f ( t r a c e f i l e ) ; Simulation . s e t s t a t f ( s t a t f i l e ) ; t r a c e f = Simulation . g e t t r a c e f i l e () ; s t a t f = Simulation . g e t s t a t f i l e () ; Simulation . s e t r e p o r t f ( false ) ; g a t e A s s i g n m e n t S i m u l a t i o n = new Ga t e A s s i g n m e n t S i m u l a t i o n ( ” Gate Assignment S i m u l a t i o n ” ) ; gateAssignmentSimulation . s t a r t () ; } 142 74 76 78 80 82 84 86 88 90 92 94 96 98 // 100 102 // 104 106 108 110 112 public void Main body ( ) { System . out . p r i n t l n ( ” S i m u l a t i o n g r a n u l a r i t y i s i n ” + getSimulationGranularity () . toString () ) ; System . out . p r i n t l n ( ” S i m u l a t i o n p e r i o d i s ” + s i m u l a t i o n P e r i o d I n H o u r s + ” hours . ” ) ; System . out . p r i n t l n ( ” S i m u l a t i o n p e r i o d i s ” + simulationPeriodInGranularity + ” ” + getSimulationGranularity () + ” . ”) ; LineNumberReader inputStream = null ; P r i n t W r i t e r outputStream = null ; try { String line ; Scanner s = null ; inputStream = new LineNumberReader (new B u f f e r e d R e a d e r (new F i l e R e a d e r (new F i l e ( ” i n p u t P a r a m e t e r s ” + s i m u l a t e d A i r p o r t C o d e + ” ” + experimentMode + ” . t x t ” ) ) ) ) ; outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( ” e x p a l l s t a t i s t i c s . txt ”) ) ; char s e p a r a t o r = ’ \ t ’ ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . out . p r i n t l n ( ” E r r o r i n c l a s s ” + t h i s . g e t C l a s s ( ) . getName () ) ; System . e x i t ( −1) ; } outputStream . p r i n t l n ( l i n e ) ; l i n e = inputStream . r e a d L i n e ( ) ; // s k i p l i n e 1 ( t h e 2nd l i n e ) outputStream . p r i n t l n ( l i n e + s e p a r a t o r + ”numRep” + s e p a r a t o r + ” sumDailyDelay ” + s e p a r a t o r + ” sumSquareDailyDelay ” ); while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { i f a f i l e has n l i n e s , l i n e number s t a r t s from l i n e 0 and ends a t l i n e n ( t h e ( n+1) t h l i n e ) i n t experimentNo = inputStream . getLineNumber ( ) −2; System . out . p r i n t l n ( ” Experiment number : ” + experimentNo ) ; s = new Scanner ( l i n e ) ; s . u s e D e l i m i t e r ( ” , \ \ s ∗”) ; // f o r comma s e p a r a t e d t o k e n s S t r i n g par7 = s . next ( ) ; // Impacted c a r r i e r ( s ) par7 = par7 . r e p l a c e ( ” \” ” , ” ” ) ; f i n a l double par1 = s . nextDouble ( ) ; // S t a r t hour f i n a l double par2 = s . nextDouble ( ) ; // Duration ( number o f hours ) f i n a l double par3 = s . nextDouble ( ) ; // Average l a n d i n g d e l a y i n min ; s h i f t e d mean o f l a n d i n g time d e v i a t i o n f i n a l double par4 = s . nextDouble ( ) ; // Gate s e r v i c e time extension rate f i n a l double par5 = s . nextDouble ( ) ; // F r a c t i o n o f r e g u l a r turns converted to ending turns f i n a l double par6 = s . nextDouble ( ) ; // U n a v a i l a b l e g a t e fraction f i n a l double par9 = s . nextDouble ( ) ; // New g a t e c a p a c i t y fraction f i n a l double par10 = s . nextDouble ( ) ; // Common g a t e f r a c t i o n 143 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 f i n a l double par11 = s . nextDouble ( ) ; // F r a c t i o n o f s e l f − docking gates f i n a l double par8 = s . nextDouble ( ) ; // Ending t u r n s p a r k e d o f f −t e r m i n a l as a f r a c t i o n o f g a t e c a p a c i t y S t r i n g par12 = s . next ( ) ; // Common g a t e c a r r i e r s par12 = par12 . r e p l a c e ( ” \” ” , ” ” ) ; f o r ( i n t r e p l i c a t i o n N o = 1 ; r e p l i c a t i o n N o <= n u m b e r O f R e p l i c a t i o n s ; r e p l i c a t i o n N o++ ) { t r a c e f . p r i n t l n ( ” R e p l i c a t i o n number ” + r e p l i c a t i o n N o ) ; System . out . p r i n t l n ( ” R e p l i c a t i o n number ” + r e p l i c a t i o n N o ) ; g a t e A r r a y = new GateArray ( ” g a t e C a p a c i t y ” + s i m u l a t e d A i r p o r t C o d e + ” . t x t ” , par9 ,1.0 −(1.0 − par11 ) ∗ par6 , par10 , par12 , par7 , par8 ) ; // turn input preparation F i l e t u r n I n p u t F i l e = new F i l e ( ” b a s e l i n e A g g r e g a t e d T u r n s ” + simulatedAirportCode + ” . csv ” ) ; // s t e p 1 . c h e c k e x i s t a n c e o f t u r n I n p u t F i l e i f ( ! turnInputFile . exists () ) { System . out . p r i n t l n ( ” E r r o r ! The b a s e l i n e A g g r e g a t e d T u r n s i n p u t f i l e d o e s not e x i s t . ” ) ; System . e x i t ( −1) ; } // s t e p 2 . c o n s t r u c t AggregatedOneDayTurns u s i n g turnInputFile AggregatedOneDayTurns aggregatedOneDayTurns = new AggregatedOneDayTurns ( t u r n I n p u t F i l e ) ; System . out . p r i n t l n ( ” s i z e o f aggregatedOneDayTurns : ” + aggregatedOneDayTurns . s i z e ( ) ) ; // 3 . c o n s t r u c t oneDayTurns u s i n g aggregatedOneDayTurns OneDayTurns oneDayTurns = new OneDayTurns ( aggregatedOneDayTurns ) ; System . out . p r i n t l n ( ” s i z e o f oneDayTurns : ” + oneDayTurns . size () ) ; // 4 . o u t p u t oneDayTurns t o a f i l e OneDayDisruption oneDayDisruption = new OneDayDisruption ( ) ; S t r i n g [ ] i m p a c t e d C a r r i e r A r r a y = par7 . s p l i t ( ” , ” ) ; f o r ( S t r i n g item : i m p a c t e d C a r r i e r A r r a y ) { on eDa yDisr uption . add (new O n e H o u r C a r r i e r D i s r u p t i o n ( ( in t ) par1 , ( in t ) ( par1 + par2 ) , item , par5 , par4 , 0, 0) ) ; } AggregatedOneDayTurns disruptedAggregatedOneDayTurns = aggregatedOneDayTurns ; disruptedAggregatedOneDayTurns . t o F i l e (new F i l e ( ” e x p ” + experimentNo + ” a g g r e g a t e d O n e D a y T u r n s B e f o r e D i s r u p t i o n . csv ” ) ) ; disruptedAggregatedOneDayTurns . a d d D i s r u p t i o n ( on eDayD isruptio n ) ; 144 152 154 156 158 160 162 164 166 // 168 // disruptedAggregatedOneDayTurns . t o F i l e (new F i l e ( ” e x p ” + experimentNo + ” a g g r e g a t e d O n e D a y T u r n s A f t e r D i s r u p t i o n . csv ” ) ) ; OneDayTurns disruptedOneDayTurns = new OneDayTurns ( disruptedAggregatedOneDayTurns ) ; disruptedOneDayTurns . t o F i l e (new F i l e ( ” e x p ” + experimentNo + ” disruptedOneDayTurns . c s v ” ) ) ; S t r i n g r e p l i c a t i o n S t a t i s t i c s O u t p u t = ” e x p ” + experimentNo + ” r e p l i c a t i o n S t a t i s t i c s O u t p u t . csv ” ; R e p l i c a t i o n S t a t i s t i c s . printHeader ( replicationStatisticsOutput ) ; t u r n A r r a y I n i t i a l i z a t i o n (new F i l e ( ” e x p ” + experimentNo + ” disruptedOneDayTurns . c s v ” ) , par1 , par2 , par3 , par7 ) ; penaltyBox = new PenaltyBox ( ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” penaltyBox c r e a t e d a t ” + StaticSync . get clock () ) ; } g e n A i r p l a n e = new A r r i v a l s ( ” A r r i v a l s ” ) ; g e n A i r p l a n e . s t a r t ( ) ; // s t a r t g e n e r a t e a i r p l a n e once simulation starts gateArray . s t a r t A l l G a t e s ( ) ; Thread . y i e l d ( ) ; // n o t u n d e r s t o o d System . out . p r i n t l n ( ” S i m u l a t i o n s t a r t s a t ” + S t a t i c S y n c . get clock () ) ; sim . s t a r t s i m ( s i m u l a t i o n P e r i o d I n G r a n u l a r i t y ) ; // l e t t h e simulation start i f ( G a t e A s s i g n m e n t S i m u l a t i o n . m e s s a g e F l a g == t r u e ) { System . out . p r i n t l n ( ” S i m u l a t i o n ends a t c l o c k : ” + StaticSync . get clock () ) ; } 170 172 174 176 178 180 turnArrayOutput = ” e x p ” + experimentNo + ” turnArrayOutput ” + r e p l i c a t i o n N o + ” . txt ” ; Turn . p r i n t H e a d e r ( turnArrayOutput ) ; f o r ( Turn item : turnArray ) { item . p r i n t T u r n ( turnArrayOutput ) ; } s t a t i s t i c s A r r a y [ r e p l i c a t i o n N o −1] = new ReplicationStatistics () ; s t a t i s t i c s A r r a y [ replicationNo −1]. c o l l e c t S t a t i s t i c s ( turnArray ) ; s t a t i s t i c s A r r a y [ replicationNo −1]. p r i n t S t a t i t i c s ( replicationStatisticsOutput , replicationNo ) ; StaticSync . r e s e t c l o c k () ; uniformStreamForWheelOnDev . r e s e t N e x t S u b s t r e a m ( ) ; uniformStreamForGroundDev . r e s e t N e x t S u b s t r e a m ( ) ; 182 184 186 188 } // w r i t e t h i s e x p e r i m e n t r e s u l t s t o a f i l e double sumDailyDelay = 0 ; double sumSquareDailyDelay = 0 ; f o r ( i n t i = 0 ; i < s t a t i s t i c s A r r a y . l e n g t h ; i ++) { sumDailyDelay += s t a t i s t i c s A r r a y [ i ] . g e t G a t e H o l d T o t a l ( ) ; sumSquareDailyDelay += Math . pow ( s t a t i s t i c s A r r a y [ i ] . getGateHoldTotal ( ) ,2) ; 145 } outputStream . p r i n t l n ( l i n e + separator + st ati sti cs Arr ay . length + s e p a r a t o r + sumDailyDelay + s e p a r a t o r + sumSquareDailyDelay ) ; 190 192 194 } i f ( inputStream != null ) { inputStream . c l o s e ( ) ; } } catch ( E x c e p t i o n e ) { System . out . p r i n t l n ( ” E r r o r : ” + e . t o S t r i n g ( ) + e . getMessa ge ( ) ) ; System . e x i t ( −1) ; } finally { i f ( i n p u t S t r e a m != n u l l ) { inputStream . c l o s e () ; } // do n o t know why t h i s b l o c k d o e s n o t p a s s i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } System . e x i t ( 0 ) ; 196 198 200 202 // 204 // // 206 208 210 } 212 214 216 218 220 222 224 226 228 230 232 234 236 238 240 public s t a t i c void t u r n A r r a y I n i t i a l i z a t i o n ( F i l e fileName , double s t a r t H o u r , double d u r a t i o n , double averageLandingDelayMin , S t r i n g i m p a c t e d C a r r i e r s ) throws IOException { String [ ] impactedCarriersArray = impactedCarriers . s p l i t ( ” , ” ) ; L i s t <S t r i n g > i m p a c t e d C a r r i e r L i s t ; i m p a c t e d C a r r i e r L i s t = Arrays . a s L i s t ( i m p a c t e d C a r r i e r s A r r a y ) ; B u f f e r e d R e a d e r inputStream = null ; String line ; Scanner s = null ; try { // r e a d f i l e f o r t h e f i r s t time t o c o u n t number o f t u r n s inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r ( f i l e N a m e ) ) ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . e r r . p r i n t l n ( ” E r r o r ! Empty f i l e ” ) ; System . e x i t ( −1) ; } i n t numTurns = 0 ; while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { numTurns++; } turnArray = new Turn [ numTurns ] ; inputStream . c l o s e ( ) ; // r e a d f i l e f o r t h e s e c o n d time t o r e a d t u r n s inputStream = new B u f f e r e d R e a d e r (new F i l e R e a d e r ( f i l e N a m e ) ) ; i f ( ( l i n e = inputStream . r e a d L i n e ( ) ) == null ) { // a l s o s k i p t h e header l i n e System . e r r . p r i n t l n ( ” E r r o r ! Empty f i l e ” ) ; System . e x i t ( −1) ; } i n t i n d e x =0; while ( ( l i n e = inputStream . r e a d L i n e ( ) ) != null ) { s = new Scanner ( l i n e ) ; 146 242 244 246 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 278 // 280 // 282 284 286 s . u s e D e l i m i t e r ( ” ,\\ s ∗” ) ; // r e a d 5 v a l u e s S t r i n g carrierIATACode = s . next ( ) ; S t r i n g turnType = s . next ( ) ; i n t actuaArrInMin = s . n e x t I n t ( ) ; i n t actDepInMin = s . n e x t I n t ( ) ; i n t gateOccTimeInMin = s . n e x t I n t ( ) ; // a d d j u s t 2−3 o f t h e 5 v a l u e s b a s e d on t u r n t y p e i f ( turnType . e q u a l s ( ” r e g u l a r T u r n ” ) ) { i f ( actDepInMin !=−1) { System . e r r . p r i n t l n ( ” E r r o r i n i n p u t f i l e ! actDepInMin o f r e g u l a r T u r n i s not −1” ) ; } i f ( actuaArrInMin >= s t a r t H o u r ∗ 60 && actuaArrInMin < ( s t a r t H o u r + d u r a t i o n ) ∗60 && i m p a c t e d C a r r i e r L i s t . c o n t a i n s ( carrierIATACode ) ) { actuaArrInMin+= averageLandingDelayMin ; } actDepInMin = actuaArrInMin + gateOccTimeInMin ; } e l s e i f ( turnType . e q u a l s ( ” endingTurn ” ) ) { i f ( actDepInMin != −1 | | gateOccTimeInMin != −1) { System . e r r . p r i n t l n ( ” E r r o r i n i n p u t f i l e ! actDepInMin o r gateOccTimeInMin o f r e g u l a r T u r n i s not −1” ) ; } actDepInMin = 2 7 ∗ 6 0 ; gateOccTimeInMin = actDepInMin − actuaArrInMin ; f o r ( GateCapacityofOneCarrierGroup aGroup : g a t e A r r a y . getGateCapacityByCarrier ( ) ) { i f ( aGroup . g e t E l i g i b l e C a r r i e r L i s t ( ) . s i z e ( ) == 1 && aGroup . g e t E l i g i b l e C a r r i e r L i s t ( ) . c o n t a i n s ( carrierIATACode ) && aGroup . getNumOffTerminalOvernightParkings ( ) > 0) { gateOccTimeInMin = 3 0 ; actDepInMin = actuaArrInMin + gateOccTimeInMin ; aGroup . setN umOffTerminalOvernightParkings ( aGroup . getNumOffTerminalOvernightParkings ( ) −1) ; } } } e l s e i f ( turnType . e q u a l s ( ” s t a r t i n g T u r n ” ) ) { i f ( actuaArrInMin != −1) { System . e r r . p r i n t l n ( ” E r r o r i n i n p u t f i l e ! actuaArrInMin o f r e g u l a r T u r n i s not −1” ) ; } gateOccTimeInMin = 3 0 ; // tow i n actuaArrInMin = actDepInMin − gateOccTimeInMin ; actuaArrInMin = 3 ∗ 6 0 ; /// no tow gateOccTimeInMin = actDepInMin − actuaArrInMin ; } else { System . e r r . p r i n t l n ( ” E r r o r i n i n p u t f i l e ! turnType i s not recognized ”) ; } gateOccTimeInMin = actDepInMin − actuaArrInMin ; // add new e l e m e n t turnArray [ i n d e x ] = new Turn ( index + 1 147 288 , gateArray . g e t F i r s t ( ) , carrierIATACode , ”B737” ,111 ,222 , ” Origin ” , ” ViaAirport ” , ” Dest ” , actuaArrInMin ,0 , actuaArrInMin , actuaArrInMin , actDepInMin , actDepInMin ); 290 292 294 296 298 300 302 i n d e x ++; } } finally { i f ( inputStream != null ) { inputStream . c l o s e ( ) ; } } s . close () ; 304 306 308 310 } 312 314 316 318 320 322 324 326 328 330 332 334 /∗ ∗ The f o l l o w i n g f u n c t i o n i s c a l l e d b e f o r e c r e a t i n g a i r c r a f t i n c l a s s Arrivals ∗ so t h a t o l d e r a i r c r a f t i s c r e a t e d e a r l i e r . ∗/ public s t a t i c void turnArraySortByWheelOnActualTime ( ) { i n t numberOfTurns = turnArray . l e n g t h ; f o r ( i n t i =0; i <numberOfTurns ; i ++) { f o r ( i n t j =0; j <numberOfTurns−i −1; j ++) i f ( turnArray [ j ] . getWheelsOnActualTime ( )>turnArray [ j + 1 ] . getWheelsOnActualTime ( ) ) { Turn tempTurn = turnArray [ j ] ; turnArray [ j ] = turnArray [ j + 1 ] ; turnArray [ j +1] = tempTurn ; } } } public s t a t i c void g a t e C h a n g e H e u r i s t i c ( Turn t h i s T u r n ) { t h i s T u r n . s e t G a t e C h a n g e H e u r i s t i c T i m e ( ( in t ) S t a t i c S y n c . g e t c l o c k ( ) ) ; i f ( w i l l O r i g i n a l G a t e B e A v a i l a b l e ( t h i s T u r n ) == f a l s e ) { findAlternativeGate ( thisTurn ) ; } } 336 338 340 public s t a t i c boolean w i l l O r i g i n a l G a t e B e A v a i l a b l e ( Turn t h i s T u r n ) { i f ( ! thisTurn . getAssignedGate ( ) . isCarrierAccepted ( thisTurn . g e t C a r r i e r () ) ){ i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name ( ) 148 + ” ’ s o r i g i n a l gate ” + t h i s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” w i l l not be a v a i l a b l e due t o c a r r i e r i n c o m p a t i b i l i t y , c he ck ed a t ” + StaticSync . get clock () ) ; 342 344 } return f a l s e ; 346 } f o r ( Turn item : turnArray ) { i f ( item . g e t A s s i g n e d G a t e ( ) == t h i s T u r n . g e t A s s i g n e d G a t e ( ) && item != t h i s T u r n // or item . g e t T u r n I n d e x ( ) != t h i s T u r n . getTurnIndex () && ( item . g e t T u r n S t a t u s ( ) == TurnStatus .INPENALTYBOX | | item . g e t T u r n S t a t u s ( ) == TurnStatus . TAXIINGINFROMPENALTYBOXTOGATE | | ( item . g e t T u r n S t a t u s ( ) == TurnStatus .ATGATE && t h i s T u r n . getGateInEstimatedTime ( ) + maxWaitForOriginal < item . getGateOutEstimatedTime ( ) ) ) ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name () + ” ’ s o r i g i n a l gate ” + t h i s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” w i l l not be a v a i l a b l e , ch e ck ed a t ” + StaticSync . get clock () ) ; } return f a l s e ; } } i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name ( ) + ” ’ s o r i g i n a l gate ” + t h i s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” w i l l be a v a i l a b l e , c he ck e d a t ” + StaticSync . get clock () ) ; } return true ; 348 350 352 354 356 358 360 362 364 366 368 370 372 374 } 376 public s t a t i c void f i n d A l t e r n a t i v e G a t e ( Turn t h i s T u r n ) { f o r ( I t e r a t o r <Gate> i t e r = g a t e A r r a y . i t e r a t o r ( ) ; i t e r . hasNext ( ) ; ) { Gate item = i t e r . next ( ) ; i f ( item != t h i s T u r n . g e t A s s i g n e d G a t e ( ) ) { i f ( w i l l A l t e r n a t i v e G a t e B e A v a i l a b l e ( thisTurn , item ) == true ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” Gate change f o r ” + t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name ( ) + ” from ” + t h i s T u r n . g e t A s s i g n e d G a t e ( ) . get name ( ) + ” t o ” + item . get name ( ) + ” at ” + StaticSync . get clock () ) ; } t h i s T u r n . s e t A s s i g n e d G a t e ( item ) ; 378 380 382 384 386 388 149 390 return ; } } } i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” A l t e r n a t i v e G a t e not found f o r ” + t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name ( ) + ” ( assigned to ” + thisTurn . getAssignedGate ( ) . get name ( ) + ” ) at ” + StaticSync . get clock () ) ; } return ; 392 394 396 398 400 402 } 404 public s t a t i c boolean w i l l A l t e r n a t i v e G a t e B e A v a i l a b l e ( Turn thisTurn , Gate alternativeGate ) { i f ( ! alternativeGate . isCarrierAccepted ( thisTurn . g e t C a r r i e r ( ) ) ) { return f a l s e ; } Turn p r e v i o u s T u r n = null ; Turn nextTurn = null ; i f ( t h i s T u r n . g e t A s s i g n e d G a t e ( ) == a l t e r n a t i v e G a t e ) { System . out . p r i n t l n ( ” E r r o r i n G a t e A s s i g n m e n t S i m u l a t i o n ” + ” . w i l l A l t e r n a t i v e G a t e B e A v a i l a b l e ( Turn thisTurn , Gate alternativeGate ) ! ” + a l t e r n a t i v e G a t e . get name ( ) + ” i s the o r i g i n a l gate of ” + t h i s T u r n . g e t I t s A i r p l a n e ( ) . get name ( ) + ” , not a l t e r n a t i v e g a t e . ” ) ; System . e x i t ( 1 ) ; } f o r ( Turn item : turnArray ) { i f ( item . g e t A s s i g n e d G a t e ( ) == a l t e r n a t i v e G a t e ) { i f ( item . g e t T u r n S t a t u s ( ) == TurnStatus .INPENALTYBOX) { return f a l s e ; // don ’ t a s s i g n t o a g a t e some a i r p l a n e i s waiting for . } i f ( item . getGateInEstimatedTime ( ) < t h i s T u r n . getGateInEstimatedTime ( ) ) { i f ( p r e v i o u s T u r n == null | | p r e v i o u s T u r n . getGateInEstimatedTime ( ) < item . getGateInEstimatedTime ( ) ) { p r e v i o u s T u r n = item ; } } else { i f ( nextTurn == null | | item . getGateInEstimatedTime ( ) < nextTurn . getGateInEstimatedTime ( ) ) { nextTurn = item ; } } } } i f ( ( p r e v i o u s T u r n == null | | p r e v i o u s T u r n . getGateOutEstimatedTime ( ) < t h i s T u r n . getGateInEstimatedTime ( ) + maxWaitForAlternative ) 406 408 410 412 414 416 418 420 422 424 426 428 430 432 434 436 150 438 440 442 444 } } && ( nextTurn == null | | t h i s T u r n . getGateOutEstimatedTime ( ) < nextTurn . getGateInEstimatedTime ( ) ) ) { return true ; } else { return f a l s e ; } src/gateassignmentsimulation/GateAssignmentSimulation.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ 2 6 package g a t e a s s i g n m e n t s i m u l a t i o n ; 8 import j a v a . u t i l . Arrays ; import j a v a . u t i l . L i s t ; 10 /∗ ∗ 12 ∗ ∗ @author J i a n f e n g 14 ∗/ public c l a s s GateCapacityofOneCarrierGroup { 16 private S t r i n g e l i g i b l e C a r r i e r L i s t S t r i n g ; 18 private L i s t <S t r i n g > e l i g i b l e C a r r i e r L i s t ; private i n t numGates ; 20 private i n t numOffTerminalOvernightParkings ; 22 24 26 28 30 32 34 36 38 40 public GateCapacityofOneCarrierGroup ( S t r i n g e l i g i b l e C a r r i e r L i s t S t r i n g , i n t numGates ) { this . e l i g i b l e C a r r i e r L i s t S t r i n g = e l i g i b l e C a r r i e r L i s t S t r i n g ; String [ ] eligibleCarrierArray = e li g i bl e Ca r r ie r L is t St r i ng . s p l i t (” ,”) ; e l i g i b l e C a r r i e r L i s t = Arrays . a s L i s t ( e l i g i b l e C a r r i e r A r r a y ) ; t h i s . numGates = numGates ; t h i s . numOffTerminalOvernightParkings = 0 ; } public GateCapacityofOneCarrierGroup ( S t r i n g e l i g i b l e C a r r i e r L i s t S t r i n g , i n t numGates , double offTerminalOvernightParkingCapacityAsOfGateCapacity ) { this . e l i g i b l e C a r r i e r L i s t S t r i n g = e l i g i b l e C a r r i e r L i s t S t r i n g ; String [ ] eligibleCarrierArray = e li g i bl e Ca r r ie r L is t St r i ng . s p l i t (” ,”) ; e l i g i b l e C a r r i e r L i s t = Arrays . a s L i s t ( e l i g i b l e C a r r i e r A r r a y ) ; t h i s . numGates = numGates ; t h i s . numOffTerminalOvernightParkings = ( in t ) Math . round ( numGates ∗ offTerminalOvernightParkingCapacityAsOfGateCapacity ) ; } /∗ ∗ ∗ @return t h e e l i g i b l e C a r r i e r L i s t ∗/ public L i s t <S t r i n g > g e t E l i g i b l e C a r r i e r L i s t ( ) { 151 42 return e l i g i b l e C a r r i e r L i s t ; } 44 46 48 50 52 54 56 /∗ ∗ ∗ @param e l i g i b l e C a r r i e r L i s t t h e e l i g i b l e C a r r i e r L i s t t o s e t ∗/ public void s e t E l i g i b l e C a r r i e r L i s t ( L i s t <S t r i n g > e l i g i b l e C a r r i e r L i s t ) { this . e l i g i b l e C a r r i e r L i s t = e l i g i b l e C a r r i e r L i s t ; } /∗ ∗ ∗ @return t h e numGates ∗/ public i n t getNumGates ( ) { return numGates ; } 58 60 62 64 66 68 70 /∗ ∗ ∗ @param numGates t h e numGates t o s e t ∗/ public void setNumGates ( i n t numGates ) { t h i s . numGates = numGates ; } /∗ ∗ ∗ @return t h e e l i g i b l e C a r r i e r L i s t S t r i n g ∗/ public S t r i n g g e t E l i g i b l e C a r r i e r L i s t S t r i n g ( ) { return e l i g i b l e C a r r i e r L i s t S t r i n g ; } 72 74 76 78 80 82 84 /∗ ∗ ∗ @param e l i g i b l e C a r r i e r L i s t S t r i n g t h e e l i g i b l e C a r r i e r L i s t S t r i n g t o s e t ∗/ public void s e t E l i g i b l e C a r r i e r L i s t S t r i n g ( S t r i n g e l i g i b l e C a r r i e r L i s t S t r i n g ) { this . e l i g i b l e C a r r i e r L i s t S t r i n g = e l i g i b l e C a r r i e r L i s t S t r i n g ; } /∗ ∗ ∗ @return t h e n u m O f f T e r m i n a l O v e r n i g h t P a r k i n g s ∗/ public i n t getNumOffTerminalOvernightParkings ( ) { return numOffTerminalOvernightParkings ; } 86 88 90 92 /∗ ∗ ∗ @param n u m O f f T e r m i n a l O v e r n i g h t P a r k i n g s t h e numOffTerminalOvernightParkings to s e t ∗/ public void se tN u mO f f Te rminalOv ern ightParkings ( i n t numOffTerminalOvernightParkings ) { t h i s . numOffTerminalOvernightParkings = numOffTerminalOvernightParkings ; } 152 94 } src/gateassignmentsimulation/GateCapacityofOneCarrierGroup.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ package g a t e a s s i g n m e n t s i m u l a t i o n ; 6 import j a v a . u t i l . I t e r a t o r ; 8 import j a v a . u t i l . L i n k e d L i s t ; import p s i m j a v a . S t a t i c S y n c ; 10 /∗ ∗ 12 ∗ ∗ @author J e f f r e y 14 ∗/ public c l a s s PenaltyBox { 16 private L i n k e d L i s t <A i r p l a n e > a i r p l a n e L i s t = new L i n k e d L i s t ( ) ; 18 public boolean add ( A i r p l a n e a i r p l a n e ) { 20 return a i r p l a n e L i s t . add ( a i r p l a n e ) ; } 22 public void r e c e i v e I d l e S i g n a l ( Gate g a t e ) { 24 i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” penaltyBox r e c e i v e s i d l e s i g n a l from ” 26 + g a t e . get name ( ) + ” at ” + StaticSync . g e t c l o c k ( ) ) ; 28 } I t e r a t o r <A i r p l a n e > i t e r = a i r p l a n e L i s t . i t e r a t o r ( ) ; 30 A i r p l a n e temp ; while ( i t e r . hasNext ( ) ) { 32 temp = i t e r . ne xt ( ) ; i f ( temp . get name ( ) . c o n t a i n s ( ” k i l l e r ” ) ) { 34 i f ( temp . g e t I t s T u r n ( ) . g e t A s s i g n e d G a t e ( ) == g a t e ) { a i r p l a n e L i s t . remove ( temp ) ; 36 g a t e . r e a c t i v a t e ( temp ) ; return ; 38 } else { continue ; 40 } } 42 i f ( ! g a t e . i s C a r r i e r A c c e p t e d ( temp . g e t I t s T u r n ( ) . g e t C a r r i e r ( ) ) ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { 44 System . out . p r i n t l n ( temp . get name ( ) + ” i n p e n a l t y box can not go t o open g a t e ” 46 + g a t e . get name ( ) + ” due t o c a r r i e r i n c o m p a t i b i l i t y , ch ec ke d a t ” 48 + StaticSync . get clock () ) ; } 50 continue ; } 2 153 52 // 54 56 58 60 // 62 64 // 66 temp . g e t I t s T u r n ( ) . s e t A s s i g n e d G a t e ( g a t e ) ; i f ( temp . g e t I t s T u r n ( ) . g e t A s s i g n e d G a t e ( ) == g a t e ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” penaltyBox r e l e a s e s ” + temp . get name ( ) + ” t o ” + g a t e . get name ( ) + ” at ” + StaticSync . g e t c l o c k ( ) ) ; } a i r p l a n e L i s t . remove ( temp ) ; g a t e . getGateQueue ( ) . i n t o ( temp ) ; // a i r p l a n e w i l l e n t e r t h e GateQueue by i t s e l f . g a t e . r e a c t i v a t e ( temp ) ; return ; } } } 68 70 72 } public I t e r a t o r <A i r p l a n e > i t e r a t o r ( ) { return a i r p l a n e L i s t . i t e r a t o r ( ) ; } src/gateassignmentsimulation/PenaltyBox.java /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . 4 ∗/ 2 6 package g a t e a s s i g n m e n t s i m u l a t i o n ; 8 import j a v a . i o . F i l e ; import j a v a . i o . F i l e W r i t e r ; 10 import j a v a . i o . IOException ; import j a v a . i o . P r i n t W r i t e r ; 12 /∗ ∗ 14 ∗ ∗ @author J e f f r e y 16 ∗/ public c l a s s R e p l i c a t i o n S t a t i s t i c s { 18 private i n t taxiInOverUnderCount = 0 ; 20 private i n t t a x i I n O v e r U n d e r T o t a l = 0 ; private double taxiInOverUnderAverage = 0 ; 22 private i n t gateHoldCount = 0 ; private i n t g a t e H o l d T o t a l = 0 ; 24 private double gateHoldAverage = 0 ; private i n t gateInOverUnderCount = 0 ; 26 private i n t gateInOverUnderTotal = 0 ; private double gateInOverUnderAverage = 0 ; 28 private i n t gateOutOverUnderCount = 0 ; private i n t gateOutOverUnderTotal = 0 ; 30 private double gateOutOverUnderAverage = 0 ; 154 32 34 36 38 40 42 44 46 48 50 52 54 56 public void c o l l e c t S t a t i s t i c s ( Turn [ ] turnArray ) { f o r ( Turn item : turnArray ) { taxiInOverUnderCount++; t a x i I n O v e r U n d e r T o t a l += item . getTaxiInOverUnder ( ) ; i f ( item . i s G a t e H o l d F l a g ( ) == true ) { gateHoldCount++; s e t G a t e H o l d T o t a l ( g e t G a t e H o l d T o t a l ( ) + item . getGateHoldTime ( ) ) ; } gateInOverUnderCount++; gateInOverUnderTotal += item . getGateInOverUnder ( ) ; gateOutOverUnderCount++; gateOutOverUnderTotal += item . getGateOutOverUnder ( ) ; } i f ( taxiInOverUnderCount != 0 ) { taxiInOverUnderAverage = ( double ) t a x i I n O v e r U n d e r T o t a l / taxiInOverUnderCount ; } i f ( gateHoldCount != 0 ) { gateHoldAverage = ( double ) g e t G a t e H o l d T o t a l ( ) / gateHoldCount ; } i f ( gateInOverUnderCount != 0 ) { gateInOverUnderAverage = ( double ) gateInOverUnderTotal / gateInOverUnderCount ; } i f ( gateOutOverUnderCount != 0 ) { gateOutOverUnderAverage = ( double ) gateOutOverUnderTotal / gateOutOverUnderCount ; } } 58 60 62 64 66 68 70 72 74 76 78 80 82 public s t a t i c void p r i n t H e a d e r ( S t r i n g f i l e N a m e ) throws IOException { P r i n t W r i t e r outputStream = null ; try { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( f i l e N a m e ) ) ; outputStream . p r i n t l n ( ” r e p l i c a t i o n N o ” + ” , taxiInOverUnderCount ” + ” , taxiInOverUnderTotal ” + ” , taxiInOverUnderAverage ” + ” , gateHoldCount ” + ” , gateHoldTotal ” + ” , gateHoldAverage ” + ” , gateInOverUnderCount ” + ” , gateInOverUnderTotal ” + ” , gateInOverUnderAverage ” + ” , gateOutOverUnderCount ” + ” , gateOutOverUnderTotal ” + ” , gateOutOverUnderAverage ” ); } finally { i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } } 155 84 public void p r i n t S t a t i t i c s ( S t r i n g fileName , in t r e p l i c a t i o n N o ) throws IOException { P r i n t W r i t e r outputStream = null ; try { i f (new F i l e ( f i l e N a m e ) . e x i s t s ( ) == true ) { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( fileName , true ) ) ; } else { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( fileName , f a l s e ) ); } outputStream . p r i n t l n ( r e p l i c a t i o n N o + ” , ” + taxiInOverUnderCount + ” , ” + taxiInOverUnderTotal + ” , ” + taxiInOverUnderAverage + ” , ” + gateHoldCount + ” , ” + getGateHoldTotal ( ) + ” , ” + gateHoldAverage + ” , ” + gateInOverUnderCount + ” , ” + gateInOverUnderTotal + ” , ” + gateInOverUnderAverage + ” , ” + gateOutOverUnderCount + ” , ” + gateOutOverUnderTotal + ” , ” + gateOutOverUnderAverage 86 88 90 92 94 96 98 100 102 104 106 108 110 ); } finally { i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } 112 } 114 public i n t g e t G a t e H o l d T o t a l ( ) { return g a t e H o l d T o t a l ; } 116 118 120 } public void s e t G a t e H o l d T o t a l ( in t g a t e H o l d T o t a l ) { this . gateHoldTotal = gateHoldTotal ; } src/gateassignmentsimulation/ReplicationStatistics.java 1 /∗ ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates 3 ∗ and open t h e t e m p l a t e i n t h e e d i t o r . ∗/ 5 package g a t e a s s i g n m e n t s i m u l a t i o n ; 7 import j a v a . i o . F i l e ; 9 import j a v a . i o . F i l e W r i t e r ; import j a v a . i o . IOException ; 11 import j a v a . i o . P r i n t W r i t e r ; import j a v a . s q l . Time ; 156 13 import p s i m j a v a . S t a t i c S y n c ; 15 /∗ ∗ ∗ 17 ∗ @author J e f f r e y ∗/ 19 public c l a s s Turn{ 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 private i n t t u r n I n d e x ; private Gate a s s i g n e d G a t e ; // n o t e t h a t t y p e o f a s s i g n e d G a t e i s an o b j e c t Gate , i n s t e a d o f S t r i n g /∗ ∗ Type o f a s s i g n e G a t e may be changed t o a l i n k e d l i s t due t o t h e f a c t that ∗ t h e r e can be a s e r i e s o f g a t e c h a n g e s and t h e time t o change g a t e matters . ∗ So t i me and a s s i g n e d g a t e need t o be s t o r e d t o c a l c u l a t e g a t e change pe rf orm an c e . ∗/ private S t r i n g c a r r i e r ; private S t r i n g equipment ; private i n t a r r i v a l F l i g h t N u m b e r ; private i n t d e p a r t u r e F l i g h t N u m b e r ; private S t r i n g a r r i v a l O r i g i n a t i o n A i r p o r t ; private S t r i n g v i a A i r p o r t ; private S t r i n g d e p a r t u r e D e s t i n a t i o n A i r p o r t ; private i n t wheelsOnScheduledTime ; private i n t wheelsOnEstimatedTime ; private i n t wheelsOnActualTime ; private i n t wheelsOnOverUnder ; private boolean penaltyBoxHoldFlag ; private i n t penaltyBoxEntryTime ; private i n t penaltyBoxExitTime ; private i n t penaltyBoxHoldTime ; private i n t t a x i I n S c h e d u l e d T i m e ; private i n t t a x i I n E s t i m a t e d T i m e ; private i n t t a x i I n A c t u a l T i m e ; private i n t tax i In Ov e rUnder ; private boolean g a t e H o l d F l a g ; private i n t gateHoldTime ; private i n t g a t e I n S c h e d u l e d T i m e ; private i n t gateInEstimatedTime ; private i n t g a t e I n A c t u a lT im e ; private i n t gateInOverUnder ; private i n t groundScheduledTime ; private i n t groundEstimatedTime ; private i n t groundActualTime ; private i n t groundOverUnder ; private i n t gateOutScheduledTime ; private i n t gateOutEstimatedTime ; private i n t gateOutActualTime ; private i n t gateOutOverUnder ; private TurnStatus t u r n S t a t u s = TurnStatus .BEFORETOUCHDOWN; private A i r p l a n e i t s A i r p l a n e ; private i n t g a t e C h a n g e H e u r i s t i c T i m e ; s t a t i c private S t r i n g d e l i m i t e r = ” \ t ” ; 157 65 public Turn ( ) { } 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 // 99 // 101 103 105 107 109 111 113 115 117 119 public Turn ( i n t tu rn In dex , Gate a s s i g n e d G a t e , String carrier , S t r i n g equipment , int arrivalFlightNumber , i n t departureFlightNumber , String arrivalOriginationAirport , String viaAirport , String departureDestinationAirport , i n t wheelsOnActualTime , int taxiInScheduledTime , i n t gateInScheduledTime , i n t gateInActualTime , i n t gateOutScheduledTime , i n t gateOutActualTime ) { this . setTurnIndex ( turnIndex ) ; this . setAssignedGate ( assignedGate ) ; this . s e t C a r r i e r ( c a r r i e r ) ; t h i s . setEquipment ( equipment ) ; this . setArrivalFlightNumber ( arrivalFlightNumber ) ; this . setDepartureFlightNumber ( departureFlightNumber ) ; this . s e t A r r i v a l O r i g i n a t i o n A i r p o r t ( a r r i v a l O r i g i n a t i o n A i r p o r t ) ; this . setViaAirport ( viaAirport ) ; this . setDepartureDestinationAirport ( departureDestinationAirport ) ; t h i s . setWheelsOnActualTime ( wheelsOnActualTime ) ; this . setTaxiInScheduledTime ( taxiInScheduledTime ) ; this . setGateInScheduledTime ( gateInScheduledTime ) ; t h i s . setGateInActualTime ( gateInActualTime ) ; t h i s . setGateOutScheduledTime ( gateOutScheduledTime ) ; t h i s . setGateOutActualTime ( gateOutActualTime ) ; t h i s . setGroundActualTime ( gateOutActualTime − gateInAc tualTime ) ; i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( ” t u r n ” + t u r n I n d e x + ” created at ” + StaticSync . g e t c l o c k ( ) ) ; } } public Turn ( Gate a s s i g n e d G a t e ) { this . setAssignedGate ( assignedGate ) ; } public void touchDownRunway ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” t o u c h e s down runway a t ” + S t a t i c S y n c . g e t c l o c k ( ) ) ; } i f ( S t a t i c S y n c . g e t c l o c k ( ) != getWheelsOnActualTime ( ) ) { System . out . p r i n t l n ( ” E r r o r i n Turn . touchDownRunway ( ) ! ” + ” StaticSync . g e t c l o c k ( ) i s n ’ t equal to getWheelOnActualTime ( ) . ” ) ; } else { 158 setWheelsOnOverUnder ( getWheelsOnActualTime ( ) − getWheelsOnScheduledTime ( ) ) ; t h i s . setWheelsOnEstimatedTime ( t h i s . getWheelsOnActualTime ( ) ) ; t h i s . s e t T a x i I n E s t i m a t e d T i m e ( t h i s . ge t T ax i I nS c he d u le d T im e ( ) ) ; t h i s . setGateInEstimatedTime ( t h i s . getWheelsOnEstimatedTime ( ) + t h i s . getTaxiInEstimatedTime ( ) ) ; t h i s . setGroundEstimatedTime ( t h i s . getGroundScheduledTime ( ) ) ; t h i s . setGateOutEstimatedTime ( t h i s . getGateInEstimatedTime ( ) + t h i s . getGroundEstimatedTime ( ) ) ; 121 123 125 127 } s e t T u r n S t a t u s ( TurnStatus .TAXIINGINFROMRUNWAYTOPENALTYBOX) ; 129 } 131 133 135 137 139 141 143 145 147 149 public void e n t e r P e n a l t y B o x ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” e n t e r s p e n a l t y box a t ” + S t a t i c S y n c . g e t c l o c k ( ) ) ; } t h i s . s e t P e n a l t y B o x H o l d F l a g ( true ) ; t h i s . setPenaltyBoxEntryTime ( ( i n t ) ( S t a t i c S y n c . g e t c l o c k ( ) ) ) ; s e t T u r n S t a t u s ( TurnStatus .INPENALTYBOX) ; G a t e A s s i g n m e n t S i m u l a t i o n . penaltyBox . add ( i t s A i r p l a n e ) ; } public void e x i t P e n a l t y B o x ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” e x i t s p e n a l t y box a t ” + S t a t i c S y n c . g e t c l o c k ( ) ) ; } t h i s . setPenaltyBoxExitTime ( ( i n t ) ( S t a t i c S y n c . g e t c l o c k ( ) ) ) ; t h i s . setPenaltyBoxHoldTime ( t h i s . getPenaltyBoxExitTime ( ) − t h i s . getPenaltyBoxEntryTime ( ) ) ; } 151 153 155 157 159 public void s t a r t T a x i i n g T o F i n a l G a t e ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” s t a r t s t a x i i n g to f i n a l gate ” + getAssignedGate ( ) . getName ( ) + ” at ” + StaticSync . g e t c l o c k ( ) ) ; } // u p d a t e p e n a l t y box i n f o ; s e t T u r n S t a t u s ( TurnStatus .TAXIINGINFROMPENALTYBOXTOGATE) ; } 161 163 165 167 169 171 public void a r r i v e A t G a t e ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” a r r i v e s a t g a t e ” + g e t A s s i g n e d G a t e ( ) . getName ( ) + ” at ” + StaticSync . g e t c l o c k ( ) ) ; } s etG a t eI nA c t u al T i m e ( ( in t ) S t a t i c S y n c . g e t c l o c k ( ) ) ; setGateInOverUnder ( getGateInActualTime ( ) − getGateInScheduledTime ( ) ) ; t h i s . setGateInEstimatedTime ( t h i s . getGateInActualTime ( ) ) ; 159 t h i s . s e t T a x i I n A c t u a l T i m e ( t h i s . getGateInActualTime ( )−t h i s . getWheelsOnActualTime ( ) ) ; t h i s . setTaxiInOverUnder ( t h i s . getTaxiInActualTime ( )−t h i s . g e t T a x i I n S c h e d u l e d Ti m e ( ) ) ; t h i s . s e t T a x i I n E s t i m a t e d T i m e ( t h i s . getTaxiInActualTime ( ) ) ; i f ( t h i s . getTaxiInOverUnder ( ) > Ga t e A s s i g n m e n t S i m u l a t i o n . gateHoldThreshold ) { t h i s . s e t G a t e H o l d F l a g ( true ) ; t h i s . setGateHoldTime ( t h i s . getTaxiInOverUnder ( )− GateAssignmentSimulation . gateHoldThreshold ) ; } else { this . setGateHoldFlag ( false ) ; t h i s . setGateHoldTime ( 0 ) ; } t h i s . setGroundEstimatedTime ( t h i s . getGroundActualTime ( ) ) ; t h i s . setGateOutEstimatedTime ( t h i s . getGateInEstimatedTime ( )+t h i s . getGroundEstimatedTime ( ) ) ; s e t T u r n S t a t u s ( TurnStatus .ATGATE) ; 173 175 177 179 181 183 185 } 187 public void departFromGate ( ) { i f ( G a t e A s s i g n m e n t S i m u l a t i o n . messageFlag == true ) { System . out . p r i n t l n ( i t s A i r p l a n e . get name ( ) + ” d e p a r t s g a t e ” + g e t A s s i g n e d G a t e ( ) . getName ( ) + ” at ” + StaticSync . g e t c l o c k ( ) ) ; } setGateOutActualTime ( ( in t ) S t a t i c S y n c . g e t c l o c k ( ) ) ; setGateOutOverUnder ( getGateOutActualTime ( ) − getGateOutScheduledTime ( ) ) ; t h i s . setGateOutEstimatedTime ( t h i s . getGateOutActualTime ( ) ) ; t h i s . setGroundActualTime ( t h i s . getGateOutActualTime ( )−t h i s . getGateInActualTime ( ) ) ; t h i s . setGroundOverUnder ( t h i s . getGroundActualTime ( )−t h i s . getGroundScheduledTime ( ) ) ; t h i s . setGroundEstimatedTime ( t h i s . getGroundActualTime ( ) ) ; s e t T u r n S t a t u s ( TurnStatus .AFTERGATEDEPARTURE) ; } 189 191 193 195 197 199 201 203 205 207 209 211 213 215 217 219 public s t a t i c void p r i n t H e a d e r ( S t r i n g f i l e N a m e ) throws IOException { P r i n t W r i t e r outputStream = null ; try { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( f i l e N a m e ) ) ; outputStream . p r i n t l n ( ” t u r n I n d e x ” + d e l i m i t e r + ” assignedGate ” + delimiter + ” carrier ” + d e l i m i t e r + ” equipment ” + delimiter + ” arrivalFlightNumber ” + d e l i m i t e r + ” departureFlightNumber ” + delimiter + ” arrivalOriginationAirport ” + delimiter + ” viaAirport ” + delimiter + ” departureDestinationAirport ” + d e l i m i t e r + ” wheelOnScheduledTime ” + d e l i m i t e r + ” wheelOnEstimatedTime ” + d e l i m i t e r + ” wheelOnActualTime ” + d e l i m i t e r + ” wheelOnOverUnder ” + d e l i m i t e r + ” gateChangeHeuristicTime ” 160 221 + + + + + + + + + + + + + + + + + + + ); 223 225 227 229 231 233 235 237 239 241 243 245 } delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter delimiter + + + + + + + + + + + + + + + + + + + ” taxiInScheduledTime ” ” taxiInEstimatedTime ” ” taxiInActualTime ” ” t ax iInOverUnder ” ” gateHoldFlag ” ” gateHoldTime ” ” gateInScheduledTime ” ” gateInEstimatedTime ” ” g a te I nActualTi me ” ” gateInOverUnder ” ” groundScheduledTime ” ” groundEstimatedTime ” ” groundActualTime ” ” groundOverUnder ” ” gateOutScheduledTime ” ” gateOutEstimatedTime ” ” gateOutActualTime ” ” gateOutOverUnder ” ” turnStatus ” } finally { i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } 247 249 251 253 255 257 259 261 public void p r i n t T u r n ( S t r i n g f i l e N a m e ) throws IOException { P r i n t W r i t e r outputStream = null ; try { i f (new F i l e ( f i l e N a m e ) . e x i s t s ( ) == true ) { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( fileName , true ) ) ; } else { outputStream = new P r i n t W r i t e r (new F i l e W r i t e r ( fileName , f a l s e ) ); } outputStream . p r i n t l n ( t o S t r i n g ( ) ) ; } finally { i f ( outputStream != null ) { outputStream . c l o s e ( ) ; } } } 263 265 public i n t getTurnIndex ( ) { return t u r n I n d e x ; } 267 269 public void s e t T u r n I n d e x ( in t t u r n I n d e x ) { this . turnIndex = turnIndex ; } 271 273 public Gate g e t A s s i g n e d G a t e ( ) { return a s s i g n e d G a t e ; } 161 275 277 public void s e t A s s i g n e d G a t e ( Gate a s s i g n e d G a t e ) { this . assignedGate = assignedGate ; } 279 281 public S t r i n g getEquipment ( ) { return equipment ; } 283 285 public void setEquipment ( S t r i n g equipment ) { t h i s . equipment = equipment ; } 287 289 public i n t g e t A r r i v a l F l i g h t N u m b e r ( ) { return a r r i v a l F l i g h t N u m b e r ; } 291 293 public void s e t A r r i v a l F l i g h t N u m b e r ( i n t a r r i v a l F l i g h t N u m b e r ) { this . arrivalFlightNumber = arrivalFlightNumber ; } 295 297 public i n t g et D e p a r t u r e F l i g h t N u m b e r ( ) { return d e p a r t u r e F l i g h t N u m b e r ; } 299 301 public void s e t D e p a r t u r e F l i g h t N u m b e r ( i nt d e p a r t u r e F l i g h t N u m b e r ) { this . departureFlightNumber = departureFlightNumber ; } 303 305 public S t r i n g g e t A r r i v a l O r i g i n a t i o n A i r p o r t ( ) { return a r r i v a l O r i g i n a t i o n A i r p o r t ; } 307 309 public void s e t A r r i v a l O r i g i n a t i o n A i r p o r t ( S t r i n g a r r i v a l O r i g i n a t i o n A i r p o r t ) { this . a r r i v a l O r i g i n a t i o n A i r p o r t = a r r i v a l O r i g i n a t i o n A i r p o r t ; } 311 313 public S t r i n g g e t V i a A i r p o r t ( ) { return v i a A i r p o r t ; } 315 317 public void s e t V i a A i r p o r t ( S t r i n g v i a A i r p o r t ) { this . viaAirport = viaAirport ; } 319 321 public S t r i n g g e t D e p a r t u r e D e s t i n a t i o n A i r p o r t ( ) { return d e p a r t u r e D e s t i n a t i o n A i r p o r t ; } 323 325 public void s e t D e p a r t u r e D e s t i n a t i o n A i r p o r t ( S t r i n g departureDestinationAirport ) { this . departureDestinationAirport = departureDestinationAirport ; } 327 public i n t getWheelsOnScheduledTime ( ) { 162 329 return wheelsOnScheduledTime ; } 331 333 public void setWheelsOnScheduledTime ( i nt wheelOnScheduledTime ) { t h i s . wheelsOnScheduledTime = wheelOnScheduledTime ; } 335 337 public i n t getWheelsOnEstimatedTime ( ) { return wheelsOnEstimatedTime ; } 339 341 public void setWheelsOnEstimatedTime ( i nt wheelOnEstimatedTime ) { t h i s . wheelsOnEstimatedTime = wheelOnEstimatedTime ; } 343 345 public i n t getWheelsOnActualTime ( ) { return wheelsOnActualTime ; } 347 349 public void setWheelsOnActualTime ( i n t wheelOnActualTime ) { t h i s . wheelsOnActualTime = wheelOnActualTime ; } 351 353 public i n t getWheelsOnOverUnder ( ) { return wheelsOnOverUnder ; } 355 357 public void setWheelsOnOverUnder ( i n t wheelOnOverUnder ) { t h i s . wheelsOnOverUnder = wheelOnOverUnder ; } 359 361 public boolean i s P e n a l t y B o x H o l d F l a g ( ) { return penaltyBoxHoldFlag ; } 363 365 public void s e t P e n a l t y B o x H o l d F l a g ( boolean penaltyBoxHoldFlag ) { t h i s . penaltyBoxHoldFlag = penaltyBoxHoldFlag ; } 367 369 public i n t getPenaltyBoxEntryTime ( ) { return penaltyBoxEntryTime ; } 371 373 public void setPenaltyBoxEntryTime ( i n t penaltyBoxEntryTime ) { t h i s . penaltyBoxEntryTime = penaltyBoxEntryTime ; } 375 377 public i n t getPenaltyBoxExitTime ( ) { return penaltyBoxExitTime ; } 379 381 public void setPenaltyBoxExitTime ( i n t penaltyBoxExitTime ) { t h i s . penaltyBoxExitTime = penaltyBoxExitTime ; } 383 public i n t getPenaltyBoxHoldTime ( ) { 163 385 return penaltyBoxHoldTime ; } 387 389 public void setPenaltyBoxHoldTime ( i n t penaltyBoxHoldTime ) { t h i s . penaltyBoxHoldTime = penaltyBoxHoldTime ; } 391 393 public i n t g e t T a x i I n S c h e d u l e d Ti m e ( ) { return t a x i I n S c h e d u l e d T i m e ; } 395 397 public void s e t T a x i I n S c h e d u l e d T i m e ( i n t t a x i I n S c h e d u l e d T i m e ) { this . taxiInScheduledTime = taxiInScheduledTime ; } 399 401 public i n t getTaxiInEstimatedTime ( ) { return t a x i I n E s t i m a t e d T i m e ; } 403 405 public void s e t T a x i I n E s t i m a t e d T i m e ( i n t t a x i I n E s t i m a t e d T i m e ) { this . taxiInEstimatedTime = taxiInEstimatedTime ; } 407 409 public i n t getTaxiInActualTime ( ) { return t a x i I n A c t u a l T i m e ; } 411 413 public void s e t T a x i I n A c t u a l T i m e ( i n t t a x i I n A c t u a l T i m e ) { this . taxiInActualTime = taxiInActualTime ; } 415 417 public i n t getTaxiInOverUnder ( ) { return tax i In Ov e rU nder ; } 419 421 public void setTaxiInOverUnder ( in t taxiInOverUnder ) { t h i s . ta xiI n Ov er U nd er = taxiIn OverUnder ; } 423 425 public boolean i s G a t e H o l d F l a g ( ) { return g a t e H o l d F l a g ; } 427 429 public void s e t G a t e H o l d F l a g ( boolean g a t e H o l d F l a g ) { this . gateHoldFlag = gateHoldFlag ; } 431 433 public i n t getGateHoldTime ( ) { return gateHoldTime ; } 435 437 public void setGateHoldTime ( i n t gateHoldTime ) { t h i s . gateHoldTime = gateHoldTime ; } 439 public i n t getGateInScheduledTime ( ) { 164 441 return g a t e I n S c h e d u l e d T i m e ; } 443 445 public void s e t G a t e I n S c h e d u l e d T i m e ( i n t g a t e I n S c h e d u l e d T i m e ) { this . gateInScheduledTime = gateInScheduledTime ; } 447 449 public i n t getGateInEstimatedTime ( ) { return gateInEstimatedTime ; } 451 453 public void setGateInEstimatedTime ( i n t gateInEstimatedTime ) { t h i s . gateInEstimatedTime = gateInEstimatedTime ; } 455 457 public i n t getGateInActualTime ( ) { return g a t e I n A c t u a l Tim e ; } 459 461 public void se t G at e I n A ct ua lTim e ( i n t gateInAct ualTime ) { t h i s . g a t e I n A c t u a l T i me = ga te In A ctualTime ; } 463 465 public i n t getGateInOverUnder ( ) { return gateInOverUnder ; } 467 469 public void setGateInOverUnder ( i n t gateInOverUnder ) { t h i s . gateInOverUnder = gateInOverUnder ; } 471 473 public i n t getGroundScheduledTime ( ) { return groundScheduledTime ; } 475 477 public void setGroundScheduledTime ( i n t groundScheduledTime ) { t h i s . groundScheduledTime = groundScheduledTime ; } 479 481 public i n t getGroundEstimatedTime ( ) { return groundEstimatedTime ; } 483 485 public void setGroundEstimatedTime ( i n t groundEstimatedTime ) { t h i s . groundEstimatedTime = groundEstimatedTime ; } 487 489 public i n t getGroundActualTime ( ) { return groundActualTime ; } 491 493 public void setGroundActualTime ( i n t groundActualTime ) { t h i s . groundActualTime = groundActualTime ; } 495 public i n t getGroundOverUnder ( ) { 165 497 return groundOverUnder ; } 499 501 public void setGroundOverUnder ( i n t groundOverUnder ) { t h i s . groundOverUnder = groundOverUnder ; } 503 505 public i n t getGateOutScheduledTime ( ) { return gateOutScheduledTime ; } 507 509 public void setGateOutScheduledTime ( i n t gateOutScheduledTime ) { t h i s . gateOutScheduledTime = gateOutScheduledTime ; } 511 513 public i n t getGateOutEstimatedTime ( ) { return gateOutEstimatedTime ; } 515 517 public void setGateOutEstimatedTime ( i n t gateOutEstimatedTime ) { t h i s . gateOutEstimatedTime = gateOutEstimatedTime ; } 519 521 public i n t getGateOutActualTime ( ) { return gateOutActualTime ; } 523 525 public void setGateOutActualTime ( i n t gateOutActualTime ) { t h i s . gateOutActualTime = gateOutActualTime ; } 527 529 public i n t getGateOutOverUnder ( ) { return gateOutOverUnder ; } 531 533 public void setGateOutOverUnder ( i n t gateOutOverUnder ) { t h i s . gateOutOverUnder = gateOutOverUnder ; } 535 537 public TurnStatus g e t T u r n S t a t u s ( ) { return t u r n S t a t u s ; } 539 541 public void s e t T u r n S t a t u s ( TurnStatus t u r n S t a t u s ) { this . turnStatus = turnStatus ; } 543 545 public A i r p l a n e g e t I t s A i r p l a n e ( ) { return i t s A i r p l a n e ; } 547 549 public void s e t I t s A i r p l a n e ( A i r p l a n e i t s A i r p l a n e ) { this . i t s A i r p l a n e = i t s A i r p l a n e ; } 551 public i n t g e t G a t e C h a n g e H e u r i s t i c T i m e ( ) { 166 553 return g a t e C h a n g e H e u r i s t i c T i m e ; } 555 public void s e t G a t e C h a n g e H e u r i s t i c T i m e ( in t g a t e C h a n g e H e u r i s t i c T i m e ) { this . gateChangeHeuristicTime = gateChangeHeuristicTime ; } 557 559 public S t r i n g g e t C a r r i e r ( ) { return c a r r i e r ; } 561 563 public void s e t C a r r i e r ( S t r i n g c a r r i e r ) { this . c a r r i e r = c a r r i e r ; } 565 567 569 571 573 575 577 579 581 583 585 587 589 591 593 595 597 599 601 603 } @Override public S t r i n g t o S t r i n g ( ) { return t u r n I n d e x + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter + delimiter } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a s s i g n e d G a t e . get name ( ) carrier equipment arrivalFlightNumber departureFlightNumber arrivalOriginationAirport viaAirport departureDestinationAirport wheelsOnScheduledTime wheelsOnEstimatedTime wheelsOnActualTime wheelsOnOverUnder gateChangeHeuristicTime taxiInScheduledTime taxiInEstimatedTime taxiInActualTime taxiIn OverUnder gateHoldFlag gateHoldTime gateInScheduledTime gateInEstimatedTime g a te I nA ctua lTime gateInOverUnder groundScheduledTime groundEstimatedTime groundActualTime groundOverUnder gateOutScheduledTime gateOutEstimatedTime gateOutActualTime gateOutOverUnder turnStatus ; src/gateassignmentsimulation/Turn.java /∗ 167 2 4 ∗ To change t h i s t e m p l a t e , c h o o s e T o o l s | Templates ∗ and open t h e t e m p l a t e i n t h e e d i t o r . ∗/ 6 /∗ ∗ C l a s s T u r n S t a t u s d e f i n e s t h e f o u r s t a t u s t h a t an a i r c r a f t may be a t . 8 ∗/ 10 package g a t e a s s i g n m e n t s i m u l a t i o n ; 12 /∗ ∗ ∗ 14 ∗ @author J e f f r e y ∗/ 16 public enum TurnStatus { BEFORETOUCHDOWN, TAXIINGINFROMRUNWAYTOPENALTYBOX, INPENALTYBOX, 18 TAXIINGINFROMPENALTYBOXTOGATE, ATGATE, AFTERGATEDEPARTURE } src/gateassignmentsimulation/TurnStatus.java 168 Bibliography 169 Bibliography [ASPM, 2008] ASPM, F. (2008). data reference guide. [Bandara and Wirasinghe, 1988] Bandara, S. and Wirasinghe, S. C. (1988). Airport Gate Position Estimation under Uncertainty. 1199. Transportation Research Board. [Bazargan, 2004] Bazargan, M. (2004). Airline Operations And Scheduling. Ashgate Pub Ltd. [Belliotti, 2008] Belliotti, R. (2008). ACRP Synthesis Report 8: Common Use Facilities and Equipment at Airports. Transportation Research Board. [Bolat, 1999] Bolat, A. (1999). Assigning arriving flights at an airport to the available gates. The Journal of the Operational Research Society, 50:23–34. [Bolat, 2000] Bolat, A. (2000). Procedures for providing robust gate assignments for arriving aircrafts. European Journal of Operational Research, 120:63–80. [Braaksma and Shortreed, 1971] Braaksma, J. P. and Shortreed, J. H. (1971). Improving airport gate usage with critical path. Transportation Engineering Journal, 97:187–203. [BTS, 2003] BTS (2003). Airline on-time performance and causes of flight delays. [Chandra, 1990] Chandra, J. (1990). Optimization-based opportunistic part dispatching in flexible manufacturing systems. Unpublished PhD. Thesis, School of Industrial Engineering, Purdue University, W. Lafayette, IN. [de Neufville and Belin, 2002] de Neufville, R. and Belin, S. C. (2002). Airport passenger buildings: Efficiency through shared use of facilities. Journal of Transportation Engineering, 128:201–210. [de Neufville and Odoni, 2003] de Neufville, R. and Odoni, A. (2003). Airport Systems: Planning, Design, and Management. McGraw-Hill Professional, 1 edition. [Dillingham, 2005] Dillingham, G. L. (2005). Delays and enhance capacity are ongoing but challenges remain. Technical report, United States Government Accountability Office. [Dorndorf et al., 2007] Dorndorf, U., Jaehn, F., Lin, C., Ma, H., and Pesch, E. (2007). Disruption management in flight gate scheduling. Statistica Neerlandica, 61(1):92–114. [DOT, 2009a] DOT (2009a). Dot issues precedent-setting fines for rochester, mn tarmac delay incident. http://www.dot.gov. 170 [DOT, 2009b] DOT (2009b). New dot consumer rule limits airline tarmac delays, provides other passenger protections. [Durbin, 2003] Durbin, M. T. (2003). The dance of the thirty-ton trucks: Demand dispatching in a dynamic environment. PhD thesis, George Mason University. [Eckert, 2010] Eckert, B. (2010). Delta, us airways dump quest for airport gate swap. http://washington.bizjournals.com/washington/stories/2010/06/28/daily43.html. [Edwards and Newell, 1969] Edwards, J. W. and Newell, G. F. (1969). A study of gate use at honolulu international airport. Transportation Science, 3:183–191. [FAA, 2007] FAA (2007). Oep frequently asked questions - oep 35 airports. [FAA, 2009] FAA (2009). http://www.faa.gov. New york/new jersey/philadelphia airspace redesign video. [Fricke and Schultz, 2008] Fricke, H. and Schultz, M. (2008). Improving aircraft turn around reliability. In Third International Conference on Research in Air Transportation. [Garrett, 2005] Garrett, C. (2005). New passenger complex to handle growing airport needs. [Garrido, 2008] Garrido, J. M. (2008). The psimj2-2 package - a library for object oriented discrete-event simulation. Technical Report TR-CSIS-Psimj2. [Garrido, 2009] Garrido, J. M. (2009). The psimj2 package, a library for object oriented discrete-event simulation, technical report tr-csis-psimj2. Technical report. [Gillen and Lall, 1997] Gillen, D. and Lall, A. (1997). Developing measures of airport productivity and performance: an application of data envelopment analysis. Transportation research. Part E, Logistics and transportation review, 33:261–274. [Gosling, 1993] Gosling, G. D. (1993). Development of a framework for assessing the benefits of airportsurface traffic automation. Control Systems Technology, IEEE Transactions on, 1:155–167. [Gross et al., 2008] Gross, D., Shortle, J. F., Thompson, J. M., and Harris, C. M. (2008). Fundamentals of Queueing Theory. John Wiley & Sons, Inc, fourth edition. [Gu and Chung, 1999] Gu, Y. and Chung, C. A. (1999). Genetic algorithm approach to aircraft gate reassignment problem. Journal of Transportation Engineering, 125:384–389. [Haghani and Chen, 1998] Haghani, A. and Chen, M.-C. (1998). Optimizing gate assignments at airport terminals. Transportation Research Part A: Policy and Practice, 32:437– 454. [Hassounah and Steuart, 1993] Hassounah, M. I. and Steuart, G. N. (1993). Demand for aircraft gates. Transportation Research Record, 1423:26–33. [Horonjeff and McKelvey, 1993] Horonjeff, R. and McKelvey, F. (1993). Planning and Design of Airports. McGraw-Hill Professional. 171 [Idris, 2001] Idris, H. R. (2001). Observation and analysis of departure operations at Boston Logan International Airport. PhD thesis, Massachusetts Institute of Technology. [Idris et al., 1999] Idris, H. R., Anagnostakis, I., Delcaire, B., Hansman, R. J., Clarke, J.-P., Feron, E., and Odoni, A. R. (1999). Observations of departure processes at logan airport to support the development of departure planning tools. Air Traffic Control Quarterly, 7:229–257. [Idris and Hansman, 2000] Idris, H. R. and Hansman, R. J. (2000). Observation and analysis of departure operations at boston logan international airport. Technical Report ICAT-2000-7, Massachusetts Institute of Technology. [JPDO, 2007] JPDO (2007). Concept of operations for the next generation air transportation system, version 2.0. Technical report, Joint Planning and Development Office. [Klein and Wang, 2006] Klein, A. and Wang, J. (2006). Laguardia airport capacity and delay assessment for rj fleet upgauging options. 2006 INFORMS Annual Meeting Presentation, Pittsburgh, PA. [Kondo, 2009] Kondo, A. (2009). The Derivation of the Unimpeded Taxi-out and Taxi-in Times in the Estimation of the Taxi Time Delays. Office of Aviation Policy, Federal Aviation Administration, technical note 2009 no. 1 edition. [Le, 2006] Le, L. (2006). Demand Management at Congested Airports: How Far Are We From Utopia? PhD thesis, George Mason University. [L’Ecuyer, 2008] L’Ecuyer, P. (2008). Ssj: Stochastic simulation in java overview. [Matt, 2005] Matt (2005). http://www.airliners.net/. Trip report: Yul-yyz-yul-ord-dfw on ac and aa. [Maynard, 2008] Maynard, M. (2008). Jetblue twitters its new terminal. http://thelede.blogs.nytimes.com/2008/10/22/jetblue-twitters-its-new-terminal/?hp. [McGregor, 2004] McGregor (2004). Whenuapai air base. Technical report, McGregor and Company. [Mead, 2001] Mead, K. M. (2001). Flight delays and cancellations, statement before the committee on appropriations, subcommittee on transportation and related agencies, united states house of representatives, u.s. department of transportation. http://www.oig.dot.gov/item.jsp?id=17. [Mueller and Chatterji, 2002] Mueller, E. R. and Chatterji, G. B. (2002). Analysis of aircraft arrival and departure delay characteristics. In AIAA’s Aircraft Technology, Integration, & Operations (ATIO) 2002 Technical Forum Online Proceedings. [Ramos, 2007] Ramos, R. T. (2007). Airtran doesn’t control new gates, airport says. Atlanta Business Chronicle. [Richards, 2008] Richards, J. (2008). Self-docking saves millions, reduces gate delays at dfw. Airport Improvement Magazine. 172 [Robyn, 2008] Robyn, D. (2008). Flight delays are an outcome of bad public policy. 2008 INFORMS Annual Meeting. [Roling and Visser, 2007] Roling, P. C. and Visser, H. G. (2007). Optimal airport surface traffic planning using mixed-integer linear programming. International Journal of Aerospace Engineering, 2008. [Sherry and Donohue, 2009] Sherry, L. and Donohue, G. (2009). U.s. airline passenger trip delay report (2008). Technical report, Center for Air Transportation Systems Research, George Mason University. [Simaiakis and Balakrishnan, 2009] Simaiakis, I. and Balakrishnan, H. (2009). Queuing models of airport departure processes for emissions reduction. In AIAA Guidance, Navigation, and Control Conference Proceedings, Chicago, Illinois. [Slater, 1999] Slater, R. E. (1999). Report on the january 1999 detroit snowstorm submitted to the honorable john d. dingell, united states house of representatives. http://www.dot.gov/affairs/1999/detsnowtoc.htm. accessed on July 24, 2008. [Steuart, 1974] Steuart, G. N. (1974). Gate position requirements at metropolitan airports. Transportation Science, 8:169–189. [Stoller, 2009] Stoller, G. (2009). Fliers trapped on tarmac push for rules on release. [Terreri, 2009] Terreri, J. (2009). Nextgen and the real world at atlanta-hartsfield international airport. Presentation in session 357 of TRB 2009 meeting. [Tharpe, 2008] Tharpe, J. (2008). Passenger perks the buzz of proposed international terminal. [USpatent, 2000] USpatent (2000). System and method of providing oooi times of an aircraft. United States Patent 6154636. [Wang, 2007] Wang, D. (2007). Methods For Analysis Of Passenger Trip Performance In A Complex Networked Transportation System. PhD thesis, George Mason Unversity. [Wang et al., 2010] Wang, J., Shortle, J. F., and Sherry, L. (2010). Analysis of new york laguardia airport gate-waiting delays. In The Transportation Research Board (TRB) 89th Annual Meeting, Washington, D.C. [Wang et al., 2009] Wang, J., Shortle, J. F., Wang, J., and Sherry, L. (2009). Analysis of gate-waiting delays at major us airports. In 9th AIAA Aviation Technology, Integration, and Operations Conference (ATIO) and AIAA/AAAF Aircraft Noise and Emissions Reduction Symposium (ANERS). [Wu and Caves, 2003] Wu, C.-L. and Caves, R. E. (2003). Flight schedule punctuality control and management: a stochastic approach. Transportation Planning and Technology, 26:313 – 330. [Xu, 2007] Xu, N. (2007). Method for Deriving Multi-Factor Models for Predicting Airport Delays. PhD thesis, George Mason University. 173 [Yan and Chang, 1998] Yan, S. and Chang, C.-M. (1998). A network model for gate assignment. Journal of Advanced Transportation, 32:176–189. [Yan and Huo, 2001] Yan, S. and Huo, C.-M. (2001). Optimization of multiple objective gate assignments. Transportation Research Part A: Policy and Practice, 35:413–432. [Yan et al., 2002] Yan, S., Shieh, C.-Y., and Chen, M. (2002). A simulation framework for evaluating airport gate assignments. Transportation Research Part A: Policy and Practice, 36:885–898. [Yan and Tang, 2007] Yan, S. and Tang, C.-H. (2007). A heuristic approach for airport gate assignments for stochastic flight delays. European Journal of Operational Research, 180:547567. [Yeamans, 2001] Yeamans, D. (2001). Terminal capacity. 174 Curriculum Vitae Jianfeng Wang received his M.S. in Operations Research from George Mason University, Fairfax, VA, in 2007 and B.S. in Flight Vehicle Propulsion Engineering from Civil Aviation University of China, Tianjin, P. R. China in 2002. He has been an analyst / programmer at CSSI, Inc. since 2010. Before that, he worked as a research assistant in the Center for Air Transportation Systems Research (CATSR) at George Mason University from 2004 to 2009 and worked as an intern at United Airlines for 6 months in 2007. He worked on projects including oceanic flight pre-departure planner design and development, wake vortex analysis using C++ and Google Earth, gate reassignment simulation using Arena, LaGuardia airport upgauging study using Total Airspace and Airport Modeler (TAAM), and MITRE runwaySimulator delay mode validation using TAAM. His research interests include data analysis and modeling of airport systems and oceanic flight trajectories. His permanent email is jianfengmason@gmail.com. 175