สอน Neural Network ให้เล่นเกมไพ่


10

ฉันกำลังเขียนเอ็นจิ้นเพื่อเล่นเกมการ์ดเนื่องจากยังไม่มีเอ็นจิ้นสำหรับเกมนี้โดยเฉพาะ

ฉันหวังว่าจะสามารถแนะนำโครงข่ายประสาทเทียมให้กับเกมได้ในภายหลังและให้เรียนรู้ที่จะเล่นเกม

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

ฉันได้เรียนรู้มากมายเกี่ยวกับเครือข่ายประสาท (ส่วนใหญ่ NEAT และ HyperNEAT) และสร้างการใช้งานของฉันเอง ฉันยังไม่แน่ใจว่าจะสร้าง AI ที่ดีที่สุดที่สามารถพิจารณาตัวแปรทั้งหมดในเกมประเภทใดประเภทหนึ่งเหล่านี้ได้ มีวิธีการทั่วไปหรือไม่? ฉันรู้ว่า Keldon เขียน AI ที่ดีสำหรับ RftG ซึ่งมีความซับซ้อนในระดับที่เหมาะสมฉันไม่แน่ใจว่าเขาจะสร้าง AI ได้อย่างไร

คำแนะนำใด ๆ? เป็นไปได้ไหม มีตัวอย่างที่ดีของสิ่งนี้หรือไม่? อินพุตถูกแมปอย่างไร?

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

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


สวัสดียินดีต้อนรับสู่ AI.SE! เนื่องจากในปัจจุบันนี้มันดูกว้างเกินไปสำหรับเราที่จะสามารถตอบได้ดี คุณคิดว่าคุณสามารถแก้ไขเพื่อ จำกัด ให้แคบลงได้ไหม? ขอบคุณ!
Mithical

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

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

คำตอบ:


3

ฉันคิดว่าคุณตั้งคำถามที่ดีโดยเฉพาะอย่างยิ่ง WRT กับวิธีการที่อินพุตและเอาต์พุตของ NNs ถูกแมปเข้ากับกลไกของเกมไพ่อย่าง MtG ซึ่งการกระทำที่มีอยู่นั้นแตกต่างกันอย่างมากกับบริบท

ฉันไม่ได้คำตอบที่น่าพอใจจริงๆ แต่ฉันได้แสดงการแข่งขันของ Keldon สำหรับ AI ที่ใช้ Galaxy NN ซึ่งยอมรับว่ายอดเยี่ยม - และได้ดูว่ามันจัดการกับปัญหานี้ได้อย่างไร

รหัสล่าสุด Keldon ของ AI อยู่ในขณะนี้สามารถค้นหาและเรียกดูได้บนGitHub

รหัส ai อยู่ในไฟล์เดียว มันใช้ 2 NNS ที่แตกต่างกันหนึ่งรายการสำหรับ "การประเมินมือและการ์ดที่ใช้งาน" และอีกอันสำหรับ "การเลือกตัวเลือกบทบาท"

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

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


อีกกรณีศึกษาที่ยอดเยี่ยมในการทำแผนที่เกมที่ซับซ้อนใน NN คือสภาพแวดล้อมการเรียนรู้ Starcraft II ที่สร้างขึ้นโดย Deepmind โดยความร่วมมือกับ Blizzard Entertainment บทความนี้ให้ภาพรวมว่าเกมของ Starcraft ถูกแมปไปยังชุดของคุณลักษณะที่ NN สามารถตีความได้อย่างไรและวิธีการที่ตัวแทนจำหน่าย NN สามารถนำไปใช้กับการจำลองเกมได้


2

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

ฉันจะคำนึงถึงความเป็นไปได้สองสามประการ:

  1. เวลามีความสำคัญในเกมนี้หรือไม่? การเคลื่อนไหวที่ผ่านมาจะมีอิทธิพลต่ออนาคตหรือไม่ ในกรณีนี้คุณควรใช้เครือข่ายประสาทกำเริบ (LSTM, GRU, ฯลฯ )
  2. คุณต้องการให้ Neural Network เรียนรู้จากข้อมูลที่คุณรวบรวมหรือเรียนรู้ด้วยตัวเองหรือไม่? ถ้าด้วยตัวเองได้อย่างไร หากคุณรวบรวมข้อมูลของตัวคุณเองที่เล่นเกมเป็นสิบหรือหลายร้อยครั้งให้ป้อนเข้าไปใน Neural Net และทำให้มันเรียนรู้จากคุณคุณกำลังทำสิ่งที่เรียกว่า "การโคลนนิ่งพฤติกรรม" อย่างไรก็ตามหากคุณต้องการให้ NN เรียนรู้ด้วยตนเองคุณสามารถทำได้ 2 วิธี:

    a) Reinforcement Learning - RL ช่วยให้ Neural Net เรียนรู้ด้วยการเล่นกับตัวเองหลายครั้ง

    b) NEAT / ขั้นตอนวิธีเชิงพันธุกรรม - NEAT อนุญาตให้ Neural Net เรียนรู้โดยใช้อัลกอริทึมทางพันธุกรรม

อย่างไรก็ตามเพื่อให้มีความเฉพาะเจาะจงมากขึ้นเกี่ยวกับวิธีการเข้ารหัสอินพุตและเอาต์พุตของ Neural Net ฉันต้องรู้เพิ่มเติมเกี่ยวกับเกมการ์ด


สวัสดีขอบคุณสำหรับคำตอบ! ฉันจะตรวจสอบพื้นที่เหล่านี้เพื่อดูว่ามีอะไรบ้าง ฉันได้เพิ่มคำอธิบายสั้น ๆ ของเกมด้วยความหวังว่าสิ่งนี้จะแคบลงสำหรับคุณ โปรแกรมของฉันรองรับการเลิกทำเพื่อที่จะเป็นประโยชน์เมื่อใช้ร่วมกับ NN เนื่องจากเอ็นจิ้นยังไม่เสร็จฉันไม่ได้มีชุดตัวอย่าง แต่วางแผนที่จะเก็บประวัติเกมทั้งหมดจากโฮสติ้งเซิร์ฟเวอร์ระหว่างผู้เล่น 2 คน ฉันกำลังพิจารณาใช้การขยายพันธุ์กลับเพื่อเร่งกระบวนการ
pcaston2

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

2

แน่นอนว่าคุณต้องการให้เครือข่ายของคุณทราบข้อมูลที่สำคัญเกี่ยวกับเกมเช่นการ์ดเอเย่นต์ AI มีอะไรบ้าง (คุณค่าและประเภทของเกม) มานาพูลจำนวนไพ่บนโต๊ะและค่าจำนวนรอบและอื่น ๆ สิ่งเหล่านี้คุณต้องคิดด้วยตัวเองคำถามที่คุณควรถามตัวเองคือ "ถ้าฉันเพิ่มค่านี้เพื่อป้อนว่าจะปรับปรุงระบบของฉันอย่างไรและทำไม" แต่สิ่งแรกที่ต้องทำความเข้าใจคือ NNs ส่วนใหญ่ได้รับการออกแบบให้มีขนาดอินพุตคงที่และฉันคิดว่านี่เป็นเรื่องสำคัญในเกมนี้เนื่องจากผู้เล่นสามารถมีไพ่ในมือหรือบนโต๊ะจำนวนแตกต่างกัน ตัวอย่างเช่นคุณต้องการให้ NN รู้ว่าการ์ดมีอะไรสมมติว่าผู้เล่นสามารถมีไพ่สูงสุด 5 ใบในมือของเขาและการ์ดแต่ละใบสามารถมี 3 ค่า (มานาการโจมตีและสุขภาพ) ดังนั้นคุณสามารถเข้ารหัสสิ่งนี้เป็น 5 * 3 เวกเตอร์ โดยที่ 3 ค่าแรกแสดงหมายเลขบัตรหนึ่งและอื่น ๆ แต่ถ้าผู้เล่นมีไพ่ 3 ใบในปัจจุบันวิธีการง่ายๆก็คือการกำหนดค่าศูนย์ให้กับอินพุต 6 ตัวสุดท้าย แต่นี่อาจทำให้เกิดปัญหาเนื่องจากการ์ดบางใบสามารถมีมานา 0 ค่าหรือการโจมตี 0 ดังนั้นคุณต้องหาวิธีการแก้ปัญหานี้ คุณอาจมองหารูปแบบ NN ที่สามารถจัดการกับขนาดอินพุตที่หลากหลายหรือหาวิธีการเข้ารหัสอินพุตเป็นเวกเตอร์ที่มีขนาดคงที่

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

แต่ส่วนที่สำคัญที่สุดของการฝึกอบรมเครือข่ายประสาทคือคุณจะต้องมีฟังก์ชั่นการสูญเสียที่เหมาะสมกับงานของคุณ บางทีฟังก์ชั่นการสูญเสียมาตรฐานเช่นการสูญเสียค่าเฉลี่ยกำลังสองหรือ L2 อาจดีคุณอาจต้องเปลี่ยนค่าเพื่อให้เหมาะกับความต้องการของคุณ นี่คือส่วนที่คุณจะต้องทำการวิจัย ฉันไม่เคยทำงานกับ NEAT มาก่อน แต่อย่างที่ฉันเข้าใจอย่างถูกต้องมันใช้อัลกอริธึมทางพันธุกรรมบางอย่างในการสร้างและฝึกอบรม NN และ GA ใช้ฟังก์ชั่นการออกกำลังกายเพื่อเลือกบุคคล ดังนั้นโดยทั่วไปคุณจะต้องรู้ว่าคุณจะใช้เมตริกใดในการประเมินว่าแบบจำลองของคุณมีประสิทธิภาพดีเพียงใดและตามเมตริกนี้คุณจะเปลี่ยนพารามิเตอร์ของโมเดล

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

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


1

ใช่. มันเป็นไปได้

ภาพรวมของคำถาม

เป้าหมายการออกแบบของระบบดูเหมือนว่าจะได้รับความได้เปรียบเชิงกลยุทธ์ที่ชนะโดยการใช้หนึ่งหรือมากกว่าเครือข่ายเทียมร่วมกับเครื่องยนต์เล่นการ์ดเกม

คำถามที่แสดงให้เห็นถึงการรับรู้ทั่วไปของพื้นฐานของเกมเล่นตามที่ระบุในและ Morgenstern ฟอน Neuman ของทฤษฎีเกม

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

คุณสมบัติอื่น ๆ ของการเล่นเกมอาจหรืออาจไม่ชัดเจน

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

คำแนะนำวิธีการทั่วไป

มีวิธีการทั่วไปในการแมปทั้งอินพุตและเอาต์พุต แต่มีมากเกินกว่าที่จะอธิบายได้ในคำตอบสแต็ก Exchange นี่เป็นเพียงหลักการพื้นฐานเล็กน้อย

  • ควรทำโมเดลทั้งหมดที่สามารถทำได้อย่างชัดเจน ตัวอย่างเช่นแม้ว่าเน็ตเทียมสามารถเรียนรู้วิธีการนับไพ่ในทางทฤษฎี (การติดตามตำแหน่งที่เป็นไปได้ของแต่ละการ์ด) อัลกอริทึมการนับง่าย ๆ สามารถทำได้ดังนั้นใช้อัลกอริทึมที่รู้จักและป้อนผลลัพธ์เหล่านั้นลงในเครือข่ายเทียม อินพุต
  • ใช้เป็นอินพุตข้อมูลใด ๆ ที่สัมพันธ์กับเอาต์พุตที่ดีที่สุด แต่อย่าใช้เป็นอินพุตข้อมูลใด ๆ ที่ไม่สามารถสัมพันธ์กับเอาต์พุตที่ดีที่สุด
  • เข้ารหัสข้อมูลเพื่อลดความซ้ำซ้อนในเวกเตอร์อินพุตทั้งในระหว่างการฝึกและในระหว่างการเล่นเกมอัตโนมัติ นามธรรมและการวางนัยทั่วไปเป็นสองวิธีทั่วไปในการบรรลุเป้าหมายนี้ การแยกคุณสมบัติสามารถใช้เป็นเครื่องมือในการสรุปหรือสรุป สามารถทำได้ทั้งอินพุตและเอาต์พุต ตัวอย่างคือถ้าในเกมนี้ J> 10 ในลักษณะเดียวกับ A> K, K> Q, Q> J และ 10> 9 แล้วเข้ารหัสไพ่เป็นจำนวนเต็มตั้งแต่ 2 ถึง 14 หรือ 0 ถึง 12 โดย ลบหนึ่ง เข้ารหัสชุดให้เป็น 0 ถึง 3 แทนที่จะเป็นสตริงข้อความสี่ชุด

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

สิ่งที่เครือข่ายประดิษฐ์จะทำและตัวอย่างการฝึกอบรม

บทบาทหลักของเครือข่ายประดิษฐ์ประเภทนี้คือการเรียนรู้ฟังก์ชั่นจากข้อมูลตัวอย่าง หากคุณมีลำดับการย้ายของเกมจริง ๆ นั่นเป็นทรัพย์สินที่ยอดเยี่ยมสำหรับโครงการของคุณ จำนวนมากของพวกเขาจะเป็นประโยชน์อย่างมากสำหรับการฝึกอบรม

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

ศึกษาต่อ

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

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

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