adapt the code to split up predictions form the inbounds

This commit is contained in:
Sven Czarnian
2021-11-13 22:55:04 +01:00
parent eba9e2deab
commit 8b34f622a3
9 changed files with 280 additions and 267 deletions

View File

@@ -21,7 +21,7 @@ class RecedingHorizonControl:
def insertInWindow(self, inbound : Inbound, usePTA : bool):
if False == usePTA:
referenceTime = inbound.EarliestArrivalTime
referenceTime = inbound.InitialArrivalTime
else:
referenceTime = inbound.PlannedArrivalTime
@@ -32,9 +32,9 @@ class RecedingHorizonControl:
# find the correct window
if window.StartTime <= referenceTime and window.EndTime > referenceTime:
self.AssignedWindow[inbound.Callsign] = [ i, 0 ]
if False == usePTA:
inbound.PlannedArrivalTime = inbound.EarliestArrivalTime
inbound.FixedSequence = i < self.FreezedIndex
if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime:
inbound.PlannedArrivalTime = inbound.InitialArrivalTime
window.insert(inbound)
inserted = True
break
@@ -51,16 +51,16 @@ class RecedingHorizonControl:
self.Windows.append(RecedingHorizonWindow(lastWindowTime, lastWindowTime + timestep))
if self.Windows[-1].EndTime > referenceTime:
window = self.Windows[-1]
window.insert(inbound)
self.AssignedWindow[inbound.Callsign] = [ len(self.Windows) - 1, 0 ]
window.insert(inbound)
if False == usePTA:
inbound.PlannedArrivalTime = max(window.StartTime, inbound.EarliestArrivalTime)
inbound.FixedSequence = len(self.Windows) < self.FreezedIndex
if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime:
inbound.PlannedArrivalTime = inbound.InitialArrivalTime
break
lastWindowTime = self.Windows[-1].EndTime
window.Inbounds.sort(key = lambda x: x.PlannedArrivalTime)
window.Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime)
def updateReport(self, inbound : Inbound):
# check if we need to update
@@ -73,22 +73,16 @@ class RecedingHorizonControl:
# ingore fixed updates
if True == plannedInbound.FixedSequence or index < self.FreezedIndex:
return
plannedInbound.ArrivalCandidates = inbound.ArrivalCandidates
plannedInbound.WTC = inbound.WTC
# check if we need to update the inbound
if plannedInbound.PlannedArrivalTime < inbound.EarliestArrivalTime:
if inbound.EarliestArrivalTime < self.Windows[index].StartTime or inbound.EarliestArrivalTime >= self.Windows[index].EndTime:
if None == plannedInbound.PlannedStar:
if inbound.InitialArrivalTime < self.Windows[index].StartTime or inbound.InitialArrivalTime >= self.Windows[index].EndTime:
self.Windows[index].remove(inbound.Callsign)
self.AssignedWindow.pop(inbound.Callsign)
self.updateReport(inbound)
else:
plannedInbound.PlannedStar = inbound.PlannedStar
plannedInbound.PlannedRunway = inbound.PlannedRunway
plannedInbound.InitialArrivalTime = inbound.InitialArrivalTime
if plannedInbound.PlannedArrivalTime == plannedInbound.EarliestArrivalTime:
plannedInbound.PlannedArrivalTime = inbound.EarliestArrivalTime
plannedInbound.EarliestArrivalTime = inbound.EarliestArrivalTime
else:
self.insertInWindow(inbound, False)
@@ -100,7 +94,7 @@ class RecedingHorizonControl:
self.insertInWindow(inbound, True)
else:
inbound.FixedSequence = index < self.FreezedIndex
self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime)
self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime)
def lastFixedInboundOnRunway(self, runway : str):
# no inbounds available