Der Algorithmus für die Platzvergabe
Hier findest Du den Algorithmus für die Vergabe der Plätze, die zwei Wochen nach Buchungsstart möglichst alle Deine vorgemerkten Buchungswünsche in feste Buchungen umwandelt.Grundregeln
Beim Design des neuen Buchungssystems und des Platzvergabealgorithmus waren folgende Dinge wichtig:
- Einfach: Wenn sich ein Gast nicht mit den neuen Features vom Buchungssystems inhaltlich befasst, sondern einfach wie schon immer seine JT-Events bucht, darf diesem Gast daraus kein Nachteil entstehen, was die Chancen betrifft, Eventplätze zu bekommen.
- Priorität: Es soll möglich sein, dass ein Gast ein potenziell gefragtes Event bucht sowie eine zeitgleiche Alternative (als Lückenfüller) und kenntlich machen kann, welches beiden kollidierenden Events der Favorit ist (und das auch beachtet wird).
- Fair: Es wird versucht, insofern gerecht zu sein, dass nicht ein Gast mit fünf gebuchten Events kaum etwas bekommt, wohingegen ein Gast mit zwei Dutzend Buchungen "absahnt".
- Pech wird ausgeglichen: Wenn es nicht anders geht, werden die Plätze bei überbuchten Events verlost. Die, die bei einer vorherigen Platzvergabe Pech hatten, werden bei der nächsten Verlosung bevorzugt vor denen, die bisher immer Glück hatten.
- Ms vor Nicht-Ms: Bei den Verlosungen von Plätzen überbuchter Veranstaltungen haben Ms einen leichten Vorteil gegenüber Nicht-Ms.
- Familien- und Paarbuchungen: Ein Block von Plätzen in der Verlosung durch eine Familien- oder Paarbuchung wird wie eine Einzelperson behandelt, außer das mehrere Tickets vergeben werden. Es entsteht dadurch also weder Vor- noch Nachteil. Dabei richten sich dann auch die anderen Aspekte immer an der Person, die für alle bucht: Ein M hat leichte Vorteile, mögliche Terminkollisionen werden nur an der buchenden Person geprüft.
Verarbeitung überbuchter Events
Die Platzvergabe erfolgt in drei Runden, da die Gäste ihre Buchungen mit einer Priorität von hoch (zwei Sterne), mittel (ein Stern) und "warum nicht" (kein Stern) versehen können - angefangen mit der hohen Priorität (**) in der ersten Runde, gefolgt von den beiden weiteren Priorisierungen.Die überbuchten Events werden nach dem Grad der Überbuchung (Anzahl Buchungen geteilt durch Anzahl Plätze) sortiert, damit die am wenigsten überbuchten zuerst abgearbeitet werden. Grund für diese Reihenfolge ist sicherzustellen, dass für Gäste, die nur wenige, aber sehr gefragte Events gebucht haben, das Risiko leer auszugehen, minimiert wird.
- Schleife über Buchungsprioritäten: Runde 1: hohe Priorität (zwei Sterne), Runde 2: mittlere (ein Stern) und Runde 3: niedrig (kein Stern)
- Schleife über die überbuchten Events, wobei diese aufsteigend nach Grad der Überbuchung zum Zuge kommen
- Es wird eine Liste der Gäste erstellt, die das Event mit der aktuellen Priorität vorgemerkt haben
- Die ein nicht-ausgebuchtes kollidierendes Event mit höherer Priorität gebucht haben, werden wunschgemäß nicht einbezogen
- Erstelle für diese Gäste einen "Score", der aus folgenden Werten besteht:
- die Anzahl der diesem Gast schon vergebenen Eventplätze (wer bislang weniger abbekommen hat - damit auch, wer in einer vorherigen Runde Pech hatte -, hat mehr Chancen)
- ob der Gast ein M ist (Ms haben mehr Chancen auf Plätze als Nicht-Ms)
- der Priorität der Buchung (ist bei der Verarbeitung überbuchter Events nicht relevant, da die nach Priorität gruppiert abgearbeitet werden, wohl aber für die nicht-überbuchten, die anschließend an der Reihe sind)
- eine Zufallszahl (wenn alle Stricke reißen, hilft es nichts und der Zufall kommt ins Spiel)
- Nun werden die freien Plätze des Events an die Gäste in der Reihenfolge des o.g. Score vergeben, sprich wer bislang wenig abbekommen hat, hat größere Chancen und Ms kommen vor Nicht-Ms zum Zuge – und bei "gleichwertigen“ Buchungen entscheidet der Zufall (notgedrungen).
Dabei wird ein Platz nur vergeben, wenn die Buchung ok ist, sprich keine Kollisionen vorliegt, damit niemand zwei Events zum selben Zeitpunkt oder dasselbe Event mehrfach bekommt, und geprüft, dass die gewählten Optionen noch verfügbar sind und die Person die Voraussetzungen (z.B. Mindestalter) erfüllt.
- Ende Schleife über Events
- Schleife über die überbuchten Events, wobei diese aufsteigend nach Grad der Überbuchung zum Zuge kommen
- Ende Schleife über Buchungspriorität
Verarbeitung nicht-überbuchter Events
Im zweiten Schritt werden die Buchungen der nicht-überbuchten Events durchgeführt.Das Vorgehen ist mit obigem im Kern identisch, außer dass es nur einen Durchlauf gibt, da keines der Events überbucht ist. Da die Buchungspriorität im o.g. Score enthalten ist, bekommen Gäste bei auch hier bei kollidierenden Events das bevorzugte.
Was der Algorithmus tut
Zugegeben, der Algorithmus klingt hie und da vielleicht ein klein wenig irritierend aber uns lag daran den wirklichen Algorithmus aufzuzeigen, wie er technisch implementiert wurde.Das das obige vielleicht nicht für alle so direkt durchschaubar ist, erlauben wir uns, hier aufzuzeigen, wie der Algorithmus von der Wirkung her funktioniert:
- Schleife über Buchungsprioritäten: Runde 1: hohe Priorität (zwei Sterne), Runde 2: mittlere (ein Stern) und Runde 3: niedrig (kein Stern)
- Schleife über alle Events, wobei erst die überbuchten aufsteigend nach Grad der Überbuchung zum Zuge kommen und danach die nicht-überbuchten
Wir haben an dieser Stelle die Priorität der Hauptschleife (angefangen mit der höchsten) sowie ein Event, für das jetzt Plätze vergeben werden aus der inneren Schleife.
- Erstelle für die Gäste, die das aktuelle Event mit der aktuellen Priorität vorgemerkt haben, einen "Score", der aus folgenden Werten besteht:
- die Anzahl der diesem Gast schon vergebenen Eventplätze (wer bislang weniger abbekommen hat - damit auch, wer in einer vorherigen Runde Pech hatte -, hat mehr Chancen)
- ob der Gast ein M ist (Ms haben mehr Chancen auf Plätze als Nicht-Ms)
- eine Zufallszahl (wenn alle Stricke reißen, hilft es nichts und der Zufall kommt ins Spiel)
- Nun werden die freien Plätze des Events an die Gäste in der Reihenfolge des o.g. Score vergeben, sprich wer bislang wenig abbekommen hat, hat größere Chancen und Ms kommen vor Nicht-Ms zum Zuge – und bei "gleichwertigen“ Buchungen entscheidet der Zufall (notgedrungen).
Dabei wird ein Platz nur vergeben, wenn die Buchung ok ist, sprich keine Kollisionen vorliegt, damit niemand zwei Events zum selben Zeitpunkt oder dasselbe Event mehrfach bekommt, und geprüft, dass die gewählten Optionen noch verfügbar sind und die Person die Voraussetzungen (z.B. Mindestalter) erfüllt.
- Erstelle für die Gäste, die das aktuelle Event mit der aktuellen Priorität vorgemerkt haben, einen "Score", der aus folgenden Werten besteht:
- Ende Schleife über alle Events
- Schleife über alle Events, wobei erst die überbuchten aufsteigend nach Grad der Überbuchung zum Zuge kommen und danach die nicht-überbuchten
- Ende Schleife über die drei Buchungsprioritäten