คำถามนี้เกี่ยวกับวิธีการที่คู่ต่อสู้ของคอมพิวเตอร์ที่ฉันสร้างขึ้นและกำลังถูกใช้อยู่หรือกำลังวางแผนที่จะใช้ในเกมคอมพิวเตอร์หลายเกม
พื้นหลัง
เมื่อปีที่แล้วเมื่อพยายามปรับปรุงฝ่ายตรงข้ามคอมพิวเตอร์สำหรับเกมที่เรียกว่า "Minesweeper Flags" (คำอธิบายสั้น ๆ : Minesweeper เวอร์ชันที่มีผู้เล่นหลายคนแบบเลี้ยวตามที่คุณต้องใช้เวลามากกว่าเหมืองของฝ่ายตรงข้าม)ฉันเปลี่ยนวิธีการทำงานของอัลกอริทึม . แทนที่จะใช้วิธีเช่น if-else-if-else ฉันใช้ชุดของ "ผู้ทำสกอร์" ที่มีน้ำหนักที่ระบุเพื่อกำหนดว่าการเคลื่อนไหวที่ดีที่สุดคืออะไร
คุณอาจคิดว่าสำหรับเกมอย่าง Minesweeper Flags เป็นเพียงการเคลื่อนที่ที่ให้โอกาสในการขุด แต่มันไม่ง่ายอย่างนั้น การย้ายที่คอมพิวเตอร์จะทำมักขึ้นอยู่กับฟีเจอร์ต่าง ๆ สำหรับการย้ายเฉพาะในสถานะเกมปัจจุบัน ตัวอย่างของคุณสมบัติ:
- ความน่าจะเป็นของการเคลื่อนไหวนี้ให้คะแนนเหมืองคืออะไร?
- ความน่าจะเป็นที่จะเปิดเผยสิ่งใด ๆ กับคู่ต่อสู้ของฉันที่นี่คืออะไร
คำอธิบายของระบบ
ระบบทำงานโดยทั่วไปดังนี้:
- "ผู้ทำประตูก่อน": ทำการวิเคราะห์ล่วงหน้าบางอย่างสำหรับสถานะเกมปัจจุบัน (ในแง่ของ Minesweeper Flags นี่เป็นปกติ: การคำนวณความน่าจะเป็นทั้งหมด)
- "Scorers": ชุดของผู้ทำประตูธรรมดาจะถูกถามเพื่อกำหนดคะแนนสำหรับการเคลื่อนไหวที่เป็นไปได้แต่ละครั้งผู้ทำคะแนนแต่ละคนจะใช้คะแนนตามเกณฑ์ของตัวเอง ผู้ทำคะแนนสามารถตรวจสอบผลลัพธ์ของการวิเคราะห์ล่วงหน้าที่ทำ
- คะแนนที่คำนวณในขั้นตอนข้างต้นจะถูกนำมารวมเข้าด้วยกันและกำหนดให้เป็นคะแนนสำหรับการย้าย
- การเคลื่อนไหวจะถูกจัดเรียงตามคะแนนของพวกเขาและจัดอันดับเพื่อให้การเคลื่อนไหวทั้งหมดที่มีคะแนนเดียวกันได้รับอันดับเดียวกัน
- "Post-scorers": ผลลัพธ์ของข้างต้นสามารถส่งไปยัง "Post-scorers" ที่มีความเป็นไปได้ที่จะแก้ไขคะแนนของฟิลด์ใด ๆ ในแบบที่พวกเขาต้องการตามกฎของโพสต์ - ผู้ทำคะแนน
เมื่อรวมพวงของก่อนเรอร์ส, เรอร์ส (ที่มีน้ำหนักของพวกเขา) และโพสต์เรอร์สที่มันจะกลายเป็นสิ่งที่ผมเรียกการกำหนดค่าคะแนน
ตัวอย่างผลลัพธ์
นี่คือตัวอย่างของคะแนนที่นำไปใช้กับ Minesweeper Flags นี่คือแผนที่ที่ได้คะแนน:
และนี่คือผลลัพธ์ของการกำหนดค่าคะแนนจริง มันแสดงให้เห็นถึงระดับของการเคลื่อนไหวที่เป็นไปได้โดยที่ 1 คืออันดับที่ดีที่สุดและได้รับการเน้นด้วยสีขาว:
ขอบคุณที่มีการเขียนโค้ดที่มีความยืดหยุ่นสูงวิธีการของ AIs นี้สามารถแทรกลงในเกมอื่นได้เช่นกัน
ข้อดีและข้อเสีย
ด้านล่างนี้เป็นข้อดีและข้อเสียของระบบนี้ที่ฉันสามารถคิดได้เอง
ข้อดี
- มันง่ายมากที่จะสร้างการกำหนดค่าต่าง ๆ มากมายสำหรับ AIs
- มันเป็นไปได้ที่จะใช้กับอัลกอริทึมทางพันธุกรรม: ผู้ทำประตูแต่ละคนมีน้ำหนักที่เกี่ยวข้องน้ำหนักจะกลายเป็นยีน
- การใช้เครื่องมือบางอย่างเป็นไปได้ที่จะตรวจสอบว่าเหตุใดจึงมีการย้ายที่เฉพาะเจาะจงและผู้ทำประตูคนใดที่รับผิดชอบการย้ายนั้น
- การใช้เครื่องมือเป็นไปได้ที่จะสร้างแผนที่ของคะแนนรวม / อันดับของการเคลื่อนไหวที่เป็นไปได้ (เช่นภาพหน้าจอด้านบน)
- ด้วยการใช้คะแนนกับวิธีการเล่นของมนุษย์มันเป็นไปได้ที่จะสร้าง "#AI_Mirror" ซึ่งพยายามเคลื่อนไหวตามที่คิดว่ามนุษย์จะทำ
ข้อเสีย
- มันอาจเป็นเรื่องยากอย่างยิ่งที่จะปรับการกำหนดค่าคะแนน "ถูกต้อง" เพื่อให้ AI เล่นได้ดีที่สุด
คำถาม
เป็นระบบที่ฉันสร้างขึ้นที่นี่รู้จักกันดีในโลก AI หรือไม่? มันจะเรียกว่าอะไรในแง่ของ AI จริง?
วิธีนี้เหมาะสมหรือมีแนวทางอื่นที่คุณอยากแนะนำหรือไม่?
มีวิธีใดบ้างที่จะทำให้กระบวนการปรับแต่งคะแนนให้ง่ายขึ้น?
เกี่ยวกับคำถามสุดท้ายฉันทราบถึงความเป็นไปได้ของการใช้อัลกอริทึมทางพันธุกรรมฉันรู้อย่างถี่ถ้วนเกี่ยวกับSARSA (และฉันคิดว่าผู้ทำคะแนนของฉันมีลักษณะคล้ายกับคำอธิบายคุณลักษณะของเว็บไซต์ที่มีน้ำหนัก แต่จากความเข้าใจของฉัน ที่นี่) ฉันคิดว่าปัญหาของ SARSA คือคุณไม่รู้รางวัลจนกว่าเกมจะจบลงท่าที่ดีที่สุดมักเป็นท่าที่ไม่ให้รางวัล (ของฉัน) เลย โอกาสในการชนะในปัจจุบันของคุณขึ้นอยู่กับคะแนนปัจจุบัน (จำนวนเหมืองและคู่แข่งของคุณได้รับ) และลักษณะของแผนที่ปัจจุบัน
คำถามนี้ถูกโพสต์ในขณะนี้หมดอายุเว็บไซต์ปัญญาประดิษฐ์
(ที่ Java) รหัสที่ใช้สำหรับวิธีการนี้ในขณะนี้ได้รับการโพสต์ที่รหัสตรวจสอบ