Je travaille sur une application où je dois planifier automatiquement des emplois pour les membres sur un calendrier de rotation. Je ne suis pas très bon à expliquer les règles, voici donc quelques données pour aider:
Positions: Un titre du poste, avec des règles telles que les lundis et mercredis par semaine.
Catégories: un ensemble de positions
groupes: Une autre série de positions. Positions dans le même groupe ne peuvent pas être attribués le même jour
Membres: Les utilisateurs affectés à des postes à une date donnée.
Pour chaque date dans le mois, les membres sont affectés à des postes (à la fois dans l'ordre croissant). Si un membre est affecté à un poste dans une catégorie, la prochaine fois une position dans la même catégorie arrive, le membre suivant par ordre alphabétique (ou le début de la liste) est attribué, par exemple.
Membres: M1, M2, M3, M4
positions dans la catégorie C1: P1, P2, P3
Membres en position P1: M1, M2, M3, M4
Membres en position P2: M1, M2, M3
Membres en position P2: M1, M3, M4
Si M1 est attribué pour P1, P2 si vient ensuite, M2 sera attribué. est introduit une couche supplémentaire de complexité où se P3 vient ensuite à la place, M3 se voit assigner. Le système doit garder une trace du fait que M2 a été « ignorée » et assigner M2 suivant le cas échéant, puis attribuez-lui M4 suivant, ou attendre jusqu'à ce qu'il atteigne une position où M2 est disponible (cela devient plus complexe quand il y a beaucoup de « sautée ' membres).
Un membre sera également ignorée s'il a indiqué qu'il ne sera pas disponible à cette date. Le système doit accorder la priorité aux membres sautées, les identifier en quelque sorte quand ils viennent, puis passer à la personne suivante logique dans la liste. Skipping applique également aux groupes en raison des affrontements de date.
J'ai déjà une solution temporaire [et désordre] que je ne comprends plus, même si j'ai beaucoup de commentaires dans ce expliquant chaque étape. Ses faiblesses sont à faire face aux membres sautées.
Si vous allez coder ce comment iriez-vous à ce sujet? Je la mise en œuvre en PHP, mais ce pseudocode travaillerais aussi bien.













