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

Robocode เป็นโปรแกรม Opensource สำหรับการศึกษาเริ่มโดยนาย Mathew Nelson (ซึ่งจัดทำโดย IBM) ในขณะนี้มีผู้คนมากมายเข้ามาเป็นส่วนร่วม แต่คนที่รับผิดชอบโปรเจ๊คตอนนี้ก็คือ Flemming N. Larsen มีหน้าที่แก้บั๊กและพัฒนาเวอร์ชั่นถัดๆไป เกมส์ถูกออกแบบมาเพื่อช่วยเรียนรู้ภาษา Java และความรู้ทางด้านปัญญาประดิษฐ์ ซึ่งเริ่มได้ง่ายมาก หุ่นยนต์ง่ายๆสามารถเขียนได้ภายใน 2-3 นาที แต่ถ้าหุ่นยนต์ที่สมบูรณ์แบบก็จะกินเวลาหลายเดือนหรือมากกว่านั้น
ลักษณะของเกมส์ พวกร่วมเข้าแข่งขันเขียนซอฟต์แวร์ควบคุมหุ่นยนต์ขนาดเล็กที่สู้กับหุ่นยนต์ตัวอื่นที่เหมือนกัน (แต่คนละโปรแกรม) หุ่นยนต์เคลื่อนที่ ยิง ค้นหาหุ่นยนต์ตัวอื่น และ ชนกำแพงหรือชนกับหุ่นยนต์ตัวอื่น(ถ้าพวกมันไม่ระวัง) แนวคิดและกติกาของเกมส์นั้นเข้าใจง่าน แต่สิ่งที่ยากและสำคัญที่สุดคือกลยุทธ์ หุ่นยนต์บางตัวอาจจะประกอบไปด้วยโปรแกรมถึง 1000 บรรทัดหรือมากกว่านั้น เพื่อกลยุทธ์ที่เฉียบคม บางหุ่นยนต์ที่ประสบความสำเร็จ ก็เลือกใช้วิธีทางสถิติ หรือไม่ก็สร้างเครือข่ายประสาทจำลองเพื่อใช้ในการตัดสินใจ
การแข่งขันในประเทศไทย การแข่งขันในประเทศไทย สามารถสมัครได้ตั้งแต่วันที่ 5 พฤศจิกายน พ.ศ. 2551 เป็นต้นไป สามารถติดตามข้อมูลข่าวสารได้จากที่นี้ http://www.vcharkarn.com/robocode
ดาวน์โหลด เวอร์ชั่นล่าสุดของ Robocode คือ 1.6.2 ซึ่งจะเป็นเวอร์ชั่นที่ใช้ในการแข่งขัน Robocode Thailand Contest 2009 สามารถดาวน์โหลดได้จากเว็บของโรโบโค้ตได้โดยตรงจากที่นี่ http://sourceforge.net/project/showfiles.php?group_id=37202
สนับสนุนการแจกจ่าย การที่จะทดสอบหุ่นยนต์ของคนอื่นนั้นเพียงแค่ไปดาวน์โหลดไบต์โค๊ด(ข้อมูลที่ถูกคอมไพล์มาเรียบร้อนแล้ว)มาจากเว็บไซด์ และสามารถทดสอบหุ่นยนต์ที่ดาวน์โหลดมากับหุ่นยนต์ของเราได้ทันทีโดยที่ผู้แจกจ่ายสามารถสบายใจได้ว่าซอร์สโค๊ดที่เขียนมาจะไม่ถูกแอบดูหรือนำไปใช้ เนื่องจากผ่านการคอมไพล์มาเรียบร้อยแล้ว
การเคลื่อนที่และการเล็ง สิ่งที่แข่งขันใน Robocode มีเพียง 2 สิ่ง
1. หลบการชนให้ได้มากที่สุด (ชนกระสุน, ชนหุ่นยนต์, ชนกำแพง)
2. พยายามคาดเดาตำแหน่งที่ศัตรูกำลังจะไป และยิงให้โดนมากที่สุด
เทคนิคต่างๆจึงได้ถูกคิดค้นขึ้น และถูกนำมาใช้ในหุ่นยนต์ดังๆ เช่น
WaveSurfing - ปรับการเคลื่อนที่โดยที่จะพยายามหลบไม่ให้โดนโจมตีแบบเดิมเป็นครั้งที่สอง
StatisticalTargeting - เก็บข้อมูลที่ตรงกับสถานการณ์ของเป้าหมายและตัดสินใจให้ถูกต้อง ใช้ข้อมูลที่เก็บมาทำการตัดสินใจในการยิงเป้าหมาย
GuessFactorTargeting - นี่คือวิธีที่ดีที่สุดในบรรดาวิธี StatisticalTargeting เมื่อสถิติของศัตรูต่างๆอยู่ภายในตัวเลขหนึ่งตัว (GuessFactor)
PatternMatching - พยายามจับรูปแบบของศัตรูด้วยรูปแบบเก่าๆที่เคยจับได้ และนำข้อมูลมาทำการตัดสินใจในการยิง
หุ่นยนต์ตัวอย่าง หุ่นยนต์ตัวอย่างสำหรับนักพัฒนามือใหม่ ถูกรวมไว้เข้ากับแพ๊คเกจของ Robocode แล้ว สามารถพบได้หลังการทำ Installซึ่งได้แสดงการเขียนโปรแกรมหุ่นยนต์อย่างง่าย การเขียนโปรแกรมโดยใช้เหตุการณ์เป็นตัวกระตุ้น(Event-driven programming) และสอนการเขียนค่าต่างๆลงไฟล์เพื่อการเก็บสถิติ
หุ่นยนต์เปิดเผยโค้ด สามารถเข้าไปดูรายชื่อได้ที่ Robowiki's opensource http://robowiki.net/?OpenSource
การแข่งขันในรุ่นต่างๆ การแข่งขันในรุ่นต่างๆแบ่งเป็นสี่รุ่น
กำหนดโดยใช้ขนาดของโค้ดเพื่อจำกัดคุณสมบัติที่มากเกินไป
(การวัดค่าดูที่ขนาดของไบต์โค้ด[คอมไพล์เรียบร้อยแล้ว])
1. รุ่นเมก้า - ไม่มีข้อกำจัดของขนาดโค้ด (การแข่งขันของ Robocode Thailand Contest 2009 ก็ใช้รุ่นนี้)
2. รุ่นมินิ - โค้ดไม่เกิน 1500 bytes
3. รุ่นไมโคร - โค้ดไม่เกิน 750 bytes
4. รุ่นนาโน - โค้ดไม่เกิน 250 bytes
เอกสารต่างๆที่น่าสนใจ
Official Website
หน้าต่อไปเป็นการสอนการใช้และสร้างหุ่นยนต์ด้วย Robocode :D