Monday, March 29, 2010

Fuzzy Inference System

Fuzzy Inference System หรือ FIS คือระบบที่ทำการหาข้อสรุป ผลลัพธ์ โดยใช้กระบวนการทาง Fuzzy logic
เช่น จะต้องการตอบโจทย์ที่ว่า

"ควรจะให้ทิปพนักงานร้านอาหารเท่าใด ถ้าหากว่าปริมาณทิปขึ้นอยู่กับคุณภาพการบริการของพนักงาน และรสชาติของอาหาร"

โดยทั่วไป FIS จะมีสองแบบคือ แบบ Mamdini และ แบบ Sugeno ซึ่งหลักการใกล้เคียงกัน แต่ต่างกันที่ขั้นตอนการได้มาซึ่งผลลัพธ์ (Defuzzification)

ขั้นตอนการหาข้อสรุปโดยใช้ FIS จะเป็นดังนี้
1. กำหนด Input และ Output
Input:
1. คุณภาพการบริการ (Service) แบ่งเป็น 3 ระดับ แย่ (poor)  ดี (good) ดีมาก (excellent) อยู่ในช่วง 0-10
2. รสชาติของอาหาร (Food) แบ่งเป็น 2 ระดับ แย่ (poor)  ดีมาก (excellent) อยู่ในช่วง 0-10
Output:
ทิป แบ่งเป็น 3 ระดับ น้อย (small) ปานกลาง (normal) มาก (large) อยู่ในช่วง 0-30%

สมมติว่า ในโจทย์ข้อนี้ เราต้องการหาค่าทิป เมื่อ คุณภาพการบริการอยู่ที่ 3 และ รสชาติของอาหารอยู่ที่ 8

2. กำหนดดีกรีของ Input และ Output ให้สัมพันธ์กับระดับที่กำหนดไว้
ขั้นตอนนี้ก็คือการกำหนดรูปร่างของ membership function นั่นเอง ซึ่งมีหลายรูปแบบเช่น สามเหลี่ยม คางหมู gaussian ฯลฯ และมักจะถูกกำหนดโดยอาศัยประสบการณ์ หรือแบบสอบถามจากผู้เชี่ยวชาญต่างๆ

สมมติว่าเรากำหนดดังนี้
Input:
1. Service เป็นแบบ gaussian



2. Food เป็นแบบ trapezoid

Output:
Tip เป็นแบบ triangle


3. กำหนดกฎ (Rules) ของการตัดสินใจ
Rule 1: ถ้าบริการแย่ หรือ รสชาติแย่ จะทิปน้อย
Rule 2: ถ้าบริการดี จะทิปปานกลาง
Rule 3: ถ้าบริการดีมาก หรือ รสชาติดีมาก จะทิปมาก

4. ทำการ Fuzzy Input นั่นคือหาว่า ถ้า Input เป็นเท่านี้ จะได้ดีกรีเท่าใด โดยดูจากกราฟของ membership function ในข้อ 2 และกฎที่ตั้งไว้ในข้อ 3 ตัวอย่างเช่น
Rule 1: ถ้าบริการแย่ หรือ รสชาติแย่ จะทิปน้อย
จากโจทย์ ตอนนี้ Input คือ service = 3, food =  8

สนใจข้อความแรก ถ้าบริการแย่ จะได้ดีกรีเท่าใด
ดังนั้น เราจะเลือกกราฟของ bad service แล้วหาค่าดีกรี เมื่อ service = 3 (เส้นสีแดง) ซึ่งจะได้ ดีกรีประมาณ 0.2 (ค่าตามแกน y)
เช่นเดียวกัน สำหรับข้อความที่สอง ถ้ารสชาติแย่ จะได้ดีกรีเท่าใด
ดังนั้น เราจะเลือกกราฟของ bad food แล้วหาค่าดีกรี เมื่อ food = 8
จะได้ดีกรีเป็น 0 เพราะไม่ตัดกราฟเลย ตามรูป
จากกฎข้อแรกนี้ คือ "ถ้าบริการแย่ หรือ รสชาติแย่ จะทิปน้อย" สังเกตว่าเราเชื่อมต่อทั้งสองกรณีด้วยคำว่า หรือ ซึ่งก็คือ OR หรือค่า max ตามหลักการของ fuzzy logic นั่นเอง 

ดังนั้น จะได้ว่าดีกรีของกฎที่ 1 จะเท่ากับ max(0.2, 0) = 0.2

เมื่อพิจารณาทุกกฎตามหลักการนี้แล้ว ก็จะได้ผลลัพธ์ดังภาพต่อไปนี้



นั่นคือ
จากกฎข้อ 1 ได้ดีกรีประมาณ 0.2
จากกฎข้อ 2 ได้ดีกรีประมาณ 0.5
จากกฎข้อ 1 ได้ดีกรีประมาณ 0.5

5. ทำการ implication เพื่อหาผลลัพธ์ของแต่ละกฎ
เมื่อได้ดีกรีตามแต่ละกฎแล้ว ขั้นตอนต่อไปคือการเอาไปเปรียบเทียบกับ membership function ของผลลัพธ์ที่คาดการณ์ไว้ ซึ่งจะมีการใช้โอเปอร์เรเตอร์ได้หลายรูปแบบ ที่นิยมกันก็ืคือ ค่าต่ำสุด (min) นั่นคือ เมื่อเอาดีกรีไปเทียบกับกราฟผลลัพธ์ทางขวามือ ผลลัพธ์คือพื้นที่กราฟที่อยู่ใต้ค่าดีกรีนั้น ดังรูปต่อไปนี้ซึ่งแสดงผลลัพธ์ของกฎแรก

Rule 1: ถ้าบริการแย่ หรือ รสชาติแย่ จะทิปน้อย

ให้สังเกตว่า เราจะต้องเลือกกราฟให้สอดคล้องกับกฎด้วย เช่น กราฟผลลัพธ์ก็ต้องเลือกส่วนที่เป็น "ทิปน้อย" มาพิจารณา ไม่ได้เอามาทั้งหมด

เมื่อพิจารณาทุกกฎแล้ว จะได้ผลลัพธ์ดังนี้



6. รวมผลลัพธ์ทั้งหมดเข้าด้วยกัน (aggregation)
จากขั้นตอนที่ 5 เราจะได้ผลลัพธ์ของแต่ละกฎในรูปของ fuzzy set (ค่าประมาณในแต่ละกฎว่าผลลัพธ์จะอยู่ในช่วงใด) จากนั้นเราจะรวมผลลัพธ์ทั้งหมดเข้าด้วยกัน ซึ่งก็จะต้องมีวิธีการรวม ว่าจะใช้โอเปอร์เรเตอร์แบบใดอีก ซึ่งในที่นี้จะใช้การรวมแบบ max คือเอาค่าสูงสุดที่เป็นไปได้จากผลรวม

ผลลัพธ์จากการรวมแบบหาค่าสูงสุด


7. ทำการ Defuzzification เพื่อหาผลลัพธ์สุดท้าย
ผลลัพธ์ของขั้นตอนที่ 6 ยังอยู่ในรูปแบบของ fuzzy set นั่นคือ คำตอบที่ได้ควรจะอยู่ในพื้นที่ของกราฟที่กำหนด เืพื่อที่จะให้ได้ผลลัพธ์ที่ออกมาชัดเจนเป็นตัวเลข เช่น ทิปจะเป็นกี่เปอร์เซนต์ จำเป็นต้องแปลงค่า fuzzy set ให้เป็นเลขตัวเดียว ขั้นตอนนี้เรียกว่า Defuzzification ซึ่งทำได้หลายแบบ เช่น การหาค่า centroid ของพื้นที่, การหาค่าสูงสุดของทั้งหมด, การหาค่าต่ำสุดของค่าสูงสุดทั้งหมด ฯลฯ ในที่นี้จะใช้การหาค่า centroid ซึ่งจะได้ผลลัพธ์ดังเส้นสีแดงในรูปต่อไปนี้ ซึ่งจะได้ว่าค่าทิปควรจะเป็น 18% โดยประมาณ



โดยสรุป ขั้นตอนทั้งหมดของ FIS จะสามารถแสดงได้ดังรูป

 

เสร็จเรียบร้อยแล้วครับ การแก้ปัญหาโดยใช้ Fuzzy Inference System

3 comments:

  1. อยากทราบว่า พอเราหาค่า centroid ออกมาได้เเล้วอะค่ะ เราสามารถนำค่านั้นไปใช้ได้เลยหรือคะ หรือว่ายังไงคะ อยากให้ช่วยอธิบายให้หน่อยคะ ^^

    ReplyDelete
  2. การ fuzzification สามารถกำหนดค่าmembership function ได้เองเลยหรือเปล่าคะ หรือต้องมีทฤษฎีอะไรมาใช้

    ReplyDelete