利用感知机实现逻辑电路(与门、与非门、或门、异或门)
利用感知机实现逻辑电路(与门、与非门、或门、异或门)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def AND(x1, x2):
"""
与门实现(单层感知机)
:param x1: 输入信号1
:param x2: 输入信号2
:return: 输出信号
"""
# 输入信号数组
x = np.array([x1, x2])
# 权重数组
w = np.array([0.5, 0.5])
# 偏置
b = -0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def NAND(x1, x2):
"""
与非门实现(单层感知机)
:param x1: 输入信号1
:param x2: 输入信号2
:return: 输出信号
"""
# 输入信号数组
x = np.array([x1, x2])
# 权重数组
w = np.array([-0.5, -0.5])
# 偏置
b = 0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def OR(x1, x2):
"""
或门实现(单层感知机)
:param x1: 输入信号1
:param x2: 输入信号2
:return: 输出信号
"""
# 输入信号数组
x = np.array([x1, x2])
# 权重数组
w = np.array([0.5, 0.5])
# 偏置
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
def XOR(x1, x2):
"""
异或门实现(多层感知机)
:param x1: 输入信号1
:param x2: 输入信号2
:return: 输出信号
"""
# 与非门运算
s1 = NAND(x1, x2)
# 或门运算
s2 = OR(x1, x2)
# 与门运算
y = AND(s1, s2)
return y
def doit():
"""
测试函数
"""
res = XOR(0, 0)
print(res)
doit()