Cruz: kontrollierte Zufallsgenerierung

Beitrag lesen

Hallo Malethan,

also ich finde die Aufgabe sehr interessant und würde auch gerne einen halben Tag damit verbringen sie durch und durch zu ergründen und alle möglichen Lösungen zu ermitteln. Leider muss ich aber arbeiten, daher kann ich eher nur einen quick and dirty Beitrag leisten.

Also verfolgen wir doch weiter deinen Ansatz, denn du hast ja schon ein verwendbares Zwischenergebnis erzielt:

Das gewünschte Ergebnis ist in etwa so:
name1 1 0 1 1 0 0 ... 0 1 1 0  |maximal 10x0, 10x1
name2 1 1 1 0 0 1 ... 0 0 0 1  | -"-
name3 0 1 0 0 1 0 ... 0 1 1 1
.. . . . . . . ... . . . .
.. . . . . . . . . . .
.. . . . . . . . . . .
name27 0 0 0 1 1 1 ... 0 0 1 1
________________________________________
1Tag|2Tag|..
13x0|14x0|..
14x1|13x1|..

Ich bin in der Lage, Zeile für Zeile per Zufallsfunktion zu ermitteln.

Du hast also eine 20x27 Matrix aufgestellt, dessen Zeilen du zufällig generierst, sodass die Zeilensumme immer genau 10 ist. Die Zeilensumme ist hier einfach die Anzahl der einsen. Sollten identische Zeilen auftreten, dann würde das bedeuten, dass 2 Personen die selbe Gruppeneinteilung für die 20 Tage haben und da spricht laut deiner Aufgabenstellung nichts dagegen oder? Hauptsache die gesamte Gruppenzusammensetzung ist nie die selbe.

Doch in der senkrechten Anforderung der Aufgabe - täglich zwei Gruppen von 13 bzw. 14 Mitgliedern, deren Mitglieder in 20 Tagen gleichmäßig der Gruppe 1 und/oder 2 angehören -  fehlt mir die Idee.

Dann rechne doc einfach die Spaltensummen aus. Sie dürfen genau 13 oder 14 sein. Wenn du einmal eine falsche Spaltensumme erhältst, dann fang einfach nochmal von Vorne an. Irgendwann wird das Programm schon eine gültige Lösung ausgeben.

Das ist natürlich keine so tolle Lösung, dein Rechner wird ganz schon lange zu tun haben und theoretisch könnte das Programm eine unendliche Laufzeit haben. Um sicher zu gehen, dass das Programm überhaupt eine Chance hat irgendwann mal anzuhalten, sollte man beweisen, dass es überhaupt eine Lösung gibt. Das kann man z.B. machen, indem man per Hand mit Stift und Papier schnell mal eine Lösung ausgrübelt.

Dann kannst du das Programm schon mal laufen lassen und mal sehen wer zuerst fertig ist, das Programm oder du mit einer besseren Lösung. :)

Die Optimale Vorgehensweise wäre aber so:

  • Finde zuerst alle möglichen Variationen, wie du 27 Personen in zwei Gruppen der Stärke 13 und 14 verteilen kannst. Das sind z.B. alle 27 Bit lange Zahlen, die genau 13 oder 14 Bits auf 1 gesetzt haben.

  • Aus all den Variationen bilde alle möglichen Mengen der Mächtigkeit  20, die die Bedingung erfüllen, dass jedes Bit genau 10 mal 1 und genau 10 mal 0 ist. (das ist wohl die Schwierigste Aufgabe)

  • Wähle aus den berechneten Menge zufällig eine aus, diese ist dann deine gesuchte Lösung.

Lass es mich wissen wie es gelaufen ist, ich bin sehr gespannt.

Viele Grüße,
Cruz

Für jede Anregung bin ich dankbar.

MFG
A.Malethan