एक GOAP प्रणाली में लागत का अनुमान लगाना


9

मैं वर्तमान में जावा में एक GOAP प्रणाली विकसित कर रहा हूं। GOAP का स्पष्टीकरण http://web.media.mit.edu/~jorkin/goap.html पर पाया जा सकता है । अनिवार्य रूप से, यह ए * का उपयोग उन क्रियाओं के बीच करने के लिए है जो दुनिया की स्थिति को बदलते हैं।

सभी क्रियाओं और लक्ष्यों को निष्पादित करने के लिए उचित अवसर प्रदान करने के लिए, मैं कुछ करने की लागत का अनुमान लगाने के लिए एक अनुमानी कार्य का उपयोग कर रहा हूं। इस लागत का अनुमान लगाने का सबसे अच्छा तरीका क्या है ताकि यह अन्य सभी लागतों के बराबर हो?

एक उदाहरण के रूप में, किसी दुश्मन से दूर भागने की लागत का आकलन करते हुए, उस पर हमला करते हुए - लागत की तुलना कैसे की जानी चाहिए?


हम अपने आरटीएस गेम के लिए GOAP का उपयोग कर रहे हैं और जल्द ही इस तरह से अधिक ट्यूटोरियल पोस्ट करेंगे: 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

तो यह स्पष्ट रूप से पूल से पानी इकट्ठा करने का एक बेहतर विकल्प है। हो सकता है कि अगर उग्र नदी ही एकमात्र विकल्प हो तो इकाई तब तक इंतजार करेगी जब तक नदी को आजमाने से पहले उसकी संतुष्ट प्यास प्राथमिकता नहीं हो जाती।

आप चीजों को शुरू करने के लिए बहुत सरल रखना चाह सकते हैं। बस कुछ वैरिएबल हैं जो विश्व स्तर पर और अधिक लागू हो सकते हैं। जिंदा रहने की तरह, जरूरतों को पूरा करना। अपनी लड़ाई या उड़ान उदाहरण में, आपको प्रत्येक इकाई को एक लड़ाकू रेटिंग देने की आवश्यकता होगी, ताकि वे स्कोर उद्देश्यों के लिए अन्य इकाई के खिलाफ प्रभावी रूप से खुद को रैंक कर सकें।


आपका बहुत बहुत धन्यवाद! सभी संभावित परिणामों पर भविष्यवाणी करना मेरे पास एक बेहतर विचार की तरह लगता है।
फुलवॉल

0

मुझे पता है, मुझे पता है, यह काफी समय हो गया है।

दरअसल, GOAP के रूप में 2005 में जेएआर ऑर्किन द्वारा FEAR में लागू किया गया था (और सीक्वेल, एक्सटेंशन और ... शैडो ऑफ मॉर्डर में पुन: उपयोग किया गया), कार्यों की निश्चित लागत है, 0.5 से लेकर 8. तक। सामान्य तौर पर, हमले की लागत बहुत अधिक है। बचाव की लागत से अधिक महंगा है। इन लागतों को मुफ्त FEAR SDK (2008) के गेम डेटाबेस में एक्सेस किया जा सकता है; वे यहाँ हैं:


{{चेतन, 1}, {हमला, 6}, {AttackBurstLimited, 5}, {AttackCrouch, 5}, {AttackFromAmbush, 4}, {AttackFromArmored, 4}, {AttackFromArmoredBounded, 4}, {AttackFromCover, 4}, {}। AttackFromVehicle, 1}, {AttackFromView, 4.5}, {AttackGrenadeFromCover, 2}, {AttackLunge3D, 1}, {AttackLungeMelee, 1}, {AttackLungeSuicide, 1}, {AttackLungeUncloaked, 1}, {AttackLunge3, 1}, {AttackMeleeUncloaked, 3}, {AttackReady, 7}, {AttackTurret, 6}, {AttackTurretCeiling, 6}, {BlindFireFromCover, 2}, {Charge, 1}, {DeathOnVehicle, 1}, {DismountNodeNode}। , {DismountVehicle, 1}, {DodgeCovered, 1}, {DodgeOnVehicle, 1}, {DodgeRoll, 2}, {DodgeRollParanoid, 2}, {DodgeSuffle, 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}, {GotoTarget, 4}, {GotoTarget, 4}, {GotoTarget> , 8}, {GotoValidPosition, 1}, {HolsterWeapon, 1}, {Idle, 2}, {IdleFidget, 1}, {IdleOnVehicle, 1}, {IdidTurret, 2}, {InspectDisturbance, 2}, {InstantDeath, 1 तत्काल। }, {InstantDeathKnockDown, 1}, {KnockDownBullet, 2}, {KnockDownExplosive, 2}, {KnockDownMelee, 2}, {LongRecoilBeclet, 3}, {LongRecoilExplosive, 3}, {LongRecilHilil सबटाइटल "। {LookAtDisturbance, 1.5}, {LookAtDisturbanceFromView, 3}, {LopeToTargetUncloaked, 1}, {MountNodeUncloaked, 1}, {MountVehicle, 1}, {ReactToDanger, 1}, {ReladToDanger, 1}, {ReladTadget_nadloaked, 1}} , 5}, {ShortRecoilMelee, 4}, {Stunned, 1}, {SuppressionFire, 2}, {SuppressionFireFromCover, 1}, {SurveyArea, 1},{TraverseBlockedDoor, 1}, {TraverseLink, 2}, {TraverseLinkUncloaked, 1}, {Uncover, 1}, {UseSmartObjectNode, 3}, {UseSmartObjectNodeMounted, 1}}


लेकिन यह सभी GOAP कार्यान्वयनों में ऐसा नहीं है और उदाहरण के लिए, टॉम्ब रेडर्स की परिवर्तनीय लागतें हैं (उदाहरण के लिए एक गोटो कार्रवाई के लिए दूरी)।

कार्यों में भी पूर्व शर्त होती है और कुछ कार्यों को GOAP वास्तुकला के बावजूद खेला जाना चाहिए (जैसे कि प्रतिक्रिया में "स्तब्ध" एनीमेशन तेजी से घटते हुए स्वास्थ्य के लिए - "किल एनिमी" लक्ष्य के बावजूद और GOAP उस लक्ष्य को पूरा करने के लिए वापस लौटता है)। आपकी छूट में, यानी भागते हुए बनाम हमला करते हुए, स्वास्थ्य स्तर एक पूर्व शर्त हो सकता है (और चर लागत की आवश्यकता नहीं है)।

या माइकल के प्राथमिकताओं के आधार पर चेक_कोस्ट्स () सदस्य फ़ंक्शन को किसी अन्य चीज से पहले निष्पादित किया जाता है, और गतिशील लागत लौटाता है।

अब, कृपया ध्यान दें कि शैडो ऑफ मॉर्डर में खेल डेवलपर्स ने स्क्रीन पर निष्पादित होने वाले कार्यों को प्रभावित करने के लिए कार्यों की लागतों के साथ खेलने की कोशिश की। यह पता चला है कि यह इतना आसान नहीं है और सस्ती कार्रवाई भी इतनी बार नहीं दिखाई देती है: एक गेम में AI खिलाड़ी का समर्थन करता है; यदि खिलाड़ी वह नहीं करता है जो अपेक्षित है, तो एआई सिर्फ उसका समर्थन करेगा और ... स्क्रीन पर जो दिखाई देगा, वह गेम डिज़ाइन नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.