La route était la partie facile : construire un moteur de recherche pour l'affrètement de jets privés

La route était la partie facile : construire un moteur de recherche pour l'affrètement de jets privés

Où se trouve chaque jet, où il a le droit de voler, quand son équipage arrive en bout de service, et ce que le voyage coûte vraiment.


« Combien pour faire voler six personnes de Dubaï à Londres mardi ? »

Cela ressemble à une simple consultation. Dubaï–Londres, c'est environ 5 500 km à vol d'oiseau sur le globe, un jet d'affaires long-courrier croise à environ 900 km/h, disons donc six heures. N'importe quel développeur pourrait le griffonner sur une serviette en cinq minutes.

La serviette a déjà une heure de retard : vers l'ouest, face aux vents dominants et le long de vraies voies aériennes, le vol prend plutôt sept heures. Et c'est dans les questions plus difficiles que se trouve l'argent. Où est le jet mardi matin ? A-t-il le droit de traverser l'espace aérien en chemin ? Son équipage sera-t-il encore dans les limites légales à l'atterrissage ? Que coûte le voyage une fois les vols à vide comptés ?

Nous avons construit la recherche qui répond à tout cela, en 2024, pour une place de marché d'affrètement de jets privés basée à Dubaï. La route elle-même s'est révélée être un simple appel à un fournisseur. Le reste du problème tenait dans ce que la route ne sait pas, et rien de tout cela ne rentre dans une seule « meilleure route ». On ne peut pas échanger une violation des limites de service de l'équipage contre une économie de carburant, à aucun taux de change. Le moteur n'optimise donc pas une réponse unique. Il applique les limites strictes, chiffre ce qui reste, et remet au courtier un ensemble d'options chiffrées, avertissements compris.


Cent avions, cent règlements

Le client est une place de marché. Clients et courtiers y font leurs recherches ; les avions appartiennent à des opérateurs tiers, les compagnies aériennes agréées du monde du jet privé. Les clients sont des voyageurs privés, des départements aviation d'entreprises, des family offices et les assistants qui réservent pour eux. Ils paient cinq ou six chiffres par voyage et veulent une réponse pendant qu'ils sont encore au téléphone.

Pour un opérateur, un jet immobilisé ne rapporte rien, mais chaque heure de vol supplémentaire entame les réserves de maintenance, les cycles moteur et l'accès du propriétaire à son propre avion. Le voyage qui vaut la peine s'insère dans le planning et reste rentable une fois comptés les vols à vide vers la mission et retour.

La place de marché référence plus d'une centaine d'avions d'opérateurs vérifiés et permet à un courtier de les interroger tous à la fois. Ce n'est pas une flotte au sens uniforme du terme. Chaque avion a ses propres performances, bases, disponibilités, tarifs et restrictions. Certaines règles appartiennent à l'avion ; d'autres à l'opérateur et à son certificat de transporteur aérien (AOC, la licence pour transporter des passagers payants), à l'équipage, au client ou à la mission. Presque rien d'important ne pouvait être un paramètre global, et presque tous les problèmes difficiles décrits ci-dessous y ramènent.

Une frontière a tenu de bout en bout : seul l'opérateur peut approuver un vol et confirmer un prix ferme. Le moteur filtre et estime ; la régulation des vols et la gestion des équipages de l'opérateur ont le dernier mot.

Le client est venu nous voir avec l'idée, des maquettes d'un courtier interrogeant une flotte et recevant des options chiffrées, et les services externes qu'il avait choisis : AviaPages pour le calcul des routes, RDC Aviation pour les redevances de survol et d'aéroport, AirportData pour les aéroports et les agents d'assistance au sol, et les deux systèmes de planification qu'utilisent ses opérateurs, FL3XX et Leon. Aucune des maquettes ne montrait de tableau des temps de service, de liste de pays interdits ni le dernier aéroport connu d'un jet.


La route est un appel au fournisseur

La ligne la plus courte entre deux aéroports n'est pas la route que l'on vole. Les avions suivent les voies aériennes et les règles de la circulation aérienne, et contournent la météo, l'activité militaire et, de plus en plus depuis 2022, les zones de conflit et les espaces aériens où ils n'ont pas le droit d'entrer. La route volée est plus longue, et ce qu'elle coûte en temps et en carburant dépend autant du vent que de la distance.

Des fournisseurs spécialisés entretiennent les données derrière tout cela. Les construire en interne aurait signifié devenir une entreprise de données en chemin vers une place de marché d'affrètement ; le client les a donc achetées, et je conseillerais la même chose. Ce que nous avons construit, c'est tout ce que la route ne sait pas.

Une demande, de bout en bout

Suivons une demande à travers le moteur. Les avions et les chiffres sont ici illustratifs, choisis pour montrer la mécanique, et non tirés d'une réservation réelle.

Le courtier demande six places, Dubaï–Londres, mardi matin. Le jet adapté le plus proche s'est posé en dernier à Genève. Pour vendre le voyage, il doit d'abord voler à vide jusqu'à Dubaï, environ 4 800 km. Puis il emmène les passagers à Londres. Puis, à moins que quelqu'un ne le réserve pour la suite, il rentre à vide à Genève.

Cela fait trois types de vols, et le moteur modélise les trois : un vol de mise en place vers l'aéroport de départ, un ou plusieurs vols commerciaux avec passagers, et un vol de retour vers la base. Chaque calcul (temps, service de l'équipage et coût) porte sur toute la chaîne. Ici, le vol à vide est presque aussi long que le voyage vendu, ce qui est normal dans l'affrètement et correspond exactement à ce que la serviette oublie.

Ensuite, le temps de service. Mise en place plus vol vers Londres, c'est environ treize heures en l'air avant même de compter les contrôles avant vol ou l'escale à Dubaï. C'est au-delà de ce qu'un équipage standard de deux pilotes peut travailler en une période de service. Un système naïf rejetterait le jet. Le nôtre réessaie sans le vol de retour : toujours trop long. Puis sans le vol de mise en place, ce qui revient à l'effectuer la veille. Le service de mardi se limite alors à Londres et au court saut de retour, et il passe. Le courtier voit une option qui dit : « oui, si le jet vient à Dubaï lundi ».

Puis l'argent. La route revient avec les pays qu'elle traverse, et chacun facture son espace aérien. Le minimum journalier de l'opérateur, les redevances d'aéroport et d'assistance, la restauration et les frais d'équipage sont ajoutés par vol. Le courtier reçoit une option chiffrée avec ses avertissements, à côté des autres jets qui ont passé les mêmes contrôles.


Où est le jet ?

« Où sera cet avion mardi matin ? » ressemble à une question de calendrier. C'est une question de prix, car la réponse décide de la longueur des vols à vide.

Nous y avons répondu à partir de deux sources qui se contredisent régulièrement. L'une est l'historique des devis de la place de marché elle-même. L'autre est le système de planification de l'opérateur, FL3XX ou Leon, que chaque opérateur connecte avec ses propres identifiants, et qui connaît des vols que la place de marché n'a jamais vendus. Le moteur retient la plus récente des deux dernières arrivées avant le départ demandé. Si cette arrivée date de plus de trois mois, le moteur écarte la position plutôt que de se fier à des données périmées. Quand aucune des deux sources ne sait, il se rabat sur la base temporaire la plus proche enregistrée pour l'avion, ou sur sa base principale.

Quand le vol de mise en place s'avère plus long que le vol vendu, le moteur ajoute un avertissement. C'est une invitation pour le courtier à confirmer où se trouve réellement l'avion, à demander à l'opérateur un meilleur arrangement en aller simple, ou à chercher un jet plus proche. L'option la moins chère est souvent le jet déjà stationné près de l'aéroport de départ, ou celui qui faisait presque le trajet de toute façon.

Le moteur se branche aussi sur les systèmes des opérateurs, dans les deux sens. Les plannings FL3XX et Leon se synchronisent toutes les quinze minutes, un devis réservé apparaît comme un voyage dans le système de l'opérateur, et un devis annulé en disparaît. Un opérateur peut vendre via la place de marché sans changer la façon dont il exploite ses avions.


Où a-t-il le droit de voler ?

Deux avions garés côte à côte, même modèle, même cabine, peuvent avoir des limites différentes quant aux endroits où ils peuvent aller. L'immatriculation, la nationalité et la licence de l'opérateur, l'assurance, l'exposition aux sanctions et la politique propre du propriétaire peuvent chacune fermer une partie de la carte, différemment pour chaque avion.

Nous avons donc modélisé les restrictions sur deux niveaux : un indicateur sur la fiche du pays pour un espace aérien fermé à tous, et une liste de pays interdits sur chaque avion, tenue à côté de ses caractéristiques et de ses tarifs. Au moment de la recherche, le moteur combine les deux et les transmet au service de routage, de sorte que la route renvoyée évite ce que cet avion doit éviter. Modéliser par avion a été la décision déterminante. Une liste commune aurait été fausse pour chaque avion dont les limites diffèrent des autres.

Le but est d'empêcher un courtier de proposer un jet qui ne peut pas faire le voyage tel qu'il est routé. Cette erreur coûte deux fois : une fois en temps perdu, et une seconde fois en crédibilité auprès d'un client qui l'apprend plus tard.

Le modèle travaille au niveau du pays. Les restrictions réelles peuvent être plus fines, limitées à une région de contrôle aérien, une tranche d'altitude ou une période. Le fournisseur de routage prend en charge ces découpages plus fins, et la conception laisse la place pour les adopter.


Quand l'équipage arrive-t-il en bout de service ?

Le temps de service de l'équipage a été la partie du système la plus difficile à faire juste, et la seule vraie recherche que le moteur effectue lui-même.

Les pilotes ne peuvent travailler que pendant un temps limité. Combien de temps dépend de l'heure à laquelle ils ont pris leur service, du nombre de vols qu'ils effectuent, et de leur historique récent de service et de repos. Les différentes autorités fixent les limites différemment, et le régime approuvé de l'opérateur décide lesquelles s'appliquent. Le moteur choisit un jeu de règles d'après le pays d'immatriculation de l'avion, comme approximation pratique de ce régime, et en implémente deux, européen et américain.

Le modèle européen est un tableau : cinq tranches d'heure locale de prise de service croisées avec le nombre de vols dans le service. Une prise de service tard dans la nuit et des vols supplémentaires abaissent tous deux le plafond. Le modèle américain, tel que le moteur le simplifie, a une limite unique qui ne dépend que de l'heure locale de début de service. Les deux sont des modèles de présélection : le système de gestion des équipages de l'opérateur reste l'autorité sur ce qu'un équipage peut voler.

Appliquer l'un ou l'autre suppose d'abord de construire la période de service, et une période de service, ce n'est pas surtout du vol. Nous avons modélisé huit types de temps hors vol, des contrôles avant vol aux deux extrémités d'un repos d'équipage. Les intervalles entre les vols comptent comme escale, temps au sol, découcher ou repos selon leur durée et le jeu de règles, et chaque classification change le calcul. Une seule classification erronée peut faire paraître légal un voyage illégal, et un courtier le proposerait.

Un itinéraire au-delà de la limite ne peut pas être volé tel que prévu, mais il peut rester vendable. Un autre équipage, un pilote supplémentaire, une escale de nuit ou un autre avion pourraient le régler. Le rejeter est la réponse technique évidente et la mauvaise réponse commerciale, car la partie qui fait dépasser la limite n'est généralement pas celle qui intéresse le client.

Alors, comme dans l'exemple de Genève, quand une période de service dépasse sa limite, le moteur la reconstruit sans le vol de retour et teste à nouveau. Puis sans le vol de mise en place. Puis sans les deux. Chaque reconstruction recalcule le plafond autant que le temps de service, car retirer un vol change le nombre de vols, et le nombre de vols déplace le plafond. L'ordre est une règle commerciale écrite en code : les vols à vide peuvent bouger, ceux du client non. Si une version passe, elle est chiffrée et renvoyée. Si aucune ne passe, l'option revient signalée au lieu d'être silencieusement écartée, et le courtier décide quoi demander à l'opérateur.

Interroger cent jets sans payer cent routes

Le fournisseur de routage facture à l'appel. Chiffrer chaque avion chez lui à chaque demande passe très bien en démo et transforme chaque recherche en facture ; la recherche se fait donc en deux passes.

Une requête en base retire d'abord les avions inactifs, trop petits ou en vol à l'heure du départ. La première passe estime ensuite chaque candidat restant en interne, sans appel au fournisseur : distance à vol d'oiseau, vitesse de croisière propre à l'avion, ses temps de roulage. Elle applique la même logique d'itinéraire et de temps de service que le calcul complet, mais elle ne peut rejeter un avion que pour une seule raison : son planning entre déjà en conflit avec le voyage. Les problèmes de temps de service et de mise en place sont signalés, pas filtrés, car une estimation à vol d'oiseau est trop grossière pour en juger. Elle suffit pour juger d'un conflit, parce qu'elle se trompe par défaut : les vraies routes sont plus longues que la ligne droite, donc l'estimation tend à trouver l'avion libre plutôt qu'occupé, et un conflit qu'elle trouve malgré tout est probablement réel.

Seuls les survivants passent au service payant, pour le routage par voies aériennes, un temps de vol corrigé du vent et des conseils sur les escales de ravitaillement. Les deux passes traitent les candidats en parallèle et se terminent indépendamment, de sorte qu'un calcul raté ou un délai dépassé chez le fournisseur retire une option, pas toute la recherche.

Survivre à la passe bon marché ne garantit pas de survivre à la passe coûteuse. La vraie route peut exiger une escale de ravitaillement, qui ajoute du temps, du coût et un vol de plus, et un vol de plus abaisse le plafond de l'équipage. Quand le service de routage indique qu'une escale est nécessaire, le moteur renvoie l'escale proposée au lieu d'écarter l'avion : « pas sans escale avec ce jet, mais voici où il se poserait. »


Ce que le voyage coûte vraiment

Les pays font payer aux avions la traversée de leur espace aérien, selon le poids et la distance parcourue. Un détour autour d'une région fermée coûte du carburant, et l'espace aérien qu'il traverse peut facturer plus que celui qu'il a évité.

Le moteur envoie les points de route de chaque vol et la masse maximale au décollage de l'avion au service de redevances de RDC Aviation, et reçoit une estimation par pays, avec la distance facturée dans chacun. Il affiche ces redevances ; il ne choisit pas les routes en fonction d'elles. La route reste celle du fournisseur, façonnée par les restrictions de l'avion. Ce que le courtier y gagne, c'est de voir restrictions et redevances sur le même écran, avant qu'un devis ne parte.

Le coût le plus important n'est souvent pas en l'air du tout. Beaucoup d'opérateurs facturent un minimum journalier, mais le définissent différemment : heures entre démarrage et arrêt des moteurs, heures en l'air, jours de réservation de l'avion, ou moyenne sur l'itinéraire. Un court saut qui immobilise un jet pendant trois jours peut coûter bien plus que son temps en l'air. Le moteur implémente l'une de ces définitions. Il suit l'utilisation par jour calendaire sur tout l'itinéraire, vols à vide compris, compare la moyenne journalière au minimum de l'opérateur, et applique le minimum quand le voyage reste en dessous. Redevances d'aéroport et d'assistance, restauration par tranche de durée de vol, frais de découcher et d'équipage sont ajoutés par vol et totalisés par devise. Tout ce que le moteur ne peut pas savoir, de l'assurance risque de guerre au dégivrage et aux déroutements, le devis le nomme et l'exclut.

Les vingt minutes qu'un algorithme de routage plus astucieux pourrait gagner ne valent donc souvent rien. Ce qui fait bouger la facture, c'est la forme du planning : la distance que le jet parcourt à vide, et le nombre de jours pendant lesquels il est immobilisé.


Ce qui vaut au-delà de l'aviation

Aucune des technologies n'est exotique : TypeScript, une base de données relationnelle, des fonctions serverless sur AWS. Ce qui a fait fonctionner le moteur, ce sont quelques décisions qui valent pour toute activité où les règles diffèrent selon l'actif et où la réponse coûteuse vient de quelqu'un d'autre.

Placez les règles sur ce à quoi elles appartiennent : restrictions par avion, règles de service par immatriculation, minimums par opérateur. Un paramètre global aurait été faux pour la plus grande partie de la flotte.

Signalez au lieu de rejeter quand un humain peut régler le problème. Un voyage au-delà de la limite, un long vol de mise en place, une escale de ravitaillement nécessaire : chacun revient comme une option assortie d'un avertissement, car le courtier et l'opérateur peuvent souvent résoudre ce que le logiciel ne peut pas.

Rendez la vérification gratuite prudente et la vérification payante rare. La passe bon marché ne rejette que ce qu'elle peut juger sans risque, et signale tout le reste pour la passe payante ou le courtier.

Séparez les données des fournisseurs et vos propres règles. Les fournisseurs apportent la géométrie et les redevances. Position, restrictions, règles d'équipage et assemblage des coûts vivent dans notre modèle, et chaque appel au fournisseur ne reçoit que ce que le modèle a déjà décidé.

Retour à mardi. Six personnes veulent aller de Dubaï à Londres, et la serviette disait six heures. Le moteur sait que le jet est à Genève, qu'il doit voler jusqu'à Dubaï lundi, et quels pays il peut traverser en chemin. Cela revient sous la forme d'une option chiffrée que l'opérateur peut approuver.


← Blog