ตรรกศาสตร์คลุมเครือ

Fuzzy Logic — ค่าความจริงต่อเนื่องในช่วง [0, 1] สำหรับจัดการความไม่แน่นอนเชิงภาษา พร้อมการจำลองแบบอินเทอร์แอคทีฟ

5.1 หลักการ 5.2 ฟัซซีเซต 5.3 ตัวดำเนินการ 5.4 ระบบควบคุม 5.5 การประยุกต์ 6. แบบฝึกหัด

5. เนื้อหาสาระ

5.1 หลักการตรรกศาสตร์คลุมเครือ

ตรรกศาสตร์คลุมเครือ (Fuzzy Logic) ที่เสนอโดย Lotfi Zadeh (1965) ขยายแนวคิดเซตทั่วไปจากค่าความเป็นไปได้ {0, 1} ไปสู่ค่าต่อเนื่องในช่วง [0, 1] ซึ่งสะท้อนความไม่แน่นอนเชิงภาษาธรรมชาติ เช่น "อุ่น" "ค่อนข้างร้อน" ได้ดีกว่าตรรกศาสตร์ทวิภาค (Boolean)

เปรียบเทียบ "ร้อน": ตรรกศาสตร์ทวิภาค (เส้นขั้นบันได) กับ ฟัซซี (เส้นลาดต่อเนื่อง)

Crisp — ร้อน/ไม่ร้อน (0 หรือ 1) Fuzzy — ระดับความร้อน (0…1)

5.2 ฟัซซีเซตและฟังก์ชันสมาชิก

ฟัซซีเซต A นิยามด้วยฟังก์ชันสมาชิก (Membership Function) μA(x): X → [0,1] รูปแบบที่นิยม ได้แก่ Triangular, Trapezoidal, Gaussian และ Sigmoidal เลือกใช้ตามรูปร่างของข้อมูลและลักษณะเชิงภาษา

🎚️ ลองปรับชนิดและพารามิเตอร์ของฟังก์ชันสมาชิก

5.3 ตัวดำเนินการฟัซซี

ตัวดำเนินการหลัก: AND = min(μA, μB), OR = max(μA, μB), NOT = 1 − μA (ทั่วไปคือ T-norm และ S-norm ตามลำดับ)

🎚️ เลื่อนค่าสมาชิกของ A และ B เพื่อดูผลของตัวดำเนินการ

5.4 การสร้างระบบควบคุมแบบฟัซซี

ระบบควบคุมแบบฟัซซี (Mamdani) มี 4 ขั้นตอน:

  1. 1Fuzzification — แปลงค่าตัวเลขเป็นค่าฟัซซี
  2. 2Inference — ประเมินกฎ IF-THEN (Mamdani/Sugeno)
  3. 3Aggregation — รวมผลของทุกกฎ
  4. 4Defuzzification — แปลงกลับเป็นตัวเลข (Centroid)

🌀 ระบบควบคุมพัดลมแบบฟัซซี — ปรับอุณหภูมิและความชื้น แล้วดูผลแบบ Real-time

(เดโมนี้คือคำตอบของแบบฝึกหัด 6.2 และ 6.3 ที่ทำงานจริงในเบราว์เซอร์)

เย็น อุ่น ร้อน
ชื้นต่ำ ชื้นสูง

กฎ IF-THEN (4 กฎ) และระดับการทำงาน (firing strength)

ผลรวมของกฎ (Aggregation) และจุด Defuzzification (Centroid)

ช้า กลาง เร็ว พื้นที่ผลรวม
0%
ความเร็วพัดลม (Defuzzified)

5.5 การประยุกต์ใช้ในงานจริง

ระบบควบคุมแบบฟัซซีถูกใช้อย่างแพร่หลายในอุปกรณ์และระบบอัจฉริยะหลายชนิด:

เครื่องปรับอากาศ — ปรับอุณหภูมิ/ความแรงลมนุ่มนวล
เครื่องซักผ้า — เลือกรอบซักตามปริมาณ/ความสกปรก
รถยนต์ขับเคลื่อนอัตโนมัติ — เบรก/เร่งตามสถานการณ์
ระบบแนะนำการบำรุงรักษาฮาร์ดแวร์

6. แบบฝึกหัด / แบบทดสอบ

6.1

ออกแบบ Triangular MF สำหรับอุณหภูมิ (เย็น/อุ่น/ร้อน) ในช่วง 0–40 °C

ตัวอย่างคำตอบ (ปรับได้ในเดโม 5.2/5.4): กำหนดจุด [a, b, c] ของแต่ละพจน์

เย็น = trimf[0, 0, 20] อุ่น = trimf[10, 20, 30] ร้อน = trimf[20, 40, 40]
6.2

เขียนกฎฟัซซี IF-THEN สำหรับควบคุมพัดลม 4 กฎ

  • R1: IF ร้อน OR ชื้นสูง THEN พัดลม = เร็ว
  • R2: IF อุ่น THEN พัดลม = กลาง
  • R3: IF เย็น AND ชื้นต่ำ THEN พัดลม = ช้า
  • R4: IF อุ่น AND ชื้นสูง THEN พัดลม = เร็ว
6.3

ใช้ scikit-fuzzy สร้างระบบควบคุมพัดลมและทดสอบ

เฉลย (ไฟล์ fuzzy_fan_control.py) — ติดตั้งด้วย pip install scikit-fuzzy

import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # 1) ตัวแปรเข้า (Antecedent) และตัวแปรออก (Consequent) temp = ctrl.Antecedent(np.arange(0, 41, 1), 'temp') humid = ctrl.Antecedent(np.arange(0, 101, 1), 'humid') fan = ctrl.Consequent(np.arange(0, 101, 1), 'fan') # 2) ฟังก์ชันสมาชิก (Triangular) temp['cold'] = fuzz.trimf(temp.universe, [0, 0, 20]) temp['warm'] = fuzz.trimf(temp.universe, [10, 20, 30]) temp['hot'] = fuzz.trimf(temp.universe, [20, 40, 40]) humid['low'] = fuzz.trimf(humid.universe, [0, 0, 60]) humid['high'] = fuzz.trimf(humid.universe, [40, 100, 100]) fan['slow'] = fuzz.trimf(fan.universe, [0, 0, 50]) fan['medium'] = fuzz.trimf(fan.universe, [25, 50, 75]) fan['fast'] = fuzz.trimf(fan.universe, [50, 100, 100]) # 3) กฎ IF-THEN (4 กฎ ตามข้อ 6.2) r1 = ctrl.Rule(temp['hot'] | humid['high'], fan['fast']) r2 = ctrl.Rule(temp['warm'], fan['medium']) r3 = ctrl.Rule(temp['cold'] & humid['low'], fan['slow']) r4 = ctrl.Rule(temp['warm'] & humid['high'], fan['fast']) # 4) สร้างระบบ + ทดสอบกับอินพุต system = ctrl.ControlSystem([r1, r2, r3, r4]) sim = ctrl.ControlSystemSimulation(system) sim.input['temp'] = 28 sim.input['humid'] = 70 sim.compute() print(f"ความเร็วพัดลม = {sim.output['fan']:.1f} %") # ≈ ตรงกับเดโมด้านบน