การประมาณค่าใช้จ่ายในระบบ GOAP


9

ฉันกำลังพัฒนาระบบ GOAP ใน Java คำอธิบายของ GOAP สามารถพบได้ที่http://web.media.mit.edu/~jorkin/goap.html โดยพื้นฐานแล้วมันใช้ A * เพื่อพล็อตระหว่างการกระทำที่เปลี่ยนแปลงสถานะโลก

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

ยกตัวอย่างเช่นการประเมินค่าใช้จ่ายในการวิ่งหนีจากศัตรูเมื่อเทียบกับการโจมตี - วิธีการคำนวณต้นทุนควรเปรียบเทียบได้อย่างไร


เรากำลังใช้ GOAP สำหรับเกม RTS ของเราและจะโพสต์บทเรียนเพิ่มเติมเช่นนี้ในไม่ช้า: indiedb.com/games/attack-of-the-gelatinous-blob/news/…
Erlend

คำตอบ:


4

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

ตัวอย่างเช่นมีสระน้ำลึกและเอนทิตี้ของกระหายน้ำ ดังนั้นเราจึงดูการกระทำที่กลุ่มมีให้เพื่อสนองความต้องการที่:

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

เอนทิตีลำดับความสำคัญ :

ความกระหายที่พอเหมาะ: 40
อยู่ให้แห้ง: 10
อยู่รอด: 100

แล้วสถานที่นั้นหมายถึงอะไร:

สถานที่ตั้ง :
แอคชั่นพูล: รวบรวมน้ำ
* ผลลัพธ์ที่เป็นไปได้: * :
กระหายน้ำได้ - (-95)
เปียกน้ำ - 10
จมน้ำ - 1

ดังนั้นเราสามารถคำนวณต้นทุนการดำเนินการได้ที่: (40 * -95) + (10 * 10) + (100 * 1) = -3600

การเก็บน้ำจากแม่น้ำที่ดุเดือดอาจดูเหมือน:

ที่ตั้ง : แม่น้ำที่บ้าคลั่ง
แอ็คชั่น : เก็บน้ำ
* ผลลัพธ์ที่เป็นไปได้: * :
สนองความกระหาย - (-95)
เปียก - 90
จมน้ำตาย - 60

(40 * -95) + (10 * 90) + (100 * 60) = 3100

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

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


ขอบคุณมาก! การคาดคะเนผลลัพธ์ที่เป็นไปได้ทั้งหมดดูเหมือนความคิดที่ดีกว่าสิ่งที่ฉันมี
fullwall

0

ฉันรู้ฉันรู้ว่ามันค่อนข้างนานแล้ว

แท้จริงใน GOAP ที่นำมาใช้ในปี 2005 โดย Jeff Orkin ใน FEAR (และนำกลับมาใช้ใหม่ในภาคต่อการขยายและ ... Shadow Of Mordor) การกระทำมีค่าใช้จ่ายคงที่ตั้งแต่ 0.5 ถึง 8 โดยทั่วไปค่าใช้จ่ายในการโจมตีเป็นจำนวนมาก แพงกว่าค่าใช้จ่ายในการป้องกัน ค่าใช้จ่ายเหล่านี้สามารถเข้าถึงได้ในฐานข้อมูลเกมของ Free FEAR SDK (2008) ที่นี่พวกเขาคือ:


{{เคลื่อนไหว 1}, {โจมตี, 6}, {AttackBurstLimited, 5}, {AttackCrouch, 5}, {AttackFromAmbush, 4}, {AttackFromArmored, 4}, {AttackFromArmoredBounded, 4}, {AttackFromArmoredBounded, 4}, {AttackFromArmoredBounded, 4}, {} AttackFromVehicle, 1}, {AttackFromView, 4.5}, {AttackGrenadeFromCover, 2}, {AttackLunge3D, 1}, {AttackLungeMelee, 1}, {AttackLungeSuicide, 1}, {AttackLungeUncloaked, 1}, {AttackMelee, 3} 1}, {AttackMeleeUncloaked, 3}, {AttackReady, 7}, {AttackTurret, 6}, {AttackTurretCeiling, 6}, {BlindFireFromCover, 2}, {Charge, 1}, {DeathOnVehicle, 1}, {DismountNodeUncloaked, 1} , {DismountVehicle, 1}, {DodgeCovered, 1}, {DodgeOnVehicle, 1}, {DodgeRoll, 2}, {DodgeRollParanoid, 2}, {DodgeShuffle, 3}, {DrawWeapon, 1}, {EscapeDanger, 0.5}, FaceNode, 1}, {FlushOutWithGrenade, 3}, {Follow, 3}, {FollowHeavyArmor, 2}, {FollowPlayer, 2}, {FollowPlayerFidget, 1.8},{FollowWaitAtNode, 4}, {GetOutOfTheWay, 1}, {GotoNode, 1}, {GotoNode3D, 1}, {GotoNodeDirect, 1}, {GotoNodeOfType, 1}, {GotoTarget, 4} , 8}, {GotoValidPosition, 1}, {HolsterWeapon, 1}, {Idle, 2}, {IdleFidget, 1}, {IdleOnVehicle, 1}, {IdleTurret, 2}, {InspectDisturbance, 2}, {InspectDisturbance, 2}, {InstantDeath, 1} }, {InstantDeathKnockDown, 1}, {KnockDownBullet, 2}, {KnockDownExplosive, 3}, {KnockDownMelee, 3}, {LongRecoilBullet, 3}, {LongRecoilExplosive, 3}, {LookAtDisturbance, 1.5}, {LookAtDisturbanceFromView, 3}, {LopeToTargetUncloaked, 1}, {MountNodeUncloaked, 1}, {MountVehicle, 1}, {ReactToDanger, 1}, {โหลดซ้ำ, 1} , 5}, {ShortRecoilMelee, 4}, {Stunned, 1}, {SuppressionFire, 2}, {SuppressionFireFromCover, 1}, {SurveyArea, 1},{TraverseBlockedDoor, 1}, {TraverseLink, 2}, {TraverseLinkUncloaked, 1}, {Uncover, 1}, {UseSmartObjectNode, 3}, {UseSmartObjectNodeMode, 1}}


แต่ไม่ใช่ในทุกการใช้งาน GOAP และตัวอย่างเช่น Tomb Raiders มีค่าใช้จ่ายผันแปร (เช่นระยะทางสำหรับการดำเนินการ Goto)

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

หรือฟังก์ชันสมาชิก Check_Costs () ถูกเรียกใช้ก่อนสิ่งอื่นตามลำดับความสำคัญของ Michael และส่งคืนค่าใช้จ่ายแบบไดนามิก

ตอนนี้โปรดทราบว่าในผู้พัฒนาเกม Shadow Of Mordor พยายามที่จะเล่นกับค่าใช้จ่ายของการกระทำเพื่อที่จะมีอิทธิพลต่อสิ่งที่จะถูกดำเนินการบนหน้าจอ ปรากฎว่ามันไม่ใช่เรื่องง่ายและการกระทำที่ราคาถูกไม่ปรากฏบ่อยนัก: AI ในเกมรองรับผู้เล่น; หากผู้เล่นไม่ได้ทำตามที่คาดหวัง AI จะสนับสนุนสิ่งนั้นและ ... สิ่งที่จะปรากฏบนหน้าจอจะไม่เป็นไปตามที่คาดการณ์ไว้

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