pattern = [(0.0,0.0,0.0),(0.0,1.0,0.0),(1.0,0.0,0.0),(1.0,1.0,1.0)] ler = 0.1 w1 = 0.3 w2 = -0.1 def act(x1,x2,w1,w2,t=0.2): """ 1 if W0 *I0 + W1 * I1 + Wb > 0 0 if W0 *I0 + W1 * I1 + Wb <= 0 """ summ = x1*w1+x2*w2-t #print x1*w1,x2*w2-t, print summ y = 0.0 if summ >= 0.0: y=1.0 return y def adjust(w,ler,y,d,iod): if iod == 1: #w += ler*(d-y) w += ler if iod == 0: w -=ler return w def tlu(patt,lvl=0): lvl=lvl+1 if lvl > 20: print lvl return 0 global w1,w2,ler error = True while(error): if lvl>20: print lvl return 0 error = False for i in patt: x1,x2,out = list(i) y = act(x1,x2,w1,w2) print y if y > out: error = True #print "old weights" ,w1,w2, "level",lvl-1 if x1 == 1: w1 = adjust(w1,ler,y,out,0) if x2 == 1: w2 = adjust(w2,ler,y,out,0) print "new weights", w1,w2, "level",lvl if out > y: error = True #print "old weights" ,w1,w2, "level",lvl if x1 == 1: w1 = adjust(w1,ler,y,out,1) if x2 == 1: w2 = adjust(w2,ler,y,out,1) print "new weights", w1,w2, "level",lvl lvl+=1 print "success, adjusted weigths are " ,w1,w2, "level",lvl-1 print 30*'*' print "actual output","\t","desired output" for i in patt: x1,x2,out = list(i) print act(x1,x2,w1,w2), "\t\t",out tlu(pattern)