개발/AI

[Python] Logic Gate 클래스 만들기

jykim23 2023. 11. 7. 16:44

클래스 연습 겸 Logic Gate 만들기

 

class LogicGate:
    def __init__(self, w1, w2, b):
        self.w1 = w1
        self.w2 = w2
        self.b = b

    # __call__ : 함수를 지정하지 않고 호출가능. 그러므로 하나만 설정 가능
    # self.함수(x1, x2) -> self(x1, x2) 로 사용하게 됨.
    def __call__(self, x1, x2):
        z = self.w1 * x1 + self.w2 * x2 +self.b
        if z > 0: return 1
        else: return 0

class ANDGate:
    def __init__(self):
        self.gate = LogicGate(0.5, 0.5, -0.7)

    def __call__(self, x1, x2):
        return self.gate(x1, x2)
    
class NANDGate:
    def __init__(self):
        self.gate = LogicGate(-0.5, -0.5, 0.7)

    def __call__(self, x1, x2):
        return self.gate(x1, x2)

class ORGate:
    def __init__(self):
        self.gate = LogicGate(0.5, 0.5, -0.2)

    def __call__(self, x1, x2):
        return self.gate(x1, x2)
    
class NORGate:
    def __init__(self):
        self.gate = LogicGate(-0.5, -0.5, 0.2)

    def __call__(self, x1, x2):
        return self.gate(x1, x2)
    
class XORGate:
    def __init__(self):
        self.or_ = ORGate()
        self.nand_ = NANDGate()
        self.and_ = ANDGate()
    
    def __call__(self, x1, x2):
        p = self.or_(x1, x2)
        q = self.nand_(x1, x2)
        return self.and_(p, q)

class XNORGate:
    def __init__(self):
        self.nor_ = NORGate()
        self.and_ = ANDGate()
        self.or_ = ORGate()

    def __call__(self, x1, x2):
        p = self.nor_(x1, x2)
        q = self.and_(x1, x2)
        return self.or_(p, q)


if __name__ == '__main__':
    # 클래스 내부에서 검증 코드 작성시 저장된 변수가 실제 사용에 영향을 줄수 있다.
    # __name__ 메서드를 검증 용도로 사용 가능.
    # 패키지 사용할 때 아래 코드는 실행 되지 않는다.
    TT = [1, 1]
    FT = [0, 1]
    TF = [1, 0]
    FF = [0, 0]

    gate = XNORGate()
    print(gate(*TT))
    print(gate(*TF))
    print(gate(*FT))
    print(gate(*FF))

'개발 > AI' 카테고리의 다른 글

[Python] GBL : Gradient-based Learning  (1) 2023.11.13
[Python] Backpropagation  (1) 2023.11.13
[Python] Logic Gate 함수 구현 연습  (1) 2023.11.06
[AutoViz] EDA를 도와줄 시각화 툴  (1) 2023.10.31
[Numpy] random.normal 정규분포  (1) 2023.10.04