I've been looking into behavior trees, but I cannot find a lot about them. The Wikipedia page pretty much only mentions sequence and selector nodes.

I have found implementations that also provide memory selector, memory sequence, and parallel sequence, as well as some decorators like inversion and repetition.

I found some papers that discuss some form of a "weighted" selector/sequence that queries its children for their utility/probability. This can also be used in machine learning to dynamically adjust those weights.

What I have not yet found much about is communication between nodes. Some implementations use a shared "blackboard" where nodes can write values, but this seems rather clumsy, as it creates a huge lookup table that tightly couples different nodes.

I've been thinking more in terms of sending messages to the next node. I think the bulk of the shared state is a condition/action providing a specific value to the next action (rather than just success).

Has there been any research in this area? I was not able to find anything. I'm also curious to hear about other useful extensions.


The most mathematical paper I have seen on Behavior Trees is How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture and Decision Trees. It is the only paper I have seen that defines Behavior Trees as a tuple e.g.

A BT is a three-tuple $T_i = \{f_i, r_i, \Delta t\}$

Since Behavior Trees are related to Finite State Machines (FSMs), they mention Petri Nets which are also related to FSMs. They're a message passing / concurrency system, but weren't mentioned really in relation to message passing on Behavior Trees. Maybe it would provide some inspiration since they are highly developed message passing formalisms.

Other than that, there may be some private work done on message passing in complex Behavior Trees such as in game companies, but there doesn't seem to be any public resources on it. Maybe it is an artifact of the way behavior trees are developed, i.e. it seems to be done through node-based graphic interfaces, so less source-code-centric:

enter image description here

Probably best to just come up with your own system it seems. Maybe even try asking at the gamedev.se, they might have some insight. Hope that helps.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.