[ALGO] Répartition possible de chambres pour site de voyage

WRInaute occasionnel
Bonjour à tous,

Petit défi algo !

Je suis en train de développer un site de voyage mutualisé pour un client, et je suis en face d'un petit défi algorithmique intéressant que je n'ai toujours pas résolu !

Pour un produit, j'ai une liste de types de chambres disponible. Par exemple :
- chambre 2 places avec lit double (donc 2 personnes)
- chambre 2 places avec 2 lits simples (2 personnes également)
- chambre individuel (1 personne)
- chambre 3 places

Un utilisateur qui passe une commande indique alors un nombre de participants (4 adultes + 2 enfant.... 2 adultes + 1 enfant)
L'objectif de cet alog est de ressortir toutes les combinaisons possible de chambre :

Exemple : J'ai 2 adultes et 1 enfant avec les types de chambre listés plus haut. L'algo devrait me ressortir :
- 1 chambre 2 places lit double + 1 chambre individuelle
- 1 chambre 2 places lits simples + 1 chambre individuelle
- 1 chambre 3 places
- 3 chambres individuelles

Vous comprenez le défi ? Quelqu'un a une piste ?
Ca fait 2 jours que j'y réfléchi et je stagne !

Merci pour votre future aide
 
WRInaute accro
p0k3 a dit:
Exemple : J'ai 2 adultes et 1 enfant avec les types de chambre listés plus haut. L'algo devrait me ressortir :
- 1 chambre 2 places lit double + 1 chambre individuelle
Et qu'est-ce qui te fait dire que les 2 adultes veulent dormir dans le même lit ? :D
 
WRInaute accro
...et qu'est-ce qui te fait dire que ce seraient les 2 adultes qui partageraient le grand lit, spout :mrgreen:
 
WRInaute occasionnel
Bah justement, comme on connait pas les participants... On doit pouvoir leur proposer tous types de chambres correspondant à leur nombre !
 
WRInaute accro
@HawkEye: :mrgreen:

En plus de adultes/enfants, il faut aussi "lit bébé".

Tu sauves en plus le nombre total de lits par location, ensuite pr la recherche pareil, tu additionnes le nombre de participants, ensuite il ne reste plus qu'a filtrer (WHERE SQL) par nombre de lits minimum.
 
WRInaute accro
Mais ça te sort les locations qui correspondent au nombre de participants non ?
Ensuite rien ne t'empêche de faire un "faceted search" pour afficher les différentes combinaisons correspondantes au filtre ?
 
WRInaute occasionnel
Faut se placer comme sur Voyages Privées ou autre :

On a des types de chambre disponible (ceux ne sont que des types)
On doit ressortir les combinaisons de types de chambres possibles
 
WRInaute accro
Tu t'y prends mal.... pour avoir monté ce genre de site. Tu laisses ton client te détailler les chambres qu'il souhaite, et à partir de là, tu lui fais les proposition.

Le client sait exactement ce qu'il veut, il n'a pas besoin que tu l'assommes avec "toutes les combinaisons possibles"

(C'est pastoral, la réservation de chambres ? ^^)

Ah et puis genre, n'oublie pas les lits supplémentaires pour bébé, les chambres communicantes :D :D :D

(Oui, l'âge des enfants est super important dans ce genre d'algo si tu veux le mettre en place, parce que

1- normalement ça influe sur le prix
2- ça influe aussi directement sur la répartition souhaitée des chambres)
 
WRInaute occasionnel
(Le projet pastoral est en cours, :) j'ai commencé une formation pour devenir pasteur ;))

J'ai pas autant de règle que ça, derrière y'a encore de l'humain pour gérer les réservations.
C'est juste que si un client commande 4 voyages, mais que c'est 2 couples, il pourrait choisir 2 chambres lit double.
Si c'est 1 couple avec 2 enfants, il pourrait choisir 1 chambre lit double + 1 chambre 2 lits simples
Si c'est 1 couple avec 2 enfants majeurs (gars et fille), il pourrait choisir 1 chambre lit double + 2 chambre individuelle

Vous voyez le délire ? Ensuite c'est juste une liste à choisir.
 
WRInaute accro
Donc, comme je te dis, tu ne cherches pas "toutes les possibilités", tu le laisses t'indiquer les chambres qu'il souhaite.

(tu as oublié la chambre lit double et la chambre twins... pour les deux couples, la chambre lit double + lit simple + lit enfant)

Et puis les hôtels qui ont des suites, aussi, ...

Bon après tu fais comme tu le sens, hein ...
 
WRInaute occasionnel
Oui, je viens de comprendre ce que tu as dit...
Du coup, je propose la liste des chambres possibles et ils font leur business !
 
WRInaute accro
Il faut quand même un algo pour trier les propositions en fonction du nombre de personnes. Imagine que l'hotel dispose de chambres 4 lits. Si je suis une personne seule ça serait plus normal de me proposer en premier des chambres 1 lit avant de me proposer des chambres 4 lits. Pour deux couples ça serait l'inverse.

Il faut donc un algo pour fixer une priorité en fonction du nombre de personnes et du nombre de lits de la chambre. Le principe serait qu'on cherche d'abord à caser tout le monde dans la même chambre et on attribue une note à la proposition (de 1 à 20 par exemple), ensuite on enlève une personne pour rechercher toutes les chambres avec le nombre de personnes -1, et ainsi de suite. Et quand on arrive aux chambres 1 lit, on recommence dans l'autre sens en ajoutant un lit de plus, puis deux lits de plus, etc... Car quand on est seul on peut très bien réserver une chambre 4 lits si on a envie.

Exemple pour 2 couples (4 personnes) :
Chambre 2 lits doubles : note 20
Chambre 1 lit double + 2 lits séparés : note 19
Chambre 4 lits séparés : note 18
maintenant je fais comme si on avait 3 personnes et une quatrième à part
Chambre 3 lits séparés + Chambre 1 lit simple : note 17
Chambre 3 lits séparés + chambre 1 lit double : note 16
Chambre 1 lit double + 1 lit simple + chambre 1 lit simple : note 15
Chambre 1 lit double + 1 lit simple + chambre 1 lit double : note 14
Maintenant je fais comme si on avait 2 personnes et deux autres à part
Chambre 2 lits séparés + Chambre 2 lits séparés : note 13
Chambre 1 lit double + chambre 2 lits séparés : note 12
Chambre 1 lit double + chambre 1 lit double : note 11
Maintenant je fais comme si on avait 1 seule personne et 3 fois une personne à part
Chambre 1 lit simple + chambre 1 lit simple + chambre 1 lit simple + chambre 1 lit simple : note 10
Chambre 1 lit double + chambre 1 lit simple + chambre 1 lit simple + chambre 1 lit simple : note 9
Ensuite on commence à proposer des chambres avec un lit en plus
Chambre 2 lits séparés + chambre 1 lit simple + chambre 1 lit simple + chambre 1 lit simple : note 8
Chambre 2 lits séparés + chambre 2 lits séparés + chambre 1 lit simple + chambre 1 lit simple : note 7
Chambre 2 lits séparés + chambre 2 lits séparés + chambre 2 lits séparés + chambre 1 lit simple : note 6
etc...

Dans cet algorithme on peut faire entrer de la récursivité.
Mais ça devient assez complexe juste pour trier les propositions en fonction du nombre de personnes.
Une proposition avec tous les types de chambres disponibles et un système de cases à cocher pour pouvoir en sélectionner plusieurs est bien plus simple à gérer.
 
WRInaute accro
indigene a dit:
Il faut quand même un algo pour trier les propositions en fonction du nombre de personnes. Imagine que l'hotel dispose de chambres 4 lits. Si je suis une personne seule ça serait plus normal de me proposer en premier des chambres 1 lit avant de me proposer des chambres 4 lits. Pour deux couples ça serait l'inverse.
SAuf que ... en pratique, on revient exactement au même problème dès que tu sors de la config "simple"
Sauf que... la plupart des hôtels ont des chambres doubles avec supplément single (ou pas) et que la vraie chambre single avec le lit de 140 est rarissime, c'est plus une question de prix
Sauf que... même toute seule, je peux avoir envie de dormir dans un grand lit donc dans une chambre double

Bref, c'est totalement inutile de se prendre la tête pour faire un algo a priori basé sur le nombre de personnes
Une fois que le client a dit ce qu'il voulait comme produit, là on va chercher les dispos... au lieu de tourner dans tous les sens

Juste un truc... vous pensez perf quand vous imaginez ça ? ^^

indigene a dit:
Une proposition avec tous les types de chambres disponibles et un système de cases à cocher pour pouvoir en sélectionner plusieurs est bien plus simple à gérer.
Ben voilà, tout ça pour conclure comme moi ^^
 
Discussions similaires
Haut