J'essaie actuellement de faire une recherche régressive à partir d'un état de but pour trouver une liste d'actions qui permettront d'atteindre l'état d'objectif de mon planificateur GOAP. Jusqu'à présent, le pseudo-code pour ce que j'ai vers le bas va comme ceci:Régressif Orienté Objectif Planification
closedList = list;
s = stack;
s.push(goal);
while(s.size() > 0)
{
state = s.pop;
if(!state exists in closedList)
{
closedList.add(state);
for(action = firstAction; action != lastAction; action = nextAction)
{
if(action.getEffect() == state)
{
if(!action.ConditionsFulfilled())
{
conditionList = action.getConditions;
for(i = 0; i < conditionList.size(); i++)
{
s.push(conditionList[i]);
}
}
}
}
}
}
J'entends que GOAP est exactement comme un algorithme A * seulement que le noeud est l'état et les bords sont les actions. Mais comme dans un A *, il n'y a pas de conditions à remplir par un nœud, cela m'a rendu confus sur la façon d'adapter un algorithme A * pour travailler avec des conditions préalables. Ce que j'ai du mal à comprendre, c'est comment stocker les actions et comparer le coût des actions afin de trouver le chemin le plus efficace. Si nous supposons que l'action de classe a une fonction getCost() qui retourne le coût de l'action, comment ferais-je cela en considérant les conditions préalables?
Merci, je n'ai pas pensé à ça. Donne un sens complet maintenant. – Sammi3
La recherche arrière est plus efficace. Jeff Orkin en parle brièvement dans: http://alumni.media.mit.edu/~jorkin/GOAP_draft_AIWisdom2_2003.pdf J'ai réussi à faire la recherche régressive. Maintenant, je travaille à trouver la bonne façon de changer la condition préalable de l'action. – Sammi3