Schichtrechner
Berechnen Sie bei einer Reihe von Entitäten mit Einschränkungen einen Schichtplan für sie, der diese Einschränkungen maximal respektiert.
Verwendung
Stellen Sie sicher, dass Ihr Computer Python durch Ausführen von python --version
in der Befehlszeile installiert hat.
Wenn dies nicht der Fall ist, können Sie Python hier herunterladen: https://www.python.org/downloads
Bei der Installation von Python:
- Windows kann versuchen, Python im App Store zu installieren. Sie sollten dies ignorieren und von python.org installieren, da Sie die Installation ansonsten nicht anpassen können. Sie müssen in der Lage sein, die Installation so anzupassen, dass Sie können:
- Aktivieren Sie das Kontrollkästchen, um es dem Pfad hinzuzufügen! Auf diese Weise kann Ihr Befehlszeilenterminal Python finden, wenn Sie versuchen, das Programm auszuführen.
Um das Programm auszuführen:
- Laden Sie die Datei
calculateShifts.py
aus Releases herunter (Sie können auch sampleEntities.csv
nützlich finden). - Navigieren Sie zu dem Ordner mit
calculateShifts.py
- Klicken Sie oben links auf "Datei" und "In Windows PowerShell öffnen".
- Geben Sie Ihren Befehl ein. (Siehe unten.)
Dieses Programm wird aus der Befehlszeile ausgeführt. Es enthält eine Eingabedatei und zeichnet den generierten Zeitplan in einer Ausgabedatei auf. Die folgenden Argumente sind erforderlich:
- Entities Dateiname (z. B. foo.csv) - Dies ist Ihre Eingabedatei. Sehen Sie sich die folgenden Anforderungen an, wie sie aussehen sollte.
- Startdatum (YJJJ-MM-DD)
- Anzahl der Wochen
- Tage mit Schichten, die mit Kleinbuchstaben mit Semikolons abgetrennt werden (zB Fr; sa; Sonne)
- Mindestanzahl von Tagen zwischen Schichtweite
Zum Beispiel:
python calculateShifts.py sampleEntities.csv 2021-08-01 10 "fri;sat;sun" 6
Entitäten Dateien Anforderungen
Die Entitätendatei sollte eine von Comma getrennte Werte (CSV) mit den folgenden Spalten sein:
- Name
- Gruppe - derzeit nicht vom Programm verwendet, wird aber in der Ausgabe aufgenommen, falls Sie sehen möchten, wie unterschiedliche Gruppen im Zeitplan verteilt sind.
- Tage nicht verfügbar - Geben Sie an, an welchem Wochentagen diese Entität mit Kleinkoffer und verkürzten Tagesnamen nicht verfügbar ist, die mit Semikolons getrennt sind (z. B. Fr.; Sat; Sun).
Siehe SampleEntities.csv für ein Beispiel!
Ausgabe
Das Programm gibt mit den folgenden Spalten eine Ausgabe -CSV -Datei aus:
- Datum
- Wochentag
- Gruppe
- Name
Der Zeitplan wird versuchen, Verstöße gegen die Einschränkungen zu minimieren, aber da diese Einschränkungen in Konflikt geraten können, ist der Zeitplan nicht perfekt. Wir empfehlen, Substitutionen zuzulassen, wenn Sie diesen Zeitplan direkt verwenden.
Darüber hinaus druckt das Programm eine Debug -Ausgabe an die Konsole. Für jede Einheit wird es die Nunmber der Einschränkungen teilen, die ihre Einschränkungen beeinträchtigen, und die Verteilung ihrer Verschiebungen über die verschiedenen Tage.
Implementierungsplan
Im Folgenden finden Sie einige Details darüber, wie das Programm funktioniert, wenn Sie interessiert sind.
Einschränkungen
Dieses Programm stellt nicht sicher, dass alle Einschränkungen perfekt erfüllt sind, da die Eingaben erforderlich sind, um vollständig nicht kontrollierend zu sein. Stattdessen priorisiert es die bereitgestellten Arten von Einschränkungen und Versuchen, Verstöße gegen diese Einschränkungen in den geplanten Unternehmen zu minimieren und gleichmäßig zu verteilen.
In der Reihenfolge der Priorität:
- Tage nicht verfügbar - ein Unternehmen sollte niemals für einen Tag geplant sein, an dem es nicht verfügbar ist.
- Schichtverteilung - Stellen Sie sicher, dass alle Entitäten über den gesamten Zeitraum ungefähr gleiche Verschiebungen haben.
- Mindestanzahl von Tagen zwischen Verschiebungen - Versuch, die minimale Zeitspanne zwischen Verschiebungen zu respektieren.
- Tagesverteilung - Versuchen Sie sicherzustellen, dass jede Entität Verschiebungen über verschiedene Tage hat, in denen sie verfügbar sind.
Pseudocode
- Generieren Sie die Liste aller Verschiebungen.
- Sortieren Sie zunächst Entitäten von den meisten bis zu den geringsten Tagesbeschränkungen.
- Für jede Entität, die nicht "erledigt" ist:
- Suchen Sie nach der nächsten idealen Verschiebung.
- Wenn es nicht besetzt ist, nehmen Sie es.
- Wenn es besetzt ist, entspannen Sie eine Einschränkung und suchen Sie nach einer neuen idealen Verschiebung. Erhöhen Sie die Kompromisse dieser Entität um 1.
- Wenn Sie in der letzten Einschränkung (Tage verfügbar) sind, überspringen Sie diese Entität und markieren Sie sie als "fertig", anstatt gegen diese Einschränkung zu verstoßen.
- Überprüfen Sie, ob immer noch Verschiebungen nicht zugewiesen sind und Entitäten, die nicht "erledigt" sind.
- Wenn ja, sortieren Sie Entitäten nach Anzahl der Kompromisse von den meisten bis am wenigsten und schalten Sie sie dann erneut durch. Dies stellt sicher, dass Entitäten, die am meisten gefährdet haben, zuerst jede Runde auswählen.
- Ausgabe des Zeitplans in Output.csv.
Erforderliche Datenstrukturen:
- Liste der Verschiebungen mit Datum, Tag und zugewiesener Entität
- Liste der Entitäten mit Namen, Gruppe, nicht verfügbaren Tagen, Anzahl der Kompromisse und gemessenen Marker