篠本先生の教科書で昔勉強したパーセプトロンのじゃんけんマシン (ソースは
ここを参照しました) をPythonで書き直してみた。
もし情報処理の授業を持つ事になったら、Pythonで機械学習とか面白いかと思ったのだが、ハードルが高い (&篠本先生の教科書は既に入手困難) か...。
GUIをつけてみたいところ。
###MAIN###
N=5
def perceptron(m,x,w,v):
prec=[]
if m<=0:
return -1
for k in range(0,3) :
prec.append(-1)
prec[m-1]=1
for k in range(0,3):
if prec[k]*v[k]<=0 :
for j in range(0,3*N+1) :
w[(3*N+1)*k+j]+=prec[k]*x[j]
for i in range(0,3*N-3) :
x[3*N-1-i]=x[3*N-4-i]
for i in range(0,3):
x[i]=prec[i]
for k in range(0,3):
v[k]=0
for k in range(0,3):
for j in range(0,3*N+1):
v[k]+=w[(3*N+1)*k+j]*x[j]
vmax=-1000000
for k in range(0,3) :
if v[k] >=vmax :
vmax=v[k]
kmax=k
return kmax+1
def main() :
total=0
v=[]
fw=[]
x=[]
w=[]
pred=0
for i in range(0,3):
v.append(0)
fw.append(0)
for i in range(0,3*N):
x.append(0)
x.append(-1)
for i in range(0, 9*N+3):
w.append(0)
print "x:",x
print "w:",w
print "v:",v
m=1
while m>0:
pred=perceptron(m,x,w,v)
while True:
try:
m = int(raw_input("1 Gu 2 Choki 3 Pa :"))
break
except ValueError:
print "Try again..."
if m>3 :
m=3
print "You",m,"vs Machine",(pred+1)%3+1
if pred==m :
print "Machine win."
fw[0]+=1
elif pred%3==m-1:
print "You win"
fw[1]+=1
else:
print "Draw"
fw[2]+=1
total+=1
print "You :",fw[1], "Machine:", fw[0], "Draw :",fw[2],"Total:", total
#print "x:",x
#print "w:",w
#print "v:",v
return 0
main()