Python3
論理回路
デジタルコンピューティング

Pythonでコンピュータを作る#3 -単純な論理回路-

More than 1 year has passed since last update.

最近買ったiPadに傷をつけてしまい,自分も凹んでいるMotmuuです.

今回は前回学んだパーセプトロンというアルゴリズムを用いて,ANDゲート・NANDゲート・NORゲートについて勉強していきます.

パーセプトロン?!?!という方はこちら


開発環境

以下の環境で勉強していきたいと思います.

・Python 3.6.5

・Mac OS X 10.13.2

・Atom 1.10.2

サンプルコードはこちら


ANDゲート

ANDゲートとは2入力1出力のゲートです.

ANDゲートの真理値表とは以下のようになります.

x1
x2
y

0
0
0

0
1
0

1
0
0

1
1
1

この条件を満たすようにパーセプトロンのパラメタを定めると,

(w1,w2,θ) = (0.5,0.5,0.6)

のようになります.(答えは1つではありません!)

ではこの条件を用いて,Pythonで実装してみましょう!

gates/AND.py

# ANDをクラスとして作成(今後組み合わせることを見越して..)
class AND():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = 0.5
w2 = 0.5
t = 0.6
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0

# 実際に真理値表のようになるか確かめてみました.

print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

Terminalで実行してみると結果は以下のようになります.



******$ python and.py
0
0
0
1

これは真理値表のyと一致しています!

つまりANDゲートをパーセプトロンを用いて実装できました.

同様にNANDゲートとORゲートについても勉強していきたいと思います~.


NANDゲート

NANDゲートはANDゲートと逆のものを示します.

なので,真理値表は以下のようになります.

x1
x2
y

0
0
1

0
1
1

1
0
1

1
1
0

このように,x1もx2も1の時に出力が0になります.

それではこのような入出力を満たすパラメタを考えます.

うーん.

(w1,w2,θ) = (-0.5,-0.5,-0.6) とかですかね...(これも色々あります)

それではサクッと実装していきましょう!

gates/NAND.py

# NANDをクラスとして作成
class NAND():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = -0.5
w2 = -0.5
t = -0.6
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0

# 実際に真理値表のようになるか確かめてみる

print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))

またTerminalでの実行結果は以下のようになります.



********$ python nand.py
1
1
1
0

これも真理値表と一致していますね!

お気づきかもしれませんが,NANDゲートはANDゲートノパラメタの正負を入れ替えたものになっていますね!

このシンプルさがパーセプトロンの素晴らしさでもあります.

感嘆しながら,ORゲートも実装してみましょう.


ORゲート

例によってORゲートの真理値表は以下のようになります.

x1
x2
y

0
0
0

0
1
1

1
0
1

1
1
1

上のように,x1,x2のどちらかが1であれば出力は1になります.

これを満たすパーセプトロンのパラメタは,

(w1,w2,θ) = (0.5,0.5,0.4) とかですかね.

ではPythonで実装します!


# ORをクラスとして作成
gates/OR.py

class OR():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = 0.5
w2 = 0.5
t = 0.4
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0

# 実際に真理値表のようになるか確かめてみる

print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))

出力は以下の通りで真理値表と一致しています.

*******$ python or.py

0
1
1
1


振り返り

どうでしたか.

パーセプトロンを用いると簡単に論理ゲートが実装できました.

そしてこの論理ゲートこそがコンピュータをつくって行く魔法の部品です.

なんとなく0と1でコンピュータが構成できるのが現実的になってきましたね...! (そうでもないですか??笑)

それでは次回はパーセプトロンのできることできないことを勉強し,他の論理回路についても学習していきましょう!

次はこちら -> #4 XORゲート