Die Route war der einfache Teil: eine Suche für Privatjet-Charter bauen

Die Route war der einfache Teil: eine Suche für Privatjet-Charter bauen

Wo jeder Jet steht, wohin er fliegen darf, wann seine Crew an ihre Grenze kommt und was die Reise wirklich kostet.


„Was kostet es, am Dienstag sechs Personen von Dubai nach London zu fliegen?“

Das klingt nach einer Tabellenabfrage. Dubai–London sind auf dem Großkreis rund 5.500 km, ein Langstrecken-Businessjet fliegt mit etwa 900 km/h, also sagen wir sechs Stunden. Jeder Entwickler könnte das in fünf Minuten auf einer Serviette skizzieren.

Die Serviette liegt schon eine Stunde daneben: Nach Westen, gegen die vorherrschenden Winde und entlang echter Luftstraßen, dauert der Flug eher sieben Stunden. Und das Geld steckt in den schwierigeren Fragen. Wo steht der Jet am Dienstagmorgen? Darf er den Luftraum auf dem Weg überqueren? Ist seine Crew bei der Landung noch im zulässigen Rahmen? Was kostet die Reise, wenn man die Leerflüge mitzählt?

Wir haben 2024 die Suche gebaut, die all das beantwortet, für einen Charter-Marktplatz für Privatjets mit Sitz in Dubai. Die Route selbst erwies sich als ein einziger Aufruf bei einem Anbieter. Der Rest des Problems lag in dem, was die Route nicht weiß, und nichts davon passt in eine einzige „beste Route“. Einen Verstoß gegen die Dienstzeitregeln der Crew kann man zu keinem Kurs gegen eine Treibstoffersparnis aufrechnen. Deshalb optimiert die Engine keine einzelne Antwort. Sie wendet die harten Grenzen an, bepreist, was übrig bleibt, und gibt dem Broker eine Auswahl kalkulierter Optionen samt Warnungen zurück.


Hundert Flugzeuge, hundert Regelwerke

Der Kunde ist ein Marktplatz. Kunden und Broker suchen darauf; die Flugzeuge gehören externen Betreibern, den lizenzierten Fluggesellschaften der Privatjet-Welt. Die Kunden sind Privatreisende, Flugabteilungen von Unternehmen, Family Offices und die Assistenten, die für sie buchen. Sie zahlen fünf- oder sechsstellige Beträge pro Reise und wollen eine Antwort, solange sie noch am Telefon sind.

Für einen Betreiber verdient ein stehender Jet nichts, aber jede zusätzliche Flugstunde zehrt an Wartungsrücklagen, Triebwerkszyklen und der eigenen Verfügbarkeit des Flugzeugs für den Eigentümer. Die lohnende Reise passt in den Flugplan und rechnet sich auch dann noch, wenn die Leerflüge zum Auftrag und zurück mitgezählt sind.

Der Marktplatz listet mehr als hundert Flugzeuge geprüfter Betreiber und lässt einen Broker alle auf einmal durchsuchen. Das ist keine Flotte in irgendeinem einheitlichen Sinn. Jedes Flugzeug hat eigene Leistungsdaten, Basen, Verfügbarkeit, Preise und Einschränkungen. Manche Regeln gehören zum Flugzeug, andere zum Betreiber und seinem Luftverkehrsbetreiberzeugnis (AOC, die Lizenz zur gewerblichen Personenbeförderung), zur Crew, zum Kunden oder zur Mission. Fast nichts Wichtiges konnte eine globale Einstellung sein, und fast jedes schwierige Problem weiter unten führt darauf zurück.

Eine Grenze galt durchgehend: Nur der Betreiber kann einen Flug genehmigen und einen verbindlichen Preis bestätigen. Die Engine sortiert vor und schätzt; Disposition und Crew-Steuerung des Betreibers haben das letzte Wort.

Der Kunde kam mit der Idee zu uns, mit Mockups eines Brokers, der eine Flotte durchsucht und bepreiste Optionen zurückbekommt, und mit den externen Diensten, die er ausgewählt hatte: AviaPages für die Routenberechnung, RDC Aviation für Überflug- und Flughafengebühren, AirportData für Flughäfen und Bodenabfertiger sowie die beiden Planungssysteme seiner Betreiber, FL3XX und Leon. Keines der Mockups zeigte eine Dienstzeittabelle, eine Liste gesperrter Länder oder den letzten bekannten Flughafen eines Jets.


Die Route ist ein Anbieteraufruf

Die kürzeste Linie zwischen zwei Flughäfen ist nicht die Route, die jemand fliegt. Flugzeuge folgen Luftstraßen und Verkehrsregeln und weichen Wetter, militärischen Aktivitäten und, seit 2022 zunehmend, Konfliktzonen und Lufträumen aus, die sie nicht befliegen dürfen. Die geflogene Route ist länger, und was das an Zeit und Treibstoff kostet, hängt ebenso vom Wind ab wie von der Distanz.

Spezialisierte Anbieter pflegen die Daten hinter all dem. Sie selbst aufzubauen hätte bedeutet, auf dem Weg zum Charter-Marktplatz erst ein Datenunternehmen zu werden, also hat der Kunde sie gekauft, und ich würde dasselbe raten. Was wir gebaut haben, ist alles, was die Route nicht weiß.

Eine Anfrage, Schritt für Schritt

Verfolgen wir eine Anfrage durch die Engine. Flugzeuge und Zahlen sind hier illustrativ, gewählt, um die Mechanik zu zeigen, und nicht einer echten Buchung entnommen.

Der Broker fragt nach sechs Plätzen, Dubai nach London, Dienstagmorgen. Der nächstgelegene passende Jet ist zuletzt in Genf gelandet. Um die Reise zu verkaufen, muss er zuerst leer nach Dubai fliegen, rund 4.800 km. Dann fliegt er die Passagiere nach London. Dann fliegt er, sofern ihn niemand weiterbucht, leer zurück nach Genf.

Das sind drei Arten von Flügen, und die Engine modelliert alle drei: einen Positionierungsflug zum Abflughafen, einen oder mehrere Passagierflüge und einen Rückführungsflug zur Basis. Jede Berechnung (Zeit, Dienstzeit der Crew und Kosten) läuft über die ganze Kette. Hier ist die Leerstrecke fast so lang wie die verkaufte Reise, was im Charter normal ist und genau das, was die Serviette weglässt.

Als Nächstes die Dienstzeit. Positionierung plus London-Flug sind rund dreizehn Stunden in der Luft, bevor jemand Vorflugkontrollen oder den Turnaround in Dubai mitzählt. Das ist mehr, als eine normale Zwei-Piloten-Crew in einer Dienstperiode arbeiten darf. Ein naives System würde den Jet ablehnen. Unseres versucht es noch einmal ohne den Rückführungsflug: immer noch zu lang. Dann ohne den Positionierungsflug, das heißt, er wird am Vortag geflogen. Der Dienst am Dienstag besteht jetzt nur noch aus London und dem kurzen Sprung nach Hause, und er passt. Der Broker sieht eine Option, die sagt: „Ja, wenn der Jet am Montag nach Dubai kommt.“

Dann das Geld. Die Route kommt mit den Ländern zurück, die sie überquert, und jedes stellt seinen Luftraum in Rechnung. Das Tagesminimum des Betreibers, Flughafen- und Abfertigungsgebühren, Catering und Crew-Kosten werden pro Flug addiert. Der Broker erhält eine bepreiste Option mit ihren Warnungen, neben den anderen Jets, die dieselben Prüfungen überstanden haben.


Wo steht der Jet?

„Wo wird dieses Flugzeug am Dienstagmorgen sein?“ klingt nach einer Kalenderfrage. Es ist eine Preisfrage, denn die Antwort entscheidet, wie lang die Leerflüge sind.

Wir haben sie aus zwei Quellen beantwortet, die sich regelmäßig widersprechen. Die eine ist die eigene Angebotshistorie des Marktplatzes. Die andere ist das Planungssystem des Betreibers, FL3XX oder Leon, das jeder Betreiber mit eigenen Zugangsdaten anbindet und das Flüge kennt, die der Marktplatz nie verkauft hat. Die Engine nimmt die spätere der beiden letzten Ankünfte vor dem gewünschten Abflug. Ist diese Ankunft älter als drei Monate, verwirft die Engine die Position, statt veralteten Daten zu trauen. Wenn keine Quelle etwas weiß, greift sie auf die nächstgelegene temporäre Basis zurück, die für das Flugzeug hinterlegt ist, oder auf seine Hauptbasis.

Wenn der Positionierungsflug länger ausfällt als der verkaufte Flug, hängt die Engine eine Warnung an. Sie ist ein Anstoß für den Broker, zu bestätigen, wo das Flugzeug wirklich steht, den Betreiber um eine bessere Einweg-Lösung zu bitten oder nach einem näheren Jet zu suchen. Die günstigste Option ist oft der Jet, der schon in der Nähe des Abflughafens steht, oder einer, der die Strecke ohnehin fast geflogen wäre.

Die Engine ist außerdem in beide Richtungen an die Systeme der Betreiber angebunden. Die Flugpläne aus FL3XX und Leon werden alle fünfzehn Minuten synchronisiert, ein gebuchtes Angebot erscheint als Trip im System des Betreibers, und ein storniertes verschwindet daraus wieder. Ein Betreiber kann über den Marktplatz verkaufen, ohne zu ändern, wie er seine Flugzeuge betreibt.

Wohin darf er fliegen?

Zwei Flugzeuge, die nebeneinander parken, gleiches Modell, gleiche Kabine, können unterschiedlichen Einschränkungen unterliegen, wohin sie fliegen dürfen. Registrierung, Nationalität und Lizenz des Betreibers, Versicherung, Sanktionsrisiken und die eigenen Vorgaben des Eigentümers können jeweils einen Teil der Landkarte sperren, und das für jedes Flugzeug anders.

Deshalb haben wir Einschränkungen in zwei Ebenen modelliert: ein Kennzeichen am Länderdatensatz für Lufträume, die für alle gesperrt sind, und eine Liste gesperrter Länder an jedem Flugzeug, geführt neben seinen Spezifikationen und Preisen. Bei der Suche kombiniert die Engine beides und übergibt es dem Routing-Dienst, sodass die zurückgelieferte Route meidet, was dieses Flugzeug meiden muss. Die Modellierung pro Flugzeug war die Entscheidung, auf die es ankam. Eine gemeinsame Liste wäre für jedes Flugzeug falsch gewesen, dessen Einschränkungen von denen der anderen abweichen.

Es geht darum, dass ein Broker keinen Jet anbietet, der die Reise in der berechneten Form nicht fliegen kann. Dieser Fehler kostet doppelt: einmal an verlorener Zeit und noch einmal an Glaubwürdigkeit bei einem Kunden, der es später erfährt.

Das Modell arbeitet auf Länderebene. Echte Einschränkungen können enger sein, auf eine Flugsicherungsregion, ein Höhenband oder einen Zeitraum begrenzt. Der Routing-Anbieter unterstützt diese feineren Schnitte, und das Design lässt Raum, sie zu übernehmen.


Wann ist die Crew am Limit?

Die Dienstzeit der Crew war der am schwersten richtig zu machende Teil des Systems und die einzige echte Suche, die die Engine selbst durchführt.

Piloten dürfen nur begrenzt lange arbeiten. Wie lange, hängt davon ab, wann sie zum Dienst erschienen sind, wie viele Flüge sie fliegen und wie ihre jüngste Dienst- und Ruhezeitgeschichte aussieht. Verschiedene Behörden setzen die Grenzen unterschiedlich, und das genehmigte Regelwerk des Betreibers entscheidet, welche gelten. Die Engine wählt ein Regelwerk anhand des Registrierungslandes des Flugzeugs als Arbeitsnäherung für dieses Regelwerk und implementiert zwei, ein europäisches und ein amerikanisches.

Das europäische Modell ist eine Tabelle: fünf Bänder der lokalen Dienstbeginnzeit, gekreuzt mit der Zahl der Flüge im Dienst. Ein später Dienstbeginn in der Nacht und zusätzliche Flüge senken beide die Obergrenze. Das amerikanische Modell hat, so wie die Engine es vereinfacht, eine einzige Grenze, die nur von der lokalen Uhrzeit des Dienstbeginns abhängt. Beide sind Vorprüfungsmodelle: Das Crew-Steuerungssystem des Betreibers bleibt maßgeblich dafür, was eine Crew fliegen darf.

Um eines davon anzuwenden, muss man zuerst die Dienstperiode aufbauen, und eine Dienstperiode besteht größtenteils nicht aus Fliegen. Wir haben acht Arten nicht fliegender Zeit modelliert, von Vorflugkontrollen bis zu den beiden Enden einer Crew-Ruhezeit. Lücken zwischen Flügen zählen je nach Länge und Regelwerk als Turnaround, Bodenzeit, Layover oder Ruhezeit, und jede Einordnung verändert die Rechnung. Eine einzige falsche Einordnung kann eine unzulässige Reise zulässig aussehen lassen, und ein Broker würde sie anbieten.

Eine Reiseroute über dem Limit kann nicht wie geplant geflogen werden, aber sie kann trotzdem verkäuflich sein. Eine andere Crew, ein zusätzlicher Pilot, ein Übernachtungsstopp oder ein anderes Flugzeug könnten sie retten. Sie abzulehnen ist die naheliegende technische Reaktion und die falsche kaufmännische, denn der Teil, der eine Reise über das Limit treibt, ist meist nicht der, der dem Kunden wichtig ist.

Deshalb baut die Engine, wie im Genfer Beispiel, eine Dienstperiode, die ihr Limit überschreitet, ohne den Rückführungsflug neu auf und prüft erneut. Dann ohne den Positionierungsflug. Dann ohne beide. Jeder Neuaufbau berechnet die Obergrenze ebenso neu wie die Dienstzeit, denn das Entfernen eines Flugs ändert die Zahl der Flüge, und die Zahl der Flüge verschiebt die Obergrenze. Die Reihenfolge ist eine kaufmännische Regel, als Code geschrieben: Die Leerflüge können sich verschieben, die des Kunden nicht. Passt eine Variante, wird sie bepreist und zurückgegeben. Passt keine, kommt die Option mit einer Markierung zurück, statt stillschweigend zu verschwinden, und der Broker entscheidet, was er den Betreiber fragt.


Hundert Jets durchsuchen, ohne hundert Routen zu bezahlen

Der Routing-Anbieter rechnet pro Aufruf ab. Jedes Flugzeug bei jeder Anfrage über ihn zu bepreisen, sieht in einer Demo gut aus und macht aus jeder Suche eine Rechnung, deshalb läuft die Suche in zwei Durchgängen.

Zuerst entfernt eine Datenbankabfrage Flugzeuge, die inaktiv, zu klein oder zur Abflugzeit in der Luft sind. Der erste Durchgang schätzt dann jeden verbleibenden Kandidaten intern, ohne Anbieteraufruf: Luftliniendistanz, die eigene Reisegeschwindigkeit des Flugzeugs, seine Rollzeiten. Er durchläuft dieselbe Reiseroute- und Dienstzeitlogik wie die vollständige Berechnung, darf ein Flugzeug aber nur aus einem einzigen Grund ablehnen: Sein Flugplan kollidiert bereits mit der Reise. Probleme mit Dienstzeit und Positionierung werden markiert, nicht herausgefiltert, weil eine Luftlinienschätzung zu grob ist, um darüber zu urteilen. Für eine Kollision ist sie gut genug, weil sie zu kurz schätzt: Echte Routen sind länger als die Luftlinie, also findet die Schätzung das Flugzeug eher frei als belegt, und eine Kollision, die sie doch findet, ist wahrscheinlich echt.

Nur die Übriggebliebenen gehen an den kostenpflichtigen Dienst, für Luftstraßen-Routing, eine windkorrigierte Flugzeit und Hinweise auf Tankstopps. Beide Durchgänge laufen parallel über die Kandidaten und enden unabhängig voneinander, sodass eine fehlgeschlagene Berechnung oder ein Timeout beim Anbieter eine Option entfernt, nicht die ganze Suche.

Den günstigen Durchgang zu überstehen garantiert nicht, den teuren zu überstehen. Die echte Route kann einen Tankstopp erfordern, der Zeit, Kosten und einen weiteren Flug hinzufügt, und ein weiterer Flug senkt die Obergrenze der Crew. Wo der Routing-Dienst einen Stopp für nötig hält, gibt die Engine den vorgeschlagenen Stopp zurück, statt das Flugzeug zu verwerfen: „Mit diesem Jet nicht nonstop, aber hier würde er landen.“

Was die Reise wirklich kostet

Länder verlangen von Flugzeugen Gebühren für das Überqueren ihres Luftraums, nach Gewicht und nach der darin geflogenen Strecke. Ein Umweg um eine gesperrte Region kostet Treibstoff, und der Luftraum, den er durchquert, kann mehr berechnen als der, den er umgangen hat.

Die Engine schickt die gerouteten Wegpunkte jedes Flugs und das maximale Startgewicht des Flugzeugs an den Gebührendienst von RDC Aviation und erhält eine Schätzung pro Land zurück, mit der jeweils berechneten Strecke. Sie weist diese Gebühren aus; sie wählt keine Routen danach. Die Route ist weiterhin die des Anbieters, geformt durch die Einschränkungen des Flugzeugs. Was der Broker gewinnt: Er sieht Einschränkungen und Gebühren auf demselben Bildschirm, bevor ein Angebot hinausgeht.

Die größeren Kosten entstehen oft gar nicht in der Luft. Viele Betreiber verlangen ein Tagesminimum, definieren es aber unterschiedlich: Stunden vom Anlassen bis zum Abstellen der Triebwerke, Stunden in der Luft, gebuchte Tage des Flugzeugs oder ein Durchschnitt über die Reiseroute. Ein kurzer Sprung, der einen Jet drei Tage bindet, kann weit mehr kosten als seine Zeit in der Luft. Die Engine implementiert eine dieser Definitionen. Sie erfasst die Nutzung pro Kalendertag über die ganze Reiseroute, Leerflüge eingeschlossen, vergleicht den Tagesdurchschnitt mit dem Minimum des Betreibers und wendet das Minimum an, wo die Reise darunter bleibt. Flughafen- und Abfertigungsgebühren, nach Fluglänge gestaffeltes Catering, Layover- und Crew-Kosten werden pro Flug addiert und pro Währung summiert. Alles, was die Engine nicht wissen kann, von Kriegsrisikoversicherung bis zu Enteisung und Umleitung, nennt das Angebot ausdrücklich und schließt es aus.

Die zwanzig Minuten, die ein klügerer Routing-Algorithmus vielleicht einspart, sind also oft nichts wert. Was die Rechnung bewegt, ist die Form des Flugplans: wie weit der Jet leer fliegt und wie viele Tage er gebunden ist.


Was sich über die Luftfahrt hinaus übertragen lässt

Keine der Technologien ist exotisch: TypeScript, eine relationale Datenbank, Serverless-Funktionen auf AWS. Was die Engine funktionieren ließ, waren einige Entscheidungen, die für jedes Geschäft gelten, in dem Regeln pro Asset variieren und die teure Antwort von jemand anderem kommt.

Hängen Sie die Regeln an das, wozu sie gehören: Einschränkungen pro Flugzeug, Dienstzeitregeln pro Registrierung, Minima pro Betreiber. Eine globale Einstellung wäre für den Großteil der Flotte falsch gewesen.

Markieren statt ablehnen, wenn ein Mensch es lösen kann. Eine Reise über dem Limit, ein langer Positionierungsflug, ein nötiger Tankstopp: Jedes davon kommt als Option mit Warnung zurück, weil Broker und Betreiber oft lösen können, was die Software nicht kann.

Machen Sie die kostenlose Prüfung konservativ und die kostenpflichtige selten. Der günstige Durchgang lehnt nur ab, was er sicher beurteilen kann, und markiert alles andere für den kostenpflichtigen Durchgang oder den Broker.

Halten Sie Anbieterdaten und eigene Regeln getrennt. Die Anbieter liefern Geometrie und Gebühren. Position, Einschränkungen, Crew-Regeln und die Zusammenstellung der Kosten liegen in unserem Modell, und jeder Anbieteraufruf erhält nur, was das Modell bereits entschieden hat.

Zurück zum Dienstag. Sechs Personen wollen von Dubai nach London fliegen, und die Serviette sagte sechs Stunden. Die Engine weiß, dass der Jet in Genf steht, dass er am Montag nach Dubai fliegen muss und welche Länder er auf dem Weg überqueren darf. Das kommt als bepreiste Option zurück, die der Betreiber genehmigen kann.

← Blog