พฤติกรรมใดบ้างที่ควรใช้ในการสร้างนักสู้ AI ที่“ ไม่สมบูรณ์”


19

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

แก้ไข:กรณีการใช้งานเฉพาะของฉันคือมีศัตรูที่เหมือน MMO เช่น World of Warcraft แม้ว่าจะมีกราฟิกที่เกี่ยวข้องน้อยกว่า โปรดทราบว่านั่นหมายถึงศัตรูทั้งมนุษย์และไร้มนุษยธรรม (สัตว์สัตว์ประหลาด ฯลฯ )

คำตอบ:


14

มีบทความที่น่าสนใจเกี่ยวกับ Gamasutra: ข้อผิดพลาดที่ชาญฉลาด: วิธีการรวมความโง่เขลาเข้ากับรหัส AI ของคุณโดย Mick West

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

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

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

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

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

ด้วยวิธีนี้ผู้เล่นจะคิดว่าเขาโชคดี และนั่นคือสิ่งที่คุณคาดหวังสำหรับเกมเมื่อเล่นง่าย


1
มันจะเป็นประโยชน์สำหรับ AI ในการจดจำสิ่งที่ผู้เล่นสามารถใช้ประโยชน์ได้ ผู้พัฒนาอาจคิดว่าเขามี 'easy pot' แต่ถ้าเขาไม่สามารถ pot มันได้ควรใช้ยุทธวิธีชั้นเชิงกรณีน้อยกว่า นอกจากนี้ยังมีประโยชน์เพราะคุณสามารถฝึกผู้เล่นจดจำสิ่งที่เขาไม่สามารถทำได้และจงใจใช้ประโยชน์จากสิ่งนี้ทุก ๆ ครั้งจนกว่าเขาจะทำได้วิธีนี้ทำให้ผู้เล่นไม่เบื่อและไม่หงุดหงิด
Jonathan Connell

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

@ Lo'oris: ดีฉันไม่เห็นว่ามันเป็นเรื่องโกหก เมื่อผู้เล่นบอกให้เกมเล่นง่ายเขาก็คาดหวังว่าเกมนี้จะอ่อนโยน เมื่อคุณเล่นเกมที่คุณเก่งกับเพื่อนที่เพิ่งค้นพบมันฉันรู้สึกว่ามันโอเคที่จะให้โอกาสเขา มันทำให้เกมสนุกขึ้นสำหรับทุกคน
Tyn

1
มีการโพสต์บล็อกที่ดีโดยShawn Hargreavesเกี่ยวกับการสุ่มและความสามารถของมนุษย์ในการสังเกตรูปแบบสุ่ม นี่แปลว่าตันในกรณีนี้ผู้เล่นตัดสินกลยุทธ์ของผู้เล่น AI อย่างไม่ถูกต้อง
Jonathan Connell

1
ที่จริงฉันคิดว่าการสุ่มเลือกความแม่นยำเป็นวิธีที่ดี ด้วยผู้เล่นตัวจริงที่ไม่ได้ยอดเยี่ยมบางครั้งเขาก็จะทำผิดพลาดและตีลูกที่ดีกว่าได้ด้วย
AttackHobo

10

แนวคิดหลักคือการหลีกเลี่ยงการให้ NPC "ความรู้สมบูรณ์แบบ"

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

ฉันแน่ใจว่ามีตัวอย่างอีกมากมายที่คุณจะได้รับบางทีคุณอาจบอกเราเกี่ยวกับเกมของคุณและเราจะได้รับเฉพาะ :-)


4

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

นี่คือตัวอย่างเล็ก ๆ สำหรับเอาต์พุต:

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

นี่คือแนวคิดบางอย่างสำหรับการป้อนข้อมูล:

  • หากการกระทำขึ้นอยู่กับสุขภาพของฝ่ายตรงข้ามให้เพิ่มปัจจัยสุ่ม (พูด +/- 10 สำหรับแถบสุขภาพ 0-100) เพื่อรับรู้สถานะโดย AI
  • เช่นเดียวกับการให้คะแนนของการกระทำถ้า AI รู้ว่าการโจมตีบางอย่างนั้นแข็งแกร่งกว่าการกระทำอื่นให้เพิ่ม / ลบค่าบางค่าที่นั่น

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

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


3

เป็นการยากที่จะให้คำตอบที่เป็นประโยชน์โดยตรงโดยไม่ทราบว่าคุณกำลังพยายามทำอะไร

ฉันมีสองสิ่งที่จะพูดในเรื่องที่อาจช่วยคุณได้

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

ประการที่สองหลีกเลี่ยงการสุ่ม ผู้เล่นไม่เห็นคุณค่าเท่าที่นักออกแบบต้องการที่จะคิด ผู้เล่นไม่เห็น "คอมพิวเตอร์สร้าง 1 จาก 100 ตามด้วย 5, 3 และ 4 ดังนั้นปัจจัยความผิดพลาดของสี่นัดสุดท้ายมีเพียง 1%, 5%, 3% และ 4% และนั่นคือ ทำไมคุณถึงตายในครึ่งวินาทีในรอบนี้ " ผู้เล่นเพียงแค่เห็นศัตรูที่บางครั้งพลาดอย่างรุนแรงและเวลาอื่น ๆ ตอกตะปูพวกเขาซ้ำ ๆ โดยไม่มีเหตุผลที่สังเกตเห็นซึ่งเป็นที่น่าผิดหวังอย่างไม่น่าเชื่อ การออกแบบเกมที่ดีนั้นส่วนใหญ่เกี่ยวกับการสร้างลวดลายที่ผู้เล่นเป็นมนุษย์สามารถทำได้สังเกตเรียนรู้และเอาชนะและทำให้ความสำเร็จของผู้เล่นขึ้นอยู่กับการตัดสินใจและทักษะและสัญชาตญาณของตัวเองแทนที่จะทำให้ผู้เล่นโชคดี ความต้องการที่จะสุ่มมาจากประสบการณ์กับเกมบนโต๊ะและเกมการพนันซึ่งทั้งสองเป็นสื่อที่แตกต่างอย่างไม่น่าเชื่อกว่าวิดีโอเกม (และสิ่งที่ใช้งานได้ในสื่อหนึ่งมักจะไม่สมเหตุสมผล)


1

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

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

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


0

ฉันเพิ่งเห็นป๊อปอัปนี้และต้องการแบ่งปันความคิดที่ฉันเคยใช้ในอดีต

สมมติว่าตัวละครนั้นมีสามจังหวะและแต่ละคนมีคะแนน (คำตอบอื่น ๆ พูดคุยเกี่ยวกับการเพิ่มเสียงเพื่อสร้างคะแนนนี้)

  • โจมตีด้วยดาบ (30 คะแนน)
  • คาถาไฟ (50 คะแนน)
  • คาถาน้ำแข็ง (20 คะแนน)

สรุปคะแนนรวมทั้งหมด (100)

นำสถิติความฉลาดของตัวละครออกมาให้ได้มากที่สุดสำหรับสถิตินี้ (สมมุติว่า 60 จาก 100)

สร้างตัวเลขสุ่มระหว่าง 0 (หรือชั้นอื่น ๆ ) และอัตราส่วนปัญญา (0.6) คูณด้วยคะแนนรวม (100) ในตัวอย่างของเราสมมุติว่าผลลัพธ์คือ 45

ตอนนี้คุณเริ่มลบการย้ายที่ไม่ดีออกจากค่านี้จนกว่าคุณจะตีศูนย์ (ลบตามลำดับ)

อันดับแรกเราพิจารณาคาถาน้ำแข็งซึ่งให้คะแนน 20. 45 - 20 = 25 นี่คือศูนย์เหนือดังนั้นเราจึงโยนคาถาน้ำแข็งออก

ประการที่สองดูการโจมตีด้วยดาบมูลค่า 30 คะแนน 25 - 30 = -5 เราถึงขีด จำกัด ของเราดังนั้นเราจึงเลือกการโจมตีด้วยการกระทำด้วยดาบ

ในระบบนี้ตัวละครที่มีสติปัญญาต่ำจะไม่เลือกท่าที่ดีที่สุด และตัวละครที่มีความฉลาดสูงมักจะเลือกท่าที่ดีที่สุด (ในตัวอย่างนี้ตัวละครที่มีความฉลาดสมบูรณ์แบบจะเลือกจังหวะที่ดีที่สุด 50%)

การเพิ่มกลไกการตั้งพื้นกับหมายเลขสุ่มจะเพิ่มโอกาสในการเลือกการเคลื่อนไหวที่ดีขึ้น

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