====== Die Plan-Klasse ======
Ein Klasse in Python kann als Sammlung von Variablen und Funktionen (die mit diesen Variablen arbeiten) betrachtet werden.
Die Klasse ist in der Datei ''plan.py'' definiert, die im Verzeichnis ''planung'' liegt.
=== Initialisierung ===
from plan import Plan
# Daten einlesen (Nesa export und Workshop Definitionen)
plan = Plan("../data/2024.csv", "../data/2024m_w.csv")
=== Verfügbare Variablen ===
Siehe Kommentar in ''plan.py'' ab ca. Zeile 4.
==== Wichtige Code-Schnipsel ====
=== 1. Priorität eines Teilnehmers s ===
workshop_nummer = plan.o[s][0] # 1. Prio (Index [s][1] wäre zweite Prio etc.)
=== Workshop w zur Zeit t schon voll? ===
if plan.b[w][t] >= plan.m[w]:
# Tu wat, wenn Workshop w zur Zeit t schon voll
else:
# Tu wat anderes, wenn noch Platz im Workshop w zur Zeit t
=== Beste Prio für Teilnehmer s zur Zeit t einplanen ===
for i in range(4):
w = plan.o[s][i]
if plan.b[w][t] < plan.m[w]: # Hat noch Platz?
if plan.x[s][t]==-1: # Teilnehmer s zur Zeit t noch nicht verplant?
if not w in plan.x[s] # Teilnehmer s besucht Workshop w noch nicht?
plan.schedule(s,w,t) # Einplanen!
Mögliche Variante für obigen Code: Mögliche Zeitfenster innerhalb der ''for i''-Schleife durchgehen (und so beide Zeitfenster ausnutzen).
=== Umteilen ===
Teilnehmer suchen, die zur Zeit ''t'' den Workshop ''der Priorität ''p1'' besucht, in in den Workshop der Priorität ''p2'' umgeteilt werden könnte:
umteilbar = []
for s in range(plan.S):
if not plan.laueri[s]: # Nur nicht Laueris (sonst keine Prioritäten-Liste o)
if plan.x[s][t]==plan.o[s][p1]: # Teilnehmer s zur Zeit t in Workshop der Prio p1 eingeteilt?
w2 = plan.o[s][p2] # Workshop der Prio p2
if plan.b[w2][t]
=== Zufällige Reihenfolge ===
Hier am Beispiel der Teilnehmernummern
import random
randomS = list(range(plan.S))
random.shuffle(randomS) # Zufällige Reihenfolge aller Teilnehmer
for s in randomS:
# Tu wat mit s