แนวทางในการพัฒนาปัญญาประดิษฐ์ ในการเล่นเกม StarCraft II
StarCraft สู่ StarCraft II
StarCraft เป็นวิดีโอเกมที่ได้รับความนิยมอย่างมากสำหรับเกมในหมวดเกมวางแผนแบบเรียลไทม์ ซึ่งตัวเกมพัฒนาโดย บริษัท Blizzard Entertainment ในปี ค.ศ 1998 เช่นเดียวกับบอร์ดเกมคลาสิคอย่างเช่น หมากรุก หรือ เกมโกะ StarCraft เป็นเกมที่ง่ายต่อการเรียนรู้ แต่ก็ยากมากที่จะเชี่ยวชาญ
เมื่อกาลเวลาผันผ่านแม้ StarCraft จะประสบความสำเร็จอย่างมาก ด้วยความก้าวหน้าทางเทคโนโลยีที่รวดเร็ว StarCraft เริ่มล้าสมัย ต่อมาในปี 2010 Blizzard ได้ประกาศเปิดตัว StarCraft II รอบนี้เกมไม่ได้รับความนิยมอย่างเกมก่อนหน้าเนื่องจากมีคู่แข่งเพิ่มขึ้นมากมาย แต่ก็ยังมีผู้ชมจำนวนมากตั้งตาคอยทัวร์นาเมนต์การแข่งขันที่เราจะได้เห็นกลยุทธ์ในการเล่นที่แปลกใหม่อยู่เสมอ
ความท้าทายในเกม StarCraft II
ทั้ง StarCraft และ StarCraft II ได้ชื่อว่าเป็นเกมกลยุทธ์แบบเรียลไทม์ หมายความว่า เพื่อที่จะเอาชนะคู่แข่งผู้เล่นจะต้องทำการตัดสินใจเชิงกลยุทธ์อย่างต่อเนื่อง เพื่อสร้างระบบเศรษฐกิจ (การเก็บเกี่ยวและสร้างฐานที่มั่น) และ อำนาจทางการทหาร (ฝึกฝนยูนิต และ วิจัยเทคโนโลยี) ให้มีประสิทธิภาพยิ่งกว่าคู่ต่อสู้ของพวกเขา และสร้างกองทัพที่สามารถเอาชนะฝ่ายตรงข้ามของพวกเขาได้ (ทำลายฐานที่มั่นของศัตรู)
ปัญหาการเรียนรู้แบบเสริมกำลังกับเกมกลยุทธ์แบบเรียลไทม์นั้นยากกว่าบอร์ดเกมคลาสิคมากเนื่องจากความซับซ้อนของสถานะและมีคำสั่งหรือการเลือกการ
กระทำการใด ๆ ในเกมนั้นมีความเป็นไปได้มากมาย
อีกทั้งผู้เล่นต้องบริหารจัดการทรัพยากรและกลยุทธทางทหารและควบคุมยูนิตต่าง ๆ ให้ทำงานได้เต็มประสิทธิภาพในเวลาเดียวกัน หรือที่เรียกว่า Marco & Micro นั้นเอง
สภาพแวดล้อมการเรียนรู้ (learning environment)
SC2LE คือสภาพแวดล้อมการเรียนรู้สำหรับการเรียนรู้แบบเสริมกำลัง (Reinforcement Learning) โดยใช้เกม Star Craft II ซึ่งประกอบไปด้วย 3 องค์ประกอบย่อย คือ Star Craft II binary, StarCraft II API และ PySC2
- Star Craft II binary คือ ไฟล์เกม StarCraft II พัฒนาโดย บริษัท Blizzard Entertainment
- StarCraft II API คือ ส่วนช่วยให้สามารถควบคุมโปรแกรม StarCraft II สามารถใช้สำหรับเริ่มต้นเกม รับข้อมูลการสังเกตการ (observations) ทำการสั่งการ (take actions) และ ดูข้อมูลเกมซ้ำ (replays)
- PySC2 คือ ไลบรารีที่พัฒนาด้วยภาษาไพธอนซึ่งจะช่วยติดต่อกับ StarCraft II API เพื่อลดขั้นตอนยุ่งยากในการโต้ตอบระหว่าง เอเจนต์ (agent) และ ตัวเกม StarCraft II
ไลบรารีเหล่านี้จะแสดงรายการของข้อมูลที่มีข้อมูลคล้ายกับสิ่งที่ผู้เล่นจะสามารถเข้าถึงได้ เช่น ข้อมูลทรัพยาการที่มีในปัจจุบัน และอื่น ๆ พร้อมกับสามารถสั่งงานเกมได้คล้ายกับที่มนุษย์สั่งเกมผ่านเมาส์หรือคีย์บอร์ด เช่น การเลือกยูนิตภายในเกมด้วยการลากเมาส์จากจุด A ถึงจุด B หรือ การสร้างสิ่งก่อสร้าง อีกทั้ง PySC2 มาพร้อมกับมินิเกมที่ใช้ฝึกงานพื้นฐาน เช่น การเคลื่อนที่ของยูนิต, การเก็บทรัพยากร, การสร้างทหาร
ในการสั่งงานคำสั่งในเกมนั้น StarCraft II นั้นมีจำนวนมาก ซึ่งสามารถตรวจสอบคำสั่งได้จากคำสั่ง
python -m pysc2.bin.valid_actions0/no_op ()
1/move_camera (1/minimap [64, 64])
2/select_point (6/select_point_act [4]; 0/screen [84, 84])
3/select_rect (7/select_add [2]; 0/screen [84, 84]; 2/screen2 [84, 84])
4/select_control_group (4/control_group_act [5]; 5/control_group_id [10])
5/select_unit (8/select_unit_act [4]; 9/select_unit_id [500])
6/select_idle_worker (10/select_worker [4])
7/select_army (7/select_add [2])
8/select_warp_gates (7/select_add [2])
9/select_larva ()
...
571/Stop_Battlecruiser_quick (3/queued [2])
572/Research_EnhancedShockwaves_quik (3/queued [2])
Total base actions: 573
ซึ่งคำสั่งเหล่านี้บ้างคำสั่งนั้นยังต้องการอาร์กิวเมนต์เพิ่มเติมสำหรับสั่งการ เช่น การสั่งประเภทการเคลื่อนที่นั้นต้องการพิกัดเป้าหมายที่จะทำการเคลื่อนที่ไป เป็นต้น ซึ่งสามารถศึกษาข้อมูลเกี่ยวกับการใช้งานไลบราลี่เพิ่มเติมได้ที่ https://github.com/deepmind/pysc2/blob/master/docs/environment.md
ชุดมินิเกม (Mini Games)
ในงานวิจัยหลายงานที่สามารถหาอ่านได้มักใช้ชุด Mini Game มาใช้ในงาน
อาจเป็นเพราะความสะดวก ในการอ้างอิงหรือเปรียบเทียบกับงานวิจัยอื่น ๆ ได้ง่ายซึ่งชุดมินิเกมที่ได้รับความนิยมกันมีดังต่อไปนี้
- MoveToBeacon
เริ่มต้นเกมจะมียูนิตนาวิกโยธิน (Marine) หนึ่งตัวโดยต้องทำการบังคับยูนิตนี้ไปยังสัญญาณ (Beacon) บนแผนที่ซึ่งจะเกิดโดยสุ่มเมื่อยูนิตไปถึงสัญญาณจะได้รับรางวัลเพิ่ม 1 คะแนน - MoveToBeacon
เริ่มต้นเกมจะมียูนิตนาวิกโยธิน (Marine) หนึ่งตัวโดยต้องทำการบังคับยูนิตนี้ไปยังสัญญาณ (Beacon) บนแผนที่ซึ่งจะเกิดโดยสุ่มเมื่อยูนิตไปถึงสัญญาณจะได้รับรางวัลเพิ่ม 1 คะแนน - FindAndDefeatZerglings
เริ่มต้นเกมเอเจนต์จะได้รับยูนิตนาวิกโยธิน (Marine) 3 ตัว เอเจนต์ต้องทำการสำรวจพื้นที่เพื่อค้นหาและทำลาย Zering แต่ละตัวมินิเกมนี้ต้องการการสำรวจที่มีประสิทธิภาพ - FindAndDefeatZerglings
เริ่มต้นเกมเอเจนต์จะได้รับยูนิตนาวิกโยธิน (Marine) 3 ตัว เอเจนต์ต้องทำการสำรวจพื้นที่เพื่อค้นหาและทำลาย Zering แต่ละตัวมินิเกมนี้ต้องการการสำรวจที่มีประสิทธิภาพ
ติดตั้งเครื่องไม้เครื่องมือ
- StarCraft II
ก่อนอื่นให้ทำการติดตั้งเกม StarCraft II โดยมีทางเลือกหลายทางโดยจะแนะนำดังนี้ครับ
- สำหรับ Windows ให้ทำการติดตั้งผ่าน Battle.net ของ Blizzard
- สำหรับ Linux สามารถติดตั้งเวอร์ชัน headless ซึ่งจะเล็กกว่ามากดาวน์โหลดได้ที่ https://github.com/Blizzard/s2client-proto#downloads - PySC2
สามารถดาวน์โหลดผ่าน PyPI หรือ pip ได้เลยง่าย ๆ
pip install pysc2
- Library ต่าง ๆ สำหรับ Machine Learning (TensorFlow)
ตรงนี้สามารถติดตั้งเครื่องมือที่ชื่นชอบจากช่องทางที่ใช้เป็นประจำได้เลยครับ ตัวอย่างเช่น TensorFlow
pip install tensorflow
- ดาวน์โหลด Mini Game
สามารถดาวน์โหลดได้ที่นี่ https://github.com/deepmind/pysc2/releases/download/v1.2/mini_games.zip
เมื่อดาวน์โหลดแล้วให้ทำการแตกไฟล์ไปที่โฟล์ดเดอร์เกมx:\StarCraft II\Maps\
เมื่อทำการแตกไฟล์เสร็จจะได้ผลดังนี้x:\StarCraft II\Maps\mini_games
สำหรับคนที่ไม่ได้ติดตั้งเกมที่โฟลเดอร์ที่ตั้งไว้แบบ default ตอนทำการติดตั้ง ให้ทำการตั้งค่า environment variable ชื่อ SC2PATH ชี้ไปที่โฟลเดอร์เกมครับ ใน linux สามารถใช้ export SC2PATH=
~\StarCraftII
ได้ง่าย ๆ เลยครับ
สำหรับวิธีการเนื่องจากปัจจุบัน windows มีหลาย os build version ขอให้ใช้ Google เถิดดดดดดดดดดดดดดด
*สำคัญมาก
สุดท้ายในบทคือการทดสอบโดยให้ใช้คำสั่ง
python -m pysc2.bin.agent --map MoveToBeacon
หากท่านพบว่ามีหน้าต่างเกมโผล่ขึ้นมา และมี Marine วิ่งโลดแล่นไปมาก็ขอแสดงความยินดีด้วยครับ
จากบทก่อนหน้าจะพบว่าในการเริ่มเกมจะมีการเรียกใช้ไฟล์ pysc2.bin.agent
หากเข้าไปตรวจสอบจะพบหน้าตาประมาณด้านล่าง
จากโค้ดจะสังเกตุว่าเราสามารถแก้ไขพารามิเตอร์เกี่ยวกับการตั้งค่าเกมได้หลายอย่างมาก เช่น ขนาดของแผนที่(feature_screen_size)
, แผนที่ (map
) ซึ่งเราได้กำหนดไปแล้วบทก่อนหน้าในส่วนของโค้ดทดสอบรัน, อื่น ๆ และที่สำคัญคือ agent
ซึ่งเราจะต้องกำหนดให้ชี้ไปที่ agent ที่จะสร้างขึ้น
เพื่อให้เราสามารถออกแบบโครงสร้าง agent ให้ตรงกับความต้องการของไลบราลี่ PySc2 ที่ใช้ เรามาทำความเข้าใจกับ Base Agent ซึ่งมีติดมากับไลบราลี่จะทำให้เข้าใจมากขึ้นเกี่ยวกับฟังก์ชันที่ agent ต้องมี
จากโค้ดด้านบนจะเห็นว่ามีฟังก์การทำงานหลัก ๆ อยู่สามฟังก์ชันดังที่แสดงในใค้ด โดยที่ระบบจะเรียกใช้ฟังก์ชัน setup ในครั้งแรกที่เกมเริ่ม, เรียกใช้ฟังก์ชัน reset ตอนจบเกม และที่สำคัญที่สุดคือฟังก์ชัน step จะมีการเรียกใช้ทุกครั้งก่อนจะทำการเปลี่ยนสถานะถัดไป ซึ่งเราจะเขียนโค้ดในการตัดสินใจในการสั่งการในฟังก์ชันนี้
หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยสำหรับท่านผู้อ่าน
ในบทความหน้าเราจะมาทำปัญญาประดิษฐ์ในการเล่นเกม StarCraft II ด้วย TensorFlow และ Keras กัน ติดตามกันเร็ว ๆ นี้
ขอบคุณครับ