Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Algorithmus für eine Auslosung


der Berliner - Sa 07.01.06 12:26
Titel: Algorithmus für eine Auslosung
Hallo zusammen...
Ich Versuche eine SkatTurnierverwaltung zu programmieren

Jetzt habe ich ein Problem :D

Ich habe x Teilnehmer und y Tische
es werden eine bestimme Anzahl von Serien gespielt (Jede serie hat 48 Spiele....für die Auslosung nicht wichtig)
an jedem Tisch sitzen im güntigsten fall 4 Teilnehmer (Kann aber auch sein das nur 3 an einem Tisch sitzen.
Die Zufallsauslosung für die erste Serie ist kein Problem da noch kein Spieler mit einem anderen gespielt hat.

für die 2. Serie fehlt mir schon der Ansatz :(

Mit den Optionen "Gegenspieler wechseln" und "zufällige Auslosung"
sollte jetzt kein Spieler mit jemandem am Tisch sitzen mit dem er in der Ersten Serie schon gespielt hat.

Grübel :?:

bei max. 24 Serien nimmt die Tauscherei doch wahnsinnge ausmaße an....kontrolle der Spieler(Vielleicht 100) und Serien(max.24).
kennt jemand nen Algorithmus mit dem sowas zu bewerkstelligen ist ???

Ein Dankbarer Berliner :D


Horst_H - Sa 07.01.06 13:12

Hallo,

die Bedingung , das in der naechsten Runde keiner mit einem gleichen spielt, kannst Du nicht beliebig lang aufrecht erhalten, da irgendwann einmal ein Spieler z.B. nur noch nicht mit einem nicht gespielt hat.
Im Ansatz ist es doch so, dasz fuer jeden Spieler eine Menge(oder Liste) von Mitspielern vorhanden ist.
Alle Spieler(Kugeln) kommen in eine Urne.
Y-mal wird:
ein Spieler M ausgewaehlt
dann zusaetzlich 2 oder 3 Spieler, die noch nicht (mit M oder einem der Mitspieler) gespielt haben.
Diese Spieler werden aus der Urne entfernt.

Gruss Horst


der Berliner - Sa 07.01.06 13:27

Hallo Horst...
Danke erstmal für die schnelle Antwort.
Also das Prinzip habe ich verstanden.

genug zu tun gibt es noch, später soll dann noch, Raucher/Nichtraucher trennen,
Vereinsspieler trennen, und vieles mehr berücksichtigt werden :? :?

Gruß Andre


Aristoteles - Sa 07.01.06 21:10

Hallo Berliner!

Spontan würde ich für dein Problem folgendes vorschlagen:
1. Die Aufteilung in der ersten Serie geschieht durch den Zufallsgenerator.
2. In der zweiten Serie nimmt man von verschiedenen Tischen der Reihe nach jeweils einen Spieler für den Tisch 1 der zweiten Serie, für Tisch 2 der zweiten Serie u.s.w., bis alle Spieler an den Tischen erster Serie verteilt sind.
Durch diese Auswahl sollte garantiert sein, dass kein Spieler in der zweiten Serie mit den gleichen Spieler aus erster Serie spielt.
Der Computer muss die SPielerzusammensetzungen speichern.
3. Im dritten Schritt wird genauso wie unter 2. fortgefahren, nur, dass man hier mit Hilfe der gespeicherten Spielerzusammensetzung aufpassen muss, dass nicht doch die gleichen Spieler miteinander spielen.

Gruß, Aristoteles


der Berliner - So 08.01.06 00:17

Danke Aristoteles...

Also das werde ich jetzt mal als Ansatz benutzen hört sich gut an...
wenn mir nen Algorithmuss Eingefallen ist :idea:
werde ich den hier mal posten.

gruß der Berliner


der Berliner - Sa 14.01.06 09:48
Titel: Lösung gefunden
Hallo zusammen

habe eine für mich akzeptable Lösung gefunden
In einem anderen Thema wurde ein Lottogenerator vorgestellt
den ich auf meine Bedürfnisse umgebastel habe.

Thanks all
Gruß Andre


Grishnak - Sa 14.01.06 10:27

Ich würde für jeden Spieler eine Liste anlegen, die die noch möglichen Mitspieler beinhaltet (also diejenigen, mit denen man noch nicht gespielt hat). Sobald nun Spieler A mit Spieler B an einen Tisch gesetzt wird, wird Spieler B aus der Liste der möglichen Mitspieler von Spieler A gelöscht und umgekehrt (Spieler A aus der Liste der möglichen Mitspieler von Spieler B). So sollte es auch möglich sein, Nebenbedingungen (nur Raucher/Vereinsmitglieder/Frauen) an einem Tisch) zu berücksichtigen.


der Berliner - Sa 14.01.06 10:49

user profile iconGrishnak hat folgendes geschrieben:
Ich würde für jeden Spieler eine Liste anlegen, die die noch möglichen Mitspieler beinhaltet (also diejenigen, mit denen man noch nicht gespielt hat). Sobald nun Spieler A mit Spieler B an einen Tisch gesetzt wird, wird Spieler B aus der Liste der möglichen Mitspieler von Spieler A gelöscht und umgekehrt (Spieler A aus der Liste der möglichen Mitspieler von Spieler B). So sollte es auch möglich sein, Nebenbedingungen (nur Raucher/Vereinsmitglieder/Frauen) an einem Tisch) zu berücksichtigen.


Genau so Habe ich es gemacht.

gruß Andre


alzaimar - Sa 14.01.06 12:01

Und das geht immer auf? Ich hatte mich vor mittlerweile ca. 25 Jahren mal mit Spielplänen befasst und bin zu dem Ergebnis gekommen, das es nur für bestimmte Anzahlen von Mannschaften/Spielern ohne Probleme (sprich Heuristik bzw. Backtracking) funktioniert. Zeig mir doch mal Dein Verfahren, oder skizziere es zumindest.


der Berliner - Sa 14.01.06 12:08
Titel: Irgenwann beisst es sich
user profile iconalzaimar hat folgendes geschrieben:
Und das geht immer auf? Ich hatte mich vor mittlerweile ca. 25 Jahren mal mit Spielplänen befasst und bin zu dem Ergebnis gekommen, das es nur für bestimmte Anzahlen von Mannschaften/Spielern ohne Probleme (sprich Heuristik bzw. Backtracking) funktioniert. Zeig mir doch mal Dein Verfahren, oder skizziere es zumindest.


Hallo Alzaimar

Nee...irgenwann hat jeder schon mal gegen einen anderen gespielt es geht also nich bis ins unendliche auf
aber die Procedure soll das solange versuchen wie es möglich ist..is noch nich ganz fertig.

gruß Andre