Skip to main content

Pythonic Behavior Trees

Project description

misbehave

Misbehave is a Python behavior tree implementation. A behavior tree is a design pattern that breaks complex state-based actions into their component parts to improve readability and re-usability for autonomous agents. A good starting place to understand them is [here]](https://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php).

Misbehave focused on python language features not available in other languages, so some of the common features of AI design are missing by default. The rest of this document is lightly hedged in its language as behavior trees can be useful for video games or robots.

How to use Misbehave

A node in a Misbehave behavior tree is simply a callable. While the ones provided with this library are classes, you can use functions or closures to define them.

The signature of a node's function is simple:

def MyNode(actor: Any, context: Any) -> misbehave.State
    # Perform actions here.

An actor is an object representing the thing the behavior tree is controlling. In a video game, this would be the mob object.

The context is available for providing access to things like sensors, controls, other code objects representing things in space. If you don't need them, you can pass None here.

An example of a tree might look like this in your code:

class MyActor():
    tree = misbehave.selector.Sequence(
        misbehave.action.IncreaseValue("behavior_tree_runs"),
        my_actions.MoveForward(10),
        my_actions.Rotate(90)
    )
    behavior_tree_runs = 0

This simple tree keeps track of how many times the entire tree was run, and then moves the actor in a square. You must implement the specifics of the actions here.

Development

Misbehave requires Python 3.6 or later.

To work on misbehave, after forking and cloning locally, you'll want to setup a virtual environment. You'll notice we don't have any requirement files: all requirements are listed in setup.cfg either as setup_requires or as extras.

In your project directory, with your virtual environment active:

python -m pip install -e .[dev, tests]

If you do not do an editable install of misbehave, misbehave.version will be missing and the library will fail to work.

Other than that, we are ready for PEP 518 and 517, so if you're using a build tool that supports them, feel free!

It is strongly encouraged that you run black on the misbehave directory and then pytest before commiting to any working branch. Failure to lint will disqualify a PR.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

misbehave-0.1.1.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

misbehave-0.1.1-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file misbehave-0.1.1.tar.gz.

File metadata

  • Download URL: misbehave-0.1.1.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for misbehave-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fed1a031604ad1a4d904e28d85089fa014705e68d1331e994c9cf9c936465956
MD5 9c8c6864d53f6be826964655724c4d1c
BLAKE2b-256 bb94af5672b28b4d11b1741584bec0bb304a83f632fbefb3abbf7cb406401f1d

See more details on using hashes here.

File details

Details for the file misbehave-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: misbehave-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for misbehave-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 538675cf79b16bb6d5aafc98bb5b33fa196d3cbfb0a7e55012a848e15728f966
MD5 5a0e6eeb01007825b7cca8baa084191e
BLAKE2b-256 8ccbdd5846ab6d137049f21e84937496c9a910c44bb136af2c20e8d45d6cb897

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page