|
@@ -1,5 +1,6 @@
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
+import copy
|
|
|
import time
|
|
|
|
|
|
from datetime import datetime as dt
|
|
@@ -101,12 +102,27 @@ class RecedingHorizonControl:
|
|
|
|
|
|
def resequenceInbound(self, inbound : Inbound):
|
|
|
index = self.AssignedWindow[inbound.Callsign][0]
|
|
|
- if inbound.PlannedArrivalTime < self.Windows[index].StartTime or inbound.PlannedArrivalTime >= self.Windows[index].EndTime:
|
|
|
- self.Windows[index].remove(inbound.Callsign)
|
|
|
- self.AssignedWindow.pop(inbound.Callsign)
|
|
|
- self.insertInWindow(inbound, True)
|
|
|
+ sequenced = self.Windows[index].inbound(inbound.Callsign)
|
|
|
+ if None == sequenced:
|
|
|
+ return
|
|
|
+
|
|
|
+ # resynchronized the planned information
|
|
|
+ sequenced.PlannedRunway = inbound.PlannedRunway
|
|
|
+ sequenced.PlannedStar = inbound.PlannedStar
|
|
|
+ sequenced.PlannedArrivalRoute = inbound.PlannedArrivalRoute
|
|
|
+ sequenced.PlannedArrivalTime = inbound.PlannedArrivalTime
|
|
|
+ sequenced.InitialArrivalTime = inbound.InitialArrivalTime
|
|
|
+ sequenced.PlannedTrackmiles = inbound.PlannedTrackmiles
|
|
|
+ sequenced.AssignmentMode = inbound.AssignmentMode
|
|
|
+ sequenced.ExpectedRunway = inbound.ExpectedRunway
|
|
|
+
|
|
|
+ # resort the inbound
|
|
|
+ if sequenced.PlannedArrivalTime < self.Windows[index].StartTime or sequenced.PlannedArrivalTime >= self.Windows[index].EndTime:
|
|
|
+ self.Windows[index].remove(sequenced.Callsign)
|
|
|
+ self.AssignedWindow.pop(sequenced.Callsign)
|
|
|
+ self.insertInWindow(sequenced, True)
|
|
|
else:
|
|
|
- inbound.FixedSequence = index < self.FreezedIndex
|
|
|
+ sequenced.FixedSequence = index < self.FreezedIndex
|
|
|
self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.EnrouteArrivalTime)
|
|
|
|
|
|
def latestFixedInbounds(self, configuration : Airport, sequenceConfiguration : AirportSequencing):
|
|
@@ -168,7 +184,7 @@ class RecedingHorizonControl:
|
|
|
# check the overlapping windows
|
|
|
for i in range(self.FreezedIndex + 1, len(self.Windows)):
|
|
|
for inbound in self.Windows[i].Inbounds:
|
|
|
- inbounds.append(inbound)
|
|
|
+ inbounds.append(copy.deepcopy(inbound))
|
|
|
|
|
|
if 20 <= len(inbounds):
|
|
|
break
|