วิธีการฝึกอบรมเครือข่ายประสาทเทียมเพื่อเล่น Diablo 2 โดยใช้การป้อนข้อมูลด้วยภาพ


139

ฉันกำลังพยายามรับ ANN เพื่อเล่นวิดีโอเกมและฉันหวังว่าจะได้รับความช่วยเหลือจากชุมชนที่ยอดเยี่ยมที่นี่

ฉันได้ตัดสินจาก Diablo 2 แล้วการเล่นเกมจึงเป็นแบบเรียลไทม์และจากมุมมองภาพวาดสามมิติโดยผู้เล่นสามารถควบคุมอวาตาร์ตัวเดียวที่กล้องมีศูนย์กลางอยู่

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

ที่นี่

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

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

ดังนั้นคำถามของฉัน: คุณมีวิธีอื่นอย่างไรในการฝึกอบรมให้ทำอย่างน้อยส่วนหนึ่งของงานนี้ โดยไม่ต้องทำตัวอย่างหลายพันรายการ

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

UPDATE (04/27/12):

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

ยังคงมองหาอินพุตที่มีค่ามากขึ้นโดยเฉพาะในปัญหาของการเลือกการกระทำแบบเรียลไทม์และวิธีเข้ารหัสภาพสีสำหรับการประมวลผล ANN :-)

UPDATE (10/21/15):

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


1
ลองดูบทความนี้ : D ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/…
zergylord

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

1
เพื่อให้เป็นความทรงจำที่ดีที่สุดของฉัน Diablo 2 ใช้แผ่นสไปรต์ที่สกัดได้ง่าย มันควรจะค่อนข้างง่ายในการผูกสิ่งต่าง ๆ (ผู้เล่นศัตรู ฯลฯ ... ) กับรายการสไปรต์ที่เกี่ยวข้อง มันไม่ได้แก้ปัญหาของวัตถุที่ถูกบดบังซึ่งกันและกัน แต่เป็นการเริ่มต้น
Ryan Jenkins

@zergylord มันจะช่วยถ้าคุณสามารถบอกได้ว่าคุณต้องการรักษาเกณฑ์ของ a) การเล่น Diablo 2 และ b) โดยใช้พิกเซลที่วาดบนหน้าจอเป็นแหล่งอินพุตเดียวของคุณ ถ้าคุณต้องการทำสิ่งต่าง ๆ ให้ง่ายขึ้นฉันคิดว่าคุณจะต้องผ่อนคลายสักเล็กน้อย (หรือทั้งสองอย่าง) จากนั้นคุณยินดีที่จะทำเช่นนั้นหรือไม่?
Stompchicken

1
การโหวตให้ปิดกว้างเกินไป
Ciro Santilli 郝海东冠状病六四事件法轮功

คำตอบ:


54

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

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

ฉันจำได้ว่ามีคนอื่นมาหาคำแนะนำเกี่ยวกับโครงการที่แตกต่าง แต่อย่างใดคล้ายกันเมื่อไม่นานมานี้ มันคุ้มค่าที่จะลองดู

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

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

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

ในคำตอบนี้ฉันอธิบายสั้น ๆ 2 วิธีเพื่อบรรลุสิ่งที่คุณต้องการผ่านการประมวลผลภาพ หากคุณสนใจพวกเขาคุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับพวกเขาได้ในExploiting Online Games (ตอนที่ 6) หนังสือที่ดีเยี่ยมในเรื่องนี้


43

อัพเดท 2018-07-26: แค่นั้นแหละ! เรากำลังเข้าใกล้จุดที่เกมประเภทนี้จะสามารถแก้ไขได้! ใช้ OpenAI และขึ้นอยู่กับเกม DotA 2 ทีมสามารถทำให้ AI ที่สามารถเอาชนะนักเล่นเกมกึ่งมืออาชีพในเกม 5v5 ถ้าคุณรู้จัก DotA 2 คุณจะรู้ว่าเกมนี้ค่อนข้างคล้ายกับเกม Diablo ในแง่ของกลไก แต่อาจมีคนโต้แย้งว่ามันมีความซับซ้อนมากขึ้นเนื่องจากการเล่นเป็นทีม

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

ในวันที่ 5 สิงหาคม 2018 (ใน 10 วัน!)มีการวางแผนที่จะเจาะ AI นี้กับผู้เล่น DotA 2 ชั้นนำ หากวิธีนี้ใช้ได้ผลคาดหวังว่าการปฏิวัติครั้งยิ่งใหญ่อาจจะไม่ได้ไกล่เกลี่ยเหมือนการแก้ไขของเกม Go แต่มันจะเป็นก้าวสำคัญสำหรับเกม AI!

อัปเดต 2017-01:ฟิลด์กำลังเคลื่อนไหวอย่างรวดเร็วตั้งแต่ความสำเร็จของ AlphaGo และมีกรอบใหม่เพื่ออำนวยความสะดวกในการพัฒนาอัลกอริทึมการเรียนรู้ของเครื่องในเกมเกือบทุกเดือน นี่คือรายการล่าสุดที่ฉันได้พบ:

  • จักรวาลของ OpenAI : แพลตฟอร์มที่จะเล่นจริงเกมใด ๆ โดยใช้การเรียนรู้เครื่อง API อยู่ใน Python และรันเกมที่อยู่เบื้องหลังสภาพแวดล้อมเดสก์ท็อประยะไกล VNC ดังนั้นจึงสามารถจับภาพของเกมใด ๆ ได้! คุณอาจใช้ Universe เล่น Diablo II ผ่านอัลกอริทึมการเรียนรู้ของเครื่อง!
  • โรงยิมของ OpenAI : คล้ายกับจักรวาล แต่ตั้งเป้าหมายอัลกอริธึมการเรียนรู้การเสริมแรงโดยเฉพาะ มีหลักสูตรเกี่ยวกับ Udemy ที่ครอบคลุมการประยุกต์ใช้การเรียนรู้ของเครื่องกับเกมเช่นการฝ่าวงล้อมหรือ Doom โดยใช้ OpenAI Gym
  • TorchCraft : สะพานเชื่อมระหว่างTorch (กรอบการเรียนรู้ของเครื่อง) และ StarCraft: Brood War
  • pyGTA5 : โครงการสร้างรถยนต์ที่ขับเคลื่อนด้วยตนเองใน GTA5 ด้วยการจับภาพหน้าจอเท่านั้น (มีวิดีโอออนไลน์จำนวนมาก)

เวลาที่น่าตื่นเต้นมาก!

การอัปเดตที่สำคัญ (2016-06):ตามที่ระบุไว้โดย OP ปัญหาของการฝึกอบรมเครือข่ายประดิษฐ์นี้เพื่อเล่นเกมโดยใช้อินพุตภาพเท่านั้นขณะนี้ถูกจัดการโดยสถาบันที่จริงจังหลายแห่งพร้อมผลที่น่าสนใจเช่นDeepMind Deep-Qlearning-Network (DQN) ) .

และตอนนี้ถ้าคุณต้องการที่จะก้าวต่อไปในความท้าทายระดับต่อไปคุณสามารถใช้หนึ่งในแพลตฟอร์มพัฒนาเกม AI visionเช่นViZDoomแพลตฟอร์มที่ได้รับการปรับให้เหมาะสมที่สุด (7000 fps) เพื่อฝึกอบรมเครือข่ายเพื่อเล่น Doom โดยใช้อินพุตภาพเท่านั้น :

ViZDoom อนุญาตให้พัฒนาบอท AI ที่เล่น Doom โดยใช้ข้อมูลภาพ (บัฟเฟอร์หน้าจอ) เท่านั้น มันมีวัตถุประสงค์หลักเพื่อการวิจัยในการเรียนรู้ด้วยเครื่องและโดยเฉพาะอย่างยิ่งการเรียนรู้การเสริมแรง ViZDoom ตั้งอยู่บน ZDoom เพื่อให้กลไกเกม

และผลลัพธ์ค่อนข้างน่าทึ่งดูวิดีโอบนหน้าเว็บของพวกเขาและแบบฝึกหัดที่ดี (ใน Python) ที่นี่!

นอกจากนี้ยังมีโครงการที่คล้ายกันสำหรับ Quake 3 Arena เรียกว่าQuagentsซึ่งให้การเข้าถึง API ที่ง่ายต่อการเข้าถึงข้อมูลเกมพื้นฐาน แต่คุณสามารถคัดลอกมันและใช้ภาพหน้าจอและ API เท่านั้นเพื่อควบคุมเอเจนต์ของคุณ

ทำไมแพลตฟอร์มดังกล่าวถึงมีประโยชน์ถ้าเราใช้ภาพหน้าจอเท่านั้น? แม้ว่าคุณจะไม่เข้าถึงข้อมูลเกมพื้นฐาน แต่แพลตฟอร์มดังกล่าวก็มีให้:

  • การติดตั้งเกมประสิทธิภาพสูง (คุณสามารถสร้างข้อมูล / บทละคร / การเรียนรู้มากขึ้นโดยใช้เวลาน้อยลงเพื่อให้อัลกอริทึมการเรียนรู้ของคุณสามารถมาบรรจบกันได้เร็วขึ้น!)
  • API ที่ใช้งานง่ายและตอบสนองต่อการควบคุมเอเจนต์ของคุณ (เช่นถ้าคุณพยายามใช้อินพุตมนุษย์เพื่อควบคุมเกมคำสั่งบางคำอาจหายไปดังนั้นคุณต้องจัดการกับเอาท์พุตที่ไม่น่าเชื่อถือ ... )
  • ติดตั้งง่ายของสถานการณ์ที่กำหนดเอง
  • การปรับแต่งการแสดงผล (สามารถเป็นประโยชน์ในการ "ลดความซับซ้อน" ภาพที่คุณได้รับเพื่อความสะดวกในการประมวลผล)
  • ทำข้อมูลให้ตรงกัน ("ทีละเลี้ยว") เล่น (ดังนั้นคุณไม่จำเป็นต้องใช้อัลกอริทึมของคุณในการทำงานในเรียลไทม์ในตอนแรกนั่นคือการลดความซับซ้อนมาก)
  • คุณสมบัติความสะดวกเพิ่มเติมเช่นความเข้ากันได้ของ crossplatform, retrocompatibility (คุณไม่ต้องเสี่ยงกับ bot ของคุณไม่สามารถทำงานกับเกมได้อีกต่อไปเมื่อมีการอัพเดทเกมใหม่) เป็นต้น

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

ตอนนี้มาทำงานและทำให้เราเป็น AI visual bot ที่ดีที่สุดเท่าที่เคยมีมา;)


โพสต์เก่าที่อธิบายถึงปัญหาทางเทคนิคของการพัฒนา AI ที่พึ่งพาเฉพาะอินพุตภาพ:

ตรงกันข้ามกับเพื่อนร่วมงานบางคนของฉันด้านบนฉันไม่คิดว่าปัญหานี้จะแก้ไม่ได้ แต่แน่นอนว่าเป็นเฮลลาที่ยาก!

ปัญหาแรกตามที่กล่าวไว้ข้างต้นคือการเป็นตัวแทนของสถานะของเกม : คุณไม่สามารถแสดงสถานะเต็มด้วยภาพเดียวคุณจำเป็นต้องรักษาความจำบางอย่างไว้(สุขภาพ แต่ยังติดตั้งวัตถุและรายการที่พร้อมใช้งานเควสและเป้าหมาย ฯลฯ ) เพื่อดึงข้อมูลดังกล่าวคุณมีสองวิธี: โดยการเข้าถึงข้อมูลเกมโดยตรงซึ่งเชื่อถือได้และง่ายที่สุด; หรือคุณสามารถสร้างข้อมูลที่เป็นนามธรรมของข้อมูลเหล่านี้ได้โดยการใช้ขั้นตอนง่าย ๆ (คลังโฆษณาแบบเปิด, จับภาพหน้าจอ, ดึงข้อมูล) แน่นอนว่าการดึงข้อมูลจากภาพหน้าจออาจทำให้คุณต้องทำตามขั้นตอนการดูแล (ซึ่งคุณกำหนดไว้อย่างสมบูรณ์) หรือไม่ได้รับการดูแล (ผ่านอัลกอริทึมการเรียนรู้ของเครื่อง สำหรับการเรียนรู้ของเครื่องที่ไม่ได้รับการจัดการคุณจะต้องใช้อัลกอริทึมชนิดล่าสุดที่เรียกว่าอัลกอริธึมการเรียนรู้เชิงโครงสร้าง (ซึ่งเรียนรู้โครงสร้างของข้อมูลมากกว่าจะจำแนกพวกมันหรือทำนายค่า)http://techtalks.tv/talks/54422/

แล้วปัญหาก็คือว่าแม้เมื่อคุณมีความจริงข้อมูลทั้งหมดที่คุณต้องการเกมเป็นเพียงบางส่วนสังเกต ดังนั้นคุณต้องฉีดโมเดลนามธรรมของโลกและป้อนข้อมูลประมวลผลจากเกมตัวอย่างเช่นตำแหน่งของอวตารของคุณ แต่ยังเป็นที่ตั้งของไอเท็มเควสเป้าหมายและศัตรูนอกจอ คุณอาจมองเข้าไปใน Mixture Particle Filter โดย Vermaak 2003 สำหรับสิ่งนี้

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

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

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

การวิจัยเป็นเวลาหลายทศวรรษกับทีมงานทั้งหมดอาจไม่พอดังนั้นถ้าคุณอยู่คนเดียวและทำงานนอกเวลา (เพราะคุณอาจมีงานทำหาเลี้ยงชีพ) คุณอาจใช้เวลาตลอดชีวิตโดยไม่ต้องไปใกล้ ๆ ทางออกการทำงาน

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

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


27

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

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

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


ยุติธรรมพอสมควร คุณสามารถโทรหาอะไรก็ได้ที่คล้ายกับเครือข่าย ANN แต่แทบจะไม่สามารถนำไปสู่การสนทนาที่สำคัญได้ :)
Don Reba

ใช่แล้ว ... ฉันควรอธิบายแรงบันดาลใจของฉันให้ลึกซึ้งยิ่งขึ้น ฉันรู้ว่ามีวิธีที่ดีกว่าในการสร้างเกม AIs แต่ฉันกำลังทำสิ่งนี้เพื่อผลักดันขีด จำกัด ของตัวจำลอง ANN ที่ฉันได้รับการอัพเกรด ดู: stanford.edu/group/pdplab/pdphandbook
zergylord

1
ไม่ว่าในกรณีใด Don Reba นั้นถูกต้องฉันก็ไม่คิดว่ามันจะเป็นไปได้ที่จะเรียนรู้กลยุทธ์สำหรับบางอย่างเช่น Diablo โดยไม่ต้องรวมความรู้ก่อนหน้านี้จำนวนมากและแยกคุณสมบัติที่มีประโยชน์ เพียงแค่เรียนรู้จากอินพุตวิดีโอจะยากมากหากไม่สามารถใช้คอมพิวเตอร์ในปัจจุบันได้
ahans

18

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

http://code.google.com/p/bwapi/


2

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

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


2
การคุ้นเคยกับเกม Diablo II ฉันสามารถพูดได้ว่ามันใช้ 256 สี (ยกเว้นบางโหมดใช้สีสูงหรือจริง) นอกจากนี้ยังใช้ประโยชน์อย่างมากจากสไปรต์เพื่อแสดงวัตถุต่าง ๆ หากคุณสามารถแยกสไปรต์บางตัว (จากภาพหน้าจอ) คุณอาจฝึกฝนเครื่องมือของคุณให้รู้จักวัตถุตามสไปรท์ (เช่น 'Minor Healing Potion' ที่ลดลงจะมีลักษณะเหมือนกันเสมอ) หากฉันเจาะลึกลงไปในสิ่งที่เฉพาะเจาะจงของ Diablo II จะมีคำถามเพิ่มขึ้นเช่นกัน ขอให้โชคดี
Ivaylo Slavov

1

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

1) สำหรับ 'ย้าย' ที่เป็นไปได้ทุกรายการสร้างรายการ 'ผลลัพธ์' ที่เป็นไปได้ (พร้อมความน่าจะเป็นที่เกี่ยวข้อง) 2) สำหรับแต่ละผลลัพธ์ให้ใช้เครือข่ายประสาทของคุณเพื่อกำหนด 'คะแนน' ที่เกี่ยวข้องของคะแนน 'ผลลัพธ์' (เช่น ตัวเลขระหว่าง -1 ถึง 1, 1 เป็นผลลัพธ์ที่ดีที่สุด, -1 แย่ที่สุด) 3) เลือก 'ย้าย' ที่นำไปสู่ค่าสูงสุด * คะแนน 4) หากการย้ายนำไปสู่ ​​'ชนะ' หรือ 'แพ้' หยุดมิฉะนั้นกลับไปที่ขั้นตอนที่ 1

หลังจากระยะเวลาหนึ่ง (หรือ 'ชนะ' / 'เสีย') ให้ประเมินว่าเครือข่ายประสาทนั้นใกล้กับ 'เป้าหมาย' (ซึ่งอาจเกี่ยวข้องกับความรู้เกี่ยวกับโดเมน) จากนั้นโยน 50% (หรือเปอร์เซ็นต์อื่น ๆ ) ของ NNs ที่อยู่ไกลออกไปจากเป้าหมายทำครอสโอเวอร์ / การกลายพันธุ์ของ 50% แรกและเรียกใช้ NNs ชุดใหม่อีกครั้ง วิ่งต่อไปจนกว่า NN ที่น่าพอใจจะออกมา


อ่าเพิ่ม GA เข้าไปในส่วนผสมน่าสนใจ น่าเสียดายเนื่องจากฉันมีเครือข่ายที่ส่งการกดคีย์ / การเคลื่อนไหวของเมาส์เป็นการกระทำฉันจึงต้องใช้คอมพิวเตอร์หนึ่งเครื่องต่อเครือข่าย> <ปัญหาอีกอย่างหนึ่งก็คือสภาพพื้นที่ของสภาพแวดล้อมไม่ได้แยกจากกัน เม็ดละเอียดมาก) ตัวอย่างเช่นลองจินตนาการถึงผลลัพธ์ที่เป็นไปได้ที่เกี่ยวข้องกับการคลิกเมาส์: ตัวละครภายใต้การควบคุมของเน็ตอาจเคลื่อนที่หรือโจมตี แต่ศัตรูก็สามารถเคลื่อนไหวได้เช่นกันและจะมีความแตกต่างของพิกเซลในสภาพแวดล้อมจากสิ่งต่าง ๆ เช่นเงาและสภาพอากาศ .
zergylord

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

1

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

จากนั้นลองนึกถึงการเล่นเกม Diablo II ที่ง่ายที่สุดที่เป็นไปได้อาจเป็น Barbarian จากนั้นทำให้มันง่ายในตอนแรกเช่น Act I พื้นที่แรกเท่านั้น

จากนั้นฉันก็เดาว่า 'เป้าหมาย' ที่มีค่าจะหายไปจากวัตถุของศัตรูและการลดลงของแถบสุขภาพ (ทำคะแนนผกผัน)

เมื่อคุณแยกงานที่ 'เรียบง่าย' ออกจากกันคุณสามารถใช้ 'ต้นแบบ' ANN เพื่อตัดสินใจว่าจะให้ ANN ย่อยใดเปิดใช้งาน

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

ทั้งหมดในทุกโครงการของคุณมีความทะเยอทะยานมาก แต่ฉันคิดว่ามันอาจเป็นไปได้ในทางทฤษฎีโดยให้เวลาเพียงพอ

หวังว่ามันจะช่วยและขอให้โชคดี!

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