import numpy as np x1 = np.array([0, 0, 1, 1]) x2 = np.array([0, 1, 0, 1]) y1 = np.array([0, 0, 0, 1]) y2 = np.array([0, 1, 1, 1]) #真值表 alpha = 0.01 w0 = -0.8 w1 = 0.6 w2 = 0.4 def fx(x1, x2): return w1*x1+w2*x2+w0 #定义阶跃函数 def Fx(m,n): #激活函数 if(fx(m,n)>0): return 1 else: return 0 #与运算循环 for i in range(5000): w0 = w0 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * alpha w1 = w1 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x1[i % 4] * alpha w2 = w2 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x2[i % 4] * alpha if (abs(fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) < 0.001 and abs( # 如果偏导小于0.001,输出此时权重及偏导 (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x1[i % 4]) < 0.001 and abs( (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x2[i % 4]) < 0.01): print(w0, w1, w2) break # 或运算 for i in range(5000): w0 = w0 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * alpha w1 = w1 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x1[i % 4] * alpha w2 = w2 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x2[i % 4] * alpha if (abs(fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) < 0.001 and abs( (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x1[i % 4]) < 0.001 and abs( (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x2[i % 4]) < 0.01): print(w0, w1, w2) break