Schere, Stein, Papier Programmierwettbewerb

Gute Links und Tutorials könnt ihr hier posten.
BlackJack

@Nocta: Wenn Bot B auf Muster reagiert, wieso ist er dann anfällig(er) für Angriffe von Bot A? Wie kann sich A dadurch einen Vorteil verschaffen? Wenn A zufällig spielt, kann B kein Muster erkennen und folgt damit selber auch keinem erkennbaren Muster: beide sind also zufällig. Wenn A ein Muster spielt ist er gegen B erst einmal im Nachteil. Wenn B das Muster erkannt hat, dann verliert A öfter. Weiss dann vielleicht was B als Antwort auf das eigene Muster spielen wird und kann deswegen ein paar mal gewinnen. Das merkt B doch aber und passt sich entsprechend an. Was hätte A damit denn jetzt wirklich gewonnen? Wo siehst Du da einen Vorteil?

Gegen ein simples `randint(1, 3)` könnte man versuchen den zugrunde liegenden Seed-Wert heraus zu bekommen und wenn man den hat, 100% der Züge des Gegners vorher zu sagen. ;-) Ist also die Frage wie schwierig das ist und ob es sich für diesen Sonderfall überhaupt lohnt.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Nocta hat geschrieben:Wer einen logischen Fehler findet - bitte aufklären :)
Es geht in dem Contest darum besser als 50% zu sein. Und das geht eben nur wenn du nicht mehr total zufällig spielst, sondern versuchst das Spielsystem des Gegners zu entschlüsseln. Natürlich birgt das die Gefahr, dass dein Gegner dein System entschlüsselt und du verlierst.

Diese Begründung ist auch auf der Internetseite nachzulesen:
If playing randomly is the optimal strategy, what is the point of a RPS competition? It is actually possible to do much better than a random player when the contest involves non-random competitors. This is because a strong player can consistently beat predictable players, while a random player will win about half of its matches. This means that random players will tend to rank around the middle of a competition leaderboard, while strong players will consistently rank higher.
Wenn man ins "Leaderboard" schaut, sieht man, dass die guten Spieler eine "Win rate" von etwa 80% haben.

Grüße
Gerrit
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Wenn Bot B auf Muster reagiert, wieso ist er dann anfällig(er) für Angriffe von Bot A? Wie kann sich A dadurch einen Vorteil verschaffen?
A kann sich einen Vorteil dadurch verschaffen, dass B jetzt berechenbar spielt, da er auf das Muster von A reagiert. Das könnte also sozusagen eine "Falle" sein. Aber selbst wenn das nicht geplant ist, macht sich B in jedem Fall anfälliger, wenn er vom Zufall abweicht - Ob A das ausnutzen kann, ist eine andere Frage.
Es ist also kein Vorteil, wie du es ausdrückst, aber eine eventuelle Chance.
Wenn A zufällig spielt, kann B kein Muster erkennen und folgt damit selber auch keinem erkennbaren Muster: beide sind also zufällig
Stimmt genau. Außer ein Bot erkennt fälschlicherweise ein Muster, welches aber nur zufallsbedingt entstanden ist.
Gegen ein simples `randint(1, 3)` könnte man versuchen den zugrunde liegenden Seed-Wert heraus zu bekommen und wenn man den hat, 100% der Züge des Gegners vorher zu sagen.
Okay ich gehe aber mal davon aus, dass das nicht bei 1000 Spielen möglich sein wird, oder?
Es geht in dem Contest darum besser als 50% zu sein. Und das geht eben nur wenn du nicht mehr total zufällig spielst, sondern versuchst das Spielsystem des Gegners zu entschlüsseln.
Das ist mir klar.
Ich weiß nicht genau, wie ich das erklären soll.
Das ganze funktioniert doch nur genau dann, wenn mindestens ein "Idiot" bei dem Contest mitmacht, der eben NICHT auf Zufall setzt.

Gehen wir mal davon aus, dass 10 Mathematiker dieses Problem überdenken und ihre Schlussfolgerungen immer richtig sind.
Zu welchem Schluss käme einer von ihnen dann wohl?
Er muss davon ausgehen, dass die Gegner keine Schwachstellen bieten wollen und wird denken, dass sie kein Muster implementieren, sondern komplett zufällig spielen.
So jetzt ist es vollkommen egal was man selbst macht, wenn man davon ausgeht, dass der Gegner komplett zufällig spielt.
Immer Schere, abwechselnd Schere und Stein, auch komplett zufällig ... Es wird sich immer auf 1:1 belaufen.
Da er aber weiß, dass die anderen das selbe von ihm erwarten, wie er von ihnen, wird er auf keinen Fall ein Muster bieten, denn die anderen könnten dafür einen Konter eingebaut haben.

Ergo: Der Contest dürfte normalerweise nicht auf komplexe Bots hinauslaufen, wenn es alle "richtig" machen würden.

Aber klar, da nicht alle so spielen - wär ja langweilig - lassen sich komplexe Bots bauen, die solche "dummen" Bots mit einem Muster schlagen können.
Das Motto könnte also Lauten "Wer macht die meisten Idioten fertig, die nicht zufällig spielen?"


Das ist eben mein Problem mit dem Contest, da es erst jemanden geben muss, der "dumm" (ohne Zufall) spielt, damit sich andere Bots absetzen können.
BlackJack

@Nocta: B spielt nicht wirklich berechenbar für A wenn B ein Muster erkannt hat. Denn sobald A nicht mehr nach dem erwarteten Muster spielt, ändert sich ja auch das Spielverhalten von B und damit weiss auch A nicht mehr wie er ihn schlagen kann. Es ist ja nicht so dass B 100 Spiele abwartet, dann die Züge von A analysiert und ein Muster erkennt, und dann die nächsten 900 Züge so antwortet als wenn A weiterhin das in den ersten 100 Zügen erkannte Muster spielt. Selbst eine sehr einfache Version von B wird mit Wahrscheinlichkeiten arbeiten und für jeden Zug eine gewichtete Zufallsentscheidung treffen, die auf den allen vorangegangenen Zügen von A basiert.

Die Annahme das es nur ”Genies” in dem Wettbewerb gibt, lässt sich ganz einfach widerlegen wenn man sich mal das untere Ende der Rangliste anschaut. Es gibt da auch Bots, die immer nur Schere spielen. Man kann sich die Quelltexte ja anschauen.

Und wenn wirklich nur 10 geniale Mathematiker an dem Wettbewerb teilnehmen, dann ist Dein Schluss trotzdem falsch, denn dann wird mindestens einer auf die Idee kommen *absichtlich* einen dummen Spieler hoch zu laden, um den mit einem eigenen, intelligenteren Bot schlagen zu können, damit er aus dem 50% Mittelmässigkeitssumpf heraus kommen kann.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

B spielt nicht wirklich berechenbar für A wenn B ein Muster erkannt hat. Denn sobald A nicht mehr nach dem erwarteten Muster spielt, ändert sich ja auch das Spielverhalten von B und damit weiss auch A nicht mehr wie er ihn schlagen kann.
Na ja du hast sicher Recht, dass das kein allzu großes Problem ist, aber allgemein ist B dann angreifbar. Wie lange und ob A das ausnutzen kann ist etwas völlig anderes, aber er hat sozusagen seine Deckung verlassen. Das wollte ich damit sagen :)
Die Annahme das es nur ”Genies” in dem Wettbewerb gibt, lässt sich ganz einfach widerlegen wenn man sich mal das untere Ende der Rangliste anschaut.
Deckt sich irgendwie nicht ganz mit deinem letzten Satz, da ein Genie doch auch einen schlechten Bot erstellt hätte ;)
Dass wir es in der Realität nicht mit Genies zu tun haben, würde ich aber auch so sagen.

Nun ja, es ist ja offensichtlich so, dass man mit einem ausgeklügelten System weiter kommt, aber ich finde die Ausgangssituation dieses Wettbewerbes etwas unsinnig.
Da würde ich mir lieber ein fiktives Brettspiel ausdenken, etwa eine simplere Version von Schach. Aber das wär vielleicht wiederum zu schwer bzw zeitintensiv für die meisten.
BlackJack

@Nocta: Ich sehe immer noch nicht wie B angreifbar wäre. Sobald A versucht ein vielleicht von B erkanntes Muster auszunutzen, muss A das Muster ”verlassen” und damit ändert B auch sein Verhalten weil er darauf reagiert. Bis dahin müsste A aber schon eine Weile ein Muster gespielt haben um halbwegs sicher zu sein, dass B darauf spielt, damit A sozusagen das Gegenmuster voraussagen kann um das dann auszunutzen. Zu dem Zeitpunkt hat B aber schon einen kleinen Vorteil erspielt, den A wieder aufholen müsste, um überhaupt erst einmal wieder ”Gleichstand” zu erlangen.

Bei den ”Genies” im Wettbewerb meinte ich die Bots, nicht die Programmierer.

Kennst Du die Ausgangssituation denn? Fing das wirklich mit keinem Bot an, oder gab es am Anfang schon ein paar vorgegebene, eventuell auch ”dumme”, Beispiel-Bots!?
schreibmaschine
User
Beiträge: 1
Registriert: Montag 17. Oktober 2011, 19:01

Zufall gegen Zufall ergibt 50/50. Aber abweichend: Habt ihr es denn probiert? Lasse grad in einem Skript Zufall gegen "Womit hab ich bisher am meisten gewonnen" antreten und der Algerithmus liegt recht konstant bei 52-53 %. Score "Unentschieden", "Algorithmus", "Zufall" aktuell: [415, 429, 389]. Sehr banale Logik, aber scheint das Ergebnis schon zu kippen. Und das gegen einen zufällig spielenden Gegner.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Na, die paar Durchgänge sind ja noch nicht wirklich aussagekräftig ;-) Zudem kommt es noch darauf an, wie gut die Zufallsfunktion skaliert - evtl. basieren Deine Abweichungen genau auf den Abweichungen des Zufallszahlengenerators ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@schreibmaschine: Warum sollte man dafür ein Testprogramm schreiben, wenn man es einfach schnell im Kopf ausrechnen kann?
Das Leben ist wie ein Tennisball.
BlackJack

@schreibmaschine: Sind das die Ergebnisse von 1233 Runden? Wenn ja warum so eine krumme Zahl und warum so wenig? Ich denke um eine Aussage treffen zu können, dass das von den 50% abweicht, sollte man es eher in der Grössenordnung eine Million Runden laufen lassen. Stichwort: Das Gesetz der grossen Zahlen.
ProGammler88
User
Beiträge: 13
Registriert: Dienstag 6. Dezember 2011, 15:01

ich hab das noch nicht so ganz verstanden....wer gewinnt hier jetzt?? :S
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

ProGammler88 hat geschrieben:ich hab das noch nicht so ganz verstanden....wer gewinnt hier jetzt?? :S
Muss das eigentlich wirklich sein, dass du haufenweise alte Threads ausbuddelst nur um dann weitgehend sinnfreie Statements oder Pseudofragen dazu abzugeben?
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Heißt das Spiel nicht "Schere Stein Papier Echse Spock"? ;)
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Antworten