ผมลองสร้าง AI เล่น Tic-tac-toe ด้วย UmmLang
UmmLang เป็นภาษาโปรแกรมมิงแนว esoteric ที่มีให้ใช้แค่ตัวแปร, อินพุต/เอาต์พุต, เงื่อนไข และการกระโดดข้ามบรรทัดเท่านั้น
[ eoeoeom-eoeoeo,,,,,,,, sigeoeoeo keu dongtan-eo?jun. ] มีหน้าตาประมาณนี้
แทบไม่มีโครงสร้างควบคุมทั่วไปอย่างลูปหรือฟังก์ชันเลย แม้แต่จำนวนเต็มก็ยังต้องเขียนด้วยจุด (.), คอมมา (,) และช่องว่างเท่านั้น จึงเป็นสภาพแวดล้อมที่ค่อนข้างไม่สะดวกสำหรับการทำอัลกอริทึมทั่วไป
เริ่มจากผมทำ Tic-tac-toe แบบ 2×1 เพื่อทดสอบวิธีแทนกระดานและวิธีสร้าง AI
ผูกแต่ละช่องเข้ากับตัวแปรหนึ่งตัว และแทนช่องว่าง, X, O ด้วย 0, 1, 2 ตามลำดับ จากนั้นลิสต์สถานะที่เป็นไปได้ทั้งหมดด้วยคำสั่งทงทัน (IF) เพื่อให้ AI ตัดสินใจว่าจะลงตรงไหน
ระหว่างขั้นตอนนี้ก็ได้ทำอินเทอร์เฟซแสดงผลกระดานและโครงสร้างรับอินพุตจากผู้ใช้ไปด้วย
หลังจากนั้นจึงขยายเป็น Tic-tac-toe แบบ 3×3
ปัญหาคือสถานะเกมที่ถูกต้องตามกติกามีประมาณ 4,520 แบบ ทำให้การเขียนทุกกรณีเองเป็นไปไม่ได้ในทางปฏิบัติ
ผมจึงเขียนตัวสร้างโค้ดแยกด้วย Python
ตัวสร้างจะกรองสถานะเกมทั้งหมด โดยตัดกรณีที่จำนวน O มากกว่า X หรือเกมจบไปแล้วออก จากนั้นคำนวณตาที่ดีที่สุดของ AI Tic-tac-toe (อิง minimax) ในแต่ละสถานะ
ผลลัพธ์ที่คำนวณได้จะถูกแปลงอัตโนมัติให้อยู่ในรูปคำสั่งเงื่อนไขทงทันของ UmmLang และสร้างไฟล์ case.umm
สุดท้าย ผมนำสาขาเงื่อนไขทงทันหลายพันรายการที่ถูกสร้างขึ้นมาแทรกในซอร์สหลักเพื่อทำลอจิก AI ให้สมบูรณ์
เมื่อสะท้อนพิกัดที่ผู้เล่นป้อนเข้าไปในตัวแปรกระดานแล้ว ชุดคำสั่งเงื่อนไขที่สร้างไว้จะหาเคสที่ตรงกับสถานะเกมปัจจุบันและให้ AI เดินหมาก
จากนั้นแสดงกระดานอีกครั้ง และใช้ไวยากรณ์จุนกระโดดกลับไปยังส่วนรับอินพุตจากผู้ใช้เพื่อสร้างเกมลูป
กล่าวคือ ตอนรันไทม์ไม่ได้ทำการค้นหาหรือคำนวณ แต่รันเฉพาะเงื่อนไขที่สร้างไว้ล่วงหน้าเท่านั้น ดังนั้นแม้จะไม่ได้ปรับให้เหมาะสม แต่ก็สามารถสร้าง AI เล่น Tic-tac-toe ได้
ผมได้ทิ้งวิธีเล่นโดยตรงบนเว็บไซต์ Ryugod ไว้ใน GitHub ด้วย
ยังไม่มีความคิดเห็น