เทคนิคที่ดีที่สุดสำหรับ AI ของเกมไพ่


27

ฉันพยายามพัฒนา AI สำหรับเกมไพ่และฉันติดอยู่กับเทคนิค / อัลกอริทึมที่ฉันควรใช้ นี่คือสมมติฐานบางอย่างเกี่ยวกับเกม:

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

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

ฉันไม่แน่ใจว่านี่จะเป็นวิธีที่ดีในการพัฒนา AI สำหรับเกมการ์ดดังกล่าวหรือไม่?

ฉันยังสงสัยด้วยว่ามีเทคนิคอื่น ๆ ที่เหมาะสมกับปัญหาหรือไม่ ตัวอย่างเช่นฉันได้ดู minimax (อาจจะมีอัลกอริทึมการตัดแต่งกิ่ง) แต่จะเป็นตัวเลือกที่ดีสำหรับปัญหานี้หรือไม่? ฉันค่อนข้างไม่แน่ใจเนื่องจากการเล่นที่สำคัญที่สุดอยู่ที่จุดเริ่มต้นของเกมเมื่อมีพารามิเตอร์ที่ไม่รู้จักมากที่สุด (ส่วนใหญ่ยังไม่ได้เล่นไพ่)


1
เป็นคำถามที่ดีมาก! ไม่มีคำตอบที่สมบูรณ์ ฉันแค่ต้องการเพิ่ม 2c ของฉัน: ถ้าคุณรู้ว่าเกมของคุณเป็นไปได้ทั้งหมด Minimax ในทางทฤษฎีจะเป็นวิธีที่ดีในการสำรวจทรีเกมของเกม อาจมีปัญหาเรื่องประสิทธิภาพหากเกมนั้นมีต้นไม้ที่มีขนาดใหญ่เกินไป ...
Shivan Dragon

1
เป้าหมายของเกมคืออะไร? ใครชนะ? เป็นไปได้หรือไม่ที่ผู้เล่นจะคาดการณ์โอกาสในการชนะเกมของเขา / เธอตามเวลาที่กำหนด?
จาก

ฉันไม่สามารถอธิบายรายละเอียดเกี่ยวกับเกมได้ ในการชนะหนึ่งจะต้องได้รับคะแนนสูงสุด (มากกว่าผู้เล่นอื่น) ในตอนแรกมันยาก / เป็นไปไม่ได้ที่จะบอกว่าเราจะชนะ ในตอนท้ายเรามั่นใจได้ว่าจะได้รับหากมีคะแนนเพียงพอแล้ว (ผู้เล่นคนอื่นไม่สามารถชนะคะแนนเพียงพอที่จะชนะอีกต่อไป)
LaurentG

1
HeartStone เป็นเกมหรือไม่? :)
Lescai Ionel

1
ดูเหมือนว่าฉันกำลังอยู่ในสถานการณ์ที่คล้ายกันมากกับคุณเช่นเดียวกับเกมไพ่รวมถึงเกมในพื้นที่ สิ่งหนึ่งที่ฉันพบว่าน่าสนใจคือนักวิวัฒนาการที่คุณกำหนด DNAs ให้กับผู้เล่นเสมือน คุณฆ่าพวกคลายและคุณผสมพันธุ์ผู้ชนะ ผลลัพธ์อาจเป็นบอต AI ที่ค่อนข้างดี ฉันยังไม่ได้คิดวิธีปรับtropiceuro.com/puerto-rico-evolverนี้สำหรับเกมการ์ดของฉัน แต่ฉันคิดว่ามันเป็นไปได้
Andrew Savinykh

คำตอบ:


11

ตัวอย่างเช่นคุณเสียงคล้ายกับสะพาน ระบบการเล่นบนสะพานใช้วิธีการ Monte Carloเพื่อเลือกการเคลื่อนไหว ในระดับสูง:

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

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


แก้ไขความคิดเห็นของ LaurentG ต่อ:

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

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

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


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

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

6

กรณีของประสบการณ์ส่วนตัวล่าสุด:

ฉันทำงานเกมไพ่ด้วยตัวเอง (Bisca, เกมโปรตุเกส 2 ผู้เล่น) และฉันได้รับผลลัพธ์ที่ดีโดยใช้วิธีการ Monte Carlo โดยเฉพาะการใช้อัลกอริทึมชุดข้อมูล Monte Carlo Tree Search ล่าสุด (ISMCTS อธิบายด้วย ตัวอย่างซอร์สโค้ดใน Python ที่http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm )

มันเล่นได้ดีพอสมควรเมื่อมีการเคลื่อนไหวที่ไม่ถูกต้องในแต่ละรอบเพียงแค่รู้กฎของเกม ฉันกำลังพยายามที่จะคลี่คลายเพื่อให้สามารถปรับปรุงมันตามข้อมูลที่ฉันอ่านเกี่ยวกับมัน (และ MCTS "ผู้ปกครอง") เป็นไปได้ที่จะปรับปรุงการเล่นเกมด้วยการวิเคราะห์พฤติกรรม ( http: // www) .orangehelicopter.com / ed / เอกสาร / aiide13.pdf ) และการอนุมานบัตรของฝ่ายตรงข้าม


1
โพสต์นี้ค่อนข้างอ่านยาก (ผนังข้อความ) คุณจะช่วยแก้ไขมันให้เป็นรูปร่างที่ดีขึ้นได้ไหม
ริ้น

ขอบคุณสำหรับคำตอบจากคนที่มีประสบการณ์จริงเกี่ยวกับปัญหา ลิงค์ที่ดี!
luben

3

ฉันคิดว่ามันขึ้นอยู่กับกฎของเกม

นี่คือสิ่งที่ฉันเข้าใจจากคำถามของคุณ:

  • เกมนี้เล่นเป็นรอบโดยผู้เล่นแต่ละคนเล่นหนึ่งใบต่อรอบ
  • ผู้เล่นที่ไปก่อนสามารถเล่นไพ่ใดก็ได้ที่เขาต้องการ
  • ผู้เล่นที่สองสามารถเล่นไพ่บางอย่างเท่านั้นขึ้นอยู่กับสิ่งที่เล่นก่อน
  • ผู้เล่นที่ชนะรอบแรกจะได้รอบต่อไป
  • ไพ่ทั้งหมดจะถูกแจกจ่ายก่อนรอบแรก

ข้อสมมติฐาน:

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

เกมตัวอย่างที่เป็นไปตามกฎเหล่านี้:

ผู้เล่นคนแรกเล่นไพ่ ผู้เล่นคนที่สองต้องเล่นไพ่ชุดเดียวกันหรือแพ้ หากห้องชุดตรงกันไพ่สูงสุดจะชนะ

ตอนนี้เกมนี้ได้รับการตัดสินจากโชคของการจับฉลากและสามารถจดจำไพ่ที่ถูกเล่นเพื่อที่จะได้รู้ว่าฝ่ายตรงข้ามของคุณ
ในสถานการณ์เช่นนี้ฉันจะทำให้ AI จำได้เพียงบางส่วนว่าการ์ดที่เล่นคืออะไรคือสุ่มเอาออกจากรายการที่จำได้บางส่วนของจำนวนไพ่ที่เล่น (จำนวนที่ต่ำกว่า = ความยากลำบากที่สูงกว่า AI) แต่ไม่ใช่สิ่งสำคัญเช่น Aces หรือ Kings ตัวอย่างเช่นวิธีนี้ AI จะรู้ว่าปลอดภัยที่จะเล่น Queen of Hearts เพราะเขาจะจำได้ว่าฝ่ายตรงข้ามไม่มีเอซหรือราชา แต่จะต้องคำนวณความน่าจะเป็นถ้าเขาต้องการเล่น 10 เพราะเขาอาจจำไม่ได้ว่าแจ็คยังเล่นอยู่หรือไม่
เลียนแบบความสนใจของมนุษย์นี้

TL; DR
จำกัด AI ที่รู้ดังนั้นการตัดสินใจของมันจึงไม่สมบูรณ์แบบ


ขอบคุณสำหรับคำตอบ. แต่ดังที่กล่าวไว้ในคำถามไม่มีโชค / ไม่มีการสุ่มหลังจากแจกการ์ด และผู้เล่นไม่รู้จักไพ่ของผู้เล่นอื่น เขาจะต้องตั้งสมมติฐานโดยใช้ไพ่ที่เล่นไปแล้วและ "กฎ" บางอย่าง
LaurentG

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