인공지능 7강

yoneeki·2025년 4월 5일

knou

목록 보기
7/14

7강

퍼지이론 (Fuzzy Logic)


1. 퍼지이론이란?

  • 전통적인 논리(True/False)의 한계를 극복하기 위한 이론
  • 명확하게 참/거짓을 구분할 수 없는 상황을 수치적으로 표현
  • 예: 체온 37.9℃ → '정상'인가? '고열'인가?

2. 퍼지집합 (Fuzzy Set)

● 정의

  • 원소가 집합에 속할 가능성(소속 정도)을 [0, 1] 범위의 값으로 표현

● 고전집합 vs 퍼지집합

  • 고전집합: 0 또는 1
  • 퍼지집합: 예) {(2, 1.0), (3, 0.5)}

● 소속함수 (Membership Function)

  • 퍼지집합 A의 소속함수:
    μA(x): X → [0, 1]

3. 퍼지집합의 연산

● 여집합

  • μ¬A(x) = 1 - μA(x)

● 합집합

  • μA∪B(x) = max(μA(x), μB(x))

● 교집합

  • μA∩B(x) = min(μA(x), μB(x))

● 퍼지 연산자의 특성

  • 교환법칙, 결합법칙, 분배법칙, 드모르간 법칙 대부분 만족
  • 예외:
    • A ∪ ¬A ≠ U
    • A ∩ ¬A ≠ ∅

4. 퍼지논리 (Fuzzy Logic)

● 고전논리와 비교

  • 고전논리: True (1), False (0)
  • 퍼지논리: 연속적인 값 (0 ≤ x ≤ 1)

● Łukasiewicz 퍼지논리 연산자

  • 부정: ~a = 1 - a
  • 논리곱(AND): a ∧ b = min(a, b)
  • 논리합(OR): a ∨ b = max(a, b)
  • 조건명제(IF a THEN b): a → b = min(1, 1 - a + b)

5. 퍼지추론 (Fuzzy Inference)

● 퍼지 규칙

  • 형태: IF <조건> THEN <결론>
  • 예: IF 수위가 높다 THEN 밸브를 연다

● 추론 방식

  • 퍼지관계 R: a → b = min(a, b) (Mamdani 방식)
  • 합성 연산: μA∘R(y) = max_x (min(μA(x), μR(x, y)))

6. 퍼지제어 (Fuzzy Control)

● 퍼지 제어기 구조

  • 퍼지화(Fuzzification)
  • 퍼지추론부
  • 지식베이스
  • 비퍼지화(Defuzzification)

● 예: 물탱크 수위 제어

  • 규칙 1: IF 수위가 높다 → 밸브를 연다
  • 규칙 2: IF 수위가 낮다 → 밸브를 닫는다
  • 추론 결과를 통해 적절한 밸브 각도 계산 (예: 58°)

✅ 요약

  • 퍼지이론은 참/거짓의 중간 값을 수치적으로 표현할 수 있어 현실 세계의 모호함을 처리하기에 적합
  • 퍼지집합은 소속함수를 통해 연속적인 멤버십 값을 가짐
  • 퍼지논리는 연산을 통해 다양한 논리 계산을 가능하게 함
  • 퍼지추론은 퍼지 규칙과 소속함수를 활용해 모호한 정보를 추론 가능
  • 퍼지제어는 실제 시스템 제어(예: 온도, 수위 등)에 활용됨

퍼지이론 코드


✅ 예제 1: 소속함수 시각화

import numpy as np
import matplotlib.pyplot as plt

# '높은 수위'에 대한 소속함수 정의 (삼각형 함수)
def high_water_level(x):
    if x <= 50:
        return 0
    elif 50 < x < 100:
        return (x - 50) / 50
    else:
        return 1

x_vals = np.linspace(0, 150, 300)
y_vals = [high_water_level(x) for x in x_vals]

plt.plot(x_vals, y_vals)
plt.title("소속함수: 높은 수위")
plt.xlabel("수위(cm)")
plt.ylabel("소속도")
plt.grid(True)
plt.show()

✅ 예제 2: 퍼지 규칙 기반 추론 (수위 제어)

def fuzzy_rule(water_level):
    # 소속도 계산
    high = high_water_level(water_level)
    low = 1 - high  # 단순히 보완관계로 설정

    # 퍼지 규칙 적용
    open_valve = high * 100  # 퍼지결론: 밸브 여는 정도 (%)
    close_valve = low * 100

    return open_valve, close_valve

# 예: 수위가 70일 때
wl = 70
open_valve, close_valve = fuzzy_rule(wl)
print(f"수위: {wl}cm → 밸브 개방: {open_valve:.2f}%, 밸브 닫힘: {close_valve:.2f}%")

✅ 예제 3: 퍼지 추론 + 비퍼지화 (Defuzzification)

def defuzzify(open_valve, close_valve):
    # 단순 평균 defuzzification
    return (open_valve * 1 + close_valve * 0) / (open_valve + close_valve)

valve_position = defuzzify(open_valve, close_valve)
print(f"최종 밸브 제어값 (0~1 범위): {valve_position:.2f}")

✅ 실제 활용 예: 퍼지 제어기 전체 흐름

def fuzzy_controller(water_level):
    open_valve, close_valve = fuzzy_rule(water_level)
    valve_position = defuzzify(open_valve, close_valve)
    return valve_position

# 수위 입력
for level in [30, 50, 70, 90, 110]:
    print(f"수위 {level}cm → 밸브 위치: {fuzzy_controller(level):.2f}")

✅ 요약

  • 소속함수는 퍼지집합의 핵심으로, 멤버십을 수치화함
  • 퍼지 규칙(IF 수위 높다 THEN 밸브 연다)는 실제 제어 로직에 적용됨
  • 퍼지추론 후 비퍼지화를 통해 실제 수치로 조정값을 계산함
  • 이 전체 흐름은 온도조절기, 습도제어기, 차량 제어 시스템 등에 사용됨
profile
Working Abroad ...

0개의 댓글