Wahrscheinlichkeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ineckchelsis
User
Beiträge: 3
Registriert: Dienstag 6. Juni 2017, 19:28

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
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

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).
Ineckchelsis
User
Beiträge: 3
Registriert: Dienstag 6. Juni 2017, 19:28

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 ?
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Ineckchelsis
User
Beiträge: 3
Registriert: Dienstag 6. Juni 2017, 19:28

@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.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

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.
Antworten