@yipyip,
Code lesen macht mehr Spass, als Löcher in Bauch gefragt bekommen
Danke!
Hyperion,
mit der Lapace-Wahrscheinlichkeit hatte ich anfangs fälschlich was anderes assoziiert.
Habe nachgeschaut.
Klar, das ist sozusagen die Richtschnur, an der sich Abweichungen nach oben wie nach
unten messen lassen. Praktisch braucht es also eine Zahl, die diese Wahrscheinlichkeit
repräsentiert. Und eben genau diese Zahl erhalte ich durch die Dreiergruppierung!
Die Zahl der Dreier repräsentiert die Laplace-Wahrscheinlichkeit. Womit ich in der Folge
diese LW nicht mehr extra berechnen muss. Und bei notwendigen Berechnungen lassen
sich Dezimalbrüche gut vermeiden - was wohl auch nicht ganz unwichtig ist.
Beispiel:
Um eine 30 Zeichen lange Sequenz zu erhalten, mussen 10 Dreier aneinandergehängt/erzeugt
werden. Die Zahl '10' steht für die jeweiligen Chancen dieser Sequenz 10 mal zu gewinnen,
10 mal zu verlieren und 10 mal unentschieden zu spielen. Erfolgreich ist eine Sequenz, wenn
sie mehr als 10 plus x Treffer erzielt hat.
Der Witz bei der Geschichte ist doch, dass in dem eigentlichen Spiel schon die Drittellung
vorgegeben ist und es darum auch Sinn macht die Regeln danach auszurichten.
Ich habe auch nicht, wie Du anzunehmen scheinst, eine andere KI, sondern allein die nackte
Random-Funktion zum 'Gegner'. Was Du andenkst ist eine andere 'Baustelle' und sehr
viel komplexer als ich bei diesem Beispiel im Sinne habe. Zu allererst will ich ja an einem
überschaubarem Projekt das Programmieren mit Python lernen, und nicht etwa ein tolles
KI-Script schreiben.
Die eigentliche Spiel-Funktion ist soweit klar. Da spielt es auch keine Rolle wie die Sequenzen
entstehen, weil die Zeichen der Funktion einzeln übergeben werden und sie auch
Einzelergebnisse liefert. Auch die Erzeugung der Sequenzen ist soweit klar. Hier noch einmal
beide Funktionen zusammen:
Code: Alles auswählen
import random
def sim(inp):
a = inp
if a == "a":
a = 1
if a == "b":
a = 2
if a == "c":
a = 3
aplay = 0; bplay = 0
b = random.randint(1,3)
if a == b:
pass
else:
if a > b:
z = a - b
if z == 1:
aplay = 1
else:
bplay = 1
else:
z = b - a
if z == 1:
bplay = 1
else:
aplay = 1
if a == 1:
ap = 'a'
if a == 2:
ap = 'b'
if a == 3:
ap = 'c'
if b == 1:
bp = 'a'
if b == 2:
bp = 'b'
if b == 3:
bp = 'c'
return aplay, ap, bplay, bp
Beispielaufrufe:
Code: Alles auswählen
>>> from sim3 import sim
>>> sim('a')
(1, 'a', 0, 'c')
>>> sim(1)
(1, 'a', 0, 'c')
>>> sim(3)
(0, 'c', 1, 'a')
>>> sim('c')
Zufallssequenzen bekommt man mit dieser Funktion:
Code: Alles auswählen
def snake(anz3er):
a = anz3er
dic = {1 : 'abc',2 : 'acb',3 : 'bca',4 : 'bac',
5 : 'cba',6 : 'cab',7 : 'aab', 8 : 'aba',
9 : 'baa',10 : 'bba',11 : 'abb',12 : 'bab',
13 :'cca',14 : 'acc',15 : 'cac', 16 : 'aaa',
17 : 'bbb', 18 : 'ccc', 19 : 'aac', 20 : 'ccb',
21 : 'cbc', 22 : 'bcc', 23 : 'bbc', 24 : 'cbb',
25 : 'bcb', 26 : 'aca', 27 : 'caa'}
snake = ""
for z in range(a):
x = random.randint(1, 27)
snake += dic[x]
return snake
Testausgabe:
Code: Alles auswählen
>>>
>>> from abc1 import snake
>>> snake(1)
'cca'
>>> snake(3)
'aaababaca'
>>> snake(1000)
'abbacacbbacacccbbcabcbaabccbbabbcbcaabbbcbbcbcbbbaaacbbbbbcbaaacb
acbcbccbbbbbabbabbaaccccccccbbbbabaabcbaacaccbbacaccaa....'
Danke fürs Mitdenken!