Mon challenge
Cela fait bien 3 ans que je passe la moitié de mon temps à créer des algorithmes pour automatiser l’ouverture le matin dans les hôtels. Venu fraichement du monde de la R&D je pensais le problème facile à résoudre…jusqu’à que je comprenne que le problème est bien plus complexe qu’il n’en a l’air….
Alors c’est vrai que quand le génie ChatGPT a pointé du nez je me suis rué pour voir s’il faisait mieux que moi. Je ne dis pas mieux que les gouvernant.e.s car ça c’est impossible (😉) mais au moins plus vite !
Le PMS Opera (et d’autres bien sur) sait faire une ouverture me direz vous… je répondrais que c’est en dessous de tout : une répartition linéaire bête et méchante.
J’en sais quelque chose : mon algorithme s’est fait insulté tellement de fois que j’ai commencé à comprendre qu’il y avait d’abord un problème de définition.
Pas si simple
Au début ça commence par : bah c’est simple il faut juste donner 12 chambres par femme de chambre.
Et puis ça se complique : ah, mais il faut respecter sa section et aussi ses crédits. Très bien… Mais il faut maximum 2 étages sinon il faut retirer des crédits…ok…et puis aussi si jamais il n’y a pas assez de crédits/chambres dans la section il faut puiser dans la section adjacente…qui d’ailleurs pas toujours la plus logique.
A chaque fois, je rajoute des contraintes à mon Solver…et ce n’est jamais assez : ah mais il faut équilibrer les départs (plus longs) avec les arrivées. J’avais oublié qu’il faut donner les chambres propres mais ne pas les compter tout de même ! et la liste s’allonge
Un jour je publierais une liste des contraintes par pays… personne n’est d’accord ! J’en ai compilé une liste de 200 contraintes…
J’ai fini par mettre en place un algorithme de type gestion de contraintes linéaire. Donner un poids à chaque contrainte qui peuvent être mutuellement exclusive : changer d’étage ne vaut le coup que si on a au moins 2 chambres, si pas assez de crédit alors rajouter un étage mais retirer des crédits…
La métaphore des taches
C’est un peu comme la métaphore des taches : si tu commences par les petites taches, il ne restera pas de place pour les grosses tâches :
Il était une fois… un expert renommé qui tenait une conférence sur la meilleure façon de planifier son temps.
« Je vous propose une expérience » dit-il à son public attentif.
Il prit un grand bocal de verre et le remplit à ras bord de gros cailloux de la taille d’une balle de tennis. Puis il demanda à son public : « Est-ce que ce bocal est plein ? » Tout le monde répondit : « Oui ». « Bien », répondit-il « nous allons voir. »
C’est alors qu’il sortit un sac contenant des graviers et le versa dans le bocal. Les graviers se faufilèrent entre les cailloux et remplirent le bocal. À nouveau, il posa la question : « Est-ce que le bocal est plein ? ». Le public, commençant à comprendre, répondit : « Non. »
Il prit ensuite un sac de sable qu’il versa dans le bocal. Le sable, à son tour, se faufila entre les cailloux et les graviers jusqu’à remplir le bocal.
Il fit de même avec la bouteille d’eau qui était posée sur sa table et remplit à nouveau le bocal.
« Quel enseignement pouvons-nous tirer de cette expérience ? » demanda-t-il à son public. « Cette expérience montre que si l’on ne met pas les gros cailloux en premier dans le bocal, on ne pourra jamais les mettre tous. Il faut donc commencer par les gros cailloux avant de s’attaquer aux petits. »
(Les gros cailloux sont nos priorités, les graviers, le sable et l’eau sont les tâches de moindre importance que nous avons tendance à faire passer en premier. Une fois la journée bien remplie de graviers, de sable et d’eau, impossible de faire rentrer nos gros cailloux.)
Cette expérience ne peut pas marcher pour l’ouverture : on arrive vite à une impasse ! Si on commence par assigner les chambres par celles qui sont évidente, dans l’ordre des contraintes on arrive vite à une impasse. Il faut faire du Sudoku pour arriver à une solution viable
L’expérience
J’ai donné à ChatGPT une liste de 70 chambres dans un tableau qui ressemble à ça :
C’est parti :
il beug, un peu, se reprend (la classe tout de même) puis:
Mais il ne respecte pas les crédits ! il en donne 600 ! Impossible car derrière ce calcul informatique il y a des être humains qui travaillent.
Et plus je lui demande d’avancer plus il échoue.
Pour information, mon algorithme de calcul s’en sort beaucoup mieux. Si cela intéresse quelqu’un je pourrais en dire plus dans un prochain article. :
Il donne bien 400 crédits tout en respectant les contraintes !
Le mot de la fin
Bon, l’honneur est sauf et ChatGPT ne sait pas encore faire mieux que l’humain. L’algorithme utilisé par Roomchecking est très “métier” donc il est normal qu’il fasse mieux… mais cela me rassure.
Pour être fair j’ai demandé à ChatGPT :
J’ai d’autres expériences que je voudrais partager. N’hésitez pas à me dire si vous voulez que je teste d’autres choses jweizman@roomchecking.com