Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Aide à la prise de RDV


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé
    Aide à la prise de RDV
    Bonjour,
    Je suis entrain de développer un système de prise de rendez-vous en ligne dans un SPA

    Un rendez-vous concerne :
    - Un Client (IdClient)
    - Un Service (IdService. Ex. Massage Relaxant, Soin Visage , ...etc)
    - Une date
    - L'heure début
    - L'heure Fin
    - Une Ressource Humaine : il s'agit de l'employé qui prendra en charge le client( ex. Employé 1, Employé 2, Employé 3...)
    - Un Emplacement , il s'agit ici de la salle ou se fera le rdv (ex. Salle 1, Salle 2, Salle 3,...etc)


    Mes contraintes sont les suivante :
    a- Chaque Soin (Service) dispose d'une liste d'employés qualifiés pour réaliser ce soin.
    Exempe :
    Le soin "Massage Corporel" ne peut être réalisé que par "Geraldine" et "Leila"
    b- Chaque Soin (Service) dispose d'une liste de salles où il peut être réalisé
    Exemple : Le soin "Massage Relaxant" ne peut être réalisé uniquement dans les Salles 1 et 4.
    c- Une Salle ne peut être affectée à deux RDV simultanément
    d- Un Employé ne peut être chargé de deux RDV simultanément.


    Je souhaiterai donc réaliser un système qui permette à un client de
    1. Sélectionner une date
    2. Sélectionner un ou plusieurs soins
    3. Visualiser les créneaux disponibles, en tenant compte des contrainte (a,b,c et d)

    Le problème que je rencontre, est lorsque le client, choisi plusieurs soins pour une date donnée (en 1), donc forcément plusieurs RDV au même jour
    Dans ce cas, il serait préférable de proposer au client des créneaux adjacents
    l'idée qui me vient consiste à calculer les créneaux disponible de chaque soin choisi, ensuite faire un croisement entre les créaneau disponible de manière à faire sortir une combinaison adjacentes si elle existe.
    C'est en quelque sorte, une solution "exaustive" qui me parait pas très propre, surtout si le nombre de soin est important.


    Je me demande alors, s'il existe des algorithmes propores à ce type de problème?

    Merci par avance.

    Bien à vous.

    Réda
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  2. #2
    Expert confirmé
    salut

    si je comprend bien le client ne change pas de salle
    je pense que ton organisation de donnée est un peu modifier

    si pour un soin tu as des employé s specialisé il te faut une table
    permettant ce choix multiple

    une organisation de ce type


    TBEMPLOYER
    IDEMPLOYER
    NOM
    PRENOM

    TBSOIN
    IDSOIN
    NOM

    TBSPECIALISATIONSOIN
    REALISESOIN_ID
    EMPLOYER_ID
    SOIN_ID
    cela te permettra de réduire le choix des employer
    et tu peut faire la même chose pour le choix des salle

    ensuite tu pourra t'occuper des créneaux de salle occupé ou pas
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre éprouvé
    Citation Envoyé par anapurna Voir le message
    salut

    si je comprend bien le client ne change pas de salle
    je pense que ton organisation de donnée est un peu modifier

    si pour un soin tu as des employé s specialisé il te faut une table
    permettant ce choix multiple

    une organisation de ce type

    cela te permettra de réduire le choix des employer
    et tu peut faire la même chose pour le choix des salle

    ensuite tu pourra t'occuper des créneaux de salle occupé ou pas
    Bonjour,
    Merci de votre réponse.
    Concernant le modèle de donnée, oui en effet j'ai plusieurs tables que je n'ai pas citées dans mon premier post car mon souci n'est pas au niveau conceptuel mais au niveau algorithmique.

    Les principales tables sont les suivantes :
    1 - Table Employé : IdEmployé, Nom, Prénom,...etc.

    2 - Table Soin : IdSoins, Désignation, Durée,....etc

    3 - Table SoinEmployé : il s'agit de l'association entre l'employé et les soins pour lesquels il est qualifié
    Cette table expirme la contrainte (a) de mon premier post et contient une clé composée IdSoin+IdEmployé

    4 - Table Salle : IdSalle,DésignationSalle

    5 - Table SoinSalle : association entre la table soin et les salles où le soin peut être réalisé
    Cette table expirme la contrainte (b) de mon premier post et contient une clé composée IdSoin+IdSalle


    Lorsque l'utilisateur choisi un soin, il devient aisni possible de déteminer les personne qualifié pour ce soin ainsi que les salles possibles ou le soin peut être fait, et ce grâce aux tables 3 et 5


    si je comprend bien le client ne change pas de salle
    Non un client peut très bien changer de salles entre plusieurs rdv.
    Quand je parlais "d'adjacence", je sous-entendais qu'il est préférable que les rdv d'une même personne soient successives (chronologiquement) évitant ainsi des temps creux pour le client.



    Je vais tenter de décrire ici le fonctionnement du système attendu, en deux versions :

    Version 1 : Facilement réalisable mais pas très pratique pour le client
    Etape 1 : Le client se connecte
    Etape 2 : Le client choisi une date D
    Etape 3 : Le client choisi un soin S
    Etape 4 : le système renvoie la liste des créneaux disponibles du soin S à la date D.
    Etape 5 : Le client choisi un des creneau et valide son RDV
    Etape 6 :
    Si(Le client souhaite ajouter un autre rdv au même jour) Alors
    Aller à l'étape 3
    Sinon
    Terminer
    Fsi

    Ce fonctionnement a l'avantage d'être facile à mettre en oeuvre, mais je trouve que ce n'est pas très pratique pour le client qui souhaite faire plusieurs rdv dans la journée car la visibilité des créneau se fera de manière locale, je m'explique à l'aide d'un exemple :
    à l'étape 3 le client choisi le soins "Massage relaxant"
    à l'étape 4 le systeme propose les creneaux dispobile pour "Massage relaxant" :
    - 9h00 à 10h00
    - 15h00 à 16h00
    Etape 5 le client choisi le créneau 15h00 à 16H00
    à l'étape 6 le client souhaite ajouter un autre rdv le même jour.
    Etape 3 : le client choisi "Soin du Visage"
    Etape 4 : Le systeme propose un seul créneau :
    - 10h00 à 11h00
    Etape 5 : le client valide l'unique créneau,....et termine....

    Le client se retrouve avec deux rdv le même jour, le premier à 9h et le second à 17h.
    Alors qu'il aurait pu choisir une autre combinaison plus optimale
    09h00 à 10h00
    et
    10h00 à 11h00
    mais il ne l'a pas fait car il n'avait pas de visibilité des creneau du 2eme RDV lorsqu'il prend le premier RDV.
    Dans ce système peut aussi voir les créneaux des différents soins sans valider et revenir, mais je voudrai éviter ces aller retour et proposer directement la combinaison la plus optimale pour le client. (Version 2)

    Version 2 : Difficilement réalisable mais très pratique pour le client
    Etape 1 : Le client se connecte
    Etape 2 : Le client choisi une date D
    Etape 3 : Le client choisi une liste de soin S1,S2,...,Sn (généralement n vaut 2 voire 3 maximum)
    Etape 4 : le système renvoie une liste "optimale"(*) de combinaisons des créneaux disponibles pour les soins S1,..Sn à la date D.
    Etape 5 : Le client choisi une combinaison et valide son RDV

    Le critère optimale signifie qu'il faut minimiser les temps creux dans une combinaison.

    La mise en place de la version 2 et celle qui me fait refflechir .... Si vous avez des conseils, ou des noms d'algo dans ce contexte, ça m'aiderai bien

    Merci à vous
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Expert confirmé
    bonjour,

    il y a bien la solution des CSP (contraint satisfaction problem)
    qui est très utilisé pour la planification
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre éprouvé
    Citation Envoyé par anapurna Voir le message
    bonjour,

    il y a bien la solution des CSP (contraint satisfaction problem)
    qui est très utilisé pour la planification
    Je sens que je vais devoir me taper une tonne de papiers

    Merci à vous...To be continued...
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  6. #6
    Expert confirmé
    salut

    1°) cherche le ou les personnel capable de faire les soins
    récupérer les créneaux de libre
    2°) Cherche la ou les salles permettant les soins
    récupérer les créneaux de libre pour chaque salle et les matcher avec le personnel

    3°) le choix se feras sois par date\personnel sois par personnel\date (si préférence)
    donner la liste des date pouvant convenir

    ce qui veut dire
    a une date donnée ,un personnel et une salle
    les soins servent a filtré le personnel et les salles
    il faut chercher si à une date donnée on peut bloquer la salle et la personne en temps cumulé des soins
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

###raw>template_hook.ano_emploi###