GOAP sistemindeki maliyetleri tahmin etme


9

Şu anda Java'da bir GOAP sistemi geliştiriyorum. GOAP'ın bir açıklaması http://web.media.mit.edu/~jorkin/goap.html adresinde bulunabilir . Esasen, dünya durumunu değiştiren Eylemler arasında çizim yapmak için A * kullanıyor.

Tüm Eylemlerin ve Hedeflerin yürütülmesi için adil bir şans sağlamak için, bir şey yapmanın maliyetini tahmin etmek için sezgisel bir işlev kullanıyorum. Diğer tüm maliyetlerle karşılaştırılabilir olması için bu maliyeti tahmin etmenin en iyi yolu nedir?

Örnek olarak, bir düşmandan ona saldırmaktan kaçmanın maliyetini tahmin etmek - maliyetin karşılaştırılabilir olması nasıl hesaplanmalıdır?


RTS oyunumuz için GOAP kullanıyoruz ve yakında bunun gibi daha fazla eğitim yayınlayacağız: indiedb.com/games/attack-of-the-gelatinous-blob/news/…
Erlend

Yanıtlar:


4

Tüm maliyetleri karşılaştırılabilir yapmak için, tüm eylemler için sadece aynı buluşsal yöntemi kullanmanız gerekir. Örneğin, tüm eylemlerin potansiyel sonuçların bir listesi vardır ve tüm sonuçların işletme için belirli bir değeri vardır.

Örneğin, su ile derin bir havuz var ve varlık susuz. Bu nedenle, havuzun bu ihtiyacı karşılamak için mevcut bir eyleme bakıyoruz:

Öncelikle bu yerlerle ilişkili varlık öncelikleri, bunlara değiştiriciler diyebilirsiniz. Bunlardan bazıları zamanla değişecek ve işletmeye bağlı olacaktır. Örneğin bir karınca hayatta kalmaktan daha az, koloni endişelerinden daha fazla endişe edebilir. Veya bir işletme içki içmeden bir süre geçtiyse, susuzluk giderilmesi önceliği diğerlerini geçersiz kılabilir.

Varlık öncelikleri :

Susuzluğu gider: 40
Kuru kal: 10
Hayatta kal: 100

Sonra konumun neyi temsil ettiği:

Yer : Havuz
Aksiyon : Su topla
* Potansiyel sonuçlar: * :
Susuzluğu gider - (-95) Islan -
10
Boğul - - 1

Bu eylem maliyetini şu şekilde hesaplayabiliriz: (40 * -95) + (10 * 10) + (100 * 1) = -3600

Şiddetli bir nehirden su toplamak şöyle görünebilir:

Yer : Raging river
Aksiyon : Su topla
* Potansiyel sonuçlar: * :
Susuzluğu gider - (-95) Islan -
90
Boğul - - 60

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

Bu yüzden havuzdan su toplamak için daha iyi bir seçim. Belki de azgın nehir tek seçenek olsaydı, işletme nehri denemeden önce susuzluk önceliğini tatmin edene kadar beklerdi.

Başlangıçta işleri daha basit tutmak isteyebilirsiniz. Daha global olarak uygulanabilecek birkaç değişkeniniz var. Hayatta kalmak gibi ihtiyaçları karşılayın. Dövüş veya uçuş örneğinizde, her bir varlığa bir savaş derecesi vermeniz gerekir, böylece puan amaçları için kendilerini diğer varlığa karşı etkili bir şekilde sıralayabilirler.


Çok teşekkürler! Tüm potansiyel sonuçları tahmin etmek, sahip olduğumdan daha iyi bir fikir gibi geliyor.
fullwall

0

Biliyorum, biliyorum, oldukça uzun zaman oldu.

Nitekim, 2005 yılında FEAR'da Jeff Orkin tarafından uygulanan GOAP'ta (ve devam filmlerinde, uzatmada ve ... Mordor'un gölgesinde yeniden kullanıldı), eylemlerin maliyetleri 0,5 ila 8 arasında değişiyordu. Genel olarak, saldırı maliyeti çok fazla savunma maliyetinden daha pahalı. Bu maliyetlere Free FEAR SDK (2008) oyun veritabanından erişilebilir; işte buradalar:


{{Animate, 1}, {Attack, 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}, {AttackMelee, 3}, {AttackLungeUncloaked 1}, {AttackMeleeUncloaked, 3}, {AttackReady, 7}, {AttackTurret, 6}, {AttackTurretCeiling, 6}, {BlindFireFromCover, 2}, {Ücret, 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}, {GotoTarget3D, 4}, {GotoTarget3D, 4}, {GotoTarget3D, 4}, {GotoTarget3D, 4} , 8}, {GotoValidPosition, 1}, {HolsterWeapon, 1}, {Idle, 2}, {IdleFidget, 1}, {IdleOnVehicle, 1}, {IdleTurret, 2}, {InspectDisturbance, 2}, {InstantDeath, 1 }, {InstantDeathKnockDown, 1}, {KnockDownBullet, 2}, {KnockDownExplosive, 2}, {KnockDownMelee, 2}, {LongRecoilBullet, 3}, {LongRecoilExplosive, 3}, {LongRecoilHelmetPiercing, 3}, {LongRecoilMele}, {LookAtDisturbance, 1.5}, {LookAtDisturbanceFromView, 3}, {LopeToTargetUncloaked, 1}, {MountNodeUncloaked, 1}, {MountVehicle, 1}, {ReactToDanger, 1}, {Yeniden Yükle, 5}, {ReloadCovered, 1}, {ReloadCro , 5}, {ShortRecoilMelee, 4}, {Stunned, 1}, {SuppressionFire, 2}, {SuppressionFireFromCover, 1}, {SurveyArea, 1},{TraverseBlockedDoor, 1}, {TraverseLink, 2}, {TraverseLinkUncloaked, 1}, {Uncover, 1}, {UseSmartObjectNode, 3}, {UseSmartObjectNodeMounted, 1}}


Ancak tüm GOAP uygulamalarında durum böyle değildir ve örneğin, Mezar Baskıncılarının değişken maliyetleri vardır (örneğin bir Goto eyleminin mesafesi).

Eylemlerin de önkoşulları vardır ve GOAP mimarisine rağmen bazı eylemler oynanmalıdır (ör. "Düşmanı Öldür" Hedefi ve GOAP'ın bu Hedefi karşılamak için geri döndüğü plana rağmen, hızla azalan sağlığı tepki olarak "sersemletici" bir animasyon oynayın). Örnekleminizde, yani saldırmaya karşı kaçmak gibi, sağlık seviyesi bir ön koşul olabilir (ve değişken maliyetlere gerek yoktur).

Ya da Check_Costs () üye işlevi Michael'ın önceliklerine göre her şeyden önce yürütülür ve dinamik maliyeti döndürür.

Şimdi, Shadow Of Mordor'da oyun geliştiricilerin, ekranda yapılacakları etkilemek için eylemlerin maliyetleriyle oynamaya çalıştıklarını unutmayın. Anlaşılan o kadar kolay ve hatta ucuz bir aksiyon bu kadar sık ​​görünmüyor: Bir oyunda AI oyuncuyu destekliyor; oyuncu beklenen şeyi yapmazsa, AI sadece bunu destekleyecek ve ... ekranda görünecek olan şey oyun tasarımının beklediği gibi olmayacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.