Seite 1 von 1

Wahrscheinlichkeiten

Verfasst: Dienstag 6. Juni 2017, 20:18
von Ineckchelsis
Hallo,
ich bin neu und unerfahren (etwa 2 Wochen Erfahrung) mit Python und Programmieren im Allgemeinen deswegen falls ihr mir antwortet tut so als würdet ihr mit einem Kind reden.

Jetzt aber zu meiner Frage. Ich habe bisher eine Art Schere-Stein-Papier Spiel für Python geschrieben und möchte das Programm jetzt so erweitern, dass sich immer wenn der Spieler für eine der 3 Optionen entscheidet die Wahrscheinlichkeit für die Wahl des Computers ändert.

Im Klartext also: Der Spieler nimmt 10 Mal hintereinander Schere also erhöht sich die Wahrscheinlichkeit dafür, dass der Computer Stein nimmt und es senkt sich die Wahrscheinlichkeit dafür, dass er Papier nimmt.

Bisher hatte ich die Auswahl des Computers über random.randint() gesteuert.

Ich hab leider keine Ahnung wie ich dass hinbekommen soll.

Danke im Vorraus

Re: Wahrscheinlichkeiten

Verfasst: Dienstag 6. Juni 2017, 21:23
von nezzcarth
Als Alternative zu random.randint kannst du dir für eine ganz simple Variante mal random.choice ansehen. Das wählt ein zufälliges Element aus einer Liste aus. Du initialisierst die Liste mit den drei Elementen und fügst im Verlauf des Spiels weitere hinzu (zum Beispiel im Fall einer Niederlage das Element, das gewonnen hätte). Dadurch verschieben sich die Wahrscheinlichkeiten. Möchtest du nur die letzten zehn Züge berücksichtigen, musst du deine Liste entsprechend regelmäßig aufräumen (besonders leicht geht das mit collections.deque).

Re: Wahrscheinlichkeiten

Verfasst: Dienstag 6. Juni 2017, 22:23
von Ineckchelsis
Das heisst ich hab dann meine Liste SSP = ["Schere", "Stein", "Papier"] und immer ich jetzt beispielsweise Schere nehm fügt der dann "Stein" zur Liste hinzu ?
Aber wie mach ich das ? add "Stein" to SSP ?

Re: Wahrscheinlichkeiten

Verfasst: Dienstag 6. Juni 2017, 22:43
von /me
Ineckchelsis hat geschrieben:Aber wie mach ich das ? add "Stein" to SSP ?
Wie lernst du denn Python? Im offiziellen Tutorial ist das relativ weit vorne.

Re: Wahrscheinlichkeiten

Verfasst: Mittwoch 7. Juni 2017, 08:56
von noisefloor
Hallo,
Ich hab leider keine Ahnung wie ich dass hinbekommen soll.
So ganz trivial ist das auch nicht, weil das ja schon in den Bereich KI / machine learning geht - wenn auch in einer "soften" Form.

Es reicht ja nicht, dass das der Computer mit zählt, wie oft der menschliche Gegner hintereinander z.B. Schere nimmt. Du musst ja auch weiter drauf reagieren, wenn der menschliche Gegner seine Taktik wieder ändern. Der wichtige Punkt ist halt: der menschliche Gegner hat Intelligenz von Geburt an, dein Computerprogramm hat erst mal null Intelligenz.

Grundsätzlich ist der Weg über das erweitern einer Liste um doppelt Einträge schon richtig. Aber, wie gesagt, der Algorithmus, wann der Liste Einträge hinzugefügt und wenn wieder weg genommen werden, ist nicht ganz trivial. Ohne deinen Tatendrang bremsen zu wollen: das ist IMHO keine gute Aufgabe für einen Programmieranfänger (egal in welche Programmiersprache). IMHO macht es Sinn, dass du diese Aufgabe vielleicht ein bisschen zurückstellst, bis du mehr Erfahrung mit Datenstrukturen und Kontrollstrukturen hast.

Gruß, noisefloor

Re: Wahrscheinlichkeiten

Verfasst: Mittwoch 7. Juni 2017, 14:58
von Ineckchelsis
@noisefloor
Das war tatsächlich die Intention den Gegner so intelligent wie möglich zu machen, auch wenn meine Möglichkeiten begrenzt sind.
Natürlich kann ich keinen Gegner programmieren der so intelligent ist einen Taktikwechsel des Gegners vorraus zu sehen ist aber denk ich schon ein Schritt in die richtige Richtung. Ich werde aber auf jeden Fall deinem Vorschlag Folge leisten da ich eigentlich noch weiter ins Programmieren eintauchen will.

Re: Wahrscheinlichkeiten

Verfasst: Mittwoch 7. Juni 2017, 19:17
von nezzcarth
noisefloor hat geschrieben: So ganz trivial ist das auch nicht, weil das ja schon in den Bereich KI / machine learning geht - wenn auch in einer "soften" Form.
Anscheinend gibt es wohl auch einiges an Literatur dazu. Daher wäre mein Vorgehen -- wenn man es denn ernst meint und sich für so etwas begeistern kann -- sich einen spannend, (/interessant/originell) klingenden Ansatz herauszupicken und zu versuchen, diesen umzusetzen.

Vielleicht ist das interessant:
https://www.youtube.com/watch?v=rudzYPHuewc
https://arxiv.org/pdf/1404.5199v1.pdf
( https://www.youtube.com/watch?v=ygHwBxWyI6E https://www.youtube.com/watch?v=Z8lv2vy5vco )

Die dort beschriebenen Strategien klingen doch ganz nett und sollten nicht allzu kompliziert zu implementieren sein.