fix the issues with the time delta estimation

This commit is contained in:
Sven Czarnian
2021-12-19 13:26:49 +01:00
parent fc84aab0f2
commit f4fa9eeb18
5 changed files with 18 additions and 19 deletions

View File

@@ -21,7 +21,7 @@ class RecedingHorizonControl:
def insertInWindow(self, inbound : Inbound, usePTA : bool): def insertInWindow(self, inbound : Inbound, usePTA : bool):
if False == usePTA: if False == usePTA:
referenceTime = inbound.InitialArrivalTime referenceTime = inbound.EnrouteArrivalTime
else: else:
referenceTime = inbound.PlannedArrivalTime referenceTime = inbound.PlannedArrivalTime
@@ -34,7 +34,7 @@ class RecedingHorizonControl:
self.AssignedWindow[inbound.Callsign] = [ i, 0 ] self.AssignedWindow[inbound.Callsign] = [ i, 0 ]
inbound.FixedSequence = i < self.FreezedIndex inbound.FixedSequence = i < self.FreezedIndex
if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime: if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime:
inbound.PlannedArrivalTime = inbound.InitialArrivalTime inbound.PlannedArrivalTime = inbound.EnrouteArrivalTime
window.insert(inbound) window.insert(inbound)
inserted = True inserted = True
break break
@@ -56,11 +56,11 @@ class RecedingHorizonControl:
self.AssignedWindow[inbound.Callsign] = [ len(self.Windows) - 1, 0 ] self.AssignedWindow[inbound.Callsign] = [ len(self.Windows) - 1, 0 ]
inbound.FixedSequence = len(self.Windows) < self.FreezedIndex inbound.FixedSequence = len(self.Windows) < self.FreezedIndex
if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime: if True == inbound.FixedSequence and None == inbound.PlannedArrivalTime:
inbound.PlannedArrivalTime = inbound.InitialArrivalTime inbound.PlannedArrivalTime = inbound.EnrouteArrivalTime
break break
lastWindowTime = self.Windows[-1].EndTime lastWindowTime = self.Windows[-1].EndTime
window.Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime) window.Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.EnrouteArrivalTime)
def updateReport(self, inbound : Inbound): def updateReport(self, inbound : Inbound):
# check if we need to update # check if we need to update
@@ -81,18 +81,18 @@ class RecedingHorizonControl:
# check if we need to update the inbound # check if we need to update the inbound
if None == plannedInbound.PlannedStar: if None == plannedInbound.PlannedStar:
reference = inbound.InitialArrivalTime reference = inbound.EnrouteArrivalTime
if plannedInbound.InitialArrivalTime > reference: if plannedInbound.EnrouteArrivalTime > reference:
reference = plannedInbound.InitialArrivalTime reference = plannedInbound.EnrouteArrivalTime
if reference < self.Windows[index].StartTime or reference >= self.Windows[index].EndTime: if reference < self.Windows[index].StartTime or reference >= self.Windows[index].EndTime:
self.Windows[index].remove(inbound.Callsign) self.Windows[index].remove(inbound.Callsign)
self.AssignedWindow.pop(inbound.Callsign) self.AssignedWindow.pop(inbound.Callsign)
inbound.InitialArrivalTime = reference inbound.EnrouteArrivalTime = reference
self.updateReport(inbound) self.updateReport(inbound)
else: else:
plannedInbound.InitialArrivalTime = reference plannedInbound.EnrouteArrivalTime = reference
self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime) self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.EnrouteArrivalTime)
else: else:
self.insertInWindow(inbound, False) self.insertInWindow(inbound, False)
@@ -104,7 +104,7 @@ class RecedingHorizonControl:
self.insertInWindow(inbound, True) self.insertInWindow(inbound, True)
else: else:
inbound.FixedSequence = index < self.FreezedIndex inbound.FixedSequence = index < self.FreezedIndex
self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime) self.Windows[index].Inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.EnrouteArrivalTime)
def lastFixedInboundOnRunway(self, runway : str): def lastFixedInboundOnRunway(self, runway : str):
# no inbounds available # no inbounds available
@@ -138,7 +138,7 @@ class RecedingHorizonControl:
# check if we found relevant inbounds # check if we found relevant inbounds
if 0 != len(inbounds): if 0 != len(inbounds):
inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.InitialArrivalTime) inbounds.sort(key = lambda x: x.PlannedArrivalTime if None != x.PlannedArrivalTime else x.EnrouteArrivalTime)
return inbounds, earliestArrivalTime return inbounds, earliestArrivalTime
else: else:
return None, None return None, None

View File

@@ -88,7 +88,7 @@ class Worker(Thread):
if '' != report.initialApproachFix: if '' != report.initialApproachFix:
inbound = Inbound(report, self.PerformanceData) inbound = Inbound(report, self.PerformanceData)
Node(inbound, inbound.ReportTime, self.WeatherModel, self.Configuration, self.SequencingConfiguration) Node(inbound, inbound.ReportTime, self.WeatherModel, self.Configuration, self.SequencingConfiguration)
if None != inbound.InitialArrivalTime: if None != inbound.EnrouteArrivalTime:
self.RecedingHorizonControl.updateReport(inbound) self.RecedingHorizonControl.updateReport(inbound)
else: else:
print('Unable to find all data of ' + report.aircraft.callsign) print('Unable to find all data of ' + report.aircraft.callsign)

View File

@@ -74,7 +74,7 @@ class Colony:
self.Result.append(node) self.Result.append(node)
Colony.associateInbound(rwyManager, node, self.Configuration.EarliestArrivalTime) Colony.associateInbound(rwyManager, node, self.Configuration.EarliestArrivalTime)
reqTimeDelta = self.Result[-1].Inbound.InitialArrivalTime - self.Result[-1].Inbound.PlannedArrivalTime reqTimeDelta = self.Result[-1].Inbound.EnrouteArrivalTime - self.Result[-1].Inbound.PlannedArrivalTime
self.Result[-1].Inbound.PlannedArrivalRoute[0].PTA = self.Result[-1].Inbound.PlannedArrivalRoute[0].ETA - reqTimeDelta self.Result[-1].Inbound.PlannedArrivalRoute[0].PTA = self.Result[-1].Inbound.PlannedArrivalRoute[0].ETA - reqTimeDelta
for i in range(1, len(self.Result[-1].Inbound.PlannedArrivalRoute)): for i in range(1, len(self.Result[-1].Inbound.PlannedArrivalRoute)):
prev = self.Result[-1].Inbound.PlannedArrivalRoute[i - 1] prev = self.Result[-1].Inbound.PlannedArrivalRoute[i - 1]

View File

@@ -184,7 +184,7 @@ class Node:
self.PredictedCoordinate = prediction self.PredictedCoordinate = prediction
setInitialArrivalTime = None == self.Inbound.InitialArrivalTime setEnrouteTime = None == self.Inbound.EnrouteArrivalTime
# calculate the timings for the different arrival runways # calculate the timings for the different arrival runways
for identifier in sequencingConfig.ActiveArrivalRunways: for identifier in sequencingConfig.ActiveArrivalRunways:
@@ -214,6 +214,5 @@ class Node:
self.ArrivalCandidates[identifier.Runway.Name] = ArrivalData(star = star, ita = earliest, route = arrivalRoute, self.ArrivalCandidates[identifier.Runway.Name] = ArrivalData(star = star, ita = earliest, route = arrivalRoute,
trackmiles = trackmiles) trackmiles = trackmiles)
ita = self.ArrivalCandidates[identifier.Runway.Name].InitialArrivalTime if True == setEnrouteTime and (None == self.Inbound.EnrouteArrivalTime or ita < self.Inbound.EnrouteArrivalTime):
if True == setInitialArrivalTime and (None == self.Inbound.InitialArrivalTime or ita < self.Inbound.InitialArrivalTime): self.Inbound.EnrouteArrivalTime = ita
self.Inbound.InitialArrivalTime = ita

View File

@@ -14,7 +14,7 @@ class Inbound:
self.Callsign = report.aircraft.callsign self.Callsign = report.aircraft.callsign
self.CurrentPosition = report.position self.CurrentPosition = report.position
self.ReportTime = datetime.strptime(report.reportTime + '+0000', '%Y%m%d%H%M%S%z').replace(tzinfo = pytz.UTC) self.ReportTime = datetime.strptime(report.reportTime + '+0000', '%Y%m%d%H%M%S%z').replace(tzinfo = pytz.UTC)
self.InitialArrivalTime = None self.EnrouteArrivalTime = None
self.RequestedRunway = None self.RequestedRunway = None
self.PlannedArrivalTime = None self.PlannedArrivalTime = None
self.PlannedRunway = None self.PlannedRunway = None