5 พฤษภาคม 2560

[สอนสร้างเกม] เรียนสร้างเกมกับมิกิจัง : บทที่ 6 ปัญญาประดิษฐ์

ติดตามและพูดคุยกับเราได้ที่เพจ https://www.facebook.com/PlanilaGameDeveloper

จากบทที่แล้ว เราได้เรียนรู้ขั้นตอนการพัฒนาเกม และได้ลองพัฒนาเกม TicTacToe แบบเล่นสองคนกันไปแล้ว การพัฒนาเกมแบบให้ผู้เล่นที่เป็นมนุษย์หลายคนมาเล่นกันเองนั้นสามารถทำได้ง่าย เนื่องจากเราในฐานะนักพัฒนาเกมทำเพียงแค่เขียนกฎกติกา แล้วให้เกมตรวจสอบว่าผู้เล่นได้เล่นตามกฎกติกานั้นหรือไม่เท่านั้น ในปัจจุบันการเล่นเกมด้วยกันหลายคนได้รับความนิยมเป็นอย่างมาก แต่ก็ยังคงมีอีกหลายคนที่ชอบเล่นเกมคนเดียว การพัฒนาเกมของเราให้สามารถเล่นคนเดียวได้จึงเป็นสิ่งสำคัญ ว่าแต่ "เราจะพัฒนาเกมที่ต้องมีผู้เล่นหลายคนให้เล่นคนเดียวได้อย่างไร?" คำตอบคือเราต้องพัฒนาให้เกมเป็นผู้เล่นอีกคนแทนมนุษย์จริง ๆ ซึ่งการที่เกมสามารถทำหน้าที่แทนมนุษย์นี้เราเรียกว่า "ปัญญาประดิษฐ์"


ปัญญาประดิษฐ์คืออะไร?

ปัญญาประดิษฐ์ (Artificial Intelligence) หมายถึงโปรแกรมที่มีความสามารถเหมือนมนุษย์ ทั้งด้านการคิด การวิเคราะห์ และการวางแผน อย่างที่เคยบอกไปในบทแรกว่าอุปกรณ์ทำงานตามคำสั่ง ดังนั้นการที่จะพัฒนาให้โปรแกรมทำงานเหมือนมนุษย์ได้นั้น เราต้องใส่วิธีการคิด การวิเคราะห์ และการวางแผนลงไปในอัลกอริทึมของคำสั่งด้วย ปัญญาประดิษฐ์มักถูกเรียกสั้น ๆ ว่า AI

ปัญญาประดิษฐ์ที่หลายคนรู้จักกันดีคือปัญญาประดิษฐ์ในเกมต่าง ๆ ผู้อ่านคงได้เห็นเกมนั้นเกมโน้นมีปัญญาประดิษฐ์เต็มไปหมด แต่ในความจริงแล้วปัญญาประดิษฐ์ไม่ได้มีอยู่แค่ในเกมเท่านั้น ปัญญาประดิษฐ์ยังถูกฝังอยู่ในแอพพลิเคชันหลายตัวที่เราใช้กันอยู่ในปัจจุบันด้วย เช่น ในแอพพลิเคชันแปลภาษาอัจฉริยะที่สามารถแปลภาษาทั้งประโยคได้ จะมีปัญญาประดิษฐ์ที่ทำหน้าที่วิเคราะห์ว่าประโยคนั้นสื่อความหมายอะไร แล้วแปลประโยคเป็นอีกภาษาหนึ่ง โดยให้ความหมายในประโยคยังคงเดิม, ใน Facebook เมื่อเราลงรูปใบหน้าใครสักคน เราจะเห็นได้ว่าบางครั้งจะมีข้อความขึ้นมาว่าต้องการแท็กบุคคลนี้หรือไม่ ซึ่งเกิดจากปัญญาประดิษฐ์ตรวจสอบว่าสิ่งที่อยู่ในรูปเป็นใบหน้าคน, แอพพลิเคชัน GPS ที่ใช้นำทางในการขับรถก็มีปัญญาประดิษฐ์คอยบอกว่า แยกหน้าเลี้ยวซ้าย แยกนั้นเลี้ยวขวา เป็นต้น


เกมแบบไหนที่ต้องใช้ปัญญาประดิษฐ์?

ไม่ใช่ทุกเกมที่ต้องการปัญญาประดิษฐ์เสมอไป บางเกมสามารถสมบูรณ์แบบได้โดยไม่ต้องพึ่งปัญญาประดิษฐ์เลย เกมที่ต้องการปัญญาประดิษฐ์คือเกมที่มีผู้เล่นหลายคนแต่ต้องการออกแบบให้เล่นคนเดียวได้ เช่น เกมหมากรุก เกมวางแผนการรบ เราจะพัฒนาปัญญาประดิษฐ์มาเป็นผู้เล่นอีกคนแทนมนุษย์ ส่วนเกมที่มีผู้เล่นคนเดียวก็อาจใช้ปัญญาประดิษฐ์ในบางเกม เช่น ใช้ควบคุมการต่อสู้ของมอนสเตอร์ แต่เกมประเภทนี้ไม่จำเป็นต้องใช้ปัญญาประดิษฐ์ทุกเกม


เขียนปัญญาประดิษฐ์ได้อย่างไร?

เราได้รู้แล้วว่าปัญญาประดิษฐ์คือโปรแกรมที่มีความสามารถเหมือนมนุษย์ และโปรแกรมคือชุดของคำสั่ง ดังนั้นการเขียนปัญญาประดิษฐ์ก็คือการป้อนคำสั่งที่มีความสามารถเหมือนมนุษย์ คำถามต่อมาคือ "เราจะป้อนคำสั่งที่มีความสามารถเหมือนมนุษย์ได้อย่างไร?" ลองนึกถึงขั้นตอนการพัฒนาเกม ก่อนที่เราจะลงมือพัฒนาเกมจริงบนอุปกรณ์ เราต้องเขียนอัลกอริทึมของโปรแกรมขึ้นมาก่อน แล้วค่อยพัฒนาเกมตามอัลกอริทึมนั้น ดังนั้นคำตอบของคำถามที่ว่า "เราจะป้อนคำสั่งที่มีความสามารถเหมือนมนุษย์ได้อย่างไร?" ก็คือการเขียนอัลกอริทึมที่มีการคิด การวิเคราะห์ และการวางแผนเหมือนมนุษย์ ถ้าจะเขียนปัญญาประดิษฐ์ที่ขับรถเองได้ เราก็ต้องรู้ก่อนว่ามนุษย์ขับรถได้อย่างไร ถ้าจะเขียนปัญญาประดิษฐ์ที่เล่นเกมได้ เราก็ต้องรู้ก่อนว่ามนุษย์เล่นเกมได้อย่างไร พอทราบแล้วว่ามนุษย์ทำสิ่งนั้นได้อย่างไร แล้วจึงแปลงขั้นตอนต่าง ๆ เหล่านั้นเป็นอัลกอริทึม

ในตัวอย่างนี้จะใช้เกม TicTacToe จากบทที่ 5 มาใส่คำสั่งที่เป็นปัญญาประดิษฐ์เพิ่มเติม ในการเล่นผู้เล่นจะใช้เครื่องหมาย X ส่วนโปรแกรมปัญญาประดิษฐ์จะใช้เครื่องหมาย O โดยปัญญาประดิษฐ์ในตัวอย่างนี้จะเป็นปัญญาประดิษฐ์อย่างง่าย โปรแกรมจะวางแผนล่วงหน้าเพียง 1 ตาเท่านั้น ไม่ได้ใช้สูตร TicTacToe จริง ๆ ที่เล่นอย่างไรก็ไม่มีวันแพ้ อัลกอริทึมโปรแกรมปัญญาประดิษฐ์ในตัวอย่างเกม TicTacToe มีดังนี้

ขั้นตอนที่ 1 เอาชนะ เล่นโดยไม่สนใจว่าผู้เล่นจะเรียงได้เท่าไร โปรแกรมปัญญาประดิษฐ์เล่นตานี้ก็ชนะแล้ว : ตรวจสอบเครื่องหมายของทั้งสองฝ่ายบนกระดาน แล้วสังเกตว่าโปรแกรมปัญญาประดิษฐ์เรียงเครื่องหมาย O ได้ 2 ตัวแล้วหรือไม่?
      (1.1) ถ้าใช่ ให้วางเครื่องหมาย O ตรงช่องที่จะทำให้เครื่องหมาย O เรียงครบ 3 ตัว ชนะ!
      (1.2) ถ้าไม่ใช่ ให้ทำขั้นตอนต่อไป

ขั้นตอนที่ 2 สกัดทาง ถ้าโปรแกรมปัญญาประดิษฐ์ยังเอาชนะในตานี้ไม่ได้ และผู้เล่นใกล้จะชนะ ก็พยายามสกัดไม่ให้ผู้เล่นชนะได้ : ตรวจสอบเครื่องหมายของทั้งสองฝ่ายบนกระดาน แล้วสังเกตว่าผู้เล่นเรียงเครื่องหมาย X ได้ 2 ตัวแล้วหรือไม่?
      (2.1) ถ้าใช่ ให้วางเครื่องหมาย O คั่นตรงช่องที่จะทำให้ผู้เล่นเรียงเครื่องหมาย X ครบ 3 ตัว แล้วเปลี่ยนเป็นตาของผู้เล่นทันที ไม่ต้องทำขั้นตอนต่อไป
      (2.2) ถ้าไม่ใช่ ให้ทำขั้นตอนต่อไป

ขั้นตอนที่ 3 ต่อสู้ ถ้าโปรแกรมปัญญาประดิษฐ์ยังเอาชนะในตานี้ไม่ได้ และผู้เล่นยังห่างไกลจากการชนะ โปรแกรมปัญญาประดิษฐ์จะสุ่มลงช่องใดช่องหนึ่ง (อาจไม่ได้เรียงกับเครื่องหมายเดิมที่มีอยู่ก่อน เพื่อความง่ายในการเขียนปัญญาประดิษฐ์) เสร็จแล้วเปลี่ยนเป็นตาของผู้เล่น

เนื่องจาก Pseudo Code ของโปรแกรมปัญญาประดิษฐ์มีความยาวมาก ผู้เขียนจึงแยกไปไว้ในเอกสารประกอบบทความแทน เพื่อไม่ให้บทความมีความยาวมากจนเกินไป ผู้อ่านสามารถดาวน์โหลดเอกสารประกอบบทความได้ที่ลิงค์ด้านล่างนี้ (ถ้าลิงค์เสียกรุณาแจ้ง)

ลิงค์หลัก : Mediafire
ลิงค์สำรอง : 4shared


ในบทนี้เราได้เรียนรู้ว่า "ปัญญาประดิษฐ์คืออะไร?", "เกมแบบไหนที่ต้องใช้ปัญญาประดิษฐ์?" และ "เขียนปัญญาประดิษฐ์ได้อย่างไร?" สำหรับผู้อ่านที่ยังสงสัยอยู่ว่าจะเขียนอัลกอริทึมปัญญาประดิษฐ์ได้อย่างไร ให้ผู้อ่านพยายามนึกว่าถ้าเป็นตัวผู้อ่านเอง ผู้อ่านจะทำสิ่งนั้นได้อย่างไร เขียนออกมาเป็นขั้นตอน แล้วนำไปเขียนเป็นอัลกอริทึมปัญญาประดิษฐ์ เช่น ต้องการเขียนปัญญาประดิษฐ์ให้หุ่นยนต์ต้มน้ำ ก็ลองนึกว่าผู้อ่านมีวิธีต้มน้ำได้อย่างไร เติมน้ำในหม้อ นำหม้อวางบนเตาแก๊ส เปิดเตาแก๊ส แล้วอะไรต่อก็เขียนออกมาเป็นขั้นตอนข้อ ๆ การเขียนปัญญาประดิษฐ์ก็คล้ายกับการเขียนอัลกอริทึมในบทที่ 3 ถ้าผู้อ่านสามารถเขียนอัลกอริทึมได้คล่องแล้ว การเขียนปัญญาประดิษฐ์ก็ไม่ใช่เรื่องยาก


"If you do not believe you can do it then you have no chance at all." - Arsene Wenger
"ถ้าคุณไม่เชื่อว่าคุณทำได้ คุณก็ไม่มีโอกาสทำได้"



แบบฝึกหัดประจำบทที่ 6

แบบฝึกหัดที่ 6 จงเขียนปัญญาประดิษฐ์ของเกมต่อไปนี้
  1. เกม TicTacToe แบบใช้สูตร โปรแกรมปัญญาประดิษฐ์จะต้องไม่มีทางแพ้เลย (ง่าย)
  2. เกมไพ่โป๊กเกอร์ (Poker) (ปานกลาง)
  3. เกมแบ็กแกมมอน (Backgammon) (ปานกลาง)
  4. เกมโอเทลโล่ (Othello) (ยาก)
  5. เกมหมากฮอส (ยาก)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น