วิธีการให้คะแนนฝ่ายตรงข้ามคอมพิวเตอร์ที่ต้องการความสมดุล


16

คำถามนี้เกี่ยวกับวิธีการที่คู่ต่อสู้ของคอมพิวเตอร์ที่ฉันสร้างขึ้นและกำลังถูกใช้อยู่หรือกำลังวางแผนที่จะใช้ในเกมคอมพิวเตอร์หลายเกม

พื้นหลัง

เมื่อปีที่แล้วเมื่อพยายามปรับปรุงฝ่ายตรงข้ามคอมพิวเตอร์สำหรับเกมที่เรียกว่า "Minesweeper Flags" (คำอธิบายสั้น ๆ : Minesweeper เวอร์ชันที่มีผู้เล่นหลายคนแบบเลี้ยวตามที่คุณต้องใช้เวลามากกว่าเหมืองของฝ่ายตรงข้าม)ฉันเปลี่ยนวิธีการทำงานของอัลกอริทึม . แทนที่จะใช้วิธีเช่น if-else-if-else ฉันใช้ชุดของ "ผู้ทำสกอร์" ที่มีน้ำหนักที่ระบุเพื่อกำหนดว่าการเคลื่อนไหวที่ดีที่สุดคืออะไร

คุณอาจคิดว่าสำหรับเกมอย่าง Minesweeper Flags เป็นเพียงการเคลื่อนที่ที่ให้โอกาสในการขุด แต่มันไม่ง่ายอย่างนั้น การย้ายที่คอมพิวเตอร์จะทำมักขึ้นอยู่กับฟีเจอร์ต่าง ๆ สำหรับการย้ายเฉพาะในสถานะเกมปัจจุบัน ตัวอย่างของคุณสมบัติ:

  • ความน่าจะเป็นของการเคลื่อนไหวนี้ให้คะแนนเหมืองคืออะไร?
  • ความน่าจะเป็นที่จะเปิดเผยสิ่งใด ๆ กับคู่ต่อสู้ของฉันที่นี่คืออะไร

คำอธิบายของระบบ

ระบบทำงานโดยทั่วไปดังนี้:

  1. "ผู้ทำประตูก่อน": ทำการวิเคราะห์ล่วงหน้าบางอย่างสำหรับสถานะเกมปัจจุบัน (ในแง่ของ Minesweeper Flags นี่เป็นปกติ: การคำนวณความน่าจะเป็นทั้งหมด)
  2. "Scorers": ชุดของผู้ทำประตูธรรมดาจะถูกถามเพื่อกำหนดคะแนนสำหรับการเคลื่อนไหวที่เป็นไปได้แต่ละครั้งผู้ทำคะแนนแต่ละคนจะใช้คะแนนตามเกณฑ์ของตัวเอง ผู้ทำคะแนนสามารถตรวจสอบผลลัพธ์ของการวิเคราะห์ล่วงหน้าที่ทำ
  3. คะแนนที่คำนวณในขั้นตอนข้างต้นจะถูกนำมารวมเข้าด้วยกันและกำหนดให้เป็นคะแนนสำหรับการย้าย
  4. การเคลื่อนไหวจะถูกจัดเรียงตามคะแนนของพวกเขาและจัดอันดับเพื่อให้การเคลื่อนไหวทั้งหมดที่มีคะแนนเดียวกันได้รับอันดับเดียวกัน
  5. "Post-scorers": ผลลัพธ์ของข้างต้นสามารถส่งไปยัง "Post-scorers" ที่มีความเป็นไปได้ที่จะแก้ไขคะแนนของฟิลด์ใด ๆ ในแบบที่พวกเขาต้องการตามกฎของโพสต์ - ผู้ทำคะแนน

เมื่อรวมพวงของก่อนเรอร์ส, เรอร์ส (ที่มีน้ำหนักของพวกเขา) และโพสต์เรอร์สที่มันจะกลายเป็นสิ่งที่ผมเรียกการกำหนดค่าคะแนน

ตัวอย่างผลลัพธ์

นี่คือตัวอย่างของคะแนนที่นำไปใช้กับ Minesweeper Flags นี่คือแผนที่ที่ได้คะแนน:

แผนที่เรือกวาดทุ่นระเบิดที่ได้คะแนน

และนี่คือผลลัพธ์ของการกำหนดค่าคะแนนจริง มันแสดงให้เห็นถึงระดับของการเคลื่อนไหวที่เป็นไปได้โดยที่ 1 คืออันดับที่ดีที่สุดและได้รับการเน้นด้วยสีขาว:

ตัวอย่างผลลัพธ์ของวิธีการให้คะแนน

ขอบคุณที่มีการเขียนโค้ดที่มีความยืดหยุ่นสูงวิธีการของ AIs นี้สามารถแทรกลงในเกมอื่นได้เช่นกัน

ข้อดีและข้อเสีย

ด้านล่างนี้เป็นข้อดีและข้อเสียของระบบนี้ที่ฉันสามารถคิดได้เอง

ข้อดี

  • มันง่ายมากที่จะสร้างการกำหนดค่าต่าง ๆ มากมายสำหรับ AIs
  • มันเป็นไปได้ที่จะใช้กับอัลกอริทึมทางพันธุกรรม: ผู้ทำประตูแต่ละคนมีน้ำหนักที่เกี่ยวข้องน้ำหนักจะกลายเป็นยีน
  • การใช้เครื่องมือบางอย่างเป็นไปได้ที่จะตรวจสอบว่าเหตุใดจึงมีการย้ายที่เฉพาะเจาะจงและผู้ทำประตูคนใดที่รับผิดชอบการย้ายนั้น
  • การใช้เครื่องมือเป็นไปได้ที่จะสร้างแผนที่ของคะแนนรวม / อันดับของการเคลื่อนไหวที่เป็นไปได้ (เช่นภาพหน้าจอด้านบน)
  • ด้วยการใช้คะแนนกับวิธีการเล่นของมนุษย์มันเป็นไปได้ที่จะสร้าง "#AI_Mirror" ซึ่งพยายามเคลื่อนไหวตามที่คิดว่ามนุษย์จะทำ

ข้อเสีย

  • มันอาจเป็นเรื่องยากอย่างยิ่งที่จะปรับการกำหนดค่าคะแนน "ถูกต้อง" เพื่อให้ AI เล่นได้ดีที่สุด

คำถาม

  • เป็นระบบที่ฉันสร้างขึ้นที่นี่รู้จักกันดีในโลก AI หรือไม่? มันจะเรียกว่าอะไรในแง่ของ AI จริง?

  • วิธีนี้เหมาะสมหรือมีแนวทางอื่นที่คุณอยากแนะนำหรือไม่?

  • มีวิธีใดบ้างที่จะทำให้กระบวนการปรับแต่งคะแนนให้ง่ายขึ้น?

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


คำถามนี้ถูกโพสต์ในขณะนี้หมดอายุเว็บไซต์ปัญญาประดิษฐ์
(ที่ Java) รหัสที่ใช้สำหรับวิธีการนี้ในขณะนี้ได้รับการโพสต์ที่รหัสตรวจสอบ

คำตอบ:


7

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

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

ใช้อัลกอริทึมทางพันธุกรรม

มีสองตัวเลือกชัดเจนสำหรับอัลกอริทึมทางพันธุกรรม:

  • ใช้พารามิเตอร์สำหรับจีโนม (ตามที่คุณแนะนำ) คุณจะปรับกฎให้เหมาะสม แต่คุณยังเหลืออยู่กับระบบผู้เชี่ยวชาญ
  • ใช้Learning Classifier System (LCS) เพื่อเลือกกฎสำหรับคุณ LCS เป็นอัลกอริทึมทางพันธุกรรมชนิดหนึ่งที่คุณเข้ารหัสกฎและพารามิเตอร์ พวกเขาใช้เวลานานในการรวมเข้าด้วยกันและมีความไวต่อฟังก์ชั่นการออกกำลังกาย ฉันคิดว่าวิธีการเล่นที่ได้อาจน่าสนใจกว่า

การจำลองการหลอม

อีกวิธีในการแก้ปัญหาคือใช้Simulated Annealing (SA) ปัญหาของคุณคือพื้นที่อินพุตที่ถูก จำกัด และคุณสามารถวิเคราะห์ฟังก์ชันที่ค้นหาสี่เหลี่ยมจัตุรัสที่ดีที่สุดที่จะเลือกในสถานการณ์ที่กำหนด การใช้การจำลองการหลอมจะพบว่าเหมาะสมที่สุดสำหรับพารามิเตอร์ของคุณ

ในการทำให้ดีเกินไป

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


คำตอบของคุณทำให้ฉันเรียนเยอะมากขอบคุณมาก! แม้ว่าผมไม่แน่ใจว่าผมเห็นด้วยกับการแบ่งประเภทของเกมนี้โดยเฉพาะอย่างยิ่งเป็น "กำหนด" ..
ไซมอน Forsberg

เหตุผลที่ฉันบอกว่ามันเป็นสิ่งที่กำหนดได้คือจำนวนของความเป็นไปได้สำหรับเกมใดก็ตามนั้นมีขอบเขตและแม้ว่าผู้เล่นคนอาจจะเลือกตัวเลือกที่สุ่ม กฎง่ายๆคือถ้าคุณใช้ตัวสร้างตัวเลขสุ่ม (หรือปัจจัยภายนอกที่คุณไม่ได้ควบคุม) ทุกที่มันสุ่ม ถ้าไม่มันกำหนดได้
Dr Rob Lang

ฉันจะพูดว่าMinesweeper เป็น Stochastic เพราะคุณไม่รู้เนื้อหาของสนามจนกว่าคุณจะได้เปิดเผยมัน
Simon Forsberg

1
IMHO ที่ไม่ทำให้สุ่ม มันจะสุ่มถ้า: กำหนดเงื่อนไขการเริ่มต้นเดียวกัน (กระดานที่ซ่อนอยู่) ผลอาจแตกต่างกันในแต่ละครั้งที่มีการคลิกที่สแควร์
Dr Rob Lang

2
Stochastic / deterministic และสังเกตได้อย่างเต็มที่ / สังเกตได้บางส่วนจะแตกต่างกันอย่างเคร่งครัดคุณสมบัติมุมฉาก ตามคำนิยาม (พูด Russel / Norvig "ถ้าสถานะถัดไปของสภาพแวดล้อมถูกกำหนดโดยสถานะปัจจุบันและการกระทำที่ดำเนินการโดยตัวแทน ... ") เรือกวาดทุ่นระเบิดถูกกำหนดไว้แม้ว่ามันจะไม่สามารถสังเกตได้อย่างเต็มที่
Peteris

0

ใช่เทคนิคการกำหนดคะแนนตามลักษณะบางอย่างของตำแหน่งเป็นมาตรฐานในการเขียน AIs เพื่อเล่นเกม ตัวอย่างเช่นโปรแกรมหมากรุกเกือบทั้งหมดทำงานโดยการให้คะแนนตำแหน่งที่สำคัญที่สุดบนชิ้นส่วนที่มีอยู่พร้อมโบนัสที่น้อยกว่าตามตำแหน่งของพวกเขา (เช่นเบี้ยป้องกันซึ่งกันและกัน) พวกเขาพยายามคำนวณการเคลื่อนที่ที่ดีที่สุดโดยใช้อัลกอริทึมการค้นหาขั้นสูงเช่นอัลฟาเบต้า

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.