Ich arbeite an einer Anwendung, wo ich brauche Arbeitsplätze für die Mitglieder auf einem rotierenden Zeitplan automatisch zu planen. Ich bin nicht sehr gut an Regeln zu erklären, so dass hier einige Daten, um zu helfen:
Position: Ein Jobtitel, mit Regeln wie montags und mittwochs wöchentlich.
Kategorien: Eine Reihe von Positionen
Gruppen: Eine weitere Reihe von Positionen. Positionen in der gleichen Gruppe können nicht auf den gleichen Tag zugeordnet werden
Mitglieder: Benutzer der Positionen zu einem bestimmten Zeitpunkt zugewiesen.
Für jeden Tag im Monat werden die Mitglieder an Positionen zugewiesen (beide in aufsteigender Reihenfolge). Wenn ein Mitglied in eine Position in einer Kategorie zugeordnet ist, kommt das nächste Mal eine Position, in der gleichen Kategorie auf, das nächste Mitglied in alphabetischer Reihenfolge (oder der Anfang der Liste) wird zugewiesen zB.
Mitglieder: M1, M2, M3, M4
Positionen in Kategorie C1: P1, P2, P3
Mitglieder in Position P1: M1, M2, M3, M4
Mitglieder in Position P2: M1, M2, M3
Mitglieder in Position P2: M1, M3, M4
Wenn M1 für P1 zugewiesen, wenn P2 als nächstes kommt, wird M2 zugeordnet werden. Eine zusätzliche Schicht von Komplexität eingeführt wird, wo, wenn P3 nächste Stelle kommt, wird M3 zugeordnet. Das System des Überblick über die Tatsache zu halten hat, dass M2 wurde ‚übersprungen‘ und weist M2 nächste falls vorhanden, dann M4 nächstes zuweisen, oder warten, bis es wird zu einer Position, wo M2 verfügbar ist (dies wird zusätzlich komplex, wenn es viele ‚übersprungen 'Mitglieder).
Ein Mitglied wird auch übersprungen werden, wenn er angezeigt hat er nicht zu diesem Zeitpunkt zur Verfügung stehen wird. Das System muss Priorität auf übersprungenen Mitgliedern platzieren, sie irgendwie zu identifizieren, wenn sie kommen und dann in der Liste auf die nächste logische Person zu springen. Skipping gilt auch wegen Datum Auseinandersetzungen zu Gruppen.
Ich habe bereits eine temporäre [und chaotisch] Lösung, die ich nicht mehr verstehen, obwohl ich eine Menge Kommentare in ihm jeden Schritt erklären. Seine Schwächen sind mit den übersprungenen Mitgliedern im Umgang.
Wenn Sie codieren würden diese wie würden Sie vorgehen? Ich bin die Umsetzung dieses in PHP aber Pseudo-Code würde auch funktionieren.













