Repository: infer-actively/pymdp Branch: main Commit: d493cc0e9479 Files: 220 Total size: 9.3 MB Directory structure: gitextract_jhy4mwbi/ ├── .github/ │ └── workflows/ │ ├── docs.yml │ ├── lint.yaml │ ├── manual-branch-nightly.yaml │ ├── nightly-tests.yaml │ ├── python-package.yml │ └── test.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── .readthedocs.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docs/ │ ├── Makefile │ ├── agent.rst │ ├── algos/ │ │ ├── fpi.rst │ │ ├── index.rst │ │ └── mmp.rst │ ├── conf.py │ ├── control.rst │ ├── env.rst │ ├── index.rst │ ├── inference.rst │ ├── installation.rst │ ├── learning.rst │ ├── make.bat │ ├── notebooks/ │ │ ├── active_inference_from_scratch.ipynb │ │ ├── cue_chaining_demo.ipynb │ │ ├── free_energy_calculation.ipynb │ │ ├── pymdp_fundamentals.ipynb │ │ ├── tmaze_demo.ipynb │ │ └── using_the_agent_class.ipynb │ └── requirements.txt ├── docs-mkdocs/ │ ├── agent.html │ ├── algos/ │ │ └── index.html │ ├── api/ │ │ ├── agent.md │ │ ├── algos.md │ │ ├── control.md │ │ ├── envs-env.md │ │ ├── envs-rollout.md │ │ ├── index.md │ │ ├── inference.md │ │ ├── learning.md │ │ ├── maths.md │ │ ├── planning-mcts.md │ │ ├── planning-si.md │ │ └── utils.md │ ├── control.html │ ├── development/ │ │ ├── release-notes.md │ │ └── viewing-docs.md │ ├── env.html │ ├── getting-started/ │ │ ├── installation.md │ │ └── quickstart-jax.md │ ├── guides/ │ │ ├── generative-model-structure.md │ │ ├── pymdp-env.md │ │ └── rollout-active-inference-loop.md │ ├── index.md │ ├── inference.html │ ├── installation.html │ ├── javascripts/ │ │ ├── mathjax.js │ │ └── sidebar-accessibility.js │ ├── learning.html │ ├── legacy/ │ │ └── index.md │ ├── migration/ │ │ └── numpy-to-jax.md │ ├── notebooks/ │ │ ├── active_inference_from_scratch.html │ │ ├── cue_chaining_demo.html │ │ ├── free_energy_calculation.html │ │ ├── pymdp_fundamentals.html │ │ ├── tmaze_demo.html │ │ └── using_the_agent_class.html │ ├── overrides/ │ │ └── modules/ │ │ └── sidebar.html │ ├── styles/ │ │ └── crisp-api.css │ └── tutorials/ │ ├── index.md │ ├── notebooks/ │ │ ├── index.header.md │ │ └── index.md │ └── notebooks.manifest ├── examples/ │ ├── __init__.py │ ├── advanced/ │ │ ├── complex_action_dependency.ipynb │ │ ├── infer_states_optimization/ │ │ │ └── methods_test.ipynb │ │ └── pymdp_with_neural_encoder.ipynb │ ├── api/ │ │ └── model_construction_tutorial.ipynb │ ├── envs/ │ │ ├── chained_cue_navigation.py │ │ ├── cue_chaining_demo.ipynb │ │ ├── generalized_tmaze_demo.ipynb │ │ ├── graph_worlds_demo.ipynb │ │ ├── knapsack_demo.ipynb │ │ └── tmaze_demo.ipynb │ ├── experimental/ │ │ └── sophisticated_inference/ │ │ ├── mcts_generalized_tmaze.ipynb │ │ ├── mcts_graph_world.ipynb │ │ ├── si_generalized_tmaze.ipynb │ │ ├── si_graph_world.ipynb │ │ └── si_tmaze_SIvalidation.ipynb │ ├── inductive_inference/ │ │ ├── inductive_inference_example.ipynb │ │ └── inductive_inference_gridworld.ipynb │ ├── inference_and_learning/ │ │ └── inference_methods_comparison.ipynb │ ├── learning/ │ │ └── learning_gridworld.ipynb │ ├── legacy/ │ │ ├── agent_demo.ipynb │ │ ├── free_energy_calculation.ipynb │ │ ├── gridworld_tutorial_1.ipynb │ │ ├── gridworld_tutorial_2.ipynb │ │ ├── tmaze_demo.ipynb │ │ └── tmaze_learning_demo.ipynb │ ├── model_fitting/ │ │ ├── fitting_with_pybefit.ipynb │ │ └── tmaze_recoverability.py │ └── sparse/ │ └── sparse_benchmark.ipynb ├── mkdocs.yml ├── nbval_sanitize.cfg ├── paper/ │ ├── paper.bib │ └── paper.md ├── pymdp/ │ ├── __init__.py │ ├── agent.py │ ├── algos.py │ ├── control.py │ ├── distribution.py │ ├── envs/ │ │ ├── __init__.py │ │ ├── cue_chaining.py │ │ ├── env.py │ │ ├── generalized_tmaze.py │ │ ├── graph_worlds.py │ │ ├── grid_world.py │ │ ├── rollout.py │ │ └── tmaze.py │ ├── inference.py │ ├── learning.py │ ├── legacy/ │ │ ├── __init__.py │ │ ├── agent.py │ │ ├── algos/ │ │ │ ├── __init__.py │ │ │ ├── fpi.py │ │ │ ├── mmp.py │ │ │ └── mmp_old.py │ │ ├── control.py │ │ ├── default_models.py │ │ ├── envs/ │ │ │ ├── __init__.py │ │ │ ├── env.py │ │ │ ├── grid_worlds.py │ │ │ ├── tmaze.py │ │ │ └── visual_foraging.py │ │ ├── inference.py │ │ ├── learning.py │ │ ├── maths.py │ │ └── utils.py │ ├── likelihoods.py │ ├── maths.py │ ├── planning/ │ │ ├── __init__.py │ │ ├── mcts.py │ │ ├── si.py │ │ └── visualize.py │ └── utils.py ├── pyproject.toml ├── scripts/ │ ├── docs_build.sh │ ├── docs_serve.sh │ ├── docs_sync_and_serve.sh │ ├── notebook_precommit.py │ ├── run_notebook_manifest.py │ └── sync_docs_notebooks.sh ├── setup.cfg └── test/ ├── __init__.py ├── conftest.py ├── matlab_crossval/ │ ├── generation/ │ │ ├── bmr_matlab_test_a.m │ │ ├── bmr_matlab_test_b.m │ │ ├── mmp_matlab_test_a.m │ │ ├── mmp_matlab_test_b.m │ │ ├── mmp_matlab_test_c.m │ │ ├── mmp_matlab_test_d.m │ │ ├── run_mmp.m │ │ ├── vb_x_matlab_test_1a.m │ │ └── vb_x_matlab_test_1b.m │ └── output/ │ ├── bmr_test_a.mat │ ├── bmr_test_b.mat │ ├── cross_a.mat │ ├── cross_b.mat │ ├── cross_c.mat │ ├── cross_d.mat │ ├── cross_e.mat │ ├── dot_a.mat │ ├── dot_b.mat │ ├── dot_c.mat │ ├── dot_d.mat │ ├── dot_e.mat │ ├── mmp_a.mat │ ├── mmp_b.mat │ ├── mmp_c.mat │ ├── mmp_d.mat │ ├── vbx_test_1a.mat │ ├── wnorm_a.mat │ └── wnorm_b.mat ├── notebooks/ │ ├── README.md │ ├── ci_notebooks.txt │ └── nightly_notebooks.txt ├── test_SPM_validation.py ├── test_agent.py ├── test_agent_jax.py ├── test_categorical_observations.py ├── test_control.py ├── test_control_jax.py ├── test_cue_chaining_env.py ├── test_demos.py ├── test_distribution.py ├── test_env.py ├── test_fpi.py ├── test_grid_world_parity.py ├── test_hmm_associative_scan.py ├── test_inductive_inference_jax.py ├── test_infer_states_optimized.py ├── test_inference.py ├── test_inference_jax.py ├── test_jax_sparse_backend.py ├── test_learning.py ├── test_learning_jax.py ├── test_message_passing_jax.py ├── test_mmp.py ├── test_param_info_gain_jax.py ├── test_pybefit_model_fitting.py ├── test_rollout_function.py ├── test_sophisticated_inference_jax.py ├── test_tmaze_envs.py ├── test_tmaze_recoverability.py ├── test_utils.py ├── test_utils_jax.py ├── test_vfe_jax.py └── test_wrappers.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/docs.yml ================================================ name: Docs on: push: branches: - main paths: - 'examples/**' - 'mkdocs.yml' - 'docs-mkdocs/**' - 'scripts/docs_*.sh' - 'scripts/sync_docs_notebooks.sh' - 'docs/**' - '.readthedocs.yml' - 'pyproject.toml' - 'pymdp/**' - '.github/workflows/docs.yml' pull_request: paths: - 'examples/**' - 'mkdocs.yml' - 'docs-mkdocs/**' - 'scripts/docs_*.sh' - 'scripts/sync_docs_notebooks.sh' - 'docs/**' - '.readthedocs.yml' - 'pyproject.toml' - 'pymdp/**' - '.github/workflows/docs.yml' jobs: build-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install uv uses: astral-sh/setup-uv@v6 - name: Install dependencies run: | uv sync --no-default-groups --extra docs - name: Sync curated notebook docs run: | ./scripts/sync_docs_notebooks.sh - name: Build docs (strict) run: | uv run --no-default-groups --extra docs mkdocs build --strict ================================================ FILE: .github/workflows/lint.yaml ================================================ name: Lint on: pull_request: paths: - '**.py' - '.github/workflows/lint.yaml' - 'pyproject.toml' jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.11"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install ruff - name: Analysing the code with ruff run: | ruff check ================================================ FILE: .github/workflows/manual-branch-nightly.yaml ================================================ name: Manual Branch Nightly on: workflow_dispatch: inputs: ref: description: Branch, tag, or SHA to validate required: true default: main type: string python_version: description: Python version to use required: true default: "3.12" type: string concurrency: group: manual-branch-nightly-${{ inputs.ref }} cancel-in-progress: false jobs: nightly: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.ref }} - name: Set up Python ${{ inputs.python_version }} uses: actions/setup-python@v3 with: python-version: ${{ inputs.python_version }} - name: Install uv uses: astral-sh/setup-uv@v6 - name: Verify nightly validation files exist run: | test -f scripts/run_notebook_manifest.py test -f test/notebooks/nightly_notebooks.txt - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y ffmpeg graphviz libgraphviz-dev pkg-config build-essential python3-dev - name: Install dependencies run: | uv sync --group test - name: Run nightly-marked tests run: | uv run pytest test -n 2 -m nightly - name: Run nightly-tier notebook tests run: | uv run python scripts/run_notebook_manifest.py test/notebooks/nightly_notebooks.txt ================================================ FILE: .github/workflows/nightly-tests.yaml ================================================ name: Nightly Tests on: schedule: - cron: "0 2 * * *" workflow_dispatch: jobs: nightly: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.12"] steps: - uses: actions/checkout@v4 with: ref: main - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install uv uses: astral-sh/setup-uv@v6 - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y ffmpeg graphviz libgraphviz-dev pkg-config build-essential python3-dev - name: Install dependencies run: | uv sync --group test - name: Running nightly-marked tests run: | uv run pytest test -n 2 -m nightly - name: Running nightly-tier notebook tests run: | uv run python scripts/run_notebook_manifest.py test/notebooks/nightly_notebooks.txt ================================================ FILE: .github/workflows/python-package.yml ================================================ name: Python package on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest permissions: contents: read strategy: matrix: python-version: ["3.11", "3.12"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Build source and wheel distributions run: | python -m pip install --upgrade pip build python -m build --sdist --wheel - name: Install built wheel run: | python -m pip install dist/*.whl - name: Import smoke test run: | cd /tmp python - <<'PY' import pymdp from pymdp.agent import Agent print("Imported pymdp from", pymdp.__file__) assert "site-packages" in pymdp.__file__ print("Agent symbol:", Agent.__name__) PY ================================================ FILE: .github/workflows/test.yaml ================================================ name: Test on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.12"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install uv uses: astral-sh/setup-uv@v6 - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y ffmpeg graphviz libgraphviz-dev pkg-config build-essential python3-dev - name: Install dependencies run: | uv sync --group test - name: Running unit tests with coverage run: | uv run pytest test -n 2 -m "not nightly" --cov=pymdp --cov-report=xml --cov-report=html --cov-report=term - name: Upload coverage reports as artifact uses: actions/upload-artifact@v4 with: name: pymdp-coverage path: | coverage.xml htmlcov/ retention-days: 30 - name: Running CI-tier notebook tests run: | uv run python scripts/run_notebook_manifest.py test/notebooks/ci_notebooks.txt ================================================ FILE: .gitignore ================================================ *.pyc __pycache__ .DS_Store .ipynb_checkpoints .rope* .vscode/ .ipynb_checkpoints/ .pytest_cache env/ pymdp.egg-info inferactively_pymdp.egg-info venv/ .venv .jax_cache .ruff_cache .coverage coverage.xml htmlcov/ site/ build/ dist/ uv.lock docs-mkdocs/tutorials/notebooks/examples/**/*.ipynb ================================================ FILE: .pre-commit-config.yaml ================================================ repos: - repo: local hooks: - id: sanitize-notebooks name: sanitize notebooks by tier entry: uv run --group dev python scripts/notebook_precommit.py sanitize language: system files: ^examples/(?!legacy/).+\.ipynb$ pass_filenames: true - id: validate-notebook-execution-counts name: validate manifest notebook execution counts entry: uv run --group dev python scripts/notebook_precommit.py validate-counts language: system files: ^examples/(?!legacy/).+\.ipynb$ pass_filenames: true ================================================ FILE: .readthedocs.yml ================================================ version: 2 build: os: "ubuntu-22.04" tools: python: "3.11" jobs: pre_build: - ./scripts/sync_docs_notebooks.sh python: install: - method: pip path: . extra_requirements: - docs mkdocs: configuration: mkdocs.yml formats: - htmlzip ================================================ FILE: CONTRIBUTING.md ================================================ # pymdp *Borrowed below list from [here](https://github.com/netsiphds/netrd)* Welcome to `pymdp` and thanks for your interest in contributing! During development please make sure to keep the following checklists handy. They contain a summary of all the important steps you need to take to contribute to the package. As a general statement, the more familiar you already are with git(hub), the less relevant the detailed instructions below will be for you. ## Types of Contribution There are multiple ways to contribute to `pymdp` (borrowed below list from [here](https://github.com/uzhdag/pathpy/blob/master/CONTRIBUTING.rst)): #### Report Bugs To report a bug in the package, open an issue at https://github.com/infer-actively/pymdp/issues. Please include in your bug report: * Your operating system name and version. * Any details about your local setup that might be helpful in troubleshooting. * Detailed steps to reproduce the bug. #### Fix Bugs Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it. #### Implement Features or New Methods Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whomever wants to implement it. If you know of a method that is implemented in another programming language, feel free to translate it into python here. If you don't want to translate it yourself, feel free to add an issue at https://github.com/infer-actively/pymdp/issues. If you have read through this document and still have questions, also open an issue. When in doubt, open an issue. #### Improve Documentation Documentation is just as important as the code it documents. Please feel free to submit PRs that are focused on fixing, improving, correcting, or refactoring documentation. #### Submit Feedback The best way to send feedback is to open an issue. If you are proposing to implement a function, feature, etc. see more details below. If you are proposing a feature not directly related to implementing a new method: * Explain in detail why the feature is desirable and how it would work. * Keep the scope as narrow as possible, to make it easier to implement. * Remember that this is a volunteer-driven project, and that your contributions are welcome! ##### A Brief Note On Licensing Often, python code for an algorithm of interest already exists. In the interest of avoiding repeated reinvention of the wheel, we welcome code from other sources being integrated into `pymdp`. If you are doing this, we ask that you be explicit and transparent about where the code came from and which license it is released under. The safest thing to do is copy the license from the original code into the header documentation of your file. For reference, this software is [licensed under MIT](https://github.com/tlarock/netrd/blob/master/LICENSE). ## Setup Before starting your contribution, you need to complete the following instructions once. The goal of this process is to fork, download and install the latest version of `pymdp`. 1. Log in to GitHub. 2. Fork this repository by pressing 'Fork' at the top right of this page. This will lead you to 'github.com//infer-actively'. We refer to this as your personal fork (or just 'your fork'), as opposed to this repository (github.com/infer-actively/pymdp), which we refer to as the 'upstream repository'. 3. Clone your fork to your machine by opening a console and doing ``` git clone https://github.com//infer-actively.git ``` Make sure to clone your fork, not the upstream repo. This will create a directory called 'infer-actively/'. Navigate to it and execute ``` git remote add upstream https://github.com/infer-actively/pymdp.git ``` In this way, your machine will know of both your fork (which git calls `origin`) and the upstream repository (`upstream`). 4. During development, you will probably want to play around with your code. For this, you need to install the `pymdp` package and have it reflect your changes as you go along. For this, open the console and navigate to the `infer-actively/` directory, and execute ``` pip install -e . ``` From now on, you can open a Jupyter notebook, ipython console, or your favorite IDE from anywhere in your computer and type `import pymdp`. These steps need to be taken only once. Now anything you do in the `infer-actively/` directory in your machine can be `push`ed into your fork. Once it is in your fork you can then request one of the organizers to `pull` from your fork into the upstream repository (by submitting a 'pull request'). More on this later! ## Recommended local hooks If you edit notebooks, install the local hooks after syncing the dev tooling: ``` uv sync --group dev uv run --group dev pre-commit install uv run --group dev pre-commit run --all-files ``` The notebook hook reads the manifests in `test/notebooks/`: * Manifest-tested notebooks keep saved outputs but also keep canonical execution counts for output-bearing code cells so `nbval` can execute them reliably. * Nightly-tier notebooks still run through `nbstripout --keep-output`, but the hook restores canonical execution counts afterwards so the saved notebooks remain valid test inputs. ## Before you start coding Once you have completed the above steps, you are ready to choose an algorithm to implement and begin coding. 1. Choose which algorithm you are interested in working on. 2. Open an issue at https://github.com/infer-actively/pymdp/issues by clicking the "New Issue" button. * Title the issue "Implement XYZ method", where XYZ method is a shorthand name for whatever function / method / environment class you plan to implement. * Leave a comment that includes a brief motivation for why you want to see this method in `pymdp`, as well as any key citations. * If such an issue already exists for the method you are going to write, it is not necessary to open another. However, it is a good idea to leave a comment letting others know you are going to work on it. 2. In your machine, create the file where your algorithm is going to live. If you chose a softmax algorithm, copy an existing file, such as `/pymdp/functions.py`, into `/pymdp/.py`. Please keep in mind that will be used inside the code, so try to choose something that looks "pythonic". In particular, cannot include spaces, should not include upper case letters, and should use underscores rather than hyphens. 3. Open the newly created file and edit as follows. At the very top you will find a string describing the algorithm. Edit this to describe the algorithm you are about to code, and preferably include a citation and link to any relevant papers. Also add your name and email address (optional). ## After you finish coding 1. After updating your local code, the first thing to do is tell git which files you have been working on. (This is called staging.) If you worked on a softmax function, for example, do ``` git add pymdp/.py ``` 2. Next tell git to commit (or save) your changes: ``` git commit -m 'Write a commit message here. This will be public and should be descriptive of the work you have done. Please be as explicit as possible, but at least make sure to include the name of the method you implemented. For example, the commit message may be: add implementation of SomeMethod, based on SomeAuthor and/or SomeCode.' ``` 3. Now you have to tell git to do two things. First, `pull` the latest changes from the upstream repository (in case someone made changes while you were coding), then `push` your changes and the updated code from your machine to your fork: ``` git pull upstream git push origin ``` NOTE: If you edited already existing files, the `pull` may result in conflicts that must be merged. If you run in to trouble here, ask for help! 4. Finally, you need to tell this (the upstream) repository to include your contributions. For this, we use the GitHub web interface. At the top of this page, there is a 'New Pull Request' button. Click on it, and it will take you to a page titled 'Compare Changes'. Right below the title, click on the blue text that reads 'compare across forks'. This will show four buttons. Make sure that the first button reads 'base fork: infer-actively/pymdp', the second button reads the branch you intend to merge into (for example `v1.0.0_alpha` for release work), the third button reads 'head fork: /infer-actively', and the fourth button reads the branch from your fork that contains your changes. (If everything has gone according to plan, the only button you should have to change is the third one - make sure you find your username, not someone elses.) After you find your username, GitHub will show a rundown of the differences that you are adding to the upstream repository, so you will be able to see what changes you are contributing. If everything looks correct, press 'Create Pull Request'. NOTE: Advanced git users may want to develop on branches other than the upstream target branch on their fork. That is totally fine; just make sure the PR points at the correct upstream branch. That's it! After you've completed these steps, maintainers will be notified and will review your code and changes to make sure that everything is in place. Some automated tests will also run in the background to make sure that your code can be imported correctly and other sanity checks. Once that is all done, one of us will either accept your Pull Request, or leave a message requesting some changes (you will receive an email either way). ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2019 Conor Heins and Alec Tschantz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================

A Python package for simulating Active Inference agents in Markov Decision Process environments. Please see our companion paper, published in the Journal of Open Source Software: ["pymdp: A Python library for active inference in discrete state spaces"](https://joss.theoj.org/papers/10.21105/joss.04098) for an overview of the package and its motivation. For a more in-depth, tutorial-style introduction to the package and a mathematical overview of active inference in Markov Decision Processes, see the [longer arxiv version](https://arxiv.org/abs/2201.03904) of the paper. ## Citing `pymdp` If you use `pymdp` in your work or research, please cite: ``` @article{Heins2022, doi = {10.21105/joss.04098}, url = {https://doi.org/10.21105/joss.04098}, year = {2022}, publisher = {The Open Journal}, volume = {7}, number = {73}, pages = {4098}, author = {Conor Heins and Beren Millidge and Daphne Demekas and Brennan Klein and Karl Friston and Iain D. Couzin and Alexander Tschantz}, title = {pymdp: A Python library for active inference in discrete state spaces}, journal = {Journal of Open Source Software} } ``` This package is hosted on the [`infer-actively`](https://github.com/infer-actively) GitHub organization, which was built with the intention of hosting open-source active inference and free-energy-principle related software. Most of the low-level mathematical operations are [NumPy](https://github.com/numpy/numpy) ports of their equivalent functions from the `SPM` [implementation](https://www.fil.ion.ucl.ac.uk/spm/doc/) in MATLAB. We have benchmarked and validated most of these functions against their SPM counterparts. ## Status ![status](https://img.shields.io/badge/status-active-green) [![PyPI version](https://img.shields.io/pypi/v/inferactively-pymdp?cacheSeconds=300)](https://pypi.org/project/inferactively-pymdp/1.0.0/) [![Documentation Status](https://readthedocs.org/projects/pymdp-rtd/badge/?version=latest)](https://pymdp-rtd.readthedocs.io/en/latest/) [![DOI](https://joss.theoj.org/papers/10.21105/joss.04098/status.svg)](https://doi.org/10.21105/joss.04098) # ``pymdp`` in action Here's a visualization of ``pymdp`` agents in action. One of the defining features of active inference agents is the drive to maximize "epistemic value" (i.e. curiosity). Equipped with such a drive in environments with uncertain yet disclosable hidden structure, active inference can ultimately allow agents to simultaneously learn about the environment as well as maximize reward. The simulation below (see associated JAX notebook [here](https://pymdp-rtd.readthedocs.io/en/latest/tutorials/notebooks/examples/envs/cue_chaining_demo/)) demonstrates what might be called "epistemic chaining," where an agent (here, analogized to a mouse seeking food) forages for a chain of cues, each of which discloses the location of the subsequent cue in the chain. The final cue (here, "Cue 2") reveals the location a hidden reward. This is similar in spirit to "behavior chaining" used in operant conditioning, except that here, each successive action in the behavioral sequence doesn't need to be learned through instrumental conditioning. Rather, active inference agents will naturally forage the sequence of cues based on an intrinsic desire to disclose information. This ultimately leads the agent to the hidden reward source in the fewest number of moves as possible. You can run the code behind simulating tasks like this one and others in the **Examples** section of the [official documentation](https://pymdp-rtd.readthedocs.io/en/latest/). The GIF generation script used for these animations is available [here](examples/envs/chained_cue_navigation.py).


Cue 2 in Location 1, Reward on Top


Cue 2 in Location 3, Reward on Bottom

## Quick-start: Installation and Usage We recommend installing `pymdp` using [`uv`](https://docs.astral.sh/uv/), with an explicit virtual environment: ```bash uv venv .venv source .venv/bin/activate uv pip install inferactively-pymdp ``` If you prefer `pip`, use: ```bash pip install inferactively-pymdp ``` If `uv sync --group test` or `uv sync --extra nb` fails while building `pygraphviz`, install Graphviz first and then retry. On macOS, install `graphviz` with Homebrew. On Ubuntu/Debian, install `graphviz libgraphviz-dev pkg-config build-essential python3-dev` (or the version-matched `python3.x-dev` package if needed). The full troubleshooting notes live in [`docs-mkdocs/getting-started/installation.md`](docs-mkdocs/getting-started/installation.md). Once in Python, you can then directly import `pymdp`, its sub-packages, and functions. ```python from jax import numpy as jnp, random as jr from pymdp import utils from pymdp.agent import Agent key = jr.PRNGKey(0) keys = jr.split(key, 3) num_obs = [3, 5] num_states = [3, 2] num_controls = [3, 1] A = utils.random_A_array(keys[0], num_obs, num_states) B = utils.random_B_array(keys[1], num_states, num_controls) C = utils.list_array_uniform([[no] for no in num_obs]) agent = Agent(A=A, B=B, C=C, batch_size=1) observation = [jnp.array([1]), jnp.array([4])] qs, info = agent.infer_states(observation, empirical_prior=agent.D, return_info=True) # Optional diagnostic: current variational free energy for each batch element. vfe = info["vfe"] q_pi, neg_efe = agent.infer_policies(qs) action_keys = jr.split(keys[2], agent.batch_size + 1) action = agent.sample_action(q_pi, rng_key=action_keys[1:]) ``` ## Getting started / introductory material We recommend starting with the JAX-first [official documentation](https://pymdp-rtd.readthedocs.io/en/latest/) for the repository, which provides practical guides, curated notebooks, and generated API references. For new users to `pymdp`, we specifically recommend stepping through following three Jupyter notebooks (can also be used on Google Colab): - [Quickstart (JAX)](https://pymdp-rtd.readthedocs.io/en/latest/getting-started/quickstart-jax/) - [NumPy/legacy to JAX migration guide](https://pymdp-rtd.readthedocs.io/en/latest/migration/numpy-to-jax/) - [`rollout()` active inference loop guide](https://pymdp-rtd.readthedocs.io/en/latest/guides/rollout-active-inference-loop/) We also have (and are continuing to build) a series of notebooks that walk through active inference agents performing different types of tasks in the [Notebook Gallery](https://pymdp-rtd.readthedocs.io/en/latest/tutorials/notebooks/). ## Contributing This package is under active development. If you would like to contribute, please refer to [CONTRIBUTING.md](CONTRIBUTING.md). Recommended local setup: ```bash cd uv venv .venv source .venv/bin/activate uv sync --group test ``` Recommended contributor hooks: ```bash uv sync --group dev uv run --group dev pre-commit install ``` Useful variants: ```bash # tests + contributor hooks uv sync --group test --group dev # docs work uv sync --group test --extra docs # notebook/media extras uv sync --group test --extra nb # model fitting extras uv sync --group test --extra modelfit ``` Run tests: ```bash pytest test ``` Build docs locally: ```bash ./scripts/docs_build.sh ``` ## Contributors - Conor Heins [@conorheins](https://github.com/conorheins) - Tim Verbelen [@tverbele](https://github.com/tverbele) - Dimitrije Markovic [@dimarkov](https://github.com/dimarkov) - Riddhi Jain Pitliya [@riddhipits](https://github.com/riddhipits) - Arun Niranjan [@Arun-Niranjan](https://github.com/Arun-Niranjan) - Toon Van de Maele [@toonvdm](https://github.com/toonvdm) - Ozan Catal [@OzanCatalVerses](https://github.com/OzanCatalVerses) - Tommaso Salvatori [@salvatomm](https://github.com/salvatomm) - Aswin Paul [@aswinpaul](https://github.com/aswinpaul) - Lancelot Da Costa [@lancelotdacosta](https://github.com/lancelotdacosta) - Ran Wei [@ran-weii](https://github.com/ran-weii) - Alexander Tschantz [@alec-tschantz](https://github.com/alec-tschantz) - Miguel de Prado [@praesc](https://github.com/praesc) - Nikola Pižurica [@NIkolaPizurica](https://github.com/NIkolaPizurica) - Nikola Milović [@nikolamilovic-ft](https://github.com/nikolamilovic-ft) - Matteo Risso [@matteorisso](https://github.com/matteorisso) - Christopher Buckley [@clb27](https://github.com/clb27) - Beren Millidge [@BerenMillidge](https://github.com/BerenMillidge) - Daphne Demekas [@daphnedemekas](https://github.com/daphnedemekas) - Cooper Williams [@coopwilliams](https://github.com/coopwilliams) ================================================ FILE: docs/Makefile ================================================ # Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ================================================ FILE: docs/agent.rst ================================================ Agent class ================================= .. autoclass:: pymdp.agent.Agent :members: ================================================ FILE: docs/algos/fpi.rst ================================================ FPI (Fixed Point Iteration) ================================= .. automodule:: pymdp.algos.fpi :members: ================================================ FILE: docs/algos/index.rst ================================================ Algos ================================= The ``algos.py`` library contains the functions for implementing message passing algorithms for variational inference on POMDP generative models Sub-libraries --------------- .. toctree:: :maxdepth: 1 fpi mmp ================================================ FILE: docs/algos/mmp.rst ================================================ MMP (Marginal Message Passing) ================================= .. automodule:: pymdp.algos.mmp :members: ================================================ FILE: docs/conf.py ================================================ # Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os import sys sys.path.insert(0, os.path.abspath('..')) # -- Project information ----------------------------------------------------- project = 'pymdp' copyright = '2021, infer-actively' author = 'infer-actively' # The full version, including alpha/beta/rc tags release = '0.0.7.1' # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.coverage', 'sphinx.ext.napoleon', 'sphinx.ext.autosummary', 'myst_nb' ] source_suffix = { '.rst': 'restructuredtext', '.ipynb': 'myst-nb' } # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { 'logo_only': True, } # The name of an image file (relative to this directory) to place at the top # of the sidebar. html_logo = '_static/pymdp_logo_2-removebg.png' html_favicon = '_static/pymdp_logo_2-removebg.png' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # -- Options for myst ---------------------------------------------- jupyter_execute_notebooks = "cache" jupyter_cache = "notebooks" ================================================ FILE: docs/control.rst ================================================ Control ================================= The ``control.py`` module contains the functions for performing inference of policies (sequences of control states) in POMDP generative models, according to active inference. .. automodule:: pymdp.control :members: ================================================ FILE: docs/env.rst ================================================ Env ======== The OpenAIGym-inspired ``Env`` base class is the main API that represents the environmental dynamics or "generative process" with which agents exchange observations and actions Base class ---------- .. autoclass:: pymdp.envs.Env Specific environment implementations ---------- All of the following dynamics inherit from ``Env`` and have the same general usage as above. .. autosummary:: :nosignatures: pymdp.envs.GridWorldEnv pymdp.envs.DGridWorldEnv pymdp.envs.SceneConstruction pymdp.envs.TMazeEnv pymdp.envs.TMazeEnvNullOutcome ================================================ FILE: docs/index.rst ================================================ .. pymdp documentation master file, created by sphinx-quickstart on Fri Oct 29 13:27:58 2021. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to pymdp's documentation! ================================= ``pymdp`` is a Python package for simulating active inference agents in discrete space and time, using partially-observed Markov Decision Processes (POMDPs) as a generative model class. The package is designed to be modular and flexible, to enable users to design and simulate bespoke active inference models with varying levels of specificity to a given task. For a theoretical overview of active inference and the motivations for developing this package, please see our companion paper_: "pymdp: A Python library for active inference in discrete state spaces". .. toctree:: :maxdepth: 1 :caption: Installation & Usage installation notebooks/pymdp_fundamentals notebooks/active_inference_from_scratch notebooks/using_the_agent_class .. toctree:: :maxdepth: 1 :caption: Examples notebooks/tmaze_demo notebooks/cue_chaining_demo .. toctree:: :maxdepth: 2 :caption: Modules inference control learning algos/index .. toctree:: :maxdepth: 2 :caption: Agent and environment API agent env .. toctree:: :maxdepth: 1 :caption: Additional learning materials notebooks/free_energy_calculation Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` .. _paper: https://joss.theoj.org/papers/10.21105/joss.04098 ================================================ FILE: docs/inference.rst ================================================ Inference ================================= The ``inference.py`` module contains the functions for performing inference of discrete hidden states (categorical distributions) in POMDP generative models. .. automodule:: pymdp.inference :members: ================================================ FILE: docs/installation.rst ================================================ Installation ================================= We recommend installing ``pymdp`` using the package installer pip_, which will install the package locally as well as its dependencies. This can also be done in a virtual environment (e.g. one created using ``venv`` or ``conda``). When pip installing ``pymdp``, use the full package name: ``inferactively-pymdp``: .. code-block:: console (.venv) $ pip install inferactively-pymdp .. _pip: https://pip.pypa.io/en/stable/ ================================================ FILE: docs/learning.rst ================================================ Learning ================================= The ``learning.py`` module contains the functions for updating parameters of Dirichlet posteriors (that paramaterise categorical priors and likelihoods) in POMDP generative models. .. automodule:: pymdp.learning :members: ================================================ FILE: docs/make.bat ================================================ @ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.https://www.sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd ================================================ FILE: docs/notebooks/active_inference_from_scratch.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "id": "Lggo6pjkdPhS" }, "source": [ "# Tutorial 1: Active inference from scratch\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/active_inference_from_scratch.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This tutorial guides you through the construction of an active inference agent \"from scratch\" in a simple grid-world environment. This tutorial is designed to walk you through the various mathematical operations required for running active inference in discrete state spaces, as well as introduce you to the way discrete probability distributions are represented in `pymdp` (through the use of numpy vectors and matrices). We also show you how to compute the expected free energy in terms of risk and ambiguity, and how to use it to plan sequences of actions.\n", "\n", "By the end of this tutorial, you should be able to write simple active inference models from scratch using the main components of any POMDP generative model: the `A`, `B`, `C`, and `D` arrays, as well as be able to write the active inference loop for an agent engaged in a perception-action exchange with its environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "hk0kXw1RRmTf" }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "id": "iSS6oO3RWrwp" }, "source": [ "### Define some auxiliary functions\n", "\n", "Here are some plotting functions that will come in handy throughout the tutorial." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "Y0QiIF8SWxot" }, "outputs": [], "source": [ "def plot_likelihood(matrix, xlabels = list(range(9)), ylabels = list(range(9)), title_str = \"Likelihood distribution (A)\"):\n", " \"\"\"\n", " Plots a 2-D likelihood matrix as a heatmap\n", " \"\"\"\n", "\n", " if not np.isclose(matrix.sum(axis=0), 1.0).all():\n", " raise ValueError(\"Distribution not column-normalized! Please normalize (ensure matrix.sum(axis=0) == 1.0 for all columns)\")\n", " \n", " plt.figure(figsize = (6,6))\n", " sns.heatmap(matrix, xticklabels = xlabels, yticklabels = ylabels, cmap = 'gray', cbar = False, vmin = 0.0, vmax = 1.0)\n", " plt.title(title_str)\n", " plt.show()\n", "\n", "def plot_grid(grid_locations, num_x = 3, num_y = 3 ):\n", " \"\"\"\n", " Plots the spatial coordinates of GridWorld as a heatmap, with each (X, Y) coordinate \n", " labeled with its linear index (its `state id`)\n", " \"\"\"\n", "\n", " grid_heatmap = np.zeros((num_x, num_y))\n", " for linear_idx, location in enumerate(grid_locations):\n", " y, x = location\n", " grid_heatmap[y, x] = linear_idx\n", " sns.set(font_scale=1.5)\n", " sns.heatmap(grid_heatmap, annot=True, cbar = False, fmt='.0f', cmap='crest')\n", "\n", "def plot_point_on_grid(state_vector, grid_locations):\n", " \"\"\"\n", " Plots the current location of the agent on the grid world\n", " \"\"\"\n", " state_index = np.where(state_vector)[0][0]\n", " y, x = grid_locations[state_index]\n", " grid_heatmap = np.zeros((3,3))\n", " grid_heatmap[y,x] = 1.0\n", " sns.heatmap(grid_heatmap, cbar = False, fmt='.0f')\n", "\n", "def plot_beliefs(belief_dist, title_str=\"\"):\n", " \"\"\"\n", " Plot a categorical distribution or belief distribution, stored in the 1-D numpy vector `belief_dist`\n", " \"\"\"\n", "\n", " if not np.isclose(belief_dist.sum(), 1.0):\n", " raise ValueError(\"Distribution not normalized! Please normalize\")\n", "\n", " plt.grid(zorder=0)\n", " plt.bar(range(belief_dist.shape[0]), belief_dist, color='r', zorder=3)\n", " plt.xticks(range(belief_dist.shape[0]))\n", " plt.title(title_str)\n", " plt.show()\n" ] }, { "cell_type": "markdown", "metadata": { "id": "5RsP7hVidcfn" }, "source": [ "## **The Basics: categorical distributions**\n", "\n", "Let's start by creating a simple categorical distribution $P(x)$. We will represent this distribution numerically with a 1-D `numpy` array (i.e. a `numpy.ndarray` where `ndim == 1`). The discrete entries of this vector can be thought of as the probabilities of seeing each of the $K$ alternative outcomes (the support of the distribution), if we were to sample once from the distribution. We can write the distribution as a vector of probabilities, follows:\n", "\n", "\n", "$$\n", "P(x) = \\begin{bmatrix} P(x = 0) \\\\\\ P(x = 1)\\\\\\ \\vdots \\\\\\ P(x = K) \\end{bmatrix}\n", "$$ \n", "\n", "We can use `numpy` and the `norm_dist` function from `utils` library of `pymdp` to quickly create a random categorical distribution.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from pymdp import utils" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "P0RZ91Xb34GY", "outputId": "2a120bcb-82ca-4e6b-8146-a82eb42e6fcd" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.16880278]\n", " [0.51728256]\n", " [0.31391466]]\n", "Integral of the distribution: 1.0\n" ] } ], "source": [ "my_categorical = np.random.rand(3)\n", "# my_categorical = np.array([0.5, 0.3, 0.8]) # could also just write in your own numbers\n", "my_categorical = utils.norm_dist(my_categorical) # normalizes the distribution so it integrates to 1.0\n", "\n", "print(my_categorical.reshape(-1,1)) # we reshape it to display it like a column vector\n", "print(f'Integral of the distribution: {round(my_categorical.sum(), 2)}')" ] }, { "cell_type": "markdown", "metadata": { "id": "uJmzJ7tFdptc" }, "source": [ " We can sample a discrete outcome from this distribution using the `sample()` function from the `utils` module" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1LvlfKJ54ibe", "outputId": "491c96b5-4667-4f8c-8adb-0acf8f0fd5b8" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sampled outcome: 1\n" ] } ], "source": [ "sampled_outcome = utils.sample(my_categorical)\n", "print(f'Sampled outcome: {sampled_outcome}')" ] }, { "cell_type": "markdown", "metadata": { "id": "x5co79ug4UVy" }, "source": [ "Now plot the beliefs using our `plot_beliefs()` function that we defined in the beginning. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "13yT2uB_dzFc" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(my_categorical, title_str = \"A random (unconditional) Categorical distribution\")" ] }, { "cell_type": "markdown", "metadata": { "id": "vfDpOZ25dzpG" }, "source": [ "Now let's move onto _conditional_ categorical distributions or likelihoods, i.e. how we represent the distribution of one discrete random variable X, conditioned on the settings of another discrete random variable Y.\n", "\n", "We would write these mathematically as:\n", "\n", "\n", "$$ \\begin{align}\n", "P(X | Y)\n", "\\end{align}\n", "$$\n", "\n", "And can represent them using 2-D `numpy.ndarrays` i.e. matrices" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_PZ8VMWc46kk", "outputId": "55e3edb7-8491-4a76-a751-d41a10bda960" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.089 0.739 0.145 0.399]\n", " [0.772 0.201 0.026 0.578]\n", " [0.181 0.253 0.788 0.844]]\n" ] } ], "source": [ "# initialize it with random numbers\n", "p_x_given_y = np.random.rand(3, 4)\n", "print(p_x_given_y.round(3))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "G8HyWdgE48Ts", "outputId": "c5f3fb1f-b23a-4f8d-a62b-9f7968f08bb1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.086 0.619 0.151 0.219]\n", " [0.741 0.168 0.027 0.318]\n", " [0.174 0.212 0.821 0.463]]\n" ] } ], "source": [ "# normalize it\n", "p_x_given_y = utils.norm_dist(p_x_given_y)\n", "print(p_x_given_y.round(3))" ] }, { "cell_type": "markdown", "metadata": { "id": "2doBWPTW5Lix" }, "source": [ "Now print the first column (i.e. $P(X | Y = 0)$) and show that it's a proper categorical distribution" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "9mtgjyb1d7ht" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.08555937]\n", " [0.74093812]\n", " [0.1735025 ]]\n", "Integral of P(X|Y=0): 0.9999999999999999\n" ] } ], "source": [ "print(p_x_given_y[:,0].reshape(-1,1))\n", "print(f'Integral of P(X|Y=0): {p_x_given_y[:,0].sum()}')" ] }, { "cell_type": "markdown", "metadata": { "id": "fqsar3k5d8lm" }, "source": [ "So column `i` of the matrix `p_x_given_y` represents the conditional probability of $X$, given the `i`-th level of the random variable $Y$, i.e. $P(X | Y = i)$\n", "\n", "Next: taking expectations of random variables using matrix-vector products" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "XKkJuevmd-7H" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.75]\n", " [0.25]]\n", "[[0.6 0.5 ]\n", " [0.15 0.41]\n", " [0.25 0.09]]\n" ] } ], "source": [ "\"\"\" Create a P(Y) and P(X|Y) using the same numbers from the slides \"\"\"\n", "\n", "p_y = np.array([0.75, 0.25]) # this is already normalized - you don't need to `utils.norm_dist()` it!\n", "\n", "# the columns here are already normalized - you don't need to `utils.norm_dist()` it!\n", "p_x_given_y = np.array([[0.6, 0.5],\n", " [0.15, 0.41], \n", " [0.25, 0.09]])\n", "\n", "print(p_y.round(3).reshape(-1,1))\n", "print(p_x_given_y.round(3))" ] }, { "cell_type": "markdown", "metadata": { "id": "iGFLbNSteN5h" }, "source": [ "Calculate expected value of $X$, given our current _belief_ about $Y$, i.e. $P(Y)$ using a simple matrix-vector product, of the form $\\mathbf{A}\\mathbf{x}$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "id": "JMUFrn0FeOMY" }, "outputs": [], "source": [ "\"\"\" Calculate the expectation using numpy's dot product functionality \"\"\"\n", "\n", "# first version of the dot product (using the method of a numpy array)\n", "E_x_wrt_y = p_x_given_y.dot(p_y)\n", "\n", "# second version of the dot product (using the function np.dot with two arguments)\n", "# E_x_wrt_y = np.dot(p_x_given_y, p_y)" ] }, { "cell_type": "markdown", "metadata": { "id": "XGzohGsF5taF" }, "source": [ "Now print it and verify the result is a proper categorical distribution (integrates to 1.0)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "aqq_fV165yqp" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.575 0.215 0.21 ]\n", "Integral: 1.0\n" ] } ], "source": [ "print(E_x_wrt_y)\n", "print(f'Integral: {E_x_wrt_y.sum().round(3)}')" ] }, { "cell_type": "markdown", "metadata": { "id": "YxwopW4heRcb" }, "source": [ "## **A simple environment: Grid-world**\n", "Now that we understand categorical distributions and how to take conditional expectations of random variables, with categorical conditional and prior distributions, let's move onto a worked example of Active Inference, so-called 'Grid-World'. \n", "\n", "Before we write down the generative model $P(o,s)$ of an active inference agent who will navigate Grid-World, let's start by establishing what exactly this environment is and how we're going to represent it mathematically." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "rZYA7vDreRo5" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]\n" ] } ], "source": [ "import itertools\n", "\n", "\"\"\" Create the grid locations in the form of a list of (Y, X) tuples -- HINT: use itertools \"\"\"\n", "grid_locations = list(itertools.product(range(3), repeat = 2))\n", "print(grid_locations)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "id": "HLr-vvmLefyb" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEACAYAAABMEua6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWfklEQVR4nO3ceVhWdcLG8ZsdZHMB3EDArbRMncq0rJxCUxQ1m1a1smVsfQfNNOdtxrrSHJ2ctmveJscltTLHxhhT3LA0l9Tc9wVBQUwRUBEUeYDn/cNyIgzB4PnJj+/nuvrnHMM7jS/Hcw66OZ1OpwAAVnA3PQAAUHWIOgBYhKgDgEWIOgBYhKgDgEWIOgBYxNP0gE83v2t6Aq5Q8kk30xPwKxzK4W3mmmpCtycUGhp4yXNcqQOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFjE0/QAG53MzNXSj9fo0O6jkqTWv4lUj0G3yT/Iz/AyVNb6T75WbuYpdR92r+kpqIDrGjZTXJtOiqwXJqecSsk+pnk7v1VKzjHT01yGK/UqdvZMgWa88R8dOXBct/XtqC6922vfpkOa9eZ8FRcVm56HSkhes1vJa3abnoEKah3SVMNu76863j6at/Nbzd+1XqEBwRrV7T5F12toep7LcKVexb5N3KrcnDw9O/FBhTatL0kKb9lQs978UltX7tONd7c1vBCXU1JSol2LN2n7wg2mp6ASHu5wh3LOntHY5XNUWFwkSVp7eK/G9hysAe1u1aRvvjC80DW4Uq9iu9YmK6pt04tBl6Tm7SLUoEld7fr2gMFlqIhiR5EWjf+Xti/YoOhO18ivrr/pSaiAOl4+iqgbqu+OHLgYdEnKPX9W+08cUcsGjQ2ucy2iXoXO5RXoZGauGkeHljnXOCpUR1NPGFiFyih2FMtRUKiuT/bQrY/FyN2dT5Ga4JyjUH9cPFPL9m8pcy7A20/FzhIDq8yo8O2XjIwMpaamKi8vT+7u7goMDFR0dLQaNWpUnftqlDMn8yVJQfXLXt0F1K2j82cLVXD2vHzr+Lh6GirIy9dbfV8bJHcPYl6TOOVUZt6pMsfDg0PUMqSJdh077PpRhlw26kuXLtW7776rlJQUOZ3OUufc3NwUGRmp+Ph49ezZs9pG1hTnzzkkSV7eZX9ZfzzmKCgi6lcxN3c3ucnN9AxUAR8PLz3VqYckaeHejYbXuE65UU9ISNArr7yiXr166cUXX1RkZKT8/S9chebl5enw4cNasmSJhg0bJofDobi4OJeMvnr98EWvvCbQC6DaeXt46n+6xqlZ3VAt2POd9mdlmJ7kMuVGffLkyXr44Yc1ZsyYS55v27atevXqpTFjxujDDz+s9VH39vGSJBUVln110VF44eGNj5+3SzcBtY2fl7fiu/ZTq5AmWpW6S/N2rjU9yaXKvXGYkZGhmJiYy36QmJgYpaenV9momio4JFCSdOZUfplzeSfz5evvI29fL1fPAmqNQB8/jbzzPrUKaaIVB3do+sYk05NcrtyoR0REaPXq1Zf9ICtWrOCBqSRffx/VDQvSsdSsMue+P5ylJpd4KwZA1fD19NLw2/srsl6YluzfrJmbvzI9yYhyb78888wzevnll5WZmakePXooOjpaAQEBkqT8/PyL99QXLFig119/3SWDr3ZtOjXX+kXblZVxUiFN60mSUnakK/voKd3ap4PZcYDFBnX8rSLrhWnZ/i2as22V6TnGlBv1Pn36yN3dXe+8844WLlwoN7fST/mcTqfCw8P15ptv6t57+bsxJOm2uI7a/s0+zRw3X116t1eRo1hrvtyixtGhuqHrNabnAVZqHFhPt0a1UX5hgdJOnVDnZmU/19al7TOwzPUu+0pjbGysYmNjlZ6erpSUFOXl5cnpdF58T71Zs2au2Flj+Af56fEx/bVk1hp9PXeDvHy8dO1N0eo+8FZ5enmYngdY6ZrQcEmSv7evnvzhNcafqy1Rd3P+/OVzF/t087smf3r8CskneT+zJjuUY/RTH7/ChG5PKDQ08JLn+LY5ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAi3iaHjDrO6fpCbhCJ7KLTU/Ar5CdXWJ6Aq5Ut18+xZU6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFiEqAOARYg6AFjE0/QAG7VvEq7BN3VRdINQnXUUanXKAc3YsFYFRQ7T01AJLUNDNOuJgZq+doMmr/rW9BxUQMIfBqp9s8Zlji/atl/PzZxvYJHrEfUq1r5JuMb1HqDkrExN37Baof6B6teuo1qFhOnl+XPlND0QFeLh5qbX4u6Rl4eH6SmohJYNG2jJjgNavH1/qeMZJ3MNLXI9ol7Fnux8u07kndHI+XNVWFwsScrMO6MXbr9LN0ZEaWP6IbMDUSGP39pJzUMamJ6BSgivHyx/H28t25WshM17TM8xhnvqVcjLw0OnC85p8d6dF4MuSTu+PyJJiq4fYmoaKqFFaIievO0WTV2z3vQUVELrhhe+CB88nm14iVlEvQo5iov1p8QEzdnyXanjLRqESrpwxY6rm4ebm8b06aH1qWlK3Fl7r/ZqolaNLlw0JR/PkST5eXuZnGMMt1+qUVhAoG5oEqGnu9yu1OwsrT2UbHoSLuOxLjerWb16GvH5fHm4c81Tk1zTqIHOFJzXq/26qXf7axXg663DWaf01qJVWrB1n+l5LkPUq0mAj49mDHxSklTgcOiDNSvk+MktGVx9moc00FNdO2vi0q+VeSZPjYODTE9CJbRqFKJAXx8F+frqpdmJCvLz1ZDbf6P3B8fJy8NDX2zabXqiS1w26sePH6/UB2zYsOEVj7GKUxqflChPd3f1u76DxvcZoPFJiVqTytX61cjdzU1j+tyjrUeOKmHrDtNzcAVmr9suD3c3zVqz9eKxL7fs1ZKXH9foPnfqP5v3qMRp//tnl4363XffreJKXGHu2cN9SEnKKzyvbw5eeK1qdcoB/eP+wfp9lzuI+lVqcOeb1CosRE/NmqNgP19JUpCvjyTJ19NTwX6+yj1XwCupV7FPv91W5tj5oiJ9sWm34u+5Va0aNtC+Y1kGlrnWZaM+d+5cDR06VIWFhXrppZfk6ckdm8oqLC7W+rRU9W/XUUG+vsotKDA9CT9za/MoeXt6auaQgWXOPdrlZj3a5WbF/X2Kvj9de953tkV23llJUh2f2vHg9LKFbtOmjaZPn64HHnhAJ06c0HPPPeeKXTVSeN16Ght7r+Zu3aiFu7eXOlfHy1slTif31a9Sby9fqSBf31LH6vvX0dh+sVq4Y7cW7tit7Lx8Q+twOQ2DAjRz6O+0YOs+vb+s9Hf/tgirL0lKzzltYprLVejxfosWLTR8+HBNmTJFOTk51b2pxjp6+pTqeHurd9t28vzJmxNhAYHq2ryldhw9onMO/qqAq9HeY5nacCit1D/bjhyVJGWcOq0Nh9JKfe8Bri7Hc/MU5Oejhzq3U4CP98XjTeoG6r6br9PaA2nKOnPW4ELXqfC9lIceekitWrWqzi01XonTqQ/WrNDIu3pqYt/79dWBPQry8VPc9e1V4pQ+WLPC9ETAWn+et1yTh/TX5y8+os/Wb1eAj7ceva2jiktK9Od5SabnuUyFo+7h4aFOnTpV5xYrfH1gr4qKi3V/h5v0+y53qMBRpK0ZaZrx3VplnD5leh5grWU7k/X7aV/oubs765XeFz731h1M18TEVUrJrD13GNycTrPv+PT68B2TPz1+hRPZJaYn4FfI5vevxtrwylCFhgZe8hzfMgcAFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGARog4AFiHqAGART9MDdq85Z3oCrpBfJr93NVlAZr7pCbhSr/zyKa7UAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALOJpeoCN6gf6aeT93RTTsZV8vT2189AxTfjXCm05eNT0NJSjacO6Wj5jeLk/5tGR07Rh+yHXDEKltW0TrvgXe6t9+0iVFDu1cfNBTXr7Sx06fML0NJch6lXM39dbc/93kMLqBmjqku90Or9Aj8XcqNmvPKK+r32k/RlZpifiF+ScytfLEz8vc9zX20uvPher7FP52ptyzMAyVERUZKimTX5WBQUOfTh5mSTp0cF3asa0F/S7ByfpRFau4YWuQdSr2LO9O6t5owZ6cPwn2rAvXZK0YP0erXrrWT3Tu7OGT15geCF+ybnzDn351fYyx0cP7SVPDw+9POHfys0rMLAMFTHokTvk7++rx5/6P+3dlyFJWv9dsj77OF6DB92hv71TOz73iHoV+93t7fTVtuSLQZekE6fzNe6zr+QoLja4DFeidVSYBvW9RV8kbdGmXYdNz0E5wsMbKOdk3sWgS9Ku3ek6eTJfrVo2NrjMtXhQWoUiQoLVuH6QVu08dPFYHR8vSdKs5Zv12YpthpbhSsU/HqOCQofenbHc9BRcRlraCQUH1VG9uv4XjwUF+Skw0FdZteTWi1TBqO/du1fLli1TamrqJc+fPHlSX375ZZUOq4miGtWXJGXn5uuPD/1WO/4xTHv+OUIr//qM7u7Q0vA6VFbr6Ia6q/O1mrNwo07k5Jmeg8uYNuNrHc88pYnjB6l1q8Zq1bKRJo4fLIejWJ/MXm16nsuUe/slPz9f8fHxWr16tZxOp9zc3NS9e3e98cYbCg4Ovvjj0tLSNHLkSMXFxVX74KtZUB0fSdJL992houISvf5xkopLnBoae4v+GX+fBv91jtbsOmR2JCrs4d43q6i4WB/PX2d6Cirg2LFTmjJtuUaPHKB/zxkhSSoqKtZLI2eWuiVju3Kv1N9//31t375dkyZNUkJCgp5//nmtXLlSgwYNUlYWb3H8nLfnha+RQXV8NeCNWfp89Q59sXanHnjzY+WePa9R93czOxAV5uPtqb53tddX6/bpaOZp03NQAS8821N//t/7tXVbqkb98WON/tOn2rkrXW9NGKw772hrep7LlBv15cuXKz4+XrGxsbr22mv1wgsvaObMmTp+/Liefvpp5eXxR9KfOldYKElavHGfcs/+9y2J3LPntWzzAbWLanTxHjuubre0j5Z/HR8tWbXL9BRUQGCArx5/tJt27krTU8/8Q4mLt2jBwk0a8vTfdTDluF579X55eXmYnukS5UY9KytLUVFRpY61b99eH3zwgVJSUvTiiy+qqKioOvfVKMd+uO+afeZsmXPZuflyd3eTv6+3q2fhCtx5c2udL3RoxYb9pqegApo1C5WPj5cWLd6ikhLnxeNFRSVauGizQkKCFB0VZnCh65Qb9YiICK1bV/Z+4o033qjx48dr3bp1GjVqFGH/wb4jJ1RQWKTWTUPKnIsIrauCQoeyc8sGH1efjm2baeeBo8o/e970FFSAw3GhQe4eZZPm4X7hmLt77XjZr9z/yocfflhTpkzR2LFjtWXLllLnYmNjNXLkSC1cuFCjRo2q1pE1xblCh5K2HNBdHVqq1U/CHhESrJiOrbR08wGVOJ3lfARcDTw93NWyWaj2JH9vegoqKPngMR3PPK1+cTfL2/u/7394e3sqrs+NyjmZp+SDteP3s9y3Xx566CGdOXNGU6dOlZubmzp27Fjq/JAhQxQQEKBx48ZV68iaZPycr9W5TTN9NvoRTV+yUY7iYg3pcZPOOxyaOHel6XmogMZhwfL29tTREzwgrSlKSpx6c8I8/W3iY5o96w+al7BBHu5u6t+vk6KjwvTHP81WUVGJ6Zku4eZ0VuzSMS8vTwEBAZc8l5OTo2+++Ub9+/ev9IDIR8dX+t+52kWE1tXoB7up63XRcnOTvtt/RG9+9pWSj2abnlal/DLPmZ5QLdq1bqq57w3VmPfma07iRtNzqo1XZr7pCVWu080t9czT3XXddRGSpD17M/TPqUlas3af4WVV66slryk0NPCS5yoc9epiY9RrC1ujXlvYGPXaoryo144nBwBQSxB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALAIUQcAixB1ALCIm9PpdJoeAQCoGlypA4BFiDoAWISoA4BFiDoAWISoA4BFiDoAWISoA4BFiDoAWISoA4BFiHo1WbBggXr37q0bbrhBvXr1UkJCgulJqKQ9e/bouuuu07Fjx0xPQQWVlJRo9uzZiouLU8eOHRUTE6Px48crLy/P9DSX8TQ9wEaJiYkaMWKEHnvsMXXt2lVJSUkaNWqUfH191bNnT9PzUAEHDx7U0KFDVVRUZHoKKmHKlCl655139OSTT6pLly5KTU3Ve++9p+TkZE2dOtX0PJfg736pBt27d9f111+vt99+++Kx+Ph47du3T4sWLTK4DJdTVFSkOXPmaNKkSfLy8tKpU6e0cuVKNWrUyPQ0XIbT6dQtt9yi3r17a8yYMRePJyYmatiwYUpISFCbNm0MLnQNbr9UsfT0dKWlpalHjx6ljt9zzz1KSUlRenq6oWWoiE2bNumtt97SE088oREjRpieg0rIz89X37591adPn1LHmzdvLklKS0szMcvluP1SxVJSUiRJ0dHRpY5HRkZKklJTUxUREeHyXaiYFi1aKCkpSQ0aNNC8efNMz0ElBAQE6NVXXy1zPCkpSZLUsmVLV08ygqhXsTNnzki68D/YT/n7+0tSrXpgUxOFhISYnoAqtG3bNk2ePFkxMTFq0aKF6Tkuwe2XKna5RxTu7vySA66wadMmPfXUUwoPD9fYsWNNz3EZClPFAgMDJV24v/dTP16h/3geQPVJTEzUkCFD1LhxY3300UeqV6+e6UkuQ9Sr2I/30n/+UObw4cOlzgOoHtOnT9fw4cPVoUMHffLJJwoLCzM9yaWIehWLjIxUeHi4Fi9eXOr40qVLFRUVpSZNmhhaBthv7ty5+stf/qJevXppypQptfJPxjworQbPP/+8Ro8ereDgYHXr1k3Lly/XokWLSr23DqBqZWdna9y4cWratKkGDhyo3bt3lzrfrFkz1a9f39A61yHq1WDAgAEqLCzUtGnTNHfuXEVERGjChAmKjY01PQ2w1qpVq3Tu3DllZGRo4MCBZc5PnDhR/fr1M7DMtfiOUgCwCPfUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAiRB0ALELUAcAi/w9cq0DTj3GVIAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_grid(grid_locations)" ] }, { "cell_type": "markdown", "metadata": { "id": "PQ1Rm_w23sLO" }, "source": [ "## **Building the generative model**: $\\mathbf{A}$, $\\mathbf{B}$, $\\mathbf{C}$, and $\\mathbf{D}$" ] }, { "cell_type": "markdown", "metadata": { "id": "0q32yTQEeiqw" }, "source": [ "### 1. The **A** matrix or $P(o\\mid s)$. \n", "\n", "---\n", "\n", "The generative model's \"prior beliefs\" about how hidden states relate to observations" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uRUbpndA61Lg", "outputId": "e02d2149-884c-48a4-d2b3-a4151ec82a07" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dimensionality of hidden states: 9\n", "Dimensionality of observations: 9\n" ] } ], "source": [ "\"\"\" Create variables for the storing the dimensionalities of the hidden states and the observations \"\"\"\n", "\n", "n_states = len(grid_locations)\n", "n_observations = len(grid_locations)\n", "\n", "print(f'Dimensionality of hidden states: {n_states}')\n", "print(f'Dimensionality of observations: {n_observations}')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "id": "3QLSmiYu67j4" }, "outputs": [], "source": [ "\"\"\" Create the A matrix \"\"\"\n", "\n", "A = np.zeros( (n_states, n_observations) )" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "k-i2_Uxc6_QY" }, "outputs": [], "source": [ "\"\"\" Create an umambiguous or 'noise-less' mapping between hidden states and observations \"\"\"\n", "\n", "np.fill_diagonal(A, 1.0)\n", "\n", "# alternative:\n", "# A = np.eye(n_observations, n_states)" ] }, { "cell_type": "markdown", "metadata": { "id": "DuU1UHLTfAHo" }, "source": [ "Likelihood matrices show relationships between indices of the state space, which are indexed linearly. Remember the (Y, X) coordinates of the grid world don't necessarily neatly map onto to the locations in the matrix here, which has 'unwrapped' the Grid World's (Y, X) locations into columns/rows." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "id": "HdmHQ2l-fKhR" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_likelihood(A, title_str = \"A matrix or $P(o|s)$\")" ] }, { "cell_type": "markdown", "metadata": { "id": "xZx08e6YfL7r" }, "source": [ "How could we introduce uncertainty into this A matrix? I.e. how do we introduce ambiguity or uncertainty into the agent's model of the world? " ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "id": "OQycm296fCZN" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Remind yourself of the mapping between linear indices (0 through 8) and grid locations (Y, X) \"\"\"\n", "plot_grid(grid_locations)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "MboJWmdqfRX0" }, "outputs": [], "source": [ "A_noisy = A.copy()\n", "\n", "# this line says: the probability of seeing yourself in location 0, given you're in location 0, is 1/3, AKA P(o == 0 | s == 0) = 0.3333....\n", "A_noisy[0,0] = 1 / 3.0 # corresponds to location (0,0)\n", "\n", "# this line says: the probability of seeing yourself in location 1, given you're in location 0, is 1/3, AKA P(o == 1 | s == 0) = 0.3333....\n", "A_noisy[1,0] = 1 / 3.0 # corresponds to one step to the right from (0, 1)\n", "\n", "# this line says: the probability of seeing yourself in location 3, given you're in location 0, is 1/3, AKA P(o == 3 | s == 0) = 0.3333....\n", "A_noisy[3,0] = 1 / 3.0 # corresponds to one step down from (1, 0)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "7hh5dxG-fRva" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAGBCAYAAACaZe2qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1J0lEQVR4nO3dd1gUV9sG8HvBGlHErgTLS1xQEEFEo1FQxC7GigWwJkqsiA2NJTZQYy8xEo3dRIhKLESU2KNoJNhbjEYRCwiigAYQzveH7+7HUpYDAru+uX/XtZfu2ZnZZ4fZvefMnJ1VCCEEiIiIJBjougAiInp/MDSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhImt6HhoWFBXx9fdX3nZ2d4enpqb4vhMDXX3+N5s2bw9bWFjt27ICnpyecnZ0LrYb8LC8qKgoWFhawsrJCbGxsodVQGOLi4vDq1as8p/P19YWFhUUxVKRfzy1LX2pMTU3F06dP1ff37NkDCwsLnDt3Tif1+Pv7Y8aMGRptO3fuRKdOnWBjYwNXV1ccPHhQenl5zRsVFYXmzZtrrIPcnDt3DhYWFtizZ4/08+dEtY737Nmj8X9AfrvQl+0HePt5qvpsy/x/bfQ+NLKaPn06vLy81PePHz+ODRs2wNbWFl9++SVatGgBLy8vTJ8+XSf17d+/H2XLlsWbN2+wb98+ndSQkxMnTqBTp06Ij4/Pc9p+/fph8eLFxVAVFVR0dDRcXV3x22+/qdscHBywePFimJubF3s9N2/eRGBgIMaMGaNu27hxI+bMmQMLCwtMnz4d1apVg4+PD0JCQvJcnsy8ZmZm6NSpE/z8/PJcnrm5ORYvXgwHB4eCvUBSK6HrAvLLxcVF4/6tW7cAAD4+Pur0/s9//lPsdakcOHAAH3/8MaKjoxEcHIzhw4frrJbMLl++jJcvX0pNa2dnBzs7uyKuiN7Fw4cP8ffff2u0mZmZwczMTCf1+Pn5wdXVFTVq1AAAvHz5EmvWrEG3bt2wdOlSAICbmxs8PT2xePFidOzYEYaGhjkuKz/zjhgxAu3bt8eFCxfQtGnTXOurUqUKPv3003d+nWXKlNH4N+v/3zdlypSB6vvdsq/jvetpZJWWlgYAKFeunI4rAa5fv46//voLTZs2haOjI27fvo0rV67ouiyiInXz5k2cO3cOrq6u6rajR4/i1atXGDBggLrNwMAAAwcOxOPHjxEZGZnr8vIzr6mpKVq0aIHNmzcX7ovKRd26dQEAtWvXVv9f9e/7qE6dOqhTp062/2sjFRrOzs6YO3cugoKC0LFjR9jY2KB37964fPkyYmNjMX78eNjZ2aF169ZYtmwZMjIyNOYPCwtD//79YWNjg6ZNm8LLyws3b97M9jw7duxQL79Pnz74448/cqxFdU7D2dkZa9asAQC0a9dOfTwup3MQd+7cwejRo9G0aVM0btwY/fv3x6lTp7It/8yZM+jfvz9sbW3h4uKCoKAgmVUE4O2hKQBo1qwZ2rdvDwBSx1A9PT0xcuRIhIWFoXv37mjUqBG6du2KEydOICkpCbNmzYKDgwNatGiBWbNm4Z9//lHPK4TADz/8gD59+sDOzg6NGjVCp06dEBAQoN6D8PX11VhPqvXn6emJ4cOHY/ny5bCzs0OLFi1w69YtjWOuMTExaNasGZydnfH69WuN12phYaHeE8zKz88PlpaWSEhIULfdvn0bFhYWGocXAWDBggWwt7dX7wAAwJUrV+Dp6QkbGxt88skn8PPzQ0pKisZ8T548wZQpU/Dxxx+jUaNG6NGjR7ZDgr6+vujUqRN27NgBBwcHODg44OTJk9Lzy4qOjsbkyZPVy+revTsCAwOzTff06VNMnz4drVq1gp2dHXr37o2wsDCNac6ePYvPPvsMzZs3h5WVFVq3bo1Zs2ape4p79uzBoEGDAADTpk1T/61yOqfx+vVrLF26FM7OzrC2toazszOWLFmi8bdUzXfz5k1MnDgRDg4OsLOzw6hRo/Dw4cM8X/uOHTtgYmKCJk2aqNuuXr0KALCystKYtmHDhhqP5yS/83bq1AlHjx7F48ePc11mTuc0zp8/D3d3dzRt2hR2dnbo378/jh49musyAKBevXpQKBSoW7cu6tWrBwMDg2yhERkZid69e6NRo0bo0KFDnoGW2zmOrO25bcs5tYeFhcHCwgI7duzIttwJEyagVatWSE9Ph7m5uToozM3NpQJQ+vBUWFgYDh8+jMGDB0MIgXXr1mHs2LEoX7486tevD19fXxw+fBjr169HvXr10LNnTwBvN6i5c+fC2toaPj4+SEpKws6dOzFgwABs2bIFNjY2AIDVq1djzZo1aN26NQYNGoTLly/neWhn+vTpCA4OxpEjRzBt2jR8+OGHOU5369YtDBw4EFWqVMHIkSNRsmRJHDhwACNGjMDSpUvRpUsXAG8D4/PPP0fdunXh7e2N+Ph4LFiwAAqFAiYmJlprycjIwMGDB1GjRg00atQIAFCtWjWEhIRg2rRpKFWqlNb5r127hsjISAwaNAjly5fH+vXr4e3tjQYNGqBs2bLw8fHBhQsXsGvXLlSrVk197HjFihX49ttv0bNnT7i5uSE5ORnBwcFYunQpypUrB3d3d/Tr1w9JSUnq9VS/fn318/7xxx+IiorC5MmT8fDhQ3z00UcadVWrVg2+vr6YNm0avvnmG0ycOBGxsbGYP38+LC0tMXbs2Bxfj6OjI7Zs2YLz58+jQ4cOAKD+MIuMjIQQAgqFAgBw+vRpfPLJJyhZsqR6/sGDB6N79+7o2rUrjh8/ji1btkAIgS+//BLA2w/fvn37QggBT09PGBsb49dff8XkyZMRExODzz77TL2sx48fY926dRgzZgxiYmJga2ubr/nzEhUVBTc3N6SkpMDDwwNVq1bF4cOHMXPmTPz999+YMmUKACAhIQFubm5ISEiAu7s7zMzMcODAAYwZMwZr1qyBi4sLTp8+jc8//xxNmjTBuHHjoFAo8Ntvv2HXrl148eIFVq5cCQcHB3h5eeHbb79Fv379YG9vn2NdqampGDp0KC5evIhevXrB2toaly9fxnfffYeIiAhs3bpVY51/8cUXMDc3x4QJExAVFYUtW7YgJiYGP/30k9bXf+LECbRu3VrjcFNMTAyMjY1RtmxZjWmrVq0KAHj06FGuy8vvvM2aNUN6ejpOnz6Nvn37aq1V5e7duxg5ciQaNGiACRMmAAACAwMxatQobN++PddDXWXLltXY4b1x40a2aYYNG4b27dujV69eCAsLg7+/PxITE3N9r+RHTttySEhItnZ7e3tUrlwZhw4dgru7u3r+V69e4dixY+jTpw8MDQ0xadIk9WOZ/6+VkNC2bVthYWEhbt68qW5btGiRUCqVwtvbW92WnJwsrKyshI+PjxBCiPj4eNG4cWPRp08fkZKSop4uKipKNG7cWPTu3VsIIURcXJywtrYWo0aNEhkZGerpVq1aJZRKpZg6dapGLR4eHtmmiYqKUrd5eHiItm3batx3cXERycnJ6ra0tDQxcOBA0bJlS3VtPXv2FE5OTiIxMVE93dmzZ4VSqdRYXk5U082dO1fdNmfOHKFUKkVISIjWeT08PIRSqRRHjx5Vt23fvl0olUrh5uambsvIyBCOjo6iX79+QgghUlNTRZMmTcSECRM0lpeYmCisra3FyJEj81xPSqVSXLx4UWP+qVOnCqVSqdE2fPhwYWVlJe7cuSNGjx4trKysNLaHrFJSUkTjxo3FnDlz1G2jR48WrVu3FkqlUj1vdHS0UCqVYvfu3RrPvWnTJvV86enpon379sLJyUmjxmbNmomnT59qrB8fHx9hbW0tnj17prG8gwcPZnuNMvPnJOv68fb2FpaWluLq1asaNY8cOVJYWFiI27dvCyGEWLx4sVAqleLChQvq6f755x/h4uKifi8MHz5ctG3bVuP9IoQQbm5uws7OTn0/PDxcY70JIcTu3buFUqkU4eHhQgghdu7cmW1dCiHEd999J5RKpdi+fbvGfGPGjNGYbtasWUKpVIp79+7lui4ePHgglEql+O677zTahw0bJlq3bp1t+rS0NKFUKsWMGTNyXWZ+583IyBCNGzcWU6ZMyXWZWddXQECAUCqVIi4uTj1NfHy86NChg9i6dWuuy9FGtV0sWrRI3Zaeni4GDRokrK2tRXx8vMZ0WefLbXlZ7+e0LefUPm/ePGFpaSliYmLUbfv378/xPZ8f0uc0ateurdFVqlevHgCoD8MAwAcffIDKlSurh5qePXsWr1+/xtChQzX2tD/88EN0794dV65cQUxMDM6dO4fU1FS4ubmp9z4BaAytLajnz5/j/PnzcHJywj///IP4+HjEx8fj5cuXaN++PZ49e4YrV64gLi4O165dQ9euXWFkZKSe/+OPP5YaHnfgwIFs6yM/h6hKly6N1q1bq++r1m+7du3UbQqFAqampur1W7JkSZw5cwZz587N9pqNjIykhteWKVNG3TPSZt68eShdujRGjhyJI0eOYNy4cVrXS6lSpdC8eXOEh4cDeHsY7ffff4enpycMDAxw4cIFAMCpU6egUCjg6OioMX/Xrl3V/zcwMEDDhg3x7NkzAG97dWFhYWjatClKlCih/ps+f/4cHTp0QGpqqsaoIgAae44FmT836enpOH78OFq1aqVxOMXAwABeXl4QQqgPeRw/fhxWVlYaPYPSpUsjICAAq1atAgCsX78eu3fv1ni/5OfvmdnRo0dhZGSksacJAIMGDYKRkVG2QzGdO3fWuN+gQQMAUK/3nKgOX2Xt5YtMPcmcaHssv/Oq3hcyh9JUVCfs582bpz7cZWJigtDQ0Hf+3MncSzUwMICHhwdSU1Nx5syZd1quSm69oKzt3bp1Q0ZGBkJDQ9VtBw8ehJmZGRo3blzg55c+PFW5cmWN+6quaKVKlbK1i/8eS1f9EXMazaQaFvjo0SNER0cDeBtMmVWsWDHb8+ZXVFQUAGDbtm3Ytm1bjtM8fvxY3U3PWgPwtv7Lly/n+hypqakIDQ1FuXLlUKtWLfXrNjU1Rbly5fDbb78hJiYG1apVy3UZFStWRIkS///nUK3fnNa7yHQ1+5IlS+L48eP49ddfce/ePdy/fx8vXrwAAI3ptD2vgUHe+w41a9aEt7c35s+fD6VSKXX4xtHREXPnzkVsbCyePXuGhIQEODs748CBA7hw4QLc3d1x+vRpWFlZoUqVKhrzZn3dZcqUUZ/zeP78ORITExEWFpbtfIBK1uPbmZdXkPlz8/z5c7x69Uod8pmptnHV9h0dHZ3jOPjM8xoaGiIqKgorV67EnTt38ODBA6nvIeTk4cOHMDMz0zgEBbwNdDMzM3VdKlkPwaqCKz09PdfneP78OQBo7GgBb3cgM597U1G1aRu4UpB5jYyM1LXI6NSpE44cOYKQkBCEhISgatWqcHJyQs+ePbWOwspLxYoVs30mqka0ZV3fBZXbZ2LWdltbW9SuXRuHDh2Ch4cHEhMTcerUqXce0SkdGpk/0DLTtkegjeoDrWTJkuplZD3RCSDbSfX8Um3w7u7u2Ybrqnz00UfqN2ZOG2teNZw4cUJ9kjJzTyOzn3/+GZ9//nmuyyjI+hVCYNSoUTh27Bjs7e1hZ2eHfv36wcHBAYMHD9Zas0puwx5zouod3Lt3D7dv34alpaXW6VW9h/DwcMTFxaFy5cowNzeHg4MDQkND8ebNG5w9ezbHWrUFmepv2rFjR/Tv3z/HabIOPc38Ogsyf260BbNqu8n84ZvX+2Xjxo1YvHgx6tWrh6ZNm6JDhw5o3Lgxtm3bph5oISuv2rKGiczOQ1aqebK+R2rWrIkXL14gNTVVo9cUExMDAKhevXquyyzIvBkZGfnalkuWLIlVq1bh1q1bOHLkCE6ePIk9e/bgp59+wsSJEzFixAjpZWWm7e+b3/WbW1jn9jpzau/atSvWr1+PmJgYnD59GmlpaejWrVu+6siqSL+nYWpqCuDtSaesHzB3794F8LabqHqD/v333xrTJSUl5WvvQVsNhoaGaNmypcZjd+7cwcOHD1G2bFmYmppCoVDg/v372ZaRV7dX9Wb29fXN9mETExODOXPmYO/evVpDoyAuXLiAY8eOYdSoURg/fry6/c2bN0hISCjUMftHjhzBoUOHMGLECOzZswfTp09HYGBgrmEHvP3grVevHsLDw5GQkKDeg2vWrBm2bduGAwcOIDExEU5OTvmqpVKlSuovUGb9mz569AjXr1/PdhK1MOfPuqwPPvhAvT1ndu/ePQD/fyikVq1aePDgQbbp9u7di4iICPj6+mL16tVo3rw5vv/+e411u3LlSql6MjM1NcXFixeRlpamERCpqal4+PDhO+1Rq6h6iJlHyQFvRz4JIXDjxg2NQyGqE8faDokWZN6EhAT1e13Go0eP8OjRIzRt2hQWFhYYM2YMnjx5gsGDB2Pjxo0FDo0XL14gKSlJo+el2g5yOooB/H+YZA1JbYcFZbm6umLdunU4fvw4Tpw4AQsLC42BMAVRpN/TaNmyJUqXLo1NmzYhNTVV3f7kyRPs378fNjY2qFy5Mlq2bIkPPvgAW7ZswZs3b9TT5TRcLL+qVasGa2tr7N27V6Obn5aWhunTp2PcuHF48+YNKlWqBAcHB+zbt0/jjxUZGYlr167luvykpCQcP34cZmZmGDJkCFxcXDRuAwcOhJWVFf766y9cunTpnV9PZqo3atYRT4GBgXj9+rXGulRtmDKHrLJ68eIF5syZA6VSiXHjxmHKlCm4du0aNmzYkOe8jo6OOHv2LP744w80a9YMwNtvLisUCqxZswZVqlSROqeSWYkSJeDo6IgTJ05kG7q9cOFCjB49WuvOxrvOn5mhoSFat26N3377TWM7EULgu+++g0KhQJs2bQC8XRdXrlzRGDKalpaGjRs34urVq0hPT8fr169Rt25djcC4ceMGzp8/DwDqv6lqr1JbL9jZ2RlJSUnZ3kc7d+5EcnKyuq53UatWLQBv39OZOTk5oXTp0hqHhDMyMrBz506YmprC1tY212Xmd9709HTExsaiZs2a0nV/++23GDJkiMZnQo0aNVCtWrUC9bgy15l5tNmbN2+wZcsWfPDBB2jRokWO86hGhWUeifXkyROt32WRZW5ujoYNGyIsLAxnz559514GUMQ9DRMTE/j4+MDf3x8DBgyAq6srkpOT8cMPPyAjI0N9nRojIyNMnjwZc+bMweDBg9G5c2f8+eef2Ldvn/QenzYzZszA4MGD0bt3bwwYMAAVK1bEwYMHcenSJUycOFF9LHfq1Klwd3eHm5sb3N3d8fr1a2zevFnrcNvDhw8jJSUFvXv3zrVr2r9/f8ycORN79ux5pxNQWdnZ2cHIyAj+/v6Ijo6GsbExzp07h5CQEJQuXRrJycnqaVXHWTds2ABHR0eNE+x58fPzw7Nnz7By5UqULFkSn376KXbv3o21a9fCxcUlW2hlphp6C0B9CQcTExPUr18ft2/fRq9evQp0iHPSpEk4d+4c3N3d4e7ujlq1auH48eM4duwY+vXrl+fe1LvOn9OyPD094enpiapVq+LIkSMIDw/H0KFD1evHy8sLoaGhGDx4MDw8PFCtWjUcPHgQf/31F77//nsYGxujcePG2LNnD4yMjFCvXj38+eefCAoKUn+QJScnw9jYWL1N7tu3D0II9RD3zPr27Yu9e/di4cKFuH37NqytrXH16lXs2bMHtra20sNTtalVqxZq166dbYfIxMQEI0aMwOrVqyGEwMcff4zQ0FBERERg+fLlGodSVOeVVIeP8zMv8Pb7P69fv871Qzkn7u7u+Pnnn9VD0o2NjREeHo7z589j3LhxBV0dKFu2LFatWoXHjx+jdu3aCAkJQWRkJGbPno3y5cvnOE/nzp2xfv16TJgwAUOGDEFKSgp27NiB6tWrZ/vWf0F069YNixcvhkKh0BhgUlBF/o3wIUOGYPny5VAoFFi2bBm2bt0KOzs7BAYGanyADhw4EEuWLMHLly+xaNEi/PHHH/jmm29QoUKFd67Bzs4OP/zwA6ytrbFp0yZ8/fXXeP36NRYuXKjRDbW2tsa2bdtgZmaGNWvWICgoCGPGjEGrVq1yXfb+/fthYGCQ45tWpVu3bjAyMkJISEiO520KqkqVKggICICZmRnWrVuHZcuW4dGjR1i2bBkGDhyIO3fuqHtNXbt2RcuWLbFnzx4sWbJE+jlOnjyJ4OBg9OnTR2PUz+zZsyGEwPTp07WeKG3WrBnKli2LihUrQqlUqttVAZJ11JSs2rVrIzAwEG3atEFgYCD8/PwQFRWFadOmYfbs2UU+f07LcnJywo8//oivv/4aiYmJWLBggcbFNitXroxdu3ahbdu2+PHHH7FkyRIIIfD999+rP/BWrlwJZ2dn7N69G35+fjhz5gxGjBih/pupRqOZm5vD09MTV69ehZ+fX47feyhVqhQ2b96MoUOH4syZM/Dz88P58+cxcuRIbNmyJds5jYJydHREZGRktl7P6NGjMWXKFERGRmLevHmIiYnBihUrso3S8vPzy3b9KNl5ASAiIgIGBgZa36dZWVhYYNOmTahTpw6+//57zJs3D3/++SdmzpyJUaNG5ePVa6pQoQLWrl2LM2fOwN/fHwkJCfj6668xcODAXOextLTEihUrUK5cOSxevBiBgYH4/PPP4ebmVuA6MuvWrRsMDAxga2ubr0N4uVGIghyvICL6rxs3bqBHjx7YtGlTtnNEMhITE9GnTx+NoaH50b9/f1SpUkV91QPSFBMTAycnJ8ycOVNreMl67689RUS61aBBA7Rs2RJ79+4t0Pw7d+4s8GHb+/fvIzIyEsOGDSvQ/P8GgYGBKFWqVKEcmgIYGkRUCCZMmIDQ0NB8fcFOxcjISH15mPwKCAhA27ZtNa57RW8tXboUXl5eWLt2Lfr27QtjY+NCWS5Dg4jemY2NDdzc3LB27dp8z+vu7l6gD7QHDx7gyJEj+T4H9W/x6tUrhIeHw8XFBT4+PoW2XJ7TICIiaexpEBGRNJ3/cl9hDSsrTPn5DQ0iouIWE/MSVavm/L2PosaeBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTTpCxZGR0fj3r17SEpKgoGBAcqXL4969eqhRo0aRVkfERHpkTxD4/Dhw1i5ciXu3r2LrD+9oVAoUKdOHXh7e6NTp05FViQREekHraERHBwMX19fdO7cGWPHjkWdOnVQrlw5AEBSUhLu37+P0NBQTJgwAWlpaXB1dS2WoomISDe0/nJfly5d0Lx58zx/TnH27NmIiIjAgQMH8l0Af0+DiCh/9Pb3NKKjo+Hi4pLnQlxcXBAVFVVoRRERkX7SGhpmZmY4ffp0ngs5fvw4T4gTEf0LaD2n4eXlhcmTJyMmJgYdOnRAvXr1YGRkBABITk5Wn9M4cOAA5syZUywFExGR7mgNjW7dusHAwAArVqzAwYMHoVAoNB4XQuDDDz+En58fevbsWaSFEhGR7uU55LZLly7o0qULoqKicPfuXSQlJUEIof6eRu3atYujTiIi0gPSX+4zMzODmZlZUdZCRER6jpcRISIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiadJXuf030fKz6TqT9bdMiIh0gT0NIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiIml5/gjT06dP87XA6tWrF7gYIiLSb3mGRrt27ZCeni69wBs3brxTQUREpL/yDI2goCCMHDkSqampmDhxIkqU4C/EEhH9W+WZAA0aNMCmTZvg5uaG2NhYjBo1qjjqIiIiPSR1Itzc3Bw+Pj7YsGED4uPji7omIiLSU9LHmvr374/69esXZS1ERKTnpEPD0NAQzZo1K8paiIhIz/F7GkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJE0hhBA6LUCh0OXTvzd0/GfKEf92RLoRE/MSVauW18lzs6dBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkTSo0bt68iSNHjuDevXs5Pv78+XPs37+/UAsjIiL9o/Uqt8nJyfD29sbp06chhIBCoUD79u0xb948GBsbq6e7dOkS+vfvjxs3buS/AF4pVQqvcktEKnp7ldvVq1fj8uXLWLp0KYKDgzF69GicOHECHh4eePbsWXHVSEREekJraPz666/w9vZGly5dYGlpiTFjxmDr1q14+vQpPv/8cyQlJRVXnUREpAe0hsazZ89Qt25djbbGjRtj3bp1uHv3LsaOHYs3b94UZX1ERKRHtIaGmZkZwsPDs7Xb29vD398f4eHhmDp1KoODiOhfooS2BwcMGID58+cjOTkZXbt2hZ2dnfqxLl264OnTp1i0aBEuXbpU5IUSEZHuaQ2N/v37IzExERs3boRCodAIDQAYOnQojIyMsGDBgiItkoiI9IPWIbeZJSUlwcjIKMfH4uPjcfLkSfTo0SP/BXDYphQOuSUiFV0OuZUOjSIrgB88UhgaRKSit9/TICIiyoyhQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJE3r72kUh759++q6hGyCgoJ0XUI2+nhFWV55l+jfhz0NIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQW+YOHFixcRExMDpVKJunXrFmJJRESkr/IMjUOHDmH79u1ISUlBv3790L17d4wYMQLnzp2DEAIKhQJ9+/bF3Llzi6NeIiLSIa2hceDAAUyaNAkODg6oUKECZs2ahbCwMFy/fh3+/v6wsrLC6dOnsXz5ctStWxfDhg0rrrqJiEgHtIbGd999h2HDhmHKlCkAgICAACxfvhwzZsxAjx49AAD169dHcnIydu3axdAgIvofp/VE+N9//w1HR0f1/d69e0MIAQsLC43p7O3t8eTJk6KpkIiI9IbW0KhRowYuX76svl+5cmWsWrUKNWvW1Jju6tWrqFWrVtFUSEREekPr4akBAwbg66+/RmxsLEaMGIGqVauiQ4cO6sdjY2Oxa9cuBAQEYPz48UVeLBER6ZbWnsaQIUMwduxY7Nu3DwkJCdkeP3PmDNauXYu+fftiyJAhRVQiERHpC4UQQuQ10Zs3b2BoaAiFQqHR/uLFC2RkZMDExKTABbi5uRV43qISFBSk6xLeCxKbTrHLuo0S/S+KiXmJqlXL6+S5pb7cV6JEzpMZGxsXajFERKTfeBkRIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSJnVp9CItgJeypkKkj5drB7idU+HS5aXR2dMgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSVuDQCA4OxosXLwqzFiIi0nMFCo309HRMmzYN0dHRhV0PERHpsVwvjd6xY0etM96/fx81a9ZEqVKlAAChoaEFK4CXjKZCxEuj07+BLi+NXiK3B+rXr4+wsDDUrFkTH3/8scZjQgjcv38fFhYWMDExKfIiiYhITwgtgoODRbNmzYSPj494/vy5uj0tLU1YWFiIq1evaptdCgDeeCu0m77S9Xrh7X/rFhPzUmfbstZzGp9++in279+PxMREdOvWDWFhYQDY1SYi+rfK80R4tWrVEBAQgPHjx2Pq1KmYOHEiEhISiqE0IiLSN9Kjp/r27Yt9+/YhLi4Orq6u7G0QEf0L5WvIrampKTZv3oxRo0ahadOmKFeuXFHVRUREeijXIbfFVgB7LFSIdLw554rbORUmXQ655WVEiIhIGkODiIikMTSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhIGkODiIikMTSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhIWq6/EU70PtLXq8nq49V39XVdkX5jT4OIiKQxNIiISBpDg4iIpDE0iIhIGkODiIikMTSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhIGkODiIikMTSIiEgaQ4OIiKQV6Cq3Z8+exc2bN2FiYgJ7e3uYmZkVdl1ERKSHtIZGkyZNsHXrVlhbWwMAkpOT8cUXX+D3339XX+q5RIkS8PDwgK+vb9FXS0REOqU1NF69eoWMjAz1/UWLFuHatWtYvHgx2rRpg3/++QcHDx7E0qVLUaVKFXz22WdFXjAREelOvg5PHTp0CGPHjoWrqysAoHz58hgyZAiSkpIQGBjI0CAi+h+XrxPhaWlp6kNVmdnb2+Pp06eFVhQREemnPEPj77//RkpKCoC34XDr1q1s00RERMDU1LTwqyMiIr2iEFp+vNjGxgapqakwNDSEmZkZSpYsiYcPHyIwMBD169dHVFQUdu7ciW3btmHChAkYPnx4/gvg7xTTvwB/I5wKU0zMS1StWl4nz631nEZkZCTu3buHmzdv4saNG7h58yaeP3+OFy9eAADCw8OxZcsWDBw4EEOGDCmOeomISIe09jTyEh8fD4VCARMTk4IXwL0d+hdgT4MKk972NPJSqVKlwqqDiIjeA7yMCBERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSXunq9wSkRx9vAw5L9dOBcGeBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSpCxampKSgdOnS6vsPHz7E7du3oVAoYGtrCxMTkyIrkIiI9IfW0Hj16hVmzpyJK1eu4PDhw0hJScFXX32Fn3/+GRkZGW8XUKIEPD09MXXq1GIpmIiIdEdraCxbtgynTp2Ct7c3AMDf3x+HDh3ClClT0KpVK6SlpeHo0aP49ttvYWJighEjRhRHzUREpCtCi1atWokff/xRfd/e3l5s3rw523Tr168Xbdu21baoXAHgjTfedHDTR7peJ+/LLSbmpc7+RlpPhCcmJqJ27drq++np6bC0tMw2XaNGjRAXF6dtUURE9D9Aa2g0bNgQu3btUt9v06YNDh8+nG26PXv2wNzcvPCrIyIivaL4b5cwR7///juGDRsGOzs7DBgwABUqVICvry/s7e3h6OiI1NRUHDx4EBEREVi9ejXatWuX/wL4845EOqHlra8z/DyQExPzElWrltfJc2sNDQC4ePEilixZgoiICADZN7RatWph0qRJ6NKlS8EK4EZCpBMMjfeXXoeGyvPnz3H79m3Ex8cjLS0N5cqVQ926dd/5sBQ3EiLdYGi8v96L0CiyAriREOkEQ+P9pcvQ4GVEiIhIGkODiIikMTSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhIGkODiIikMTSIiEgaQ4OIiKQxNIiISBpDg4iIpDE0iIhIWgldF0BEuqGPV5TllXf1H3saREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0rSGRnBwMJ4/f15ctRARkZ7TGhq+vr7o3bs3rly5Ulz1EBGRHsvz8FTZsmXRv39/zJ8/H0lJScVRExER6ak8Q8PPzw9TpkzB3r174ezsjNWrVyMhIaEYSiMiIn2TZ2goFAoMHjwYoaGh6NSpEzZs2ABHR0eMHj0aBw8exOPHj4ujTiIi0gMKoeWnsiwtLREYGAgbGxt1W3x8PAIDA3H48GFcv34dCoUCZcqUQcWKFXHs2LH8F8BfxSKi/+Iv98mJiXmJqlXL6+S58/1zr5UqVYKXlxe8vLzw9OlTXL58Gbdu3UJcXFxR1EdERHrknX4jvHr16mjfvj3at29fWPUQEZEe03pOY+vWrTA3Ny+uWoiISM9pPadRLAXo4fFCItINntOQo8tzGryMCBERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSXun39MgIipM+nhFWX288m5sbKLOnps9DSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkMDSIiksbQICIiaQwNIiKSxtAgIiJpDA0iIpLG0CAiImkFvmDhnTt38Oeff8LU1BQ2NjaFWRMREempPEMjNDQUO3fuREJCAnr06IGhQ4di/vz52LFjB4QQUCgUcHJywurVq1GyZMniqJmIiHRE6+Gp/fv3Y/z48UhPT4eZmRmWLl2KadOmYffu3ZgzZw5CQkIwf/58/P7779iwYUNx1UxERLoitHB1dRULFy5U3//ll1+EpaWl2LBhg8Z0GzZsEJ07d9a2qFwB4I033njT25s+iol5qbPn1trTiIqKgqOjo/p+q1atIIRA48aNNaZr1KgRoqOjtS2KiIj+B2gNjZo1a+L06dPq+6r/X79+XWO669evo3LlykVQHhER6ROtJ8I9PT0xZ84cXLt2DeXKlcPJkyfRo0cPrFq1ChUqVECTJk0QERGBNWvWwN3dvbhqJiIiHdEaGgMGDICBgQH27t2Lly9fYt68eejatStiY2Ph6+sLhUIBIQRcXFwwZsyY4qqZiIh0RCFEwX41PTIyEo8ePUK9evXQsGHDgheghz8kT0SkUsCPyCIVG5uIqlXL6+S5CxwahVYAQ4OI9BhDQxMvI0JERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETSGBpERCSNoUFERNJ0fpVbIiJ6f7CnQURE0hgaREQkjaFBRETSGBpERCSNoUFERNIYGkREJI2hQURE0hgaREQkjaFBRETS3vvQOHDgALp27QobGxt07twZwcHBui5Jw40bN2BlZYUnT57otI6MjAz88MMPcHV1hZ2dHVxcXODv74+kpCSd1SSEwObNm9GxY0fY2Nige/fu2L9/v87qycmYMWPQvn17ndbw5s0b2NjYwMLCQuNmZ2en07oA4Pfff8eAAQPQuHFjtGrVCvPmzUNycrJOajl37ly2dZT5tnfvXp3UBQA//PADOnfuDFtbW7i6umLfvn06q+VdldB1Ae8iJCQEkyZNwuDBg9GqVSuEhYVh6tSpKFOmDDp16qTr8vDXX39h5MiRePPmja5LwYYNG7BixQoMHz4cLVq0wL1797Bq1SrcuXMHGzdu1ElN69evx6pVqzB27FjY2tri5MmTmDRpEgwNDdGlSxed1JTZzz//jCNHjqB27do6rePevXtISUnBokWLULduXXW7gYFu9/kuXryIoUOHwtnZGevWrcP9+/exbNkyxMfHY/ny5cVej5WVFXbt2qXRJoTAl19+iVevXsHJyanYawKAXbt24auvvsKwYcPQunVrnDhxApMnT0bJkiXRuXNnndT0TsR7zMXFRXh7e2u0jR8/XnTq1ElHFb2VlpYmtm/fLuzs7ESzZs2EUqkUjx8/1lk9GRkZwsHBQXz11Vca7QcPHhRKpVJcv3692GtKTU0VDg4OYu7cuRrtHh4eYsCAAcVeT1ZPnjwRDg4OwtHRUbi4uOi0ln379glLS0vx6tUrndaRlbu7u3B3dxcZGRnqtu3bt4t27drpTa2bN28WlpaW4uLFizqroV+/fsLT01OjbeDAgcLDw0NHFb2b9/bwVFRUFB48eIAOHTpotHfs2BF3795FVFSUjioDIiIisGTJEgwbNgyTJk3SWR0qycnJ6N69O7p166bR/p///AcA8ODBg2KvydDQENu2bcOIESM02kuWLImUlJRiryerGTNm4JNPPkGLFi10XQpu3LiB2rVro2zZsrouRS0+Ph4XLlzAgAEDoFAo1O3u7u4ICwvTi1pjY2OxcuVK9eEzXUlJSUG5cuU02ipWrIiEhATdFPSO3tvQuHv3LgCgXr16Gu116tQB8LZLryvm5uYICwvDmDFjYGhoqLM6VIyMjDBjxgzY29trtIeFhQEAPvroo2KvycDAABYWFqhevTqEEHj27BkCAgJw5swZ9OvXr9jrySwoKAjXrl3DzJkzdVqHyq1bt1CqVCkMHz4cdnZ2cHBwwKxZs3R6Pur27dsQQsDY2Bje3t6wtbWFvb09Zs+ejX/++UdndWW2evVqGBgYwNvbW6d1DBo0CKdOncIvv/yCpKQkHDp0CMePH8enn36q07oK6r09p5GYmAjg7QdiZqpE1+UbqkqVKjp7blmXLl1CQEAAXFxcYG5urtNaDh8+jHHjxgEA2rRpg+7du+uslujoaPj7+8Pf3x+VKlXSWR2Z3bx5E0lJSejbty+8vLxw9epVrF69Gvfu3cPWrVs19vSLS3x8PADA19cX7du3x7p163Dr1i2sWLECKSkpWLhwYbHXlFlcXByCg4MxbNgwVKhQQae1dO3aFeHh4Rrh1bNnT3z22We6K+odvLehIfL4GRBdnyTUZxEREfDy8sKHH36I+fPn67ocNGzYENu3b8etW7ewcuVKjBgxAlu2bCn2D0MhBKZPnw4nJyd07NixWJ9bm+XLl8PY2BgWFhYAAAcHB1SuXBmTJ0/GmTNn8MknnxR7TWlpaQCAJk2aYPbs2QCAFi1aQAiBRYsWYfTo0TAzMyv2ulSCgoKQkZGBQYMG6awGlS+++AKRkZGYNm0aGjZsiEuXLuGbb75RHwF437y3oVG+fHkAyDa8T9XDUD1OmkJCQuDr64u6detiw4YNMDEx0XVJMDMzg5mZGRwcHGBkZISpU6ciMjISTZo0KdY6duzYgVu3bmH//v3qEW+qnZM3b97A0NBQJ3v1zZo1y9bWpk0bAG97IboIDVWP3tHRUaO9VatWWLhwIW7duqXT0AgNDUXr1q113lv8448/cPr0afj7+6NXr14A3v49K1SogFmzZsHNzQ1KpVKnNebXe7s7rjqXkfUk7v379zUep/+3adMm+Pj4wNbWFjt27EC1atV0VktCQgKCg4Px9OlTjfaGDRsCAGJiYoq9ptDQUDx//hytWrWClZUVrKysEBwcjAcPHsDKykon4/zj4uIQFBSUbWCH6ryBrkJfNfQ3NTVVo13VA9FFuKo8ffoU169f14vhrI8ePQKAbDtATZs2BQDcuXOn2Gt6V+9taNSpUwcffvghDh06pNF++PBh1K1bF7Vq1dJRZfopKCgICxcuROfOnbFhwwad98QyMjLg6+ubbVz9b7/9BgA62fuaM2cOfvrpJ41b27ZtUaNGDfX/i5tCocCsWbOwfft2jfaQkBAYGhpmG9xQXMzNzWFqaoqQkBCN9mPHjqFEiRI6/eLhpUuXAEBn6yYz1c5rRESERvvFixcBAKampsVd0jt7bw9PAcDo0aMxbdo0GBsbo02bNvj111/xyy+/6OSLRfosLi4OCxYsgKmpKdzd3XH9+nWNx2vXrl3s3fhKlSph4MCBCAgIQJkyZdCoUSNERERg/fr16Nu3r3o4cHHK6TkrVqyIUqVKoVGjRsVeD/B2Pbm7u2Pbtm0wMjJC06ZNERERgW+//Rbu7u7q0YLFTaFQYNKkSfDx8cGkSZPQq1cvXL16FevWrYOHh4dODwvdvn0bZcuW1YsPZCsrK7i4uGDBggVITExEgwYNcPXqVaxduxaOjo46HQpcUO91aPTq1Qupqan4/vvvERQUBDMzMyxatEgvvk2sT06dOoXXr18jOjoa7u7u2R5fvHixTob/TZs2DTVr1sRPP/2E1atXo0aNGhg3bhyGDx9e7LXos6lTp6J69erYvXs3AgICUL16dYwbN07no2+6dOmCUqVKYe3atRg5ciQqV66M0aNHY+TIkTqt69mzZzofMZXZ8uXLsWbNGmzevBlxcXEwNTXFsGHDsn1H6X2hEHkNQyIiIvqv9/acBhERFT+GBhERSWNoEBGRNIYGERFJY2gQEZE0hgYREUljaBARkTSGBhERSWNoEBGRtP8Dl1qe3/97IW8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_noisy, title_str = 'modified A matrix where location (0,0) is \"blurry\"')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "id": "2duo3znv8SQp" }, "outputs": [], "source": [ "\"\"\" Let's make ake one grid location \"ambiguous\" in the sense that it could be easily confused with neighbouring locations \"\"\"\n", "my_A_noisy = A_noisy.copy()\n", "\n", "# locations 3 and 7 are the nearest neighbours to location 6\n", "my_A_noisy[3,6] = 1.0 / 3.0\n", "my_A_noisy[6,6] = 1.0 / 3.0\n", "my_A_noisy[7,6] = 1.0 / 3.0\n", "\n", "# Alternatively: you could have the probability spread among locations 3, 4, 6, and 7. This is basically saying, that whole lower-left corner of grid-world is blurry, if you're in location 6\n", "# Remember to make sure the A matrix is column normalized. So if you do it this way, with the probabilities spread among 4 perceived locations, then you'll have to make sure the probabilities sum to 1.0\n", "# my_A_noisy[3,6] = 1.0 / 4.0\n", "# my_A_noisy[4,6] = 1.0 / 4.0\n", "# my_A_noisy[6,6] = 1.0 / 4.0\n", "# my_A_noisy[7,6] = 1.0 / 4.0" ] }, { "cell_type": "markdown", "metadata": { "id": "e4eyxN618ZgW" }, "source": [ "Now plot the new A matrix, that now has two \"blurry\" locations" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "id": "CZDtd3u63Qn0" }, "outputs": [ { "data": { "image/png": "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HpWy9y6Qnj59isTERLi6ur72xqFEJD5vb2+UL18eq1atwrfffgsdHR00bdoUK1euLPLaGpVd7+01JCIiKlve22tIRERUtrxXp+zyf120KF79ABsRkWjelxNh7CEREZEQGEhERCQEBhIREQmBgUREREJgIBERkRAYSEREJAQGEhERCYGBREREQmAgERGREBhIREQkBAYSEREJgYFERERCKJGbq96+fRvXrl1DRkYGdHR0ULlyZTRs2BB16tQpieaIiKgMkDWQdu/ejYULF+Lq1asF7i6rUCjQoEEDBAUFwc3NTc5miYioDJAtkGJiYjB+/Hh07twZI0aMQIMGDVCpUiUAQEZGBm7cuIH4+HiMHj0aubm58PLykqtpIiIqA2T7xlh3d3c4Ojpi2rRpr51v2rRpSEpKwo4dO966DX4fEhHR2/vgvg/p9u3bcHV1feN8rq6uuHnzplzNEhFRGSFbIBkbGyMhIeGN8x08eJCDG4iIqADZriEFBgZi7NixuH//Pjp27IiGDRvCwMAAAJCZmam+hrRjxw5Mnz5drmaJiKiMkC2QPD09oaOjgwULFiA2NhYKhULjeUmSUL9+fcyaNQvdu3eXq1kiIiojZB327e7uDnd3d9y8eRNXr15FRkYGJElSfw7JxMREzuaIiKgMKZEPxhobG8PY2LgkFk1ERGUUbx1ERERCYCAREZEQGEhERCQEBhIREQmBgUREREJgIBERkRAYSEREJAQGEhERCYGBREREQmAgERGREBhIREQkBAYSEREJgYFERERCKJG7fX9IRPyu+le/i4qI6H3AHhIREQmBgUREREJgIBERkRAYSEREJAQGEhERCYGBREREQmAgERGREBhIREQkBAYSEREJgYFERERCYCAREZEQGEhERCQEBhIREQmBgUREREJgIBERkRAYSEREJARZv6Dv3r17bzV/7dq15WyeiIjeY7IGUvv27fHixYtiz3/+/Hk5mycioveYrIEUHR2NgIAA5OTkYMyYMdDV5TekExFR8ciaGI0bN8ZPP/2Enj174sGDBxg6dKiciyciojJM9kENZmZm+Prrr7F8+XI8evRI7sUTEVEZVSLn1Hr37o1GjRqVxKKJiKiMKpFAKleuHFq0aFESiyYiojKKn0MiIiIhMJCIiEgIDCQiIhICA4mIiITAQCIiIiEwkIiISAgMJCIiEgIDiYiI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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_likelihood(my_A_noisy, title_str = \"Noisy A matrix now with TWO ambiguous locations\")" ] }, { "cell_type": "markdown", "metadata": { "id": "VVh-pexGuwnh" }, "source": [ "### 2. The **B** matrix or $P(s_{t}\\mid s_{t-1}, u_{t-1})$.\n", "\n", "\n", "---\n", "\n", "The generative model's \"prior beliefs\" about (controllable) transitions between hidden states over time. Namely, how do hidden states at time $t$ result from hidden states at some previous time $t-1$. These transition dynamics are further conditioned on some past action $u_t$." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "id": "ihPWs7X_fVw3" }, "outputs": [], "source": [ "actions = [\"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"STAY\"]\n", "\n", "def create_B_matrix():\n", " B = np.zeros( (len(grid_locations), len(grid_locations), len(actions)) )\n", "\n", " for action_id, action_label in enumerate(actions):\n", "\n", " for curr_state, grid_location in enumerate(grid_locations):\n", "\n", " y, x = grid_location\n", "\n", " if action_label == \"UP\":\n", " next_y = y - 1 if y > 0 else y \n", " next_x = x\n", " elif action_label == \"DOWN\":\n", " next_y = y + 1 if y < 2 else y \n", " next_x = x\n", " elif action_label == \"LEFT\":\n", " next_x = x - 1 if x > 0 else x \n", " next_y = y\n", " elif action_label == \"RIGHT\":\n", " next_x = x + 1 if x < 2 else x \n", " next_y = y\n", " elif action_label == \"STAY\":\n", " next_x = x\n", " next_y = y\n", " new_location = (next_y, next_x)\n", " next_state = grid_locations.index(new_location)\n", " B[next_state, curr_state, action_id] = 1.0\n", " return B\n", "\n", "B = create_B_matrix()" ] }, { "cell_type": "markdown", "metadata": { "id": "njx3RFJS-H87" }, "source": [ "Let's now explore what it looks to \"take\" an action, using matrix-vector product of an action-conditioned \"slice\" of the $\\mathbf{B}$ array and a previous state vector" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "id": "I8wrEfF5-IR1" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Define a starting location\"\"\" \n", "starting_location = (1,0)\n", "\n", "\"\"\"get the linear index of the state\"\"\"\n", "state_index = grid_locations.index(starting_location)\n", "\n", "\"\"\" and create a state vector out of it \"\"\"\n", "starting_state = utils.onehot(state_index, n_states)\n", "\n", "plot_point_on_grid(starting_state, grid_locations)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "mX5gdrUrMHgz" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEUCAYAAADa0BodAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA20ElEQVR4nO3deVyNef8/8FcZRIdMltuNpOEuo0VJkRbZUrYhS9Fi7GYy1kjGmM2gxkxDjGWMPSZZYlSWjKw/DG4GYxlKJ+uoLJWh5Xx+f/iecztOdZ1Up2Pm9Xw8PB76XMvnfZ3rOtfr2s45BkIIASIiolIYVnUBRESk/xgWREQkiWFBRESSGBZERCSJYUFERJIYFkREJEnnYZGbm4vVq1fD19cXjo6OsLe3x6BBgxAbGwuFQvHa883KysLTp08rsNKKFR0dDSsrK9y6dUuv5v3qtNu3b4eVlRVOnjxZ5nllZGRoNZ6VlRVmzpxZ4t8V4dVagoKC0LVr1wrt4+8gNzcX2dnZqr9nzpwJKyurKqzofxQKRaW8X17eNm7dugUrKytER0dXeD8VoTz7tVfXbXnpNCxSU1MxcOBAfPvtt7CyssLUqVMxadIk1KxZE3PmzMGMGTPwOh/7OHToELy9vSv0haloPXr0QGRkJExNTau6lFI5OTkhMjISLVu2LNN0c+bMwaxZs7QaNzIyEn5+fq9Tnla2bduG3r17q7WNHz9e6/r+KS5evAgfHx/88ccfVV2KhtzcXAwZMgQ7duyo0PmOGjUKS5cuVf1tamqKyMhI9OjRo0L7qQjl2a9Vxrp9q8LmJOH58+f48MMP8ejRI2zduhWtW7dWDRsxYgQ+//xzbNq0CXZ2dggODi7TvH/77Tc8efKkokuuUK1bt1ZbZn1lZmYGMzOzMk939OhRNG3aVKtx33vvvTLPvyx+/fVXPH/+XK3N1dW1Uvt8E127dg1//vlnVZdRrEePHuHChQvo3Llzhc736NGjGDBggOrv2rVrV/r2+LrKs1+rjHWrszOLTZs2IS0tDeHh4cXuNMPCwmBiYoKffvpJVyUREZGWdBYWCQkJqF27tsblASUjIyNs2bIF8fHxqjYhBDZv3oxBgwbBwcEBtra28Pb2xsqVK1WXq2bOnIklS5YAALp164agoCDV9NevX0dISAjat2+Ptm3bwt/fH0eOHNHo+/z58wgODoaDgwPc3d0RHR2NJUuWaFy7vX37NqZPn46OHTvC1tYW/fr1w5YtW9TGmTlzJry9vRETEwMnJyc4OTnh8OHDxd5XyM3Nxbx58+Dp6Ym2bduib9++iIuLU5vfpUuX8NFHH6FTp06wtraGi4sLpk2bhnv37mnxqquTy+X46KOP4OTkhA4dOiAiIgIFBQVq4xR3z2Lv3r0YOHAgHBwc4OjoiBEjRuDMmTOq4VZWVrh9+zZOnToFKysrbN++XXUteO3atRg6dChsbGzw/vvvq8Yv7h7F8uXL4e7ujrZt2yI4OBi//fab2vCSpnu5PSgoSHXp4tX2V+9ZXL16FR9++CHat28POzs7DBkyBMnJyWrjBAUFYdSoUTh8+DB8fX1ha2uLzp07Izo6Wqt7bFJ9rFy5ElZWVrh06ZLGtF27dlU7y9Zme1bWGxUVBQcHB7i4uODq1asa846OjkZ4eDgAIDg4WOO1uXDhAoKCgmBnZwdXV1fMmzdP42zt3r17mDFjhur90L9/f+zatUvyNRFCYMmSJejZsydsbW3RqVMnTJ8+HXfv3gUAnDx5Et26dQMA1ftQ+b5JT09HWFgYPDw8YGNjA2dnZ4wfP17tcotyG967dy+6du2Ktm3bqt2L2bFjh2obf/WehfLv+Ph4REVFwcPDA7a2thg8eDBOnDihsRxr166Fl5cX7Ozs4OvrixMnTqBHjx6S9+Du3LmDjz76CG5ubrC1tUWvXr3www8/qLap0vZrSUlJCAwMhKOjI2xsbNC1a1dERkYiPz8fQOnr9nXXGaCjy1BCCFy+fBnt2rVD9erVSxyvRYsWan9/9913WL58OQYMGIAhQ4YgLy8P8fHx+Oabb2BsbIyAgAD4+fkhNzcX+/fvR3h4OP7zn/8AePEmHTZsGBo0aIBx48ahevXq2L17N8aOHYtvvvkGvXr1AvDi2l5wcDAaNGiAkJAQ/PXXX1i/fj0MDdVzNCMjA0OGDMHz588RGBiIhg0bYt++ffjkk09w8+ZNzJgxQzXu3bt3sWzZMkyYMAF//vkn7O3tcf78ebX55efnIyAgAH/88QeGDBmC1q1b49ChQ5g9ezb++usvBAcHq5bB3NwcY8eORa1atXD27Fns3LkT6enp2Lp1q9brIDMzE/7+/igoKMDw4cNhZGSETZs24eHDh6VOd+rUKUyZMgUeHh4YPHgw/vrrL2zcuBEjRoxAQkICzMzMEBkZifnz5+Ptt9/G+PHj0a5dO9X0ixYtQteuXdG3b1/UrFmzxH727t2LGjVqIDg4GNWrV8f69esRHByMuLg41TrVxvjx46FQKHD69GlERkaiefPmxY7322+/ITg4GDKZDCNGjICxsTF27tyJkJAQzJkzBwEBAapxr127hsmTJ8PPzw9+fn7YvXs3lixZAlNTU7XxXqePPn364Ntvv0VSUhKsra1V054/fx63b9/GBx98AED77RkAzp49i4yMDEyfPh23bt1Cq1atNGrr0aMHHjx4gNjYWIwfPx62trZqw4cPH45+/fqhd+/eSElJwbp16yCEwMcffwwAuH//PgYPHgwhBIKCgmBiYoIDBw5g+vTp+PPPPzF69OgSX5fly5dj6dKlCAgIUAXB+vXrcfHiRezevRstW7ZEeHg45s+fjx49eqBHjx4wNTVFZmYmhgwZAplMhsDAQLz99tu4fPkytmzZgkuXLuGXX35R2798/PHHCAwMhEwmg52dHVxcXDBjxgy0b98eQ4YMQcuWLfHs2bNia1y0aBFq1aqFkSNHoqCgAKtXr8a4ceOQkpKCt99+GwDw9ddf48cff0S3bt0wfPhwnD17FmPGjMFbb5W+Wy0oKMDo0aPx7NkzvP/++6hbty4OHTqEhQsXoqioCOPHjy9xvxYXF4fZs2eja9euCA0NRUFBAfbv348ff/wRADBjxowS12151hkAQOhAVlaWsLS0FFOmTNF6mvz8fNGuXTuNaXJycoSNjY0YN26cqm3x4sXC0tJSZGRkqNoCAwNF9+7dRV5enqqtoKBADBs2THTq1Ek8f/5cCCFEcHCwcHJyEllZWarxLl26JFq3bi0sLS1VbZMnTxatW7cWFy9eVLUVFRWJcePGCSsrK3Ht2jUhhBBhYWHC0tJSJCQkqNX9ao0xMTHC0tJS7Nq1SzWOQqEQw4YNE66urqKoqEjMmTNHtG3bVjx8+FBtXlOmTBGWlpaq9uKW/1ULFiwQVlZWavVnZmaKjh07qk27bds2YWlpKU6cOCGEEOLTTz8VDg4OQqFQqKa7cuWK8PLyEklJSaq2Ll26iMDAQNXfGRkZwtLSUvj4+KhNK4QQlpaWIiwsTO3vd999V1y5ckXVdvPmTdGmTRsxYcKEEqcrqV25Dl4WGBgounTpovp78ODBwt7eXty9e1fV9uzZMzFgwABhZ2en2h4CAwOFpaWlOHDggNp4Tk5Ows/PT6OWl2nbR0BAgOjWrZvatPPmzRM2Njbi8ePHqjq02Z6V9Z47d67U2oTQXNdC/O+1W7NmjaqtqKhI9OjRQ3Tu3FltPGdnZ3H//n1Vm0KhEFOnThU2NjYiMzOzxH59fHzE2LFj1do2b94s+vXrJ9LT04UQ/9t+Fi9erBpnxYoVwsrKSly/fl1t2oULFwpLS0vVtq1crjlz5mj0/eq28mo/yr87d+6s9lonJCQIS0tLERsbK4QQQi6XizZt2ohp06apzf+rr74qcTtVOn/+vLC0tFR7/ygUCjFy5EgxY8YMVVtx72tvb2/h5+en9p4qKCgQHh4eok+fPqq2ktbt664zIYTQyWUo5VF6UVGR1tNUr14dx48fxxdffKHW/vDhQ8hkslIfJ3v48CFOnTqFzp0749mzZ8jOzkZ2djaePHmCHj16IDMzExcuXMDjx49x6tQp9OvXT+0ppTZt2qjdEC0qKkJKSgrc3NzUjv4MDQ0xfvx4CCHwyy+/qNXQvn37UpcvJSUFpqam6NOnj6rNwMAAkZGRiImJgYGBAT777DP88ssvqFevnmqc3Nxc1RF6WR6pO3z4MGxtbdXqr1+/fomXBZUaN26MvLw8zJ07Fzdu3AAA1Sm+t7e3ZL/t27eHgYGB5Hju7u5ql/3Mzc3h4eGBo0ePlmm70UZmZibOnz+P9957D40bN1a116xZE6NGjcKzZ89w/PhxVXutWrXg6empNp6FhQUyMzMrpI++ffsiIyMDFy9eBPDiTDwpKQmenp6oW7eu1tuzkpGRkcaZQlm9vF0YGhqiTZs2quVVKBRITk5G+/bt8dZbb6nqefjwIby8vJCfn49jx46VOO/GjRvj5MmTWLdunWqe/v7+2LlzZ4lnggAwduxYHDt2TO1JvWfPnqn2L6++H5ycnMq+4P+nc+fOqF27tupv5X3WBw8eAAAOHjyIwsJCjBgxQqNGKY0aNYKBgQFWrFiBI0eOID8/HwYGBvjxxx8RERFR6rS7du3CypUr1d5TWVlZqFu3bqn7g/KuM0BHl6FMTExQvXr1Mj8CVr16daSkpODAgQNIS0tDeno6Hj9+DAClPmKrfI56w4YN2LBhQ7Hj3L17FzVr1oRCoYC5ubnG8HfeeUd1Pfjhw4d4+vQpLCwsNMZTbri3b99Wa69fv36py3b79m00b95cY0f66hNFDx8+xIoVK3D16lXI5XLcuXNHtexl+VzK7du3VdeBX/bOO++UOl1gYCCOHj2KjRs3YuPGjWjWrBm6dOmCQYMGafV0l7aPChdXR/PmzfHLL78gOzsbDRs21Go+2lCuq9LW5507d1Rt9erV07gsWaNGjVJf/7L04e3tjS+//BJ79uyBjY0Nzpw5g/v376sOJLTdnkurt6xe3X6NjIxU97cePnyInJwcJCcna9zjKa6eV82YMQMffPAB5s2bh/nz58Pa2hpdu3bFkCFDJNdzQUEBoqKicOnSJcjlcty6dUt1MPHq+pB6D5bm1e22Ro0aan2kp6cDgMa+o0GDBqhbt26p827cuDGmT5+Ob7/9FqNHj0bt2rXh4uKCXr16wcfHB9WqVStx2urVq+PXX3/F7t27kZqaCrlcjqysLACa+46XlXedAToKCwMDAzg4OODixYsoLCws8ZpeVFQUMjIyEB4ejgYNGuDDDz/EwYMH4ejoCAcHB/j5+cHJyQnDhw8vtT/lxhMQEIDu3bsXO06rVq1Ub1blhvCyl6+vlxZMyo3n1XmUtsKVNUodcScmJiI0NBSNGjVCx44dVTf1jh49ihUrVpQ67asMDAyKvT5b2rIBgEwmw8aNG3Hu3DkkJyfj8OHD2LBhA2JiYhAZGYm+ffuWOr3U61AaZW2lzeN1zjq0WZ8vX/t+nR1vWfowMTGBu7s79uzZg9DQUCQmJqJOnTro0qULAO23Z6XyvOZKpS2zsp6ePXvC39+/2HFKe/y6devW2Lt3L44cOYKDBw/iyJEjWLx4MdasWYPY2NgSP+Nz+vRpjBo1CrVr10anTp0wcOBAtGnTBnK5XOMKhNQySJGaVhmcUvuOkowaNQp9+vTB/v37cejQIRw7dgwHDhxAfHw8Vq1aVeJ0X375JTZu3Ig2bdrA3t4e7733HhwcHPDll1+WurMv7zoDdPg5ix49euDUqVNISEgo9rnmZ8+eYevWrSgqKkK9evVw+vRpHDx4EB9++CEmTZqkGq+wsBCPHj0qdcGUCVutWjV06tRJbdj169dx69Yt1KpVSzWPmzdvasxDeeQAvDjKqF27NlJTUzXGS0tLAwC1Sw3aaNKkSbFPqRw6dAiJiYmYPn06vvnmG5ibm2Pbtm1qp8Q///xzmfoCgGbNmqktk5LUp67T0tKQk5MDe3t72NvbIzQ0FNevX0dAQADWrFkjGRbaevXMDHixXurUqaO6oWhoaKh64kOptEtBJVFuHxW5PsvbR9++fTFlyhRcvnwZ+/btg5eXl2pHpO32rCumpqaoVasWCgsLNeq5c+cOfv/99xLrKSoqwpUrVyCTydCtWzfV2W5iYiKmTJmCuLi4Ep8kWrx4MYyMjJCQkKB25L98+fIKWjLtvbzvsLS0VLXn5uaqjvRL8ujRI1y5cgXt2rVDYGAgAgMD8fTpU8ycORN79+7F1atXi/0U/e3bt7Fx40a89957iIyMVBsm9T4ozzpT0tmjs35+fmjatCkiIyNx7do1tWFFRUX47LPPkJmZiTFjxqB69ep49OgRAGg8ybFlyxb89ddfKCwsVLUpjwKUR3ONGjWCjY0NduzYgfv376vGKygowKxZszBx4kQUFhaifv36cHBwwO7du1WXt4AXO9DDhw+r/q5WrRrc3d1x7NgxtUcchRD44YcfYGBgoHZNWxseHh7IzMzE/v371drXrVuneuLi0aNHaNKkiVpQ3L17F/v27VO9btry8vLCH3/8obZcOTk52LlzZ6nTzZ07Fx9++CHy8vJUbe+88w7q1q2rdvRlaGhYrq9rOXLkiNq6unbtGo4ePYquXbuqzsAaNGiAK1euqB21JyYmasxLWVdJ9TRs2BA2NjbYtWuX2iPI+fn5WLNmDWrUqFHuD/GVtY+uXbvC2NgYixYtwoMHD9RCWNvtuaykXqeSvPXWW/Dw8MChQ4dw5coVtWELFixASEhIiU/ZFRUVITg4GPPmzVNrb9u2rVpNyrOjl2t79OgRTE1N1YIiJydH9ai0Nu+H8m6nSt27d4eBgQFiYmLU2jdt2iQ5/2PHjmH48OFq9zlr166tCh3lsr+6X1Puo17dJx46dAg3b94sdp+orKU860xJZ2cWNWvWxJIlSzBy5EgMGjQIffv2ha2tLR49eoQ9e/bg8uXL8Pb2Vt0wcnBwgEwmw/z583H79m2YmJjg5MmTSExMRM2aNdV2XsqNZ9WqVfDw8EC3bt0we/ZsDB8+HAMHDsTQoUNRr149JCQk4Pz585g2bZrqaDUsLAxBQUEYNGgQ/P39kZ+fjw0bNmis8NDQUJw8eRJBQUEICgpCw4YNsX//fpw4cQIjRowo9vHE0vj7+2Pbtm2YMmUKAgICYGFhgZSUFBw7dgzz5s1DtWrV4OHhgcTERMyZMwe2tra4deuWKiwBqL0GUkaMGIGff/4ZH330EYYPHw5TU1PExsZKXoYaMWIExowZg4CAAPTv3x81a9ZEcnIy5HK52s04U1NTXLlyBZs2bYKzszOMjIzK9HrUqFEDw4YNQ1BQEJ4+fYp169ahbt26mDx5smqcPn36YPXq1ZgwYQI8PT1x6dIlJCUlaVxfVv69ePFidOjQAS4uLhr9KbePQYMGYejQoTA2NsauXbtw6dIlzJ49W/K6szbK0oeRkRG8vLywY8cONGrUCB06dCh2XlLbc1koX6fNmzcjMzOzTGeJyvdDQEAAAgIC0KRJE6SkpODgwYPw8/Mr8XHnGjVqICgoCMuWLUNISAjc3d3x7NkzxMbGolatWhg4cCCA/913OXDgAJo0aQIvLy94eHjghx9+wKRJk+Dm5oYHDx5g69atqqNqbd4PpqamOHXqFLZs2QI3Nzetl/dVFhYWCAgIwMaNG5GVlYVOnTrhwoULqoOX0i4xd+nSBRYWFvj4449x6dIlNG/eHKmpqYiJiYGLi4tqX/Lqfs3d3R1NmjTB8uXL8fz5czRu3Bi//fYbduzYUeI+8eV1+7rrTKXUZ6Uqwb1798SCBQtEr169hL29vWjbtq0YMmSI2Lp1q8YjlqdPnxb+/v7C3t5eODs7Cz8/P5GQkCDmz58v3n33XfHgwQMhhBCPHz8W77//vrCxsRHe3t6q6S9evCjGjRsnHB0dRdu2bUX//v3F9u3bNWr6f//v/4khQ4YIGxsb4ebmJr7//nsxbdo0YWNjozbezZs3xeTJk4Wzs7Ows7MTAwYMEHFxcWrjFPfYphDFPwb38OFD8emnnwpXV1fV/BITE1XDHz16JGbNmqUa7uXlJRYsWCDOnDkjLC0txY8//ljivIvz559/iunTpwtnZ2fh6OgoPvnkE7F+/fpSH50VQoiDBw8Kf39/4eTkJOzs7MTAgQPF7t271eZ9+PBh0aVLF2FtbS2+//77Yh99VCru0dlvvvlGfPvtt6JDhw7C3t5ejBs3TqSlpalN99dff4m5c+cKFxcXYWdnJ4KCgsTly5dF79691eZ369YtMXDgQGFtbS1GjhwphNB8dFaIF9vH2LFjRbt27YS9vb3w9/cX+/fvVxunuOlKa3+VNn0oHT16VFhaWor58+eXOC+p7VnbuoR48Xj6pEmThJ2dnXBychLPnj0rcfstrv3mzZti6tSpokOHDsLW1lb06tVLrFmzRhQWFpbab1FRkVizZo3o06ePsLe3F46OjmLMmDHiwoULauOtWLFC9V47ceKEePbsmViwYIHw8PAQtra2olu3buLjjz8WN27cEK1btxZffPGFEKL4bVhp+/btwtXVVdjY2IgdO3aU+Ojsq9ttce2FhYUiOjpaeHp6CmtrazFw4EBx8uRJYWlpKT755JNSX4Pbt2+LsLAw0blzZ2FtbS08PT3F/PnzRU5Ojmqc4vZr165dEyNHjhTt27cXjo6OYsCAASImJkasW7dOWFpaql7D4tZtedaZEEIYCPEa39z3N5KZmYkGDRpotI8fPx5XrlxBSkqK7osiIr2mPIo3NjZWa3/48CE6duyoca/17+Af/3sWgwcPxqhRo9TaMjMzcfLkSdjZ2VVRVUSkzy5cuIB27dohISFBrV15GervuO/Q2T0LfdWvXz8sX74c06ZNQ4cOHfDkyRNs2bIFCoUCISEhVV0eEemhdu3awczMDF988QVu3LiBf//737h69SpiY2Ph5ORU4d+Wqw/+8ZehFAoFYmJisGXLFmRkZKBmzZpo164dJk2a9EZ8pTgRVY179+4hOjoax44dQ1ZWFho1agQfHx+EhITo9FFmXfnHhwUREUn7x9+zICIiaQwLIiKS9Ebc4H74MA8Khe6ultWvL0NWVq7O+tP3OgD9qUVf6gBYiz7XAehPLbquw9DQAG+/bSw9Yhm9EWGhUAidhoWyT32gL3UA+lOLvtQBsJbi6EsdgP7Uoi91lAcvQxERkSSGBRERSSpzWFy+fBnW1tZq36RZnLy8PHz++edwdXWFg4MDxowZU+xXgRMRkf4rU1jcuHED48aN0+rrkKdMmaL6MZeIiAjcv38fwcHByMnJee1iiYioamgVFoWFhYiJicHgwYPx/PlzyfFPnz6NQ4cOISIiAgMGDICXlxfWrl2LnJwcbN68udxFExGRbmkVFmfOnMHChQsxcuRIhIaGSo5/7NgxGBsbq/24i6mpKZycnNR+fIeIiN4MWoVFy5YtkZycjAkTJmj1+76pqakwNzfXGLd58+aqn5QkIqI3h1afsyju9x5Kk5ubC5lMptFubGyM3Nyyfzilfn3NeVW2hg3r6LzP4uhLHUDF16LIz4dhMT94Xxl1vG5flVFLZdGXWvSlDkB/atGXOsqjUj6UV9p3E778u83aysrK1emHWho2rIMHD6r+Rry+1AFUTi0NG9bBsfcGVug8S+K6c1ul1P93Xj9vch2A/tSi6zoMDQ0q5QC7Uj5nIZPJiv093Ly8vGLPOIiISL9VSlhYWFggIyND4wwjPT0dFhYWldElERFVokoJCzc3Nzx58gTHjx9XtWVnZ+P06dPo1KlTZXRJRESVqELCIjs7G+fOnVPdvHZycoKzszOmTp2KuLg47N+/H++//z7q1KmDoUOHVkSXRESkQxUSFikpKfDz88OlS5dUbUuWLEHXrl0RGRmJmTNnonHjxli7di1MTEwqoksiItKhN+JnVfk0VNXj01Ca/u7r502uA9CfWvg0FBER/WMwLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIktZhsXv3bvTu3Rt2dnbw8fFBfHx8qeNnZ2cjPDwcbm5ucHZ2xrhx43Dz5s1ylktERFVBq7BITExEaGgo3NzcsHTpUjg7OyMsLAx79uwpdnwhBEJCQnD48GGEhoYiMjISDx48QHBwMB4/flyhC0BERJXvLW1GioqKgo+PD8LDwwEA7u7uePz4MRYtWgRvb2+N8W/evImzZ88iIiIC/fv3BwC0bNkS3bt3xy+//IIBAwZU3BIQEVGlkzyzyMjIgFwuh5eXl1p7z549kZqaioyMDI1pnj9/DgAwNjZWtZmYmAAAHj16VJ56iYioCkiGRWpqKgDAwsJCrd3c3BwAkJaWpjFN69at0aFDByxduhQ3btxAdnY25s6di9q1a6N79+4VUTcREemQ5GWonJwcAIBMJlNrV5415ObmFjvdZ599htGjR6NXr14AgBo1amDp0qUwMzMrV8FERKR7kmEhhCh1uKGh5snJjRs34O/vj+bNm2PWrFkwMjLCli1bMHHiRKxatQrt27cvU5H168ukR6pgDRvW0XmfxdGXOgD9quV1VEb9+vSa6Est+lIHoD+16Esd5SEZFnXqvFjIvLw8tXblGYVy+MvWrl0LAFi9erXqXoWrqyuGDRuGefPmYfv27WUqMisrFwpF6aFVkRo2rIMHD3J01p++1wFUTi26fgNVRv1/5/XzJtcB6E8tuq7D0NCgUg6wJe9ZKO9VyOVytfb09HS14S+7c+cOWrZsqQoKADAwMICjoyOuX79eroKJiEj3JMPC3NwczZo10/hMxb59+9CiRQs0adJEYxoLCwv88ccfePLkiVr7+fPn0bRp03KWTEREuqbV5yxCQkIQHh4OExMTeHp64sCBA0hKSkJUVBSAF5/WlsvlaNWqFWQyGd5//33s2rULI0eOxNixY2FkZISdO3fi1KlTqmmIiOjNoVVY+Pr6Ij8/H6tXr0ZcXBzMzMwQERGhetIpJSUF4eHhWL9+PTp06IBmzZph8+bNWLhwIcLDw2FgYABLS0usWbMGnTp1qtQFIiKiiqdVWACAv78//P39ix3m6+sLX19ftbaWLVti2bJl5auOiIj0Ar91loiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEiS1mGxe/du9O7dG3Z2dvDx8UF8fHyp4ysUCixbtgzdunWDnZ0d+vbti4SEhPLWS0REVeAtbUZKTExEaGgohg8fDjc3NyQnJyMsLAxGRkbw9vYudpp58+YhNjYWU6dORevWrZGQkIBp06ZBJpOhc+fOFboQRERUubQKi6ioKPj4+CA8PBwA4O7ujsePH2PRokXFhoVcLkdMTAy++OILDB48GADg4uKCmzdv4siRIwwLIqI3jGRYZGRkQC6XY+rUqWrtPXv2RFJSEjIyMmBmZqY2LDk5GUZGRujfv79a+8aNG8tfMRER6ZzkPYvU1FQAgIWFhVq7ubk5ACAtLU1jmqtXr8LCwgLHjx9Hv3790KZNG3h5eSExMbEiaiYiIh2TDIucnBwAgEwmU2s3NjYGAOTm5mpMk52djbt372LWrFkIDAzEqlWrYG1tjSlTpuDEiRMVUTcREemQ5GUoIUSpww0NNfOmoKAA2dnZWL58Obp06QIA6NixI1JTU7FkyRJ07NixTEXWry+THqmCNWxYR+d9Fkdf6gD0q5bXURn169Nroi+16EsdgP7Uoi91lIdkWNSp82Ih8/Ly1NqVZxTK4S8zNjZGtWrV4OrqqmozNDREp06dsHXr1jIXmZWVC4Wi9NCqSA0b1sGDBzk660/f6wAqpxZdv4Eqo/6/8/p5k+sA9KcWXddhaGhQKQfYkpehlPcq5HK5Wnt6erra8JeZm5tDoVCgsLBQrb2goAAGBgavXSwREVUNybAwNzdHs2bNsGfPHrX2ffv2oUWLFmjSpInGNO7u7hBCICkpSdVWWFiII0eOwNHRsQLKJiIiXdLqcxYhISEIDw+HiYkJPD09ceDAASQlJSEqKgrAixvacrkcrVq1gkwmg4uLCzp37oy5c+fi6dOnaNGiBTZt2oTbt2/jm2++qdQFIiKiiqdVWPj6+iI/Px+rV69GXFwczMzMEBERgV69egEAUlJSEB4ejvXr16NDhw4AgMWLF2PRokVYuXIlHj9+jDZt2mD16tWwsbGpvKUhIqJKYSCkHnfSA7zBXfUq6wb3sfcGVug8S+K6cxtvcP+D6gD0p5Z/zA1uIiIihgUREUliWBARkSSGBRERSWJYEBGRJIYFERFJYlgQEZEkhgUREUliWBARkSSGBRERSWJYEBGRJIYFERFJYlgQEZEkhgUREUliWBARkSSGBRERSWJYEBGRJIYFERFJYlgQEZEkhgUREUliWBARkSSGBRERSWJYEBGRJIYFERFJYlgQEZEkhgUREUliWBARkSSGBRERSWJYEBGRJK3DYvfu3ejduzfs7Ozg4+OD+Ph4rTu5e/cuHB0d8f33379OjUREVMW0CovExESEhobCzc0NS5cuhbOzM8LCwrBnzx7JaYUQmDVrFnJzc8tdLBERVY23tBkpKioKPj4+CA8PBwC4u7vj8ePHWLRoEby9vUuddtOmTUhNTS1/pUREVGUkzywyMjIgl8vh5eWl1t6zZ0+kpqYiIyOj1GkXLlyIL7/8svyVEhFRlZEMC+VZgYWFhVq7ubk5ACAtLa3Y6RQKBWbOnAkfHx94eHiUt04iIqpCkpehcnJyAAAymUyt3djYGABKvBexbt063Lp1C8uXLy9vjahfXyY9UgVr2LCOzvssjr7UAehXLa+jMurXp9dEX2rRlzoA/alFX+ooD8mwEEKUOtzQUPPk5MaNG/juu++wePFi1KlT/hcpKysXCkXpdVSkhg3r4MGDHJ31p+91AJVTi67fQJVR/995/bzJdQD6U4uu6zA0NKiUA2zJy1DKnX1eXp5au/KM4tUwKCoqQnh4OLy9veHq6orCwkIUFhYCeHFpSvl/IiJ6c0iGhfJehVwuV2tPT09XG6509+5dnD9/HvHx8bC2tlb9A4Do6GjV/4mI6M0heRnK3NwczZo1w549e9CjRw9V+759+9CiRQs0adJEbfxGjRph69atGvMZNGgQhg4dioEDB1ZA2UREpEtafc4iJCQE4eHhMDExgaenJw4cOICkpCRERUUBALKzsyGXy9GqVSvIZDLY2toWO59GjRqVOIyIiPSXVp/g9vX1xeeff46jR48iJCQEv/76KyIiItCrVy8AQEpKCvz8/HDp0qVKLZaIiKqGVmcWAODv7w9/f/9ih/n6+sLX17fU6a9evVq2yoiISG/wW2eJiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJGkdFrt370bv3r1hZ2cHHx8fxMfHlzr+gwcPMHv2bHTp0gUODg7w9fVFUlJSeeslIqIq8JY2IyUmJiI0NBTDhw+Hm5sbkpOTERYWBiMjI3h7e2uMn5+fj9GjRyMnJwcTJ05Eo0aNsHfvXkyePBlFRUXo06dPhS8IERFVHq3CIioqCj4+PggPDwcAuLu74/Hjx1i0aFGxYXH48GFcuXIFcXFxsLOzAwC4urrizp07+OGHHxgWRERvGMnLUBkZGZDL5fDy8lJr79mzJ1JTU5GRkaExjbGxMfz8/GBra6vW/s4770Aul5ezZCIi0jXJM4vU1FQAgIWFhVq7ubk5ACAtLQ1mZmZqw1xcXODi4qLWVlBQgEOHDuE///lPuQomIiLdkzyzyMnJAQDIZDK1dmNjYwBAbm6uVh19/fXXuHnzJsaOHVvWGomIqIpJnlkIIUodbmhYet4IIfD1119j3bp1GDVqFLp37162CgHUry+THqmCNWxYR+d9Fkdf6gD0q5bXURn169Nroi+16EsdgP7Uoi91lIdkWNSp82Ih8/Ly1NqVZxTK4cXJz8/HzJkzkZCQgFGjRmHGjBmvVWRWVi4UitJDqyI1bFgHDx7k6Kw/fa8DqJxadP0Gqoz6/87r502uA9CfWnRdh6GhQaUcYEuGhfJehVwuh5WVlao9PT1dbfircnNzMW7cOJw9exazZs3C8OHDK6JeIiKqApL3LMzNzdGsWTPs2bNHrX3fvn1o0aIFmjRpojFNUVERPvjgA5w/fx5RUVEMCiKiN5xWn7MICQlBeHg4TExM4OnpiQMHDiApKQlRUVEAgOzsbMjlcrRq1QoymQw//fQTTp06BT8/PzRu3Bjnzp1TzcvAwABt27atlIUhIqLKoVVY+Pr6Ij8/H6tXr0ZcXBzMzMwQERGBXr16AQBSUlIQHh6O9evXo0OHDti7dy8AIDY2FrGxsWrzqlatGn7//fcKXgwiIqpMWoUFAPj7+8Pf37/YYb6+vvD19VX9vX79+vJXRkREeoPfOktERJIYFkREJIlhQUREkhgWREQkiWFBRESSGBZERCSJYUFERJIYFkREJIlhQUREkhgWREQkiWFBRESSGBZERCSJYUFERJIYFkREJIlhQUREkhgWREQkiWFBRESSGBZERCSJYUFERJIYFkREJIlhQUREkhgWREQkiWFBRESSGBZERCSJYUFERJIYFkREJIlhQUREkhgWREQkiWFBRESStA6L3bt3o3fv3rCzs4OPjw/i4+NLHT8vLw+ff/45XF1d4eDggDFjxuDmzZvlLJeIiKqCVmGRmJiI0NBQuLm5YenSpXB2dkZYWBj27NlT4jRTpkzBnj17EBoaioiICNy/fx/BwcHIycmpsOKJiEg33tJmpKioKPj4+CA8PBwA4O7ujsePH2PRokXw9vbWGP/06dM4dOgQfvjhB3h4eAAA2rdvj27dumHz5s0YO3ZsBS4CERFVNskzi4yMDMjlcnh5eam19+zZE6mpqcjIyNCY5tixYzA2Noarq6uqzdTUFE5OTjh8+HAFlE1ERLokeWaRmpoKALCwsFBrNzc3BwCkpaXBzMxMYxpzc3NUq1ZNrb158+ZISkoqc5GGhgZlnqa8qqLP4uhLHYB+1fI6KqN+fXpN9KUWfakD0J9adFlHZfUlGRbKewwymUyt3djYGACQm5urMU1ubq7G+MppihtfyttvG5d5mvKqX1+z/qqgL3UAlVOL685tFT7PklRG/X/39fM69KUOQH9q0Zc6ykPyMpQQovQZGGrOorRpihufiIj0m+Seu06dOgBePAr7MuUZgnL4y2Qymcb4ynkUd8ZBRET6TTIslPcq5HK5Wnt6erra8FenycjI0DjDSE9PL3Z8IiLSb5JhYW5ujmbNmml8pmLfvn1o0aIFmjRpojGNm5sbnjx5guPHj6vasrOzcfr0aXTq1KkCyiYiIl3S6nMWISEhCA8Ph4mJCTw9PXHgwAEkJSUhKioKwIsgkMvlaNWqFWQyGZycnODs7IypU6ciNDQU9erVQ3R0NOrUqYOhQ4dW6gIREVHFMxBSd7D/z08//YTVq1fj7t27MDMzw9ixY9G/f38AwPbt2xEeHo7169ejQ4cOAIDHjx9jwYIFSE5OhkKhgKOjI2bOnIl33nmn0haGiIgqh9ZhQURE/1x8jpWIiCQxLIiISBLD4iVl/Rr2ynb58mVYW1vj3r17VdK/QqHA5s2b0bdvXzg4OKB79+6YP3/+a30Kv7yEEFi7di169uwJOzs79OvXDz///LPO63jVhAkT0KNHjyrpu7CwEHZ2drCyslL75+DgoPNafv31VwwdOhRt27aFm5sbvvzyy2I/a1WZTp48qfFavPxvx44dOq1n8+bN8PHxgb29Pfr27Ytdu3bptP+KptXTUP8Eyq9hHz58ONzc3JCcnIywsDAYGRkV+826le3GjRsYN24cCgsLdd630qpVq/Ddd99h1KhRcHFxQVpaGhYvXozr16/jxx9/1GktK1aswOLFi/HRRx/B3t4ehw8fRmhoKKpVq4ZevXrptBalnTt3Yv/+/WjevHmV9J+Wlobnz58jIiICLVq0ULXr+lsSzp07hxEjRqBr165YtmwZ0tPT8e233yI7O1v1xKQuWFtbIzY2Vq1NCIGPP/4YT58+RefOnXVWS2xsLD777DOMHDkS7u7uOHToEKZPn47q1avDx8dHZ3VUKEFCCCG6d+8uJk+erNY2adIk4e3trdM6CgoKxMaNG4WDg4NwdnYWlpaW4u7duzqtQQghFAqFcHJyEp999plae0JCgrC0tBS///67zmrJz88XTk5O4osvvlBrDwwMFEOHDtVZHS+7d++ecHJyEh4eHqJ79+5VUsOuXbtE69atxdOnT6ukf6WAgAAREBAgFAqFqm3jxo2iW7duVV7b2rVrRevWrcW5c+d02q+fn58ICgpSaxs2bJgIDAzUaR0ViZeh8Hpfw15Zzpw5g4ULF2LkyJEIDQ3VWb+vysvLQ79+/dCnTx+1duWjz69+or8yVatWDRs2bND4HZTq1avj+fPnOqvjZbNnz4arqytcXFyqpH/gxWXK5s2bo1atWlVWg/LDtkOHDoWBwf++7TQgIADJyclVWtuDBw+waNEi1eUxXXr+/Lnqy1aV6tWrh0ePHum0jorEsIB2X8OuKy1btkRycjImTJig8RXvuiSTyTB79mw4OjqqtScnJwMAWrVqpbNaDA0NYWVlhX/9618QQiAzMxMrV67E8ePH4efnp7M6lOLi4nDp0iV88sknOu/7ZVevXkWNGjUwatQoODg4wMnJCXPmzNHpPaVr165BCAETExNMnjwZ9vb2cHR0xKeffopnz57prI7iREdHw9DQEJMnT9Z538HBwThy5AiSkpKQm5uLPXv2ICUlBe+9957Oa6kovGeB1/sa9srSoEEDnfVVVufPn8fKlSvRvXt3tGzZskpq2LdvHyZOnAgA8PT0RL9+/XTa/+3btzF//nzMnz8fpqamOu37VVeuXEFubi4GDx6M8ePH4+LFi4iOjkZaWhrWr1+vdqRfWbKzswEAM2fORI8ePbBs2TJcvXoV3333HZ4/f44FCxZUeg3FycrKQnx8PEaOHIm6devqvP/evXvjxIkTakE1YMAAjB49Wue1VBSGBV7va9j/ac6cOYPx48ejWbNmmDt3bpXV0aZNG2zcuBFXr17FokWLMHbsWKxbt04nO0YhBGbNmoXOnTujZ8+eld6flKioKJiYmMDKygoA4OTkhPr162P69Ok4fvy42i9VVpaCggIAQLt27fDpp58CAFxcXCCEQEREBEJCQjR+HE0X4uLioFAoEBwcrPO+AeCDDz7Af//7X4SHh6NNmzY4f/48vv/+e9UZ+5uIYYHX+xr2f5LExETMnDkTLVq0wKpVq/D2229XWS1mZmYwMzODk5MTZDIZwsLC8N///hft2rWr9L5jYmJw9epV/Pzzz6qn1JQHGoWFhahWrZpOQkvJ2dlZo83T0xPAi7MOXYSF8uzbw8NDrd3NzQ0LFizA1atXqyQs9u7dC3d39yo5+zt79iyOHj2K+fPnw9fXF8CLdVW3bl3MmTMHQ4YMgaWlpc7rKi8eMuP1vob9n2LNmjWYOnUq7O3tERMTg0aNGum8hkePHiE+Ph73799Xa2/Tpg0A4M8//9RJHXv37sXDhw/h5uYGa2trWFtbIz4+HnK5HNbW1jp9jj8rKwtxcXEaD18o7xPoKtCVj+zm5+ertSvPOHQZnkr379/H77//XmWPqN65cwcANA5g2rdvDwC4fv26zmuqCAwLvN7XsP8TxMXFYcGCBfDx8cGqVauq7AxLoVBg5syZGs/QHzt2DAB0dpT2+eefY+vWrWr/unTpgsaNG6v+rysGBgaYM2cONm7cqNaemJiIatWqaTyYUFlatmyJpk2bIjExUa394MGDeOutt6rkA4Lnz58HAJ29Bq9SHlyeOXNGrf3cuXMAgKZNm+q6pArBy1D/R+pr2P9psrKy8NVXX6Fp06YICAjA77//rja8efPmOjvFNzU1xbBhw7By5UoYGRnB1tYWZ86cwYoVKzB48GCdfZNxcf3Uq1cPNWrUgK2trU5qUDI1NUVAQAA2bNgAmUyG9u3b48yZM1i+fDkCAgJUT/JVNgMDA4SGhqp+jsDX1xcXL17EsmXLEBgYWCWXga5du4ZatWpV2U7Z2toa3bt3x1dffYWcnBy8++67uHjxIpYuXQoPDw+dP8ZbURgW/8fX1xf5+flYvXo14uLiYGZmhoiIiCr7dHBVO3LkCP766y/cvn0bAQEBGsMjIyN1+hhgeHg4/v3vf2Pr1q2Ijo5G48aNMXHiRIwaNUpnNeibsLAw/Otf/8K2bduwcuVK/Otf/8LEiRN1/sRNr169UKNGDSxduhTjxo1D/fr1ERISgnHjxum0DqXMzMwqeQLqZVFRUViyZAnWrl2LrKwsNG3aFCNHjtT4rNCbhF9RTkREknjPgoiIJDEsiIhIEsOCiIgkMSyIiEgSw4KIiCQxLIiISBLDgoiIJDEsiIhIEsOCiIgk/X+1DMRFpFIDMAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_beliefs(starting_state, \"Categorical distribution over the starting state\")" ] }, { "cell_type": "markdown", "metadata": { "id": "k1hodf-fI02_" }, "source": [ "Now let's imagine we're moving **\"RIGHT\"** - write the conditional expectation, that will create the state vector corresponding to the new state after taking a step to the right." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "id": "D8Q_dTRSMSje" }, "outputs": [ { "data": { "image/png": "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X3nac5OO+kwRdYCpGS/qviYAIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0ikrFgsFks9AoDp4UodIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRnyFdXV3R1NQU1157bTQ0NERnZ2epJzFFhw8fjquvvjq+/fbbUk9hkn777bd49913o7m5OZYtWxb19fWxbdu2KBQKpZ42a8pLPSCj7u7u2LRpUzzwwANx8803R09PT2zevDnOP//8WLVqVannMQlff/11rFu3LkZHR0s9hSlob2+PnTt3xkMPPRQ33XRT9Pf3x6uvvhpfffVV7Nq1q9TzZoXvfpkBK1asiGuuuSZefvnlU8daW1vjyy+/jD179pRwGRMZHR2N9957L3bs2BHnnntu/PTTT7F///5YsGBBqacxgWKxGMuXL4+mpqZoa2s7dby7uzs2bNgQnZ2dsXTp0hIunB1uv0yzwcHBGBgYiJUrV445ftttt0VfX18MDg6WaBmT0dvbGy+99FI8+OCDsWnTplLPYQpGRkbijjvuiNtvv33M8csvvzwiIgYGBkoxa9a5/TLN+vr6IiKitrZ2zPGampqIiOjv74/q6upZ38Xk1NXVRU9PT1x00UXx/vvvl3oOU1BRURHPPvvsX4739PRERMQVV1wx25NKQtSn2YkTJyLiP//A/mju3LkREf+oBzZ/RxdffHGpJzCNDh06FG+88UbU19dHXV1dqefMCrdfptlEjyjmzPFXDrOht7c3Hn744aiqqootW7aUes6sUZhpVllZGRH/ub/3R79fof9+Hpg53d3dsXbt2rjsssvirbfeigsuuKDUk2aNqE+z3++l//mhzNGjR8ecB2bG7t27Y+PGjXH99dfHO++8E5dcckmpJ80qUZ9mNTU1UVVVFR9++OGY43v37o0lS5bEwoULS7QM8uvo6IgXXnghGhoaor29/R/5P2MPSmdAS0tLPPPMMzFv3ry45ZZbYt++fbFnz54xn1sHptcPP/wQW7dujUWLFsWaNWviiy++GHN+8eLFceGFF5Zo3ewR9Rlwzz33xMmTJ+PNN9+Mjo6OqK6uju3bt0djY2Opp0Fan332Wfz8888xNDQUa9as+cv5F198Me68884SLJtdfqMUIBH31AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AES+X+Emhlu+AfupgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Redefine the action here, just for reference \"\"\"\n", "actions = [\"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"STAY\"]\n", "\n", "\"\"\" Generate the next state vector, given the starting state and the B matrix\"\"\"\n", "right_action_idx = actions.index(\"RIGHT\") \n", "next_state = B[:,:, right_action_idx].dot(starting_state) # input the indices to the B matrix\n", "\n", "\"\"\" Plot the next state, after taking the action \"\"\"\n", "plot_point_on_grid(next_state, grid_locations)" ] }, { "cell_type": "markdown", "metadata": { "id": "0h9yH5ARJI-E" }, "source": [ "Now let's imagine we're moving **\"DOWN\"** from where we just landed - write the conditional expectation, that will create the state vector corresponding to the new state after taking a step down." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "id": "nXaYlJElNRAO" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Generate the next state vector, given the previous state and the B matrix\"\"\"\n", "prev_state = next_state.copy()\n", "down_action_index = actions.index(\"DOWN\")\n", "next_state = B[:,:,down_action_index].dot(prev_state)\n", "\n", "\"\"\" Plot the new state vector, after making the movement \"\"\"\n", "plot_point_on_grid(next_state, grid_locations)" ] }, { "cell_type": "markdown", "metadata": { "id": "YkxsKuonRbjX" }, "source": [ "### 3. The prior over observations: the $\\mathbf{C}$ vector or $\\tilde{P}(o)$\n", "\n", "---\n", "\n", "The (biased) generative model's prior preference for particular observations, encoded in terms of probabilities.\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "3jSjRkyoPt1w" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Create an empty vector to store the preferences over observations \"\"\"\n", "C = np.zeros(n_observations)\n", "\n", "\"\"\" Choose an observation index to be the 'desired' rewarding index, and fill out the C vector accordingly \"\"\"\n", "desired_location = (2,2) # choose a desired location\n", "desired_location_index = grid_locations.index(desired_location) # get the linear index of the grid location, in terms of 0 through 8\n", "\n", "C[desired_location_index] = 1.0 # set the preference for that location to be 100%, i.e. 1.0\n", "\n", "\"\"\" Let's look at the prior preference distribution \"\"\"\n", "plot_beliefs(C, title_str = \"Preferences over observations\")" ] }, { "cell_type": "markdown", "metadata": { "id": "syuovouSRmQe" }, "source": [ "### 3. The prior over hidden states: the $\\mathbf{D}$ vector or $P(s)$\n", "\n", "---\n", "\n", "The generative model's prior belief over hidden states at the first timestep.\n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "id": "ElcxKHl_QHpv" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Create a D vector, basically a belief that the agent has about its own starting location \"\"\"\n", "\n", "# create a one-hot / certain belief about initial state\n", "D = utils.onehot(0, n_states)\n", "\n", "# demonstrate hwo belief about initial state can also be uncertain / spread among different possible initial states\n", "# alternative, where you have a degenerate/noisy prior belief\n", "# D = utils.norm_dist(np.ones(n_states))\n", "\n", "\"\"\" Let's look at the prior over hidden states \"\"\"\n", "plot_beliefs(D, title_str = \"Prior beliefs over states\")" ] }, { "cell_type": "markdown", "metadata": { "id": "OT9qqFTqRrvv" }, "source": [ "## **Hidden state inference**\n", "\n", "Hidden state inference proceeds by finding the setting of the optimal variational posterior $q(s_t)$ that minimizes the variational free energy. For the simple POMDP generative model and posterior we're considering here, this update reduces to a remarkably simple update rule, that is essentially proportional to Bayes` rule:\n", "\n", "$$\n", "\\begin{align}\n", "q(s_t) = \\sigma\\left(\\ln \\mathbf{A}[o,:] + \\ln\\mathbf{B}[:,:,u] \\cdot q(s_{t-1})\\right) \n", "\\end{align}\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "id": "YCtY7o4bpGTq" }, "source": [ "Import the `softmax` function and a numerically-stable version of `np.log` from `pymdp.maths`" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "id": "UIJgNbv_RsFV" }, "outputs": [], "source": [ "from pymdp.maths import softmax\n", "from pymdp.maths import spm_log_single as log_stable" ] }, { "cell_type": "markdown", "metadata": { "id": "ugPbd0lXpOED" }, "source": [ "Below we implement the `infer_states()` function" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "id": "7gtv82kiQhJF" }, "outputs": [], "source": [ "\"\"\" Create an infer states function that implements the math we just discussed\"\"\"\n", "\n", "def infer_states(observation_index, A, prior):\n", "\n", " \"\"\" Implement inference here -- NOTE: prior is already passed in, so you don't need to do anything with the B matrix. \"\"\"\n", " \"\"\" This function has already been given P(s_t). The conditional expectation that creates \"today's prior\", using \"yesterday's posterior\", will happen *before calling* this function\"\"\"\n", " \n", " log_likelihood = log_stable(A[observation_index,:])\n", "\n", " log_prior = log_stable(prior)\n", "\n", " qs = softmax(log_likelihood + log_prior)\n", " \n", " return qs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's do a simulated single timestep of hidden state inference" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "id": "YPaAhj-2nv5c" }, "outputs": [], "source": [ "qs_past = utils.onehot(4, n_states) # agent believes they were at location 4 -- i.e. (1,1) one timestep ago\n", "\n", "last_action = \"UP\" # the agent knew it moved \"UP\" one timestep ago\n", "action_id = actions.index(last_action) # get the action index for moving \"UP\"" ] }, { "cell_type": "markdown", "metadata": { "id": "V7yvEyGgRhn4" }, "source": [ "Get \"today's prior\" using the past posterior and the past action, i.e. calculate:\n", "\n", "\n", "$$ \\begin{align}\n", "P(s_t) = \\mathbf{E}_{q(s_{t-1})}\\left[P(s_t | s_{t-1}, u_{t-1})\\right]\n", "\\end{align}\n", "$$\n", "\n", "and choose an observation that is consistent with the new location \n" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "id": "sbtcFip-SOI6" }, "outputs": [], "source": [ "prior = B[:,:,action_id].dot(qs_past)\n", "\n", "observation_index = 1" ] }, { "cell_type": "markdown", "metadata": { "id": "SGwNJDJdRXJ8" }, "source": [ "Now run the `infer_states()` function, using the observation, the $\\mathbf{A}$ matrix, and the prior we just calculated above" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "id": "YIDxVmMzmdrQ" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qs_new = infer_states(observation_index, A, prior)\n", "plot_beliefs(qs_new, title_str = \"Beliefs about hidden states\")" ] }, { "cell_type": "markdown", "metadata": { "id": "Juc77Bs8JwsI" }, "source": [ "Let's see what happens if observation and the prior \"disagree\" with eachother?" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "id": "TN0g4BnYKEyF" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Get an observation that 'conflicts' with the prior \"\"\"\n", "observation_index = 2 # this is like the agent is seeing itself in location (0, 2)\n", "qs_new = infer_states(observation_index, A, prior)\n", "plot_beliefs(qs_new)" ] }, { "cell_type": "markdown", "metadata": { "id": "DmAiGBsyLjk7" }, "source": [ "What happens if likelihood and prior are partially ambiguous?" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "id": "5JFCey-ShsQg" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.254 0.093 0.093 0.093 0.093 0.093 0.093 0.093 0.093]\n", " [0.093 0.254 0.093 0.093 0.093 0.093 0.093 0.093 0.093]\n", " [0.093 0.093 0.254 0.093 0.093 0.093 0.093 0.093 0.093]\n", " [0.093 0.093 0.093 0.254 0.093 0.093 0.093 0.093 0.093]\n", " [0.093 0.093 0.093 0.093 0.254 0.093 0.093 0.093 0.093]\n", " [0.093 0.093 0.093 0.093 0.093 0.254 0.093 0.093 0.093]\n", " [0.093 0.093 0.093 0.093 0.093 0.093 0.254 0.093 0.093]\n", " [0.093 0.093 0.093 0.093 0.093 0.093 0.093 0.254 0.093]\n", " [0.093 0.093 0.093 0.093 0.093 0.093 0.093 0.093 0.254]]\n" ] } ], "source": [ "\"\"\" Create an ambiguous A matrix \"\"\"\n", "A_partially_ambiguous = softmax(A)\n", "print(A_partially_ambiguous.round(3))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "id": "w_altXG0hyYV" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEACAYAAAC3adEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAibklEQVR4nO3df1xV9eHH8RdQzOIiqSOdgKBhzkjUGToClYpEtNVkj2Zmy/LnmpszR+Htm222eihWu5JYTRmathVjbbYQ1OmmNl3bdGlrJvsBctmc5iSRi8Orcr9/+L18+3TRe0G4nPL9fDx8bPuccz7nfdjjwfuee34Q4vF4PIiIiPyf0K4OICIi1qJiEBERg4pBREQMKgYRETGoGERExKBiEBERg4pBREQMV3R1gI7y4YeNNDcH75GMXr1sHD/uCtr+rJ4DlMXKOcA6WaySA6yTpStyhIaG0KNHRKvLPjXF0NzsCWoxePdpBVbJAcrSGqvkAOtksUoOsE4Wq+QAfZUkIiIfo2IQERGDikFERAwqBhERMagYRETEEPBdSWVlZbz44ovU1tYSExPDnDlz+PKXv3zB9Y8dO0ZBQQG7du3ixIkT9O/fn1mzZpGdnd2yzpEjRxg7dqzPtgMHDqSsrKxtRyIiIh0ioGIoLy8nNzeXadOmkZ6eztatW8nLy6Nbt26MHz/eZ323283MmTNpaGhg3rx5XHvttWzevJn58+dz7tw57rjjDgAOHjwIQHFxMRER/38/bbdu3Tri2EREpB0CKgaHw0F2djZ2ux2A0aNHU19fT0FBQavFsHPnTg4ePEhpaSnJyckApKWlcfjwYVavXm0Uw2c/+1nS0tI66ng+0XpEhnNFt8+0ebvo6Mg2b3O26TQfNrjbvJ2IfPr5LYba2lqcTicLFiwwxrOysqioqKC2tpa4uDhjWUREBJMnT2bIkCHG+IABA9i7d2/L/37//fcZNGjQpeT/VLmi22fYdddXgrKvtDdeBxWDiLTC78XnqqoqAPr372+Mx8fHA1BdXe2zTWpqKk8++SQhISEtY2fOnGHHjh0MHDiwZezgwYM0NTUxZcoUhgwZws0338xzzz3HmTNn2nc0IiJyyfyeMTQ0NABgs9mMce81AZcrsPd7PPPMMxw6dIiVK1cC8N///hen00l9fT2PPPIIDz/8MG+//TarVq3igw8+ID8/v00H0quXzf9KHaw9X+FYSWfkt9LPxCpZrJIDrJPFKjnAOlmskgMCKAaP5+Lv7wgNvfhJh8fj4ZlnnuHll19mxowZZGZmAhAWFkZxcTExMTH069cPgJEjR3LllVeyfPlyHnroIRISEgI8DDh+3BXUd41ER0dy7FhDh88ZTJ2Rv6PnbC+rZLFKDrBOFqvkAOtk6YocoaEhF/xA7ferpMjI87+sGhsbjXHvmYJ3eWvcbjff+c53+NGPfsSMGTN49NFHW5aFh4eTmpraUgpeGRkZwP/fsSQiIsHltxi81xacTqcxXlNTYyz/OJfLxYMPPkhFRQWPPfaYUQpw/qJ2SUkJdXV1xnhTUxMAPXr0CPAQRESkI/kthvj4eGJjY9m0aZMxvmXLFhISEujbt6/PNufOneOhhx5i//79OBwOpk2b5rPOyZMneeKJJ3weZCsvLycyMpIbbrihrcciIiIdIKDnGObOnYvdbicqKoqMjAy2bdtGRUUFDocDgLq6OpxOJ4mJidhsNl577TX+8Ic/MHnyZPr06cO+ffta5goJCWHo0KEkJSVx66234nA4aG5uZuDAgezYsYP169ezcOHCi35FJSIinSegYsjJycHtdlNcXExpaSlxcXHk5+czYcIEALZv347dbmfdunWMGjWKzZs3A1BSUkJJSYkxV1hYGAcOHADgueee44UXXmD9+vV88MEH9OvXj+9///vcfffdHXmMIiLSBiEef7cdfUJ8Wu5KCuYDbror6fLJAdbJYpUcYJ0sn7i7kkRE5PKiYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDCoGERExqBhERMSgYhAREYOKQUREDAEXQ1lZGRMnTiQ5OZns7Gw2bNhw0fWPHTvG448/zi233MLw4cPJycmhoqLCZ72XX36Z22+/neTkZCZNmsSOHTvafBAiItJxAiqG8vJycnNzSU9PZ+XKlYwcOZK8vDw2bdrU6vput5uZM2eye/du5s2bR2FhITfeeCPz58+nrKysZb2ioiLy8/OZNGkSK1asIC4ujm984xvs27evQw5ORETa7opAVnI4HGRnZ2O32wEYPXo09fX1FBQU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RETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAwBF0NZWRkTJ04kOTmZ7OxsNmzYEPBO8vPzeeCBB3zGz549y/Llyxk7dixDhw7l3nvv5d133w14XhER6XgBFUN5eTm5ubmkp6ezcuVKRo4cSV5eHps2bfK77fr16ykuLm512dNPP83atWuZNWsWDoeDsLAwHnjgAWpra9t2FCIi0mGuCGQlh8NBdnY2drsdgNGjR1NfX09BQQHjx49vdZujR4+ybNkyysvLiYyM9Fn+z3/+k5KSEhYtWsSUKVMASE9PJysri6KiIhYvXtzeYxIRkUvg94yhtrYWp9PJuHHjjPGsrCyqqqou+One4XBw4MAB1qxZw+DBg32Wv/3225w7d46srKyWsfDwcDIyMti5c2dbj0NERDqI32KoqqoCoH///sZ4fHw8ANXV1a1uN3PmTDZu3MgXv/jFC84bFRVFz549feY9fPgwTU1N/tOLiEiH81sMDQ0NANhsNmM8IiICAJfL1ep2iYmJhIZeeHqXy+Uz50fnbWxs9BdNREQ6gd9rDB6P56LLL/bL/1LmDQkJadN8vXr5lkxni472vXbySdIZ+a30M7FKFqvkAOtksUoOsE4Wq+SAAIrBe+H445/gvWcKrV1YDoTNZmv1rMA7b2tnExdz/LiL5uaLl01Hio6O5Nixhg6fM5g6I39Hz9leVslilRxgnSxWyQHWydIVOUJDQy74gdrvx33vtQWn02mM19TUGMvbasCAAZw4cYL6+nqfeWNjYwkPD2/XvCIicmn8FkN8fDyxsbE+zyxs2bKFhIQE+vbt264d33zzzQBs3ry5ZcztdrN9+/aWZSIiEnwBPccwd+5c7HY7UVFRZGRksG3bNioqKnA4HADU1dXhdDpJTEwM+CugmJgYJk2axFNPPcWpU6eIj49nzZo1nDx5kpkzZ7b/iERE5JIEVAw5OTm43W6Ki4spLS0lLi6O/Px8JkyYAMD27dux2+2sW7eOUaNGBbzzJ598ku7du7Nq1SpOnTpFUlISa9asabkVNhh6RIZzRbfPtGvb9lwTONt0mg8b3O3aX7BY6WcS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ERcXR0pKCjabjby8PN555x2+8IUvdPq+f/zjH1NZWcmbb77ZcqeY90PF2bNnCQsLC+rfGhk5cqTPWEZGBnD+bCIYxeA9q/b+/Xev9PR0li5dSmVlZZcUw+bNmxk9enSXndX96U9/4re//S1LliwhJycHOP//V/fu3XniiSf46le/yvXXX98l2fQxN0Dtef345WLNmjUsWLCAYcOG8eMf/5hrr7026BlOnDjBhg0bOHr0qDF+ww03APDBBx8EJcfmzZv58MMPSU9PJykpiaSkJDZs2IDT6SQpKSmo98kfP36c0tJSnxsjvN/rB6u8vbfJut1uY9x7JtEVf5Tr6NGjHDhwoEtvCT18+DCAzweWm266CYC///3vQc/kpWIIUHteP345KC0tZenSpWRnZ1NUVNRlZ07Nzc0sXLjQ5x71Xbt2AQTtk9fixYv52c9+Zvy75ZZb6NOnT8t/D5aQkBCeeOIJXnnlFWO8vLycsLAwn5sGOst1111HTEwM5eXlxvhvfvMbrrjiii552G7//v0AQfsZtMb7YXLv3r3G+L59+4Dzb6DuKvoqqQ38vX78cnP8+HGefvppYmJimDp1KgcOHDCW9+vXL2in6T179uTee+9l1apVdOvWjSFDhrB3715++MMfcvfddxtv9e1Mre3nmmuuITw8nCFDhgQlg1fPnj2ZOnUq69evx2azcdNNN7F3715eeuklpk6d2nJHXWcLCQkhNze35TX8OTk5vPfee7z44ovcd999XfJVzl//+leuuuqqLv3lm5SURGZmJk8//TQNDQ0MHjyY9957j5UrVzJmzJgufcu0iqENcnJycLvdFBcXU1paSlxcHPn5+V32VG1Xe+utt/jvf//Lv/71L6ZOneqzfNmyZUG97c5ut/O5z32On/3sZ6xYsYI+ffowb948ZsyYEbQMVpOXl0fv3r15/fXXWbVqFb1792bevHlBv+tlwoQJhIeHs3LlSubMmUOvXr2YO3cuc+bMCWoOr//85z9ddifSRzkcDgoLC1m7di3Hjx8nJiaG6dOn+zyPE2x67baIiBh0jUFERAwqBhERMagYRETEoGIQERGDikFERAwqBhERMagYRETEoGIQERGDikFERAz/C9+AaHxpFMcaAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" ... and a noisy prior \"\"\"\n", "noisy_prior = softmax(prior) \n", "plot_beliefs(noisy_prior)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "id": "v2tpfddELr_t" }, "outputs": [ { "data": { "image/png": "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4xgwYIDjxhtvdHz99dderaG2ttYRGxvrePrpp432zZs3O2688UbHwYMHvVZLTU2NIzY21rFw4UKj/b777nOMHz/ea3Vc7OjRo47Y2FjH0KFDHQkJCc1Sw9tvv+246aabHKdPn26W7TtNnDjRMXHiREdtbW1d27p16xx33nlns9e2evVqx0033eTYv3+/17c9duxYx69+9SujbcKECY777rvP67VcjFNJHmrI68eb0r59+/Tcc88pJSVFqampXt22U1VVle655x7dddddRrvzluTvPi3flAICArR27VrNmDHDaL/uuut05swZr9VxsSeeeEKDBw/WoEGDmmX70oXTjJ07d9b111/fbDU4H24dP3688Q60iRMnavv27c1a2/Hjx7V8+fK6U1zedubMmboXhzq1bt1aJ0+e9HotFyMYPOTJ68e9qXv37tq+fbsefvhhl9ebe4vFYtETTzyhfv36Ge3bt2+XJEVGRnqtFn9/f/Xs2VPt27eXw+HQN998o5UrV2rPnj0aO3as1+pwys3N1SeffKL58+d7fdsXKywsVGBgoKZOnaqYmBjFxsbqySef9Oo1oM8++0wOh0MhISGaM2eO+vbtq379+umpp55SdXW11+qoT0ZGhvz9/TVnzpxm2f6kSZP03nvvqaCgQJWVldqyZYt27typn//8581SjxPXGDzUkNePN6Uf//jHXt2epw4cOKCVK1cqISFB3bt3b5Yatm3bptmzZ0uS4uPjdc8993h1+1999ZUWL16sxYsXu3zfiLcdOnRIlZWVuvfee/XAAw/o448/VkZGhoqLi7VmzRqvvMW4rKxMkjRv3jwNHz5cL774ogoLC7Vs2TKdOXNGS5YsafIa6nPixAnl5eUpJSVFrVq1apYaRo8erQ8++MAIpjFjxjT72x8IBg85GvD68WvNvn379MADDygsLEzPPPNMs9Vx8803a926dSosLNTy5cs1Y8YMvfLKK175EHQ4HHr88cc1bNgw49sJm4vNZlNISIh69uwpSYqNjVXbtm316KOPas+ePca3LDaVs2fPSpJuvfVWPfXUU5KkQYMGyeFwKD09XbNmzXL5si9vyM3NVW1trSZNmuT1bTs9+OCD+vDDD2W1WnXzzTfrwIEDeuGFF+qOxpsLweChhrx+/FqSn5+vefPmqUuXLsrKylKbNm2arZbw8HCFh4crNjZWFotFaWlp+vDDD3Xrrbc2+bZfffVVFRYWauPGjXV3ijl3Ks6dO6eAgACvftfIgAEDXNri4+MlXTia8EYwOI+qnd//7hQXF6clS5aosLCwWYJh69atGjJkSLMd1f3zn//UX/7yFy1evFjJycmSLvy+WrVqpSeffFK//OUvdeONNzZLbezmeqghrx+/VuTk5Gju3Lnq27evXn31Vf3kJz/xeg0nT55UXl6ejh07ZrTffPPNkqT//Oc/Xqlj69at+vbbbxUXF6eoqChFRUUpLy9PdrtdUVFRXr1P/sSJE8rNzXW5McJ5Xt9b4e28TbampsZodx5JNMeXch07dkwHDx5s1ltCjxw5IkkuOyz9+/eXJH3xxRder8mJYPBQQ14/fi3Izc3VkiVLlJSUpKysrGY7cqqtrdW8efNc7lF///33Jclre14LFizQG2+8Yfzccccd6tChQ91/e4ufn5+efPJJrVu3zmjPz89XQECAy00DTaV79+7q1KmT8vPzjfY///nPatGiRbM8bHfgwAFJ8tq/QX2cO5P79u0z2vfv3y/pwhuomwunkq6Au9ePX2tOnDihRYsWqVOnTpo4caIOHjxoLO/cubPXDtNDQ0M1YcIErVy5Ui1btlTv3r21b98+vfzyy7r33nuNt/o2pfq207p1awUGBqp3795eqcEpNDRUEydO1Nq1a2WxWNS/f3/t27dPL730kiZOnFh3R11T8/PzU2pqat1r+JOTk/Xxxx/rxRdf1H333dcsp3I+++wzXX/99c364RsVFaWEhAQtWrRIFRUV6tWrlz7++GOtWLFCQ4cObda3TBMMVyA5OVk1NTXKzs5Wbm6uwsPDlZ6e3mxP1Ta39957T//973/11VdfaeLEiS7Lly5d6tXb7qxWq37605/qjTfeUEZGhjp06KDZs2dr6tSpXqvB16Slpal9+/Z68803tXLlSrVv316zZ8/2+l0vo0aNUmBgoFasWKGZM2eqbdu2mjVrlmbOnOnVOpy++eabZrsT6WI2m02ZmZlavXq1Tpw4oU6dOiklJcXleRxv47XbAAAD1xgAAAaCAQBgIBgAAAaCAQBgIBgAAAaCAQBgIBgAAAaCAQBgIBgAAIb/A017rntxV1lgAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Do inference with the new, partially-ambiguous A matrix and the noised-up prior \"\"\"\n", "qs_new = infer_states(observation_index, A_partially_ambiguous, noisy_prior)\n", "plot_beliefs(qs_new)" ] }, { "cell_type": "markdown", "metadata": { "id": "xec2mpugs4rh" }, "source": [ "## **Action Selection and the Expected Free Energy** " ] }, { "cell_type": "markdown", "metadata": { "id": "n-3cHIUyqtfS" }, "source": [ "Now we'll write functions to compute the expected states $Q(s_{t+1}|u_t)$, expected observations $Q(o_{t+1}|u_t)$, the entropy of $P(o|s)$: $\\mathbf{H}\\left[\\mathbf{A}\\right]$, and the KL divergence between the expected observations and the prior preferences $\\mathbf{C}$." ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "id": "hBtftGDwq2VO" }, "outputs": [], "source": [ "\"\"\" define component functions for computing expected free energy \"\"\"\n", "\n", "def get_expected_states(B, qs_current, action):\n", " \"\"\" Compute the expected states one step into the future, given a particular action \"\"\"\n", " qs_u = B[:,:,action].dot(qs_current)\n", "\n", " return qs_u\n", "\n", "def get_expected_observations(A, qs_u):\n", " \"\"\" Compute the expected observations one step into the future, given a particular action \"\"\"\n", "\n", " qo_u = A.dot(qs_u)\n", "\n", " return qo_u\n", "\n", "def entropy(A):\n", " \"\"\" Compute the entropy of a set of conditional distributions, i.e. one entropy value per column \"\"\"\n", "\n", " H_A = - (A * log_stable(A)).sum(axis=0)\n", "\n", " return H_A\n", "\n", "def kl_divergence(qo_u, C):\n", " \"\"\" Compute the Kullback-Leibler divergence between two 1-D categorical distributions\"\"\"\n", " \n", " return (log_stable(qo_u) - log_stable(C)).dot(qo_u)" ] }, { "cell_type": "markdown", "metadata": { "id": "oUoKd1s6PZbT" }, "source": [ "Now let's imagine we're in some starting state, like (1,1)\n", "N.B. This is the generative process we're talking about -- i.e. the true state of the world" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "id": "H2hh-d6HNQ-R" }, "outputs": [ { "data": { "image/png": "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X3nac5OO+kwRdYCpGS/qviYAIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0ikrFgsFks9AoDp4UodIBFRB0hE1AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRnyFdXV3R1NQU1157bTQ0NERnZ2epJzFFhw8fjquvvjq+/fbbUk9hkn777bd49913o7m5OZYtWxb19fWxbdu2KBQKpZ42a8pLPSCj7u7u2LRpUzzwwANx8803R09PT2zevDnOP//8WLVqVannMQlff/11rFu3LkZHR0s9hSlob2+PnTt3xkMPPRQ33XRT9Pf3x6uvvhpfffVV7Nq1q9TzZoXvfpkBK1asiGuuuSZefvnlU8daW1vjyy+/jD179pRwGRMZHR2N9957L3bs2BHnnntu/PTTT7F///5YsGBBqacxgWKxGMuXL4+mpqZoa2s7dby7uzs2bNgQnZ2dsXTp0hIunB1uv0yzwcHBGBgYiJUrV445ftttt0VfX18MDg6WaBmT0dvbGy+99FI8+OCDsWnTplLPYQpGRkbijjvuiNtvv33M8csvvzwiIgYGBkoxa9a5/TLN+vr6IiKitrZ2zPGampqIiOjv74/q6upZ38Xk1NXVRU9PT1x00UXx/vvvl3oOU1BRURHPPvvsX4739PRERMQVV1wx25NKQtSn2YkTJyLiP//A/mju3LkREf+oBzZ/RxdffHGpJzCNDh06FG+88UbU19dHXV1dqefMCrdfptlEjyjmzPFXDrOht7c3Hn744aiqqootW7aUes6sUZhpVllZGRH/ub/3R79fof9+Hpg53d3dsXbt2rjsssvirbfeigsuuKDUk2aNqE+z3++l//mhzNGjR8ecB2bG7t27Y+PGjXH99dfHO++8E5dcckmpJ80qUZ9mNTU1UVVVFR9++OGY43v37o0lS5bEwoULS7QM8uvo6IgXXnghGhoaor29/R/5P2MPSmdAS0tLPPPMMzFv3ry45ZZbYt++fbFnz54xn1sHptcPP/wQW7dujUWLFsWaNWviiy++GHN+8eLFceGFF5Zo3ewR9Rlwzz33xMmTJ+PNN9+Mjo6OqK6uju3bt0djY2Opp0Fan332Wfz8888xNDQUa9as+cv5F198Me68884SLJtdfqMUIBH31AESEXWAREQdIBFRB0hE1AESEXWAREQdIBFRB0hE1AES+X+Emhlu+AfupgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Get state index, create state vector for (1,1) \"\"\"\n", "\n", "state_idx = grid_locations.index((1,1))\n", "state_vector = utils.onehot(state_idx, n_states)\n", "plot_point_on_grid(state_vector, grid_locations)" ] }, { "cell_type": "markdown", "metadata": { "id": "VOLwt7CgUW61" }, "source": [ "And let's furthermore assume we start with the (accurate) belief about our location, that we are in location (1,1). So let's just make our current $Q(s_t)$ equal to the true state vector. You could think of this as if we just did one 'step' of inference using our current observation along with precise `A`/`B` matrices." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "id": "Pv9UFpcuUY5F" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Make qs_current identical to the true starting state \"\"\" \n", "qs_current = state_vector.copy()\n", "plot_beliefs(qs_current, title_str =\"Where do we believe we are?\")" ] }, { "cell_type": "markdown", "metadata": { "id": "jBXAqRmNPv07" }, "source": [ "And we prefer to be in state (1,2). So we express that as high probability over the corresponding entry of the $\\mathbf{C}$ vector -- that happens to be index 5." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "id": "Ya77s9O9WlMs" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_grid(grid_locations)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "id": "IMD0HkBCPsXL" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Create a preference to be in (1,2) \"\"\"\n", "\n", "desired_idx = grid_locations.index((1,2))\n", "\n", "C = utils.onehot(desired_idx, n_observations)\n", "\n", "plot_beliefs(C, title_str = \"Preferences\")" ] }, { "cell_type": "markdown", "metadata": { "id": "JPg-sC00QCLI" }, "source": [ "Now to keep things simple, let's evaluate the expected free energies $\\mathbf{G}$ of just two actions that we could take from our current position -- either moving LEFT or moving RIGHT. Let's remind ourselves of what action indices those are" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "id": "ggCUDAf4QUQg" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action index of moving left: 2\n", "Action index of moving right: 3\n" ] } ], "source": [ "left_idx = actions.index(\"LEFT\")\n", "right_idx = actions.index(\"RIGHT\")\n", "\n", "print(f'Action index of moving left: {left_idx}')\n", "print(f'Action index of moving right: {right_idx}')" ] }, { "cell_type": "markdown", "metadata": { "id": "w3G4KPVyQhoF" }, "source": [ "And now let's use the functions we've just defined, in combination with our `A`, `B`, `C` arrays and our current posterior `qs_current`, to compute the expected free energies for the two actions" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "id": "FNeEYmIETAZh" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Expected free energy of moving left: 36.841361487904734\n", "\n", "Expected free energy of moving right: 0.0\n", "\n" ] } ], "source": [ "\"\"\" Compute the expected free energies for moving left vs. moving right \"\"\"\n", "G = np.zeros(2) # store the expected free energies for each action in here\n", "\n", "\"\"\"\n", "Compute G for MOVE LEFT here \n", "\"\"\"\n", "\n", "qs_u_left = get_expected_states(B, qs_current, left_idx)\n", "# alternative\n", "# qs_u_left = B[:,:,left_idx].dot(qs_current)\n", "\n", "H_A = entropy(A)\n", "qo_u_left = get_expected_observations(A, qs_u_left)\n", "# alternative\n", "# qo_u_left = A.dot(qs_u_left)\n", "\n", "predicted_uncertainty_left = H_A.dot(qs_u_left)\n", "predicted_divergence_left = kl_divergence(qo_u_left, C)\n", "G[0] = predicted_uncertainty_left + predicted_divergence_left\n", "\n", "\"\"\"\n", "Compute G for MOVE RIGHT here \n", "\"\"\"\n", "\n", "qs_u_right = get_expected_states(B, qs_current, right_idx)\n", "# alternative\n", "# qs_u_right = B[:,:,right_idx].dot(qs_current)\n", "\n", "H_A = entropy(A)\n", "qo_u_right = get_expected_observations(A, qs_u_right)\n", "# alternative\n", "# qo_u_right = A.dot(qs_u_right)\n", "\n", "predicted_uncertainty_right = H_A.dot(qs_u_right)\n", "predicted_divergence_right = kl_divergence(qo_u_right, C)\n", "G[1] = predicted_uncertainty_right + predicted_divergence_right\n", "\n", "\n", "\n", "\"\"\" Now let's print the expected free energies for the two actions, that we just calculated \"\"\"\n", "print(f'Expected free energy of moving left: {G[0]}\\n')\n", "print(f'Expected free energy of moving right: {G[1]}\\n')" ] }, { "cell_type": "markdown", "metadata": { "id": "w8JbcjuMR5FU" }, "source": [ "Now let's use formula for the posterior over actions, i.e. \n", "\n", "\n", "$$ \\begin{align}\n", "Q(u_t) = \\sigma(-\\mathbf{G})\n", "\\end{align} $$\n", "\n", "to compute the probabilities of each action" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "id": "tpY1lva_TwuM" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Probability of moving left: 9.999999999999965e-17\n", "Probability of moving right: 1.0\n" ] } ], "source": [ "Q_u = softmax(-G)\n", "\n", "\"\"\" and print the probability of each action \"\"\"\n", "print(f'Probability of moving left: {Q_u[0]}')\n", "print(f'Probability of moving right: {Q_u[1]}')" ] }, { "cell_type": "markdown", "metadata": { "id": "iLk1LqB9X3fC" }, "source": [ "For usefulness later on, let's wrap the expected free energy calculations into a function" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "id": "tkdwjTLPX2ti" }, "outputs": [], "source": [ "def calculate_G(A, B, C, qs_current, actions):\n", "\n", " G = np.zeros(len(actions)) # vector of expected free energies, one per action\n", "\n", " H_A = entropy(A) # entropy of the observation model, P(o|s)\n", "\n", " for action_i in range(len(actions)):\n", " \n", " qs_u = get_expected_states(B, qs_current, action_i) # expected states, under the action we're currently looping over\n", " qo_u = get_expected_observations(A, qs_u) # expected observations, under the action we're currently looping over\n", "\n", " pred_uncertainty = H_A.dot(qs_u) # predicted uncertainty, i.e. expected entropy of the A matrix\n", " pred_div = kl_divergence(qo_u, C) # predicted divergence\n", "\n", " G[action_i] = pred_uncertainty + pred_div # sum them together to get expected free energy\n", " \n", " return G" ] }, { "cell_type": "markdown", "metadata": { "id": "midF2HSEswHJ" }, "source": [ "## **Complete Recipe for Active Inference**\n", "\n", "1. Sample an observation $o_t$ from the current state of the environment\n", "2. Perform inference over hidden states i.e., optimize $q(s)$ through free-energy minimization\n", "3. Calculate expected free energy of actions $\\mathbf{G}$ \n", "4. Sample action from the posterior over actions $Q(u_t) \\sim \\sigma(-\\mathbf{G})$.\n", "5. Use the sampled action $a_t$ to perturb the generative process and go back to step 1.\n", "\n", "\n", "---\n", "\n", "Let's start by creating a class that will represent the Grid World environment (i.e., _generative process_) that our active inference agent will navigate within. Note that we don't need to specify the generative process in terms of `A` and `B` matrices - the generative process will be as arbitrary and complex as the environment is. The `A` and `B` matrices are just the agent's _representation_ of the world and the task, which in this case happen to capture the Markovian, noiseless dynamics of the world perfectly.\n" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "id": "az0jx39hsySI" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting state is (0, 0)\n" ] } ], "source": [ "class GridWorldEnv():\n", " \n", " def __init__(self,starting_state = (0,0)):\n", "\n", " self.init_state = starting_state\n", " self.current_state = self.init_state\n", " print(f'Starting state is {starting_state}')\n", " \n", " def step(self,action_label):\n", "\n", " (Y, X) = self.current_state\n", "\n", " if action_label == \"UP\": \n", " \n", " Y_new = Y - 1 if Y > 0 else Y\n", " X_new = X\n", "\n", " elif action_label == \"DOWN\": \n", "\n", " Y_new = Y + 1 if Y < 2 else Y\n", " X_new = X\n", "\n", " elif action_label == \"LEFT\": \n", " Y_new = Y\n", " X_new = X - 1 if X > 0 else X\n", "\n", " elif action_label == \"RIGHT\": \n", " Y_new = Y\n", " X_new = X +1 if X < 2 else X\n", "\n", " elif action_label == \"STAY\":\n", " Y_new, X_new = Y, X \n", " \n", " self.current_state = (Y_new, X_new) # store the new grid location\n", "\n", " obs = self.current_state # agent always directly observes the grid location they're in \n", "\n", " return obs\n", "\n", " def reset(self):\n", " self.current_state = self.init_state\n", " print(f'Re-initialized location to {self.init_state}')\n", " obs = self.current_state\n", " print(f'..and sampled observation {obs}')\n", "\n", " return obs\n", " \n", "env = GridWorldEnv()" ] }, { "cell_type": "markdown", "metadata": { "id": "N9dSgKgkNXWp" }, "source": [ "Now equipped with an environment and a generative model (our `A`, `B`, `C`, and `D`), we can code up the entire active inference loop\n", "\n", "---\n", "\n", "To have everything in one place, let's re-create the whole generative model\n" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "id": "ML3UMFXlNNXA" }, "outputs": [], "source": [ "\"\"\" Fill out the components of the generative model \"\"\"\n", "\n", "A = np.eye(n_observations, n_states)\n", "\n", "B = create_B_matrix()\n", "\n", "C = utils.onehot(grid_locations.index( (2, 2) ), n_observations) # make the agent prefer location (2,2) (lower right corner of grid world)\n", "\n", "D = utils.onehot(grid_locations.index( (1,2) ), n_states) # start the agent with the prior belief that it starts in location (1,2) \n", "\n", "actions = [\"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"STAY\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "S_cDKHlJQpxl" }, "source": [ "Now let's initialize the environment with starting state `(1,2)`, so that the agent has accurate beliefs about where it's starting." ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "id": "wLq3n2bDQwRh" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting state is (1, 2)\n" ] } ], "source": [ "env = GridWorldEnv(starting_state = (1,2))" ] }, { "cell_type": "markdown", "metadata": { "id": "bYSh6_UPRKuS" }, "source": [ "Let's write a function that runs the whole active inference loop, and then run it for `T = 5` timesteps." ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "id": "AhC96iFoRENl" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Re-initialized location to (1, 2)\n", "..and sampled observation (1, 2)\n", "Time 0: Agent observes itself in location: (1, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 1: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEUCAYAAADHgubDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAvLUlEQVR4nO3deVxU9cIG8AdQUxlCMdQrsoUNJoKSgiKbC6LoTYtSQNBKvVIv5UrieM00LcH0krgvF801RBM3UENFTV/X0lLLUpABt1AUGUwB57x/+M5cjiwzbMPczvP9fPx85De/c84ziM+c+c2ZwUQQBAFERCQJpg0dgIiIDIelT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSrwfTpk2Ds7Oz6E/nzp3Rt29fzJkzBwUFBTXa78iRI9G3b99yx6mJ3bt3o2/fvnB1dcWUKVNqtI/qWLx4MZydnZGbm1vvx3qeWq3Wedxvv/0Wzs7OOHXqlIFSVS4nJ0f799zcXDg7O2Px4sUNmKhqZfNWZ97zP8/G4pNPPsHIkSMbOka9adTQAf7KFAoFWrZsCQB48uQJrl69iqSkJPz888/YsmULzMzMarX/kJAQeHl5VXu7+/fvQ6FQoH379pgxYwbs7e1rlcOYqVQqvPvuu/D398dHH33U0HF0GjNmDKytrREbGwsAsLKywvz582v84F7fli1bhh07duC7776rct727dsxe/Zs/PTTT9qx999/H3/++Wd9R6yW5ORkbN26FZ6eng0dpd6w9OtRQEAA2rdvLxpzcHDA7NmzcfToUfTp06dW+3d3d4e7u3u1t8vKykJJSQnCw8MREhJSqwzG7sGDB/j555/h7+/f0FH08v333+PNN9/Uft28eXMMHTq0ARNV7X//93/x9OlTnfPOnDmDJ0+eiMa8vb3rK1a1PX36FMuXL8eSJUsaOkq94/KOgfXo0QMA8PvvvzdYhpKSEgCAubl5g2UgMhZPnjzBm2++icWLF2Po0KFo06ZNQ0eqVyx9A7t9+zYAwM7OTjR+9epVREVFoXv37ujSpQtCQ0Nx7NixKvdV0Zr+7du3MXXqVPTs2ROurq544403sGvXLtE2o0aNAvBs+Umzzi4IApYsWYIBAwbA1dUVvXr1wscff4xbt27pvE+XLl3CRx99hF69esHFxQVeXl6YMmWK9r6WlZmZiVGjRsHNzQ29e/fGokWLtA9CGvfv38esWbPg6+uLzp07Y8CAAVi1apXojLKy1wjKjp86dQr9+vUDACxZsqTaryn8+eefWLhwIfr27at9TWbBggXlliSKi4uxePFiBAYGws3NrcK82dnZiImJgZ+fHzp37gxPT0+8//772gd/zdo9AOzYsUP7+kJla/rJyckYOnQoXF1d0bNnT0yZMkV03zTbpaSkID4+Hn5+fnB1dcWwYcNw8uRJnfddpVJh4cKFGDhwIFxdXeHu7o7hw4fj4MGD2jl9+/bF6dOncePGjSpfdxg5ciR27NgBAHB2dsa0adO042XX9EeOHInIyEikp6djyJAhcHV1xeDBg3HkyBGoVCrMnDkTHh4e8PLywsyZM/H48WPRcX788Ue899572mfAo0ePFi0nVebJkydQqVSIj49HXFwcGjX6ay+A/LXvXQN7+PAh8vPzATw7u7527Rrmzp0LFxcX0Q/7lStXMGLECLz00kuIjIxE48aNsWfPHowbNw4LFy7EoEGD9DrenTt3MGzYMAiCgJEjR8LS0hIHDx7Exx9/jD/++ANjx45FSEgI2rRpgxUrViAkJATdunWDlZUVVqxYgaVLlyI8PFxbjuvXr8fFixexZ8+eSl9/0GS3t7fHuHHj0KxZM/zwww/YuXMnsrOzsW3bNtH8CRMmoEePHoiJicHp06exbNky3Lp1S7uGXVBQgNDQUNy4cQOhoaFwdHTE8ePHsXDhQly+fBlfffWV3t9/JycnKBQKzJs3D/3790f//v1hZWWl17bFxcV47733cP78eQQHB6Nz58746aefsHr1apw7dw7r169H48aNAQBRUVE4evQoXn/9dbz33nv46aefsHDhQty7dw8KhQJ3797F8OHDIZPJEBERgZYtW+KXX37B1q1bcenSJRw6dEi7dj916lR0794dw4cPh5OTU7liA4C4uDgkJibCy8sLU6dOxR9//IGNGzfixIkTSE5OFi0pLlq0CM2aNcPo0aNRUlKCxMREREZGIiMjQ/t60/MEQUBkZCQuX76MiIgI2NnZ4fbt2/jmm2/w4YcfIiUlBc7Ozpg+fToWLlyofY2ostcd3n//fajVapw9exbz588vd8JT1qVLl/Djjz9i1KhRsLCwwMqVKzFx4kS8+uqraNasGSZPnoyzZ88iKSkJrVu3xocffggAOH78OCIjI9GxY0dM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 2: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEUCAYAAADHgubDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAv/klEQVR4nO3deXxM98IG8CcJikwaokGRrWGiIiEl0chmiRBuVaMkhFA0qTetNRXjumpriXJTUbsbam3EEltiCYLyopZorS2JTKwNITJpSWLO+4d35ubIMlknc+95vp+Pz0d+8zvnPBPxzJnfnJkYCYIggIiIJMG4tgMQEZH+sPSJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPo1YOrUqXBwcBD9ad++PXr06IE5c+YgJyenUvsdPnw4evToUew4lbFnzx706NEDTk5OmDx5cqX2URFLliyBg4MD7ty5U+PHep1ardZ53B07dsDBwQFnzpzRU6rSZWZmav9+584dODg4YMmSJbWYqGxF81Zk3us/z7XpxIkTGDp0KDp06AAXFxeMHDkSqamptR2rRtSp7QD/zRQKBRo3bgwAePHiBW7evIm4uDj8+uuv2LJlC0xMTKq0/8DAQLi7u1d4uydPnkChUKBVq1aYPn06bGxsqpTDkKlUKowcORI+Pj744osvajuOTqNHj4alpSXmz58PALCwsMCCBQsq/eBe05YtW4adO3fi0KFDZc7bvn07Zs2ahV9++UU79tlnn+Gvv/6q6Yg6nT17Fp9++inatGmDiRMnorCwEJs3b8awYcOwefNmODs713bEasXSr0G+vr5o1aqVaMzW1hazZs3C8ePH0b179yrt38XFBS4uLhXeLj09HQUFBQgODkZgYGCVMhi6p0+f4tdff4WPj09tRymXn376CR999JH264YNG+LDDz+sxURl+9///V+8fPlS57yff/4ZL168EI15eHjUVKwK+eabb/D2229j69ataNCgAQBgwIAB6Nu3L6Kjo7F27dpaTli9uLyjZ126dAEA/P7777WWoaCgAABgampaaxmIDEFOTg6uX7+OPn36aAsfAN566y24urri4sWLtZiuZrD09ezBgwcAAGtra9H4zZs3ER4ejs6dO6NDhw4ICgrCiRMnytxXSWv6Dx48wJQpU/D+++/DyckJAwYMwO7du0XbhISEAHi1/KRZ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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 3: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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szSGkgMwnCyGkgNgltIYSg7AsLJURmXy61pHZ+lr5uBlMplo3NTUFACgUqlKrKNSqUosr1mntOV1adzY9IXXqaomTUrmrw2GkgMwnCyGkgNgltIYSg6g+rO479lZrdvTpSZ+lzqndwRBKH8DxiU3Ud46pS1PRET6obOBzczMADw7BbM4zRG75vbiZDJZieU12yjtFQAREemHztLXzOUrlUrReHp6uuj259fJyMgoccSfnp5e6vJERKQfOkvfxsYGrVq1KnFO/uHDh9G6dWu0aNGixDoeHh549OgRzpw5ox3Lzs7GhQsX0K1bt2qITURElVGh8/TDwsKgUChgbm6O7t274+jRo0hMTERUVBSAZ4WuVCrRpk0byGQyuLi4wNXVFRMnTkR4eDgaNWqEpUuXwszMDMHBwTV6h4iIqGxGgq53av/Ptm3bEBMTgzt37sDKygqjR4/GO++8AwDYtWsXFAoFNmzYgC5dugAAcnNzMW/ePCQlJUGtVqNTp06YMmUKXnvttRq7M0REVL4Klz4REf3z8fxJIiIJYekTEUkIS7+YF718dE379ddf4eDggLt379bK/tVqNbZu3Yq3334bzs7O8PHxwdy5cyv1qeqqEgQB69evh5+fH5ycnNC/f3/s27dP7zme98knn6B37961su+ioiI4OTnB3t5e9MfZ2VnvWX744QcEBwejQ4cO8PDwwOzZs0v9rE5NOnfuXInfRfE/u3fv1muerVu3wt/fHx07dsTbb7+NvXv36nX/ZanQ2TtSoLl89AcffAAPDw8kJSUhIiIC9evXL/VKojXtxo0bCA0NRVFRkd73rbF27VosXrwYI0eOhJubG9LS0hAdHY3r16/jm2++0WuWVatWITo6Gp9++ik6duyIkydPIjw8HCYmJujbt69es2js2bMHR44cgbW1da3sPy0tDU+ePEFkZCRat26tHdf3p94vXbqE4cOHo2fPnlixYgXS09Px3//+F9nZ2doz/PTBwcEBsbGxojFBEPCf//wHf/31F7y9vfWWJTY2FjNmzMCIESPg6emJEydO4LPPPkPdunXh7++vtxylEkgQBEHw8fERxo8fLxobN26c0KdPH73mKCwsFDZt2iQ4OzsLrq6uglwuF+7cuaPXDIIgCGq1WnBxcRFmzJghGj9w4IAgl8uFa9eu6S1LQUGB4OLiIsyaNUs0PmTIECE4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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 4: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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0KNHD/z666+4e/dumcd79uwZYmJi0LlzZwwZMqTW7pcp4fJOLXrjjTd0rt4JDg5GUFAQ5syZg9TUVO21y5s2bcKmTZvK3I8h6+oPHjxAQUEB0tLSkJaWVun9TJs2DR9++CE+//xzzJs3T7sENWTIENja2pa7nZmZGR48eIDVq1cjIyMDSqUSt27dgvD/n9itKQqNV199VfS15gFFsx5948YN0X96DVtbW7z88su4efNmuVlq0o0bN2BnZ6ddwtFo0KAB7OzstDlu3ryJZs2aQSaT6eQt/X0rLi5GXFwcLl26BKVSiRs3bmjX/F/8HunLBfynDEtzcnLC999/jwcPHmjHXlzOatCggUHHrFevHr755hucOXMG2dnZUCqV2qUmoRY/jb1JkyaoV+8/taRZVmzWrJlonoWFhTaHUqkEACxYsAALFiwoc7+3bt1CixYtdMa//PJLZGRkYMuWLdql2EePHgF4/ppOXl4emjRpon2A/m/A0jeypk2bolu3bvjuu++Qn5+v/Y8fHh6uc3ar0a5dO7371eynT58+CAsLK3OOnZ1dudu3b98e3377LY4fP44jR47g+PHjiI+Px/r165GYmCg6Sy0tJSUFUVFRaN68Od58803tC5Xff/89Vq9erTO/9Nkp8J8C0fznrqhQ1Gq1Tgm/yJDLBw1haA5Djnf27FmMGTMGjRs3hre3N9555x106NABSqUSn376aY3mAoD69etrL4+sSlnl5eVh8ODB+OOPP+Dj44OePXuiffv2aN26NQYPHlzp/VVG6cIv7cWfm9I093vChAno1KlTmXNePNnQOH78OIqLi8u8X19++SW+/PJLHDp0SOfk7a+MpV8HND+k5ubmaN26NYDnpeft7S2ad/XqVdy4cQONGjXSu08bGxs0atQIJSUlOvu5desWLl++XO5+nj17hitXrkAmk6FXr17ap9IpKSmYNGkSkpKStFdcvGjx4sVwcHDAjh07RMsIe/fuLXP+zZs38dprr2m/zsrKAvCfM/7WrVtrx0rLzc2FSqXC3/72NwD/KbOioiLRPM3SVHW1bt0a58+fR3FxseiBpqioCDdu3NC+MNiqVSucPHkShYWFoktgL126hISEBHz44YeIj49Hw4YNsX//ftGZ96pVqyqdS1M+mZmZ6Nixo+i2rKwsNG7cGNbW1lCpVJXet8aWLVtw48YNbNiw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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\" Write a function that, when called, runs the entire active inference loop for a desired number of timesteps\"\"\"\n", "\n", "def run_active_inference_loop(A, B, C, D, actions, env, T = 5):\n", "\n", " \"\"\" Initialize the prior that will be passed in during inference to be the same as `D` \"\"\"\n", " prior = D.copy() # initial prior should be the D vector\n", "\n", " \"\"\" Initialize the observation that will be passed in during inference - hint use env.reset()\"\"\"\n", " obs = env.reset() # initialize the `obs` variable to be the first observation you sample from the environment, before `step`-ing it.\n", "\n", " for t in range(T):\n", "\n", " print(f'Time {t}: Agent observes itself in location: {obs}')\n", "\n", " # convert the observation into the agent's observational state space (in terms of 0 through 8)\n", " obs_idx = grid_locations.index(obs)\n", "\n", " # perform inference over hidden states\n", " qs_current = infer_states(obs_idx, A, prior)\n", "\n", " plot_beliefs(qs_current, title_str = f\"Beliefs about location at time {t}\")\n", "\n", " # calculate expected free energy of actions\n", " G = calculate_G(A, B, C, qs_current, actions)\n", " \n", " # compute action posterior\n", " Q_u = softmax(-G)\n", "\n", " # sample action from probability distribution over actions\n", " chosen_action = utils.sample(Q_u)\n", "\n", " # compute prior for next timestep of inference\n", " prior = B[:,:,chosen_action].dot(qs_current) \n", "\n", " # update generative process\n", " action_label = actions[chosen_action]\n", "\n", " obs = env.step(action_label)\n", " \n", " return qs_current\n", "\n", "\"\"\" Run the function we just wrote, for T = 5 timesteps \"\"\"\n", "qs = run_active_inference_loop(A, B, C, D, actions, env, T = 5)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "W9V2E_DwWhBl" }, "source": [ "## **Planning**\n", "\n", "But there's a problem. Imagine we started the agent at the top left corner (coordinate `(0,0)`) rather than one step away from the target location" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "id": "2w4TX0q2WcFl" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting state is (0, 0)\n", "Re-initialized location to (0, 0)\n", "..and sampled observation (0, 0)\n", "Time 0: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 1: Agent observes itself in location: (0, 1)\n" ] }, { "data": { "image/png": "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D5cuXUJubi78/PxQUFCg/d1/9OgR+vbti59++gl37typt8x/NhJ5PdMwXnnllXJn7wQEBMDf3x/z5s1Damqq9tzlTZs2YdOmTRVuR5d59fv376OwsBDp6elIT0+v8XamT5+O9957D5999hkWLFignYIaOXIkrK2tK13PxMQE9+/fx+rVq3H58mUolUrcvHkTwn+v2K0pCo0XX3xR9LPmCUUzH339+nXRf3oNa2trPP/887hx40alWfTp+vXrsLGx0U7haDRp0gQ2NjbaHDdu3ECrVq0gk8nK5S37uJWUlCAmJgYXL16EUqnE9evXtXP+zz5G1eUC/leGZTk4OODrr7/G/fv3tWPPTmc1adJEp302atQIX331Fc6cOYOcnBwolUrtVJNQj1djb9GihWiaRTOt2KpVK9FyZmZm2hxKpRIAsGjRIixatKjC7d68efMv/watrlj6BtayZUv06tULhw4dQkFBgfY/fkhISLmjW41OnTpVu13NdgYOHIjg4OAKl7Gxsal0/c6dO+PgwYM4ceIEjh49ihMnTiA2Nhbr169HYmKi6Ci1rJSUFERGRqJ169Z49dVXtW9Ufv3111i9enW55csenQL/KxDNf+6qCkWtVpcr4WfpcvqgLnTNocv+zp49i/Hjx6N58+bo3bs33njjDXTp0gVKpRKffPKJXnMBQOPGjbWnR2peTdREfn4+RowYgd9++w2enp7o168fOnfujPbt22PEiBE13l5NVDav/uzvTVma+z1p0iR07969wmWePdiQMpZ+A9D8kpqamqJ9+/YAnpZe7969RctduXIF169fR7NmzardppWVFZo1a4bS0tJy27l58yYuXbpU6XaePHmCn3/+GTKZDP3799e+lE5JScGUKVOQlJSkPePiWUuXLoWdnR127NghmkbYu3dvhcvfuHEDL730kvbn7OxsAP874m/fvr12rKy8vDyoVCr87W9/A/C/MisuLhYtp5maqqv27dsjMzMTJSUloiea4uJiXL9+XfvGYLt27XDq1CkUFRWJToG9ePEiEhIS8N577yE2NhZNmzbF/v37RUfeq1atqnEuzSvHrKwsdOvWTXRbdnY2mjdvDktLS6hUqhpvW+PLL7/E9evXsWHDBtGH/7777rtab7M+af4PaZ5Uy/rhhx9QUFCApk2bNkQ0o8Q5fQO7e/cuTp8+jZdffhkWFhZo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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 2: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 3: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 4: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "D = utils.onehot(grid_locations.index((0,0)), n_states) # let's have the agent believe it starts in location (0,0)\n", "\n", "env = GridWorldEnv(starting_state = (0,0))\n", "qs = run_active_inference_loop(A, B, C, D, actions, env, T = 5)" ] }, { "cell_type": "markdown", "metadata": { "id": "r0sC3oyIW_f7" }, "source": [ "Because the expected free energy of each action is only evaluated for one timestep in the future, the agent has no way of knowing which action to initially take, to get closer to its final \"goal\" of `(2,2)`. This is because the expected divergence term for all actions $\\operatorname{D}_{KL}(Q(o|u) \\parallel \\mathbf{C})$ is identical for all considered actions (which are just 1-step moves away from starting from `(0,0)` ). This speaks to the importance of planning, or _multiple timestep policies_. \n" ] }, { "cell_type": "markdown", "metadata": { "id": "SQoxPD7g3VtT" }, "source": [ "Now let's do active inference with multi-step policies\n", "\n", "We can rely on a useful function from `pymdp`'s `control` module called `construct_policies()` to automatically generate a list of all the policies we want to entertain, for a given number of control states (actions) and a desired temporal horizon. " ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "id": "DPuFHY1kW4K2" }, "outputs": [], "source": [ "from pymdp.control import construct_policies" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "id": "EsL5zFC93oCC" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of policies for 5 possible actions and a planning horizon of 4: 625\n" ] } ], "source": [ "policy_len = 4\n", "n_actions = len(actions)\n", "\n", "# we have to wrap `n_states` and `n_actions` in a list for reasons that will become clear in Part II\n", "all_policies = construct_policies([n_states], [n_actions], policy_len = policy_len)\n", "\n", "print(f'Total number of policies for {n_actions} possible actions and a planning horizon of {policy_len}: {len(all_policies)}')" ] }, { "cell_type": "markdown", "metadata": { "id": "QKA_YdDS5Qo2" }, "source": [ "Let's re-write our expected free energy function, but now we loop over policies (sequences of actions), rather than actions (1-step policies)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "gtv6cvy2qvtT" }, "outputs": [], "source": [ "def calculate_G_policies(A, B, C, qs_current, policies):\n", "\n", " G = np.zeros(len(policies)) # initialize the vector of expected free energies, one per policy\n", " H_A = entropy(A) # can calculate the entropy of the A matrix beforehand, since it'll be the same for all policies\n", " qs_pi_t = None\n", " for policy_id, policy in enumerate(policies): # loop over policies - policy_id will be the linear index of the policy (0, 1, 2, ...) and `policy` will be a column vector where `policy[t,0]` indexes the action entailed by that policy at time `t`\n", "\n", " t_horizon = policy.shape[0] # temporal depth of the policy\n", "\n", " G_pi = 0.0 # initialize expected free energy for this policy\n", "\n", " for t in range(t_horizon): # loop over temporal depth of the policy\n", "\n", " action = policy[t,0] # action entailed by this particular policy, at time `t`\n", "\n", " # get the past predictive posterior - which is either your current posterior at the current time (not the policy time) or the predictive posterior entailed by this policy, one timstep ago (in policy time)\n", " if t == 0:\n", " qs_prev = qs_current \n", " else:\n", " qs_prev = qs_pi_t\n", " \n", " qs_pi_t = get_expected_states(B, qs_prev, action) # expected states, under the action entailed by the policy at this particular time\n", " qo_pi_t = get_expected_observations(A, qs_pi_t) # expected observations, under the action entailed by the policy at this particular time\n", "\n", " kld = kl_divergence(qo_pi_t, C) # Kullback-Leibler divergence between expected observations and the prior preferences C\n", "\n", " G_pi_t = H_A.dot(qs_pi_t) + kld # predicted uncertainty + predicted divergence, for this policy & timepoint\n", "\n", " G_pi += G_pi_t # accumulate the expected free energy for each timepoint into the overall EFE for the policy\n", "\n", " G[policy_id] += G_pi\n", " \n", " return G\n" ] }, { "cell_type": "markdown", "metadata": { "id": "kYYRyszL9L00" }, "source": [ "Let's write a function for computing the action posterior, given the posterior probability of each policy:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "id": "VvxYGhuwsSp9" }, "outputs": [], "source": [ "def compute_prob_actions(actions, policies, Q_pi):\n", " P_u = np.zeros(len(actions)) # initialize the vector of probabilities of each action\n", "\n", " for policy_id, policy in enumerate(policies):\n", " P_u[int(policy[0,0])] += Q_pi[policy_id] # get the marginal probability for the given action, entailed by this policy at the first timestep\n", " \n", " P_u = utils.norm_dist(P_u) # normalize the action probabilities\n", " \n", " return P_u" ] }, { "cell_type": "markdown", "metadata": { "id": "Do8CftUd6Vq2" }, "source": [ "Now we can write a new active inference function, that uses temporally-deep planning" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "id": "d4YrbkGWslC-" }, "outputs": [], "source": [ "def active_inference_with_planning(A, B, C, D, n_actions, env, policy_len = 2, T = 5):\n", "\n", " \"\"\" Initialize prior, first observation, and policies \"\"\"\n", " \n", " prior = D # initial prior should be the D vector\n", "\n", " obs = env.reset() # get the initial observation\n", "\n", " policies = construct_policies([n_states], [n_actions], policy_len = policy_len)\n", "\n", " for t in range(T):\n", "\n", " print(f'Time {t}: Agent observes itself in location: {obs}')\n", "\n", " # convert the observation into the agent's observational state space (in terms of 0 through 8)\n", " obs_idx = grid_locations.index(obs)\n", "\n", " # perform inference over hidden states\n", " qs_current = infer_states(obs_idx, A, prior)\n", " plot_beliefs(qs_current, title_str = f\"Beliefs about location at time {t}\")\n", "\n", " # calculate expected free energy of actions\n", " G = calculate_G_policies(A, B, C, qs_current, policies)\n", "\n", " # to get action posterior, we marginalize P(u|pi) with the probabilities of each policy Q(pi), given by \\sigma(-G)\n", " Q_pi = softmax(-G)\n", "\n", " # compute the probability of each action\n", " P_u = compute_prob_actions(actions, policies, Q_pi)\n", "\n", " # sample action from probability distribution over actions\n", " chosen_action = utils.sample(P_u)\n", "\n", " # compute prior for next timestep of inference\n", " prior = B[:,:,chosen_action].dot(qs_current) \n", "\n", " # step the generative process and get new observation\n", " action_label = actions[chosen_action]\n", " obs = env.step(action_label)\n", " \n", " return qs_current\n" ] }, { "cell_type": "markdown", "metadata": { "id": "HXiiTwznw5bG" }, "source": [ "Now run it to see if the agent is able to navigate to location `(2,2)`" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "id": "Pn1WIMem6S_v" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting state is (0, 0)\n", "Re-initialized location to (0, 0)\n", "..and sampled observation (0, 0)\n", "Time 0: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEUCAYAAADHgubDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAv9klEQVR4nO3deVhU9eI/8DegpjKIYqhXWSRsMBGUFIzdBVH0ZkUpGO6a1A9zJXG8XtO0FNNIzN3Q3BEX3MAUFTW9ZmpaalEKMriGoshQCjjn94ffmctxgBm2Ybrn/Xoen0c+c5b3jPieM585c8ZMEAQBREQkCeZ1HYCIiIyHpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBLC0q8F06ZNg4uLi+hPx44d0bNnT8yZMwf5+flV2u7QoUPRs2dPnf1Uxd69e9GzZ0+4ublhypQpVdpGZSxZsgQuLi64ceNGre/reWq1Wu9+d+7cCRcXF3z//fdGSlW+nJwc7d9v3LgBFxcXLFmypA4TVax03sos9/zvc13KycnBuHHj4OXlBS8vL0ydOhV5eXl1HatW1KvrAP/LFAoFmjVrBgB48uQJrl69isTERPz888/YsmULLCwsqrX9sLAweHt7V3q9Bw8eQKFQwM7ODjNmzICjo2O1cpgylUqFESNGIDAwEB9++GFdx9Fr9OjRsLW1xfz58wEANjY2WLBgQZWf3GvbsmXLsGvXLhw6dKjC5Xbs2IHZs2fjp59+0o69//77+Ouvv2o7ol4PHjzA8OHDUVRUhDFjxuDp06f4+uuvkZGRgaSkJDRo0KCuI9Yoln4tCgoKgp2dnWisbdu2mD17No4fP44ePXpUa/seHh7w8PCo9HpZWVkoLi5GREQEwsLCqpXB1D18+BA///wzAgMD6zqKQb777ju89dZb2p8bN26MN954ow4TVew///kPnj59qne5H374AU+ePBGN+fr61lasSlm3bh3u3LmDvXv3wtnZGQDQqVMnjBw5EsnJyRg0aFAdJ6xZnN4xsm7dugEAfv/99zrLUFxcDACwtLSsswxEpmL//v3w8vLSFj4A+Pj4wMnJCfv376/DZLWDpW9kd+7cAQA4ODiIxq9evYqoqCh07doVnTp1Qnh4OE6cOFHhtsqa079z5w6mTp2K1157DW5ubnjzzTexZ88e0TrDhg0D8Gz6STPPLggCvvrqK/Tp0wdubm7w8fHBRx99hNu3b+u9T5cvX8aHH34IHx8fuLq6wtvbG1OmTNHe19IyMzMxbNgwuLu7o3v37li8eLH2SUjjwYMHmDVrFvz9/dGxY0f06dMHq1atEh1RlvceQenx77//Hr169QIAfPXVV5V+T+Gvv/7CokWL0LNnT+17MgsXLtSZkigqKsKSJUsQHBwMd3f3MvNmZ2cjJiYGAQEB6NixI7y8vPD+++9rn/w1c/cAsGvXLu37C+XN6SclJeGNN96Am5sbXnvtNUyZMkV03zTrJScnIy4uDgEBAXBzc8PAgQNx+vRpvfddpVJh0aJF6Nu3L9zc3ODh4YFBgwbh8OHD2mV69uyJM2fO4ObNmxW+7zB06FDs2rULAODi4oJp06Zpx0vP6Q8dOhSRkZFIS0vDgAED4Obmhv79++PYsWNQqVSYOXMmPD094e3tjZkzZ+Lx48ei/fz4448YOXKk9hXwqFGjRNNJZcnPz0dOTg5cXV11bnN1dcXly5f1PlZ/N5zeqUWPHj3SvhlUXFyMa9euYe7cuXB1dRX9smdkZODdd9/Fiy++iMjISNSvXx/79u3D2LFjsWjRIvTr18+g/d29excDBw6EIAgYOnQorK2tcfjwYXz00Uf4448/MGbMGISFhaFly5ZYsWIFwsLC0KVLF9jY2GDFihVYunQpIiIitOW4fv16XLp0Cfv27Sv3/QdNdkdHR4wdOxaNGjXC+fPnsXv3bmRnZ2P79u2i5SdMmIBu3bohJiYGZ86cwbJly3D79m3tHHZ+fj7Cw8Nx8+ZNhIeHw8nJCSdPnsSiRYtw5coVfPnllwY//s7OzlAoFJg3bx569+6N3r17w8bGxqB1i4qKMHLkSFy4cAGhoaHo2LEjfvrpJ6xevRrnzp3D+vXrUb9+fQBAVFQUjh8/jtdffx0jR47ETz/9hEWLFuH+/ftQKBS4d+8eBg0aBJlMhiFDhqBZs2b45ZdfsG3bNly+fBlHjhzRzt1PnToVXbt2xaBBg+Ds7KxTbAAQGxuLhIQEeHt7Y+rUqfjjjz+wceNGnDp1CklJSaIpxcWLF6NRo0YYNWoUiouLkZCQgMjISKSnp2vfb3qeIAiIjIzElStXMGTIEDg4OODOnTvYunUrxo0bh+TkZLi4uGD69OlYtGiR9j2i8t53eP/996FWq3H27FksWLBA54CntMuXL+PHH3/EsGHDYGVlhZUrV2LixIl45ZVX0KhRI0yePBlnz55FYmIiWrRogXHjxgEATp48icjISLRv3x4TJkxAUVERdu7ciYiICKxduxZdu3Ytc393794FALRs2VLnNltbWxQUFKCgoABWVlblZv7bEajGxcTECHK5vMw/7u7uwoULF0TLDxkyRAgKChIKCwu1Y8XFxcK7774r+Pj4CE+ePNEu16NHD539lP7Zy8tLuHv3rnZMrVYLkydPFjp27Cjcu3dPEARBOH36tCCXy4UdO3ZolwsJCRHGjh0ryrVlyxZhwIABQnZ2drn3debMmUKnTp2EBw8eiMYnTZokyOVy7Xh8fLwgl8uFCRMmiJabNm2aIJfLhV9//VUQBEH4/PPPBblcLhw6dEi03KxZswS5XC6kp6eLtpeTkyNa7vnxnJwcQS6XC/Hx8eXeB0EQhB07dghyuVw4ffq0IAiCsHnzZkEulwtr164VLbd69WpBLpcLGzduFARBENLT0wW5XC4sX75ctNyUKVMEV1dXIT8/X1i5cqXg4uIiXL16VbTMwoULBblcLly6dEk7JpfLhZiYGO3Pz+f//fffBRcXFyEqKkpQq9Xa5S5cuCC4uLgI48ePF60XGBgo+r3av3+/IJfLhcTExHIfiwsXLghyuVzYsmWLaPz48eOCXC4XEhIStGPP/06W5/nf1bLWHTJkiCCXy4UjR45oxzZu3CjI5XJh0KBB2jG1Wi0EBAQIYWFhgiAIwtOnT4VevXoJ4eHhQklJiXa5wsJCoXfv3sIbb7xRbq7z588Lcrlc2LZtm85tX3zxhSCXy4U7d+7ovX9/J5zeqUWff/451q5di7Vr12LVqlX4+OOPYWdnh4iICJw6dQrAs6mMM2fOIDAwEI8fP0ZeXh7y8vLw6NEj9O7dG/fu3cPPP/+sd19qtRppaWno2rUr6tWrp93OgwcPEBwcjKKiIpw8ebLc9Vu1aoXvv/8e33zzDe7duwcACA8Px+7duys8Mps1axaOHDmCpk2basdUKhVeeOEFAMCff/4pWn706NGin4cOHQoAOHbsGADgyJEjcHZ2RlBQkGi5//f//h8AiKYXatORI0cgk8kQEREhGh82bBhkMhmOHDkCAEhPT4e5uTmGDBkiWi4mJga7d++GpaUlxo4di5MnT4rmjB8/fgxz82f//Z5/jCpy9OhRCIKAsWPHwszMTDveqVMn+Pr64tixYygpKdGOBwYGonHjxtqf27dvDwDIzc0tdx+dOnXCDz/8gNDQUO3Y06dPoVarAQCFhYUG562sF154Af7+/tqfnZycAEA7TQcAZmZmaNOmjfY+XLlyBTk5OQgKCkJ+fr72d//x48fo0aMHfvnlF+0R/fMEAy4yXPpx/l/A6Z1a9Oqrr+qcvRMSEoLg4GDMmTMHqamp2nOXN2zYgA0bNpS5HUPm1R88eICCggKkpaUhLS2t0tuZOnUqPvjgA3z22WeYN2+edgpq0KBBsLW1LXc9MzMzPHjwACtXrkRGRgaUSiVu3bql/c+kKQqNl156SfSz5glFMx9948YN0X96DVtbWzRp0gQ3b94sN0tNunHjBuzt7bVTOBoNGjSAvb29NsfNmzfRvHlzyGQynbylH7fi4mLExcXh8uXLUCqVuHHjhnbO//nHSF8u4L9lWJqzszO+++47PHjwQDv2/HSW5vRDffusV68etm7dijNnziA7OxtKpVI71WRIUVZV06ZNUa/ef2tJM63YvHlz0XIWFhbaHEqlEgCwYMECLFiwoMzt3rp1q8wpHM0T4vNnFpUee/7f9u+OpW9kzZo1Q7du3XDo0CHk5+dr/+NHREToHN1qtGvXTu92Ndvp06cPwsPDy1zG3t6+3PXbt2+Pb7/9FidOnMDRo0dx4sQJxMfHY+3atUhMTBQdpZaWkpKC6OhotGjRAq+99pr2jcrvvvsOK1eu1Fn++aMmzX9czX/uigpFrVbrlPDzDDl90BCG5jBkf2fPnsXo0aPRuHFj+Pj44O2330aHDh2gVCrxySef1GguAKhfv762sDSvJiojLy8PAwcOxB9//AFfX1/07NkT7du3R5s2bTBw4MBKb68yShd+aRUdbWvu94QJE9C5c+cyl3n+YEOjdevWAMp+5fPHH3+gSZMmoldK/wtY+nVA80tqbm6ONm3aAHhWej4+PqLlrl69ihs3bqBRo0Z6t2ljY4NGjRqhpKREZzu3bt3ClStXyt3O06dP8euvv0Imk6FXr17al9IpKSmYNGkSkpKStGdcPG/RokVwdHTEjh07RP859u7dW+byN2/exMsvv6z9OSsrC8B/j/jbtGmjHSstNzcXKpUK//jHPwD8t8yKiopEy2mmpqqrTZs2uHDhAoqLi0VPNEVFRbhx44b2jcHWrVvj1KlTKCwsFJ0Ce/nyZSQkJOCDDz5AfHw8GjZsiP3794uOvFesWFHpXJpXjpmZmejUqZPotqysLDRu3BjW1tZQqVSV3rbG5s2bcePGDaxbt0704b/z589XeZu1SfN/SPOkWtpPP/2E/Px8NGzYsMx1mzRpAjs7uzLP0rly5Qo6duxY84HrGOf0jezevXs4ffo0XnnlFVhZWaFFixbo2LEjdu3aJZp3LC4uxvTp0zF+/HjRHG156tWrh4CAABw7dgy//vqr6Lb58+cjKipK9LK/tKdPn2LYsGH47LPPROOaUqnoaPHhw4do3bq1qPBv376NgwcPardd2rZt20Q/r127FmZmZtqzmXr06IFr167pTFGtWrUKANC9e3cA0E6dlL6vKpVK+96AhuYVRGWmUIBnpyOqVCps2rRJNL5582YUFhZqcwQGBkKtViMpKUm03JYtW5CamooXX3wRDx8+hI2NjajwCwoKtKcxln6MzM3NK8yq+UDf6tWrRUf9ly9fxqlTpxAYGFjtOeiHDx8CEL/CFAQBGzduBADR76O+vKWXAyr/72CIjh07wtbWFhs2bBC936BSqTBx4kQoFIoKP/0eHByM//znP7h27Zp27NSpU8jKyjL4zLm/Ex7p16K0tDTtaXGCIODOnTvYtm0b/vrrL0yaNEm73IwZMzB8+HC8/fbbGDx4MJo2bYr9+/fj4sWLmDJlSrmn1j0vOjoa33//PSIiIhAREYHWrVsjPT0dR48eRVhYmOgIu7QGDRpg6NChWL58OaKiouDv74/Hjx8jMTERjRo1wttvv13uPgMCApCSkoKZM2fCzc0NN27c0N5HQPdNv71790KlUsHd3R3Hjh3D0aNHMWbMGO2lICIjI3Hw4EFMnDgRgwcPRtu2bXH69GkcPHgQwcHB2k/WBgUFYe7cufjkk09w8+ZNNGjQANu2bdN5Kd60aVOYm5vj8OHDaN26NYKDg2Ftba33sRw4cCB27dqF+fPn47fffkPHjh1x6dIl7Ny5E507d9ZOc/Ts2RN+fn6YP38+fv/9d7i5ueHHH39EcnIyoqKi0LRpUwQEBGD16tWYMGEC/Pz8kJubi+3bt2tflZR+jGxsbHDmzBls27YNfn5+OrlefvllDB06FBs2bMDIkSMRFBSE3NxcbNiwAU2aNKmR6ygFBARgw4YNiIyMxDvvvIPi4mKkpqbi0qVLMDc318n7ww8/ICEhAV26dNF59VF6OQCIj49Ht27dqnT5kPLUr18fM2bMwKRJkxAaGop33nkHL7zwApKSknDr1i0sXLiw3GkjAHjvvfewe/dujBgxAqNGjcKTJ0+wZs0auLq6mvSnoauKpV+L5s2bp/27hYUFrK2t4ebmhk8//VT0S+/h4YEtW7ZgyZIlWLt2LUpKSuDk5IT58+eLPpKvj4ODA7Zt24b4+Hhs27YNf/75J+zt7aFQKLRnyZRn/PjxaNq0KXbs2IHY2FhYWFjg1Vdfxeeff17ufD7w7Oydxo0b48iRI9i9ezdatWqFN998E71798bgwYNx+vRpdOjQQbv86tWrMXfuXOzbtw8tW7aEQqHAiBEjtLc3bdoUiYmJ+PLLL5GSkoJHjx7B3t4eU6dOFS1nY2OD1atXY9GiRYiPj0ezZs0waNAgvPTSS6In1EaNGmHSpEn4+uuvMXfuXDg4OGg/FV2RBg0aYN26dVi6dClSU1OxZ88etGrVCpGRkfjggw+0Uz7m5uZYtmwZli5dir1792LPnj1wcHDAzJkzMXjwYADAhx9+iKdPnyIlJQVHjx5FixYt4OPjg1GjRqF///44ffo0evfuDeDZE/eiRYswZ84czJkzp8zzy//1r3/ByckJW7duxfz582FtbY3evXtj/Pjx2qmO6ggICMDcuXORkJCg3b6rqysSExPx73//W3RRujFjxiAjIwNffPEFQkNDyy19ze/CmjVr8PPPP9do6QNA3759YW1tjeXLl2PZsmUwNzfHyy+/jOXLl+u93ImNjQ02btyIefPmaafigoKCMHXq1P+56+4AgJlQm2/FExGRSeGcPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQv4W5+k/eFAItdp4Z5Y2by7D/ftV/xj7/1oOwHSymEoOgFlMOQdgOlmMncPc3AzNmpX/rXh/i9JXqwWjlr5mn6bAVHIAppPFVHIAzFIWU8kBmE4WU8kBcHqHiEhSWPpERBJS6dL/5Zdf4OrqWuaXXpdWWFiI2bNnw9fXFx4eHnjvvfdw/fr1quYkIqIaUKnSv3btGiIjIw261O+kSZNw4MABREdHIzY2Fnfv3sWwYcNQUFBQ5bBERFQ9BpV+SUkJNm3ahIEDB5b5tWLPO3v2LI4dO4bY2Fi89dZbCA4Oxrp161BQUIAtW7ZUOzQREVWNQaV/7tw5LFy4EKNGjUJ0dLTe5U+ePAlLS0v4+vpqx2xsbODp6Ynjx49XPS0REVWLQaXv7OyMtLQ0jBs3rsJvoNHIzMyEo6OjzrIODg5lfhUeEREZh0Hn6b/44ouV2qhKpSrzG+QtLS2r9N2dzZtX7dvo1UVFMK/ilyDY2loZbV81maM2mUoWU8kBMEtZTCUHYDpZTCUHUEsfzqroe1kq+r7V8ty/r6rShxtsba1w8o3yv+qvJvnu3oHc3Jp9k9rW1qrGt1lVppLFVHIAzGLKOQDTyWLsHObmZhUeKNfKefoymUznu1GBZ6dxlvUKgIiIjKNWSt/JyQk5OTk6R/zZ2dlwcnKqjV0SEZEBaqX0/fz88OjRI5w6dUo7lpeXh7Nnz8LHx6c2dklERAaokdLPy8vDhQsXtG/Senp6wsvLC5MnT0ZSUhIOHTqEESNGwMrKCoMHD66JXRIRURXUSOmnp6cjLCwMly9f1o599dVX6NmzJxYsWIBp06ahVatWWLduHaytrWtil0REVAVmQkWn2pgInr1T90wli6nkAJjFlHMAppNFEmfvEBGRaWLpExFJCEufiEhCWPpERBLC0icikhCWPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQlj6REQSwtInIpIQlj4RkYSw9ImIJISlT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBJicOnv27cP/fv3h7u7O0JCQpCcnFzh8nl5eVAoFPDz84OXlxciIyNx/fr1asYlIqLqMKj0U1JSEB0dDT8/PyxduhReXl6IiYnBgQMHylxeEARERUXh+PHjiI6OxoIFC5Cbm4thw4YhPz+/Ru8AEREZrp4hC8XFxSEkJAQKhQIA4O/vj/z8fCxevBh9+/bVWf769es4f/48YmNj8eabbwIAnJ2dERQUhCNHjuCtt96quXtAREQG03ukn5OTA6VSieDgYNF4nz59kJmZiZycHJ11njx5AgCwtLTUjllbWwMAHj58WJ28RERUDXpLPzMzEwDg5OQkGnd0dAQAZGVl6azTvn17dOvWDUuXLsW1a9eQl5eHuXPnonHjxggKCqqJ3EREVAV6p3cKCgoAADKZTDSuOYpXqVRlrjdr1iyMGTMG/fr1AwA0aNAAS5cuhb29fbUCExFR1ektfUEQKrzd3Fz3xcK1a9cQHh4OBwcHTJ8+HQ0bNsS2bdswfvx4rFmzBl27dq1UyObNZfoXMgG2tlZ/i21WlalkMZUcALOUxVRyAKaTxVRyAAaUvpXVs7CFhYWicc0Rvub20tatWwcASEhI0M7l+/r64t1338Vnn32GnTt3Virk/fsqqNUVP/mUxdgPdG5uQY1uz9bWqsa3WVWmksVUcgDMYso5ANPJYuwc5uZmFR4o653T18zlK5VK0Xh2drbo9tJu3boFZ2dnbeEDgJmZGbp06YKrV68alpyIiGqc3tJ3dHSEnZ2dzjn5Bw8eRNu2bdG6dWuddZycnPD777/j0aNHovGLFy+iTZs21YxMRERVZdB5+lFRUVAoFLC2tkb37t1x+PBhpKamIi4uDsCzT98qlUq0a9cOMpkMI0aMwJ49ezBq1CiMHTsWDRs2xO7du3HmzBntOkREZHwGlX5oaCiKioqQkJCApKQk2NvbIzY2VntmTnp6OhQKBdavX49u3brBzs4OW7ZswcKFC6FQKGBmZga5XI61a9fCx8enVu8QERGVz6DSB4Dw8HCEh4eXeVtoaChCQ0NFY87Ozli+fHn10hERUY3iVTaJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBLC0icikhCWPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQlj6REQSwtInIpIQlj4RkYSw9ImIJISlT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJiMGlv2/fPvTv3x/u7u4ICQlBcnJyhcur1WosX74cvXr1gru7O15//XXs37+/unmJiKga6hmyUEpKCqKjozF8+HD4+fkhLS0NMTExaNiwIfr27VvmOp999hkSExMxefJktG/fHvv378eUKVMgk8kQGBhYo3eCiIgMY1Dpx8XFISQkBAqFAgDg7++P/Px8LF68uMzSVyqV2LRpEz755BMMHDgQAODt7Y3r16/jxIkTLH0iojqit/RzcnKgVCoxefJk0XifPn2QmpqKnJwc2Nvbi25LS0tDw4YN8eabb4rGN27cWP3ERERUZXrn9DMzMwEATk5OonFHR0cAQFZWls46GRkZcHJywqlTpzBgwAB06NABwcHBSElJqYnMRERURXpLv6CgAAAgk8lE45aWlgAAlUqls05eXh5u376N6dOnY8iQIVizZg1cXV0xadIknD59uiZyExFRFeid3hEEocLbzc11nzeKi4uRl5eHFStWoEePHgCA1157DZmZmfjqq6/w2muvVSpk8+Yy/QuZAFtbq7/FNqvKVLKYSg6AWcpiKjkA08liKjkAA0rfyupZ2MLCQtG45ghfc3tplpaWsLCwgK+vr3bM3NwcPj4+2L59e6VD3r+vglpd8ZNPWYz9QOfmFtTo9mxtrWp8m1VlKllMJQfALKacAzCdLMbOYW5uVuGBst7pHc1cvlKpFI1nZ2eLbi/N0dERarUaJSUlovHi4mKYmZnpT01ERLVCb+k7OjrCzs4OBw4cEI0fPHgQbdu2RevWrXXW8ff3hyAISE1N1Y6VlJTgxIkT6NKlSw3EJiKiqjDoPP2oqCgoFApYW1uje/fuOHz4MFJTUxEXFwfg2Ru3SqUS7dq1g0wmg7e3NwIDAzF37lz8+eefaNu2LTZv3oybN29i0aJFtXqHiIiofAaVfmhoKIqKipCQkICkpCTY29sjNjYW/fr1AwCkp6dDoVBg/fr16NatGwAgPj4eixcvxqpVq5Cfn48OHTogISEBHTt2rL17Q0REFTIT9J2eYwKq80buyTferoVEunx37+AbuRLKATCLKecATCfL3+6NXCIi+t/B0icikhCWPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQlj6REQSwtInIpIQlj4RkYSw9ImIJISlT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBLC0icikhCWPhGRhLD0iYgkhKVPRCQhBpf+vn370L9/f7i7uyMkJATJyckG7+T27dvo0qULli1bVpWMRERUQwwq/ZSUFERHR8PPzw9Lly6Fl5cXYmJicODAAb3rCoKA6dOnQ6VSVTssERFVTz1DFoqLi0NISAgUCgUAwN/fH/n5+Vi8eDH69u1b4bqbN29GZmZm9ZMSEVG16T3Sz8nJgVKpRHBwsGi8T58+yMzMRE5OToXrLly4EHPmzKl+UiIiqja9pa85SndychKNOzo6AgCysrLKXE+tVmPatGkICQlBQEBAdXMSEVEN0Du9U1BQAACQyWSicUtLSwAod67+m2++wY0bN7BixYrqZkTz5jL9C5kAW1urv8U2q8pUsphKDoBZymIqOQDTyWIqOQADSl8QhApvNzfXfbFw7do1fPnll4iPj4eVVfXv7P37KqjVFecoi7Ef6Nzcghrdnq2tVY1vs6pMJYup5ACYxZRzAKaTxdg5zM3NKjxQ1ju9oyntwsJC0bjmCP/5Un/69CkUCgX69u0LX19flJSUoKSkBMCzKR/N34mIyPj0lr5mLl+pVIrGs7OzRbdr3L59GxcvXkRycjJcXV21fwBgyZIl2r8TEZHx6Z3ecXR0hJ2dHQ4cOIDevXtrxw8ePIi2bduidevWouVbtGiB7du362znnXfeweDBg/H222/XQGwiIqoKg87Tj4qKgkKhgLW1Nbp3747Dhw8jNTUVcXFxAIC8vDwolUq0a9cOMpkMbm5uZW6nRYsW5d5GRES1z6BP5IaGhmL27Nn47rvvEBUVhR9++AGxsbHo168fACA9PR1hYWG4fPlyrYYlIqLqMehIHwDCw8MRHh5e5m2hoaEIDQ2tcP2MjIzKJSMiohrHq2wSEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBLC0icikhCWPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQlj6REQSwtInIpIQlj4RkYSw9ImIJISlT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSJyKSEINLf9++fejfvz/c3d0REhKC5OTkCpfPzc3FjBkz0KNHD3h4eCA0NBSpqanVzUtERNVQz5CFUlJSEB0djeHDh8PPzw9paWmIiYlBw4YN0bdvX53li4qKMGbMGBQUFGD8+PFo0aIFvv32W0ycOBFPnz7FP//5zxq/I0REpJ9BpR8XF4eQkBAoFAoAgL+/P/Lz87F48eIyS//48eP49ddfkZSUBHd3dwCAr68vbt26hdWrV7P0iYjqiN7pnZycHCiVSgQHB4vG+/Tpg8zMTOTk5OisY2lpibCwMLi5uYnGX3rpJSiVympGJiKiqtJ7pJ+ZmQkAcHJyEo07OjoCALKysmBvby+6zdvbG97e3qKx4uJiHDt2DC+//HK1AhMRUdXpPdIvKCgAAMhkMtG4paUlAEClUhm0o88//xzXr1/H2LFjK5uRiIhqiN4jfUEQKrzd3Lzi5w1BEPD555/jm2++wejRoxEUFFS5hACaN5fpX8gE2Npa/S22WVWmksVUcgDMUhZTyQGYThZTyQEYUPpWVs/CFhYWisY1R/ia28tSVFSEadOmYf/+/Rg9ejSmTp1apZD376ugVlf85FMWYz/QubkFNbo9W1urGt9mVZlKFlPJATCLKecATCeLsXOYm5tVeKCst/Q1c/lKpRIuLi7a8ezsbNHtz1OpVIiMjMT58+cxffp0DB8+vFLBiYio5umd03d0dISdnR0OHDggGj948CDatm2L1q1b66zz9OlTfPDBB7h48SLi4uJY+EREJsKg8/SjoqKgUChgbW2N7t274/Dhw0hNTUVcXBwAIC8vD0qlEu3atYNMJsPWrVtx5swZhIWFoVWrVrhw4YJ2W2ZmZujUqVOt3BkiIqqYQaUfGhqKoqIiJCQkICkpCfb29oiNjUW/fv0AAOnp6VAoFFi/fj26deuGb7/9FgCQmJiIxMRE0bYsLCxw5cqVGr4bRERkCINKHwDCw8MRHh5e5m2hoaEIDQ3V/rx+/frqJyMiohrHq2wSEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJCEufiEhCWPpERBLC0icikhCWPhGRhLD0iYgkhKVPRCQhLH0iIglh6RMRSQhLn4hIQlj6REQSwtInIpIQlj4RkYSw9ImIJISlT0QkISx9IiIJYekTEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEGFz6+/btQ//+/eHu7o6QkBAkJydXuHxhYSFmz54NX19feHh44L333sP169erGZeIiKrDoNJPSUlBdHQ0/Pz8sHTpUnh5eSEmJgYHDhwod51JkybhwIEDiI6ORmxsLO7evYthw4ahoKCgxsITEVHl1DNkobi4OISEhEChUAAA/P39kZ+fj8WLF6Nv3746y589exbHjh3D6tWrERAQAADo2rUrevXqhS1btmDs2LE1eBeIiMhQeo/0c3JyoFQqERwcLBrv06cPMjMzkZOTo7POyZMnYWlpCV9fX+2YjY0NPD09cfz48RqITUREVaH3SD8zMxMA4OTkJBp3dHQEAGRlZcHe3l5nHUdHR1hYWIjGHRwckJqaWumQ5uZmlV6nLtRGTlO676aSxVRyAMxSFlPJAZhOFmPm0LcvvaWvmYOXyWSicUtLSwCASqXSWUelUuksr1mnrOX1adbMstLraPju3lHldSureXPd+2yK26wqU8liKjkAZimLqeQATCeLqeQADJjeEQSh4g2Y626ionXKWp6IiIxDbwNbWVkBeHYKZmmaI3bN7aXJZDKd5TXbKOsVABERGYfe0tfM5SuVStF4dna26Pbn18nJydE54s/Ozi5zeSIiMg69pe/o6Ag7Ozudc/IPHjyItm3bonXr1jrr+Pn54dGjRzh16pR2LC8vD2fPnoWPj08NxCYioqow6Dz9qKgoKBQKWFtbo3v37jh8+DBSU1MRFxcH4FmhK5VKtGvXDjKZDJ6envDy8sLkyZMRHR2Npk2bYsmSJbCyssLgwYNr9Q4REVH5zAR979T+n61btyIhIQG3b9+Gvb09xo4dizfffBMAsHPnTigUCqxfvx7dunUDAOTn52P+/PlIS0uDWq1Gly5dMG3aNLz00ku1dmeIiKhiBpc+ERH9/fH8SSIiCWHpExFJCEu/lMpePrq2/fLLL3B1dcWdO3fqZP9qtRpbtmzB66+/Dg8PDwQFBWHevHlV+lR1dQmCgHXr1qFPnz5wd3fHgAEDsHfvXqPneN64cePQu3fvOtl3SUkJ3N3d4eLiIvrj4eFh9Cw//PADBg8ejE6dOsHPzw9z5swp87M6ten777/XeSxK/9m1a5dR82zZsgUhISHo3LkzXn/9dezZs8eo+y+PQWfvSIHm8tHDhw+Hn58f0tLSEBMTg4YNG5Z5JdHadu3aNURGRqKkpMTo+9ZYs2YNvvzyS4wePRre3t7IyspCfHw8rl69iq+//tqoWVauXIn4+Hh8+OGH6Ny5M44fP47o6GhYWFigX79+Rs2isXv3bhw6dAgODg51sv+srCw8efIEsbGxaNu2rXbc2J96v3DhAkaOHImePXti+fLlyM7OxhdffIG8vDztGX7G4OrqisTERNGYIAj417/+hT///BOBgYFGy5KYmIhZs2Zh1KhR8Pf3x7Fjx/DRRx+hfv36CAkJMVqOMgkkCIIgBAUFCRMnThSNTZgwQejbt69RcxQXFwsbN24UPDw8BC8vL0Eulwu3b982agZBEAS1Wi14enoKs2bNEo3v379fkMvlwpUrV4yWpaioSPD09BQ++eQT0fiQIUOEwYMHGy1HaXfu3BE8PT2FgIAAISgoqE4y7NmzR2jfvr3w559/1sn+NSIiIoSIiAhBrVZrxzZu3Cj06tWrzrOtW7dOaN++vXDhwgWj7jcsLEwYOnSoaOzdd98VhgwZYtQcZeH0Dqp2+ejacu7cOSxcuBCjRo1CdHS00fb7vMLCQgwYMAD//Oc/ReOaU26f/4R2bbKwsMCGDRt0voehfv36ePLkidFylDZjxgz4+vrC29u7TvYPPJv+c3BwQKNGjeosg+ZDl4MHD4aZ2X+v7hgREYG0tLQ6zZabm4vFixdrp52M6cmTJ9qLUmo0bdoUDx8+NGqOsrD0Ydjlo43F2dkZaWlpGDdunM6lqY1JJpNhxowZ6NKli2g8LS0NANCuXTujZTE3N4eLiwtatmwJQRBw7949rFq1CqdOnUJYWJjRcmgkJSXh8uXL+Pe//230fZeWkZGBBg0aYPTo0fDw8ICnpydmzpxp1PdcfvvtNwiCAGtra0ycOBGdO3dGly5d8PHHH+Px48dGy1GWJUuWwNzcHBMnTjT6vocNG4YTJ04gNTUVKpUKBw4cQHp6Ot544w2jZ3ke5/RRtctH15YXX3zRaPuqrIsXL2LVqlUICgqCs7NznWQ4ePAgxo8fDwDo3r07BgwYYNT937x5E/PmzcO8efNgY2Nj1H0/79dff4VKpcLAgQPx/vvv49KlS1iyZAmysrKwfv160ZF3bcnLywMATJs2Db1798by5cuRkZGBL7/8Ek+ePMH8+fNrPUNZ7t+/j+TkZIwaNQpNmjQx+v779++P06dPi55w3nrrLYwZM8boWZ7H0kfVLh8tNefOncP7778POzs7zJ07t85ydOjQARs3bkRGRgYWL16MsWPH4ptvvjFKwQmCgOnTpyMwMBB9+vSp9f3pExcXB2tra7i4uAAAPD090bx5c3z00Uc4deqU6JvraktxcTEA4NVXX8XHH38MAPD29oYgCIiNjUVUVJTOlywZQ1JSEtRqNYYNG2b0fQPABx98gB9//BEKhQIdOnTAxYsXsWzZMu0r6LrE0kfVLh8tJSkpKZg2bRratm2LNWvWoFmzZnWWxd7eHvb29vD09IRMJkNMTAx+/PFHvPrqq7W+702bNiEjIwN79+7VnlWlOWAoKSmBhYWFUZ58NLy8vHTGunfvDuDZqwBjlL7m1bDmu7A1/Pz8MH/+fGRkZNRJ6X/77bfw9/evk1dj58+fx3fffYd58+YhNDQUwLN/qyZNmmDmzJkYNGgQ5HK50XNp8BAWVbt8tFSsXbsWkydPRufOnbFp0ya0aNHC6BkePnyI5ORk3L17VzTeoUMHAMAff/xhlBzffvstHjx4AD8/P7i6usLV1RXJyclQKpVwdXU16nng9+/fR1JSks5JBpp5dGM9MWtOFS0qKhKNa14BGPNJUOPu3bu4cuVKnZ0aeevWLQDQORDp2rUrAODq1atGz1QaSx9Vu3y0FCQlJWH+/PkICQnBmjVr6uwVj1qtxrRp03TOwT558iQAGO2oafbs2di+fbvoT48ePdCqVSvt343FzMwMM2fOxMaNG0XjKSkpsLCw0HkDvrY4OzujTZs2SElJEY0fPXoU9erVq5MPil28eBEAjPYYPE9zkHju3DnR+IULFwAAbdq0MXYkEU7v/B99l4+Wmvv37+PTTz9FmzZtEBERgStXrohud3BwMNpLZxsbG7z77rtYtWoVGjZsCDc3N5w7dw4rV67EwIEDjXbl1rL207RpUzRo0ABubm5GyaBhY2ODiIgIbNiwATKZDF27dsW5c+ewYsUKREREaM88q21mZmaIjo7WXkY9NDQUly5dwvLlyzFkyJA6mV757bff0KhRozorV1dXVwQFBeHTTz9FQUEBXnnlFVy6dAlLly5FQECA0U8ffR5L//+EhoaiqKgICQkJSEpKgr29PWJjY+vs05517cSJE/jrr79w8+ZNRERE6Ny+YMECo55+plAo8I9//APbt2/HkiVL0KpVK4wfPx6jR482WgZTExMTg5YtW2LHjh1YtWoVWrZsifHjxxv9DJF+/fqhQYMGWLp0KSIjI9G8eXNERUUhMjLSqDk07t27Vydn7JQWFxeHr776CuvWrcP9+/fRpk0bjBo1SuezJnWBl1YmIpIQzukTEUkIS5+ISEJY+kREEsLSJyKSEJY+EZGEsPSJiCSEpU9EJCEsfSIiCWHpExFJyP8HPnN4uW+qtNwAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 1: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 2: Agent observes itself in location: (0, 0)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 3: Agent observes itself in location: (0, 1)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 4: Agent observes itself in location: (0, 2)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEUCAYAAADHgubDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAvl0lEQVR4nO3deVgT194H8C+gViUUxaJeFZBig5VFqaJld0EUvVVLq2BxqcuV9qV1RSFer9Vqq1i9VNw3tGq1iFbcwAUV11eta6tWWgUJrkVRJFgFzLx/+CaXMSxhC+md7+d5eB45c2bmNyF+MzlzMjERBEEAERFJgmltF0BERIbD0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6NeAqKgoODo6in6cnZ3RvXt3zJo1C7m5uZXa7tChQ9G9e3ed/VTGrl270L17d7i4uGDSpEmV2kZFLFq0CI6Ojrh161aN7+tVarW63P3++OOPcHR0xOnTpw1UVemysrK0/7516xYcHR2xaNGiWqyobMXrrUi/V5/PxuLatWtwdnY26se8KurUdgH/zRQKBRo3bgwAeP78Oa5fv474+Hj88ssv2Lx5M8zMzKq0/eDgYHh4eFR4vUePHkGhUKBVq1aYNm0a7OzsqlSHMVOpVPj444/h5+eHzz//vLbLKdeoUaNgbW2NuXPnAgCsrKwwb968Sr+417SlS5di+/btOHDgQJn9tm3bhpkzZ+Lnn3/Wtn3yySf4888/a7rECikqKoJCoUBhYWFtl1JjGPo1yN/fH61atRK1tW7dGjNnzsTRo0fRrVu3Km3fzc0Nbm5uFV4vIyMDhYWFCA0NRXBwcJVqMHaPHz/GL7/8Aj8/v9ouRS/Hjx/H+++/r/29YcOG6N+/fy1WVLb//d//xYsXL8rt99NPP+H58+eiNi8vr5oqq9JWrFiB33//vbbLqFEc3jGwLl26AECtPrE0ZzHm5ua1VgORsUlLS8OyZcvwP//zP7VdSo1i6BvYvXv3AAC2trai9uvXryM8PBydOnVC+/btERISgmPHjpW5rZLG9O/du4cpU6bg3XffhYuLCwYMGICdO3eK1hk2bBiAl8NPmnF2QRCwePFi9OrVCy4uLvD09MTkyZNx9+7dco/pypUr+Pzzz+Hp6QknJyd4eHhg0qRJ2mMtLj09HcOGDYOrqyu6du2KhQsX6ryVfvToEWbMmAEfHx84OzujV69eWLlypeiMsrRrBMXbT58+jR49egAAFi9eXOFrCn/++ScWLFiA7t27a6/JzJ8/X2dIoqCgAIsWLUJAQABcXV1LrDczMxORkZHw9fWFs7MzOnfujE8++UT74q8ZuweA7du3a68vlDamn5CQgP79+8PFxQXvvvsuJk2aJDo2zXqJiYmIiYmBr68vXFxcMHDgQJw6darcY1epVFiwYAF69+4NFxcXuLm5YdCgQTh48KC2T/fu3XHmzBncvn27zOsOQ4cOxfbt2wEAjo6OiIqK0rYXH9MfOnQowsLCkJKSgn79+sHFxQV9+/bFkSNHoFKpMH36dLi7u8PDwwPTp0/Hs2fPRPu5cOECRowYoX0HPHLkSNFwUlk0wzpeXl7o16+fXuv8VXF4pwY9efIEOTk5AF6eXd+4cQOzZ8+Gk5OT6MmelpaGjz76CG+88QbCwsJQt25d7N69G2PGjMGCBQvQp08fvfZ3//59DBw4EIIgYOjQobC0tMTBgwcxefJk/PHHHxg9ejSCg4PRrFkzLF++HMHBwejYsSOsrKywfPlyLFmyBKGhodpwXL9+PS5fvozdu3eXev1BU7udnR3GjBmDBg0a4Pz589ixYwcyMzOxdetWUf9x48ahS5cuiIyMxJkzZ7B06VLcvXtXO4adm5uLkJAQ3L59GyEhIbC3t8eJEyewYMECXL16Fd9++63ej7+DgwMUCgXmzJmDnj17omfPnrCystJr3YKCAowYMQIXL15EUFAQnJ2d8fPPP2PVqlU4d+4c1q9fj7p16wIAwsPDcfToUbz33nsYMWIEfv75ZyxYsAAPHz6EQqHAgwcPMGjQIMhkMgwZMgSNGzfGr7/+ii1btuDKlSs4dOiQdux+ypQp6NSpEwYNGgQHBwedYAOA6OhoxMXFwcPDA1OmTMEff/yBjRs34uTJk0hISBANKS5cuBANGjTAyJEjUVhYiLi4OISFhSE1NVV7velVgiAgLCwMV69exZAhQ2Bra4t79+7hhx9+wGeffYbExEQ4Ojpi6tSpWLBggfYaUWnXHT755BOo1WqcPXsW8+bN0znhKe7KlSu4cOEChg0bBgsLC6xYsQLjx4/H22+/jQYNGmDixIk4e/Ys4uPj0bRpU3z22WcAgBMnTiAsLAxt27bFuHHjUFBQgB9//BGhoaFYu3YtOnXqVObfe9WqVcjMzMTSpUtRVFRUZt+/PIGqXWRkpCCXy0v8cXV1FS5evCjqP2TIEMHf31/Iz8/XthUWFgofffSR4OnpKTx//lzbr1u3bjr7Kf57586dhfv372vb1Gq1MHHiRMHZ2Vl48OCBIAiCcOrUKUEulwvbtm3T9gsMDBTGjBkjqmvz5s1Cv379hMzMzFKPdfr06UL79u2FR48eidonTJggyOVybXtsbKwgl8uFcePGifpFRUUJcrlcuHbtmiAIgvDNN98IcrlcOHDggKjfjBkzBLlcLqSmpoq2l5WVJer3antWVpYgl8uF2NjYUo9BEARh27ZtglwuF06dOiUIgiBs2rRJkMvlwtq1a0X9Vq1aJcjlcmHjxo2CIAhCamqqIJfLhWXLlon6TZo0SXBychJyc3OFFStWCI6OjsL169dFfebPny/I5XLh8uXL2ja5XC5ERkZqf3+1/t9//11wdHQUwsPDBbVare138eJFwdHRURg7dqxoPT8/P9Hzas+ePYJcLhfi4+NLfSwuXrwoyOVyYfPmzaL2o0ePCnK5XIiLi9O2vfqcLM2rz9WS1h0yZIggl8uFQ4cOads2btwoyOVyYdCgQdo2tVot+Pr6CsHBwYIgCMKLFy+EHj16CCEhIUJRUZG2X35+vtCzZ0+hf//+Zdb222+/CU5OTtrHRN/nzF8Vh3dq0DfffIO1a9di7dq1WLlyJb744gu0atUKoaGhOHnyJICXQxlnzpyBn58fnj17hpycHOTk5ODJkyfo2bMnHjx4gF9++aXcfanVaqSkpKBTp06oU6eOdjuPHj1CQEAACgoKcOLEiVLXb968OU6fPo3vvvsODx48AACEhIRgx44dZZ6ZzZgxA4cOHUKjRo20bSqVCq+99hoA4OnTp6L+o0aNEv0+dOhQAMCRI0cAAIcOHYKDgwP8/f1F/TTjrMWHF2rSoUOHIJPJEBoaKmofNmwYZDIZDh06BABITU2FqakphgwZIuoXGRmJHTt2wNzcHGPGjMGJEyfg4OCgXf7s2TOYmr787/fqY1SWw4cPQxAEjBkzBiYmJtr29u3bw8vLC0eOHBGdqfr5+aFhw4ba39u2bQsAyM7OLnUf7du3x08//YSgoCBt24sXL6BWqwEA+fn5etdbUa+99hp8fHy0v9vb2wOAdpgOAExMTNCyZUvtMVy9ehVZWVnw9/dHbm6u9rn/7NkzdOvWDb/++ivu379f4v5evHiBqKgodOzYEYMGDaqx4zImHN6pQe+8847O7J3AwEAEBARg1qxZSE5O1s5d3rBhAzZs2FDidvQZV3/06BHy8vKQkpKClJSUCm9nypQp+PTTT/H1119jzpw52iGoQYMGwdrautT1TExM8OjRI6xYsQJpaWlQKpW4c+cOhP+/Y7cmKDTefPNN0e+aFxTNePStW7dE/+k1rK2t8frrr+P27dul1lKdbt26BRsbG+0Qjka9evVgY2OjreP27dto0qQJZDKZTr3FH7fCwkLExMTgypUrUCqVuHXrlnbM/9XHqLy6gP+EYXEODg44fvw4Hj16pG17dTirXr16eu2zTp06+OGHH3DmzBlkZmZCqVRqh5qEGrwbe6NGjVCnzn9iSTOs2KRJE1E/MzMzbR1KpRIAMG/ePMybN6/E7d65cwfNmjXTaV+zZg3S0tKwadMm7VDskydPALy8ppOTk4NGjRppX6D/GzD0Daxx48bo0qULDhw4gNzcXO1//NDQUJ2zW402bdqUu13Ndnr16oWQkJAS+9jY2JS6ftu2bbFv3z4cO3YMhw8fxrFjxxAbG4u1a9ciPj5edJZaXFJSEiIiItC0aVO8++672guVx48fx4oVK3T6Fz87Bf4TIJr/3GUFilqt1gnhV+kzfVAf+tahz/7Onj2LUaNGoWHDhvD09MQHH3yAdu3aQalU4ssvv6zWugCgbt262umRlQmrnJwcDBw4EH/88Qe8vLzQvXt3tG3bFi1btsTAgQMrvL2KKB74xb36vClOc9zjxo1Dhw4dSuzz6smGxrFjx1BYWFjica1ZswZr1qzBwYMHdU7e/soY+rVA8yQ1NTVFy5YtAbwMPU9PT1G/69ev49atW2jQoEG527SyskKDBg1QVFSks507d+7g6tWrpW7nxYsXuHbtGmQyGXr06KF9K52UlIQJEyYgISFBO+PiVQsWLICdnR22bdsmGkbYtWtXif1v376Nt956S/t7RkYGgP+c8bds2VLbVlx2djZUKhX+9re/AfhPmBUUFIj6aYamqqply5a4ePEiCgsLRS80BQUFuHXrlvbCYIsWLXDy5Enk5+eLpsBeuXIFcXFx+PTTTxEbG4v69etjz549ojPv5cuXV7guTfikp6ejffv2omUZGRlo2LAhLC0toVKpKrxtjU2bNuHWrVtYt26d6MN/58+fr/Q2a5Lm/5DmRbW4n3/+Gbm5uahfv36J60ZGRmrP7DUePHiAyZMno3///hgwYECZ73T/iv573rP8RTx48ACnTp3C22+/DQsLCzRt2hTOzs7Yvn27aNyxsLAQU6dOxdixY/WaTVCnTh34+vriyJEjuHbtmmjZ3LlzER4eLnrbX9yLFy8wbNgwfP3116J2TaiUdbb4+PFjtGjRQhT4d+/exf79+7XbLm7Lli2i39euXQsTExPtbKZu3brhxo0bOkNUK1euBAB07doVALT/EYsfq0ql0l4b0NC8g6jIEArwcjqiSqXC999/L2rftGkT8vPztXX4+flBrVYjISFB1G/z5s1ITk7GG2+8gcePH8PKykoU+Hl5edppjMUfI1NT0zJr1Xygb9WqVaKz/itXruDkyZPw8/Mr86xYH48fPwYgfocpCAI2btwIAKLnY3n1Fu8HVPzvoA9nZ2dYW1tjw4YNousNKpUK48ePh0KhKHX2mbOzMzw9PUU/77zzDoCX74w9PT2116f+W/BMvwalpKRop8UJgoB79+5hy5Yt+PPPPzFhwgRtv2nTpmH48OH44IMPMHjwYDRq1Ah79uzBpUuXMGnSpFKn1r0qIiICp0+fRmhoKEJDQ9GiRQukpqbi8OHDCA4OFp1hF1evXj0MHToUy5YtQ3h4OHx8fPDs2TPEx8ejQYMG+OCDD0rdp6+vL5KSkjB9+nS4uLjg1q1b2mMEdC/67dq1CyqVCq6urjhy5AgOHz6M0aNHa28FERYWhv3792P8+PEYPHgwWrdujVOnTmH//v0ICAjQfrLW398fs2fPxpdffonbt2+jXr162LJli+jFB4B2PPbgwYNo0aIFAgICYGlpWe5jOXDgQGzfvh1z587Fb7/9BmdnZ1y+fBk//vgjOnTooB0O6N69O7y9vTF37lz8/vvvcHFxwYULF5CYmIjw8HA0atQIvr6+WLVqFcaNGwdvb29kZ2dj69at2nclxR8jKysrnDlzBlu2bIG3t7dOXW+99RaGDh2KDRs2YMSIEfD390d2djY2bNiA119/vVruo+Tr64sNGzYgLCwMH374IQoLC5GcnIzLly/D1NRUp96ffvoJcXFx6Nixo867j+L9ACA2NhZdunSp1O1DSlO3bl1MmzYNEyZMQFBQED788EO89tprSEhIwJ07dzB//vxSh42kiI9EDZozZ47232ZmZrC0tISLiwu++uor0ZPezc0NmzdvxqJFi7B27VoUFRXB3t4ec+fOFX0kvzy2trbYsmULYmNjsWXLFjx9+hQ2NjZQKBTaWTKlGTt2LBo1aoRt27YhOjoaZmZmeOedd/DNN9+UOp4PvJy907BhQxw6dAg7duxA8+bNMWDAAPTs2RODBw/GqVOn0K5dO23/VatWYfbs2di9ezeaNWsGhUKBjz/+WLu8UaNGiI+Px7fffoukpCQ8efIENjY2mDJliqiflZUVVq1ahQULFiA2NhaNGzfGoEGD8Oabb4peUBs0aIAJEyZgzZo1mD17NmxtbbWfii5LvXr1sG7dOixZsgTJycnYuXMnmjdvjrCwMHz66afaIR9TU1MsXboUS5Yswa5du7Bz507Y2tpi+vTpGDx4MADg888/x4sXL5CUlITDhw+jadOm8PT0xMiRI9G3b1+cOnUKPXv2BPDyhXvBggWYNWsWZs2aVeL88n/+85+wt7fHDz/8gLlz58LS0hI9e/bE2LFjtUMdVeHr64vZs2cjLi5Ou30nJyfEx8fjX//6l+imdKNHj0ZaWhr+/e9/IygoqNTQ1zwXVq9ejV9++aVaQx8AevfuDUtLSyxbtgxLly6Fqakp3nrrLSxbtqzKtzv5b2Mi1OSleCIiMioc0ycikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSchfYp7+o0f5UKsNN7O0SRMZHj6s/MfY/9vqAIynFmOpA2AtxlwHYDy1GLoOU1MTNG5c+rfi/SVCX60WDBr6mn0aA2OpAzCeWoylDoC1lMRY6gCMpxZjqQPg8A4RkaQw9ImIJKTCof/rr7/CycmpxC+9Li4/Px8zZ86El5cX3Nzc8I9//AM3b96sbJ1ERFQNKhT6N27cQFhYmF63+p0wYQL27t2LiIgIREdH4/79+xg2bBjy8vIqXSwREVWNXqFfVFSE77//HgMHDtR+I09Zzp49iyNHjiA6Ohrvv/8+AgICsG7dOuTl5WHz5s1VLpqIiCpHr9A/d+4c5s+fj5EjRyIiIqLc/idOnIC5uTm8vLy0bVZWVnB3d8fRo0crXy0REVWJXqHv4OCAlJQUfPbZZ6V+A01x6enpsLOz0+lra2tb4lfhERGRYeg1T/+NN96o0EZVKhVkMplOu7m5eaW+u7NJE91t1TRrawuD77Mk1V2HuqAApvXqGayWquyvOuuoKaxFl7HUARhPLcZSB1BDH84q63tZyvq+1dI8fKgy6IcbrK0tkJ1d+xeca6IOa2sLnOhf+tcfVjevHduq9RiM5W8DsBZjrgMwnloMXYepqUmZJ8o1Mk9fJpPpfDcq8HIaZ0nvAIiIyDBqJPTt7e2RlZWlc8afmZkJe3v7mtglERHpoUZC39vbG0+ePMHJkye1bTk5OTh79iw8PT1rYpdERKSHagn9nJwcXLx4UXuR1t3dHZ07d8bEiRORkJCAAwcO4OOPP4aFhQUGDx5cHbskIqJKqJbQT01NRXBwMK5cuaJtW7x4Mbp374558+YhKioKzZs3x7p162BpaVkduyQiokowEcqaamMkOHunerfJ2TvVg7UYbx2A8dQiidk7RERknBj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEIY+kREEsLQJyKSEIY+EZGEMPSJiCSEoU9EJCEMfSIiCWHoExFJCEOfiEhCGPpERBLC0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSQhDn4hIQhj6REQSwtAnIpIQhj4RkYToHfq7d+9G37594erqisDAQCQmJpbZPycnBwqFAt7e3ujcuTPCwsJw8+bNKpZLRERVoVfoJyUlISIiAt7e3liyZAk6d+6MyMhI7N27t8T+giAgPDwcR48eRUREBObNm4fs7GwMGzYMubm51XoARESkvzr6dIqJiUFgYCAUCgUAwMfHB7m5uVi4cCF69+6t0//mzZs4f/48oqOjMWDAAACAg4MD/P39cejQIbz//vvVdwRERKS3cs/0s7KyoFQqERAQIGrv1asX0tPTkZWVpbPO8+fPAQDm5ubaNktLSwDA48ePq1IvERFVQbmhn56eDgCwt7cXtdvZ2QEAMjIydNZp27YtunTpgiVLluDGjRvIycnB7Nmz0bBhQ/j7+1dH3UREVAnlDu/k5eUBAGQymahdcxavUqlKXG/GjBkYPXo0+vTpAwCoV68elixZAhsbmyoVTERElVdu6AuCUOZyU1PdNws3btxASEgIbG1tMXXqVNSvXx9btmzB2LFjsXr1anTq1KlCRTZpIiu/UzWztrYw+D5LYix1VEV1H4MxPSasRZex1AEYTy3GUgegR+hbWLwsNj8/X9SuOcPXLC9u3bp1AIC4uDjtWL6Xlxc++ugjfP311/jxxx8rVOTDhyqo1WW/+FQna2sLZGfnGWx/hqyjNp581XkMxvK3AViLMdcBGE8thq7D1NSkzBPlcsf0NWP5SqVS1J6ZmSlaXtydO3fg4OCgDXwAMDExQceOHXH9+nX9KiciompXbujb2dmhVatWOnPy9+/fj9atW6NFixY669jb2+P333/HkydPRO2XLl1Cy5Ytq1gyERFVll7z9MPDw6FQKGBpaYmuXbvi4MGDSE5ORkxMDICXn75VKpVo06YNZDIZPv74Y+zcuRMjR47EmDFjUL9+fezYsQNnzpzRrkNERIanV+gHBQWhoKAAcXFxSEhIgI2NDaKjo7Uzc1JTU6FQKLB+/Xp06dIFrVq1wubNmzF//nwoFAqYmJhALpdj7dq18PT0rNEDIiKi0ukV+gAQEhKCkJCQEpcFBQUhKChI1Obg4IBly5ZVrToiIqpWvMsmEZGEMPSJiCSEoU9EJCEMfSIiCWHoExFJCEOfiEhCGPpERBLC0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSQhDn4hIQhj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEIY+kREEsLQJyKSEIY+EZGEMPSJiCSEoU9EJCEMfSIiCdE79Hfv3o2+ffvC1dUVgYGBSExMLLO/Wq3GsmXL0KNHD7i6uuK9997Dnj17qlovERFVQR19OiUlJSEiIgLDhw+Ht7c3UlJSEBkZifr166N3794lrvP1118jPj4eEydORNu2bbFnzx5MmjQJMpkMfn5+1XoQRESkH71CPyYmBoGBgVAoFAAAHx8f5ObmYuHChSWGvlKpxPfff48vv/wSAwcOBAB4eHjg5s2bOHbsGEOfiKiWlBv6WVlZUCqVmDhxoqi9V69eSE5ORlZWFmxsbETLUlJSUL9+fQwYMEDUvnHjxqpXTERElVbumH56ejoAwN7eXtRuZ2cHAMjIyNBZJy0tDfb29jh58iT69euHdu3aISAgAElJSdVRMxERVVK5oZ+XlwcAkMlkonZzc3MAgEql0lknJycHd+/exdSpUzFkyBCsXr0aTk5OmDBhAk6dOlUddRMRUSWUO7wjCEKZy01NdV83CgsLkZOTg+XLl6Nbt24AgHfffRfp6elYvHgx3n333QoV2aSJrPxO1cza2sLg+yyJsdRRFdV9DMb0mLAWXcZSB2A8tRhLHYAeoW9h8bLY/Px8UbvmDF+zvDhzc3OYmZnBy8tL22ZqagpPT09s3bq1wkU+fKiCWl32i091sra2QHZ2nsH2Z8g6auPJV53HYCx/G4C1GHMdgPHUYug6TE1NyjxRLnd4RzOWr1QqRe2ZmZmi5cXZ2dlBrVajqKhI1F5YWAgTE5PyqyYiohpRbujb2dmhVatW2Lt3r6h9//79aN26NVq0aKGzjo+PDwRBQHJysratqKgIx44dQ8eOHauhbCIiqgy95umHh4dDoVDA0tISXbt2xcGDB5GcnIyYmBgALy/cKpVKtGnTBjKZDB4eHvDz88Ps2bPx9OlTtG7dGps2bcLt27exYMGCGj0gIiIqnV6hHxQUhIKCAsTFxSEhIQE2NjaIjo5Gnz59AACpqalQKBRYv349unTpAgCIjY3FwoULsXLlSuTm5qJdu3aIi4uDs7NzzR0NERGVyUQob3qOEeCF3Ord5on+H1TrNsvitWMbL+QagLHUYix1AMZTy1/uQi4REf33YOgTEUkIQ5+ISEIY+kREEsLQJyKSEIY+EZGEMPSJiCSEoU9EJCEMfSIiCWHoExFJCEOfiEhCGPpERBLC0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSQhDn4hIQhj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEIY+kREEsLQJyKSEL1Df/fu3ejbty9cXV0RGBiIxMREvXdy9+5ddOzYEUuXLq1MjUREVE30Cv2kpCRERETA29sbS5YsQefOnREZGYm9e/eWu64gCJg6dSpUKlWViyUioqqpo0+nmJgYBAYGQqFQAAB8fHyQm5uLhQsXonfv3mWuu2nTJqSnp1e9UiIiqrJyz/SzsrKgVCoREBAgau/VqxfS09ORlZVV5rrz58/HrFmzql4pERFVWbmhrzlLt7e3F7Xb2dkBADIyMkpcT61WIyoqCoGBgfD19a1qnUREVA3KHd7Jy8sDAMhkMlG7ubk5AJQ6Vv/dd9/h1q1bWL58eVVrRJMmsvI7VTNrawuD77MkxlJHVVT3MRjTY8JadBlLHYDx1GIsdQB6hL4gCGUuNzXVfbNw48YNfPvtt4iNjYWFRdUP9uFDFdTqsuuoTtbWFsjOzjPY/gxZR208+arzGIzlbwOwFmOuAzCeWgxdh6mpSZknyuUO72hCOz8/X9SuOcN/NdRfvHgBhUKB3r17w8vLC0VFRSgqKgLwcshH828iIjK8ckNfM5avVCpF7ZmZmaLlGnfv3sWlS5eQmJgIJycn7Q8ALFq0SPtvIiIyvHKHd+zs7NCqVSvs3bsXPXv21Lbv378frVu3RosWLUT9mzZtiq1bt+ps58MPP8TgwYPxwQcfVEPZRERUGXrN0w8PD4dCoYClpSW6du2KgwcPIjk5GTExMQCAnJwcKJVKtGnTBjKZDC4uLiVup2nTpqUuIyKimqfXJ3KDgoIwc+ZMHD9+HOHh4fjpp58QHR2NPn36AABSU1MRHByMK1eu1GixRERUNXqd6QNASEgIQkJCSlwWFBSEoKCgMtdPS0urWGVERFTteJdNIiIJYegTEUkIQ5+ISEIY+kREEsLQJyKSEIY+EZGEMPSJiCSEoU9EJCEMfSIiCWHoExFJCEOfiEhCGPpERBLC0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSQhDn4hIQhj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEIY+kREEqJ36O/evRt9+/aFq6srAgMDkZiYWGb/7OxsTJs2Dd26dYObmxuCgoKQnJxc1XqJiKgK6ujTKSkpCRERERg+fDi8vb2RkpKCyMhI1K9fH71799bpX1BQgNGjRyMvLw9jx45F06ZNsW/fPowfPx4vXrzA3//+92o/ECIiKp9eoR8TE4PAwEAoFAoAgI+PD3Jzc7Fw4cISQ//o0aO4du0aEhIS4OrqCgDw8vLCnTt3sGrVKoY+EVEtKXd4JysrC0qlEgEBAaL2Xr16IT09HVlZWTrrmJubIzg4GC4uLqL2N998E0qlsoolExFRZZV7pp+eng4AsLe3F7Xb2dkBADIyMmBjYyNa5uHhAQ8PD1FbYWEhjhw5grfeeqtKBRMRUeWVe6afl5cHAJDJZKJ2c3NzAIBKpdJrR9988w1u3ryJMWPGVLRGIiKqJuWe6QuCUOZyU9OyXzcEQcA333yD7777DqNGjYK/v3/FKgTQpIms/E7VzNrawuD7LImx1FEV1X0MxvSYsBZdxlIHYDy1GEsdgB6hb2Hxstj8/HxRu+YMX7O8JAUFBYiKisKePXswatQoTJkypVJFPnyoglpd9otPdbK2tkB2dp7B9mfIOmrjyVedx2AsfxuAtRhzHYDx1GLoOkxNTco8US439DVj+UqlEo6Ojtr2zMxM0fJXqVQqhIWF4fz585g6dSqGDx9eocKJiKj6lTumb2dnh1atWmHv3r2i9v3796N169Zo0aKFzjovXrzAp59+ikuXLiEmJoaBT0RkJPSapx8eHg6FQgFLS0t07doVBw8eRHJyMmJiYgAAOTk5UCqVaNOmDWQyGX744QecOXMGwcHBaN68OS5evKjdlomJCdq3b18jB0NERGXTK/SDgoJQUFCAuLg4JCQkwMbGBtHR0ejTpw8AIDU1FQqFAuvXr0eXLl2wb98+AEB8fDzi4+NF2zIzM8PVq1er+TCIiEgfeoU+AISEhCAkJKTEZUFBQQgKCtL+vn79+qpXRkRE1Y532SQikhCGPhGRhDD0iYgkhKFPRCQhDH0iIglh6BMRSQhDn4hIQhj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEIY+kREEsLQJyKSEIY+EZGEMPSJiCSEoU9EJCEMfSIiCWHoExFJCEOfiEhCGPpERBLC0CcikhCGPhGRhDD0iYgkhKFPRCQhDH0iIgnRO/R3796Nvn37wtXVFYGBgUhMTCyzf35+PmbOnAkvLy+4ubnhH//4B27evFnFcomIqCr0Cv2kpCRERETA29sbS5YsQefOnREZGYm9e/eWus6ECROwd+9eREREIDo6Gvfv38ewYcOQl5dXbcUTEVHF1NGnU0xMDAIDA6FQKAAAPj4+yM3NxcKFC9G7d2+d/mfPnsWRI0ewatUq+Pr6AgA6deqEHj16YPPmzRgzZkw1HgIREemr3DP9rKwsKJVKBAQEiNp79eqF9PR0ZGVl6axz4sQJmJubw8vLS9tmZWUFd3d3HD16tBrKJiKiyij3TD89PR0AYG9vL2q3s7MDAGRkZMDGxkZnHTs7O5iZmYnabW1tkZycXOEiTU1NKrxOVdXGPktiLHVURXUfgzE9JqxFl7HUARhPLYaso7x9lRv6mjF4mUwmajc3NwcAqFQqnXVUKpVOf806JfUvT+PG5hVep6qaNNGtvzbURB1eO7ZV+zbLUt3HYCx/G4C1lMRY6gCMpxZjqQPQY3hHEISyN2Cqu4my1impPxERGUa5CWxhYQHg5RTM4jRn7JrlxclkMp3+mm2U9A6AiIgMo9zQ14zlK5VKUXtmZqZo+avrZGVl6ZzxZ2ZmltifiIgMo9zQt7OzQ6tWrXTm5O/fvx+tW7dGixYtdNbx9vbGkydPcPLkSW1bTk4Ozp49C09Pz2oom4iIKkOvefrh4eFQKBSwtLRE165dcfDgQSQnJyMmJgbAy0BXKpVo06YNZDIZ3N3d0blzZ0ycOBERERFo1KgRFi1aBAsLCwwePLhGD4iIiEpnIpR3pfb//fDDD4iLi8Pdu3dhY2ODMWPGYMCAAQCAH3/8EQqFAuvXr0eXLl0AALm5uZg7dy5SUlKgVqvRsWNHREVF4c0336yxgyEiorLpHfpERPTXx/mTREQSwtAnIpIQhn4xFb19dE379ddf4eTkhHv37tXK/tVqNTZv3oz33nsPbm5u8Pf3x5w5cyr1qeqqEgQB69atQ69eveDq6op+/fph165dBq/jVZ999hl69uxZK/suKiqCq6srHB0dRT9ubm4Gr+Wnn37C4MGD0b59e3h7e2PWrFklflanJp0+fVrnsSj+s337doPWs3nzZgQGBqJDhw547733sHPnToPuvzR6zd6RAs3to4cPHw5vb2+kpKQgMjIS9evXL/FOojXtxo0bCAsLQ1FRkcH3rbF69Wp8++23GDVqFDw8PJCRkYHY2Fhcv34da9asMWgtK1asQGxsLD7//HN06NABR48eRUREBMzMzNCnTx+D1qKxY8cOHDhwALa2trWy/4yMDDx//hzR0dFo3bq1tt3Qn3q/ePEiRowYge7du2PZsmXIzMzEv//9b+Tk5Ghn+BmCk5MT4uPjRW2CIOCf//wnnj59Cj8/P4PVEh8fjxkzZmDkyJHw8fHBkSNHMHnyZNStWxeBgYEGq6NEAgmCIAj+/v7C+PHjRW3jxo0TevfubdA6CgsLhY0bNwpubm5C586dBblcLty9e9egNQiCIKjVasHd3V2YMWOGqH3Pnj2CXC4Xrl69arBaCgoKBHd3d+HLL78UtQ8ZMkQYPHiwweoo7t69e4K7u7vg6+sr+Pv710oNO3fuFNq2bSs8ffq0VvavERoaKoSGhgpqtVrbtnHjRqFHjx61Xtu6deuEtm3bChcvXjTofoODg4WhQ4eK2j766CNhyJAhBq2jJBzeQeVuH11Tzp07h/nz52PkyJGIiIgw2H5flZ+fj379+uHvf/+7qF0z5fbVT2jXJDMzM2zYsEHnexjq1q2L58+fG6yO4qZNmwYvLy94eHjUyv6Bl8N/tra2aNCgQa3VoPnQ5eDBg2Fi8p+7O4aGhiIlJaVWa8vOzsbChQu1w06G9Pz5c+1NKTUaNWqEx48fG7SOkjD0od/tow3FwcEBKSkp+Oyzz3RuTW1IMpkM06ZNQ8eOHUXtKSkpAIA2bdoYrBZTU1M4OjqiWbNmEAQBDx48wMqVK3Hy5EkEBwcbrA6NhIQEXLlyBf/6178Mvu/i0tLSUK9ePYwaNQpubm5wd3fH9OnTDXrN5bfffoMgCLC0tMT48ePRoUMHdOzYEV988QWePXtmsDpKsmjRIpiammL8+PEG3/ewYcNw7NgxJCcnQ6VSYe/evUhNTUX//v0NXsurOKaPyt0+uqa88cYbBttXRV26dAkrV66Ev78/HBwcaqWG/fv3Y+zYsQCArl27ol+/fgbd/+3btzFnzhzMmTMHVlZWBt33q65duwaVSoWBAwfik08+weXLl7Fo0SJkZGRg/fr1ojPvmpKTkwMAiIqKQs+ePbFs2TKkpaXh22+/xfPnzzF37twar6EkDx8+RGJiIkaOHInXX3/d4Pvv27cvTp06JXrBef/99zF69GiD1/Iqhj4qd/toqTl37hw++eQTtGrVCrNnz661Otq1a4eNGzciLS0NCxcuxJgxY/Ddd98ZJOAEQcDUqVPh5+eHXr161fj+yhMTEwNLS0s4OjoCANzd3dGkSRNMnjwZJ0+eFH1zXU0pLCwEALzzzjv44osvAAAeHh4QBAHR0dEIDw/X+ZIlQ0hISIBarcawYcMMvm8A+PTTT3HhwgUoFAq0a9cOly5dwtKlS7XvoGsTQx+Vu320lCQlJSEqKgqtW7fG6tWr0bhx41qrxcbGBjY2NnB3d4dMJkNkZCQuXLiAd955p8b3/f333yMtLQ27du3SzqrSnDAUFRXBzMzMIC8+Gp07d9Zp69q1K4CX7wIMEfqad8Oa78LW8Pb2xty5c5GWllYrob9v3z74+PjUyrux8+fP4/jx45gzZw6CgoIAvPxbvf7665g+fToGDRoEuVxu8Lo0eAqLyt0+WirWrl2LiRMnokOHDvj+++/RtGlTg9fw+PFjJCYm4v79+6L2du3aAQD++OMPg9Sxb98+PHr0CN7e3nBycoKTkxMSExOhVCrh5ORk0HngDx8+REJCgs4kA804uqFemDVTRQsKCkTtmncAhnwR1Lh//z6uXr1aa1Mj79y5AwA6JyKdOnUCAFy/ft3gNRXH0Eflbh8tBQkJCZg7dy4CAwOxevXqWnvHo1arERUVpTMH+8SJEwBgsLOmmTNnYuvWraKfbt26oXnz5tp/G4qJiQmmT5+OjRs3itqTkpJgZmamcwG+pjg4OKBly5ZISkoStR8+fBh16tSplQ+KXbp0CQAM9hi8SnOSeO7cOVH7xYsXAQAtW7Y0dEkiHN75f+XdPlpqHj58iK+++gotW7ZEaGgorl69Klpua2trsLfOVlZW+Oijj7By5UrUr18fLi4uOHfuHFasWIGBAwca7M6tJe2nUaNGqFevHlxcXAxSg4aVlRVCQ0OxYcMGyGQydOrUCefOncPy5csRGhqqnXlW00xMTBAREaG9jXpQUBAuX76MZcuWYciQIbUyvPLbb7+hQYMGtRauTk5O8Pf3x1dffYW8vDy8/fbbuHz5MpYsWQJfX1+DTx99FUP//wUFBaGgoABxcXFISEiAjY0NoqOja+3TnrXt2LFj+PPPP3H79m2EhobqLJ83b55Bp58pFAr87W9/w9atW7Fo0SI0b94cY8eOxahRowxWg7GJjIxEs2bNsG3bNqxcuRLNmjXD2LFjDT5DpE+fPqhXrx6WLFmCsLAwNGnSBOHh4QgLCzNoHRoPHjyolRk7xcXExGDx4sVYt24dHj58iJYtW2LkyJE6nzWpDby1MhGRhHBMn4hIQhj6REQSwtAnIpIQhj4RkYQw9ImIJIShT0QkIQx9IiIJYegTEUkIQ5+ISEL+DxLgXmdNmrkwAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 5: Agent observes itself in location: (1, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 6: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 7: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 8: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time 9: Agent observes itself in location: (2, 2)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "D = utils.onehot(grid_locations.index((0,0)), n_states) # let's have the agent believe it starts in location (0,0) (upper left corner) \n", "env = GridWorldEnv(starting_state = (0,0))\n", "qs_final = active_inference_with_planning(A, B, C, D, n_actions, env, policy_len = 3, T = 10)" ] } ], "metadata": { "colab": { "collapsed_sections": [ "yJ9312In3r0Y", "kZmnZPB74Sc1", "61gmngb9449T", "v_ACEjni5fXJ", "_JMDEO2H6wMj", "ttPFk03l8PDa", "rh2fsJo_My-7", "E519ke5jNOIX", "Hi0XgIjzPrYX", "hBrU3E67QCYB", "gu73H44qQXwg", "rKkZTJHtRUhl", "_FXn27owS96w", "6HAHCc7bT5eC", "jofLVCH7quQp", "_Bpows4RsRLd", "JLPPVtrysl41" ], "name": "Active Inference with pymdp: Tutorial 1", "provenance": [] }, "kernelspec": { "display_name": "Python 3.8.8 ('base')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "70b7ceca5df5387258d861d4588082cea9500e731be001548c95afd8cd8c3af8" } } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: docs/notebooks/cue_chaining_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Active Inference Demo: Epistemic Chaining\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/cue_chaining_demo.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This demo notebook builds a generative model from scratch, constructs an `Agent` instance using the constructed generative model, and then runs an active inference simulation in a simple environment.\n", "\n", "The environment used here is similar in spirit to the [T-Maze demo](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/tmaze_demo.html), but the task structure is more complex. Here, we analogize the agent to a rat tasked with solving a spatial puzzle. The rat must sequentially visit a sequence of two cues located at different locations in a 2-D grid world, in order to ultimately reveal the locations of two (opposite) reward outcomes: one location will give the rat a reward (\"Cheese\") and the other location will give the rat a punishment (\"Shock\").\n", "\n", "Using active inference to solve a POMDP representation of this task, the rat can successfully forage the correct cues in sequence, in order to ultimately discover the location of the \"Cheese\", and avoid the \"Shock\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "from pymdp.agent import Agent\n", "from pymdp import utils" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grid World Parameters\n", "Let's begin by initializing several variables related to the physical environment inhabited by the agent. These variables will encode things like the dimensions of the grid, the possible locations of the different cues, and the possible locations of the reward or punishment.\n", "\n", "Having these variables defined will also come in handy when setting up the generative model of our agent and when creating the environment class.\n", "\n", "We will create a grid world with dimensions $5 \\times 7$. Particular locations of the grid are indexed as (y, x) tuples, that select a particular row and column respectively of that location in the grid.\n", "\n", "By design of the task, one location in the grid world contain a cue: **Cue 1**. There will be four additional locations, that will serve as possible locations for a second cue: **Cue 2**. Crucially, only *one* of these four additional locations will actually contain **Cue 2** - the other 3 will be empty. When the agent visits **Cue 1** by moving to its location, one of four signals is presented, which each unambiguously signal which of the 4 possible locations **Cue 2** occupies -- we can refer to these Cue-2-location-signals with obvious names: `L1`, `L2`, `L3`, `L4`. Once **Cue 2**'s location has been revealed, by visiting that location the agent will then receive one of two possible signals, that indicate where the hidden reward is located (and conversely, where the hidden punishment lies). These two possible reward/punishment locations are indicated by two locations: \"TOP\" (meaning the \"Cheese\" reward is on the upper of the two locations) or \"BOTTOM\" (meaning the \"Cheese\" reward is on the lower of the two locations).\n", "\n", "In this way, the most efficient and risk-sensitive way to achieve reward in this task is to first visit **Cue 1**, in order to figure out the location of **Cue 2**, in order to figure out the location of the reward.\n", "\n", "*Tip*: When setting up `pymdp` generative models and task environments, we recommend creating additional variables, like lists of strings or dicts with string-valued keys, that help you relate the values of various aspects of the task to semantically-meaning labels. These come in handy when generating print statements during debugging or labels for plotting. For example, below we create a list called `reward_conditions` that stores the \"names\" of the two reward conditions: `\"TOP\"` and `\"BOTTOM\"`" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "grid_dims = [5, 7] # dimensions of the grid (number of rows, number of columns)\n", "num_grid_points = np.prod(grid_dims) # total number of grid locations (rows X columns)\n", "\n", "# create a look-up table `loc_list` that maps linear indices to tuples of (y, x) coordinates \n", "grid = np.arange(num_grid_points).reshape(grid_dims)\n", "it = np.nditer(grid, flags=[\"multi_index\"])\n", "\n", "loc_list = []\n", "while not it.finished:\n", " loc_list.append(it.multi_index)\n", " it.iternext()\n", "\n", "# (y, x) coordinate of the first cue's location, and then a list of the (y, x) coordinates of the possible locations of the second cue, and their labels (`L1`, `L2`, ...)\n", "cue1_location = (2, 0)\n", "\n", "cue2_loc_names = ['L1', 'L2', 'L3', 'L4']\n", "cue2_locations = [(0, 2), (1, 3), (3, 3), (4, 2)]\n", "\n", "# names of the reward conditions and their locations\n", "reward_conditions = [\"TOP\", \"BOTTOM\"]\n", "reward_locations = [(1, 5), (3, 5)]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the grid world\n", "\n", "Let's quickly use the variables we just defined to visualize the grid world, including the **Cue 1** location, the possible **Cue 2** locations, and the possible reward locations (in gray, since we don't know which one has the \"Cheese\" and which one has the \"Shock\")\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import matplotlib.patches as patches\n", "import matplotlib.cm as cm\n", "\n", "fig, ax = plt.subplots(figsize=(10, 6)) \n", "\n", "# create the grid visualization\n", "X, Y = np.meshgrid(np.arange(grid_dims[1]+1), np.arange(grid_dims[0]+1))\n", "h = ax.pcolormesh(X, Y, np.ones(grid_dims), edgecolors='k', vmin = 0, vmax = 30, linewidth=3, cmap = 'coolwarm')\n", "ax.invert_yaxis()\n", "\n", "# Put gray boxes around the possible reward locations\n", "reward_top = ax.add_patch(patches.Rectangle((reward_locations[0][1],reward_locations[0][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor=[0.5, 0.5, 0.5]))\n", "reward_bottom = ax.add_patch(patches.Rectangle((reward_locations[1][1],reward_locations[1][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor=[0.5, 0.5, 0.5]))\n", "\n", "text_offsets = [0.4, 0.6]\n", "\n", "cue_grid = np.ones(grid_dims)\n", "cue_grid[cue1_location[0],cue1_location[1]] = 15.0\n", "for ii, loc_ii in enumerate(cue2_locations):\n", " row_coord, column_coord = loc_ii\n", " cue_grid[row_coord, column_coord] = 5.0\n", " ax.text(column_coord+text_offsets[0], row_coord+text_offsets[1], cue2_loc_names[ii], fontsize = 15, color='k')\n", "h.set_array(cue_grid.ravel())\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generative model\n", "\n", "The hidden states $\\mathbf{s}$ of the generative model are factorized into three hidden states factors:\n", "\n", "1. a **Location** hidden state factor with as many levels as there are grid locations. This encodes the agent's location in the grid world.\n", "2. a **Cue 2 Location** hidden state factor with 4 levels -- this encodes in which of the four possible locations **Cue 2** is located.\n", "3. a **Reward Condition** hidden state factor with 2 levels -- this encodes which of the two reward locations (\"TOP\" or \"BOTTOM\") the \"Cheese\" is to be found in. When the **Reward Condition** level is \"TOP\", then the \"Cheese\" reward is the upper of the two locations, and the \"Shock\" punishment is on the lower of the two locations. The locations are switched in the \"BOTTOM\" level of the **Reward Condition** factor.\n", "\n", "The observations $\\mathbf{o}$ of the generative model are factorized into four different observation modalities:\n", "\n", "1. a **Location** observation modality with as many levels as there are grid locations, representing the agent's observation of its location in the grid world.\n", "2. a **Cue 1** observation modality with 5 levels -- this is an observation, only obtained at the **Cue 1** location, that signals in which of the 4 possible locations **Cue 2** is located. When not at the **Cue 1** location, the agent sees `Null` or a meaningless observation.\n", "3. a **Cue 2** observation modality with 3 levels -- this is an observation, only obtained at the **Cue 2** location, that signals in which of the two reward locations (\"TOP\" or \"BOTTOM\") the \"Cheese\" is located. When not at the **Cue 2** location, the agent sees `Null` or a meaningless observation.\n", "4. a **Reward** observation modality with 3 levels -- this is an observation that signals whether the agent is receiving \"Cheese\", \"Shock\" or nothing at all (\"Null\"). The agent only receives \"Cheese\" or \"Shock\" when occupying one of the two reward locations, and `Null` otherwise.\n", "\n", "\n", "As is the usual convention in `pymdp`, let's create a list that contains the dimensionalities of the hidden state factors, named `num_states`, and a list that contains the dimensionalities of the observation modalities, named `num_obs`. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# list of dimensionalities of the hidden states -- useful for creating generative model later on\n", "num_states = [num_grid_points, len(cue2_locations), len(reward_conditions)]\n", "\n", "# Names of the cue1 observation levels, the cue2 observation levels, and the reward observation levels\n", "cue1_names = ['Null'] + cue2_loc_names # signals for the possible Cue 2 locations, that only are seen when agent is visiting Cue 1\n", "cue2_names = ['Null', 'reward_on_top', 'reward_on_bottom']\n", "reward_names = ['Null', 'Cheese', 'Shock']\n", "\n", "num_obs = [num_grid_points, len(cue1_names), len(cue2_names), len(reward_names)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The observation model: **A** array\n", "Now using `num_states` and `num_obs` we can initialize `A`, the observation model" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "A_m_shapes = [ [o_dim] + num_states for o_dim in num_obs] # list of shapes of modality-specific A[m] arrays\n", "A = utils.obj_array_zeros(A_m_shapes) # initialize A array to an object array of all-zero subarrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's fill out the various modalities of the `A` array, encoding the agents beliefs about how hidden states probabilistically cause observations within each modality.\n", "\n", "Starting with the `0`-th modality, the **Location** observation modality: `A[0]`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# make the location observation only depend on the location state (proprioceptive observation modality)\n", "A[0] = np.tile(np.expand_dims(np.eye(num_grid_points), (-2, -1)), (1, 1, num_states[1], num_states[2]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can build the `1`-st modality, the **Cue 1** observation modality: `A[1]`" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# make the cue1 observation depend on the location (being at cue1_location) and the true location of cue2\n", "A[1][0,:,:,:] = 1.0 # default makes Null the most likely observation everywhere\n", "\n", "# Make the Cue 1 signal depend on 1) being at the Cue 1 location and 2) the location of Cue 2\n", "for i, cue_loc2_i in enumerate(cue2_locations):\n", " A[1][0,loc_list.index(cue1_location),i,:] = 0.0\n", " A[1][i+1,loc_list.index(cue1_location),i,:] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can build the `2`-nd modality, the **Cue 2** observation modality: `A[2]`" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# make the cue2 observation depend on the location (being at the correct cue2_location) and the reward condition\n", "A[2][0,:,:,:] = 1.0 # default makes Null the most likely observation everywhere\n", "\n", "for i, cue_loc2_i in enumerate(cue2_locations):\n", "\n", " # if the cue2-location is the one you're currently at, then you get a signal about where the reward is\n", " A[2][0,loc_list.index(cue_loc2_i),i,:] = 0.0 \n", " A[2][1,loc_list.index(cue_loc2_i),i,0] = 1.0\n", " A[2][2,loc_list.index(cue_loc2_i),i,1] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we build the 3rd modality, the **Reward** observation modality: `A[3]`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# make the reward observation depend on the location (being at reward location) and the reward condition\n", "A[3][0,:,:,:] = 1.0 # default makes Null the most likely observation everywhere\n", "\n", "rew_top_idx = loc_list.index(reward_locations[0]) # linear index of the location of the \"TOP\" reward location\n", "rew_bott_idx = loc_list.index(reward_locations[1]) # linear index of the location of the \"BOTTOM\" reward location\n", "\n", "# fill out the contingencies when the agent is in the \"TOP\" reward location\n", "A[3][0,rew_top_idx,:,:] = 0.0\n", "A[3][1,rew_top_idx,:,0] = 1.0\n", "A[3][2,rew_top_idx,:,1] = 1.0\n", "\n", "# fill out the contingencies when the agent is in the \"BOTTOM\" reward location\n", "A[3][0,rew_bott_idx,:,:] = 0.0\n", "A[3][1,rew_bott_idx,:,1] = 1.0\n", "A[3][2,rew_bott_idx,:,0] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The transition model: **B** array\n", "To create the `B` array or transition model, we have to further specify `num_controls`, which like `num_states` / `num_obs` is a list, but this time of the dimensionalities of each *control factor*, which are the hidden state factors that are controllable by the agent. Uncontrollable hidden state factors can be encoded as control factors of dimension 1. Once `num_controls` is defined, we can then use it and `num_states` to specify the dimensionality of the `B` arrays. Recall that in `pymdp` hidden state factors are conditionally independent of eachother, meaning that each sub-array `B[f]` describes the dynamics of only a single hidden state factor, and its probabilistic dependence on both its own state (at the previous time) and the state of its corresponding control factor.\n", "\n", "In the current grid world task, we will have the agent have the ability to make movements in the 4 cardinal directions (UP, DOWN, LEFT, RIGHT) as well as the option to stay in the same place (STAY). This means we will associate a single 5-dimensional control state factor with the first hidden state factor. \n", "\n", "*Note*: Make sure the indices of the `num_controls` variables \"lines up\" with those of `num_states`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# initialize `num_controls`\n", "num_controls = [5, 1, 1]\n", "\n", "# initialize the shapes of each sub-array `B[f]`\n", "B_f_shapes = [ [ns, ns, num_controls[f]] for f, ns in enumerate(num_states)]\n", "\n", "# create the `B` array and fill it out\n", "B = utils.obj_array_zeros(B_f_shapes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fill out `B[0]` according to the expected consequences of each of the 5 actions. Note that we also create a list that stores the names of each action, for interpretability." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "actions = [\"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"STAY\"]\n", "\n", "# fill out `B[0]` using the \n", "for action_id, action_label in enumerate(actions):\n", "\n", " for curr_state, grid_location in enumerate(loc_list):\n", "\n", " y, x = grid_location\n", "\n", " if action_label == \"UP\":\n", " next_y = y - 1 if y > 0 else y \n", " next_x = x\n", " elif action_label == \"DOWN\":\n", " next_y = y + 1 if y < (grid_dims[0]-1) else y \n", " next_x = x\n", " elif action_label == \"LEFT\":\n", " next_x = x - 1 if x > 0 else x \n", " next_y = y\n", " elif action_label == \"RIGHT\":\n", " next_x = x + 1 if x < (grid_dims[1]-1) else x \n", " next_y = y\n", " elif action_label == \"STAY\":\n", " next_x = x\n", " next_y = y\n", "\n", " new_location = (next_y, next_x)\n", " next_state = loc_list.index(new_location)\n", " B[0][next_state, curr_state, action_id] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fill out `B[1]` and `B[2]` as identity matrices, encoding the fact that those hidden states are uncontrollable" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "B[1][:,:,0] = np.eye(num_states[1])\n", "B[2][:,:,0] = np.eye(num_states[2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prior preferences: the **C** vectors\n", "\n", "Now we specify the agent's prior over observations, also known as the \"prior preferences\" or \"goal vector.\" This is not technically a part of the same generative model used for inference of hidden states, but part of a special predictive generative model using for policy inference. \n", "\n", "Since the prior preferences are defined in `pymdp` as priors over observations, not states, so `C` will be an object array whose sub-arrays correspond to the priors over specific observation modalities, e.g `C[3]` encodes the prior preferences for different levels of the **Reward** observation modality." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "C = utils.obj_array_zeros(num_obs)\n", "\n", "C[3][1] = 2.0 # make the agent want to encounter the \"Cheese\" observation level\n", "C[3][2] = -4.0 # make the agent not want to encounter the \"Shock\" observation level" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prior over (initial) hidden states: the **D** vectors\n", "\n", "Now we specify the agent's prior over initial hidden states, the `D` array. Since it's defined over the multi-factor hidden states in this case, `D` will be an object array whose sub-arrays correspond to the priors over specific hidden state factors, e.g `D[0]` encodes the prior beliefs over the initial location of the agent in the grid world." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "D = utils.obj_array_uniform(num_states)\n", "D[0] = utils.onehot(loc_list.index((0,0)), num_grid_points)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generative process\n", "\n", "Now we need to write down the \"rules\" of the game, i.e. the environment that the agent will actually be interacting with. The most concise way to do this in `pymdp` is by adopting a similar format to what's used in frameworks like OpenAIGym -- namely, we create an `env` class that takes actions as inputs to a `self.step()` method, and returns observations for the agent as outputs. In Active inference we refer to this agent-independent, physical \"reality\" in which the agent operates as the *generative process*, to be distinguished from the agent's representation of that reality the *generative model* (the `A`, `B`, `C` and `D` that we just wrote down above)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Writing a custom `env` \n", "\n", "Now we'll define an environment class called `GridWorldEnv`. The constructor for this class allows you to establish various parameters of the generative process, like where the agent starts in the grid-world at the beginning of the trial (`starting_loc`), the location of **Cue 1** (`cue1_loc`), the location of **Cue 2** (`cue2_loc`), and the reward condition (`reward_condition`).\n", "\n", "*Note*: Remember the distinction between the generative model and the generative process: one can build the environment class to be as arbitrarily different from the agent's generative model as desired. For example, for the `GridWorldEnv` example, you could construct the agent's `A` array such that the agent *believes* **Cue 1** is in Location `(1,0)`, but in fact the cue is located somewhere else like `(3,0)` (as would be set by the `cue1_loc` argument to the `GridWorldEnv` constructor). Similarly, one could write the internal `step` method of the `GridWorldEnv` class so that the way the `reward_condition` is signalled is opposite from what the agent expects -- so when the agent sees a particular signal at the **Cue 2** location, they *assume* (via the `A` array) it means that the \"Cheese\" is located on the `\"TOP\"` location, but in fact the rule is switched so that \"Shock\" is at the `\"TOP\"` location in reality, and \"Cheese\" is actually at the `\"BOTTOM\"` location." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "class GridWorldEnv():\n", " \n", " def __init__(self,starting_loc = (0,0), cue1_loc = (2, 0), cue2 = 'L1', reward_condition = 'TOP'):\n", "\n", " self.init_loc = starting_loc\n", " self.current_location = self.init_loc\n", "\n", " self.cue1_loc = cue1_loc\n", " self.cue2_name = cue2\n", " self.cue2_loc_names = ['L1', 'L2', 'L3', 'L4']\n", " self.cue2_loc = cue2_locations[self.cue2_loc_names.index(self.cue2_name)]\n", "\n", " self.reward_condition = reward_condition\n", " print(f'Starting location is {self.init_loc}, Reward condition is {self.reward_condition}, cue is located in {self.cue2_name}')\n", " \n", " def step(self,action_label):\n", "\n", " (Y, X) = self.current_location\n", "\n", " if action_label == \"UP\": \n", " \n", " Y_new = Y - 1 if Y > 0 else Y\n", " X_new = X\n", "\n", " elif action_label == \"DOWN\": \n", "\n", " Y_new = Y + 1 if Y < (grid_dims[0]-1) else Y\n", " X_new = X\n", "\n", " elif action_label == \"LEFT\": \n", " Y_new = Y\n", " X_new = X - 1 if X > 0 else X\n", "\n", " elif action_label == \"RIGHT\": \n", " Y_new = Y\n", " X_new = X +1 if X < (grid_dims[1]-1) else X\n", "\n", " elif action_label == \"STAY\":\n", " Y_new, X_new = Y, X \n", " \n", " self.current_location = (Y_new, X_new) # store the new grid location\n", "\n", " loc_obs = self.current_location # agent always directly observes the grid location they're in \n", "\n", " if self.current_location == self.cue1_loc:\n", " cue1_obs = self.cue2_name\n", " else:\n", " cue1_obs = 'Null'\n", "\n", " if self.current_location == self.cue2_loc:\n", " cue2_obs = cue2_names[reward_conditions.index(self.reward_condition)+1]\n", " else:\n", " cue2_obs = 'Null'\n", " \n", " # @NOTE: here we use the same variable `reward_locations` to create both the agent's generative model (the `A` matrix) as well as the generative process. \n", " # This is just for simplicity, but it's not necessary - you could have the agent believe that the Cheese/Shock are actually stored in arbitrary, incorrect locations.\n", "\n", " if self.current_location == reward_locations[0]:\n", " if self.reward_condition == 'TOP':\n", " reward_obs = 'Cheese'\n", " else:\n", " reward_obs = 'Shock'\n", " elif self.current_location == reward_locations[1]:\n", " if self.reward_condition == 'BOTTOM':\n", " reward_obs = 'Cheese'\n", " else:\n", " reward_obs = 'Shock'\n", " else:\n", " reward_obs = 'Null'\n", "\n", " return loc_obs, cue1_obs, cue2_obs, reward_obs\n", "\n", " def reset(self):\n", " self.current_location = self.init_loc\n", " print(f'Re-initialized location to {self.init_loc}')\n", " loc_obs = self.current_location\n", " cue1_obs = 'Null'\n", " cue2_obs = 'Null'\n", " reward_obs = 'Null'\n", "\n", " return loc_obs, cue1_obs, cue2_obs, reward_obs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Active Inference\n", "\n", "Now that we have a generative model and generative process set up, we can quickly run active inference in `pymdp`. In order to do this, all we need to do is to create an `Agent` using the `Agent()` constructor and create a generative process / environment using our custom `GridWorldEnv` class. Then we just exchange observations and actions between the two in a loop over time, where the agent updates its beliefs and actions using the `Agent` methods like `infer_states()` and `infer_policies()`.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialize an `Agent` and an instance of `GridWorldEnv`\n", "We can quickly construct an instance of `Agent` using our generative model arrays as inputs: `A`, `B`, `C`, and `D`. Since we are dealing with a spatially-extended navigation example, we will also use a `policy_len` parameter that lets the agent plan its movements forward in time. This sort of temporally deep planning is needed because of A) the local nature of the agent's action repetoire (only being able to move UP, LEFT, RIGHT, and DOWN), and B) the physical distance between the cues and reward locations in the grid world.\n", "\n", "We can also initialize the `GridWorldEnv` class using a desired starting location, a Cue 1 location, Cue 2 location, and reward condition. We can get the first (multi-modality) observation of the simulation by using `env.reset()`" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting location is (0, 0), Reward condition is BOTTOM, cue is located in L4\n", "Re-initialized location to (0, 0)\n" ] } ], "source": [ "my_agent = Agent(A = A, B = B, C = C, D = D, policy_len = 4)\n", "\n", "my_env = GridWorldEnv(starting_loc = (0,0), cue1_loc = (2, 0), cue2 = 'L4', reward_condition = 'BOTTOM')\n", "\n", "loc_obs, cue1_obs, cue2_obs, reward_obs = my_env.reset()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run an active inference loop over time\n", "...saving the history of the rat's locations as you do so. Include some print statements if you want to see the output of the agent's choices as they unfold." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Action at time 0: DOWN\n", "Grid location at time 0: (1, 0)\n", "Reward at time 0: Null\n", "Action at time 1: DOWN\n", "Grid location at time 1: (2, 0)\n", "Reward at time 1: Null\n", "Action at time 2: DOWN\n", "Grid location at time 2: (3, 0)\n", "Reward at time 2: Null\n", "Action at time 3: RIGHT\n", "Grid location at time 3: (3, 1)\n", "Reward at time 3: Null\n", "Action at time 4: DOWN\n", "Grid location at time 4: (4, 1)\n", "Reward at time 4: Null\n", "Action at time 5: RIGHT\n", "Grid location at time 5: (4, 2)\n", "Reward at time 5: Null\n", "Action at time 6: RIGHT\n", "Grid location at time 6: (4, 3)\n", "Reward at time 6: Null\n", "Action at time 7: RIGHT\n", "Grid location at time 7: (4, 4)\n", "Reward at time 7: Null\n", "Action at time 8: RIGHT\n", "Grid location at time 8: (4, 5)\n", "Reward at time 8: Null\n", "Action at time 9: UP\n", "Grid location at time 9: (3, 5)\n", "Reward at time 9: Cheese\n" ] } ], "source": [ "history_of_locs = [loc_obs]\n", "obs = [loc_list.index(loc_obs), cue1_names.index(cue1_obs), cue2_names.index(cue2_obs), reward_names.index(reward_obs)]\n", "\n", "T = 10 # number of total timesteps\n", "\n", "for t in range(T):\n", "\n", " qs = my_agent.infer_states(obs)\n", " \n", " my_agent.infer_policies()\n", " chosen_action_id = my_agent.sample_action()\n", "\n", " movement_id = int(chosen_action_id[0])\n", "\n", " choice_action = actions[movement_id]\n", "\n", " print(f'Action at time {t}: {choice_action}')\n", "\n", " loc_obs, cue1_obs, cue2_obs, reward_obs = my_env.step(choice_action)\n", "\n", " obs = [loc_list.index(loc_obs), cue1_names.index(cue1_obs), cue2_names.index(cue2_obs), reward_names.index(reward_obs)]\n", "\n", " history_of_locs.append(loc_obs)\n", "\n", " print(f'Grid location at time {t}: {loc_obs}')\n", "\n", " print(f'Reward at time {t}: {reward_obs}')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization\n", "\n", "Now let's do a quick visualization of the rat's movements over a single trial. We'll indicate the grid location and time of its movements using a hot colormap (so hotter colors means later in the trial), and indicate the Cue 1 and Cue 2 locations with purple outlined boxes. Each of the possible Cue 2 locations will be highlighted in a light blue.\n", "\n", "Try changing the initial settings of the generative process (the locations of Cue1, Cue 2, the reward condition, etc.) to see how and the extent to which the active inference agent can adapt its behavior to the changing environmental contingencies." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Cue 1 located at (4, 2), Cue 2 located at (4, 2), Cheese on BOTTOM')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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U7e+e2LRslDLjMYq6NJrVKhlioiISGEqjoSp354YFmqZqWQdXXrvGmqZIiIiUpiKImGq7LkLpZX9QizR6LHd/pSU9QixTBERESlURfEcJjNj8B4X8fF/r27zV6MARKJlDB59fgiRSWeVStTz4exHvzB90PCDWb9yPjVVa1m9ZDYAi+Y8S0XXvvTebhR9BqobWEQkHxVFwgTQd8cvs+rDh9iy9t02PfHbIqX0HTqJbn33CDE66Wzq4lt46u/nfGH6/1z6FK8/fQ3LFs7YNu2FB74LwAGTLqfPwCs6LEYREcle0SRMZsYuB1/DO0+fSSK+EXCtKCRGWZeBDN33e2GHJ53IgcdcwYHHNJ34nDzi6Q6MRkREwlAUY5galFb2Y4+j/k5JeW8sUtqi10ai5VR0G8LoI28jWlLZThGKiIhIISqqhAmgvNtg9j7uIfoMOZxItBwsYBMtRiRaxna7nMKeR/9Tz14SERGRLyiaLrl0sdKujDj4aqrWz2P53LtZv+R5LBKlIhnHAfFYBS6VBDP6DTuOgSPPoKL7DrkOW0RERPJUUSZMDbr2HsUuB1+NSyWp2fIpp7z8Q+pw3LfXJVT2Gk5Zl0GYhfv8JhERESk+RZ0wNbBIlMoew5jgf4XKs0PG5zYgERERKShFN4ZJREREJGxKmEREREQCKGESERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCKGESERERCaCESURERCRAYMJkZreb2Woze78jAhIRERHJN9m0MN0BTGrnOERERETyVixoAefcS2Y2tANiERGRTmby/IuYPGbMZxPmX5S7YApU5v67duTNuQumiJlzLnghL2H6l3NudFaFmgUXmgMv+L8n5DQKERFp8ET6yV5CcfysWbkOoRDNcs6NbW6BwBambJnZhcCFYZUnIiIiki9CS5icc7cAt0D+tjCJiIiItEZoCVNjJp45sz2Lb7Fe07wGsIkTb8lxJI2bNvWz1sB823eFQPuvbdL33+TrtuQwksJz7WXdtv2tutdCGrMUOtXBlkk/9jUnm8cK3AO8Bow0s6Vmdn4bYxMREREpKNncJXdGRwQiIiIikq/0pG8RERGRAEqYRERERAIoYRIREREJoIRJRERE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jRxJ12HDsGg01+GJiIhInivqhGnD7Nks/NvfWPXCC0RLS7GaGhzAFVfgnMMlkww6/nh2Pv98uo0YketwRUREJE8VZcJUt3Ej7155JatfeolkbS04R6K+/rMFtm7d9ueSRx5h2b/+xQ6nnspuP/wh0fLyHEQsIiIi+azoxjBVffIJLxx1FKteeIFkTQ041/wLkklStbV8ev/9vHjcccTXreuYQEVERKRgFFXCVLN8OTNOOYW6DRtI1dW16LWp2lqqly5lximnkKiqaqcIRUREpBAVTcLknGPW5MkktmwJblVqqoxEgtpVq3jvl78MOToREREpZEWTMC199FE2z5uHSybbVE4qHmfF00+zftaskCITERGRQlcUCZNzjgXXX++NWQpBsraWBTfeGEpZIiIiUviKImHa9MEHxNeuDa9A51j3+uvUbdgQXpkiIiJSsIoiYdowe3abu+IyRcrK2Pjee6GWKSIiIoWpOBKmt94iFY+HWmaypobNc+eGWqaIiIgUpqJImNqj68wlEsTXrw+9XBERESk8RZEwWUlJu5QbLS1tl3JFRESksBRFwtR91CiIhLsp0cpKuuy0U6hlioiISGEqioSp1157EausDL3cnrvvHnqZIiIiUniKImHqe9BBpBKJUMss6dqVrsOHh1qmiIiIFKaiSJhiXbow+MQTsVgslPIi5eXsdP75WMjdfCIiIlKYiiYjGDl5MpGQBmmX9OjBjmeeGUpZIiIiUviKJmEq79+fPa+6imhFRZvKiZSXM/a664i1sRwREREpHkWTMAEMPvFEdvrmN1udNEXKy9nz6qvpPWZMyJGJiIhIISuqhAlg1OTJ7H7llUTLy7FoNKvXWEkJsW7dGHv99Qw56aT2DVBEREQKTtElTAA7nn464595hn6HHkqktJRIeXmjy0UrKoiUlTHouOM44vnnGTBhQgdHKiIiIoUgnNvK8lDl4MEc8Le/Ubt6NSueeYZ1b7xB9QsvkHQOhgyh5x570Gf//Rk4aRIl3bvnOlwRERHJY0WbMDUo79+fYeeey7Bzz2Wgf+fbiqlTcxyViIiIFJKi7JITERERCZMSJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCKGESERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQkQ64iV/OO0uR2xmkBfm18N5E88IiIiUhgCW5jMrNzM3jCzd8zsAzP7RUcEJiIiIpIvsmlhigOHO+eqzKwEmGFmTzvnXm/n2EREpMhN22UsTEn7n7E5i6VgTfnsz2mMZeKCmTkLpZgFJkzOOQdU+f+W+D+uPYOSz0ybqoNHa2i/tY32X+tp37XQlFwHUHxUB9tHVoO+zSxqZm8Dq4FnnXP/bWSZC81sppnNrE5sCjlMERERkdzJKmFyziWdc3sDg4H9zWx0I8vc4pwb65wbWxnrEXKYIiIiIrnTorvknHMbzewFYBLwfvuEJOkmnqm+6GylN0Nrv7Vc+v6bfN2WHEZSeK69rNu2v1X3WkZjlsKnOtgy2XZhZnOXXD8z6+n/XQEcCcxrS3AiIiIihSSbFqaBwJ1mFsVLsO53zv2ruResqF7IlFnH512We9KSUgBmjByY40gapxYSERGR/JTNXXLvAvt0QCwiIiIieUlfjSIiIiISQAmTiIiISAAlTCIiIiIBlDCJiIiIBFDCJCIiIhJACZOIiIhIACVMIiIiIgGUMImIiIgEUMIkIiIiEkAJk4iIiEgAJUwiIiIiAZQwiYiIiARQwiQiIiISQAmTiIiISAAlTCIiIiIBYrkOoKOYS0GyDlyKHtWr2VTRD8xyHVbBKEnG6RtfQ4QUm0p6UlXSPdchiYi0u66lXRnQZQBmxsqqlVTVVeU6JMmRok6Yyuq3su8nT/OlhQ/Tf/MiLFUPZlz+xFdwGMt7jeCVXU7jnSGHk4yW5jrcvDOgZjknLr2PQ1Y/T9/4auojpTiMklQd1bGuvNNzXx7e4Uw+6LGXkk8RKRqj+49m8gGTOXr40fTr0o94Ig5AWayMNVvX8MzCZ/jzf//M+6vfz3Gk0pGKM2Fyji99+CDHz74WMMqSNZ+bV5r0Kv+wte8xcONHfHXmb7n3gJ/z/pDxOQk331Qmqvj2/P9jwur/ePvL1QMQS9uPPeo3Mm7NC+y37jWWVw7mV6N/zZIuQ3MUsYhI223XdTvuOPEODtnxEEoiJZRESwAoTbugHtR9EOfudS5njD6DGUtm8LVHv8bKqpW5Clk6UNGNYSqr38rF0y7k+NnXUZas/Xyy1IjyRDWVdVs469WfcNYrPyGSSnRQpPlpaNVC7nj1K4xf9SylqbptyVJjIjgqUjUMrVrIX944i6OWP96BkYqIhOfwYYcz/5L5TBg2gcqSym3JUmNKoiVUllYyfuh45l8ynyOGHdGBkUquFFXCVJKo5eJpF7LDug8CE6VMZcla9lg6nfNe/qE33qkT2qHqY/4883x61G+gzMWzfl0UR3kqzqXzf8ekZY+0Y4QiIuE7fNjhPH7643Qv6/651qQgpdFSupd157HTH+PwYYe3Y4SSD4oqYfrKzN/Tf/MiSlJ1rXp9abKWESvf4NB5U0OOLP+VJONc885lVCSrW10pylO1XLzg/xi25cNQYxMRaS/9u/Tn4VMfpktpl1aX0aW0C4+c9gj9u/QPMTLJN0WTMA1bPZt9Fz+zbXxSa5Ulazn63Zvos2VpSJEVhvM+/is96jYSwbWpnNJUHT99/8edtpVORArLbSfcRnmsvM3llEXLuP2E20OISPJV0SRMx7xzY5uTpQbRVIIJc+8MpaxCUJHYyglL76c8VdvmsiI4+sTXMHbdayFEJp3R609dw82X79jovK2bV/HELadx28935Ybv9eVvPxnOk7efw4bVCzs4SikGI3qP4PBhh1MWK2tzWWWxMiYMm8CI3iNCiEzyUVEkTL2qlrPD+jmhlRd1ScZ+8jQlibYnEIXg8JXP4AjvsQCVyWpO/fSu0MoTaZCoq6assicHHfMTTvrWIxz6ld+wYfWHPHzDccSrN+Y6PCkwl+x/CbFIeDeLxyIxLj3g0tDKk/xSFI8V2Hn1W6QsGmqZyUiUQRvmsajf3qGWm48OWvsSFSG0LqXbddN7mEvhrChycskTPfoO46izb/7ctP5D9uauq/dhyYcvMnyvE3MUmRSio4cf3aJB3kFKo6UcPfzo0MqT/FIUZ7Oha9+hLNGyu+KCxJL1DFk/L9Qy89WILeFvZ4oo29d0rnFgkhsVXXoDkEw0/QgMkUwlkRJ27Nl4129b7NBjh1CTMMkfRdHC1Gtr+A8NK0nVcdKcf3DikudDL7spG9L+7jXtwg5bb0/WE2KPHABJi9Irvo5llTuEW7AI4FIpUi7J1k0reO1fV9Gt9w4M2/3LuQ5LCkivil4kUonQk5tEKkGv8l6s2roq1HIl94oiYWo3+raPNnH6uhRpJ88/8F3ef8W7I6lHn2F85duPUVreLcdRSSFxzmHtdJB3bbzbWPJTUSRMa7sNIbXi9TbfEp+uLlrG47udx6u7nBJamUGmTR277e+JE2/psPVOnXEM/eKrQy0z5hKsK+sXapkiDfY78n/Z/cBz2bJ+CW89fy2P/uUkTv3e83TprufgSHbW16wnGgl37Ct4A7/X16wPvVzJvaIYw7S4zx7UxSpCLTNpMZb23jXUMvPVgm7hb6cDVpZvH3q5IgDdew9hux3HMGKfkzjp248Rr9nEuy933EWGFL6kS/LRho9CL/fjDR+T6ORfsVWsiiJhWjhgLNGQK6jhWNZrl1DLzFcz+k+gOhpewpnCeKfXGFCXnHSAsoru9Og7jE3rFuU6FCkwj857lNoQHx9Tm6jlsXmPhVae5JeiSJg2V/Zj4YAxhPVs6UQkxus7n0Syk9zp8FL/iaH25NdGy3lgx3NDLFGkaTVVa9mw+kN69An/jicpbje9eRPOhTeUwznHjW/eGFp5kl+KYgwTwFN7XczOq98K5WnfyUgJ03c9J4SoCkNdtJx7dvw6Zyy6vc3PY0oQYUnlUN7tuW9I0UlnlErU8+HsR78wfdPaj9mycRmDdj6Yym792LRuEbOn30g0VsroL32j4wOVgrZk8xIenPMgJ+92MhUlbWtlr6mv4aG5D7Fk85KQopN8UzQJ07Leo3h5l9M5ZMF9lCZbf9KPR8t5ZMwP2FzZuQYs37fjuRy+6hkGb11ErA1tdYlIKVfv8Wt1x0mb1MW38NTfv3jR8pWLH2fx/Of58K2HqItX0bXnIAYPH8f+k35Mt16DchCpFLpLnr6EScMntTlh2lq/lYufujikqCQfFU3CBPD0Xt9i8Ia5DFvzbquSpni0nFnDjuaNnY5vh+jyWyoS44q9r+PGN86hW/2mViVNtZEyrhn9K1ZWDG6HCKWzOPCYKzjwmCuanL/DyAkdGI0Uu83xzUz65ySmf2063cpa92iKLfEtfPnuL7M5vjnk6CSfFMUYpgapSIxbD7uW9wcdSjzasm+frouWMWOXU3lwvys6bevImvLtuHj/f7CyYhC1kez3X73FqI5WctUev+W1foe1Y4QiIuF7a8VbHHbHYayqWkVNffbfGlFTX8PqrasZf+d43lrxVvsFKHmhqBImgGS0hLvHXcPdB/+KqrKe1MYqm1w2hRGPVbCuyyBuOvwmntznsk6bLDVYU74d3zzwAR7c4UzikTJqmkmc6i1GPFLG7F77cd5BD/NG33EdGKmISHhmr5zN8OuHM/W9qdQmaptNnGrqa6ipr+Ge9+9h5+t2VrLUSRRVl1y6DwYfxpTtD2bX5TM4cOGjDFk/h67xjaSIECHFpop+LOq7J6+O+B8+6q9b4NMlIzHu3PnbPLDjuRy1/AnGr36WYVULqUhUA95dhMsqhzCz94E8MfhUllcOyXHEIiJtV1VXxTef+CZXPn8lF465kBNHnsiu/Xal3ErAQZwEc9bM4fEFj3PzzJv19SedTNEmTOB10X0weDwfDB4PQDRZTyxVR320jFSkqDc9FNWxrjy6wxk8usMZ4Bx/eO4CDMf3J/wNZ0XXOCkiAsCqrau46qWruOqlqwB48Z4KMOOw06tzHJnkUqfKGpLREpLRklyHUZjMcP6XzyhZEpHOJFWb/bgmKV4684mIiIgEUMIkIiIiEkAJk4iIiEgAJUwiIiIiAZQwiYiIiARQwiQiIiISQAmTiIiISAAlTCIiIiIBlDCJiIiIBFDCJCIiIhJACZOIiIhIACVMIiIiIgGUMImIiIgEUMIkIiIiEkAJk4iIiEgAJUwiIiIiAWLZLmhmUWAmsMw5d1z7hSSSvXHzV3z295gnPpuRNl2y87n9d+d0ADZ8bXxOYhERyTctaWGaDMxtr0BERERE8lVWCZOZDQaOBW5t33BERERE8o8554IXMnsQ+DXQDfjfoC45MwsuVArOC/7vCTmN4vOmpHcjSeimzDo+1yFIsZuS6wCCvfB37/eEr+c2jqxNyXUABWmWc25scwsEtjCZ2XHAaufcrIDlLjSzmWY2s4VBioiIiOS1bLrkDgZOMLNFwL3A4WZ2d+ZCzrlbnHNjgzI0ERERkUITeJecc+5y4HIAMxuP1yV3djaFTzxTjU0tMW3qZ7lmPu67XtMuBGDixFtyHEka3Q3XrvKxHuajfP/s5rNp6Bo7bKqDLZP++W1O1o8VEBERCdvEBTPzPuHsVeNfLC7Io4vFNPm+/4pFixIm59x0YHq7RCLSDvQcoeb18p+3JCIizdOTvkVEREQCKGESERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCKGESERERCaCESURERCSAEiYRERGRALFcByD5K0KSsbzGOHue3XmXQRM+BYOpdgwL2JU33MFM5yiq6ZrrUPNSGVvYJ/Ygu0X/w5DIbCpsE44Im90APkkeyLvJE5ibPBJHNNeh5qUBPZczcd8n2WfnN9mx/8eUlcSpT5awbO0Q3vlkDM/NPoZFq4bnOsw85dh9l4847MBZ7DFqIdv1XU8kkqI2XsZHiwcx671dee6VA9i4uVuuA81LJbEU4/bbxIH7bGbU8GoGVF4AwF01c5n7YSWvz+7OjDd7UJ9Qm0NnooRJGuE4gqe4yP5MGXEqrdqbXOL96sdq+rGaffkv3+IPPMVXuN1dQpzy3IWcR0qo5tiSX/Clkr/jMMoa9p+vwjYzIPIhe8ceod6V83j91byZOBOw3AScZwb0XM73vno1uw99GzNHaax+27wKaui+wwfsMmguJx10H0vXDOUPD/+UhctH5TDi/DJmjzlc9vV76dVjM2Wl9UQibtu8yoo4vXtuZs9RC/nGqY/zyqy9uOGO09hcpYsegIg5Tjl2NWectBoDKitS/pxSAAZ2q2Ng/zoO3Hczk89fyj2P9ueBJ/uTcvrsdgZKmORzurCFn9mP2JV3qbDaZpdtmH+Me4RD7Tl+4v7ER3TuE9egyLtcUHYylbaRUqtpdtlyq6Lcqji59HvsF72Hv8fvpoaeHRNonvrymMe4+ITfUxKtJxZNNrlcNJoiGo2z08D5/Omi83nw5bO5c9r/ozMnnbFogu+cP5XDDnyL8rK6ZpctK/OS0IPHvsN+e87hV9efz8z3duuIMPNWvz51XP2/nzCwfx0V5alml21IpM76ymqOGLeRn/zfMFavLe2IMCWH1J4o23RhC9fbeYxmdmCylK7c4vS1NfzJLmAk77djhPltSGQWl5UfRc/IisBkKV2ZVTMs+hrfqZhABRvbL8A89z/j7uaSE35PRWlts8lSukgEykvj/M8h/+S7X7kacIGvKUaxaIJrfngDhx04KzBZSldakqBrlxp+/t2bOXjs2+0XYJ4b0LeOv1y9gB0G1QYmS+kqylMM2b6WG69awIC+2e93KUxKmMTnmGL/ywCWU2r1wYs3osJq+I1dQg82hBxb/uvCGr5VfiJltrVVry+xOnrbp5xffjqd8aQ/dpdXOe/Iv1Jemn2inq6itJYJe/+bk750T8iRFYZvnfMAu474hPKy1n12y8vq+fG3/87QwctDjiz/lcRS/P7Kj+jWJUmsFcMJY1Ho1iXJ76/8iJJY9smWFB4lTALAUTzBSOa0OllqUEqc/7VfhBRV4Tij7GJKyL5VqTElVseQyGwOiP0jpKgKQ2VZFT8+9aetTpYaVJTWcv6X/8LA3ktDiqwwjB65kKMOfb3VyVKD0pIEP7nsViKR7Fr3isXXTl5Jrx71RNtw70U0Cr161HPeKSvDC0zyjhImIUKCi+zPVLSgG6kppVbP3sxkZ+aFEFlhGBR5l12i0ymxtjfJl1k1J5ReSYRE2wMrECcddB/lJW2vewCxaB1fP+ovoZRVKC4+9/42J0sAkYijX+8NjBv7TghRFYbuXROc9OW1lJe1vVW3vMxx4lFr6d6183x2OxslTMJBvEwsxBN0jDpOsbtDKy/fjY9dT5Twxi9ESTA6+mRo5eWziCX56rh7KCsNZ//Foim+tNt0ulVsCqW8fDd0yDIGD1wVWnmVFXFOO+HfoZWX7yaNX4cLsQfcOTjm8HXhFSh5RQmTcKg9+9mjA0IQsxQHMCO08vLd7rGniVp43RjlVsXesUdCKy+fDR3wESWxcAfLJpIl7LPzm6GWma8O3Oc9otFwx83sNGQZlRXhtPjlu8O/tDGU1qUG5WWO8QduDK08yS9KmIRd2+HOtlLq6MOa0MvNN91tBSW0bexNY3aMdI4T/ohBcwl7kHt5aTWjhrwXapn5as9RH1ISC3fMUW1dKcN3XBJqmfnIzDFkYDz0cocMjBOxznfjRmeg5zAJvVkbepnRRIKrZk+memP7PhCvR3XzrROJ63q26/rLB20mcmqCsJ/Z2Su1hEuuOzrcQhsRW7mx2fknLWnfZ8tsN3wZlWXhtmZEI44vR59gl2lzQy23Oen3hfaadmGHrXfUVVHCfvZURaqGyav/wIZpHXfSz8X+i/YpJ5b6GmGfBh3QvVuCjZtLQi1Xck8tTEKkHW5jdxjWGa6y2mkbrbM8f7G9vhUm2gnqHrTP/jOwTvBtPRaJtMsTPJzzng8mxUctTEI1lfQg3EGydbEyfjPmahazc6jlZho3f0Wz8zd8bXy7rn+AzeO7ZROIUhVqudWRntxw2dOhltmYXndOb3b+jJED23X9J/e7m68nbvzc15+E4b+lh/C7ib8MtczmTJs6dtvfEyfe0mHrvSHxG0byaahl1lgFt+5wLq9O3DvUcpuTi/1XWpLisZL3Qm81iEUdW6s7QcbZCSkPFj5ml9DLLKGeJewYern5Zo0bTizEO+QaLEvuEXqZ+Wjh8pHU1ZeFWmZtXTkfLN4r1DLz1fsLdiaVCrc5MhZN8uGiHUItMx/V1UdYtzH8brP1m0qI1+nUWoz0rgpvuoOodeGetD5mOKlO0ICZIsayVLjJTZ0rZ15qYqhl5qsFy3YN/S45gPcX7R16mfnonTkjqakN97MbrytlzbpeoZaZr97+oCuJEMfMJ5Pwzpwu4RUoeUUJk/Asx4U6jqnaVfKgOzu08vLd9PpLqXXhDW43HG/Ud479Vx3vymtzDyUZYivJ8nWDWby6fbuC88Ub7+weagtTPB7j0X+Pp7N8ifGj/+lLIhHettbVG4880y+08iS/KGESNtKbF5lI3IVzR1QtFczg8FDKKgTvJo8n7sK5qqx3ZbyTOJEqOs9B954XvkEiEU7dq4mXc9e0i0IpqxAkk1Hu/9eR1NSGs/9SLsK/njsklLIKwcJFlSxaWk4yhFamZBI+XVbOh4sq216Y5CUlTALAje4HxKloczm1roxfuV+RoPPcUpuklLvid1Dn2r7/6qjkobo/hBBV4fh45S489vop1Na1rWupPhHj3U/25ZU548MJrEDc/+SRrFnXq80tTTW1pdz0j5PZuLl7SJEVhl/fuCP1IbQy1SeMa24s/nGbnZkSJgFgK92Y4n5PrWv9A4VqXDkPubN4l7HBCxeZj1LjeKH+UuKu9VeXda6C22unUkPP8AIrEHf859ssXrUz8frWtZQkklE2VvXmdw/8ks7SndQglYrysz/+P6pry0i18qHftfES3nxnN56efnC4wRWA5avK+PNtg6mNt77e1MaNa28fzPJV4Y4nk/yihEm2eY99+Zn7AzWugoRr2W2xta6cRzmdO/hWO0WX/56u/wkv1l/c4pampIsSd124tfZePkqNa6fo8lt9spQf3HoTC5ePoibesqS9tq6M1Ru349Kb7mBzdc/2CTDPLVs5gO/+8vts2dqFurqW3WxRU1vKf2eP5pobz6ezJZsNnnulNzfcMYjauLUo6UylvGTpxjsHMW1G7/YLUPKCEib5nNkcwPnuAeaxOzWugpRr/gBa7SrY4HrxM/dHbneX0FkPuB7jqfqf8bfaB9iS6hc4EDzljFrXhU9TY/hNzRssSHWecV+Nqanrwvdu/ht3TbuI2roy4gFddHWJEuL1ZTz95klc8Of7WLe5fwdFmp8WLRnE178/hddn70FtvIREovnDe01tKVtryvjTbWdy9fXfJJns3M8O+vdLfZg8ZQTLVpVRXRN8aqyuibB8VSmTp4zgmRf7dECEkmvFf9+3tNgatuO77jb2YDan2l3s494gRZSk/1hhw1FGnE8ZygPuHF5kIvWoKbrBh6nD+EXNHPaOPcKE2HVsF5lHHRV4ew6iJImQYEFyPM/Xf4ePUgfTuRPNz6RclAdnnMNzbx/Nsfs/wnEHPET3yo3E6z9rdSqN1VFbX8602cfw2GunsXzdkBxGnF+2bO3CVdddwM47LuGrk55j3H7vEImkSCS8Q72Zo6y0ntXrevHIM+P5z8sHUV3T9rF3xeLjTyv45g9GcsA+mznl2NWMGl5Dff1nrU6RCJSUOOZ9VMED/+rPf9/uHvpzsCR/KWGSJhjvsS/vuX0xUmzPEgawggiOTfRkETspSWpGgnJmJs5gZuIMosQZGJlDV1tHykXY4Iaw1u2MUwNvkzZU9eXu5y/g7ucvoGv5ZoZu9xHlpTXU1Zfy6ZphbKzSFX1zPlo8hN/ffB6/v9nRr88GBm+3mmg0ydbqCj5Zsj21Lez27ExSznjtrR689lYPIhHHDoNq6d0jgRms2xjj02XlSpI6KSVMEsgRYRk7sqwTPLm7PSQpY2lqn1yHUbCqarvz/iLtv9Yx1qzrzZp1Gl/TGqmUsWhJBYuW5DoSyQe6xBUREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCKGESERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAsSyWcjMFgFbgCSQcM6Nbc+gRMLS687puQ5BRESKQFYJk2+Cc25tu0UiIiIikqfUJSciIiISwJxzwQuZfQJsABxws3PuloDlgwsVCcGUMU/kOoSiNmXW8bkOQUSkI8wKGm6UbcI0yDm3zMz6A88ClzrnXspY5kLgQv/f0cD7rYu50+sLqOuz9bT/2kb7r/W079pG+69ttP/aZqRzrltzC2SVMH3uBWZTgCrn3P81s8xMDQxvHe27ttH+axvtv9bTvmsb7b+20f5rm2z2X+AYJjPrYmbdGv4GjkKtRyIiItKJZHOX3ADgETNrWH6qc+6Zdo1KREREJI8EJkzOuY+BvVpYbrODwqVZ2ndto/3XNtp/rad91zbaf22j/dc2gfuvxWOYRERERDobPYdJREREJECoCZOZTTKz+Wa20Mx+HGbZxc7Mbjez1WamAfWtYGZDzOwFM5tjZh+Y2eRcx1QozKzczN4ws3f8ffeLXMdUiMwsamazzexfuY6l0JjZIjN7z8zeNrOZuY6nkJhZTzN70MzmmdlcMzso1zEVCjMb6de5hp/NZvadJpcPq0vOzKLAAuBIYCnwJnCGc25OKCsocmZ2KFAF3OWcG53reAqNmQ0EBjrn3vLv6pwFnKT6F8y8Ozq6OOeqzKwEmAFMds69nuPQCoqZfQ8YC3R3zh2X63gKif99pWP19VstZ2Z3Ai875241s1Kg0jm3McdhFRw/h1kGHOCcW9zYMmG2MO0PLHTOfeycqwPuBU4Msfyi5j8IdH2u4yhUzrkVzrm3/L+3AHOBQbmNqjA4T5X/b4n/o8GNLWBmg4FjgVtzHYt0HmbWAzgUuA3AOVenZKnVjgA+aipZgnATpkHAkrT/l6ITluSAmQ0F9gH+m+NQCobfnfQ2sBp41jmnfdcyfwZ+CKRyHEehcsB/zGyW/60Rkp1hwBrg73538K3+8xKl5U4H7mluAQ36lqJiZl2Bh4DvOOc25zqeQuGcSzrn9gYGA/ubmbqFs2RmxwGrnXOzch1LARvnnNsXOBq42B+iIMFiwL7ATc65fYCtgMYPt5DflXkC8EBzy4WZMC0DhqT9P9ifJtIh/PE3DwH/dM49nOt4CpHfnP8CMCnHoRSSg4ET/HE49wKHm9nduQ2psDjnlvm/VwOP4A3xkGBLgaVpLcIP4iVQ0jJHA28551Y1t1CYCdObwAgzG+Zna6cDj4dYvkiT/IHLtwFznXN/zHU8hcTM+plZT//vCrwbN+blNKgC4py73Dk32Dk3FO+497xz7uwch1Uw9PVbreecWwksMbOR/qQjAN3o0nJnENAdB9l9NUpWnHMJM7sE+DcQBW53zn0QVvnFzszuAcYDfc1sKfBz59xtuY2qoBwMnAO854/FAbjCOfdU7kIqGAOBO/27RCLA/c453RovHUVfv9U2lwL/9BsqPga+nuN4CoqfpB8JXBS4rJ70LSIiItI8DfoWERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAvx/X19odWDRDgcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "all_locations = np.vstack(history_of_locs).astype(float) # create a matrix containing the agent's Y/X locations over time (each coordinate in one row of the matrix)\n", "\n", "fig, ax = plt.subplots(figsize=(10, 6)) \n", "\n", "# create the grid visualization\n", "X, Y = np.meshgrid(np.arange(grid_dims[1]+1), np.arange(grid_dims[0]+1))\n", "h = ax.pcolormesh(X, Y, np.ones(grid_dims), edgecolors='k', vmin = 0, vmax = 30, linewidth=3, cmap = 'coolwarm')\n", "ax.invert_yaxis()\n", "\n", "# get generative process global parameters (the locations of the Cues, the reward condition, etc.)\n", "cue1_loc, cue2_loc, reward_condition = my_env.cue1_loc, my_env.cue2_loc, my_env.reward_condition\n", "reward_top = ax.add_patch(patches.Rectangle((reward_locations[0][1],reward_locations[0][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor='none'))\n", "reward_bottom = ax.add_patch(patches.Rectangle((reward_locations[1][1],reward_locations[1][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor='none'))\n", "reward_loc = reward_locations[0] if reward_condition == \"TOP\" else reward_locations[1]\n", "\n", "if reward_condition == \"TOP\":\n", " reward_top.set_edgecolor('g')\n", " reward_top.set_facecolor('g')\n", " reward_bottom.set_edgecolor([0.7, 0.2, 0.2])\n", " reward_bottom.set_facecolor([0.7, 0.2, 0.2])\n", "elif reward_condition == \"BOTTOM\":\n", " reward_bottom.set_edgecolor('g')\n", " reward_bottom.set_facecolor('g')\n", " reward_top.set_edgecolor([0.7, 0.2, 0.2])\n", " reward_top.set_facecolor([0.7, 0.2, 0.2])\n", "reward_top.set_zorder(1)\n", "reward_bottom.set_zorder(1)\n", "\n", "text_offsets = [0.4, 0.6]\n", "cue_grid = np.ones(grid_dims)\n", "cue_grid[cue1_loc[0],cue1_loc[1]] = 15.0\n", "for ii, loc_ii in enumerate(cue2_locations):\n", " row_coord, column_coord = loc_ii\n", " cue_grid[row_coord, column_coord] = 5.0\n", " ax.text(column_coord+text_offsets[0], row_coord+text_offsets[1], cue2_loc_names[ii], fontsize = 15, color='k')\n", " \n", "h.set_array(cue_grid.ravel())\n", "\n", "cue1_rect = ax.add_patch(patches.Rectangle((cue1_loc[1],cue1_loc[0]),1.0,1.0,linewidth=8,edgecolor=[0.5, 0.2, 0.7],facecolor='none'))\n", "cue2_rect = ax.add_patch(patches.Rectangle((cue2_loc[1],cue2_loc[0]),1.0,1.0,linewidth=8,edgecolor=[0.5, 0.2, 0.7],facecolor='none'))\n", "\n", "ax.plot(all_locations[:,1]+0.5,all_locations[:,0]+0.5, 'r', zorder = 2)\n", "\n", "temporal_colormap = cm.hot(np.linspace(0,1,T+1))\n", "dots = ax.scatter(all_locations[:,1]+0.5,all_locations[:,0]+0.5, 450, c = temporal_colormap, zorder=3)\n", "\n", "ax.set_title(f\"Cue 1 located at {cue2_loc}, Cue 2 located at {cue2_loc}, Cheese on {reward_condition}\", fontsize=16)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Experimenting with different environmental structure\n", "\n", "Try changing around the locations of the rewards, the cues, the agent's beliefs, etc. For example, below we'll change the location of the rewards, both in the generative model and the generative process." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# names of the reward conditions and their locations\n", "reward_conditions = [\"LEFT\", \"RIGHT\"]\n", "reward_locations = [(2, 2), (2, 4)] # DIFFERENT REWARD LOCATIONS\n", "\n", "## reset `A[3]`, the reward observation model\n", "\n", "A[3] = np.zeros([num_obs[3]] + num_states)\n", "# make the reward observation depend on the location (being at reward location) and the reward condition\n", "A[3][0,:,:,:] = 1.0 # default makes Null the most likely observation everywhere\n", "\n", "rew_top_idx = loc_list.index(reward_locations[0]) # linear index of the location of the \"TOP\" reward location\n", "rew_bott_idx = loc_list.index(reward_locations[1]) # linear index of the location of the \"BOTTOM\" reward location\n", "\n", "# fill out the contingencies when the agent is in the \"TOP\" reward location\n", "A[3][0,rew_top_idx,:,:] = 0.0\n", "A[3][1,rew_top_idx,:,0] = 1.0\n", "A[3][2,rew_top_idx,:,1] = 1.0\n", "\n", "# fill out the contingencies when the agent is in the \"BOTTOM\" reward location\n", "A[3][0,rew_bott_idx,:,:] = 0.0\n", "A[3][1,rew_bott_idx,:,1] = 1.0\n", "A[3][2,rew_bott_idx,:,0] = 1.0\n", "\n", "class GridWorldEnv():\n", " \n", " def __init__(self,starting_loc = (4,0), cue1_loc = (2, 0), cue2 = 'L1', reward_condition = 'LEFT'):\n", "\n", " self.init_loc = starting_loc\n", " self.current_location = self.init_loc\n", "\n", " self.cue1_loc = cue1_loc\n", " self.cue2_name = cue2\n", " self.cue2_loc_names = ['L1', 'L2', 'L3', 'L4']\n", " self.cue2_loc = cue2_locations[self.cue2_loc_names.index(self.cue2_name)]\n", "\n", " self.reward_condition = reward_condition\n", " print(f'Starting location is {self.init_loc}, Reward condition is {self.reward_condition}, cue is located in {self.cue2_name}')\n", " \n", " def step(self,action_label):\n", "\n", " (Y, X) = self.current_location\n", "\n", " if action_label == \"UP\": \n", " \n", " Y_new = Y - 1 if Y > 0 else Y\n", " X_new = X\n", "\n", " elif action_label == \"DOWN\": \n", "\n", " Y_new = Y + 1 if Y < (grid_dims[0]-1) else Y\n", " X_new = X\n", "\n", " elif action_label == \"LEFT\": \n", " Y_new = Y\n", " X_new = X - 1 if X > 0 else X\n", "\n", " elif action_label == \"RIGHT\": \n", " Y_new = Y\n", " X_new = X +1 if X < (grid_dims[1]-1) else X\n", "\n", " elif action_label == \"STAY\":\n", " Y_new, X_new = Y, X \n", " \n", " self.current_location = (Y_new, X_new) # store the new grid location\n", "\n", " loc_obs = self.current_location # agent always directly observes the grid location they're in \n", "\n", " if self.current_location == self.cue1_loc:\n", " cue1_obs = self.cue2_name\n", " else:\n", " cue1_obs = 'Null'\n", "\n", " if self.current_location == self.cue2_loc:\n", " cue2_obs = cue2_names[reward_conditions.index(self.reward_condition)+1]\n", " else:\n", " cue2_obs = 'Null'\n", " \n", " # @NOTE: here we use the same variable `reward_locations` to create both the agent's generative model (the `A` matrix) as well as the generative process. \n", " # This is just for simplicity, but it's not necessary - you could have the agent believe that the Cheese/Shock are actually stored in arbitrary, incorrect locations.\n", "\n", " if self.current_location == reward_locations[0]:\n", " if self.reward_condition == 'LEFT':\n", " reward_obs = 'Cheese'\n", " else:\n", " reward_obs = 'Shock'\n", " elif self.current_location == reward_locations[1]:\n", " if self.reward_condition == 'RIGHT':\n", " reward_obs = 'Cheese'\n", " else:\n", " reward_obs = 'Shock'\n", " else:\n", " reward_obs = 'Null'\n", "\n", " return loc_obs, cue1_obs, cue2_obs, reward_obs\n", "\n", " def reset(self):\n", " self.current_location = self.init_loc\n", " print(f'Re-initialized location to {self.init_loc}')\n", " loc_obs = self.current_location\n", " cue1_obs = 'Null'\n", " cue2_obs = 'Null'\n", " reward_obs = 'Null'\n", "\n", " return loc_obs, cue1_obs, cue2_obs, reward_obs" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting location is (0, 0), Reward condition is RIGHT, cue is located in L1\n", "Re-initialized location to (0, 0)\n", "Action at time 0: DOWN\n", "Grid location at time 0: (1, 0)\n", "Reward at time 0: Null\n", "Action at time 1: DOWN\n", "Grid location at time 1: (2, 0)\n", "Reward at time 1: Null\n", "Action at time 2: UP\n", "Grid location at time 2: (1, 0)\n", "Reward at time 2: Null\n", "Action at time 3: RIGHT\n", "Grid location at time 3: (1, 1)\n", "Reward at time 3: Null\n", "Action at time 4: UP\n", "Grid location at time 4: (0, 1)\n", "Reward at time 4: Null\n", "Action at time 5: RIGHT\n", "Grid location at time 5: (0, 2)\n", "Reward at time 5: Null\n", "Action at time 6: RIGHT\n", "Grid location at time 6: (0, 3)\n", "Reward at time 6: Null\n", "Action at time 7: DOWN\n", "Grid location at time 7: (1, 3)\n", "Reward at time 7: Null\n", "Action at time 8: DOWN\n", "Grid location at time 8: (2, 3)\n", "Reward at time 8: Null\n", "Action at time 9: RIGHT\n", "Grid location at time 9: (2, 4)\n", "Reward at time 9: Cheese\n" ] } ], "source": [ "my_agent = Agent(A = A, B = B, C = C, D = D, policy_len = 4)\n", "\n", "my_env = GridWorldEnv(starting_loc = (0,0), cue1_loc = (2, 0), cue2 = 'L1', reward_condition = 'RIGHT')\n", "\n", "loc_obs, cue1_obs, cue2_obs, reward_obs = my_env.reset()\n", "\n", "history_of_locs = [loc_obs]\n", "obs = [loc_list.index(loc_obs), cue1_names.index(cue1_obs), cue2_names.index(cue2_obs), reward_names.index(reward_obs)]\n", "\n", "T = 10 # number of total timesteps\n", "\n", "for t in range(T):\n", "\n", " qs = my_agent.infer_states(obs)\n", " \n", " my_agent.infer_policies()\n", " chosen_action_id = my_agent.sample_action()\n", "\n", " movement_id = int(chosen_action_id[0])\n", "\n", " choice_action = actions[movement_id]\n", "\n", " print(f'Action at time {t}: {choice_action}')\n", "\n", " loc_obs, cue1_obs, cue2_obs, reward_obs = my_env.step(choice_action)\n", "\n", " obs = [loc_list.index(loc_obs), cue1_names.index(cue1_obs), cue2_names.index(cue2_obs), reward_names.index(reward_obs)]\n", "\n", " history_of_locs.append(loc_obs)\n", "\n", " print(f'Grid location at time {t}: {loc_obs}')\n", "\n", " print(f'Reward at time {t}: {reward_obs}')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Cue 1 located at (0, 2), Cue 2 located at (0, 2), Cheese on RIGHT')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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JUwiIiIiAZQwiYiIiARQwiQiIiISQAmTiIiISAAlTCIiIiIBlDCJiIiIBFDCJCIiIhJACZOIiIhIACVMIiIiIgGUMImIiIgEUMIkIiIiEkAJk4iIiEgAJUwiIXv16au59bI90pr3ydtP44aLO/HOC7e2clQiItISSphEsmTJ3P+watHr2Q5DRETSoIRJJAtisTpmPfxjxk75ebZDERGRNChhEsmCt2f+L0XF5ex38FnZDkVERNKghEmkjW3fsobX/3UNR3z5t1hEH0ERkXygo7VIG3vxsZ+xx95H02/o+GyHIiIiaVLCJNKGVi16jYVvP8r4k67KdigiIpKBomwHINKezHr4J+w/7huUlnWmpnLTZ9Pr66qoqdpMaXmX7AUnIiKNUsIk0oY2rv2INUtm8/bMW3aa/uJjP+OlJ6Zx8fWbshOYiIg0SQmTSBs64bz7cfHYTtMeuuk4DjriOwwZcUKWohIRkSBKmERaQby+jo/eenSX6f2GjqOiU69dpnftNYT+e2kQuIhIrlLCJNIKamu28vSduz5j6SsXPZ0yYRIRkdymhEkkZIccdzmHHHd52vNPvXFrK0YjIiJh0GMFRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCKGESERERCaCESURERCSAEiYRERGRAEqYRERERAIoYRIREREJoIRJREREJIASJhEREZEASphEREREAihhEhEREQmghElEREQkgBImERERkQBKmEREREQCFKUzk5ktBrYCMaDeOTe6NYMSERERySVpJUy+I51z61otEhEREZEcpS45ERERkQDmnAueyWwRsBFwwK3OudsC5g8uVERERCQ3zAkabpRul9x459wKM+sNPGdm85xzLyTOYGbnAef5/9YA72ccrgD0BNT12Xzafy2j/dd82ncto/3XMtp/LTM8aIa0Wph2WsBsGrDNOfeHJuaZrYHhzaN91zLafy2j/dd82ncto/3XMtp/LZPO/gscw2RmHcysU8PfwDGo9UhERETakXS65HYDHjGzhvnvdc4926pRiYiIiOSQwITJOfcJcGCG5TY5KFyapH3XMtp/LaP913zady2j/dcy2n8tE7j/Mh7DJCIiItLe6DlMIiIiIgFCTZjMbLKZzTezhWb2kzDLLnRmdoeZrTUzDahvBjMbYGYzzOxDM/vAzKZmO6Z8YWZlZva6mb3j77tfZDumfGRmUTN7y8yezHYs+cbMFpvZe2b2tpnNznY8+cTMuprZg2Y2z8zmmtnYbMeUL8xsuF/nGn62mNn3Gp0/rC45M4sCC4BJwHLgDeA059yHoaygwJnZ4cA24G/Ouf2zHU++MbO+QF/n3Jv+XZ1zgJNU/4KZd0dHB+fcNjMrBl4EpjrnXs1yaHnFzH4AjAY6O+emZDuefOJ/X+loff1W5szsbuC/zrnbzawEqHDObcpyWHnHz2FWAAc755akmifMFqYxwELn3CfOuVrgPuDEEMsvaP6DQDdkO4585Zxb5Zx70/97KzAX6JfdqPKD82zz/y32fzS4MQNm1h/4InB7tmOR9sPMugCHA38FcM7VKllqtqOBjxtLliDchKkfsCzh/+XohCVZYGaDgJHAa1kOJW/43UlvA2uB55xz2neZuR74MRDPchz5ygH/NrM5/rdGSHoGA58Cd/rdwbf7z0uUzJ0K/LOpGTToWwqKmXUEHgK+55zbku148oVzLuacOwjoD4wxM3ULp8nMpgBrnXNzsh1LHhvvnPsccCzwXX+IggQrAj4H/Mk5NxLYDmj8cIb8rswTgAeami/MhGkFMCDh//7+NJE24Y+/eQj4h3Pu4WzHk4/85vwZwOQsh5JPxgEn+ONw7gOOMrN7shtSfnHOrfB/rwUewRviIcGWA8sTWoQfxEugJDPHAm8659Y0NVOYCdMbwF5mNtjP1k4FHg+xfJFG+QOX/wrMdc79Mdvx5BMz62VmXf2/y/Fu3JiX1aDyiHPuMudcf+fcILzj3vPOuTOzHFbe0NdvNZ9zbjWwzMwavjj2aEA3umTuNAK64yC9r0ZJi3Ou3swuBP4FRIE7nHMfhFV+oTOzfwITgJ5mthy40jn31+xGlVfGAWcB7/ljcQAud849nb2Q8kZf4G7/LpEIcL9zTrfGS1vR12+1zEXAP/yGik+Ar2c5nrziJ+mTgPMD59WTvkVERESapkHfIiIiIgGUMImIiIgEUMIkIiIiEkAJk4iIiEgAJUwiIiIiAZQwiYiIiARQwiQiIiISQAmTiIiISID/B3AH/qLhpUPPAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "all_locations = np.vstack(history_of_locs).astype(float) # create a matrix containing the agent's Y/X locations over time (each coordinate in one row of the matrix)\n", "\n", "fig, ax = plt.subplots(figsize=(10, 6)) \n", "\n", "# create the grid visualization\n", "X, Y = np.meshgrid(np.arange(grid_dims[1]+1), np.arange(grid_dims[0]+1))\n", "h = ax.pcolormesh(X, Y, np.ones(grid_dims), edgecolors='k', vmin = 0, vmax = 30, linewidth=3, cmap = 'coolwarm')\n", "ax.invert_yaxis()\n", "\n", "# get generative process global parameters (the locations of the Cues, the reward condition, etc.)\n", "cue1_loc, cue2_loc, reward_condition = my_env.cue1_loc, my_env.cue2_loc, my_env.reward_condition\n", "reward_top = ax.add_patch(patches.Rectangle((reward_locations[0][1],reward_locations[0][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor='none'))\n", "reward_bottom = ax.add_patch(patches.Rectangle((reward_locations[1][1],reward_locations[1][0]),1.0,1.0,linewidth=5,edgecolor=[0.5, 0.5, 0.5],facecolor='none'))\n", "reward_loc = reward_locations[0] if reward_condition == \"LEFT\" else reward_locations[1]\n", "\n", "if reward_condition == \"LEFT\":\n", " reward_top.set_edgecolor('g')\n", " reward_top.set_facecolor('g')\n", " reward_bottom.set_edgecolor([0.7, 0.2, 0.2])\n", " reward_bottom.set_facecolor([0.7, 0.2, 0.2])\n", "elif reward_condition == \"RIGHT\":\n", " reward_bottom.set_edgecolor('g')\n", " reward_bottom.set_facecolor('g')\n", " reward_top.set_edgecolor([0.7, 0.2, 0.2])\n", " reward_top.set_facecolor([0.7, 0.2, 0.2])\n", "reward_top.set_zorder(1)\n", "reward_bottom.set_zorder(1)\n", "\n", "text_offsets = [0.4, 0.6]\n", "cue_grid = np.ones(grid_dims)\n", "cue_grid[cue1_loc[0],cue1_loc[1]] = 15.0\n", "for ii, loc_ii in enumerate(cue2_locations):\n", " row_coord, column_coord = loc_ii\n", " cue_grid[row_coord, column_coord] = 5.0\n", " ax.text(column_coord+text_offsets[0], row_coord+text_offsets[1], cue2_loc_names[ii], fontsize = 15, color='k')\n", " \n", "h.set_array(cue_grid.ravel())\n", "\n", "cue1_rect = ax.add_patch(patches.Rectangle((cue1_loc[1],cue1_loc[0]),1.0,1.0,linewidth=8,edgecolor=[0.5, 0.2, 0.7],facecolor='none'))\n", "cue2_rect = ax.add_patch(patches.Rectangle((cue2_loc[1],cue2_loc[0]),1.0,1.0,linewidth=8,edgecolor=[0.5, 0.2, 0.7],facecolor='none'))\n", "\n", "ax.plot(all_locations[:,1]+0.5,all_locations[:,0]+0.5, 'r', zorder = 2)\n", "\n", "temporal_colormap = cm.hot(np.linspace(0,1,T+1))\n", "dots = ax.scatter(all_locations[:,1]+0.5,all_locations[:,0]+0.5, 450, c = temporal_colormap, zorder=3)\n", "\n", "ax.set_title(f\"Cue 1 located at {cue2_loc}, Cue 2 located at {cue2_loc}, Cheese on {reward_condition}\", fontsize=16)" ] } ], "metadata": { "interpreter": { "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: docs/notebooks/free_energy_calculation.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computing the variational free energy in categorical models\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/free_energy_calculation.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This notebook walks the user through the computation of the variational free energy (or *VFE*) for discrete generative models, composed of categorical distributions. We can represent these sorts of generative models easily in array-focused programming languages like `NumPy` and `MATLAB` using matrices and vectors.\n", "\n", "In the discrete state-space formulation, the variational free energy is very straightforward to compute when we take advantage of the NDarray representation of probability distributions. The highly-optimized matrix algebra built into today's numerical computing paradigms can be exploited to write simple, one-line expressions for information-theoretic terms (like Kullback-Leibler divergences, cross-entropies, log-likelihoods, etc.). All these terms end up being variants of things like inner products, matrix-vector products or matrix-matrix multiplications.\n", "\n", "This notebook is inspired by the supplementary MATLAB script for the paper [\"A Step-by-Step Tutorial on Active Inference Modelling and its Application to Empirical Data\"](https://www.sciencedirect.com/science/article/pii/S0022249621000973) by Ryan Smith, Karl Friston, and Christopher Whyte. The original MATLAB script is called `VFE_calculation_example.m`, and can be found on [Ryan Smith's GitHub repository](https://github.com/rssmith33/Active-Inference-Tutorial-Scripts), which also contains a set of tutorial scripts that are supplementary to their paper." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from IPython.display import display, Latex\n", "\n", "from pymdp import utils, maths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple generative model composed of a likelihood and a prior\n", "\n", "We begin by constructing a simple generative model composed of two sets of categorical distributions: a likelihood distribution $P(o|s)$ and a prior distribution $P(s)$. \n", "\n", "Because both of these distributions are categorical distributions, we can represent them easily in code using matrices and vectors. The likelihood distribution is a conditional distribution that tells the probability that the generative model assigns to different observations, given different hidden states. Since observations and hidden states are both discrete, this can be efficiently represented as a matrix, each of whose **columns** store the conditional probabilities of all the observations (the **rows**), given a particular hidden state. Each hidden state setting is thus indexed by a column. For this reason, each column of this matrix is a categorical probability distributions and its entries must sum to one. \n", "\n", "The prior is represented as a 1-D vector and stores the prior probabilities that the generative model assigns to each hidden state. \n", "\n", "Finally, to set ourselves up later for showing model inversion and free energy calculations, we initialize an observation that we assume the agent or generative model has \"gathered\" or \"seen.\" In `pymdp` we can represent these observations either as one-hot vectors (a `1` in one entry, and `0`'s everywhere else) or more sparsely as simple indices (integers) that represent *which* of the observations was observed. Because observations are not distributions (or technically, they are Dirac distributions), you don't need to store a whole vector of elements, you can just store a particular index.\n", "\n", "Below we create 3 main variables: \n", "\n", "- An `observation` that represents a real observation that the agent or generative model \"sees\". \n", "- The `prior` distribution that represents the agent's prior beliefs about the hidden states\n", "- the `likliheood_dist` that represents the agent's beliefs about how hidden states probabilistically relate to observations.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "## Define a quick helper function for printing arrays nicely (see https://gist.github.com/braingineer/d801735dac07ff3ac4d746e1f218ab75)\n", "def matprint(mat, fmt=\"g\"):\n", " col_maxes = [max([len((\"{:\"+fmt+\"}\").format(x)) for x in col]) for col in mat.T]\n", " for x in mat:\n", " for i, y in enumerate(x):\n", " print((\"{:\"+str(col_maxes[i])+fmt+\"}\").format(y), end=\" \")\n", " print(\"\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Observation: 0\n", "\n", "Prior:[0.5 0.5]\n", "\n", "Likelihood:\n", "0.8 0.2 \n", "0.2 0.8 \n" ] } ], "source": [ "num_obs = 2 # dimensionality of observations (2 possible observation levels)\n", "num_states = 2 # dimensionality of observations (2 possible hidden state levels)\n", "\n", "observation = 0 # index representation\n", "# observation = np.array([1, 0]) # one hot representation\n", "# observation = utils.onehot(0, num_obs) # one hot representation, but use one of pymdp's utility functions to create a one-hot\n", "\n", "prior = np.array([0.5, 0.5]) # simply set it by hand\n", "# prior = np.ones(num_states) / num_states # create a uniform prior distribution by creating a vector of ones and dividing each by the number of states\n", "# prior = utils.norm_dist(np.ones(num_states)) # use one of pymdp's utility functions to normalize any vector into a probability distribution\n", "\n", "likelihood_dist = np.array([ [0.8, 0.2],\n", " [0.2, 0.8] ])\n", "\n", "if isinstance(observation, np.ndarray):\n", " print(f'Observation:{observation}\\n')\n", "else:\n", " print(f'Observation: {observation}\\n')\n", "print(f'Prior:{prior}\\n')\n", "print('Likelihood:')\n", "matprint(likelihood_dist)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bayesian inference\n", "\n", "Before we define variational free energy for this generative model, let's step through the computations involved in inverting this model using Bayes' rule, i.e. computing the optimal Bayesian posterior over hidden states, given our sensory observation (which we will formally refer to as $o_t$). By performing exact Bayesian inference first, we can directly compares its results to that of variational free energy minimization. This will help us better understand the meaning of the free energy calculations that come later.\n", "\n", "#### 1. Compute the likelihood over hidden states, given the observation \n", "\n", "Now that we have a generative model and have fixed a particular observatio $o_t$ (`observation`), we have to perform Bayes' rule to compute the posterior. Mathematically, this can be expressed as follows:\n", "\n", "### $ \\hspace{60mm} P(s | o _t) = \\frac{P(o = o_t | s)P(s)}{P(o = o_t)} $\n", "\n", "Computing the posterior via Bayes' rule (also known as \"model inversion\") is the essence of optimal statistical inference, when one has a generative model of how one's data is caused, and some data. \n", "\n", "To start with, let's computing the likelihood term $P(o = o_t | s)$. We can represent the computation of the likelihood with this line of `NumPy`: ``likelihood_dist[observation,:]``. By doing so, we are providing a numerical answer to the question: \"What is the likelihood that State 1 vs State 2 caused the actual sensory data $o_t$ that I've observed?\".\n", "\n", " Mathematically, our likelihood function $P(o = o_t | s)$ (in the statistics literature also referred to as $L(\\theta)$) is a *function of the hidden states*. The particular function over hidden states we use is *defined* by the observation $o_t$. So you can think of the likelihood as a multi-dimensional function or simply a space of functions, where the particular function you use for inference is determined by your data.\n", "\n", "This act of computing the likelihood via an indexing operation ``likelihood_dist[observation,:]``, is similar in spirit to the operation of *conditioning*. We are, in some sense, \"conditioning\" on a particular observation (slicing out a \"row\" of our ``likelihood_dist`` matrix), and then looking at the *induced* likelihood over possible causes (hidden states) that could've have been the latent source of that observation. This operation captures the essence of what we mean when we speak of \"inverting\" generative models. Generative models are referred to as *generative* because they can be used to generate fictive observations, given some fixed setting of latent parameters. *Inversion* is thus moving in the opposite direction -- given some sensory data, what is the consequent likelihood over the *causes* or hidden states that might have generated that data?\n", "\n", "**Note**: We can also compute the likelihood using a matrix-vector product, if the observation is represented as a one-hot vector.\n", "\n", "```\n", "likelihood_s = likelihood_dist.T @ observation\n", "```\n", "\n", "You can see think of this as a weighted average of the rows of the likelihood matrix, where the weights are provided by the observations. Since we have insisted that the observations are a one-hot vector, this is equivalent to just selecting a single row of the likelihood matrix (the one indexed by the entry of the observation that is `1.0`)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(o=o_t|s):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[0.8 0.2]\n", "==================\n", "\n" ] } ], "source": [ "\n", "if isinstance(observation, np.ndarray): # use the matrix-vector version if your observation is a one-hot vector\n", " likelihood_s = likelihood_dist.T @ observation\n", "elif isinstance(observation, int): # use the index version if your observation is an integer index\n", " likelihood_s = likelihood_dist[observation,:] \n", "display(Latex('$P(o=o_t|s):$'))\n", "print(f'{likelihood_s}')\n", "print('==================\\n')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2. The joint distribution $P(o = o_t, s) = P(o = o_t|s)P(s)$ \n", "\n", "To compute the full numerator on the right-hand side of the Bayes' rule equation, we need to compute the joint distribution $P(o = o_t|s)P(s)$.\n", "\n", "The joint distribution, which also fully defines the generative model, is the product of the likelihood and prior distributions. The joint distribution expresses the joint probability of observations and hidden states, given the likelihood distribution and the prior over hidden states. If we condition on an actual observation $o_t$, as we have done here, then this joint distribution is, like the likelihood, a function of hidden states. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(o = o_t,s) = P(o = o_t|s)P(s):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[0.4 0.1]\n", "==================\n", "\n" ] } ], "source": [ "joint_prob = likelihood_s * prior # element-wise product of the likelihood of each hidden state, given the observation, with the prior probability assigned to each hidden state\n", "display(Latex('$P(o = o_t,s) = P(o = o_t|s)P(s):$'))\n", "print(f'{joint_prob}')\n", "print('==================\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3. Marginal probability or marginal likelihood: $\\sum_s P(o = o_t, s) = P(o = o_t)$\n", "\n", "Let's remind ourselves of Bayes' rule below:\n", "\n", "#### $ \\hspace{60mm} P(s | o _t) = \\frac{P(o = o_t | s)P(s)}{P(o = o_t)} $\n", "\n", "So far, using the likelihood, the observation, and the prior, we have computed the numerator of this term: the unnormalized joint distribution $P(o = o_t,s)$. All that's left is to do is then divide this term by the denominator $P(o=o_t)$. This term is also referred to as the model evidence or the marginal likelihood. \n", "\n", "This can be thought of as the probability of having seen the particular observation you saw, under all possible settings of the hidden states. This can be computed by marginalizing the joint distribution, using the prior probabilities of the hidden states:\n", "\n", "#### $ \\hspace{60mm}P(o) = \\sum_s P(o|s)P(s)$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "p_o = joint_prob.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4. Compute the posterior $P(s|o=o_t)$\n", "\n", "Now to compute the Bayes-optimal posterior, simply divide the numerator by the denominator!" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(s|o = o_t) = \\frac{P(o = o_t,s)}{P(o=o_t)}$:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Posterior over hidden states: [0.8 0.2]\n", "==================\n" ] } ], "source": [ "posterior = joint_prob / p_o # divide the joint by the marginal\n", "display(Latex('$P(s|o = o_t) = \\\\frac{P(o = o_t,s)}{P(o=o_t)}$:'))\n", "print(f'Posterior over hidden states: {posterior}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The variational free energy\n", "\n", "The variational free energy is an upper bound on **surprise**: surprise is define as $ - \\ln p(o)$, and is also known as the negative (log) evidence. By minimizing free energy, we are **minimizing** surprise and thus **maximizing** log evidence. This evidence is simply the (log of the) term we computed in the previous step, the normalizing denominator used in Bayes' rule. We can thus first compute the surprise associated with the observation we saw earlier:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$- \\ln P(o=o_t)$:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Surprise: 0.693\n", "==================\n" ] } ], "source": [ "surprise = - np.log(p_o)\n", "\n", "display(Latex('$- \\ln P(o=o_t)$:'))\n", "print(f'Surprise: {surprise.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By minimizing variational free energy with respect to the parameters of an arbitrary, parametrized distribution, also known as the approximate or variational posterior $Q(s)$, we are forcing the surprise to go down, and the model evidence to go up. In doing so, the approximate posterior distribution will get \"closer\" to the true posterior distribution (the $P(s|o)$ we computed above), $Q(s) \\approx P(s|o)$.\n", "\n", "This idea of minimizing a bound on surprise, is the core principle underlying the variational free energy principle, active inference, and the statistical methodology of variational principles more generally. This comes in handy because in many realistic scenarios where agents or systems need to make inferences about the hidden causes of sensory perturbations, performing Bayesian inference exactly becomes intractable (due mostly to the computation of the $P(o)$ denominator term, also known as the normalizing constant). Variational inference turns this intractable marginalization problem into a tractable optimization problem, where one only needs to change the approximate posterior $Q(s)$ in order to minimize a bound on surprise.\n", "\n", "But what is the variational free energy exactly, mathematically? It is commonly written as the expectation, under the approximate posterior, of the log ratio between the approximate posterior and the generative model:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] $\n", "\n", "Because of the rules of logarithms, we can also express this as an expected difference between the log posterior and the log generative model:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)] $\n", "\n", "By doing taking advantage of some more mathematical relationships (the factorization of the joint, rules for logarithms of products, and the definition of the conditional expectation), we can re-write this as an upper bound on surprise:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)] - \\ln P(o) $\n", "\n", "By re-arranging this equality and taking advantage of the fact that the quantity $\\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)]$ (also known as the Kullback-Leibler divergence) is greater than or equal to 0, we can easily show that the VFE is an upper bound on surprise:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} \\geq - \\ln P(o) $\n", "\n", "Let's now compute the VFE numerically for our generative model and fixed observation. Given we already defined those two things ($o_t$ and $P(o,s)$), the last thing we need to do, is to define an initial setting of our approximate posterior $Q(s)$, and compute the variational free energy using one of the formulas above." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Variational free energy (F) = 0.916\n", "==================\n" ] } ], "source": [ "# to begin with, set our initial Q(s) equal to our prior distribution -- i.e. a flat/uninformative belief about hidden states\n", "initial_qs = np.array([0.5, 0.5])\n", "\n", "# redefine generative model and observation, for ease\n", "observation = 0\n", "likelihood_dist = np.array([[0.8, 0.2], [0.2, 0.8]])\n", "prior = utils.norm_dist(np.ones(2))\n", "\n", "# compute the joint or generative model using the factorization: P(o=o|s)P(s)\n", "joint_prob = likelihood_dist[observation,:] * prior\n", "\n", "# compute the variational free energy using the expected log difference formulation\n", "initial_F = initial_qs.dot(np.log(initial_qs) - np.log(joint_prob))\n", "## @NOTE: because of log-rules, `initial_F` can also be computed using the division inside the logarithm:\n", "# initial_F = initial_qs.dot(np.log(initial_qs/joint_prob))\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'Variational free energy (F) = {initial_F.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's then change the approximate posterior $Q(s)$ and see what happens to the variational free energy.\n", "\n", "By definition, optimal inference (and 'perfect' VFE minimization) obtains when we set the approximate posterior $Q(s)$ to be equal to the true posterior, $Q(s) = P(s|o)$. \n", "\n", "As an extreme case, let's do this and then measure the variational free energy. We can see that it has decreased, relative to it's initial setting when the approximate posterior was equal to the prior $P(s)$." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "F = 0.693\n", "==================\n" ] } ], "source": [ "final_qs = posterior.copy() # now we just assert that the approximate posterior is equal to the true posterior\n", "final_F = final_qs.dot(np.log(final_qs) - np.log(joint_prob))\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'F = {final_F.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the free energy is 0.693 -- if you recall, this is exactly the **surprise** or negative log marginal likelihood $-\\ln P(o = o_t)$, related to the marginal likelihood quantity $P(o=o_t)$ that we had to compute when performing exact Bayesian inference earlier. \n", "\n", "It is easy to see why this equality should hold, when we consider the VFE in terms of the surprise bound:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)] - \\ln P(o) $\n", "\n", "When $Q(s) = P(s|o)$, as we have enforced with the line ``final_qs = posterior.copy()`` above, the first term $\\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)]$ will become 0. This is a property of the Kullback-Leibler divergence between two distributions $\\operatorname{D}_{KL}(Q \\parallel P) = \\mathbb{E}_{Q}[\\ln Q - \\ln P]$. \n", "\n", "So since that KL divergence is 0, this is a case when the bound on surprise is exact:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = 0 - \\ln P(o) = - \\ln P(o)$\n", "\n", "In other words, minimizing free energy \"as much as possible\" in the case of this generative model, means that the approximate posterior equals the true posterior, and the free energy bound becomes \"tight\", i.e. the free energy simply IS the negative log evidence!" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$-\\ln P(o):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.693\n", "==================\n", "\n" ] } ], "source": [ "# compute the surprise (which we can do analytically for this simple generative model)\n", "p_o = joint_prob.sum()\n", "surprise = - np.log(p_o)\n", "display(Latex('$-\\ln P(o):$'))\n", "print(f'{surprise.round(3)}')\n", "print('==================\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bonus material: auto-differentiation to perform gradient descent on the variational free energy\n", "\n", "In this section, we are going to numerically differentiate the variational free energy with respect to the parameters of the approximate posterior. We can take advantage of modern autodifferentiation software, that can calculate the derivatives of arbitrary computer programs, to compute these derivatives without doing any analytic differentiation." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np_auto # Thinly-wrapped version of Numpy that is auto-differentiable\n", "from autograd import grad # this is the function that we use to evaluate derivatives\n", "from functools import partial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's create a variational free energy function, that takes as input the variational posterior `qs`, an observation `obs`, the likelihood matrix `likelihood` and a prior distribution `prior`.\n", "\n", "By defining this computation as a function, we can calculate its derivatives automatically using the autodifferentiation package `autograd`, which allows users to pass gradients through arbitrary Python code. It includes a special version of `numpy` (`autograd.numpy`) that has a differentiable back-end. We will thus use this \"special\" verison of `numpy` when we instantiate our arrays and perform numerical operations on them." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# define the variational free energy as a function of the approximate posterior, an observation, and the generative model\n", "def vfe(qs, obs, likelihood, prior):\n", " \"\"\"\n", " Quick docstring below on inputs\n", " Arguments:\n", " =========\n", " `qs` [1D np_auto.ndarray]: variational posterior over hidden states\n", " `obs` [int]: index of the observation\n", " `likelihood` [2D np_auto.ndarray]: likelihood distribution P(o|s), relating hidden states probabilistically to observations\n", " `prior` [1D np_auto.ndarray]: prior over hidden states\n", " \"\"\"\n", "\n", " likelihood_s = likelihood[obs,:]\n", "\n", " joint = likelihood_s * prior\n", "\n", " vfe = qs @ (np_auto.log(qs) - np_auto.log(joint))\n", "\n", " return vfe\n", "\n", "# initialize an observation, an initial variational posterior, a prior, and a likelihood matrix\n", "obs = 0\n", "init_qs = np_auto.array([0.5, 0.5])\n", "prior = np_auto.array([0.5, 0.5])\n", "likelihood_dist = np_auto.array([ [0.8, 0.2],\n", " [0.2, 0.8] ])\n", "\n", "# this use of `partial` creates a version of the vfe function that is a function of Qs only, \n", "# with the other parameters (the observation, the generative model) fixed as constant parameters\n", "vfe_qs = partial(vfe, obs = obs, likelihood = likelihood_dist, prior = prior)\n", "\n", "# By calling `grad` on a function, we get out a function that can be used to compute the gradients of the VFE with respect to its input (in our case, `qs`)\n", "grad_vfe_qs = grad(vfe_qs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have a variational free energy function, and a derivative function that will give us the gradients of the VFE, with respect $Q(s)$, we can use it to perform a gradient descent on VFE, with respect to the parameters of $Q(s)$. In other words, we will implement this discretized differential equation to update the approximate posterior:\n", "\n", "#### $ \\hspace{60mm} Q(s)_{t+1} =Q(s)_{t} - \\frac{\\partial \\mathcal{F}}{\\partial Q(s)_{t}} $\n", "\n", "Where the gradient term $\\frac{\\partial \\mathcal{F}}{\\partial Q(s)_{t}}$ will simply be the output of the gradient function `grad_vfe_qs` we've defined above.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# number of iterations of gradient descent to perform\n", "n_iter = 40\n", "\n", "qs_hist = np_auto.zeros((n_iter, 2))\n", "qs_hist[0,:] = init_qs\n", "\n", "vfe_hist = np_auto.zeros(n_iter)\n", "vfe_hist[0] = vfe_qs(qs = init_qs)\n", "\n", "learning_rate = 0.1 # learning rate to prevent gradient steps that are too big (overshooting)\n", "for i in range(n_iter-1): \n", "\n", " dFdqs = grad_vfe_qs(qs_hist[i,:])\n", "\n", " ln_qs = np_auto.log(qs_hist[i,:]) - learning_rate * dFdqs # transform qs to log-space to perform gradient descent\n", " qs_hist[i+1,:] = maths.softmax(ln_qs) # re-normalize to make it a proper, categorical Q(s) again\n", "\n", " vfe_hist[i+1] = vfe_qs(qs = qs_hist[i+1,:]) # measure final variational free energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we were storing the history of the variational free energy over the course of the gradient descent, we can plot its trajectory below." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Gradient descent on VFE')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(8,6))\n", "plt.plot(vfe_hist)\n", "plt.ylabel('$\\\\mathcal{F}$', fontsize = 22)\n", "plt.xlabel(\"Iteration\", fontsize = 22)\n", "plt.xlim(0, n_iter)\n", "plt.ylim(vfe_hist[-1], vfe_hist[0])\n", "plt.title('Gradient descent on VFE', fontsize = 24)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Initial F = 0.916\n", "==================\n", "Final posterior:\n", "[0.8 0.2]\n", "==================\n", "Final F = 0.693\n", "==================\n" ] } ], "source": [ "final_qs, initial_F, final_F = qs_hist[-1,:], vfe_hist[0], vfe_hist[-1]\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'Initial F = {initial_F.round(3)}')\n", "print('==================')\n", "\n", "print('Final posterior:')\n", "print(f'{final_qs.round(1)}') # note that because of numerical imprecision in the gradient descent (constant learning rate, etc.), the approximate posterior will not exactly be the optimal posterior\n", "print('==================')\n", "print(f'Final F = {vfe_qs(final_qs).round(3)}')\n", "print('==================')\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.7.10 ('pymdp_env')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" } } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: docs/notebooks/pymdp_fundamentals.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "id": "6DSxgksDRLXj" }, "source": [ "# ``pymdp`` Fundamentals\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/pymdp_fundamentals.ipynb)\n", "\n", "*Author: Conor Heins*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": { "id": "rKfJtPWBR4tn" }, "source": [ "## *Very brief* `pymdp` and active inference background\n", "\n", "`pymdp` is a Python library, written primarily in [NumPy](https://numpy.org/), for solving **P**artially-**O**bserved **M**arkov **D**ecision *P*rocesses (POMDPs) using active inference, a modelling framework for perception, learning and action, originally derived from the Free Energy Principle. POMDP models have traditionally been used in disciplines ranging from control theory and robotics, to biological fields concerned with empirically modelling human and animal behavior. \n", "\n", "For a theoretical overview of active inference and the motivations for developing this package, please see our companion paper: [\"pymdp: A Python library for active inference in discrete state spaces\"](https://arxiv.org/abs/2201.03904).\n", "\n", "More in-depth coverage of applying active inference to POMDPs can be found in the following two papers: [*Active Inference: A Process Theory*](https://direct.mit.edu/neco/article-abstract/29/1/1/8207/Active-Inference-A-Process-Theory) and [*Active Inference in Discrete State Spaces: A Synthesis*](https://www.sciencedirect.com/science/article/pii/S0022249620300857)\n", "\n", "Below are links to a few useful papers, talks, and blog posts that concern active inference and the free energy principle more broadly:\n", "\n", "* Blog post: [Tutorial on Active Inference](https://medium.com/@solopchuk/tutorial-on-active-inference-30edcf50f5dc) by Oleg Solopchuk\n", "* Talk: [The variational foundations of movement](https://www.youtube.com/watch?v=zWFfZHqOnvM) by Karl Friston\n", "* Podcast: [Karl Friston: Neuroscience and the Free Energy Principle](https://www.youtube.com/watch?v=NwzuibY5kUs) hosted on Lex Fridman Podcast #99\n", "* Paper: [*A tutorial on the free-energy framework for modelling perception and learning*](https://www.sciencedirect.com/science/article/pii/S0022249615000759) by Rafal Bogacz\n", "* Paper: [*The free energy principle for action and perception: A mathematical review*](https://www.sciencedirect.com/science/article/pii/S0022249617300962) by Christopher Buckley, Chang Sub Kim, Simon McGregor, and Anil Seth\n", "* Paper: [*A free energy principle for the brain*](https://www.fil.ion.ucl.ac.uk/~karl/A%20free%20energy%20principle%20for%20the%20brain.pdf) by Karl Friston\n", "* Paper: [*A Step-by-Step Tutorial on Active Inference and its Application to Empirical Data*](https://psyarxiv.com/b4jm6/) by Ryan Smith and Christopher Whyte\n", "\n", "Also see [Jared Tumiel's blog post](https://jaredtumiel.github.io/blog/2020/10/14/spinning-up-in-ai.html) and [Beren Millidge's github repository](https://github.com/BerenMillidge/FEP_Active_Inference_Papers) for more literature and pedagogical materials related to active inference and the free energy principle.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "nty3Vm6YZR-X" }, "source": [ "## Data structures in `pymdp`\n", "\n", "In this tutorial notebook we'll be walking through the core functionalities and data structures used by `pymdp`, most of which will be easy to grasp for anyone who's familiar with array programming in `numpy` or even MATLAB, where much of the existing code related to active inference currently exists.\n", "\n", "We'll start by running through a full usage example of quickly building and running a random active inference agent in `pymdp`.\n", "\n", "In the interest of focusing on data structures and syntax, we'll just initialize the agent to have a random POMDP generative model -- we don't need to analogize this generative model to any hypothetical task environment that our agent will be behaving within. The agent will just have random beliefs about how the world evolves and how it gives rise to observations. The focus here is on how we store these objects (e.g. components of the generative model) in `pymdp`.\n", "\n", "For more in-depth tutorials that actually work through full, tutorial-style examples of building active inference agents and running them, please see the [Active inference from scratch](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/active_inference_from_scratch.html) tutorial and [Using the agent class](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/using_the_agent_class.html) tutorial. \n", "\n", "Other examples in the Examples section (e.g. the [T-Maze demo](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/tmaze_demo.html) or the [Epistemic chaining demo](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/cue_chaining_demo.html) provide walk-throughs of building active inference agents in particular task environments." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "oDMlGXnQRuQv" }, "outputs": [], "source": [ "\"\"\" Quickly build a random active inference agent, give it an observation and have it do hidden state and policy inference \"\"\"\n", "\n", "from pymdp import utils\n", "from pymdp.agent import Agent\n", "\n", "num_obs = [3, 5] # observation modality dimensions\n", "num_states = [4, 2, 3] # hidden state factor dimensions\n", "num_controls = [4, 1, 1] # control state factor dimensions\n", "A_array = utils.random_A_matrix(num_obs, num_states) # create sensory likelihood (A matrix)\n", "B_array = utils.random_B_matrix(num_states, num_controls) # create transition likelihood (B matrix)\n", "\n", "C_vector = utils.obj_array_uniform(num_obs) # uniform preferences\n", "\n", "# instantiate a quick agent using your A, B and C arrays\n", "my_agent = Agent( A = A_array, B = B_array, C = C_vector)\n", "\n", "# give the agent a random observation and get the optimized posterior beliefs\n", "\n", "observation = [1, 4] # a list specifying the indices of the observation, for each observation modality\n", "\n", "qs = my_agent.infer_states(observation) # get posterior over hidden states (a multi-factor belief)\n", "\n", "# Do active inference\n", "\n", "q_pi, neg_efe = my_agent.infer_policies() # return the policy posterior and return (negative) expected free energies of each policy as well\n", "\n", "action = my_agent.sample_action() # sample an action from the posterior over policies" ] }, { "cell_type": "markdown", "metadata": { "id": "MHIrFUuuarIA" }, "source": [ "## `numpy` object arrays \n", "\n", "In `pymdp`, both generative model distributions (e.g. `A` or `B`) as well as posterior distributions over hidden states (e.g. `qs`) and observations are represented as what we call \"object arrays\". Note that other conventions may refer to these arrays as \"arrays-of-arrays\", \"nested arrays\", or \"ragged/jagged arrays.\"\n", "\n", "Object arrays differ from more \"classical\" `numpy.ndarrays` that have numerical (e.g. `np.float64`) data types. The typical `numpy.ndarray` of float or integer data type, can only have scalar values as its entries. Object arrays (`numpy.ndarray` with `dtype = object`) however, do not have this restriction. Their array elements can be arbitrary Python data structures or objects. The entries of an object array can thus have arbitrary type and dimensionality." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Deeper dive on object arrays\n", "\n", "Object arrays can be initialized standard `numpy` constructors, but by also explicitly declaring `dtype = object`. \n", "\n", "```\n", "my_empty_array = np.empty(5, dtype = object)\n", "```\n", "\n", "The `pymdp.utils` module provides a set of functions in that allow you to quickly construct, convert between, and perform mathematical operations on these object arrays. Fundamentally underpinning these `utils` operations is the assumption that the elements of the input object array are `numpy.ndarrays` with numerical data type. In other words, we simply use object arrays to store collections of multi-dimensional arrays or standard `numpy.ndarrays`. This construction is chosen to allow `pymdp` to easily perform probabilistic computations on collections of multi-dimensional arrays, where each constituent array within the collection represents a particular factor or marginal distribution within a factorized representation. In the next section we'll get into why this constructino is useful and how it's mathematically motivated." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Constructing factorized distributions with object arrays\n", "\n", "\n", "For example, let's imagine a joint categorical probability distribution over some variable $\\mathbf{s}$ that factorizes into the product of a set of 3 marginal (i.e. univariate) distributions. Mathematically, we can express that factorization as:\n", "\n", "\n", "$$\n", " P(\\mathbf{s}) = \\prod_i^3 P(s_i)\n", "$$\n", "\n", "\n", "In `pymdp`, instead of encoding this distribution as the fully-enumerated product of marginals $P(\\mathbf{s}) = P(s_1) \\times P(s_2) \\times P(s_3)$, we instead exploit the factorization and *only store* the separate marginals $P(s_i)$ of the full distribution. Specifically, we store each marginal as a single `numpy.ndarray` of `ndim == 1` (i.e. a row vector) in a different entry of a `numpy.ndarray` of `dtype` object. The object array representation be easily constructed and manipulated using `utils` functions." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "naD3NKPjbeMg" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.13370366 0.86629634]\n" ] } ], "source": [ "num_factors = 3 # we have 3 factors total\n", "\n", "dim_of_each_factor = [2, 2, 4] # factor 1 has 2 levels, factor 2 has 2 levels, factor 4 has 4 levels\n", "\n", "P_s = utils.random_single_categorical(dim_of_each_factor)\n", "\n", "print(P_s[0])" ] }, { "cell_type": "markdown", "metadata": { "id": "IPTjskqrfi0j" }, "source": [ "Here we used the utility function `random_single_categorical(shape_list)` to create a random collection of marginal categorical distributions, representing the different factorized components of the full distribution $P(\\mathbf{s})$. \n", "\n", "Each of these marginal categorical distributions is stored in an according entry of the object array `P_s`.\n", "\n", "This representation is advantageous for several reasons, but one of the main advantages is sparsity / memory overhead. If we had to store the entire joint distribution $P(\\mathbf{s})$ as a product of all the marginals, we could either store that as a single 1D categorical distribution with `2 * 2 * 4` different levels (the combinatorics of all the hidden state dimensionalities), or as a multi-dimensional array with size `(2, 2, 4)`, where each entry of the joint `Ps[i,j,k]` stores the joint probability of $P(s^1 = i, s^2 = j, s^3 = k)$. Either way, we'd have to store polynomially more values $2 \\times 2 \\times 4$ is twice the size of $2 + 2 + 4$. But since we know that the marginals are by construction independent, we can just store them separately without losing any information.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "HRxPg3VVj4-g" }, "source": [ "*Side note*: Here's an alternative way to generate multi-factor categorical distributions. \n", "\n", "if you knew what your factors were to begin with, and you wanted to construct the full distribution from the factors, you could use another utility function to build the object array from a `list` of the factorized distributions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "Gtr7VPjlhxIl" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.5 0.16666667 0.16666667 0.16666667]\n" ] } ], "source": [ "import numpy as np\n", "\n", "ps1 = np.array([0.5, 0.5])\n", "ps2 = np.array([0.75, 0.25])\n", "ps3 = np.array([0.5, 1./6., 1./6., 1./6.])\n", "\n", "P_s = utils.obj_array_from_list([ps1, ps2, ps3])\n", "\n", "print(P_s[2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Object arrays and conditional distributions\n", "\n", "Understanding the representation of factorized probability distributions as object arrays is critical for understanding and constructing generative models in `pymdp`. This object array representation applies not only to multi-factor, unconditional categorical distributions (like the example above: a joint categorical distribution being factorized into a product of univariate marginals), but also is used to represent collections of *conditional* categorical distributions.\n", "\n", "In particular, we use object arrays to encode the observation and transition models (also known as the observation likelihood and transition likelihood) of the agent's generative model. Object arrays are necessary in this case, due to the convention of factorizing the observation space into multiple **observation modalities** and the hidden states into multiple **hidden state factors**. Mathematically, this can be expressed as follows:\n", "\n", "$$ \n", "\\mathbf{o}_t = \\prod_{i = 1}^{M} \\delta_{O_i}(o^{i}_t) \\hspace{15 mm} \\mathbf{s}_t = \\prod_{i = 1}^{F} \\delta_{S_i}(s^{i}_t) \\\\\n", "$$\n", "\n", "where any particular observation $\\mathbf{o}_t$ is actually factorized into a product of Dirac delta functions over different modality-specific observations $o^m_t$, i.e. \"one-hot\" vectors or unit vectors in $\\mathbb{R}^{O_m}$. The same factorization applies to multi-factorial hidden states $\\mathbf{s}_t$. The notation $\\delta_{X_i}(x^{i})$ denotes a Dirac delta function with discrete support $X_i$ evaluated at point $x^i$. \n", "\n", "This factorization of observations across modalities and hidden states across hidden state factors, carries forward into the specification of the `A` and `B` arrays, the representation of the conditional distributions $P(\\mathbf{o}_t|\\mathbf{s}_t)$ and $P(\\mathbf{s}_t|\\mathbf{s}_{t-1}, \\mathbf{u}_{t-1})$ in `pymdp`. These two arrays of conditional distributions can also be factorized by modality and factor, respectively.\n", "\n", "The `A` array, for instance, contains the agent's observation model, that relates hidden states $\\mathbf{s}_t$ to observations $\\mathbf{o}_t$:\n", "\n", "$$\n", "\\mathbf{A} = \\{A^1, A^2, ..., A^M \\}, \\hspace{5mm} A^m = P(o^m_t | s^1_t, s^2_t, ..., s^F_t)\n", "$$\n", "\n", "Therefore, we represent the `A` array as an object array whose constituent arrays are multidimensional `numpy.ndarrays` that encode conjunctive relationships between combinations of hidden states and observations.\n", "\n", "This is best explained using the example in the original example code at the top of this tutorial. It is custom to build lists of the dimensionalities of the modalities (resp. hidden state factors) of your model, typically using lists named `num_obs` (for the dimensionalities of the observation modalities) and `num_states` (dimensionalities of the hidden state factors). These lists can then be used to automatically construct the `A` array with the correct shape." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dimensionality of A array for modality 1: (3, 4, 2, 3)\n", "Dimensionality of A array for modality 2: (5, 4, 2, 3)\n" ] } ], "source": [ "num_obs = [3, 5] # observation modality dimensions\n", "num_states = [4, 2, 3] # hidden state factor dimensions\n", "\n", "A_array = utils.random_A_matrix(num_obs, num_states) # create sensory likelihood (A array)\n", "\n", "for m, _ in enumerate(num_obs):\n", " print(f'Dimensionality of A array for modality {m + 1}: {A_array[m].shape}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, `A_array[0]` stores the conditional relationships between the hidden states $\\mathbf{s}$ and observations within the first modality $o^1_t$, which has dimensionality `3`. This explains why the `shape` of `A_array[0]` is `(3, 4, 2, 3)` -- it stores the conditional relationships between each setting of the hidden state factors (which have dimensionalities `[4, 2, 3]`) and the observations within the first modality, which has dimensionality `3`. Crucially, each sub-array `A[m]` stores the conditional dependencies between *all* the hidden state factor combinations (configurations of $s^1, s^2, ..., s^F$) and the observations along modality `m`.\n", "\n", "In this case, we used the `pymdp.utils` function `random_A_matrix()` to generate a random `A` array, but in most cases users will want to design their own bespoke observation models (or at least initialize them to some reasonable starting values). In such a scenario, the usual route is to initialize the `A` array to a series of identically-valued multidimensional arrays (e.g. arrays filled with 0's or uniform values), and then fill out the conditional probability entries \"by hand\", according to the task the user is interested in modelling.\n", "\n", "For this purpose, utility functions like `obj_array_zeros` and `obj_array_uniform` come in handy. These functions takes as inputs list of shapes, where each shape contains the dimensionality (e.g. `[2, 3, 4]`) of one of the multi-dimensional arrays that will populate the final object array. For example, creating this shape list for the `A` array, given `num_obs` and `num_states` is quite straightforward:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "A_shapes = [[o_dim] + num_states for o_dim in num_obs]\n", "\n", "# initialize the A array to all 0's\n", "empty_A = utils.obj_array_zeros(A_shapes)\n", "\n", "# initialize the A array to uniform distributions as columns\n", "# uniform_A = utils.obj_array_uniform(A_shapes)\n", "\n", "# then fill out your A matrix elements as appropriate, depending on the task\n", "# empty_A[0][:,0,1,2] = np.array([0.7, 0.15, 0.15])\n", "# empty_A[0][:,...] = ....\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, we can create `B` arrays that encode the temporal dependencies between the hidden state factors over time, further conditioned on control factors (or state factors that correspond to action-states). Mathematically, the `B` arrays are expressed as follows:\n", "\n", "$$\n", "\\mathbf{B} = \\{B^1, B^2, ..., B^F \\}, \\hspace{5mm} B^f = P(s^f_t | s^f_{t-1}, u^f_{t-1})\n", "$$\n", "\n", "where $u^f_{t-1}$ denotes the control state for control factor $f$, taken at time $t-1$.\n", "\n", "We can construct these matrices this by introducing an additional list `num_controls` that stores the dimensionalities of each control factor, which in combination with `num_states` can be used to specify the `B` array." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dimensionality of B array for hidden state factor 1: (4, 4, 4)\n", "Dimensionality of B array for hidden state factor 2: (2, 2, 1)\n", "Dimensionality of B array for hidden state factor 3: (3, 3, 1)\n" ] } ], "source": [ "num_states = [4, 2, 3] # hidden state factor dimensions\n", "num_controls = [4, 1, 1] # control state factor dimensions\n", "\n", "B_array = utils.random_B_matrix(num_states, num_controls) # create transition likelihood (B matrix)\n", "\n", "for f, _ in enumerate(num_states):\n", " print(f'Dimensionality of B array for hidden state factor {f + 1}: {B_array[f].shape}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see here, each factor-specific `B` array (e.g. `B[2]`) has shape `(num_states[f], num_states[f], num_controls[f])`, encoding the conditional dependencies between states for a given factor `f` at subsequent timepoints, further conditioned on actions or control states along that factor. This construction means that hidden state factors are statistically independent of one another -- i.e. hidden state factor `f` is only affected by its own state at the previous timestep, as well as the state of the `f`-th control factor.\n", "\n", "And of course, as with the `A` array, we can also pre-allocate our `B` arrays to have the correct shape and then fill them out by hand, using the following template:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "B_shapes = [[s_dim, s_dim, num_controls[f]] for f, s_dim in enumerate(num_states)]\n", "\n", "# initialize the B array to all 0's\n", "empty_B = utils.obj_array_zeros(B_shapes)\n", "\n", "# initialize the B array to uniform distributions as columns\n", "# uniform_B = utils.obj_array_uniform(B_shapes)\n", "\n", "# then assign your B matrix elements as appropriate, depending on the task\n", "# empty_B[0][0,:,0] = 1.\n", "# empty_B[0][1,:,1] = 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Handy functions for dealing with object arrays.\n", "\n", "The `utils` library is also equipped with a set of handy functions for dealing with object arrays -- this includes operations like normalization and sampling. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Normalization\n", "\n", "For instance, let's imagine you generated an `A` array by hand with the following structure:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "num_obs = [3]\n", "\n", "num_states = [3, 2]\n", "\n", "A_array = utils.obj_array(len(num_obs)) # create an empty object array with as many elements as there are observation modalities (here, only 1 modality)\n", "\n", "A_array[0] = np.zeros(num_obs + num_states) # initialize the likelihood mapping for the single modality\n", "\n", "A_array[0][:,:,0] = np.eye(3) # assign the mapping between hidden states of factor 0 and observations, given factor 1 == 0\n", "A_array[0][0,:,1] = 0.5 # assign the mapping between hidden states of factor 0 and observation of level 0, given factor 1 == 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This `A` array corresponds to an observation model with a single modality and two hidden state factors.\n", "\n", "We can check if this `A` array is a proper conditional distribution by using the `utils` function `is_normalized`, which checks to make sure each column of each sub-array within `A` sums to `1`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "utils.is_normalized(A_array)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This `A` is not properly normalized because of this line:\n", "\n", "```\n", "A_array[0][0,:,1] = 0.5 \n", "```\n", "\n", "This is problematic, because we've only assigned a single outcome to have 50% probability under all the hidden state configurations of factor 0, given factor 1 == level 1. That means each column of `A_array[0][:,:,1]` is not a proper conditional distribution, since there's still 50% of 'unaccounted' probability. In particular, the distributions encoded in the columns of this array do not each sum to 1.\n", "\n", "We can fix this by hand (by changing our code to allocate the remaining 50% of probability for each of those columns) or, depending on the intended final distributions, by using the `norm_dist_obj_arr` function, which column-normalizes every `numpy.ndarray` contained within an object array." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P(o0 | s0, s1 == 1) after normalization: \n", " [[1. 1. 1.]\n", " [0. 0. 0.]\n", " [0. 0. 0.]]\n", "\n", "Is the full distribution is now normalized? Yes!\n" ] } ], "source": [ "A_array = utils.norm_dist_obj_arr(A_array)\n", "\n", "print(f'P(o0 | s0, s1 == 1) after normalization: \\n {A_array[0][:,:,1]}\\n')\n", "\n", "print(f'Is the full distribution is now normalized? {\"Yes!\" if utils.is_normalized(A_array) else \"No!\"}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sampling\n", "\n", "Sometimes we will also want to sample from categorical probability distributions, for instance when sampling observations from the generative process or sampling actions from the agent's posterior over policies. We have two functions in `utils`, `sample` and `sample_obj_arr` that can deal with sampling from either single probability distributions (`numpy.ndarray` of `ndim == 1`) as well as collections of factorized distributions, stored in object arrays." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "# sample from a single random categorical distribution\n", "\n", "my_categorical = np.random.rand(3)\n", "my_categorical = utils.norm_dist(my_categorical) # the `utils.norm_dist` function works on single vectors or matrices that represent non-factorized probability distributions\n", "sampled_outcome = utils.sample(my_categorical)\n", "print(sampled_outcome)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 2, 0]\n" ] } ], "source": [ "# sample from a multi-factor categorical distribution\n", "\n", "my_multifactor_categorical = utils.random_single_categorical([3, 4, 10]) # creates a collection of 3 marginal categorical distributions, each of different dimension\n", "\n", "sampled_outcome_list = utils.sample_obj_array(my_multifactor_categorical)\n", "\n", "print(sampled_outcome_list)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that when sampling from categorical distributions, the returned values are integers that represent the index of the support (i.e. which \"outcome\" or \"level\") that is sampled. In the case of multi-factor distributions, the returned value is a list of integers, one sampled outcome per marginal categorical distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Conditional expectation\n", "\n", "We can also compute conditional expectations of single random variables that depend on a multi-factor random variables using a function from the `pymdp.maths` utility package called `spm_dot`, that is based on the original function of the same name from `SPM`, where active inference was first implemented.\n", "\n", "Let's imagine we have an observation model as above, with one observation modality with dimensionality `3` and two hidden state factors, with dimensionalities `3` and `2`. Given a factorized distribution over the two hidden state factors (i.e. an object array of marginal categorical distributions, one with `3` levels and the other with `2` levels), we want to generate a conditional expectation over the values of the observation distribution with dimension `3`. In other words, we want to evaluate:\n", "\n", "$$\n", "\\mathbb{E}_{P(\\mathbf{s})}[P(o | \\mathbf{s})] = \\mathbb{E}_{P(s^1)P(s^2)}[P(o^1 | s^1, s^2)]\n", "$$\n", "\n", "given a conditional distribution $P(o^1 | s^1, s^2)$ and some \"priors\" $P(s^1), P(s^2)$ over hidden states.\n", "\n", "Implementing this conditional expectation in practice can be written as a multi-dimensional dot product of the modality-specific `A` array (`A[0]`) with each of the hidden state factor distributions, $P(s^1)$ and $P(s^2)$. Under the hood, the `spm_dot` function of `pymdp.maths` achieves this using an optimized `numpy` function called [`einsum`](https://numpy.org/doc/stable/reference/generated/numpy.einsum.html), or einstein summation. Let's see what computing this conditional expectation with `spm_dot` looks like in practice:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Expected distribution over observations, given the value of Ps:\n", " [[0.375]\n", " [0.25 ]\n", " [0.375]]\n" ] } ], "source": [ "from pymdp import maths\n", "\n", "num_obs = [3] # dimensionalities of observation modalities (just one here, for simplicity)\n", "num_states = [3, 2] # dimensionalities of hidden state factors \n", "\n", "A_shapes = [num_obs + num_states] # shape of the A arrays (only one shape needed, (3, 3, 2))\n", "A_array = utils.obj_array_zeros(A_shapes) # create our conditional distribution using the provided shape list\n", "\n", "A_array[0][:,:,0] = np.eye(3) # when s2 == 0, s1 fully determines the value of o1\n", "A_array[0][1,:,1] = 1. # when s2 == 1, the value of o1 is always 2, regardless of the setting of s1\n", "\n", "Ps = utils.obj_array_from_list([np.array([0.5, 0.0, 0.5]), np.array([0.75, 0.25])]) # create our \"prior\" or beliefs about hidden states, that will be used in the expectation\n", "\n", "E_o_ps = maths.spm_dot(A_array[0], Ps)\n", "\n", "print(f\"Expected distribution over observations, given the value of Ps:\\n {E_o_ps.reshape(-1,1)}\")" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "Pymdp Fundamentals.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3.7.10 ('pymdp_env')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" } } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: docs/notebooks/tmaze_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Active Inference Demo: T-Maze Environment\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/tmaze_demo.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This demo notebook provides a full walk-through of active inference using the `Agent()` class of `pymdp`. The canonical example used here is the 'T-maze' task, often used in the active inference literature in discussions of epistemic behavior (see, for example, [\"Active Inference and Epistemic Value\"](https://pubmed.ncbi.nlm.nih.gov/25689102/))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import copy\n", "\n", "from pymdp.agent import Agent\n", "from pymdp.utils import plot_beliefs, plot_likelihood\n", "from pymdp import utils\n", "from pymdp.envs import TMazeEnv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Auxiliary Functions\n", "\n", "Define some utility functions that will be helpful for plotting." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Environment\n", "\n", "Here we consider an agent navigating a three-armed 'T-maze,' with the agent starting in a central location of the maze. The bottom arm of the maze contains an informative cue, which signals in which of the two top arms ('Left' or 'Right', the ends of the 'T') a reward is likely to be found. \n", "\n", "At each timestep, the environment is described by the joint occurrence of two qualitatively-different 'kinds' of states (hereafter referred to as _hidden state factors_). These hidden state factors are independent of one another.\n", "\n", "The first hidden state factor (`Location`) is a discrete random variable with 4 levels, that encodes the current position of the agent. Each of its four levels can be mapped to the following values: {`CENTER`, `RIGHT ARM`, `LEFT ARM`, or `CUE LOCATION`}. The random variable `Location` taking a particular value can be represented as a one-hot vector with a `1` at the appropriate level, and `0`'s everywhere else. For example, if the agent is in the `CUE LOCATION`, the current state of this factor would be $s_1 = \\begin{bmatrix} 0 & 0 & 0 & 1 \\end{bmatrix}$.\n", "\n", "We represent the second hidden state factor (`Reward Condition`) is a discrete random variable with 2 levels, that encodes the reward condition of the trial: {`Reward on Right`, or `Reward on Left`}. A trial where the condition is reward is `Reward on Left` is thus encoded as the state $s_2 = \\begin{bmatrix} 0 & 1\\end{bmatrix}$.\n", "\n", "The environment is designed such that when the agent is located in the `RIGHT ARM` and the reward condition is `Reward on Right`, the agent has a specified probability $a$ (where $a > 0.5$) of receiving a reward, and a low probability $b = 1 - a$ of receiving a 'loss' (we can think of this as an aversive or unpreferred stimulus). If the agent is in the `LEFT ARM` for the same reward condition, the reward probabilities are swapped, and the agent experiences loss with probability $a$, and reward with lower probability $b = 1 - a$. These reward contingencies are intuitively swapped for the `Reward on Left` condition. \n", "\n", "For instance, we can encode the state of the environment at the first time step in a `Reward on Right` trial with the following pair of hidden state vectors: $s_1 = \\begin{bmatrix} 1 & 0 & 0 & 0\\end{bmatrix}$, $s_2 = \\begin{bmatrix} 1 & 0\\end{bmatrix}$, where we assume the agent starts sitting in the central location. If the agent moved to the right arm, then the corresponding hidden state vectors would now be $s_1 = \\begin{bmatrix} 0 & 1 & 0 & 0\\end{bmatrix}$, $s_2 = \\begin{bmatrix} 1 & 0\\end{bmatrix}$. This highlights the _independence_ of the two hidden state factors. In other words, the location of the agent ($s_1$) can change without affecting the identity of the reward condition ($s_2$).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialize environment\n", "Now we can initialize the T-maze environment using the built-in `TMazeEnv` class from the `pymdp.envs` module." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose reward probabilities $a$ and $b$, where $a$ and $b$ are the probabilities of reward / loss in the 'correct' arm, and the probabilities of loss / reward in the 'incorrect' arm. Which arm counts as 'correct' vs. 'incorrect' depends on the reward condition (state of the 2nd hidden state factor)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "reward_probabilities = [0.98, 0.02] # probabilities used in the original SPM T-maze demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialize an instance of the T-maze environment" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "env = TMazeEnv(reward_probs = reward_probabilities)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Structure of the state --> outcome mapping\n", "We can 'peer into' the rules encoded by the environment (also known as the _generative process_ ) by looking at the probability distributions that map from hidden states to observations. Following the SPM version of active inference, we refer to this collection of probabilistic relationships as the `A` array. In the case of the true rules of the environment, we refer to this array as `A_gp` (where the suffix `_gp` denotes the generative process). \n", "\n", "It is worth outlining what constitute the agent's observations in this task. In this T-maze demo, we have three sensory channels or observation modalities: `Location`, `Reward`, and `Cue`. \n", "\n", "1. The `Location` observation values are identical to the `Location` hidden state values. In this case, the agent always unambiguously observes its own state - if the agent is in `RIGHT ARM`, it receives a `RIGHT ARM` observation in the corresponding modality. This might be analogized to a 'proprioceptive' sense of one's own place.\n", "\n", "2. The `Reward` observation modality assumes the values `No Reward`, `Reward` or `Loss`. The `No Reward` (index 0) observation is observed whenever the agent isn't occupying one of the two T-maze arms (the right or left arms). The `Reward` (index 1) and `Loss` (index 2) observations are observed in the right and left arms of the T-maze, with associated probabilities that depend on the reward condition (i.e. on the value of the second hidden state factor).\n", "\n", "3. The `Cue` observation modality assumes the values `Cue Right`, `Cue Left`. This observation unambiguously signals the reward condition of the trial, and therefore in which arm the `Reward` observation is more probable. When the agent occupies the other arms, the `Cue` observation will be `Cue Right` or `Cue Left` with equal probability. However (as we'll see below when we intialise the agent), the agent's beliefs about the likelihood mapping render these observations uninformative and irrelevant to state inference.\n", "\n", "In `pymdp`, we store the set of probability distributions encoding the conditional probabilities of observations, under different configurations of hidden states, as a set of matrices referred to as the likelihood mapping or `A` array (this is a convention borrowed from SPM). The likelihood mapping _for a single modality_ is stored as a single multidimensional array (a `numpy.ndarray`) `A[m]` with the larger likelihood array, where `m` is the index of the corresponding modality. Each modality-specific A array has `num_obs[m]` rows, and as many lagging dimensions (e.g. columns, 'slices' and higher-order dimensions) as there are hidden state factors. `num_obs[m]` tells you the number of observation values (also known as \"levels\") for observation modality `m`.\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# here, we can get the likelihood mapping directly from the environmental class. So this is the likelihood mapping that truly describes the relatinoship between the \n", "# environment's hidden state and the observations the agent will get\n", "\n", "A_gp = env.get_likelihood_dist()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[1][:,:,0],'Reward Right')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[1][:,:,1],'Reward Left')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,3,:],'Cue Mapping')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transition Dynamics\n", "\n", "We represent the dynamics of the environment (e.g. changes in the location of the agent and changes to the reward condition) as conditional probability distributions that encode the likelihood of transitions between the states of a given hidden state factor. These distributions are collected into the so-called `B` array, also known as _transition likelihoods_ or _transition distribution_ . As with the `A` array, we denote the true probabilities describing the environmental dynamics as `B_gp`. Each sub-matrix `B_gp[f]` of the larger array encodes the transition probabilities between state-values of a given hidden state factor with index `f`. These matrices encode dynamics as Markovian transition probabilities, such that the entry $i,j$ of a given matrix encodes the probability of transition to state $i$ at time $t+1$, given state $j$ at $t$. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# here, we can get the transition mapping directly from the environmental class. So this is the transition mapping that truly describes the environment's dynamics\n", "\n", "B_gp = env.get_transition_dist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, we can inspect the 'dynamics' of the `Reward Condition` factor by indexing into the appropriate sub-matrix of `B_gp`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[1][:,:,0],'Reward Condition Transitions')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above transition array is the 'trivial' identity matrix, meaning that the reward condition doesn't change over time (it's mapped from whatever it's current value is to the same value at the next timestep)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (Controllable-) Transition Dynamics\n", "\n", "Importantly, some hidden state factors are _controllable_ by the agent, meaning that the probability of being in state $i$ at $t+1$ isn't merely a function of the state at $t$, but also of actions (or from the agent's perspective, _control states_ ). So now each transition likelihood encodes conditional probability distributions over states at $t+1$, where the conditioning variables are both the states at $t-1$ _and_ the actions at $t-1$. This extra conditioning on actions is encoded via an optional third dimension to each factor-specific `B` array.\n", "\n", "For example, in our case the first hidden state factor (`Location`) is under the control of the agent, which means the corresponding transition likelihoods `B[0]` are index-able by both previous state and action." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,0],'Transition likelihood for \"Move to Center\"')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,1],'Transition likelihood for \"Move to Right Arm\"')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,2],'Transition likelihood for \"Move to Left Arm\"')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,3],'Transition likelihood for \"Move to Cue Location\"')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The generative model\n", "Now we can move onto setting up the *generative model* of the agent - namely, the agent's *beliefs* or assumptions about how hidden states give rise to observations, and how hidden states transition among eachother.\n", "\n", "In almost all MDPs, the critical building blocks of this generative model are the agent's representation of the observation likelihood, which we'll refer to as `A_gm`, and its representation of the transition likelihood, which we'll call `B_gm`. \n", "\n", "Here, we assume the agent has a veridical representation of the rules of the T-maze (namely, how hidden states cause observations) as well as its ability to control its own movements with certain consequences (i.e. 'noiseless' transitions). So in other words, the agent will have a veridical representation of the \"rules\" of the environment, as encoded in the arrays `A_gp` and `B_gp` of the generative process." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "A_gm = copy.deepcopy(A_gp) # make a copy of the true observation likelihood to initialize the observation model\n", "B_gm = copy.deepcopy(B_gp) # make a copy of the true transition likelihood to initialize the transition model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Important Concept to Note Here!!!**\n", "It is not necessary, or even in many cases _important_ , that the generative model is a veridical representation of the generative process. This distinction between generative model (essentially, beliefs entertained by the agent and its interaction with the world) and the generative process (the actual dynamical system 'out there' generating sensations) is of crucial importance to the active inference formalism and (in our experience) often overlooked in code.\n", "\n", "It is for notational and computational convenience that we encode the generative process using `A` and `B` matrices. By doing so, it simply puts the rules of the environment in a data structure that can easily be converted into the Markovian-style conditional distributions useful for encoding the agent's generative model.\n", "\n", "Strictly speaking, however, all the generative process needs to do is generate observations that are 'digestible' by the agent, and be 'perturbable' by actions issued by the agent. The way in which it does so can be arbitrarily complex, non-linear, and unaccessible by the agent. Namely, it doesn't have to be encoded by `A` and `B` arrays (what amount to Markovian, conditional probability tables), but could be described by arbitrarily complex nonlinear or non-differentiable transformations of hidden states that generate observatons." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing the `Agent()` class\n", "\n", "In `pymdp`, we have abstracted much of the computations required for active inference into the `Agent` class, a flexible object that can be used to store necessary aspects of the generative model, the agent's instantaneous observations and actions, and perform action / perception using functions like `Agent.infer_states` and `Agent.infer_policies`. \n", "\n", "An instance of `Agent` is straightforwardly initialized with a call to the `Agent()` constructor with a list of optional arguments.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our call to `Agent()`, we need to constrain the default behavior with some of our T-Maze-specific needs. For example, we want to make sure that the agent's beliefs about transitions are constrained by the fact that it can only control the `Location` factor - _not_ the `Reward Condition` (which we assumed stationary across an epoch of time). Therefore we specify this using a list of indices that will be passed as the `control_fac_idx` argument of the `Agent()` constructor. \n", "\n", "Each element in the list specifies a hidden state factor (in terms of its index) that is controllable by the agent. Hidden state factors whose indices are _not_ in this list are assumed to be uncontrollable." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "controllable_indices = [0] # this is a list of the indices of the hidden state factors that are controllable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can construct our agent..." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "agent = Agent(A=A_gm, B=B_gm, control_fac_idx=controllable_indices)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can inspect properties (and change) of the agent as we see fit. Let's look at the initial beliefs the agent has about its starting location and reward condition, encoded in the prior over hidden states $P(s)$, known in SPM-lingo as the `D` array." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[1],\"Beliefs about reward condition\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make it so that agent starts with precise and accurate prior beliefs about its starting location." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "agent.D[0] = utils.onehot(0, agent.num_states[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `onehot(value, dimension)` function within `pymdp.utils` is a nice function for quickly generating a one-hot vector of dimensions `dimension` with a `1` at the index `value`.\n", "\n", "And now confirm that our agent knows (i.e. has accurate beliefs about) its initial state by visualizing its priors again." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another thing we want to do in this case is make sure the agent has a 'sense' of reward / loss and thus a motivation to be in the 'correct' arm (the arm that maximizes the probability of getting the reward outcome).\n", "\n", "We can do this by changing the prior beliefs about observations, the `C` array (also known as the _prior preferences_ ). This is represented as a collection of distributions over observations for each modality. It is initialized by default to be all 0s. This means agent has no preference for particular outcomes. Since the second modality (index `1` of the `C` array) is the `Reward` modality, with the index of the `Reward` outcome being `1`, and that of the `Loss` outcome being `2`, we populate the corresponding entries with values whose relative magnitudes encode the preference for one outcome over another (technically, this is encoded directly in terms of relative log-probabilities). \n", "\n", "Our ability to make the agent's prior beliefs that it tends to observe the outcome with index `1` in the `Reward` modality, more often than the outcome with index `2`, is what makes this modality a Reward modality in the first place -- otherwise, it would just be an arbitrary observation with no extrinsic value _per se_. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "agent.C[1][1] = 3.0\n", "agent.C[1][2] = -3.0" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.C[1],\"Prior beliefs about observations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Active Inference\n", "Now we can start off the T-maze with an initial observation and run active inference via a loop over a desired time interval." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " === Starting experiment === \n", " Reward condition: Right, Observation: [CENTER, No reward, Cue Left]\n", "[Step 0] Action: [Move to CUE LOCATION]\n", "[Step 0] Observation: [CUE LOCATION, No reward, Cue Right]\n", "[Step 1] Action: [Move to RIGHT ARM]\n", "[Step 1] Observation: [RIGHT ARM, Reward!, Cue Right]\n", "[Step 2] Action: [Move to RIGHT ARM]\n", "[Step 2] Observation: [RIGHT ARM, Reward!, Cue Left]\n", "[Step 3] Action: [Move to RIGHT ARM]\n", "[Step 3] Observation: [RIGHT ARM, Reward!, Cue Right]\n", "[Step 4] Action: [Move to RIGHT ARM]\n", "[Step 4] Observation: [RIGHT ARM, Reward!, Cue Right]\n" ] } ], "source": [ "T = 5 # number of timesteps\n", "\n", "obs = env.reset() # reset the environment and get an initial observation\n", "\n", "# these are useful for displaying read-outs during the loop over time\n", "reward_conditions = [\"Right\", \"Left\"]\n", "location_observations = ['CENTER','RIGHT ARM','LEFT ARM','CUE LOCATION']\n", "reward_observations = ['No reward','Reward!','Loss!']\n", "cue_observations = ['Cue Right','Cue Left']\n", "msg = \"\"\" === Starting experiment === \\n Reward condition: {}, Observation: [{}, {}, {}]\"\"\"\n", "print(msg.format(reward_conditions[env.reward_condition], location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))\n", "\n", "for t in range(T):\n", " qx = agent.infer_states(obs)\n", "\n", " q_pi, efe = agent.infer_policies()\n", "\n", " action = agent.sample_action()\n", "\n", " msg = \"\"\"[Step {}] Action: [Move to {}]\"\"\"\n", " print(msg.format(t, location_observations[int(action[0])]))\n", "\n", " obs = env.step(action)\n", "\n", " msg = \"\"\"[Step {}] Observation: [{}, {}, {}]\"\"\"\n", " print(msg.format(t, location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent begins by moving to the `CUE LOCATION` to resolve its uncertainty about the reward condition - this is because it knows it will get an informative cue in this location, which will signal the true reward condition unambiguously. At the beginning of the next timestep, the agent then uses this observaiton to update its posterior beliefs about states `qx[1]` to reflect the true reward condition. Having resolved its uncertainty about the reward condition, the agent then moves to `RIGHT ARM` to maximize utility and continues to do so, given its (correct) beliefs about the reward condition and the mapping between hidden states and reward observations. \n", "\n", "Notice, perhaps confusingly, that the agent continues to receive observations in the 3rd modality (i.e. samples from `A_gp[2]`). These are observations of the form `Cue Right` or `Cue Left`. However, these 'cue' observations are random and totally umambiguous unless the agent is in the `CUE LOCATION` - this is reflected by totally entropic distributions in the corresponding columns of `A_gp[2]` (and the agents beliefs about this ambiguity, reflected in `A_gm[2]`. See below." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdsAAAD9CAYAAAD0+N2rAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAdHUlEQVR4nO3de7hdVXnv8e+bHZCggBIsCgmIBSsctOAF70IVK+AFe6yUS614i5we1ApesK0IVOut2CM9eCC2WMUCoqfaHMUHapF4AW1ixQtBakQwAREIdxAh8J4/xtjJZLn23mtnr5G9kn4/zzOfZ68155pzzDEvvznGnGvtyEwkSVI7c2a7AJIkbe4MW0mSGjNsJUlqzLCVJKkxw1aSpMYMW0mSGtvkwjYiDoiI1bNdjumKiD+PiL+f7XL0iojHRURGxNzZLsuw1PXZvf59RkS8Z5Jpm2yXiDgqIi4a9nxHwSgdgxFxV0Q8fsBp1+0XQ1r2cyLiJ7UMrxjWfKdY5kP2q94yRMSOEfH1iLgzIk7dGGXalMzqcZmZUw7AkcBy4C7gF8BXgOcO8tnpDsCzgYuBO4Hbgf8H7NUZfwCwusWyh7gOI1/GTlkfByQwd7bLMsR1SmD3TXG7AJcA99Zj7Wbgn4HHzna5ZqMe63IerHVxJ3AV8Nph7xd13NHAN6c5v38D3jrE9f1H4L66rncCPwI+AGw3aBmA99R9JmZhv5iyDuv+/YaNVJ6ROrdN2bKNiOOA/wX8NbAjsAvwceDQqT47XRHxLOAi4F+AnYDdgO8D3xr06nVI5dhsWnnaJB2bmY8AdgceAfzNbBVkBI6F62tdbAu8DfhERPzOLJdp3K7AFRvywUnq9cOZuQ3waOC1wDMp57+HD1iGXYEVWdNmSGXSMExxZbAd5aryVVNcjb2v8/oAOle9lND8v8BNwM+At0wyr28AH+/z/leAT3fnD/w55cr/GuCozrSHACsoV4bXAW/vjHspcDlwG3Ap8OTOuGuAdwE/AH5d//58Tzk+BpxW/34tcGVdztXAm+r7Dwd+xfor8rtqHZwEfKYzr5dTDpLbKFd7e/aU5e21LLcDnwW2quN2AL5UP3dLrbM5fersZODv6t9bAHcDH6mv51FaT9uz/urvNcDPa53+RWc+c4ATgJ8Ca4Dzge17rhz7frZPmeYBpwLX1vX6JjBvJvVRx7+D0uNyPfA6Oi0Y6v7Zerv0WdejqVf5QAB/C9wI3AH8ENh7gs9dQufKH/hT4IrO6ycC/1q3/VXAYfX93WqZ59TXnwBu7HzubODPJtt3e46vdwE31M/Nq/V4K+XYegeTtGwpvVPLah0tA57ds35/BXyrLv8iYIcJ5nNA73JqHb6q87q7redTesLuqMt9H52WVp32GOAnta5Or9tmT8rx8EDdL26bqpVCOR4erPvUXcDD6v60pG6blcAbO9OfBHwe+Ewt32+07ug5l9b3tqHs28f22a96y3AucD+ldXwXcCCDHb+vpxy/X6/vv67uH7cCFwK7DqsOmaBlW8v5l5Rzw43Ap+m06IHnUs7ZtwGrgKPr+y8BvlfrdBVwUuczP6/lHT/en0VP65sN3FeBreq2XFPLtAzYcdJ9Zood6iBgLZM0w3t3EDoHSK3A7wInAlsCj6cc3C/uM5+t64b6vT7jXgv8ojP/tcBHKTv4/pQg+Z06/hfA8+rfjwKeUv/et27EZwBjlIC4BnhY50R6ObCQcnLZFbgH2KaOH6vzfmZnI/82ZUfbv077lN466DnYPlP/fkIt84soQfhOysG5Zacs/045eLen7PjH1HEfAM6on9sCeB59uoyAFwA/7OxQPwW+0xn3/Z4D7hN1vX+XcrGxZx3/VuDbwIJa32cC5w7y2T5lOp2yA+9c6/PZdZ4zqY+DgF8Ce1MC9Rz6hG3r7dJnXY9m/UnxxZTj4JGsPzH17RqmczKihMdXgX+prx9OOaG8FphL2advpt5moZxcnlr/vopyrO3ZGbfvgPvuWuBDddvMAz5IuajbnnJ8/Ki3Hjvl355ykn51LeMR9fX8zvr9tNb1vPr6gxPMa932opxLXk4Jl317Tv7j2/q8OmwN7FXrqjdsv1S3wy6UBsBBvdtr0KHuDwd2Xn+d0uu3FbBPnf8LOvvZ/cAr6rrMm+pc2nn/08Bn+5WzTxkeMg8GO34/Tdm35lF6LFdS9tG5lAC8dFh1yMRh+7q63MdTenP+GTi7jtuVEnZHUI7L+cA+nX3kSbVOn0w5F7yiZ/3mdpazrozMYF8F3kS5sNuaci57KrDtZOs+VTfyfODmzFw7xXQTeTrw6Mw8JTPvy8yrKSfmw/tMuz2lwn7RZ9wvKC26rvdk5q8zcynwZeCw+v79wF4RsW1m3pqZ/1HfXwScmZnfycwHMvNTlGB4Zmeep2Xmqsz8VWZeC/wH8Ad13AuAezLz2wCZ+eXM/GkWSylXPc8bsF7+CPhyZv5rZt5P6SacRwmfblmuz8xbKBt1n876PZZytXl/Zn4j69bvcRmwR0TMB54P/AOwc0Q8gnKCXdoz/cl1vb9P6br/3fr+MZTW6urM/DXlpPGHPV1OE312nYiYQzmg3pqZ19VtcGmd50zq4zDgk5n5o8y8u5ZvQ82kHJO5n9JCeSLlwujKzOy3n69bRkTcTgnSHYA31/dfClyTmZ/MzLWZ+T1Kr9Gr6vilwP4R8Zj6+vP19W6Ubtjvw0D77oPAe+vx9StKHb8/M2/JzFXAaZOU/SXATzLz7FrGc4EfAy/rTPPJzPzPOu/zmbwOd4qI2yitty8Ax9X1foiIGANeWct9T2auAD7VZ34fzMzbMvPnwNemWPbAImIh8BzgXZl5b2ZeDvw98CedyS7LzC9m5oN13Qd1PeX8uCEGOX5Pysy7a5mOAT5Q99G1lNuH+0TErp3pW9ThUcBHM/PqzLwLeDdweC3nkcBXM/Pces5bU+uXzLwkM39Y6/QHlNb9/gMucyb76v2UfNy9nsu+m5l3TLawqcJ2DbDDDPryd6UeLOMDpft3xz7T3ko5yB/bZ9xjKSeeddPWE+u4aymtDSgH3CHAtRGxtN4HHi/L8T1lWdj5HJQr4a5zKFc7UDb4OeMjIuLgiPh2RNxS53UIv3lBMJGdapkByMwH67J37kxzQ+fveyhXewAfoVwBXhQRV0fECf0WUHeO5ZQd7/mUE/GllBNCv7CdaHm7Al/o1NmVlB6IHQf4bNcOlCv+n/YZN5P62ImHbrdr2XAzKceEMvNi4H9TWvY3RsTiiNh2ko+8JTO3o1ypP4rSKoGyLZ7Rsw8fBYyH61LKlf7zKa2sSyjben/gG3V9Btl3b8rMezuvp1PHO/UZfy0bXofXZ+YjKRcLp1Euevt5NKV10i1n7/E83WVPx07ALZl5Z+e93vXuV55B7Ezpmt4Qgxy/q3qm/1hn+lsoPSAzOgYG0LvfXEvZnjtSztP9zhtExDMi4msRcVO9QD2GDTwPd5Y7yLqeTeliPy8iro+ID0fEFpMtbKqwvYzS+nvFJNPcTWlKj3tM5+9VwM8y85GdYZvMPKR3JjU8L2P9VXrXYZSn7sY9queBgV0oV39k5rLMPBT4LeCLlKuR8bK8v6csW9ermXXF6Fnu54ADImIBpYV7DkBEPIzSovgbSj/9I4ELKDtlv/n0up6yU1PnF5Qd6ropPkdm3pmZx2fm4yndasdFxAsnmHwp5eS0L+WewlJKl+Z+lJPxIFYBB/fU21aZOWVZe9xMuafz233GbXB9UHo9FnZe7zLJtM22y1Qy87TMfCqle/MJlPueU33mh5T7jqfXsqwClvZsi0dk5v+oH1lKaaEeUP/+Jj0XVwPsu/Cb9TSdOn5IHXamn1Ed1lbZu4AnTfA1m5so3d8LOu8t7DPdhIvY8NIBtfUZEdt03utd72kvo/ZEHUjpxt8Qgxy/2TP9m3qmn5eZlw6wrJnUYe9+swtle/6ylqnfeQPKOXkJsLBeoJ7BBp6HO8sd5Dx8f2aenJl7UXq+XspDezF+w6Rhm5m3U+63nl6/w7V1RGxRr4w/XCe7HDgkIrav3Vd/1pnFvwN3RsS7ImJeRIxFxN4R8fQJFnkC8JqIeEtEbBMRj4qI91FubJ/cM+3JEbFlRDyvrujn6uujImK72g14B6W1DKX7+ph6JRQR8fCIeEnPwdG7/jdRWgefpFw0XFlHbUm5/3ETsDYiDgZ+v/PRXwLzI2K7CWZ9PvCSiHhhvRo6nnJRM+UOHREvjYjd68n3dspV6oMTTL6UsgOsyMz76rq8oa7LTVMtqzoDeP94N1JEPDoiDh3ws+vUVtVZwEcjYqe6Lzyrnvw3uD7qZ4+OiL0iYmvgvZNM22y7TCYinl73u/EH1e5l4m3W61OUq/uXU+6VPSEiXl2Pwy3qvPcEyMyfULpb/5gSyndQ1vmVrO/JmGrf7ed84N31eFzA+m7tfi6oZTwyIuZGxB9RLjC+NOD6Tqjuw6dSzkm94x6g3Oc7qZ6nnsgUJ78evwQWRMSW429ExNERcc2AZVtF2U8+EBFbRcSTKQ8efWYaZVgnIh4WEU+lNBhupZyDNsR0j98zKNv6v9Xpt4uIfg2gfn6jDicwt9bR+LAFpfv3bRGxW73A+GvKfeq1wD8BB0bEYXWfmh8R+9R5bUPpUbg3Ivaj9ECOu4lynE30TZYN3lcj4vci4klRbl/cQelWnvSYnvKrP5l5KnAc5Ub5TZSrjGMpOwGU5vT3KTfqL6I8oTn+2QcoQbgP5Unkmyn3Mfqe7DLzm5SW13+nXE1fS2mVPbeeSMbdQNkBr6dsiGMy88d13KuBayLiDkqXwlF13suBN1K6826ldMUePdX6U66cDqTThVy7it5COQndStnASzrjf0zZea6O0h3T7aomM6+inBD/rtbJy4CX1ZPJVPagPDRzF6Un4OOZ+bUJpr2Ucs9xvBW7gnKiH7RVC+UJ7CWUbus7KQ9bPGMan+96O+VJ3GWU7qkPUZ6e3eD6yMyvUL6adjFlm148ybQtt8tktqVc7N1K2afXUG4HTKku+2OUZxTupATj4ZR9/wbWP8g0bimwpp78x18H5fmDKffdCZxcy/0zyjF+9iTlXUM55o+v6/lO4KWZefNEn5mms4BdIuJlfcYdSzm3jD9FfS7lYmkQF1OeQr8hIsbLupDyJOqgjqA8lHM95f7yezPzq9P4PMA763G2hvLg0ncpT8jePfnHJjSt4zczv0DZp86r59AfAQcPuKx+ddjP/6FcFI4Pn6Rs17Mp56afUc5Tb65l+jnlVsfxlPPG5ax/LuRPgVPqup3I+p5MMvMe4P2Ur07dFhHd53Nmuq8+hvJMxB2UrvmlTHJcQH2KVZI2NxHxIeAxmfmaDfz8RZQH+q6ccmJpCoatpM1C7TrektJ78nRKN+EbMvOLs1kuCTbB30aWpAlsQ7lvezfldtaplF+j0yyIiLMi4saI+NEE4yMiTouIlRHxg4h4ysYu48Zky1aSNHQR8XzKsyWfzsy9+4w/hHJf9hDKfeSPZeaGPg8y8mzZSpKGLjO/zuTfDz6UEsSZ5ceCHhkR/X5nYbPgD0+PoIhYRPnFK84888ynLlq0aJZLJGkTEVNPMrGTIgbu6jy5/GRh9+S0ODMXT2NxO/PQH9RYXd+b7NfVNlmG7QiqO+z4Tms/v6SNYjpdnT3nKU3BsN1EPHDqkVNPtBkbO37d15ytC+tinW5dnBQzatRt8k4awvM3G7kGr+Ohv/K1gCH8Wtuo8p6tJAkogTDoMARLgD+pTyU/E7g9J/8HHZs0W7aSJGC4ra+IOJfyO907RMRqyk+pbgGQmWdQvgd9COWX3+6h/OvIzZZhK0kCyj9mHZbMPGKK8Qn8zyEucqQZtpIkYKPfs/0vxbCVJAE+xNOSYStJAgzblgxbSRJgN3JLhq0kCbBl25JhK0kChvs0sh7KsJUkAbZsWzJsJUmA92xbMmwlSYAt25YMW0kSYNi2ZNhKkgAfkGrJsJUkAbZsWzJsJUmAD0i1ZNhKkgBbti0ZtpIkwLBtybCVJAF2I7dk2EqSAJ9GbsmwlSQBdiO3ZNhKkgDDtiXDVpIEeM+2JcNWkgTYsm3JsJUkAYZtS4atJAmAOXPsSG7FsJUkARBh2LZi2EqSAFu2LRm2kiTAlm1Lhq0kCYCwZduMYStJAmDOmM8jt2LYSpIAu5FbMmwlSYDdyC0ZtpIkwJZtS4atJAnwqz8tGbaSJMCWbUuGrSQJ8GnklgxbSRLgA1IteRkjSQJKN/Kgw4DzOygiroqIlRFxQp/xu0TE1yLiexHxg4g4ZOgrNSIMW0kSUFq2gw5TzitiDDgdOBjYCzgiIvbqmewvgfMzc1/gcODjQ16lkWHYSpKAobds9wNWZubVmXkfcB5waM80CWxb/94OuH5oKzNivGcrSQKm99WfiFgELOq8tTgzF3de7wys6rxeDTyjZzYnARdFxJuBhwMHTqe8mxLDVpIETO9p5Bqsi6eccHJHAP+YmadGxLOAsyNi78x8cIbzHTmGrSQJGPr3bK8DFnZeL6jvdb0eOAggMy+LiK2AHYAbh1mQUeA9W0kSADFn8GEAy4A9ImK3iNiS8gDUkp5pfg68ECAi9gS2Am4a3hqNDlu2kiRguC3bzFwbEccCFwJjwFmZeUVEnAIsz8wlwPHAJyLibZSHpY7OzBxaIUaIYStJAob/oxaZeQFwQc97J3b+XgE8Z6gLHVGGrSQJgDF/rrEZw1aSBPiPCFoybCVJgL+N3JJhK0kCbNm2ZNhKkgBbti0ZtpIkwJZtS4atJAmAOXPHZrsImy3DVpJU2LJtxrCVJAHes23JsJUkARBz/FGLVgxbSRLgA1ItGbaSpMJu5GYMW0kSAHPGfBq5FcNWkgT4gFRLhq0kqTBsmzFsJUkARPg0ciuGrSQJsBu5JcNWkgRA+IBUM4atJAmwZduSYStJAgzblgxbSRLgL0i1ZNhKkgp/G7kZw1aSBNiN3JJhK0kC/LnGlgxbSRJgy7Ylw1aSVPiAVDOGrSQJsGXbkmErSQIgfBq5GcNWkgT4PduWDFtJEgAx16eRWzFsJUmALduWDFtJEuADUi0ZtpKkwpZtM4atJAmwZduSz3lLkoo5MfgwgIg4KCKuioiVEXHCBNMcFhErIuKKiDhnqOszQmzZSpKA4fYiR8QYcDrwImA1sCwilmTmis40ewDvBp6TmbdGxG8NrwSjxZatJKkYbst2P2BlZl6dmfcB5wGH9kzzRuD0zLwVIDNvHOr6jBDDVpIElJbt4EMsiojlnWFRz+x2BlZ1Xq+u73U9AXhCRHwrIr4dEQe1XL/ZZDeyJKmYRj9yZi4GFs9wiXOBPYADgAXA1yPiSZl52wznO3Js2UqSijnTGKZ2HbCw83pBfa9rNbAkM+/PzJ8B/0kJ382OYStJAso/Ihh0GMAyYI+I2C0itgQOB5b0TPNFSquWiNiB0q189dBWaITYjSxJAob7NHJmro2IY4ELgTHgrMy8IiJOAZZn5pI67vcjYgXwAPCOzFwzvFKMDsNWklQM+UctMvMC4IKe907s/J3AcXXYrBm2kqTCH5BqxrCVJAH+15+WDFtJEgAxZti2YthKkgqzthnDVpJU2I3cjGErSQLM2pYMW0lS4f+zbcawlSQBtmxbMmwlSQCELdtmDFtJUmHYNmPYSpIK+5GbMWwlSYBZ25JhK0kqTNtmDFtJEgDhfzhvxrCVJBU+INVMlH8nqBHmBpI0qBml5QOnHjnw+Wbs+HNM5mmw02AERcSiiFgeEcsXL14828WR9F/FnBh80LTYjTyCMnMxMJ6ytmwlbRw+INWMYbuJeODUI2e7CLNq7Phz1v1tXVgX47p1wb1rZq8go2Cr+TOfhy3WZgxbSVIxZ2y2S7DZMmwlSYUt22YMW0lS4RdtmzFsJUmFLdtmDFtJUuHTyM0YtpKkYo7dyK0YtpKkYsynkVsxbCVJhd3IzRi2kqTCsG3GsJUkFd6zbcawlSQVtmybMWwlSQCE37NtxrCVJBU+jdyMYStJKuxGbsawlSQVPiDVjGErSSps2TbjZYwkqYgYfBhodnFQRFwVESsj4oRJpntlRGREPG1o6zJibNlKkoohPiAVEWPA6cCLgNXAsohYkpkreqbbBngr8J2hLXwE2bKVJBVzYvBhavsBKzPz6sy8DzgPOLTPdH8FfAi4d3grMnoMW0lSEXMGHiJiUUQs7wyLeua2M7Cq83p1fW/94iKeAizMzC83XrNZZzeyJKmYxo9aZOZiYPGGLioi5gAfBY7e0HlsSgxbSVIx3KeRrwMWdl4vqO+N2wbYG7gkynIfAyyJiJdn5vJhFmQUGLaSpGK437NdBuwREbtRQvZw4MjxkZl5O7DD+OuIuAR4++YYtGDYSpLGDTFsM3NtRBwLXAiMAWdl5hURcQqwPDOXDG1hmwDDVpJUxHCfmc3MC4ALet47cYJpDxjqwkeMYStJKvwBqWYMW0lS4c81NmPYSpIKw7YZw1aSVBi2zRi2kqTCsG3GsJUkFYZtM4atJKkwbJsxbCVJhWHbjGErSaoM21YMW0lSMY3/+qPpMWwlSYXdyM0YtpKkyrBtxbCVJBW2bJsxbCVJhWHbjGErSSrM2mYMW0lSMeT/Z6v1DFtJUmE3cjOGrSSpMGybMWwlSYVZ24xhK0kqbNk2Y9hKkgofkGrGsJUkFbZsmzFsJUmFYduMfQaSJDVmy1aSVNiybcawlSQVhm0zhq0kqfBp5GYMW0lSYcu2GcNWklTYsm3GsJUkVbZsWzFsJUmF3cjNGLaSpMJu5GYMW0lSYdg2Y9hKkirDthVrVpJURAw+DDS7OCgiroqIlRFxQp/xx0XEioj4QUT8W0TsOvR1GhGGrSSpGGLYRsQYcDpwMLAXcERE7NUz2feAp2Xmk4HPAx8e8hqNDMNWklTFNIYp7QeszMyrM/M+4Dzg0O4Emfm1zLynvvw2sGAIKzGSDFtJUjFnbOAhIhZFxPLOsKhnbjsDqzqvV9f3JvJ64CvDXqVR4QNSkqRq8O/ZZuZiYPFQlhrxx8DTgP2HMb9RZNhKkorhfvXnOmBh5/WC+t5DFxlxIPAXwP6Z+ethFmCUGLaSJABiuL8gtQzYIyJ2o4Ts4cCRPcvbFzgTOCgzbxzmwkeN92wlSdXwHpDKzLXAscCFwJXA+Zl5RUScEhEvr5N9BHgE8LmIuDwilgx3fUaHLVtJUjHkX5DKzAuAC3reO7Hz94FDXeAIM2wlSYU/19iMYStJKgzbZgxbSVLlv9hrxbCVJBX+P9tmDFtJUmE3cjOGrSSpsmXbimErSSpibLZLsNkybCVJhfdsmzFsJUmFYduMYStJqnxAqhXDVpJU2LJtxrCVJBV+9acZw1aSVNmybcWwlSQVdiM3Y9hKkiq7kVsxbCVJhS3bZgxbSVJl2LZi2EqSCp9GbsawlSQVdiM3Y9hKkirDthXDVpJU2LJtxrCVJFXes23FsJUkFbZsmzFsJUmVLdtWDFtJEgBhy7YZw1aSVBm2rRi2kqTClm0zhq0kqTJsWzFsJUlFjM12CTZbhq0kqbAbuRnDVpJUGbatGLaSpMKWbTOGrSSpMmxbMWwlSYUt22YMW0lS4dPIzfhDmJKkKqYxDDC3iIMi4qqIWBkRJ/QZ/7CI+Gwd/52IeNxw1mP0GLaSpCJi8GHKWcUYcDpwMLAXcERE7NUz2euBWzNzd+BvgQ8NeY1GRmTmbJdBk3MDSRrUzG663rtm8PPNVvMnXVZEPAs4KTNfXF+/GyAzP9CZ5sI6zWURMRe4AXh0bobBZMt2BEXEoohYXofPML2+nc12iIg3zXYZRmWwLqyLCepiETOx1fwYdOg5Ty3vs+ydgVWd16vre32nycy1wO3A/Bmtw4gybEdQZi7OzKdl5tOAPWe7PCNkZieSzYt1sZ51sd5Gq4vueaoOizfWsjdFhq0kqYXrgIWd1wvqe32nqd3I2wFrNkrpNjLDVpLUwjJgj4jYLSK2BA4HlvRMswR4Tf37D4GLN8f7teD3bDcFds2sZ12sZ12sZ12sNzJ1kZlrI+JY4EJgDDgrM6+IiFOA5Zm5BPgH4OyIWAncQgnkzZJPI0uS1JjdyJIkNWbYSpLUmGErSVJjhq0kSY0ZtpIkNWbYSpLUmGErSVJj/x9fNmtAvCcDoQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,:,0],'Cue Observations when condition is Reward on Right, for Different Locations')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,:,1],'Cue Observations when condition is Reward on Left, for Different Locations')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final column on the right side of these matrices represents the distribution over cue observations, conditioned on the agent being in `CUE LOCATION` and the appropriate Reward Condition. This demonstrates that cue observations are uninformative / lacking epistemic value for the agent, _unless_ they are in `CUE LOCATION.`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can inspect the agent's final beliefs about the reward condition characterizing the 'trial,' having undergone 10 timesteps of active inference." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(qx[1],\"Final posterior beliefs about reward condition\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.8 ('base')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "70b7ceca5df5387258d861d4588082cea9500e731be001548c95afd8cd8c3af8" } } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: docs/notebooks/using_the_agent_class.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 2: the `Agent` API\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/using_the_agent_class.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This tutorial introduces the `Agent` class, the main API offered by `pymdp` that allows you to abstract away all the mathematical nuances involved in running active inference processes. All you have to do is build a generative model in terms of `A`, `B`, `C`, and `D` arrays, plug them into the `Agent()` constructor, and then start running active inference processes using the desired functions of the `Agent` class, like `self.infer_states()` and `self.infer_policies()`. \n", "\n", "We demonstrate the use of the `Agent` class by building an active inference agent to play a simple explore/exploit task, what we call the \"epistemic 2-armed bandit\". The task structure is identical to the \"explore/exploit\" task described in Smith et al. (2022): [\"A Step-by-Step Tutorial on Active Inference Modelling and its Application to Empirical Data\"](https://www.sciencedirect.com/science/article/pii/S0022249621000973). The task is a modified version of a classic multi-armed bandit problem, with particular changes that make it well suited to demonstrating the information-availing nature of active inference in discrete state spaces." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "hk0kXw1RRmTf" }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "id": "iSS6oO3RWrwp" }, "source": [ "### Define some auxiliary functions\n", "\n", "Here are some plotting functions that will come in handy throughout the tutorial." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "Y0QiIF8SWxot" }, "outputs": [], "source": [ "def plot_likelihood(matrix, title_str = \"Likelihood distribution (A)\"):\n", " \"\"\"\n", " Plots a 2-D likelihood matrix as a heatmap\n", " \"\"\"\n", "\n", " if not np.isclose(matrix.sum(axis=0), 1.0).all():\n", " raise ValueError(\"Distribution not column-normalized! Please normalize (ensure matrix.sum(axis=0) == 1.0 for all columns)\")\n", " \n", " plt.figure(figsize = (6,6))\n", " sns.heatmap(matrix, cmap = 'gray', cbar = False, vmin = 0.0, vmax = 1.0)\n", " plt.title(title_str)\n", " plt.show()\n", "\n", "\n", "def plot_beliefs(belief_dist, title_str=\"\"):\n", " \"\"\"\n", " Plot a categorical distribution or belief distribution, stored in the 1-D numpy vector `belief_dist`\n", " \"\"\"\n", "\n", " if not np.isclose(belief_dist.sum(), 1.0):\n", " raise ValueError(\"Distribution not normalized! Please normalize\")\n", "\n", " plt.grid(zorder=0)\n", " plt.bar(range(belief_dist.shape[0]), belief_dist, color='r', zorder=3)\n", " plt.xticks(range(belief_dist.shape[0]))\n", " plt.title(title_str)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "qknzxudf593_" }, "source": [ "## **More complex generative models**\n", "\n", "In this notebook we will build a more complicated generative model, with the following goals in mind:\n", "\n", "1. Demonstrate the unique behavior of active inference agents, as opposed to other agent-based approaches to solving POMDPs (e.g. utility-maximization / reinforcement learning)\n", "\n", "2. Provide a task example that is more relevant to decision-making research and computational psychiatry.\n", "\n", "3. Take advantage of the functionalities of `pymdp`, especially the `Agent()` class, to abstract away all the mathematical operations involved with inference and planning under active inference.\n", "\n", "Before we dive into specifying this generative model, we need to talk about _observation modalities_ and _hidden state factors_...\n" ] }, { "cell_type": "markdown", "metadata": { "id": "2YQ8gQrdkFE4" }, "source": [ "The data structure we use in `pymdp` to represent different hidden state factors and observation modalities is the `object array` (referred to in other contexts as 'arrays of arrays' or 'jagged/ragged arrays').\n", "\n", "They are no different than standard numpy `ndarrays` (they can arbitrarily multidimensional shape), except for the fact that their contents are unrestricted in terms of type. Their `dtype` is `object`, which means that their elements can be any kind of Python data structure -- including other arrays!\n", "\n", "In case you're coming from a MATLAB background: these object arrays are the equivalent of cell arrays. \n", "\n", "In `pymdp`, we represent a multi-factor $\\mathbf{B}$ array as an object array which has as many elements as there are hidden state factors. Therefore, each element `B[i]` of the object array contains the `B` matrix for hidden state factor `i`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "LE3k-jsQKAt3" }, "outputs": [], "source": [ "from pymdp import utils" ] }, { "cell_type": "markdown", "metadata": { "id": "Mk0dbpXibpP_" }, "source": [ "## **Explore/exploit task with a epistemic two-armed bandit**\n", "\n", "Now we're going to build a generative model for an active inference agent playing a two-armed bandit task. The [multi-armed bandit](https://en.wikipedia.org/wiki/Multi-armed_bandit) (or MAB) is a classic decision-making task that captures the core features of the the \"explore/exploit tradeoff\". The multi-armed bandit formulation is ubiquitous across problem spaces that require sequential decision-making under uncertainty -- this includes disciplines ranging from economics, neuroscience, machine learning, engineering all the way to advertising.\n", "\n", "In the standard MAB problem formulation, an agent has must choose between mutually-exclusive alternatives (also known as 'arms') in order to maximize reward over time. The probability of reward depends on which arm the agent chooses. A common real-world analogy for a MAB problem is imagining a special slot machine with three possible levers to pull (rather than the usual one), where playing each lever has different probabilities of payoff (e.g. getting a winning combination of symbols or bonus). In fact, the 'standard' slot machine, which usually only only one lever, was historically referred to as a 'one-armed bandit' -- this was the direct ancestor of the name for the generic machine learning / decision-making problem class, the MAB. \n", "\n", "Crucially, MAB problems are interesting and difficult because in general, the reward statistics of each arm are unknown or only partially known. In a probabilistic or Bayesian context, an agent must therefore act based on _beliefs_ about the reward statistics, since they don't have perfect access to this information. \n", "\n", "The inherent partial-observability of the ask creates a conflict between **exploitation** or choosing the arm that is _currently believed_ to be most rewarding, and **exploration** or gathering information about the remaining arms, in the hopes of discovering a potentially more rewarding option.\n", "\n", "The fact that expected reward or utility is contextualized by _beliefs_ -- i.e. which arm is currently thought to be the most rewarding -- motivates the use of active inference in this context. This is because the key objective function for action-selection, the expected free energy $\\mathbf{G}$, depends on the agent's beliefs about the world. And not only that, but expected free energy balances the desire to maximize rewards with the drive to resolve uncertainty about unknown parts of the agent's model. The more accurate the agent's beliefs are, the more faithfully decision-making can be guided by maximizing expected utility or rewards.\n", "\n", "#### **MAB with an epistemic twist**\n", "\n", "In the MAB formulation we'll be exploring in this tutorial, the agent must choose to play among two possible arms, each of which has unknown reward statistics. These reward statistics take the form of Bernoulli distributions over two possible reward outcomes: \"Loss\" and \"Reward\". However, one of the arms has probability $p$ of yielding \"Reward\"\" and probabiliity $(1-p)$ of yielding \"Loss\". The other arm has swapped statistics. In this example, agent knows that the bandit has this general reward structure, except they don't know *which* of the two arms is the rewarding one (the arm where reward probability is $p$, assuming $p \\in [0.5, 1]$).\n", "\n", "However, we introduce an additional feature in the environment, that induces an explicit trade-off in decision-making between exploration (information-seeking) and exploitation (reward-seeking). In this special \"epistemic bandit\" problem, there is an additional action available to the agent, besides playing the two arms. We call this third action \"Get Hint\", and allows the agent to acquire information reveals (potentially probabilistically) which arm is the more rewarding one. There is a trade-off here, because by choosing to acquire the hint, the agent forgoes the possibility of playing an arm and thus the possibility of getting a reward at that moment. The mutual exclusivity of hint-acquisition and arm-playing imbues the system with an explore/exploit trade-off, which active inference is particularly equipped to handle, when compared to simple reinforcement learning schemes (e.g. epsilon-greedy reward maximization).\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "WYTRxlxx4iD0" }, "source": [ "---\n", "\n", "Specify the dimensionalities of the hidden state factors, the control factors, and the observation modalities" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "vOEYkFPt4gbC" }, "outputs": [], "source": [ "context_names = ['Left-Better', 'Right-Better']\n", "choice_names = ['Start', 'Hint', 'Left Arm', 'Right Arm']\n", "\n", "\"\"\" Define `num_states` and `num_factors` below \"\"\"\n", "num_states = [len(context_names), len(choice_names)]\n", "num_factors = len(num_states)\n", "\n", "context_action_names = ['Do-nothing']\n", "choice_action_names = ['Move-start', 'Get-hint', 'Play-left', 'Play-right']\n", "\n", "\"\"\" Define `num_controls` below \"\"\"\n", "num_controls = [len(context_action_names), len(choice_action_names)]\n", "\n", "hint_obs_names = ['Null', 'Hint-left', 'Hint-right']\n", "reward_obs_names = ['Null', 'Loss', 'Reward']\n", "choice_obs_names = ['Start', 'Hint', 'Left Arm', 'Right Arm']\n", "\n", "\"\"\" Define `num_obs` and `num_modalities` below \"\"\"\n", "num_obs = [len(hint_obs_names), len(reward_obs_names), len(choice_obs_names)]\n", "num_modalities = len(num_obs)" ] }, { "cell_type": "markdown", "metadata": { "id": "k4Tca2bJ4o0z" }, "source": [ "### The `A` array\n", "---\n", "\n", "**Note**: Unlike in [Tutorial 1: Active inference from scratch](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/active_inference_from_scratch.html), here we we will be building a more complex generative model more than one hidden state factor and observation modality. This leads to accordingly higher-dimensional `A` and `B` arrays. See [pymdp fundamentals](https://pymdp-rtd.readthedocs.io/en/latest/notebooks/pymdp_fundamentals.html) for more details on how we specify these high-dimensional arrays in `NumPy`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "zQsDxB8v6bvF" }, "outputs": [], "source": [ "\"\"\" Generate the A array \"\"\"\n", "A = utils.obj_array( num_modalities )" ] }, { "cell_type": "markdown", "metadata": { "id": "9Vmy_Z1N6poY" }, "source": [ "Fill out the hint modality, a sub-array of `A` which we'll call `A_hint`\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "daovgh4A6m5c" }, "outputs": [], "source": [ "p_hint = 0.7 # accuracy of the hint, according to the agent's generative model (how much does the agent trust the hint?)\n", "\n", "A_hint = np.zeros( (len(hint_obs_names), len(context_names), len(choice_names)) )\n", "\n", "for choice_id, choice_name in enumerate(choice_names):\n", "\n", " if choice_name == 'Start':\n", "\n", " A_hint[0,:,choice_id] = 1.0\n", " \n", " elif choice_name == 'Hint':\n", "\n", " A_hint[1:,:,choice_id] = np.array([[p_hint, 1.0 - p_hint],\n", " [1.0 - p_hint, p_hint]])\n", " elif choice_name == 'Left Arm':\n", "\n", " A_hint[0,:,choice_id] = 1.0\n", " \n", " elif choice_name == 'Right Arm':\n", "\n", " A_hint[0,:,choice_id] = 1.0\n", " \n", "A[0] = A_hint" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "zIWcFelA7RqY" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A[0][:,:,1], title_str = \"Probability of the two hint types, for the two game states\")" ] }, { "cell_type": "markdown", "metadata": { "id": "dnVJO-Nn7zY4" }, "source": [ "Fill out the reward modality, a sub-array of `A` which we'll call `A_rew`\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "fVnKm0zU8Ng3" }, "outputs": [], "source": [ "p_reward = 0.8 # probability of getting a rewarding outcome, if you are sampling the more rewarding bandit\n", "\n", "A_reward = np.zeros((len(reward_obs_names), len(context_names), len(choice_names)))\n", "\n", "for choice_id, choice_name in enumerate(choice_names):\n", "\n", " if choice_name == 'Start':\n", "\n", " A_reward[0,:,choice_id] = 1.0\n", " \n", " elif choice_name == 'Hint':\n", "\n", " A_reward[0,:,choice_id] = 1.0\n", " \n", " elif choice_name == 'Left Arm':\n", "\n", " A_reward[1:,:,choice_id] = np.array([ [1.0-p_reward, p_reward], \n", " [p_reward, 1.0-p_reward]])\n", " elif choice_name == 'Right Arm':\n", "\n", " A_reward[1:, :, choice_id] = np.array([[ p_reward, 1.0- p_reward], \n", " [1- p_reward, p_reward]])\n", " \n", "A[1] = A_reward" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "CWKQSusN9Jzk" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A[1][:,:,2], 'Payoff structure if playing the Left Arm, for the two contexts')" ] }, { "cell_type": "markdown", "metadata": { "id": "g62Zjwg0-iot" }, "source": [ "Fill out the choice observation modality, a sub-array of `A` which we'll call `A_choice`\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "VHdgBVSm-mOL" }, "outputs": [], "source": [ "A_choice = np.zeros((len(choice_obs_names), len(context_names), len(choice_names)))\n", "\n", "for choice_id in range(len(choice_names)):\n", "\n", " A_choice[choice_id, :, choice_id] = 1.0\n", "\n", "A[2] = A_choice" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "id": "2O5QpoC8Uc8j" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\"\"\" Condition on context (first hidden state factor) and display the remaining indices (outcome and choice state) \"\"\"\n", "\n", "plot_likelihood(A[2][:,0,:], \"Mapping between sensed states and true states\")" ] }, { "cell_type": "markdown", "metadata": { "id": "FhP5apgR-7zN" }, "source": [ "### The `B` array" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "JSiiIJdu4n9b" }, "outputs": [], "source": [ "B = utils.obj_array(num_factors)" ] }, { "cell_type": "markdown", "metadata": { "id": "_b7Fyz0T59e0" }, "source": [ " Fill out the context state factor dynamics, a sub-array of `B` which we'll call `B_context`\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "lVtIXiyq6EHo" }, "outputs": [], "source": [ "B_context = np.zeros( (len(context_names), len(context_names), len(context_action_names)) )\n", "\n", "B_context[:,:,0] = np.eye(len(context_names))\n", "\n", "B[0] = B_context" ] }, { "cell_type": "markdown", "metadata": { "id": "FzDc6PLG5Mof" }, "source": [ "Fill out the choice factor dynamics, a sub-array of `B` which we'll call `B_choice`\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "id": "--5HyEYt42Q8" }, "outputs": [], "source": [ "B_choice = np.zeros( (len(choice_names), len(choice_names), len(choice_action_names)) )\n", "\n", "for choice_i in range(len(choice_names)):\n", " \n", " B_choice[choice_i, :, choice_i] = 1.0\n", "\n", "B[1] = B_choice" ] }, { "cell_type": "markdown", "metadata": { "id": "ll-mBL_2_McK" }, "source": [ "### The `C` vectors" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "id": "ib54P_VFvjk0" }, "outputs": [], "source": [ "\"\"\" Explain `obj_array_zeros` and how you don't have to populate them necessarily \"\"\"\n", "C = utils.obj_array_zeros(num_obs)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "id": "4JlKcepO_KgA" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pymdp.maths import softmax\n", "\n", "C_reward = np.zeros(len(reward_obs_names))\n", "C_reward[1] = -4.0 \n", "C_reward[2] = 2.0 \n", "\n", "C[1] = C_reward\n", "\n", "plot_beliefs(softmax(C_reward), title_str = \"Prior preferences\")" ] }, { "cell_type": "markdown", "metadata": { "id": "lJXKG-IV_qm1" }, "source": [ "### The `D` vectors" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "MJTKm27fv_Rf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Beliefs about which arm is better: [0.5 0.5]\n", "Beliefs about starting location: [1. 0. 0. 0.]\n" ] } ], "source": [ "D = utils.obj_array(num_factors)\n", "\n", "D_context = np.array([0.5,0.5])\n", "\n", "D[0] = D_context\n", "\n", "D_choice = np.zeros(len(choice_names))\n", "\n", "D_choice[choice_names.index(\"Start\")] = 1.0\n", "\n", "D[1] = D_choice\n", "\n", "print(f'Beliefs about which arm is better: {D[0]}')\n", "print(f'Beliefs about starting location: {D[1]}')" ] }, { "cell_type": "markdown", "metadata": { "id": "fP7NySzAhWgf" }, "source": [ "## **Constructing an `Agent`**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "id": "ls9VoZX__0Vp" }, "outputs": [], "source": [ "from pymdp.agent import Agent\n", "\n", "my_agent = Agent(A = A, B = B, C = C, D = D)" ] }, { "cell_type": "markdown", "metadata": { "id": "4Xu-ZVZBh_wH" }, "source": [ "Define a class for the 2-armed bandit environment (AKA the _generative process_)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "id": "LjxoLs67AXwR" }, "outputs": [], "source": [ "class TwoArmedBandit(object):\n", "\n", " def __init__(self, context = None, p_hint = 1.0, p_reward = 0.8):\n", "\n", " self.context_names = [\"Left-Better\", \"Right-Better\"]\n", "\n", " if context is None:\n", " self.context = self.context_names[utils.sample(np.array([0.5, 0.5]))] # randomly sample which bandit arm is better (Left or Right)\n", " else:\n", " self.context = context\n", "\n", " self.p_hint = p_hint\n", " self.p_reward = p_reward\n", "\n", " self.reward_obs_names = ['Null', 'Loss', 'Reward']\n", " self.hint_obs_names = ['Null', 'Hint-left', 'Hint-right']\n", "\n", " def step(self, action):\n", "\n", " if action == \"Move-start\":\n", " observed_hint = \"Null\"\n", " observed_reward = \"Null\"\n", " observed_choice = \"Start\"\n", " elif action == \"Get-hint\":\n", " if self.context == \"Left-Better\":\n", " observed_hint = self.hint_obs_names[utils.sample(np.array([0.0, self.p_hint, 1.0 - self.p_hint]))]\n", " elif self.context == \"Right-Better\":\n", " observed_hint = self.hint_obs_names[utils.sample(np.array([0.0, 1.0 - self.p_hint, self.p_hint]))]\n", " observed_reward = \"Null\"\n", " observed_choice = \"Hint\"\n", " elif action == \"Play-left\":\n", " observed_hint = \"Null\"\n", " observed_choice = \"Left Arm\"\n", " if self.context == \"Left-Better\":\n", " observed_reward = self.reward_obs_names[utils.sample(np.array([0.0, 1.0 - self.p_reward, self.p_reward]))]\n", " elif self.context == \"Right-Better\":\n", " observed_reward = self.reward_obs_names[utils.sample(np.array([0.0, self.p_reward, 1.0 - self.p_reward]))]\n", " elif action == \"Play-right\":\n", " observed_hint = \"Null\"\n", " observed_choice = \"Right Arm\"\n", " if self.context == \"Right-Better\":\n", " observed_reward = self.reward_obs_names[utils.sample(np.array([0.0, 1.0 - self.p_reward, self.p_reward]))]\n", " elif self.context == \"Left-Better\":\n", " observed_reward = self.reward_obs_names[utils.sample(np.array([0.0, self.p_reward, 1.0 - self.p_reward]))]\n", " \n", " obs = [observed_hint, observed_reward, observed_choice]\n", "\n", " return obs\n", " " ] }, { "cell_type": "markdown", "metadata": { "id": "h6IeX_BlhmBy" }, "source": [ "Now we'll write a function that will take the agent, the environment, and a time length and run the active inference loop" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "In-AoaGQDdQH" }, "outputs": [], "source": [ "def run_active_inference_loop(my_agent, my_env, T = 5):\n", "\n", " \"\"\" Initialize the first observation \"\"\"\n", " obs_label = [\"Null\", \"Null\", \"Start\"] # agent observes itself seeing a `Null` hint, getting a `Null` reward, and seeing itself in the `Start` location\n", " obs = [hint_obs_names.index(obs_label[0]), reward_obs_names.index(obs_label[1]), choice_obs_names.index(obs_label[2])]\n", " \n", " for t in range(T):\n", " qs = my_agent.infer_states(obs)\n", " plot_beliefs(qs[0], title_str = f\"Beliefs about the context at time {t}\")\n", "\n", " q_pi, efe = my_agent.infer_policies()\n", " chosen_action_id = my_agent.sample_action()\n", "\n", " movement_id = int(chosen_action_id[1])\n", "\n", " choice_action = choice_action_names[movement_id]\n", "\n", " obs_label = my_env.step(choice_action)\n", "\n", " obs = [hint_obs_names.index(obs_label[0]), reward_obs_names.index(obs_label[1]), choice_obs_names.index(obs_label[2])]\n", "\n", " print(f'Action at time {t}: {choice_action}')\n", " print(f'Reward at time {t}: {obs_label[1]}')\n" ] }, { "cell_type": "markdown", "metadata": { "id": "gYeg73orwtHC" }, "source": [ "Now all we have to do is define the two-armed bandit environment, choose the length of the simulation, and run the function we wrote above.\n", "\n", "\n", "* Try playing with the hint accuracy and/or reward statistics of the environment - remember this is _different_ than the agent's representation of the reward statistics (i.e. the agent's generative model, e.g. the A or B matrices).\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "Vy7OXyo8wvY0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Context: Right-Better\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 0: Get-hint\n", "Reward at time 0: Null\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 1: Get-hint\n", "Reward at time 1: Null\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 2: Play-right\n", "Reward at time 2: Reward\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAATj0lEQVR4nO3dfbRldX3f8fcHhgcFhMTRqQwjEJlaB7XB3oBZ2nqNpAGbMGblQWjSClKnrpbULJ9CEktZJDE1JdWY0OBoWKSiQ9C2rrHBTlcbr6xEpcgCrAOdrhGNM6ASEZCLUoJ8+8fek3XmzLn3nBnOnXvnN+/XWmfNfvidvb9nn70/Z5/fvvtMqgpJ0qHviOUuQJI0HQa6JDXCQJekRhjoktQIA12SGmGgS1IjDPRDTJLZJLsHxrcnmZ3wuT+dZFeS+SRnTame05JUklXTWN7TNbx9NH1Jfi3Jh5a7Du3LQF8GSb6a5Ht9sD6U5E+TrDuQZVXVmVU1N2Hzq4HLqur4qrrjQNZ3MCW5PslvjmlTSc44WDVNwzRrfrrL6vfFcxeZv88HZFW9u6r+2YGucz9qW53kL5I8mOThJJ9L8oqlXu+hzEBfPj9VVccDzwO+Cfz+QVjnqcD2g7AeaRrmgTcCzwF+AHgP8MmV8m1wJTLQl1lVPQ58HNiwZ1qSY5JcneRrSb6Z5Nokzxj1/MEzrCRHJLk8yZf7s5qbkvxgv7x54EjgriRf7tv/SpL7kjyaZEeS1yywjn+U5I4k3+m7bK4c0eyNSe5P8vUkbx96Le/r593fDx/Tz7s4yZ8PrauSnJFkE/ALwDv7bzKfHFHXLf3gXX2b1w/Me1uSB/p6LjmQbdu3f1OSe/ptdHeSl/XTX5Rkrj9z3J7kgoHnXJ/kmv6b16NJbk3ygsVqTvKTSe7sl/fZJC/tp78+yVeSPKsfPz/JN5I8Z7HXP1DLC5L8Wb8/fCvJR5Kc1M/7MPB8upCcT/LOoeceB3wKOLmfP5/k5CRXJrmhb7Ony+2Sft94KMmbk/xIki/2r+cPhpb7xn6bPpRkW5JTR237qnq8qnZU1VNAgO/TBfsPLvR+HfaqysdBfgBfBc7th58J/DHwHwfmvxfYSrfjngB8Evjtft4ssHuBZb0F+DxwCnAM8AFgy0DbAs7oh18I7AJO7sdPA16wQL2zwEvoTgBeSveN4nUDzytgC3Bc3+6vBmq6qq/puXRnWp8FfqOfdzHw50PrGqzxeuA3x2zLv2k/UOuT/XqPAl4LfBf4gXHbdsSyfw64D/gRukA5g+5bzlHATuDXgKOBHwMeBV44UPeDwNnAKuAjwI2L1HwW8ABwDt2H7hv69/WYfv5H+mU+G7gf+MmFljXiNZwB/Hi/PzwHuAV436j9Z5H3fvfQtCuBG4be/2uBY4F/CDwOfKJ/z9f2r+1VffuN/bZ7Ub9t3gV8dsx7/EXgiX49H1zu43clP5a9gMPx0R9E88DDwF/3B+lL+nkBHmMgXIEfBb7SD+91gLF3oN8DvGZg3vP65a/qxwfD8oz+QDsXOGo/638f8N5+eM8B/XcG5v8O8Ef98JeB1w7M+wngq/3wxSxNoH9vz2vupz0AvHzcth2x7G3AW0ZM//vAN4AjBqZtAa4cqPtDA/NeC/yfRWr+Q/oPuYFpOwZC8CTga8D/Bj6w2Ouf4L17HXDHqP1ngfZ77W/9tCvZN9DXDsx/EHj9wPh/An65H/4UcOnAvCPoPnBPHVP3scBFwBsO5Jg7XB72RS2f11XV/0hyJN1Zy2eSbACeojtrvz3JnrahO3Mb51TgvyR5amDa94E1dGeaf6Oqdib5ZbqD88wk24C3VtX9wwtNcg7wb4EX052RHgN8bKjZroHhv6Q7Uwc4uR8fnHfyBK/l6Xiwqp4cGP8ucDzdGer+bNt1dB9Iw04GdlXXFbDHX9Kdje7xjRHrX8ipwBuS/NLAtKP79VBVDyf5GPBW4GcWWc4+kqwBfo/uQ+gEugB9aH+WMaFvDgx/b8T4ntd/KvB7SX53sEy6bTe4n+yluq7JLX1XzZ1Vddd0ym6LfejLrKq+X1X/mS54Xwl8i+4AOLOqTuofJ1Z3AXWcXcD5A887qaqOrar7RjWuqo9W1SvpDrKiu+g0ykfpuinWVdWJdF+vM9Rm8K90nk/3rYP+31MXmPcYXcACkORvDZe4QD0Han+37S7gBSOm3w+sSzJ4/DyfoQ/N/bAL+K2h9+2ZVbUFIMkP010c3AK8fz+X/W667fiSqnoW8Ivs/d6N28bTfg92Af986LU+o6o+O+HzjwJ+aMo1NcNAX2bpbKS72HNPf9b3QeC9SZ7bt1mb5CcmWNy1wG/tucjUXzjbuMB6X5jkx/oLlI/TBd1To9rSndl9u6oeT3I28I9HtPnXSZ6Z5EzgEuBP+ulbgHf1tawGrgBu6OfdRfft4IeTHEv3bWHQNxl/8E7SBoAD2LYfAt6e5O/179MZ/ba9le6s+51Jjkp3H8BPATdOUseImj8IvDnJOf16jkt3IfqEfrvcQNdffwmwNsm/WGRZw06g6957JMla4B1jahlV67OTnDjRKxvvWuBX+/2EJCcm+blRDZO8PMkrkxyd5BlJfoXu2+atU6qlPcvd53M4Puj6Lb9Hd6A9CnwJ+IWB+cfSnVndC3yHrm/8X/XzZlm4D/0Iuq/lO/rlfhl490Dbwf7plwL/q2/3beC/0l8gHVHvz9J9HX60b/cH7NuHuonuzPUbwDuHXsv7ga/3j/cDxw7M/3W6M+dddGePgzWuB+6ku9bwiQVqe3O/3IeBnx/ePiO20YLbdpHl7+jfqy8BZ/XTzwQ+AzwC3A389MBzrmeg73/Ee7ZXzf2084Db+mlfp+vSOoHuIu6nBp77d/v3a/1Cyxqq/0zg9r7+O4G3DdWyka5//mHg7Qtsg+vo+sUfpusGunLE+z94zWI3MDswfgPwroHxf0J3PeA7/ft+3QLrfRXdh/6effQzwD9Y7uN3JT/SbzhJ0iHOLhdJaoSBLkmNGBvoSa5Ld8fdlxaYnyTvT7KzvzPsZdMvU5I0ziRn6NfTXbBZyPl0F6/W010Y+8OnX5YkaX+NvbGoqm5JctoiTTbS3bZewOeTnJTkeVX19cWWu3r16jrttMUWq0k99thjHHfccctdhrQg99Hpuf32279VVc8ZNW8ad4quZe+7BHf30/YJ9HQ/uLQJYM2aNVx99dVTWL3m5+c5/vhJ7juSlof76PS8+tWvXvCO2oN6639VbQY2A8zMzNTs7OzBXH2z5ubmcFtqJXMfPTim8Vcu97H3bd+ncOC3QEuSDtA0An0r8E/7v3Z5OfDIuP5zSdL0je1ySbKF7tbl1en+K6p/Q/cDOVTVtcDNdD8PupPu9y0uGb0kSdJSmuSvXC4aM7+Afzm1iiRJB8Q7RSWpEQa6JDXCQJekRhjoktQI/09RaSlk+H/oO7zNLncBK80S/T8UnqFLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDViokBPcl6SHUl2Jrl8xPznJ/l0kjuSfDHJa6dfqiRpMWMDPcmRwDXA+cAG4KIkG4aavQu4qarOAi4E/sO0C5UkLW6SM/SzgZ1VdW9VPQHcCGwcalPAs/rhE4H7p1eiJGkSqyZosxbYNTC+GzhnqM2VwH9P8kvAccC5U6lOkjSxSQJ9EhcB11fV7yb5UeDDSV5cVU8NNkqyCdgEsGbNGubm5qa0+sPb/Py823KFmV3uArSiLdXxOkmg3wesGxg/pZ826FLgPICq+lySY4HVwAODjapqM7AZYGZmpmZnZw+sau1lbm4Ot6V06Fiq43WSPvTbgPVJTk9yNN1Fz61Dbb4GvAYgyYuAY4G/mmahkqTFjQ30qnoSuAzYBtxD99cs25NcleSCvtnbgDcluQvYAlxcVbVURUuS9jVRH3pV3QzcPDTtioHhu4FXTLc0SdL+8E5RSWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpERMFepLzkuxIsjPJ5Qu0+fkkdyfZnuSj0y1TkjTOqnENkhwJXAP8OLAbuC3J1qq6e6DNeuBXgVdU1UNJnrtUBUuSRpvkDP1sYGdV3VtVTwA3AhuH2rwJuKaqHgKoqgemW6YkaZyxZ+jAWmDXwPhu4JyhNn8bIMlfAEcCV1bVfxteUJJNwCaANWvWMDc3dwAla9j8/LzbcoWZXe4CtKIt1fE6SaBPupz1dPvxKcAtSV5SVQ8PNqqqzcBmgJmZmZqdnZ3S6g9vc3NzuC2lQ8dSHa+TdLncB6wbGD+lnzZoN7C1qv66qr4C/F+6gJckHSSTBPptwPokpyc5GrgQ2DrU5hP03zKTrKbrgrl3emVKksYZG+hV9SRwGbANuAe4qaq2J7kqyQV9s23Ag0nuBj4NvKOqHlyqoiVJ+5qoD72qbgZuHpp2xcBwAW/tH5KkZeCdopLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaMVGgJzkvyY4kO5Ncvki7n0lSSWamV6IkaRJjAz3JkcA1wPnABuCiJBtGtDsBeAtw67SLlCSNN8kZ+tnAzqq6t6qeAG4ENo5o9xvAe4DHp1ifJGlCqyZosxbYNTC+GzhnsEGSlwHrqupPk7xjoQUl2QRsAlizZg1zc3P7XbD2NT8/77ZcYWaXuwCtaEt1vE4S6ItKcgTw74GLx7Wtqs3AZoCZmZmanZ19uqsX3c7htpQOHUt1vE7S5XIfsG5g/JR+2h4nAC8G5pJ8FXg5sNULo5J0cE0S6LcB65OcnuRo4EJg656ZVfVIVa2uqtOq6jTg88AFVfWFJalYkjTS2ECvqieBy4BtwD3ATVW1PclVSS5Y6gIlSZOZqA+9qm4Gbh6adsUCbWefflmSpP3lnaKS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGjFRoCc5L8mOJDuTXD5i/luT3J3ki0n+Z5JTp1+qJGkxYwM9yZHANcD5wAbgoiQbhprdAcxU1UuBjwO/M+1CJUmLm+QM/WxgZ1XdW1VPADcCGwcbVNWnq+q7/ejngVOmW6YkaZxVE7RZC+waGN8NnLNI+0uBT42akWQTsAlgzZo1zM3NTValFjU/P++2XGFml7sArWhLdbxOEugTS/KLwAzwqlHzq2ozsBlgZmamZmdnp7n6w9bc3BxuS+nQsVTH6ySBfh+wbmD8lH7aXpKcC/w68Kqq+n/TKU+SNKlJ+tBvA9YnOT3J0cCFwNbBBknOAj4AXFBVD0y/TEnSOGMDvaqeBC4DtgH3ADdV1fYkVyW5oG/274DjgY8luTPJ1gUWJ0laIhP1oVfVzcDNQ9OuGBg+d8p1SZL2k3eKSlIjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqRGrlruAA5IsdwUryuxyF7DSVC13BdKy8AxdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNWKiQE9yXpIdSXYmuXzE/GOS/Ek//9Ykp029UknSosYGepIjgWuA84ENwEVJNgw1uxR4qKrOAN4LvGfahUqSFjfJGfrZwM6qureqngBuBDYOtdkI/HE//HHgNYl3/0jSwTTJnaJrgV0D47uBcxZqU1VPJnkEeDbwrcFGSTYBm/rR+SQ7DqRo7WM1Q9v6sOa5xErkPjro6e2jpy4046De+l9Vm4HNB3Odh4MkX6iqmeWuQ1qI++jBMUmXy33AuoHxU/ppI9skWQWcCDw4jQIlSZOZJNBvA9YnOT3J0cCFwNahNluBN/TDPwv8WZW/kCRJB9PYLpe+T/wyYBtwJHBdVW1PchXwharaCvwR8OEkO4Fv04W+Dh67sbTSuY8eBPFEWpLa4J2iktQIA12SGmGgH8LG/SSDtNySXJfkgSRfWu5aDgcG+iFqwp9kkJbb9cB5y13E4cJAP3RN8pMM0rKqqlvo/vJNB4GBfuga9ZMMa5epFkkrgIEuSY0w0A9dk/wkg6TDiIF+6JrkJxkkHUYM9ENUVT0J7PlJhnuAm6pq+/JWJe0tyRbgc8ALk+xOculy19Qyb/2XpEZ4hi5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiP+P3yQa8+fK0XJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 3: Play-right\n", "Reward at time 3: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 4: Play-right\n", "Reward at time 4: Loss\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 5: Play-right\n", "Reward at time 5: Loss\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 6: Play-right\n", "Reward at time 6: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 7: Play-right\n", "Reward at time 7: Loss\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 8: Play-right\n", "Reward at time 8: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 9: Play-right\n", "Reward at time 9: Reward\n" ] } ], "source": [ "p_hint_env = 1.0 # this is the \"true\" accuracy of the hint - i.e. how often does the hint actually signal which arm is better. REMEMBER: THIS IS INDEPENDENT OF HOW YOU PARAMETERIZE THE A MATRIX FOR THE HINT MODALITY\n", "p_reward_env = 0.7 # this is the \"true\" reward probability - i.e. how often does the better arm actually return a reward, as opposed to a loss. REMEMBER: THIS IS INDEPENDENT OF HOW YOU PARAMETERIZE THE A MATRIX FOR THE REWARD MODALITY\n", "env = TwoArmedBandit(p_hint = p_hint_env, p_reward = p_reward_env)\n", "print(f'Context: {env.context}')\n", "\n", "T = 10\n", "\n", "# my_agent = Agent(A = A, B = B, C = C, D = D) # in case you want to re-define the agent, you can run this again\n", "\n", "run_active_inference_loop(my_agent, env, T = T)" ] }, { "cell_type": "markdown", "metadata": { "id": "scuxk92i3Mef" }, "source": [ "Now let's try manipulating the agent's prior preferences over reward observations ($\\mathbf{C}[1]$) in order to examine the tension between exploration and exploitation." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "id": "B1XpcHlX3Gnj" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Context: Right-Better\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 0: Play-left\n", "Reward at time 0: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 1: Play-left\n", "Reward at time 1: Loss\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 2: Play-left\n", "Reward at time 2: Loss\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWy0lEQVR4nO3dfZQdd33f8ffHAtlgjCEYtlgStoNVggwUJ4tNDhQWMEUmiUUOEOQ8HMyTwmmUkPAUk1AfHychhSaB0CgFQXxMebAwtOWIRlQ9LV44hIdKLoYgu6JCECTxYDA2sIAxgm//uCM6urq7O5Lvalej9+ucezQzv9/OfO/cmc/O/V3dnVQVkqQT3ymLXYAkaTwMdEnqCQNdknrCQJeknjDQJaknDHRJ6gkD/QSTZCrJ/tb8riRTHX/2V5PsSzKT5MIx1XNukkpyr3Gs754a3j8avyR/lOTti12HjmSgL4IkX0rygyZY70jy90lWHcu6quqCqpru2P0vgI1Vdb+q+vSxbO94SnJdkj+dp08lOf941TQO46z5nq6rORYvmaP9iF+QVfW6qnrxsW7zKGo7K8k/JLk9yZ1JPpHkCQu93ROZgb54fqWq7gc8FPg68O+PwzbPAXYdh+1I4zADvBB4MPBA4PXAB5fKu8GlyEBfZFV1F/B+YM2hZUlOTfIXSb6c5OtJ3pLkPqN+vn2FleSUJFcm+UJzVXNDkp9p1jcDLAM+k+QLTf8/THIgyXeT7E7ytFm28UtJPp3kO82QzdUjur0wyVeSfDXJK4eey5uatq8006c2bVck+djQtirJ+Uk2AL8BvLp5J/PBEXV9tJn8TNPnea22VyS5rannBceyb5v+L0lya7OPbkny883yRyaZbq4cdyW5rPUz1yXZ1Lzz+m6STyV5+Fw1J/nlJDc36/t4ksc0y5+X5ItJ7t/MX5rka0kePNfzb9Xy8CQfbo6HbyZ5d5IHNG3vBB7GICRnkrx66GdPBz4EnN20zyQ5O8nVSd7V9Dk05PaC5ti4I8lLkzwuyWeb5/M3Q+t9YbNP70iyPck5o/Z9Vd1VVbur6idAgB8zCPafme31OulVlY/j/AC+BFzSTN8XeAfwH1vtbwS2MjhwzwA+CPx50zYF7J9lXS8DPgmsBE4F3gpc3+pbwPnN9COAfcDZzfy5wMNnqXcKeDSDC4DHMHhH8azWzxVwPXB60+8brZquaWp6CIMrrY8Df9K0XQF8bGhb7RqvA/50nn350/6tWg8227038Ezg+8AD59u3I9b9XOAA8DgGgXI+g3c59wb2AH8ELAeeCnwXeESr7tuBi4B7Ae8GtsxR84XAbcDFDH7pPr95XU9t2t/drPNBwFeAX55tXSOew/nA05vj4cHAR4E3jTp+5njt9w8tuxp419Dr/xbgNOBfAXcBH2he8xXNc3ty039ds+8e2eyb1wIfn+c1/ixwd7Odty32+buUH4tewMn4aE6iGeBO4EfNSfropi3A92iFK/CLwBeb6cNOMA4P9FuBp7XaHtqs/17NfDssz29OtEuAex9l/W8C3thMHzqhf67V/gbg75rpLwDPbLU9A/hSM30FCxPoPzj0nJtltwGPn2/fjlj3duBlI5b/S+BrwCmtZdcDV7fqfnur7ZnA/5mj5v9A80uutWx3KwQfAHwZ+EfgrXM9/w6v3bOAT486fmbpf9jx1iy7miMDfUWr/Xbgea35/wT8fjP9IeBFrbZTGPzCPWeeuk8DLgeefyzn3MnycCxq8Tyrqv5HkmUMrlo+kmQN8BMGV+03JTnUNwyu3OZzDvBfkvyktezHwASDK82fqqo9SX6fwcl5QZLtwMur6ivDK01yMfBvgUcxuCI9FXjfULd9rel/YnClDnB2M99uO7vDc7knbq+qg6357wP3Y3CFejT7dhWDX0jDzgb21WAo4JB/YnA1esjXRmx/NucAz0/yu61ly5vtUFV3Jnkf8HLg2XOs5whJJoC/ZvBL6AwGAXrH0ayjo6+3pn8wYv7Q8z8H+Oskf9kuk8G+ax8nh6nB0OT1zVDNzVX1mfGU3S+OoS+yqvpxVf1nBsH7ROCbDE6AC6rqAc3jzBp8gDqffcClrZ97QFWdVlUHRnWuqvdU1RMZnGTF4EOnUd7DYJhiVVWdyeDtdYb6tP+XzsMYvOug+fecWdq+xyBgAUjyz4ZLnKWeY3W0+3Yf8PARy78CrErSPn8extAvzaOwD/izodftvlV1PUCSxzL4cPB64M1Hue7XMdiPj66q+wO/yeGv3Xz7eNyvwT7gt4ee632q6uMdf/7ewM+OuabeMNAXWQbWMfiw59bmqu9twBuTPKTpsyLJMzqs7i3Anx36kKn54GzdLNt9RJKnNh9Q3sUg6H4yqi+DK7tvVdVdSS4Cfn1En3+T5L5JLgBeALy3WX498NqmlrOAq4B3NW2fYfDu4LFJTmPwbqHt68x/8nbpA8Ax7Nu3A69M8gvN63R+s28/xeCq+9VJ7p3B9wB+BdjSpY4RNb8NeGmSi5vtnJ7BB9FnNPvlXQzG618ArEjyr+dY17AzGAzvfTvJCuBV89QyqtYHJTmz0zOb31uA1zTHCUnOTPLcUR2TPD7JE5MsT3KfJH/I4N3mp8ZUS/8s9pjPyfhgMG75AwYn2neBzwG/0Wo/jcGV1V7gOwzGxn+vaZti9jH0Uxi8Ld/drPcLwOtafdvj048B/lfT71vAf6X5gHREvc9h8Hb4u02/v+HIMdQNDK5cvwa8eui5vBn4avN4M3Baq/2PGVw572Nw9diucTVwM4PPGj4wS20vbdZ7J/Brw/tnxD6add/Osf7dzWv1OeDCZvkFwEeAbwO3AL/a+pnraI39j3jNDqu5WbYW2NEs+yqDIa0zGHyI+6HWz/6L5vVaPdu6huq/ALipqf9m4BVDtaxjMD5/J/DKWfbBtQzGxe9kMAx09YjXv/2ZxX5gqjX/LuC1rfnfYvB5wHea1/3aWbb7ZAa/9A8dox8BnrTY5+9SfqTZcZKkE5xDLpLUEwa6JPWEgS5JPWGgS1JPLNoXi84666w699xzF2vzvfK9732P008/fbHLkGblMTo+N9100zer6sGj2hYt0M8991x27ty5WJvvlenpaaampha7DGlWHqPjk2TWb9Q65CJJPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtST3QK9CRrM7jn5J4kV45of1iSGzO47+Rnkzxz/KVKkuYyb6A3d9TZBFzK4EbGlzd31ml7LXBDVV0IrAf+dtyFSpLm1uUK/SJgT1Xtraq7GfwR/+GbJhRw/2b6TP7/HWkkScdJl2+KruDw+0XuZ3B38rargf/e3BPxdAY3Hj5Ckg0MboTAxMQE09PTR1muRpmZmXFfLjFTT3nKYpewpEwtdgFLzPSNNy7Iesf11f/Lgeuq6i+T/CLwziSPqsNvoktVbQY2A0xOTpZfBR4Pv1YtnVgW6nztMuRygMNvALySI2+G+yLgBoCq+gSD23ydNY4CJUnddAn0HcDqJOclWc7gQ8+tQ32+DDwNIMkjGQT6N8ZZqCRpbvMGelUdBDYC2xncUPeGqtqV5JoklzXdXgG8JMlnGNzl/YryZqWSdFx1GkOvqm3AtqFlV7WmbwGeMN7SJElHw2+KSlJPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST3RKdCTrE2yO8meJFeOaH9jkpubx+eT3Dn2SiVJc5r3jkVJlgGbgKcD+4EdSbY2dykCoKr+oNX/d4ELF6BWSdIculyhXwTsqaq9VXU3sAVYN0f/yxncV1SSdBx1CfQVwL7W/P5m2RGSnAOcB3z4npcmSToanW4SfRTWA++vqh+PakyyAdgAMDExwfT09Jg3f3KamZlxXy4xU4tdgJa0hTpfuwT6AWBVa35ls2yU9cDvzLaiqtoMbAaYnJysqampblVqTtPT07gvpRPHQp2vXYZcdgCrk5yXZDmD0N463CnJzwEPBD4x3hIlSV3MG+hVdRDYCGwHbgVuqKpdSa5Jclmr63pgS1XVwpQqSZpLpzH0qtoGbBtadtXQ/NXjK0uSdLT8pqgk9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPVEp0BPsjbJ7iR7klw5S59fS3JLkl1J3jPeMiVJ85n3FnRJlgGbgKcD+4EdSbZW1S2tPquB1wBPqKo7kjxkoQqWJI3W5Qr9ImBPVe2tqruBLcC6oT4vATZV1R0AVXXbeMuUJM2ny02iVwD7WvP7gYuH+vxzgCT/ACwDrq6q/za8oiQbgA0AExMTTE9PH0PJGjYzM+O+XGKmFrsALWkLdb52CfSu61nN4DheCXw0yaOr6s52p6raDGwGmJycrKmpqTFt/uQ2PT2N+1I6cSzU+dplyOUAsKo1v7JZ1rYf2FpVP6qqLwKfZxDwkqTjpEug7wBWJzkvyXJgPbB1qM8HaN5lJjmLwRDM3vGVKUmaz7yBXlUHgY3AduBW4Iaq2pXkmiSXNd22A7cnuQW4EXhVVd2+UEVLko7UaQy9qrYB24aWXdWaLuDlzUOStAj8pqgk9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPVEp0BPsjbJ7iR7klw5ov2KJN9IcnPzePH4S5UkzWXeW9AlWQZsAp4O7Ad2JNlaVbcMdX1vVW1cgBolSR10uUK/CNhTVXur6m5gC7BuYcuSJB2tLjeJXgHsa83vBy4e0e/ZSZ4EfB74g6raN9whyQZgA8DExATT09NHXbCONDMz475cYqYWuwAtaQt1vnYJ9C4+CFxfVT9M8tvAO4CnDneqqs3AZoDJycmampoa0+ZPbtPT07gvpRPHQp2vXYZcDgCrWvMrm2U/VVW3V9UPm9m3A78wnvIkSV11CfQdwOok5yVZDqwHtrY7JHloa/Yy4NbxlShJ6mLeIZeqOphkI7AdWAZcW1W7klwD7KyqrcDvJbkMOAh8C7hiAWuWJI3QaQy9qrYB24aWXdWafg3wmvGWJkk6Gn5TVJJ6wkCXpJ4w0CWpJwx0SeoJA12SesJAl6SeMNAlqScMdEnqCQNdknrCQJeknjDQJaknDHRJ6gkDXZJ6wkCXpJ4w0CWpJwx0SeoJA12SeqJToCdZm2R3kj1Jrpyj37OTVJLJ8ZUoSepi3kBPsgzYBFwKrAEuT7JmRL8zgJcBnxp3kZKk+XW5Qr8I2FNVe6vqbmALsG5Evz8BXg/cNcb6JEkddblJ9ApgX2t+P3Bxu0OSnwdWVdXfJ3nVbCtKsgHYADAxMcH09PRRF6wjzczMuC+XmKnFLkBL2kKdr10CfU5JTgH+Crhivr5VtRnYDDA5OVlTU1P3dPNicHC4L6UTx0Kdr12GXA4Aq1rzK5tlh5wBPAqYTvIl4PHAVj8YlaTjq0ug7wBWJzkvyXJgPbD1UGNVfbuqzqqqc6vqXOCTwGVVtXNBKpYkjTRvoFfVQWAjsB24FbihqnYluSbJZQtdoCSpm05j6FW1Ddg2tOyqWfpO3fOyJElHy2+KSlJPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtST3QK9CRrk+xOsifJlSPaX5rkH5PcnORjSdaMv1RJ0lzmDfQky4BNwKXAGuDyEYH9nqp6dFU9FngD8FfjLlSSNLcuV+gXAXuqam9V3Q1sAda1O1TVd1qzpwM1vhIlSV10uUn0CmBfa34/cPFwpyS/A7wcWA48ddSKkmwANgBMTEwwPT19lOVqlJmZGfflEjO12AVoSVuo8zVVc19MJ3kOsLaqXtzM/xZwcVVtnKX/rwPPqKrnz7XeycnJ2rlz57FVrcNMT08zNTW12GWoLVnsCrSUzZO7c0lyU1VNjmrrMuRyAFjVml/ZLJvNFuBZnauTJI1Fl0DfAaxOcl6S5cB6YGu7Q5LVrdlfAv7v+EqUJHUx7xh6VR1MshHYDiwDrq2qXUmuAXZW1VZgY5JLgB8BdwBzDrdIksavy4eiVNU2YNvQsqta0y8bc12SpKPkN0UlqScMdEnqCQNdknrCQJeknjDQJaknDHRJ6gkDXZJ6wkCXpJ4w0CWpJwx0SeoJA12SesJAl6SeMNAlqScMdEnqCQNdknrCQJeknjDQJaknOgV6krVJdifZk+TKEe0vT3JLks8m+Z9Jzhl/qZKkucwb6EmWAZuAS4E1wOVJ1gx1+zQwWVWPAd4PvGHchUqS5tblCv0iYE9V7a2qu4EtwLp2h6q6saq+38x+Elg53jIlSfPpcpPoFcC+1vx+4OI5+r8I+NCohiQbgA0AExMTTE9Pd6tyyNRTnnJMP9dXU4tdwBIzfeONi12Cr4nmdKzZN58ugd5Zkt8EJoEnj2qvqs3AZoDJycmampoa5+YlADyutNQt1DHaJdAPAKta8yubZYdJcgnwx8CTq+qH4ylPktRVlzH0HcDqJOclWQ6sB7a2OyS5EHgrcFlV3Tb+MiVJ85k30KvqILAR2A7cCtxQVbuSXJPksqbbvwPuB7wvyc1Jts6yOknSAuk0hl5V24BtQ8uuak1fMua6JElHyW+KSlJPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtST3QK9CRrk+xOsifJlSPan5Tkfyc5mOQ54y9TkjSfeQM9yTJgE3ApsAa4PMmaoW5fBq4A3jPuAiVJ3XS5p+hFwJ6q2guQZAuwDrjlUIeq+lLT9pMFqFGS1EGXQF8B7GvN7wcuPpaNJdkAbACYmJhgenr6WFbD1DH9lE4Wx3pcjdPUYhegJW2hjtEugT42VbUZ2AwwOTlZU1NTx3PzOkl4XGmpW6hjtMuHogeAVa35lc0ySdIS0iXQdwCrk5yXZDmwHti6sGVJko7WvIFeVQeBjcB24FbghqraleSaJJcBJHlckv3Ac4G3Jtm1kEVLko7UaQy9qrYB24aWXdWa3sFgKEaStEj8pqgk9YSBLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BMGuiT1hIEuST1hoEtSTxjoktQTBrok9YSBLkk9YaBLUk8Y6JLUEwa6JPVEp0BPsjbJ7iR7klw5ov3UJO9t2j+V5NyxVypJmtO8gZ5kGbAJuBRYA1yeZM1QtxcBd1TV+cAbgdePu1BJ0ty6XKFfBOypqr1VdTewBVg31Gcd8I5m+v3A05JkfGVKkubT5SbRK4B9rfn9wMWz9amqg0m+DTwI+Ga7U5INwIZmdibJ7mMpWkc4i6F9fVLzWmIp8hhtu2fH6DmzNXQJ9LGpqs3A5uO5zZNBkp1VNbnYdUiz8Rg9ProMuRwAVrXmVzbLRvZJci/gTOD2cRQoSeqmS6DvAFYnOS/JcmA9sHWoz1bg+c30c4APV1WNr0xJ0nzmHXJpxsQ3AtuBZcC1VbUryTXAzqraCvwd8M4ke4BvMQh9HT8OY2mp8xg9DuKFtCT1g98UlaSeMNAlqScM9BPYfH+SQVpsSa5NcluSzy12LScDA/0E1fFPMkiL7Tpg7WIXcbIw0E9cXf4kg7SoquqjDP7nm44DA/3ENepPMqxYpFokLQEGuiT1hIF+4uryJxkknUQM9BNXlz/JIOkkYqCfoKrqIHDoTzLcCtxQVbsWtyrpcEmuBz4BPCLJ/iQvWuya+syv/ktST3iFLkk9YaBLUk8Y6JLUEwa6JPWEgS5JPWGgS1JPGOiS1BP/D7RUmtelY7AbAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 3: Play-right\n", "Reward at time 3: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 4: Play-right\n", "Reward at time 4: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 5: Play-right\n", "Reward at time 5: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 6: Play-right\n", "Reward at time 6: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 7: Play-right\n", "Reward at time 7: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 8: Play-right\n", "Reward at time 8: Reward\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Action at time 9: Play-right\n", "Reward at time 9: Reward\n" ] } ], "source": [ "# change the 'shape' of the agent's reward function\n", "C[1][1] = 0.0 # makes the Loss \"less aversive\" than before (higher prior prior probability assigned to seeing the Loss outcome). This should make the agent less risk-averse / willing to explore both arms, under uncertainty\n", "\n", "my_agent = Agent(A = A, B = B, C = C, D = D) # redefine the agent with the new preferences\n", "env = TwoArmedBandit(p_hint = 0.8, p_reward = 0.8) # re-initialize the environment -- this time, the hint is not always accurate (`p_hint = 0.8`)\n", "print(f'Context: {env.context}')\n", "\n", "run_active_inference_loop(my_agent, env, T = T)" ] } ], "metadata": { "colab": { "collapsed_sections": [ "lu35jiGX4Iae", "0Icnjv8T4fpx" ], "name": "Active Inference with pymdp: Tutorial 2", "provenance": [] }, "kernelspec": { "display_name": "Python 3.7.10 ('pymdp_env')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" } } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: docs/requirements.txt ================================================ # sphinx <4 required by myst-nb v0.12.0 (Feb 2021) # sphinx >=3 required by sphinx-autodoc-typehints v1.11.1 (Oct 2020) # sphinx >=3, <4 # old version of sphinx dependency, based on two comments above # New commit to myst-nb (September 2021) suggests it can work with sphinx >4 (see https://github.com/executablebooks/MyST-NB/commit/9f6fae2da3f1ce3e726320eade079b8e25a878fa) sphinx==4.2.0 sphinx_rtd_theme sphinx-autodoc-typehints==1.11.1 jupyter-sphinx>=0.3.2 myst-nb jinja2==3.0.0 # Packages used for notebook execution matplotlib numpy seaborn . ================================================ FILE: docs-mkdocs/agent.html ================================================ Redirecting...

Redirecting to api/agent/.

================================================ FILE: docs-mkdocs/algos/index.html ================================================ Redirecting...

Redirecting to api/algos/.

================================================ FILE: docs-mkdocs/api/agent.md ================================================ # `pymdp.agent` ::: pymdp.agent options: members: - Agent ================================================ FILE: docs-mkdocs/api/algos.md ================================================ # `pymdp.algos` ::: pymdp.algos options: members: - run_factorized_fpi - run_mmp - run_vmp - run_exact_single_factor_hmm_scan - hmm_filter_scan_colstoch - hmm_smoother_scan_colstoch ================================================ FILE: docs-mkdocs/api/control.md ================================================ # `pymdp.control` ::: pymdp.control options: members: - Policies - construct_policies - sample_action - sample_policy - get_marginals - update_posterior_policies - update_posterior_policies_inductive - compute_expected_state - compute_expected_state_and_Bs - compute_expected_obs - compute_info_gain - compute_expected_utility - calc_negative_pA_info_gain - calc_negative_pB_info_gain - compute_neg_efe_policy - compute_neg_efe_policy_inductive - generate_I_matrix - calc_inductive_value_t ================================================ FILE: docs-mkdocs/api/envs-env.md ================================================ # `pymdp.envs.env` ::: pymdp.envs.env options: members: - make - Env - PymdpEnv ================================================ FILE: docs-mkdocs/api/envs-rollout.md ================================================ # `pymdp.envs.rollout` ::: pymdp.envs.rollout options: members: - infer_and_plan - rollout ================================================ FILE: docs-mkdocs/api/index.md ================================================ # API Reference This reference is auto-generated from modern modules (`pymdp.*`) using mkdocstrings. Legacy modules are intentionally excluded from generated API pages and are documented in the [legacy archive](../legacy/index.md). For end-to-end loop construction, see the dedicated [`rollout()` guide](../guides/rollout-active-inference-loop.md). For environment abstractions, see `pymdp.envs.env` and `pymdp.envs.rollout` in this API section. ================================================ FILE: docs-mkdocs/api/inference.md ================================================ # `pymdp.inference` ::: pymdp.inference options: members: - update_posterior_states - joint_dist_factor - smoothing_ovf - smoothing_exact ================================================ FILE: docs-mkdocs/api/learning.md ================================================ # `pymdp.learning` ::: pymdp.learning options: members: - update_obs_likelihood_dirichlet_m - update_obs_likelihood_dirichlet - update_state_transition_dirichlet_f - update_state_transition_dirichlet ================================================ FILE: docs-mkdocs/api/maths.md ================================================ # `pymdp.maths` ::: pymdp.maths ================================================ FILE: docs-mkdocs/api/planning-mcts.md ================================================ # MCTS Planning ::: pymdp.planning.mcts ================================================ FILE: docs-mkdocs/api/planning-si.md ================================================ # Sophisticated Inference Planning ::: pymdp.planning.si ================================================ FILE: docs-mkdocs/api/utils.md ================================================ # `pymdp.utils` ::: pymdp.utils ================================================ FILE: docs-mkdocs/control.html ================================================ Redirecting...

Redirecting to api/control/.

================================================ FILE: docs-mkdocs/development/release-notes.md ================================================ # Release Notes ## 1.0.0 `pymdp` 1.0.0 is the first major release since the `0.0.7` line. The small `v0.0.7.1` patch was primarily packaging-oriented; the substantive story of this release is that `pymdp` is now JAX-first. The primary docs, examples, testing surface, and supported workflows now center on accelerator-friendly, batched, differentiable active inference, while the previous NumPy/object-array implementation is preserved under `pymdp.legacy`. Alongside the backend transition, this release adds a much richer environment and rollout workflow, upgraded inference and planning APIs, variational free energy diagnostics, probabilistic model-fitting workflows built around `pybefit` and NumPyro, a JAX-first documentation site, and release-grade testing and notebook execution gates. ### Breaking Changes And Migration If you are upgrading from the legacy NumPy backend, start with the [NumPy/legacy to JAX migration guide](../migration/numpy-to-jax.md). - `pymdp.*` now refers to the modern JAX implementation. Legacy NumPy code is still available, but it lives under `pymdp.legacy.*`. - The `Agent` API is now explicitly JAX- and batch-oriented. In particular, `batch_size` replaces the older `apply_batch` naming, and many public surfaces now assume a leading batch axis. - The `Agent`'s policy set is now stored as a dedicated Equinox module rather than a raw ndarray. In practice, `self.policies` is now a structured container, and the underlying policy array lives under `self.policies.policy_arr`. - Policy scoring is now consistently exposed as `neg_efe = -EFE`. In practice, `agent.infer_policies(qs)` returns `(q_pi, neg_efe)`, `rollout()` extras use `info["neg_efe"]` instead of `info["G"]`, and sophisticated-inference planning thresholds use `neg_efe_stop_threshold`. - Observation handling is stricter and more explicit. The older `onehot_obs` naming is now standardized as `categorical_obs`, and environment observations should match the `Agent`'s expected observation format. - Randomness is now explicit in the JAX workflow. Sampling and simulation paths such as `sample_action()`, `rollout()`, and environment `reset`/`step` methods use explicit PRNG keys. - JAX workflows are more functional than mutable. Existing code that assumed in-place stateful updates on `Agent` objects may need to be rewritten around returned values and updated carries. - Validation is stricter in several places. For example, `learn_A=True` now requires `pA`, and model-shape / normalization errors are surfaced earlier. ### Major New Capabilities #### JAX-First Core Library And Utilities - The primary `Agent`, inference, control, learning, and planning APIs are now built around JAX arrays and pytrees rather than legacy object-array conventions. - The core JAX surface is designed to be JIT-friendly and autodiff-compatible, with tighter validation around `Distribution` shapes, normalization, and model structure. - `Agent` methods and related JAX-first library paths are now designed to be differentiable, which enables workflows such as fitting or training learned front ends around `pymdp`-defined POMDPs, including amortized neural encoders. - Generative models now support explicit sparse dependency structure through `A_dependencies` and `B_dependencies`, making it easier to express structured observation models and sparse state-transition graphs without falling back to dense all-to-all coupling. - JAX-native utility helpers now cover common model-construction workflows such as `random_A_array`, `random_B_array`, `make_A_full`, `construct_controllable_B`, and factorized categorical helpers, reducing the need to rely on `legacy.utils`. #### Inference, Control, And Planning - State inference was substantially upgraded. The release includes optimized `infer_states` paths, exact HMM associative-scan inference, corrected message-passing details for MMP/VMP, and better support for interacting `B_dependencies`. - Policy scoring and planning semantics were cleaned up and made more explicit. The release standardizes `neg_efe` naming and improves reliability in parameter-information-gain and inductive policy-scoring paths. - Sophisticated-inference planning is now JIT-friendly, and the planning stack supports richer deliberation and tree-search workflows. - Monte Carlo Tree Search (MCTS) is now part of the sophisticated-inference planning surface, giving users a dedicated planning workflow for more complex sequential search problems. - Canonical variational free energy is now exposed directly as part of the public API through `calc_vfe(...)` and `return_info=True` diagnostic paths in inference. #### Environments And Compiled Rollouts - `pymdp` now has a much clearer JAX-native environment and rollout surface. The `Env` abstraction is closer to gymnax-style workflows and is designed to work directly with compiled active inference loops. - `rollout()` is a new first-class API for compiled active inference loops over environments, making it much easier to express full perception-action rollouts in JAX-native workflows. - `infer_and_plan()` is also a new first-class helper for stepping agents through active inference loops with reusable inference-and-action logic. - These rollout APIs support explicit key flow, updated-agent carries, and learning-aware behavior for online and offline experimental setups. - Environments can now emit categorical observations directly, which aligns better with the rest of the JAX-first API surface. - The release also broadens the environment and demo corpus with updated GridWorld and T-maze workflows, plus the cue-chaining environment and tutorial as a new example of epistemic foraging and sequential information seeking. #### Model Fitting And Probabilistic Inference - `pymdp` now supports probabilistic model-fitting workflows through [`pybefit`](https://github.com/dimarkov/pybefit) and NumPyro-backed inference, making it possible to fit active-inference POMDP parameters to behavioral data such as observed outcomes and action sequences. - The shipped workflow covers both sampling-based and variational approaches. The `fitting_with_pybefit` notebook demonstrates Hamiltonian Monte Carlo via NUTS as well as stochastic variational inference with NumPyro-based guides. - These model-fitting workflows are designed for batched multi-agent settings, which makes it easier to express fitting problems over multiple synthetic or observed subjects in one JAX-native pipeline. - Installation and contributor setup now expose this workflow directly through the `modelfit` extra. ### Docs, Tutorials, And Examples - The documentation stack was rebuilt around MkDocs and Material, replacing the older Sphinx-centered setup for the primary `1.0.0` docs experience. - The docs are now intentionally JAX-first. The landing page, quickstart, migration guide, rollout guide, environment guide, generated API reference, and legacy archive are organized around the modern backend. - The notebook gallery is now a first-class part of the docs site, with refreshed tutorials spanning environments, planning, inference, learning, sparse methods, advanced model construction, neural encoders, and model fitting. - Legacy material is still preserved in the docs under a dedicated archive path for users who need the older NumPy-oriented reference material during migration. ### Packaging, Testing, And Contributor Workflow - The packaging surface now centers on `pyproject.toml` and setuptools-backed builds, with explicit optional-dependency extras for `gpu`, `docs`, `nb`, and `modelfit` workflows. - Notebook execution is now tiered and enforced through manifests: PR CI runs the `test/notebooks/ci_notebooks.txt` tier, while nightly coverage runs the `test/notebooks/nightly_notebooks.txt` tier. - Contributor workflow also improved through notebook sanitation hooks, strict docs builds, unit-test coverage reporting, and `pytest-xdist` support. ### Traceability Appendix This page is intentionally curated rather than chronological. The following rows identify the strongest evidence clusters behind each major section. | Section | Representative evidence | Key files | | --- | --- | --- | | JAX-first backend and migration | `57d730d`, `16985dd`, `#360`, `#361`, `#325` | `pymdp/agent.py`, `pymdp/legacy/agent.py`, `pymdp/utils.py`, `docs-mkdocs/migration/numpy-to-jax.md` | | Inference, control, and planning | `#315`, `#341`, `#348`, `#349`, `#365`, `#368`, `#370`, `#372` | `pymdp/inference.py`, `pymdp/control.py`, `pymdp/planning/si.py`, `pymdp/planning/mcts.py`, `pymdp/maths.py` | | Environments and rollout | `#334`, `#354`, `#369` plus the rollout refactor series | `pymdp/envs/env.py`, `pymdp/envs/rollout.py`, `pymdp/envs/cue_chaining.py`, `docs-mkdocs/guides/rollout-active-inference-loop.md` | | Model fitting and probabilistic inference | `873116a`, `ac34a1b`, `623662b` | `examples/model_fitting/fitting_with_pybefit.ipynb`, `test/test_pybefit_model_fitting.py`, `pyproject.toml`, `docs-mkdocs/index.md` | | Docs, tutorials, and examples | `9fa629f`, `#354`, `de6ead7` | `mkdocs.yml`, `docs-mkdocs/index.md`, `docs-mkdocs/tutorials/notebooks/index.md`, `docs-mkdocs/getting-started/quickstart-jax.md` | | Packaging and contributor workflow | `#364`, `#367`, `#373`, `#375` | `pyproject.toml`, `.github/workflows/test.yaml`, `.github/workflows/nightly-tests.yaml`, `test/notebooks/` | ================================================ FILE: docs-mkdocs/development/viewing-docs.md ================================================ # Viewing Docs Locally ## Quick commands From repo root: ```bash uv sync --no-default-groups --extra docs ./scripts/docs_build.sh ./scripts/docs_serve.sh ``` Local URL: - ## One-shot sync + serve ```bash ./scripts/docs_sync_and_serve.sh ``` ## RTD preview for PRs 1. Open your PR in GitHub. 2. Open the Read the Docs build linked to that PR. 3. Verify nav, notebooks, API pages, and redirects. ## Notes - `examples/` notebooks are the source of truth for the notebook gallery. - `docs-mkdocs/tutorials/notebooks/examples/` is generated at docs build time by `./scripts/sync_docs_notebooks.sh` and is not intended to be edited by hand. - `./scripts/docs_build.sh` and `./scripts/docs_serve.sh` sync curated notebooks automatically before invoking MkDocs. - To add notebook docs, update `docs-mkdocs/tutorials/notebooks.manifest`. The sync step will copy the listed notebooks into the generated docs tree. - MkDocs source-of-truth content lives in `docs-mkdocs/`. - `docs/` is retained as legacy Sphinx-era content for compatibility/history. ================================================ FILE: docs-mkdocs/env.html ================================================ Redirecting...

Redirecting to api/envs-rollout/.

================================================ FILE: docs-mkdocs/getting-started/installation.md ================================================ # Installation ## Recommended workflow: `uv` ### 1) Create and activate a virtual environment ```bash # from repo root uv venv .venv source .venv/bin/activate ``` If `.venv` already exists, just activate it: ```bash source .venv/bin/activate ``` ### 2) Sync dependencies ```bash uv sync --group test ``` ### Dependency groups and extras - `--group test`: test and notebook tooling (`pytest`, `pytest-xdist`, `nbval`, `jupyter`, `ipykernel`) plus common visualization deps (`mediapy`, `pygraphviz`) and model-fitting dependency (`pybefit`). - `--extra nb`: optional notebook/media extras (`mediapy`, `pygraphviz`) when notebook visualization is needed outside test tooling. - `--extra modelfit`: installs `pybefit` for model-fitting workflows. - `--extra gpu`: installs CUDA-enabled JAX packages. - `--extra docs`: documentation toolchain (`mkdocs`, `mkdocs-dracula-theme`, `mkdocstrings`, `mkdocs-jupyter`, `mkdocs-redirects`). `pygraphviz` is only needed for Graphviz-backed notebook visualizations such as the MCTS graph-world demo, but it is included in the current `test` and `nb` dependency sets. On many machines `uv sync --group test` works without any extra steps; if it fails while building `pygraphviz`, use the troubleshooting notes below and then rerun the sync command. Notebook cells that call `mediapy.show_video(...)` also require a system `ffmpeg` binary. If those cells fail with `Program 'ffmpeg' is not found`, install `ffmpeg` using the platform-specific notes below before rerunning the notebook. Common `uv` sync patterns: ```bash # standard dev/test work uv sync --group test # notebook-heavy workflows uv sync --group test --extra nb # model fitting workflows uv sync --group test --extra modelfit # docs workflow uv sync --group test --extra docs # GPU workflow uv sync --group test --extra gpu ``` ## Notebook video rendering (`mediapy`) Notebook examples that render videos through `mediapy.show_video(...)` need a system `ffmpeg` binary in addition to the Python package. ### macOS (Homebrew) ```bash brew install ffmpeg ``` ### Ubuntu / Debian ```bash sudo apt-get update sudo apt-get install -y ffmpeg ``` On other platforms, install `ffmpeg` with your system package manager and make sure the `ffmpeg` executable is available on `PATH`. ## `pygraphviz` troubleshooting If installation fails while building `pygraphviz`, the missing dependency is usually one of: - Graphviz itself, including the C headers (`graphviz/cgraph.h`) - Python development headers for the exact interpreter version in your virtual environment (`Python.h`) ### macOS (Homebrew) Install Graphviz with Homebrew before syncing dependencies: ```bash brew install graphviz ``` If `pygraphviz` still fails to build, install it explicitly with Homebrew's include and library paths: ```bash uv pip install \ --config-settings=--global-option=build_ext \ --config-settings=--global-option="-I$(brew --prefix graphviz)/include" \ --config-settings=--global-option="-L$(brew --prefix graphviz)/lib" \ pygraphviz==1.14 ``` Then rerun: ```bash uv sync --group test ``` or, if you only need the notebook/media extras: ```bash uv sync --extra nb ``` ### Ubuntu / Debian Install the Graphviz runtime, Graphviz development headers, `pkg-config`, and the compiler toolchain before syncing dependencies: ```bash sudo apt-get update sudo apt-get install -y graphviz libgraphviz-dev pkg-config build-essential ``` Install Python development headers that match the interpreter in your environment: ```bash sudo apt-get install -y python3-dev ``` If you are using a version-specific interpreter that is newer than the system default, install the matching package instead, for example: ```bash sudo apt-get install -y python3.12-dev ``` Then rerun: ```bash uv sync --group test ``` or install the dependency directly inside the active environment: ```bash uv pip install pygraphviz==1.14 ``` If the build output mentions `graphviz/cgraph.h`, install or verify the Graphviz development packages above. If it mentions `Python.h`, install or verify the matching Python development headers. ## Verify docs build ```bash ./scripts/docs_build.sh ``` ## Alternative: `pip` If you only want package installation (without the `uv` workflow): ```bash python3 -m venv .venv source .venv/bin/activate pip install inferactively-pymdp ``` ================================================ FILE: docs-mkdocs/getting-started/quickstart-jax.md ================================================ # Quickstart (JAX) Here are a couple of lines to quickly build an active inference agent and run state inference, policy inference (planning), and action selection. The agent is created with a random generative model comprising two observation modalities and two hidden state factors. The first of the two state factors is controllable via a 3 dimensional action. The agent also has uniform preferences (a flat `C` vector) over the observation modalities. ```python from jax import numpy as jnp, random as jr from pymdp import utils from pymdp.agent import Agent key = jr.PRNGKey(0) keys = jr.split(key, 3) num_obs = [3, 5] num_states = [3, 2] num_controls = [3, 1] A = utils.random_A_array(keys[0], num_obs, num_states) B = utils.random_B_array(keys[1], num_states, num_controls) C = utils.list_array_uniform([[no] for no in num_obs]) agent = Agent(A=A, B=B, C=C, batch_size=1) # Discrete observation indices for each modality obs = [jnp.array([1]), jnp.array([2])] # Use agent.D as the initial empirical prior qs, info = agent.infer_states(obs, empirical_prior=agent.D, return_info=True) # Optional diagnostic: current variational free energy for each batch element. vfe = info["vfe"] q_pi, neg_efe = agent.infer_policies(qs) sample_keys = jr.split(keys[2], agent.batch_size + 1) action = agent.sample_action(q_pi, rng_key=sample_keys[1:]) ``` You can also run a quick agent-environment loop with `rollout()` and `PymdpEnv`. For repeated calls, we recommend wrapping `rollout` in `jit`: ```python from jax import jit from jax import random as jr from pymdp import utils from pymdp.agent import Agent from pymdp.envs.env import make from pymdp.envs.rollout import rollout key = jr.PRNGKey(1) key_A, key_B, key_rollout = jr.split(key, 3) num_obs = [3, 5] num_states = [3, 2] num_controls = [3, 1] A = utils.random_A_array(key_A, num_obs, num_states) B = utils.random_B_array(key_B, num_states, num_controls) C = utils.list_array_uniform([[no] for no in num_obs]) D = utils.list_array_uniform([[ns] for ns in num_states]) agent = Agent(A=A, B=B, C=C, D=D, batch_size=1) env, _ = make(A=A, B=B, D=D) rollout_jit = jit(rollout, static_argnums=[1, 2]) # env and num_timesteps are static last, info = rollout_jit( agent, env, 20, key_rollout, ) actions = info["action"] ``` For a more in-depth guide to compiled active inference loops, see the dedicated [`rollout()` guide](../guides/rollout-active-inference-loop.md). ================================================ FILE: docs-mkdocs/guides/generative-model-structure.md ================================================ # Thinking in Generative Models in `pymdp` This guide explains how to map Active Inference concepts onto the list-based model representation used in `pymdp`. For a model with `F` hidden-state factors and `M` observation modalities over `T` timesteps, a common joint factorization is: $$ {\small p\left(o_{1:T}^{1:M}, s_{1:T}^{1:F}, \pi;\,A,B,D\right) = p(\pi)\underbrace{p\left(s_1^{1:F};\,D\right)}_{\text{initial state prior / }D} \prod_{t=1}^{T-1}\underbrace{p\left(s_{t+1}^{1:F} \mid s_t^{1:F}, u_t^\pi;\,B\right)}_{\text{transition model / }B} \prod_{t=1}^{T}\underbrace{p\left(o_t^{1:M} \mid s_t^{1:F};\,A\right)}_{\text{observation model / }A}.} $$ Here, $\pi$ refers to _policies_; this is a discrete latent variable whose realizations correspond to sequences of actions over time, and $u_t^\pi$ denotes the action entailed by policy $\pi$ at time $t$. In `pymdp`, those terms are typically factorized as: $$ p\left(s_1^{1:F};\,D\right) = \prod_{f=1}^{F} p\left(s_1^f;\,D_f\right). $$ $$ p\left(s_{t+1}^{1:F} \mid s_t^{1:F}, u_t^\pi;\,B\right) = \prod_{f=1}^{F} p\left(s_{t+1}^f \mid s_t^{B_{\mathrm{dependencies}}[f]}, u_t^\pi;\,B_f\right). $$ $$ p\left(o_t^{1:M} \mid s_t^{1:F};\,A\right) = \prod_{m=1}^{M} p\left(o_t^m \mid s_t^{A_{\mathrm{dependencies}}[m]};\,A_m\right). $$ ## Mental model Use two independent indexing systems: 1. **Observation modalities** (`m`) index independent sensory channels. 2. **Hidden-state factors** (`f`) index latent causes. In code, this means: - modality-indexed lists: `A[m]`, `observations[m]`, `C[m]`, `pA[m]` - factor-indexed lists: `D[f]`, `qs[f]`, `B[f]`, `pB[f]` ## Observation modalities: `A[m]` and `observations[m]` Each modality gets its own likelihood tensor: - `A[m] = P(obs_m | state_{i in A_dependencies[m]})` - `observations[m]` is the actual observation for modality `m` So if you have two modalities (for example, location and reward), you should expect `len(A) == 2` and your observation input to have two modality entries. ## Hidden-state factors: `D[f]`, `qs[f]`, `B[f]` Each hidden-state factor gets its own prior, posterior, and transition model: - `D[f]`: prior over factor-`f` states - `qs[f]`: posterior over factor-`f` states - `B[f] = P(s_{[f,t+1]} | state_{i in B_dependencies[f]}, action_{j in B_action_dependencies[f]})` This means you can reason about each factor semantically (for example, context, location, or object identity) and keep dimensions aligned by factor index. ## Dependencies connect modalities and factors `pymdp` lets you be explicit about sparse structure: - `A_dependencies[m]`: which factors modality `m` depends on - `B_dependencies[f]`: which previous factors influence factor `f` transitions - `B_action_dependencies[f]`: which action/control factors influence factor `f` transitions This is the key to building structured models without forcing every modality to depend on every factor. ## Minimal indexing example ```python # Two modalities # m=0 -> location observation # m=1 -> reward observation A = [A_location, A_reward] obs = [obs_location, obs_reward] # Two hidden-state factors # f=0 -> location state # f=1 -> context state D = [D_location, D_context] qs = [qs_location, qs_context] B = [B_location, B_context] ``` Read this as: - `A[1]` defines how reward observations are generated. - `qs[0]` is your current belief over location states. - `B[1]` defines context dynamics. ## Common shape/indexing pitfalls 1. `len(observations)` does not match `len(A)`. 2. Mixing modality index `m` and factor index `f`. 3. `A_dependencies`, `B_dependencies`, or `B_action_dependencies` indices not matching your list layout. 4. Passing raw integer observations when your setup expects categorical vectors (or vice versa). ## How this maps to the agent loop At each step: 1. infer states with `infer_states(...)` to update `qs[f]`, 2. infer policies with `infer_policies(qs)`, 3. sample actions and propagate beliefs through `B[f]`. For end-to-end loops, combine this mental model with the [`rollout()` guide](rollout-active-inference-loop.md). ================================================ FILE: docs-mkdocs/guides/pymdp-env.md ================================================ # `PymdpEnv`: Building JAX Environments from Generative Models `pymdp` environments implement the `Env` interface: - `reset(key, state=None, env_params=None) -> (obs, state)` - `step(key, state, action, env_params=None) -> (obs, next_state)` If these methods are JAX/JIT compatible, the environment can be used directly with [`rollout()`](rollout-active-inference-loop.md) for fast compiled agent-environment loops. ## Two ways to build an environment 1. Subclass `Env` for fully custom dynamics and observation logic. 2. Use `PymdpEnv` when your environment is a discrete POMDP generative process defined by a discrete observation model `A`, discrete transition model `B`, and discrete distribution over initial states `D`. ## Using `PymdpEnv` `PymdpEnv` represents environments with: - `A`: categorical emission model(s), `P(obs_m | hidden states)` - `B`: categorical transition model(s), `P(s_{t+1} | s_t, action)` - `D`: initial hidden-state priors Sparse structure is controlled with: - `A_dependencies[m]` - `B_dependencies[f]` Minimal construction: ```python from pymdp.envs.env import make env, env_params = make( A=A, B=B, D=D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, make_env_params=True, ) ``` `env_params` can be passed to `reset`/`step` for batched or per-run parameter control, while the `env` instance keeps default `A`, `B`, and `D`. ## Writing a custom `Env` For non-POMDP or richer simulators, subclass `Env` and implement `reset` and `step` directly. Keep all randomness explicit through JAX keys (`jax.random`) and avoid hidden stateful randomness so behavior remains JIT-safe and reproducible. ## Practical notes - Prefer array shapes and dependency indices that match your agent model. - Use `env.generate_env_params(batch_size=...)` when you need batched environment parameters. - If your environment methods are not JIT-compatible, use manual loops instead of `rollout()`. ================================================ FILE: docs-mkdocs/guides/rollout-active-inference-loop.md ================================================ # Using `rollout()` for compiled active inference loops `rollout()` runs repeated inference, planning, action sampling, and environment stepping for a fixed horizon. Internally, it uses `jax.lax.scan`, so direct calls are valid and JAX-friendly. ## When to use it - The `.step()` and `.reset()` methods of your `Env` can be JIT-compiled. This includes compatibility with `pymdp`'s native `PymdpEnv`, as well as existing JAX RL environment frameworks (see for example [gymnax](https://github.com/RobertTLange/gymnax), [jumanji](https://github.com/instadeepai/jumanji), and [navix](https://github.com/epignatelli/navix)). - You want high-throughput simulations by compiling the full closed-loop interaction once and executing it efficiently across many rollouts. - You want a single, consistent API for multi-step active inference rollouts with explicit PRNG key threading. ## Required inputs - `agent`: `pymdp.agent.Agent` - `env`: `pymdp.envs.env.Env`-compatible object - `num_timesteps`: integer horizon - `rng_key`: JAX PRNG key ## Optional inputs - `initial_carry`: override initial rollout carry - `policy_search`: custom policy search function - `env_params`: batched environment parameters ## Canonical usage ```python from jax import random as jr from pymdp.envs.rollout import rollout rng_key = jr.PRNGKey(0) last, info = rollout(agent, env, 20, rng_key) ``` For repeated calls with fixed `env` and `num_timesteps`, we recommend wrapping `rollout` with `jit` so XLA can cache the compiled program: ```python from jax import jit from jax import random as jr from pymdp.envs.rollout import rollout rng_key = jr.PRNGKey(0) rollout_jit = jit(rollout, static_argnums=[1, 2]) # env and num_timesteps are static last, info = rollout_jit( agent, env, 20, rng_key, ) ``` ## Reproducible key flow `rollout()` internally splits keys per step and per batch. For deterministic re-runs: 1. pass in the same `rng_key` seed, 2. keep environment params/initial carry identical, 3. avoid hidden non-JAX randomness inside your environment's `.step()` or `.reset()` methods. ## Batched runs and carry - `agent.batch_size` controls parallel batch dimension. - `initial_carry` can override auto-initialized state (for warm-starting). ## Relationship to manual loops `rollout()` repeatedly applies the one-step helper `infer_and_plan` internally using `jax.lax.scan`. Use manual loops when: - your environment's `.step()` and `.reset()` methods cannot be JITTed. - you need custom per-step side effects that don't respect the active inference logic of `infer_and_plan`. For JAX-based environments, we recommend using `rollout()`, as it's usually simpler and less error-prone. ## Debugging checklist 1. Shape mismatch: check observation/action histories and factor dimensions. 2. Stochastic sampling errors: ensure valid RNG keys are threaded. 3. Sequence methods (`mmp`, `vmp`): ensure `past_actions` and valid windows are correct. 4. Learning updates: verify `learn_A`/`learn_B` flags and action alignment. ## Cross-links - [Quickstart (JAX)](../getting-started/quickstart-jax.md) - [API: `pymdp.envs.rollout`](../api/envs-rollout.md) ================================================ FILE: docs-mkdocs/index.md ================================================ # Welcome to pymdp's documentation! `pymdp` is a Python package for simulating Active Inference agents in discrete-state Markov Decision Process environments. For background and motivation, see the companion JOSS paper: [`pymdp: A Python library for active inference in discrete state spaces`](https://joss.theoj.org/papers/10.21105/joss.04098). This documentation focuses on the JAX backend (the default backend since the 1.0.0 release), which supports:
  • accelerator-friendly execution (CPU/GPU/TPU) and JIT compilation
  • differentiable workflows via autodiff
  • scalable batched simulations and model-fitting workflows (for example, with NumPyro or pybefit)
![Cue-chaining demo](assets/cue-chaining-demo.gif){ width="880" } ## Start here - [Installation](getting-started/installation.md) - [Quickstart (JAX)](getting-started/quickstart-jax.md) - [NumPy/legacy to JAX migration guide](migration/numpy-to-jax.md) - [Using rollout() for compiled active inference loops](guides/rollout-active-inference-loop.md) - [PymdpEnv and custom environments](guides/pymdp-env.md) - [Thinking in generative models in `pymdp`](guides/generative-model-structure.md) - [Notebook gallery](tutorials/notebooks/index.md) ## API reference - [API overview](api/index.md) ## Legacy docs Legacy/NumPy material is preserved under an archive path: - [Legacy/NumPy archive](legacy/index.md) ================================================ FILE: docs-mkdocs/inference.html ================================================ Redirecting...

Redirecting to api/inference/.

================================================ FILE: docs-mkdocs/installation.html ================================================ Redirecting...

Redirecting to getting-started/installation/.

================================================ FILE: docs-mkdocs/javascripts/mathjax.js ================================================ window.MathJax = { tex: { inlineMath: [["\\(", "\\)"]], displayMath: [["\\[", "\\]"]], processEscapes: true, processEnvironments: true, }, svg: { fontCache: "global", }, options: { ignoreHtmlClass: ".*|", processHtmlClass: "arithmatex", }, }; const renderMath = () => { if (!window.MathJax || !window.MathJax.typesetPromise) return; window.MathJax.typesetClear(); window.MathJax.typesetPromise(); }; if (typeof document$ !== "undefined") { document$.subscribe(renderMath); } window.addEventListener("load", renderMath); ================================================ FILE: docs-mkdocs/javascripts/sidebar-accessibility.js ================================================ document.addEventListener("DOMContentLoaded", () => { const sidebar = document.getElementById("sidebar"); const sidebarToggle = document.getElementById("sidebarCollapse"); if (!sidebar || !sidebarToggle) { return; } const syncSidebarState = () => { const desktopViewport = window.matchMedia("(min-width: 992px)").matches; const expanded = desktopViewport ? !sidebar.classList.contains("active") : sidebar.classList.contains("active"); sidebarToggle.setAttribute("aria-expanded", String(expanded)); }; syncSidebarState(); sidebarToggle.addEventListener("click", () => window.requestAnimationFrame(syncSidebarState)); window.addEventListener("resize", syncSidebarState); }); ================================================ FILE: docs-mkdocs/learning.html ================================================ Redirecting...

Redirecting to api/learning/.

================================================ FILE: docs-mkdocs/legacy/index.md ================================================ # Legacy / NumPy Archive `pymdp/legacy` is preserved for compatibility and historical context. ## Status - Legacy modules are frozen and not the primary API path. - New examples, docs, and feature development target modern JAX modules. ## Mapping (legacy -> modern) - `pymdp.legacy.agent` -> `pymdp.agent` - `pymdp.legacy.inference` -> `pymdp.inference` - `pymdp.legacy.control` -> `pymdp.control` - `pymdp.legacy.learning` -> `pymdp.learning` - `pymdp.legacy.maths` -> `pymdp.maths` - `pymdp.legacy.utils` -> `pymdp.utils` ## Next step Use the [NumPy/legacy to JAX migration guide](../migration/numpy-to-jax.md). ================================================ FILE: docs-mkdocs/migration/numpy-to-jax.md ================================================ # NumPy/legacy to JAX Migration This guide is for users moving from `pymdp.legacy` (NumPy/object-array style) to the [JAX](https://github.com/jax-ml/jax) backend of `pymdp`. ## Key concept shifts | Legacy NumPy | JAX | |---|---| | `numpy.ndarray(dtype=object)` collections | pytrees/lists of `jax.Array` | | `np.random` global RNG | explicit `jr.PRNGKey` threading | | stateful loops with implicit mutation | functional updates with explicit returns | | mutable attribute assignment (`agent.x = ...`) | functional pytree updates (`eqx.tree_at(...)`) | | `pymdp.legacy.*` modules | `pymdp.*` modern JAX-based modules | ## API differences to update 1. Policy inference now takes current beliefs as inputs, since they are no longer stored internally on the agent. # legacy NumPy q_pi, G = agent.infer_policies() # JAX q_pi, neg_efe = agent.infer_policies(qs) Note: in SPM-style notation this same policy score is often called `G` (`G = neg_efe = -EFE`). 2. Stochastic functions require explicit random keys. Common examples in `pymdp` include action/policy sampling (for example `agent.sample_action(..., rng_key=...)`), random generative model initialization utilities such as `utils.random_A_array(...)`, `utils.random_B_array(...)`, and `utils.random_factorized_categorical(...)`, rollout execution (`rollout(..., rng_key=...)`), and stochastic environment methods (`env.reset(key, ...)`, `env.step(key, ...)`). # legacy NumPy action = agent.sample_action() # JAX keys = jr.split(rng_key, agent.batch_size + 1) action = agent.sample_action(q_pi, rng_key=keys[1:]) 3. Keep observation preprocessing consistent. - If `categorical_obs=False`, pass discrete indices. - If `categorical_obs=True`, pass normalized categorical vectors. ## Batching and `batch_size` Most of `pymdp`'s JAX APIs expect a leading `batch_size` dimension on most arrays (for example state/parameter priors and posteriors). This makes it easy to parallelize with [`jax.vmap`](https://docs.jax.dev/en/latest/_autosummary/jax.vmap.html). Defaults to keep in mind: - `Agent(..., batch_size=1)` is the default. - By default, `Env` objects are typically unbatched (for example `env.A/B/D` have no leading batch axis), while `Agent` leaves are batch-shaped. - In the default single-agent case, many arrays therefore appear as `(1, ...)`. When migrating from legacy single-agent code, keep these points in mind: - Multi-agent simulations (including parallel parameter sweeps) require batched per-agent information (observations, beliefs, parameters, preferences, and some hyperparameters). - In `Agent.__init__`, if you pass unbatched `A`/`B` with `batch_size=N`, the tensors are broadcast to `(N, ...)`. - If inputs are already batched with leading dimension `1` and `batch_size>1`, they are also broadcast to `batch_size`. - If the leading dimension is batched but neither `1` nor `batch_size`, a `ValueError` is raised. Typical multi-agent setup pattern: ```python batch_size = 3 agent = Agent(A=A, B=B, C=C, D=D, batch_size=batch_size) # One discrete modality for 3 parallel agents: shape (batch_size, 1) obs = [jnp.array([[0], [2], [3]])] qs = agent.infer_states(obs, empirical_prior=agent.D) ``` For environment-side batching, either: - Keep a single (unbatched) environment and run batched agents against shared `env.A/B/D`. - Pass batched `env_params` (for example via `env.generate_env_params(batch_size=...)`) when using `rollout()`. Parameters inside `env_params` should also carry a leading `batch_size` dimension aligned to the `Agent`. ## Updating `Agent` fields in JAX The `Agent` class is an [Equinox](https://github.com/patrick-kidger/equinox) module. In practice, this means you should avoid mutable-style setter updates like: ```python agent.A = new_A agent.B = new_B ``` Instead, use Equinox-style functional updates with `eqx.tree_at(...)`: ```python import equinox as eqx agent = eqx.tree_at(lambda x: (x.A,), agent, (new_A,)) agent = eqx.tree_at(lambda x: (x.B,), agent, (new_B,)) ``` If you change static `Agent` fields (for example model dimensions, dependency structure, or static hyperparameters such as number of policies), JAX will trigger recompiles of agent-specific JIT-compiled methods such as `infer_states`, `infer_policies`, and related methods used during rollouts. This is the pattern used near the end of `infer_parameters()` in `pymdp/agent.py`, where after a learning update, the new `A`/`B` (and, when enabled, `I`) arrays are written back into a new `Agent` instance. ## Randomness migration Use explicit key flow everywhere: ```python rng_key = jr.PRNGKey(0) rng_key, key_infer, key_action = jr.split(rng_key, 3) qs = agent.infer_states(obs, empirical_prior=agent.D) q_pi, _ = agent.infer_policies(qs) keys = jr.split(key_action, agent.batch_size + 1) action = agent.sample_action(q_pi, rng_key=keys[1:]) ``` Other frequently used stochastic APIs that also require explicit keys: - `utils.random_A_array(...)` - `utils.random_B_array(...)` - `utils.random_factorized_categorical(...)` - `utils.generate_agent_spec(..., key=...)` - `rollout(..., rng_key=...)` - stochastic `env.reset(key, ...)` / `env.step(key, ...)` Avoid `np.random` when using the new JAX backend (see also [this post](https://builtin.com/data-science/numpy-random-seed), which encourages caution when working with `np.random`). ## NumPy-to-JAX worked conversion ```python # legacy NumPy from pymdp.legacy.agent import Agent as LegacyAgent from pymdp.legacy import utils as legacy_utils A = legacy_utils.random_A_matrix([3], [2]) B = legacy_utils.random_B_matrix([2], [2]) agent = LegacyAgent(A=A, B=B) obs = [1] qs = agent.infer_states(obs) q_pi, G = agent.infer_policies() action = agent.sample_action() ``` ```python # JAX from jax import random as jr from pymdp.agent import Agent from pymdp import utils key = jr.PRNGKey(0) keys = jr.split(key, 3) A = utils.random_A_array(keys[0], [3], [2]) B = utils.random_B_array(keys[1], [2], [2]) agent = Agent(A=A, B=B) obs = [1] qs = agent.infer_states(obs, empirical_prior=agent.D) q_pi, neg_efe = agent.infer_policies(qs) action_keys = jr.split(keys[2], agent.batch_size + 1) action = agent.sample_action(q_pi, rng_key=action_keys[1:]) ``` ## Common migration pitfalls 1. Missing batch-size dimension for `observations`, `actions`, `qs`, or parameters (`A`, `B`, `C`, `D`). 2. Missing `empirical_prior` argument in `infer_states`. 3. Missing `rng_key`/`key` in stochastic calls (for example `sample_action`, random model constructors, `rollout`, or stochastic `env.reset`/`env.step`). 4. Mixing `numpy.ndarray` into JAX-only paths. 5. Forgetting sequence action-history shape `(T-1, num_factors)`. ## Migration done checklist 1. No imports from `pymdp.legacy` in active scripts/notebooks. 2. Randomness uses explicit `jr.PRNGKey` flow. 3. `infer_policies(qs)` and `sample_action(q_pi, rng_key=...)` usage updated. 4. Tests pass (`pytest test`). 5. Notebook/docs examples run with API. ================================================ FILE: docs-mkdocs/notebooks/active_inference_from_scratch.html ================================================ Redirecting...

Redirecting to ../migration/numpy-to-jax/.

================================================ FILE: docs-mkdocs/notebooks/cue_chaining_demo.html ================================================ Redirecting...

Redirecting to legacy cue_chaining_demo notebook.

================================================ FILE: docs-mkdocs/notebooks/free_energy_calculation.html ================================================ Redirecting...

Redirecting to ../migration/numpy-to-jax/.

================================================ FILE: docs-mkdocs/notebooks/pymdp_fundamentals.html ================================================ Redirecting...

Redirecting to ../migration/numpy-to-jax/.

================================================ FILE: docs-mkdocs/notebooks/tmaze_demo.html ================================================ Redirecting...

Redirecting to ../tutorials/notebooks/examples/envs/tmaze_demo.ipynb.

================================================ FILE: docs-mkdocs/notebooks/using_the_agent_class.html ================================================ Redirecting...

Redirecting to ../getting-started/quickstart-jax/.

================================================ FILE: docs-mkdocs/overrides/modules/sidebar.html ================================================ ================================================ FILE: docs-mkdocs/styles/crisp-api.css ================================================ @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap"); :root { --pymdp-inline-code-bg: rgba(98, 114, 164, 0.22); --pymdp-inline-code-fg: #8be9fd; --pymdp-inline-code-border: rgba(139, 233, 253, 0.22); } body { font-family: "IBM Plex Sans", sans-serif; } pre, code, kbd, samp { font-family: "IBM Plex Mono", "Fira Code", monospace; } /* API reference tables: keep mkdocstrings type signatures on one line when possible. */ .doc .doc-contents > table { table-layout: auto; width: 100%; } .doc .doc-contents > table tr > :nth-child(2) { min-width: 14rem; width: 14rem; } .doc .doc-contents > table tr > :first-child:nth-last-child(2) { min-width: 16rem; width: 16rem; } .doc .doc-contents > table tr > :nth-child(2) code, .doc .doc-contents > table tr > :first-child:nth-last-child(2) code { white-space: nowrap; } /* Override Dracula's default purple inline code chip for better contrast. */ article p code, article li code, article td code, article th code, article dt code, article dd code, article blockquote code, article a code, article h1 code, article h2 code, article h3 code, article h4 code, article h5 code, article h6 code { background: var(--pymdp-inline-code-bg); border: 1px solid var(--pymdp-inline-code-border); border-radius: 6px; color: var(--pymdp-inline-code-fg); font-family: "IBM Plex Mono", "Fira Code", monospace; padding: 0.08rem 0.32rem; } /* Notebook pages: align mkdocs-jupyter output with the Dracula site shell. */ .jupyter-wrapper { margin-block: 1.5rem; } .jupyter-wrapper [data-jp-theme-light="false"] { --jp-layout-color0: #282a36; --jp-layout-color1: #21222c; --jp-layout-color2: #343746; --jp-layout-color3: #44475a; --jp-layout-color4: #6272a4; --jp-border-color0: rgba(139, 233, 253, 0.16); --jp-border-color1: rgba(139, 233, 253, 0.14); --jp-border-color2: rgba(139, 233, 253, 0.08); --jp-border-color3: rgba(139, 233, 253, 0.06); --jp-ui-font-color0: #f8f8f2; --jp-ui-font-color1: rgba(248, 248, 242, 0.92); --jp-ui-font-color2: rgba(248, 248, 242, 0.66); --jp-content-font-color0: #f8f8f2; --jp-content-font-color1: rgba(248, 248, 242, 0.92); --jp-content-font-color2: rgba(248, 248, 242, 0.7); --jp-content-link-color: #8be9fd; --jp-cell-editor-background: #191a21; --jp-cell-editor-active-background: #15161c; --jp-cell-editor-border-color: rgba(139, 233, 253, 0.14); --jp-rendermime-table-row-background: rgba(255, 255, 255, 0.02); --jp-rendermime-table-row-hover-background: rgba(139, 233, 253, 0.05); --jp-mirror-editor-keyword-color: #ff79c6; --jp-mirror-editor-atom-color: #bd93f9; --jp-mirror-editor-number-color: #bd93f9; --jp-mirror-editor-def-color: #50fa7b; --jp-mirror-editor-variable-color: #f8f8f2; --jp-mirror-editor-variable-2-color: #8be9fd; --jp-mirror-editor-variable-3-color: #50fa7b; --jp-mirror-editor-punctuation-color: #f8f8f2; --jp-mirror-editor-property-color: #8be9fd; --jp-mirror-editor-operator-color: #ff79c6; --jp-mirror-editor-comment-color: #6272a4; --jp-mirror-editor-string-color: #f1fa8c; --jp-mirror-editor-string-2-color: #f1fa8c; --jp-mirror-editor-meta-color: #ff79c6; --jp-mirror-editor-qualifier-color: #50fa7b; --jp-mirror-editor-builtin-color: #8be9fd; --jp-mirror-editor-hr-color: #44475a; --jp-mirror-editor-error-color: #ff5555; } .jupyter-wrapper .jp-Notebook { background: linear-gradient(180deg, rgba(40, 42, 54, 0.98), rgba(28, 29, 38, 0.98)); border: 1px solid rgba(139, 233, 253, 0.08); border-radius: 18px; box-shadow: 0 18px 40px rgba(0, 0, 0, 0.26); overflow: hidden; padding: 1rem 1.1rem 1.25rem; } .jupyter-wrapper .jp-Cell { margin-bottom: 1rem; } .jupyter-wrapper .jp-Cell:last-child { margin-bottom: 0; } .jupyter-wrapper .jp-InputArea-editor, .jupyter-wrapper .jp-OutputArea-child, .jupyter-wrapper .jp-RenderedHTMLCommon table, .jupyter-wrapper .jp-RenderedText pre { border-radius: 12px; } .jupyter-wrapper .jp-InputArea-editor { border: 1px solid rgba(139, 233, 253, 0.1); box-shadow: none; } .jupyter-wrapper .jp-OutputArea-child { background: rgba(17, 18, 23, 0.38); border: 1px solid rgba(139, 233, 253, 0.06); padding: 0.75rem; } .jupyter-wrapper .jp-InputPrompt, .jupyter-wrapper .jp-OutputPrompt { color: #8be9fd; font-size: 0.78rem; opacity: 0.82; } .jupyter-wrapper .jp-RenderedHTMLCommon p, .jupyter-wrapper .jp-RenderedHTMLCommon li { color: var(--jp-content-font-color1); } .jupyter-wrapper .jp-RenderedHTMLCommon a { color: #8be9fd; } .jupyter-wrapper .jp-RenderedHTMLCommon table { background: rgba(17, 18, 23, 0.22); overflow: hidden; } .jupyter-wrapper .jp-RenderedImage img, .jupyter-wrapper .jp-RenderedSVG svg { border-radius: 12px; } .pymdp-sidebar-logo { display: block; margin: 0.35rem auto 1.4rem; height: auto; max-width: 100%; width: min(240px, 100%) !important; } ================================================ FILE: docs-mkdocs/tutorials/index.md ================================================ # Tutorials Use this section for runnable, example-driven materials sourced from Jupyter notebooks under `examples/`. For focused conceptual/how-to docs, use the Guides section. - [Notebook gallery](notebooks/index.md) - [`rollout()` compiled loop guide](../guides/rollout-active-inference-loop.md) - [NumPy/legacy to JAX migration guide](../migration/numpy-to-jax.md) ================================================ FILE: docs-mkdocs/tutorials/notebooks/index.header.md ================================================ ## For developers The notebook listings above are auto-generated by `./scripts/sync_docs_notebooks.sh`. Source notebooks live under `examples/`. The mirrored notebooks under `docs-mkdocs/tutorials/notebooks/examples/` are generated build artifacts. To add a notebook: 1. Add a path to `docs-mkdocs/tutorials/notebooks.manifest`. 2. Run `./scripts/sync_docs_notebooks.sh`. ================================================ FILE: docs-mkdocs/tutorials/notebooks/index.md ================================================ # Notebook Gallery ## Curated notebooks ### Getting started - [Generative Model Construction (Model/Distribution APIs)](examples/api/model_construction_tutorial.ipynb) - [T-Maze Demo](examples/envs/tmaze_demo.ipynb) - [T-Maze Task with Distractors](examples/envs/generalized_tmaze_demo.ipynb) - [Cue Chaining Demo](examples/envs/cue_chaining_demo.ipynb) - [Graph worlds](examples/envs/graph_worlds_demo.ipynb) - [Demo: Knapsack Problem](examples/envs/knapsack_demo.ipynb) ### Sophisticated Inference - [Validating Sophisticated Inference (SI) Planning Algorithm using the T-Maze Task](examples/experimental/sophisticated_inference/si_tmaze_SIvalidation.ipynb) - [Sophisticated inference on a T-Maze Task with Distractors](examples/experimental/sophisticated_inference/si_generalized_tmaze.ipynb) - [Sophisticated inference on Graph Worlds](examples/experimental/sophisticated_inference/si_graph_world.ipynb) ### Inductive Inference - [Inductive Inference Example](examples/inductive_inference/inductive_inference_example.ipynb) - [Inductive Inference Gridworld](examples/inductive_inference/inductive_inference_gridworld.ipynb) ### Parameter Learning - [Learning Gridworld](examples/learning/learning_gridworld.ipynb) ### Fitting POMDPs to experimental / behavioral data - [Fitting With `pybefit`](examples/model_fitting/fitting_with_pybefit.ipynb) ### Advanced - [Working with complex action dependencies](examples/advanced/complex_action_dependency.ipynb) - [Using `pymdp` with a neural encoder](examples/advanced/pymdp_with_neural_encoder.ipynb) - [Testing optimized inference methods](examples/advanced/infer_states_optimization/methods_test.ipynb) - [Sparse Array Benchmarking](examples/sparse/sparse_benchmark.ipynb) - [Sophisticated inference with Monte Carlo Tree Search on TMaze with Distractors](examples/experimental/sophisticated_inference/mcts_generalized_tmaze.ipynb) - [Sophisticated inference with Monte Carlo Tree Search on Graph World](examples/experimental/sophisticated_inference/mcts_graph_world.ipynb) - [Comparing sequential inference algorithms](examples/inference_and_learning/inference_methods_comparison.ipynb) ## For developers The notebook listings above are auto-generated by `./scripts/sync_docs_notebooks.sh`. Source notebooks live under `examples/`. The mirrored notebooks under `docs-mkdocs/tutorials/notebooks/examples/` are generated build artifacts. To add a notebook: 1. Add a path to `docs-mkdocs/tutorials/notebooks.manifest`. 2. Run `./scripts/sync_docs_notebooks.sh`. ================================================ FILE: docs-mkdocs/tutorials/notebooks.manifest ================================================ # One notebook path per line, relative to repository root. examples/advanced/complex_action_dependency.ipynb examples/advanced/pymdp_with_neural_encoder.ipynb examples/advanced/infer_states_optimization/methods_test.ipynb examples/api/model_construction_tutorial.ipynb examples/envs/cue_chaining_demo.ipynb examples/envs/generalized_tmaze_demo.ipynb examples/envs/graph_worlds_demo.ipynb examples/envs/knapsack_demo.ipynb examples/envs/tmaze_demo.ipynb examples/experimental/sophisticated_inference/mcts_generalized_tmaze.ipynb examples/experimental/sophisticated_inference/mcts_graph_world.ipynb examples/experimental/sophisticated_inference/si_generalized_tmaze.ipynb examples/experimental/sophisticated_inference/si_graph_world.ipynb examples/experimental/sophisticated_inference/si_tmaze_SIvalidation.ipynb examples/inductive_inference/inductive_inference_example.ipynb examples/inductive_inference/inductive_inference_gridworld.ipynb examples/inference_and_learning/inference_methods_comparison.ipynb examples/learning/learning_gridworld.ipynb examples/model_fitting/fitting_with_pybefit.ipynb examples/sparse/sparse_benchmark.ipynb ================================================ FILE: examples/__init__.py ================================================ ================================================ FILE: examples/advanced/complex_action_dependency.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Complex action dependencies\n", "\n", "In this notebook, we will show some examples of how to specify and run agents with complex action dependencies. Complex action dependencies refer to situations where a state variables depends on multiple actions or no action. These state transitions tensors have shapes of the form: `[state_dim, *prev_state_dims, *prev_action_dims]`. \n", "\n", "The general strategy for dealing with this is to flatten the `prev_action_dims` while initializing the agent so that the new B tensor shapes are `[state_dim, *prev_state_dims, math.prod(prev_action_dims)]`. If a state has no action dependency, the new B tensor will have shape `[state_dim, *prev_state_dims, 1]` where 1 stands for a dummy action. All computations will be done in the flattened B tensors and actions will be sampled in the flattened action dimensions. After a flattened action is sampled, one can convert it back to the original action dimensions by calling `agent.decode_multi_actions`. To flatten multi actions, for example from collected data, one can call `agent.encode_multi_actions`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from pprint import pprint\n", "import itertools\n", "import numpy as np\n", "from jax import numpy as jnp, random as jr\n", "from jax import tree_util as jtu\n", "\n", "from pymdp.agent import Agent\n", "from pymdp import distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple action dependencies\n", "In this example, some states depend on multiple actions. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A_dependencies [[0]]\n", "B_dependencies [[0], [1]]\n", "B_action_dependencies [[0, 1], [0]]\n", "original control dims [2, 3]\n", "flattened control dims [6, 2]\n", "original B shapes [(4, 4, 2, 3), (4, 4, 2)]\n", "flattened B shapes [(1, 4, 4, 6), (1, 4, 4, 2)]\n", "B normalized [Array(True, dtype=bool), Array(True, dtype=bool)]\n", "B flat normalized [Array(True, dtype=bool), Array(True, dtype=bool)]\n", "\n", "\n", "prior\n", "[Array([[0. , 0.25, 0.25, 0.5 ]], dtype=float32),\n", " Array([[0. , 0.25, 0.25, 0.5 ]], dtype=float32)]\n", "post\n", "[Array([[[0., 0., 1., 0.]]], dtype=float32),\n", " Array([[[0. , 0.25, 0.25, 0.5 ]]], dtype=float32)]\n", "action\n", "Array([[0, 0]], dtype=int32)\n", "action_multi\n", "Array([[0, 0]], dtype=int32)\n", "action_reconstruct\n", "Array([[0, 0]], dtype=int32)\n" ] } ], "source": [ "model_description = {\n", " \"observations\": {\n", " \"o1\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s1\"]},\n", " },\n", " \"controls\": {\"c1\": {\"elements\": [\"up\", \"down\"]}, \"c2\": {\"elements\": [\"left\", \"right\", \"stay\"]}},\n", " \"states\": {\n", " \"s1\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s1\"], \"controlled_by\": [\"c1\", \"c2\"]},\n", " \"s2\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s2\"], \"controlled_by\": [\"c1\"]},\n", " },\n", "}\n", "\n", "B_action_dependencies = [\n", " [list(model_description[\"controls\"].keys()).index(i) for i in s[\"controlled_by\"]] \n", " for s in model_description[\"states\"].values()\n", "]\n", "num_controls = [len(c[\"elements\"]) for c in model_description[\"controls\"].values()]\n", "\n", "model = distribution.compile_model(model_description)\n", "\n", "# initialize tensor values\n", "model.A[\"o1\"][\"A\", \"A\"] = 1.0\n", "model.A[\"o1\"][\"B\", \"B\"] = 1.0\n", "model.A[\"o1\"][\"C\", \"C\"] = 1.0\n", "model.A[\"o1\"][\"D\", \"D\"] = 1.0\n", "\n", "for i, state in enumerate(model_description[\"states\"].keys()):\n", " controls = list(itertools.product(*[\n", " model_description[\"controls\"][c][\"elements\"] for c in model_description[\"states\"][state][\"controlled_by\"]\n", " ]))\n", " for control in controls:\n", " model.B[i][(\"B\", \"A\", *control)] = 1.0\n", " model.B[i][(\"C\", \"B\", *control)] = 1.0\n", " model.B[i][(\"D\", \"C\", *control)] = 1.0\n", " model.B[i][(\"D\", \"D\", *control)] = 1.0\n", "\n", "agent = Agent(\n", " model.A, model.B,\n", " B_action_dependencies=B_action_dependencies,\n", " num_controls=num_controls,\n", ")\n", "\n", "# dummy history\n", "# re-write the action sampling to be controlled by jax.random\n", "action_key, obs_key = jr.split(jr.PRNGKey(0))\n", "action = agent.policies[jr.choice(action_key, len(agent.policies))]\n", "observation = [jr.randint(obs_key, (1, 1), 0, d) for d in agent.num_obs]\n", "qs_hist = jtu.tree_map(lambda x: jnp.expand_dims(x, 0), agent.D)\n", "\n", "prior = agent.update_empirical_prior(action, qs_hist)\n", "qs = agent.infer_states(observations=observation, empirical_prior=prior)\n", "\n", "q_pi, G = agent.infer_policies(qs)\n", "action = agent.sample_action(q_pi)\n", "action_multi = agent.decode_multi_actions(action)\n", "action_reconstruct = agent.encode_multi_actions(action_multi)\n", "\n", "print(\"A_dependencies\", agent.A_dependencies)\n", "print(\"B_dependencies\", agent.B_dependencies)\n", "print(\"B_action_dependencies\", agent.B_action_dependencies)\n", "print(\"original control dims\", agent.num_controls_multi)\n", "print(\"flattened control dims\", agent.num_controls)\n", "print(\"original B shapes\", [a.data.shape for a in model.B])\n", "print(\"flattened B shapes\", [a.shape for a in agent.B])\n", "print(\"B normalized\", [jnp.isclose(a.data.sum(0), 1.).all() for a in model.B])\n", "print(\"B flat normalized\", [jnp.isclose(a.sum(1), 1.).all() for a in agent.B])\n", "\n", "print(\"\\n\")\n", "print(\"prior\")\n", "pprint([p.round(2) for p in prior])\n", "print(\"post\")\n", "pprint([p.round(2) for p in qs])\n", "print(\"action\")\n", "pprint(action)\n", "print(\"action_multi\")\n", "pprint(action_multi)\n", "print(\"action_reconstruct\")\n", "pprint(action_reconstruct)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## No action dependency\n", "\n", "In this example, some states do not depend on any action." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A_dependencies [[0]]\n", "B_dependencies [[0], [1]]\n", "B_action_dependencies [[0, 1], []]\n", "original control dims [2, 3]\n", "flattened control dims [6, 1]\n", "original B shapes [(4, 4, 2, 3), (4, 4)]\n", "flattened B shapes [(1, 4, 4, 6), (1, 4, 4, 1)]\n", "B normalized [Array(True, dtype=bool), Array(True, dtype=bool)]\n", "B flat normalized [Array(True, dtype=bool), Array(True, dtype=bool)]\n", "\n", "\n", "prior\n", "[Array([[0. , 0.25, 0.25, 0.5 ]], dtype=float32),\n", " Array([[0. , 0.25, 0.25, 0.5 ]], dtype=float32)]\n", "post\n", "[Array([[[0., 0., 1., 0.]]], dtype=float32),\n", " Array([[[0. , 0.25, 0.25, 0.5 ]]], dtype=float32)]\n", "action\n", "Array([[0, 0]], dtype=int32)\n", "action_multi\n", "Array([[0, 0]], dtype=int32)\n", "action_reconstruct\n", "Array([[0, 0]], dtype=int32)\n" ] } ], "source": [ "model_description = {\n", " \"observations\": {\n", " \"o1\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s1\"]},\n", " },\n", " \"controls\": {\"c1\": {\"elements\": [\"up\", \"down\"]}, \"c2\": {\"elements\": [\"left\", \"right\", \"stay\"]}},\n", " \"states\": {\n", " \"s1\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s1\"], \"controlled_by\": [\"c1\", \"c2\"]},\n", " \"s2\": {\"elements\": [\"A\", \"B\", \"C\", \"D\"], \"depends_on\": [\"s2\"], \"controlled_by\": []},\n", " },\n", "}\n", "\n", "B_action_dependencies = [ \n", " [list(model_description[\"controls\"].keys()).index(i) for i in s[\"controlled_by\"]] \n", " for s in model_description[\"states\"].values()\n", "]\n", "num_controls = [len(c[\"elements\"]) for c in model_description[\"controls\"].values()]\n", "\n", "model = distribution.compile_model(model_description)\n", "\n", "# initialize tensor values\n", "model.A[\"o1\"][\"A\", \"A\"] = 1.0\n", "model.A[\"o1\"][\"B\", \"B\"] = 1.0\n", "model.A[\"o1\"][\"C\", \"C\"] = 1.0\n", "model.A[\"o1\"][\"D\", \"D\"] = 1.0\n", "\n", "for i, state in enumerate(model_description[\"states\"].keys()):\n", " controls = list(itertools.product(*[\n", " model_description[\"controls\"][c][\"elements\"] for c in model_description[\"states\"][state][\"controlled_by\"]\n", " ]))\n", " for control in controls:\n", " model.B[i][(\"B\", \"A\", *control)] = 1.0\n", " model.B[i][(\"C\", \"B\", *control)] = 1.0\n", " model.B[i][(\"D\", \"C\", *control)] = 1.0\n", " model.B[i][(\"D\", \"D\", *control)] = 1.0\n", "\n", "agent = Agent(\n", " model.A, model.B,\n", " B_action_dependencies=B_action_dependencies,\n", " num_controls=num_controls,\n", ")\n", "\n", "# dummy history\n", "action_key, obs_key = jr.split(jr.PRNGKey(0))\n", "action = agent.policies[jr.choice(action_key, len(agent.policies))]\n", "observation = [jr.randint(obs_key, (1, 1), 0, d) for d in agent.num_obs]\n", "qs_hist = jtu.tree_map(lambda x: jnp.expand_dims(x, 0), agent.D)\n", "\n", "prior = agent.update_empirical_prior(action, qs_hist)\n", "qs = agent.infer_states(observations=observation, empirical_prior=prior)\n", "\n", "q_pi, G = agent.infer_policies(qs)\n", "action = agent.sample_action(q_pi)\n", "action_multi = agent.decode_multi_actions(action)\n", "action_reconstruct = agent.encode_multi_actions(action_multi)\n", "\n", "print(\"A_dependencies\", agent.A_dependencies)\n", "print(\"B_dependencies\", agent.B_dependencies)\n", "print(\"B_action_dependencies\", agent.B_action_dependencies)\n", "print(\"original control dims\", agent.num_controls_multi)\n", "print(\"flattened control dims\", agent.num_controls)\n", "print(\"original B shapes\", [a.data.shape for a in model.B])\n", "print(\"flattened B shapes\", [a.shape for a in agent.B])\n", "print(\"B normalized\", [jnp.isclose(a.data.sum(0), 1.).all() for a in model.B])\n", "print(\"B flat normalized\", [jnp.isclose(a.sum(1), 1.).all() for a in agent.B])\n", "\n", "print(\"\\n\")\n", "print(\"prior\")\n", "pprint([p.round(2) for p in prior])\n", "print(\"post\")\n", "pprint([p.round(2) for p in qs])\n", "print(\"action\")\n", "pprint(action)\n", "print(\"action_multi\")\n", "pprint(action_multi)\n", "print(\"action_reconstruct\")\n", "pprint(action_reconstruct)" ] } ], "metadata": { "kernelspec": { "display_name": "pymdp_dev_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/advanced/infer_states_optimization/methods_test.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": 1, "id": "d329903e-0caa-4ad9-8b85-92ed348f1e0f", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import jax.numpy as jnp\n", "import jax.tree_util as jtu\n", "import jax.experimental.sparse as jsparse\n", "from jax import nn, vmap, jit, block_until_ready\n", "from functools import partial\n", "\n", "from pymdp.utils import init_A_and_D_from_spec, get_sample_obs, generate_agent_specs_from_parameter_sets\n", "\n", "# Hybrid\n", "from pymdp.utils import apply_padding_batched\n", "from pymdp.maths import compute_log_likelihoods_padded, deconstruct_lls\n", "\n", "# Hybrid block\n", "from pymdp.utils import build_block_diag_A, preprocess_A_for_block_diag, prepare_obs_for_block_diag, concatenate_observations_block_diag\n", "from pymdp.maths import compute_log_likelihoods_block_diag, deconstruct_log_likelihoods_block_diag\n", "\n", "from pymdp.algos import run_factorized_fpi_hybrid # For hybrid and hybrid block\n", "\n", "# End2end padded\n", "from pymdp.utils import apply_A_end2end_padding_batched, apply_obs_end2end_padding_batched\n", "from pymdp.maths import compute_log_likelihood_per_modality_end2end2_padded\n", "from pymdp.algos import run_factorized_fpi_end2end_padded" ] }, { "cell_type": "code", "execution_count": 2, "id": "87d1c903-5496-4b12-a653-d6a9d8e6337b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'num_factors': 10,\n", " 'num_modalities': 10,\n", " 'num_states': [3, 6, 2, 9, 7, 4, 7, 5, 7, 5],\n", " 'num_obs': [4, 2, 4, 9, 7, 8, 4, 5, 7, 4],\n", " 'A_dependencies': [[1],\n", " [4],\n", " [5, 6],\n", " [0, 8],\n", " [0, 2, 7],\n", " [3, 5],\n", " [6],\n", " [2, 4, 7, 9],\n", " [0, 2, 7, 8],\n", " [7]],\n", " 'metadata': {'num_factors': 'medium',\n", " 'num_modalities': 'medium',\n", " 'state_dim_upper_limit': 'medium',\n", " 'obs_dim_upper_limit': 'medium',\n", " 'dim_sampling_type': 'uniform'}}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Define coordinated parameter sets\n", "# (num_factors, num_modalities, state_dim_upper_limit, obs_dim_upper_limit, dim_sampling_type, label)\n", "parameter_sets = [\n", " (5, 5, 5, 5, 'uniform', 'low'),\n", " (10, 10, 10, 10, 'uniform', 'medium'),\n", " (25, 25, 25, 25, 'uniform', 'high'),\n", " # (125, 125, 125, 125, 'uniform', 'extreme'), # Uncomment to include extreme cases\n", "]\n", "\n", "# Generate agent specs without dumping to file\n", "specs = generate_agent_specs_from_parameter_sets(\n", " parameter_sets,\n", " num_agents_per_set=1,\n", " output_file=None # Don't save to file\n", ")\n", "\n", "spec = specs['arbitrary dependencies'][1]\n", "spec" ] }, { "cell_type": "code", "execution_count": 3, "id": "bc5d11ae-0e03-4ebc-9fb2-e31e51f29b63", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:2025-11-20 23:52:19,919:jax._src.xla_bridge:794: An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n" ] } ], "source": [ "num_iter = 8\n", "batch_size = 4\n", "A_sparsity_level = None # E.g., 0.8 for 80% sparsity\n", "\n", "A, D = init_A_and_D_from_spec(\n", " spec['num_obs'],\n", " spec['num_states'],\n", " spec['A_dependencies'],\n", " A_sparsity_level=A_sparsity_level,\n", " batch_size=batch_size\n", ")\n", "\n", "obs = get_sample_obs(spec['num_obs'], batch_size=batch_size)\n", "o_vec = [nn.one_hot(o, spec['num_obs'][m]) for m, o in enumerate(obs)]\n", "\n", "# place where this happens is important!\n", "# o_vec = jtu.tree_map(lambda x: x[-1], o_vec)" ] }, { "cell_type": "markdown", "id": "c980e4a2-f81a-4279-a9a9-c16d1b2d7db6", "metadata": {}, "source": [ "### Original method imported directly from PyMDP" ] }, { "cell_type": "code", "execution_count": 4, "id": "ef656d7c-b9da-4d9b-990d-a6b7a99ca725", "metadata": {}, "outputs": [], "source": [ "from pymdp.inference import update_posterior_states\n", "\n", "infer_states_orig_pymdp = vmap(\n", " partial(\n", " update_posterior_states,\n", " A_dependencies=spec['A_dependencies'],\n", " num_iter=num_iter,\n", " method='fpi'\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "id": "c2b7676f-58a7-41d3-8e66-31d2f58213b0", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.0911239 , 0.70235616, 0.20651992]],\n", " \n", " [[0.20210403, 0.22807154, 0.56982446]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.3751645 , 0.27490953, 0.34992597]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.5558248 , 0.44417518]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.38312683, 0.6168732 ]],\n", " \n", " [[0.5388057 , 0.46119428]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.1689375 , 0.160291 , 0.1127065 , 0.18204276, 0.21946688,\n", " 0.08239742, 0.07415786]],\n", " \n", " [[0.10790369, 0.22401966, 0.21666421, 0.06581873, 0.10617904,\n", " 0.08600897, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815624, 0.12641437, 0.14349641, 0.20863566,\n", " 0.33044106, 0.02134874]],\n", " \n", " [[0.09764873, 0.2943387 , 0.18542327, 0.14082205, 0.12583902,\n", " 0.07777937, 0.0781489 ]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077353, 0.01719548, 0.18029211, 0.19461532, 0.17712358]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322948]],\n", " \n", " [[0.34862244, 0.24600431, 0.12305126, 0.11314465, 0.16917741]],\n", " \n", " [[0.15003231, 0.08879875, 0.19839822, 0.52532786, 0.03744285]]], dtype=float32),\n", " Array([[[0.11571391, 0.04172199, 0.14292379, 0.21811739, 0.10899252,\n", " 0.2847777 , 0.08775268]],\n", " \n", " [[0.11718995, 0.01083917, 0.22239213, 0.11398617, 0.09531911,\n", " 0.3041632 , 0.13611032]],\n", " \n", " [[0.05459082, 0.1635046 , 0.13142689, 0.20870976, 0.17459586,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454747 , 0.0939365 , 0.19433093, 0.22500299, 0.11097856,\n", " 0.0673811 , 0.16289519]]], dtype=float32),\n", " Array([[[0.2335071 , 0.21891794, 0.16771059, 0.17027749, 0.20958687]],\n", " \n", " [[0.19165832, 0.21907933, 0.20649089, 0.19125326, 0.19151819]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361018, 0.19487286]],\n", " \n", " [[0.24136765, 0.17386995, 0.2222213 , 0.16080104, 0.2017401 ]]], dtype=float32)])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qs = infer_states_orig_pymdp(A, None, o_vec, None, D)\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "markdown", "id": "5525d913-b845-4287-bd5f-d3d7dba44eb8", "metadata": {}, "source": [ "### Hybrid method" ] }, { "cell_type": "code", "execution_count": 6, "id": "dd83c3d3", "metadata": {}, "outputs": [], "source": [ "def infer_states_hybrid(obs_padded, A_padded, D, A_shapes, A_dependencies, num_iter):\n", " lls_padded = compute_log_likelihoods_padded(obs_padded, A_padded)\n", " log_likelihoods = deconstruct_lls(lls_padded, A_shapes)\n", " return vmap(partial(run_factorized_fpi_hybrid, A_dependencies=A_dependencies, num_iter=num_iter))(log_likelihoods, D)" ] }, { "cell_type": "code", "execution_count": 7, "id": "6c778c1e-e373-4603-a244-6f3455a282d8", "metadata": {}, "outputs": [], "source": [ "A_padded = apply_padding_batched(A)\n", "A_shapes = [a.shape for a in A]\n", "\n", "if A_sparsity_level is not None:\n", " A_padded = jsparse.BCOO.fromdense(A_padded, n_batch=1)\n", "\n", "# obs preprocessing\n", "obs_padded = apply_padding_batched(jtu.tree_map(lambda x: jnp.squeeze(x, 1), o_vec))" ] }, { "cell_type": "code", "execution_count": 8, "id": "5398c4aa-77bf-438c-8be8-1a5ab72e3d89", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.0911239 , 0.70235616, 0.20651992]],\n", " \n", " [[0.20210403, 0.22807154, 0.56982446]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.3751645 , 0.27490953, 0.34992597]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.5558248 , 0.44417518]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.38312683, 0.6168732 ]],\n", " \n", " [[0.5388057 , 0.46119428]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.1689375 , 0.160291 , 0.1127065 , 0.18204276, 0.21946688,\n", " 0.08239742, 0.07415786]],\n", " \n", " [[0.10790369, 0.22401966, 0.21666421, 0.06581873, 0.10617904,\n", " 0.08600897, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815624, 0.12641437, 0.14349641, 0.20863566,\n", " 0.33044106, 0.02134874]],\n", " \n", " [[0.09764873, 0.2943387 , 0.18542327, 0.14082205, 0.12583902,\n", " 0.07777937, 0.0781489 ]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077353, 0.01719548, 0.18029211, 0.19461532, 0.17712358]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322948]],\n", " \n", " [[0.34862244, 0.24600431, 0.12305126, 0.11314465, 0.16917741]],\n", " \n", " [[0.15003231, 0.08879875, 0.19839822, 0.52532786, 0.03744285]]], dtype=float32),\n", " Array([[[0.11571391, 0.04172199, 0.14292379, 0.21811739, 0.10899252,\n", " 0.2847777 , 0.08775268]],\n", " \n", " [[0.11718995, 0.01083917, 0.22239213, 0.11398617, 0.09531911,\n", " 0.3041632 , 0.13611032]],\n", " \n", " [[0.05459082, 0.1635046 , 0.13142689, 0.20870976, 0.17459586,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454747 , 0.0939365 , 0.19433093, 0.22500299, 0.11097856,\n", " 0.0673811 , 0.16289519]]], dtype=float32),\n", " Array([[[0.2335071 , 0.21891794, 0.16771059, 0.17027749, 0.20958687]],\n", " \n", " [[0.19165832, 0.21907933, 0.20649089, 0.19125326, 0.19151819]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361018, 0.19487286]],\n", " \n", " [[0.24136765, 0.17386995, 0.2222213 , 0.16080104, 0.2017401 ]]], dtype=float32)])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qs = infer_states_hybrid(obs_padded, A_padded, D, A_shapes, A_dependencies=spec['A_dependencies'], num_iter=num_iter)\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "code", "execution_count": 9, "id": "14c74aed", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.0911239 , 0.70235616, 0.20651992]],\n", " \n", " [[0.20210403, 0.22807154, 0.56982446]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.3751645 , 0.27490953, 0.34992597]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.5558248 , 0.44417518]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.38312683, 0.6168732 ]],\n", " \n", " [[0.5388057 , 0.46119428]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.1689375 , 0.160291 , 0.1127065 , 0.18204276, 0.21946688,\n", " 0.08239742, 0.07415786]],\n", " \n", " [[0.10790369, 0.22401966, 0.21666421, 0.06581873, 0.10617904,\n", " 0.08600897, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815624, 0.12641437, 0.14349641, 0.20863566,\n", " 0.33044106, 0.02134874]],\n", " \n", " [[0.09764873, 0.2943387 , 0.18542327, 0.14082205, 0.12583902,\n", " 0.07777937, 0.0781489 ]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077353, 0.01719548, 0.18029211, 0.19461532, 0.17712358]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322948]],\n", " \n", " [[0.34862244, 0.24600431, 0.12305126, 0.11314465, 0.16917741]],\n", " \n", " [[0.15003231, 0.08879875, 0.19839822, 0.52532786, 0.03744285]]], dtype=float32),\n", " Array([[[0.11571391, 0.04172199, 0.14292379, 0.21811739, 0.10899252,\n", " 0.2847777 , 0.08775268]],\n", " \n", " [[0.11718995, 0.01083917, 0.22239213, 0.11398617, 0.09531911,\n", " 0.3041632 , 0.13611032]],\n", " \n", " [[0.05459082, 0.1635046 , 0.13142689, 0.20870976, 0.17459586,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454747 , 0.0939365 , 0.19433093, 0.22500299, 0.11097856,\n", " 0.0673811 , 0.16289519]]], dtype=float32),\n", " Array([[[0.2335071 , 0.21891794, 0.16771059, 0.17027749, 0.20958687]],\n", " \n", " [[0.19165832, 0.21907933, 0.20649089, 0.19125326, 0.19151819]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361018, 0.19487286]],\n", " \n", " [[0.24136765, 0.17386995, 0.2222213 , 0.16080104, 0.2017401 ]]], dtype=float32)])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# JIT\n", "apply_padding_batched_jit = jit(partial(apply_padding_batched))\n", "infer_states_hybrid_jit = jit(partial(infer_states_hybrid, A_shapes=A_shapes, A_dependencies=spec['A_dependencies'], num_iter=num_iter))\n", "obs_padded = apply_padding_batched_jit(jtu.tree_map(lambda x: jnp.squeeze(x, 1), o_vec))\n", "\n", "qs = infer_states_hybrid_jit(obs_padded, A_padded, D)\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "markdown", "id": "b8ba50c5", "metadata": {}, "source": [ "### Hybrid Block method" ] }, { "cell_type": "code", "execution_count": 10, "id": "9485d771", "metadata": {}, "outputs": [], "source": [ "# Infer states hybrid block\n", "def infer_states_hybrid_block(obs, A_big, D, state_shapes, cuts, A_dependencies, num_iter, use_einsum=False):\n", " \"\"\"Hybrid inference using block diagonal approach for log-likelihood computation.\"\"\"\n", " log_likelihoods = compute_log_likelihoods_block_diag(A_big, obs, state_shapes, cuts, use_einsum=use_einsum)\n", " return vmap(partial(run_factorized_fpi_hybrid, A_dependencies=A_dependencies, num_iter=num_iter))(log_likelihoods, D)" ] }, { "cell_type": "code", "execution_count": 11, "id": "891743ae", "metadata": {}, "outputs": [], "source": [ "# Create a copy with moved axes for block diagonal method (don't modify original A)\n", "A_moveaxis = [jnp.moveaxis(a, 1, -1) for a in A]\n", "# Preprocess A matrices for block diagonal approach\n", "A_big, state_shapes, cuts = preprocess_A_for_block_diag(A_moveaxis)\n", "\n", "if A_sparsity_level is not None:\n", " A_big = jsparse.BCOO.fromdense(A_big, n_batch=1)\n", "\n", "obs_tmp = jtu.tree_map(lambda x: jnp.squeeze(x, 1), o_vec)\n", "obs_big = concatenate_observations_block_diag(obs_tmp)" ] }, { "cell_type": "code", "execution_count": 12, "id": "1d52085c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.0911239 , 0.70235616, 0.20651992]],\n", " \n", " [[0.20210403, 0.22807154, 0.56982446]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.3751645 , 0.27490953, 0.34992597]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.5558248 , 0.44417518]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.38312683, 0.6168732 ]],\n", " \n", " [[0.5388057 , 0.46119428]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.1689375 , 0.160291 , 0.1127065 , 0.18204276, 0.21946688,\n", " 0.08239742, 0.07415786]],\n", " \n", " [[0.10790369, 0.22401966, 0.21666421, 0.06581873, 0.10617904,\n", " 0.08600897, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815624, 0.12641437, 0.14349641, 0.20863566,\n", " 0.33044106, 0.02134874]],\n", " \n", " [[0.09764873, 0.2943387 , 0.18542327, 0.14082205, 0.12583902,\n", " 0.07777937, 0.0781489 ]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077353, 0.01719548, 0.18029211, 0.19461532, 0.17712358]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322948]],\n", " \n", " [[0.34862244, 0.24600431, 0.12305126, 0.11314465, 0.16917741]],\n", " \n", " [[0.15003231, 0.08879875, 0.19839822, 0.52532786, 0.03744285]]], dtype=float32),\n", " Array([[[0.11571391, 0.04172199, 0.14292379, 0.21811739, 0.10899252,\n", " 0.2847777 , 0.08775268]],\n", " \n", " [[0.11718995, 0.01083917, 0.22239213, 0.11398617, 0.09531911,\n", " 0.3041632 , 0.13611032]],\n", " \n", " [[0.05459082, 0.1635046 , 0.13142689, 0.20870976, 0.17459586,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454747 , 0.0939365 , 0.19433093, 0.22500299, 0.11097856,\n", " 0.0673811 , 0.16289519]]], dtype=float32),\n", " Array([[[0.2335071 , 0.21891794, 0.16771059, 0.17027749, 0.20958687]],\n", " \n", " [[0.19165832, 0.21907933, 0.20649089, 0.19125326, 0.19151819]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361018, 0.19487286]],\n", " \n", " [[0.24136765, 0.17386995, 0.2222213 , 0.16080104, 0.2017401 ]]], dtype=float32)])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qs = infer_states_hybrid_block(obs_big, A_big, D, \n", " state_shapes=state_shapes, cuts=cuts, A_dependencies=spec['A_dependencies'], \n", " num_iter=num_iter, use_einsum=False\n", ")\n", "\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "code", "execution_count": 13, "id": "78beb618", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.0911239 , 0.70235616, 0.20651992]],\n", " \n", " [[0.20210403, 0.22807154, 0.56982446]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.3751645 , 0.27490953, 0.34992597]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.5558248 , 0.44417518]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.38312683, 0.6168732 ]],\n", " \n", " [[0.5388057 , 0.46119428]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.1689375 , 0.160291 , 0.1127065 , 0.18204276, 0.21946688,\n", " 0.08239742, 0.07415786]],\n", " \n", " [[0.10790369, 0.22401966, 0.21666421, 0.06581873, 0.10617904,\n", " 0.08600897, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815624, 0.12641437, 0.14349641, 0.20863566,\n", " 0.33044106, 0.02134874]],\n", " \n", " [[0.09764873, 0.2943387 , 0.18542327, 0.14082205, 0.12583902,\n", " 0.07777937, 0.0781489 ]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077353, 0.01719548, 0.18029211, 0.19461532, 0.17712358]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322948]],\n", " \n", " [[0.34862244, 0.24600431, 0.12305126, 0.11314465, 0.16917741]],\n", " \n", " [[0.15003231, 0.08879875, 0.19839822, 0.52532786, 0.03744285]]], dtype=float32),\n", " Array([[[0.11571391, 0.04172199, 0.14292379, 0.21811739, 0.10899252,\n", " 0.2847777 , 0.08775268]],\n", " \n", " [[0.11718995, 0.01083917, 0.22239213, 0.11398617, 0.09531911,\n", " 0.3041632 , 0.13611032]],\n", " \n", " [[0.05459082, 0.1635046 , 0.13142689, 0.20870976, 0.17459586,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454747 , 0.0939365 , 0.19433093, 0.22500299, 0.11097856,\n", " 0.0673811 , 0.16289519]]], dtype=float32),\n", " Array([[[0.2335071 , 0.21891794, 0.16771059, 0.17027749, 0.20958687]],\n", " \n", " [[0.19165832, 0.21907933, 0.20649089, 0.19125326, 0.19151819]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361018, 0.19487286]],\n", " \n", " [[0.24136765, 0.17386995, 0.2222213 , 0.16080104, 0.2017401 ]]], dtype=float32)])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# JIT\n", "use_einsum=False\n", "concatenate_observations_block_diag_jit = jit(partial(concatenate_observations_block_diag)) # just for obs\n", "infer_states_hybrid_block_jit = jit(partial(infer_states_hybrid_block, state_shapes=state_shapes, cuts=cuts, A_dependencies=spec['A_dependencies'], num_iter=num_iter, use_einsum=use_einsum))\n", "obs_big = concatenate_observations_block_diag_jit(obs_tmp) # add padding of obs before running the infer states\n", "\n", "qs = infer_states_hybrid_block_jit(obs_big, A_big, D)\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "markdown", "id": "0020c0e3-4baa-45f7-a920-2640dcc958b9", "metadata": {}, "source": [ "### End2End padded method" ] }, { "cell_type": "code", "execution_count": 14, "id": "1e91bf02", "metadata": {}, "outputs": [], "source": [ "def infer_states_end2end_padded(A_padded, obs_padded, D, A_dependencies, max_obs_dim, max_state_dim, num_iter, sparsity=None):\n", " lls_padded = compute_log_likelihood_per_modality_end2end2_padded(obs_padded, A_padded, sparsity=sparsity)\n", " return run_factorized_fpi_end2end_padded(lls_padded, D, A_dependencies, max_obs_dim, max_state_dim, num_iter)" ] }, { "cell_type": "code", "execution_count": 15, "id": "96d162ed-b35e-44d3-9106-1c37158aab4d", "metadata": {}, "outputs": [], "source": [ "A_padded = apply_A_end2end_padding_batched(A)\n", "\n", "if A_sparsity_level is not None:\n", " A_padded = jsparse.BCOO.fromdense(A_padded)\n", "\n", "max_obs_dim = A_padded.shape[2]\n", "max_state_dim = max(A_padded.shape[3:])\n", "\n", "# obs preprocessing\n", "obs_padded = apply_obs_end2end_padding_batched(jtu.tree_map(lambda x: jnp.squeeze(x, 1), o_vec), max_obs_dim)" ] }, { "cell_type": "code", "execution_count": 16, "id": "72bc7f44-52e9-4843-aef8-f8255fe785fd", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.09112392, 0.70235604, 0.20652005]],\n", " \n", " [[0.202104 , 0.22807139, 0.56982464]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.37516478, 0.27490932, 0.34992588]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.55582505, 0.44417495]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.3831266 , 0.6168734 ]],\n", " \n", " [[0.5388056 , 0.4611944 ]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.16893746, 0.16029103, 0.11270652, 0.18204279, 0.21946692,\n", " 0.0823974 , 0.07415791]],\n", " \n", " [[0.10790369, 0.2240197 , 0.21666422, 0.06581873, 0.10617904,\n", " 0.08600904, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815625, 0.12641439, 0.14349648, 0.20863557,\n", " 0.33044103, 0.02134874]],\n", " \n", " [[0.09764872, 0.29433855, 0.18542336, 0.14082211, 0.12583902,\n", " 0.07777937, 0.07814886]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077335, 0.01719547, 0.18029204, 0.19461544, 0.17712368]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322947]],\n", " \n", " [[0.34862235, 0.24600424, 0.12305134, 0.11314452, 0.16917753]],\n", " \n", " [[0.15003254, 0.08879873, 0.19839816, 0.5253277 , 0.03744284]]], dtype=float32),\n", " Array([[[0.11571389, 0.04172199, 0.14292377, 0.21811737, 0.1089925 ,\n", " 0.2847778 , 0.08775266]],\n", " \n", " [[0.11719004, 0.01083917, 0.22239207, 0.11398614, 0.09531904,\n", " 0.30416313, 0.13611037]],\n", " \n", " [[0.05459085, 0.16350462, 0.13142684, 0.20870967, 0.17459588,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454746 , 0.09393647, 0.19433096, 0.22500303, 0.11097853,\n", " 0.06738115, 0.16289523]]], dtype=float32),\n", " Array([[[0.23350713, 0.21891789, 0.16771066, 0.17027755, 0.20958683]],\n", " \n", " [[0.19165839, 0.2190793 , 0.20649076, 0.19125327, 0.19151816]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361015, 0.19487286]],\n", " \n", " [[0.24136762, 0.17386994, 0.22222117, 0.1608011 , 0.20174012]]], dtype=float32)])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qs = infer_states_end2end_padded(A_padded, obs_padded, D, spec['A_dependencies'], max_obs_dim, max_state_dim, num_iter, sparsity='ll_only')\n", "\n", "[q.shape for q in qs], qs" ] }, { "cell_type": "code", "execution_count": 17, "id": "5f161096", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(4, 1, 3),\n", " (4, 1, 6),\n", " (4, 1, 2),\n", " (4, 1, 9),\n", " (4, 1, 7),\n", " (4, 1, 4),\n", " (4, 1, 7),\n", " (4, 1, 5),\n", " (4, 1, 7),\n", " (4, 1, 5)],\n", " [Array([[[0.09112392, 0.70235604, 0.20652005]],\n", " \n", " [[0.202104 , 0.22807139, 0.56982464]],\n", " \n", " [[0.3876841 , 0.3879837 , 0.2243322 ]],\n", " \n", " [[0.37516478, 0.27490932, 0.34992588]]], dtype=float32),\n", " Array([[[0.15824087, 0.183674 , 0.26761115, 0.09957846, 0.20257226,\n", " 0.08832329]],\n", " \n", " [[0.23064205, 0.02032886, 0.13066185, 0.01698621, 0.2857863 ,\n", " 0.31559473]],\n", " \n", " [[0.19148783, 0.11801518, 0.15054731, 0.13707514, 0.17550918,\n", " 0.22736534]],\n", " \n", " [[0.16028336, 0.27957812, 0.16871531, 0.12887648, 0.1418996 ,\n", " 0.12064715]]], dtype=float32),\n", " Array([[[0.55582505, 0.44417495]],\n", " \n", " [[0.549685 , 0.450315 ]],\n", " \n", " [[0.3831266 , 0.6168734 ]],\n", " \n", " [[0.5388056 , 0.4611944 ]]], dtype=float32),\n", " Array([[[0.07716177, 0.10925393, 0.07744848, 0.1075874 , 0.16774674,\n", " 0.09816181, 0.09280077, 0.1271883 , 0.1426509 ]],\n", " \n", " [[0.12493826, 0.16711089, 0.15916635, 0.13118526, 0.06024319,\n", " 0.04707498, 0.12128211, 0.10770807, 0.08129089]],\n", " \n", " [[0.1815095 , 0.10422336, 0.06684336, 0.14435901, 0.13004695,\n", " 0.0635796 , 0.05770647, 0.09602303, 0.15570885]],\n", " \n", " [[0.04864096, 0.08837192, 0.09715893, 0.13307187, 0.1358143 ,\n", " 0.18936108, 0.10949196, 0.09659162, 0.10149743]]], dtype=float32),\n", " Array([[[0.16893746, 0.16029103, 0.11270652, 0.18204279, 0.21946692,\n", " 0.0823974 , 0.07415791]],\n", " \n", " [[0.10790369, 0.2240197 , 0.21666422, 0.06581873, 0.10617904,\n", " 0.08600904, 0.1934056 ]],\n", " \n", " [[0.03150751, 0.13815625, 0.12641439, 0.14349648, 0.20863557,\n", " 0.33044103, 0.02134874]],\n", " \n", " [[0.09764872, 0.29433855, 0.18542336, 0.14082211, 0.12583902,\n", " 0.07777937, 0.07814886]]], dtype=float32),\n", " Array([[[0.20188354, 0.20390284, 0.35773486, 0.23647875]],\n", " \n", " [[0.13832287, 0.417142 , 0.29778096, 0.14675426]],\n", " \n", " [[0.14250487, 0.34247938, 0.2867788 , 0.22823687]],\n", " \n", " [[0.33311817, 0.08985048, 0.27870888, 0.2983224 ]]], dtype=float32),\n", " Array([[[0.25531998, 0.09805848, 0.00180036, 0.06169656, 0.30057994,\n", " 0.10489379, 0.17765091]],\n", " \n", " [[0.2913621 , 0.11028862, 0.06915001, 0.06127482, 0.01146838,\n", " 0.2958903 , 0.16056576]],\n", " \n", " [[0.10321112, 0.10843234, 0.09066889, 0.10762182, 0.19040616,\n", " 0.18881004, 0.21084957]],\n", " \n", " [[0.0594087 , 0.15811725, 0.18402615, 0.22240478, 0.20785518,\n", " 0.06183277, 0.10635528]]], dtype=float32),\n", " Array([[[0.43077335, 0.01719547, 0.18029204, 0.19461544, 0.17712368]],\n", " \n", " [[0.20952433, 0.28238228, 0.26831535, 0.22654854, 0.01322947]],\n", " \n", " [[0.34862235, 0.24600424, 0.12305134, 0.11314452, 0.16917753]],\n", " \n", " [[0.15003254, 0.08879873, 0.19839816, 0.5253277 , 0.03744284]]], dtype=float32),\n", " Array([[[0.11571389, 0.04172199, 0.14292377, 0.21811737, 0.1089925 ,\n", " 0.2847778 , 0.08775266]],\n", " \n", " [[0.11719004, 0.01083917, 0.22239207, 0.11398614, 0.09531904,\n", " 0.30416313, 0.13611037]],\n", " \n", " [[0.05459085, 0.16350462, 0.13142684, 0.20870967, 0.17459588,\n", " 0.15282223, 0.11434983]],\n", " \n", " [[0.1454746 , 0.09393647, 0.19433096, 0.22500303, 0.11097853,\n", " 0.06738115, 0.16289523]]], dtype=float32),\n", " Array([[[0.23350713, 0.21891789, 0.16771066, 0.17027755, 0.20958683]],\n", " \n", " [[0.19165839, 0.2190793 , 0.20649076, 0.19125327, 0.19151816]],\n", " \n", " [[0.20866643, 0.18651229, 0.23633833, 0.17361015, 0.19487286]],\n", " \n", " [[0.24136762, 0.17386994, 0.22222117, 0.1608011 , 0.20174012]]], dtype=float32)])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# JIT\n", "apply_obs_padding_batched_jit = jit(partial(apply_obs_end2end_padding_batched, max_obs_dim=max_obs_dim))\n", "infer_states_partially_padded_jit = jit(partial(infer_states_end2end_padded, A_dependencies=spec['A_dependencies'], max_obs_dim=max_obs_dim, max_state_dim=max_state_dim, num_iter=num_iter, sparsity='ll_only'))\n", "obs_padded = apply_obs_padding_batched_jit(jtu.tree_map(lambda x: jnp.squeeze(x, 1), o_vec))\n", "\n", "qs = infer_states_partially_padded_jit(A_padded, obs_padded, D)\n", "[q.shape for q in qs], qs" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.18" } }, "nbformat": 4, "nbformat_minor": 5 } ================================================ FILE: examples/advanced/pymdp_with_neural_encoder.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "id": "0", "metadata": {}, "source": [ "# Training a neural network to transform continuous into discrete observations for a `pymdp` Agent\n", "\n", "With `pymdp`'s JAX backend, it's straightforward to combine differentiable modules with `pymdp`'s active inference processes. We can use tools from `JAX`'s rich neural network ecosystem (`flax`, `optax`, and `equinox`, to name a few) and combine them with active inference agents in creative ways.\n", "\n", "In this tutorial, we use a simple neural network to embed continuous observations into an `pymdp` agent's observation space; we can train the encoder end-to-end, enabled by JAX's native compatibility with autodifferentiable programs and `pymdp`'s autodifferentiable `Agent` and `Agent` methods.\n", "\n", "For this simple demo, we fix a discrete generative model (fixed/known `A`, `B`) and train a simple MLP (in `equinox`) to map continuous observations into categorical classes, which can be ingested as observations by the `pymdp` Agent. Because the inference path is differentiable, gradients from a variational objective can flow back through `Agent`-level methods (like `Agent.infer_states`) into encoder parameters.\n", "\n" ] }, { "cell_type": "markdown", "id": "1", "metadata": {}, "source": [ "## 1. Imports\n", "\n", "We use JAX/Equinox for pymdp and building our neural network, `pymdp.Agent` for active inference, and Matplotlib for diagnostics and animations.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "2", "metadata": {}, "outputs": [], "source": [ "import time\n", "from itertools import permutations\n", "\n", "import equinox as eqx\n", "import jax\n", "import jax.nn as jnn\n", "import jax.numpy as jnp\n", "import jax.random as jr\n", "import jax.tree_util as jtu\n", "import matplotlib.pyplot as plt\n", "from matplotlib import animation\n", "\n", "from pymdp.agent import Agent\n", "plt.rcParams['animation.html'] = 'jshtml'\n" ] }, { "cell_type": "markdown", "id": "3", "metadata": {}, "source": [ "## 2. Setup\n", "\n", "We define a 5-state line world with local controls (`back`, `stay`, `forward`) and set some training hyperparameters." ] }, { "cell_type": "code", "execution_count": null, "id": "4", "metadata": {}, "outputs": [], "source": [ "# Reproducibility\n", "GLOBAL_KEY = jr.PRNGKey(1)\n", "\n", "# Problem size\n", "K = 5\n", "O = K\n", "U = 3\n", "BACK_ACTION = 0\n", "STAY_ACTION = 1\n", "FORWARD_ACTION = 2\n", "D = 2\n", "T = 6\n", "POLICY_LEN = 4\n", "\n", "# Data and training settings\n", "N_TRAIN = 640\n", "N_VAL = 320\n", "BATCH_SIZE = 16\n", "TRAIN_STEPS = 200\n", "CHECKPOINT_EVERY = 20\n", "LR = 1e-3\n", "\n", "# Encoder architecture\n", "ENCODER_WIDTH = 256\n", "ENCODER_DEPTH = 3\n", "LOGIT_TEMPERATURE = 0.15\n", "\n", "# Loss weights\n", "TEMPORAL_CONSISTENCY_WEIGHT = 8.0\n", "\n", "# Numerical stability\n", "EPS_A = 1e-4\n", "EPS = 1e-8\n", "\n", "# Observation model / dynamics assumptions\n", "TRANSITION_NOISE = 0.1\n", "\n", "# Continuous emissions: one Gaussian mean per discrete state\n", "GAUSSIAN_MEANS = jnp.array([\n", " [ 0.0, 3.2],\n", " [ 3.0, 1.0],\n", " [ 1.9, -2.6],\n", " [-1.9, -2.6],\n", " [-3.0, 1.0],\n", "])\n", "GAUSSIAN_SCALE = 1.0\n", "\n", "TARGET_STATE = K - 1\n", "START_STATE = 0\n", "ROLLOUT_HORIZON = 8" ] }, { "cell_type": "markdown", "id": "5", "metadata": {}, "source": [ "## 3. Build the Fixed Discrete Agent\n", "\n", "The agent's generative model is fixed throughout training:\n", "\n", "- `A`: epsilon-smoothed identity (observation categories aligned with hidden states)\n", "- `B`: line dynamics with action-conditioned transitions\n", "- `C`: preference for the terminal state\n", "- `D`: uniform prior over initial hidden states\n", "\n", "Only the front-end encoder is optimized.\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A fixed diagonal: [1.0, 1.0, 1.0, 1.0, 1.0]\n", "Local transitions by state:\n", " state 0: back -> 0, stay -> 0, forward -> 1\n", " state 1: back -> 0, stay -> 1, forward -> 2\n", " state 2: back -> 1, stay -> 2, forward -> 3\n", " state 3: back -> 2, stay -> 3, forward -> 4\n", " state 4: back -> 3, stay -> 4, forward -> 4\n" ] } ], "source": [ "def make_eps_identity_A(num_states: int, eps: float) -> jnp.ndarray:\n", " eye = jnp.eye(num_states)\n", " off = (1.0 - eye) * (eps / (num_states - 1))\n", " return (1.0 - eps) * eye + off\n", "\n", "\n", "def make_B_line(num_states: int, num_controls: int, transition_noise: float) -> jnp.ndarray:\n", "\n", " B_det = jnp.zeros((num_states, num_states, num_controls))\n", "\n", " for s in range(num_states):\n", " back_next = max(s - 1, 0)\n", " stay_next = s\n", " forward_next = min(s + 1, num_states - 1)\n", "\n", " B_det = B_det.at[back_next, s, BACK_ACTION].set(1.0)\n", " B_det = B_det.at[stay_next, s, STAY_ACTION].set(1.0)\n", " B_det = B_det.at[forward_next, s, FORWARD_ACTION].set(1.0)\n", "\n", " B = (1.0 - transition_noise) * B_det + transition_noise * (jnp.ones_like(B_det) / num_states)\n", " B = B / jnp.sum(B, axis=0, keepdims=True)\n", " return B\n", "\n", "\n", "A_FIXED_SINGLE = make_eps_identity_A(K, EPS_A)\n", "B_TRUE = make_B_line(K, U, TRANSITION_NOISE)\n", "\n", "\n", "def build_agent(batch_size: int) -> Agent:\n", " A = [jnp.broadcast_to(A_FIXED_SINGLE, (batch_size, O, K))]\n", " B = [jnp.broadcast_to(B_TRUE, (batch_size, K, K, U))]\n", "\n", " C_single = jnp.zeros((O,)).at[TARGET_STATE].set(8.0)\n", " C = [jnp.broadcast_to(C_single, (batch_size, O))]\n", "\n", " D_single = jnp.ones((K,)) / K\n", " D = [jnp.broadcast_to(D_single, (batch_size, K))]\n", "\n", " return Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " A_dependencies=[[0]],\n", " B_dependencies=[[0]],\n", " num_controls=[U],\n", " batch_size=batch_size,\n", " policy_len=POLICY_LEN,\n", " categorical_obs=True,\n", " inference_algo='fpi',\n", " num_iter=1,\n", " action_selection='deterministic',\n", " sampling_mode='full',\n", " use_utility=True,\n", " use_states_info_gain=True, # although it doesn't matter here\n", " use_param_info_gain=False,\n", " learn_A=False,\n", " learn_B=False,\n", " )\n", "\n", "\n", "print('A fixed diagonal:', jnp.round(jnp.diag(A_FIXED_SINGLE), 3).tolist())\n", "print('Local transitions by state:')\n", "for s in range(K):\n", " to_back = int(jnp.argmax(B_TRUE[:, s, BACK_ACTION]))\n", " to_stay = int(jnp.argmax(B_TRUE[:, s, STAY_ACTION]))\n", " to_fwd = int(jnp.argmax(B_TRUE[:, s, FORWARD_ACTION]))\n", " print(f' state {s}: back -> {to_back}, stay -> {to_stay}, forward -> {to_fwd}')" ] }, { "cell_type": "markdown", "id": "7", "metadata": {}, "source": [ "## 4. Generate Offline Continuous Trajectories\n", "\n", "We simulate offline sequences with balanced state coverage and random actions.\n", "\n", "Each discrete state emits a 2D Gaussian sample, giving paired trajectories of:\n", "\n", "- continuous observations `x_t`\n", "- latent states `s_t` (for evaluation only)\n", "- actions `a_t` (used to propagate empirical priors during training)\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "8", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "W0310 14:07:59.095707 1229360 cpp_gen_intrinsics.cc:74] Empty bitcode string provided for eigen. Optimizations relying on this IR will be disabled.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "train x_seq: (640, 6, 2)\n", "train s_seq: (640, 6)\n", "train a_seq: (640, 6, 1)\n", "train state proportions: [0.21300001 0.201 0.194 0.19600001 0.19500001]\n", "val state proportions: [0.21100001 0.20300001 0.20500001 0.19500001 0.186 ]\n", "train action proportions: [0.34600002 0.324 0.33 ]\n", "val action proportions: [0.356 0.312 0.33100003]\n" ] } ], "source": [ "def sample_categorical_batch(key: jnp.ndarray, probs: jnp.ndarray) -> jnp.ndarray:\n", " keys = jr.split(key, probs.shape[0])\n", " return jax.vmap(lambda k, p: jr.categorical(k, jnp.log(jnp.clip(p, a_min=EPS))))(keys, probs).astype(jnp.int32)\n", "\n", "\n", "def sample_balanced_initial_states(key: jnp.ndarray, num_sequences: int) -> jnp.ndarray:\n", " reps = (num_sequences + K - 1) // K\n", " base = jnp.tile(jnp.arange(K, dtype=jnp.int32), reps)[:num_sequences]\n", " perm = jr.permutation(key, num_sequences)\n", " return base[perm]\n", "\n", "\n", "def sample_uniform_actions(key: jnp.ndarray, num_sequences: int) -> jnp.ndarray:\n", " return jr.randint(key, shape=(num_sequences,), minval=0, maxval=U).astype(jnp.int32)\n", "\n", "\n", "def simulate_gaussian_sequences(\n", " key: jnp.ndarray,\n", " num_sequences: int,\n", " seq_len: int,\n", " means: jnp.ndarray,\n", " scale: float,\n", "):\n", " key_init, key_loop = jr.split(key, 2)\n", " s_t = sample_balanced_initial_states(key_init, num_sequences)\n", "\n", " xs, ss, acts = [], [], []\n", "\n", " for _ in range(seq_len):\n", " key_loop, key_action, key_obs, key_trans = jr.split(key_loop, 4)\n", "\n", " a_t = sample_uniform_actions(key_action, num_sequences)\n", " x_t = means[s_t] + scale * jr.normal(key_obs, (num_sequences, D))\n", "\n", " xs.append(x_t)\n", " ss.append(s_t)\n", " acts.append(a_t[:, None])\n", "\n", " next_probs = jax.vmap(lambda s, a: B_TRUE[:, s, a])(s_t, a_t)\n", " s_t = sample_categorical_batch(key_trans, next_probs)\n", "\n", " return {\n", " 'x_seq': jnp.stack(xs, axis=1),\n", " 's_seq': jnp.stack(ss, axis=1),\n", " 'a_seq': jnp.stack(acts, axis=1),\n", " }\n", "\n", "\n", "def state_props(data):\n", " counts = jnp.bincount(data['s_seq'].reshape(-1), length=K)\n", " return counts / jnp.sum(counts)\n", "\n", "\n", "def action_props(data):\n", " counts = jnp.bincount(data['a_seq'][..., 0].reshape(-1), length=U)\n", " return counts / jnp.sum(counts)\n", "\n", "\n", "GLOBAL_KEY, key_train, key_val, key_encoder = jr.split(GLOBAL_KEY, 4)\n", "train_data = simulate_gaussian_sequences(key_train, N_TRAIN, T, GAUSSIAN_MEANS, GAUSSIAN_SCALE)\n", "val_data = simulate_gaussian_sequences(key_val, N_VAL, T, GAUSSIAN_MEANS, GAUSSIAN_SCALE)\n", "\n", "print('train x_seq:', train_data['x_seq'].shape)\n", "print('train s_seq:', train_data['s_seq'].shape)\n", "print('train a_seq:', train_data['a_seq'].shape)\n", "\n", "print('train state proportions:', jnp.round(state_props(train_data), 3))\n", "print('val state proportions:', jnp.round(state_props(val_data), 3))\n", "print('train action proportions:', jnp.round(action_props(train_data), 3))\n", "print('val action proportions:', jnp.round(action_props(val_data), 3))" ] }, { "cell_type": "markdown", "id": "9", "metadata": {}, "source": [ "## 5. Define the Differentiable Front-End\n", "\n", "The encoder is an Equinox MLP:\n", "\n", "`x_t -> logits_o_t -> softmax -> o_hat_t`\n", "\n", "`o_hat_t` is passed directly to `Agent.infer_states` as a categorical observation distribution.\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "10", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "encoder initialized\n" ] } ], "source": [ "class ObservationEncoder(eqx.Module):\n", " mlp: eqx.nn.MLP\n", "\n", " def __init__(self, key: jnp.ndarray, width: int = ENCODER_WIDTH, depth: int = ENCODER_DEPTH):\n", " self.mlp = eqx.nn.MLP(\n", " in_size=D,\n", " out_size=O,\n", " width_size=width,\n", " depth=depth,\n", " activation=jnn.tanh,\n", " final_activation=lambda x: x,\n", " key=key,\n", " )\n", "\n", " def __call__(self, x: jnp.ndarray) -> jnp.ndarray:\n", " return self.mlp(x)\n", "\n", "\n", "class FrontendModel(eqx.Module):\n", " encoder: ObservationEncoder\n", "\n", " def __init__(self, key_encoder: jnp.ndarray):\n", " self.encoder = ObservationEncoder(key_encoder)\n", "\n", "\n", "def model_obs_categorical(model: FrontendModel, x_t: jnp.ndarray):\n", " logits = jax.vmap(model.encoder)(x_t) / LOGIT_TEMPERATURE\n", " probs = jnn.softmax(logits, axis=-1)\n", " probs = jnp.clip(probs, a_min=EPS)\n", " probs = probs / probs.sum(axis=-1, keepdims=True)\n", " return [probs]\n", "\n", "\n", "key_encoder, _ = jr.split(key_encoder)\n", "model_init = FrontendModel(key_encoder)\n", "print('encoder initialized')" ] }, { "cell_type": "markdown", "id": "11", "metadata": {}, "source": [ "## 6. Define the Training Objective\n", "\n", "We optimize a label-free objective composed of:\n", "\n", "- canonical state-level variational free energy (via `Agent.infer_states(..., return_info=True)`) (still ignores complexity / KL terms related to parameters A, B, D)\n", "- temporal observation consistency between `o_hat_{t+1}` and dynamics-predicted next-state beliefs projected through `A`\n", "\n", "Objective:\n", "\n", "`loss = mean_t VFE_t + lambda_temp * KL_temporal`\n", "\n", "This is the key mechanism that encourages the encoder to partition continuous space into discrete categories compatible with the fixed agent model.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "12", "metadata": {}, "outputs": [], "source": [ "def temporal_obs_consistency_kl(obs_seq: jnp.ndarray, pred_next_state_seq: jnp.ndarray):\n", " if obs_seq.shape[1] <= 1:\n", " return jnp.array(0.0)\n", "\n", " pred_obs_next = jnp.einsum('btk,ok->bto', pred_next_state_seq, A_FIXED_SINGLE)\n", " pred_obs_next = jnp.clip(pred_obs_next, a_min=EPS)\n", " pred_obs_next = pred_obs_next / pred_obs_next.sum(axis=-1, keepdims=True)\n", "\n", " obs_next = jnp.clip(obs_seq[:, 1:, :], a_min=EPS)\n", " kl = jnp.sum(obs_next * (jnp.log(obs_next) - jnp.log(pred_obs_next)), axis=-1)\n", " return jnp.mean(kl)\n", "\n", "\n", "def sequence_loss_terms(model: FrontendModel, batch: dict, agent: Agent):\n", " batch_size = batch['x_seq'].shape[0]\n", "\n", " prior = agent.D\n", " total_vfe = jnp.array(0.0)\n", " obs_seq = []\n", " pred_next_state = []\n", "\n", " n_steps = batch['x_seq'].shape[1]\n", "\n", " for t in range(n_steps):\n", " x_t = batch['x_seq'][:, t, :]\n", " obs_t = model_obs_categorical(model, x_t)\n", " obs_seq.append(obs_t[0])\n", "\n", " qs_hist_t, info_t = agent.infer_states(\n", " obs_t,\n", " empirical_prior=prior,\n", " return_info=True,\n", " )\n", "\n", " F_t = info_t['vfe']\n", " total_vfe = total_vfe + jnp.mean(F_t)\n", "\n", " a_t = batch['a_seq'][:, t, :]\n", " prior_next = agent.update_empirical_prior(a_t, qs_hist_t)\n", " if t < n_steps - 1:\n", " pred_next_state.append(prior_next[0])\n", " prior = prior_next\n", "\n", " obs_seq = jnp.stack(obs_seq, axis=1)\n", " pred_next_state = jnp.stack(pred_next_state, axis=1) if n_steps > 1 else jnp.zeros((batch_size, 0, K))\n", "\n", " mean_vfe = total_vfe / n_steps\n", " temporal_kl = temporal_obs_consistency_kl(obs_seq, pred_next_state)\n", " total = mean_vfe + TEMPORAL_CONSISTENCY_WEIGHT * temporal_kl\n", "\n", " return total, mean_vfe, temporal_kl, obs_seq\n", "\n", "\n", "def sequence_objective(model: FrontendModel, batch: dict, agent: Agent):\n", " total, _, _, _ = sequence_loss_terms(model, batch, agent)\n", " return total\n", "\n", "\n", "def sample_batch(key: jnp.ndarray, data: dict, batch_size: int):\n", " idx = jr.choice(key, data['x_seq'].shape[0], shape=(batch_size,), replace=False)\n", " return {k: v[idx] for k, v in data.items()}\n", "\n", "\n", "def best_aligned_accuracy(true_labels: jnp.ndarray, pred_labels: jnp.ndarray):\n", " t = true_labels.reshape(-1).astype(jnp.int32)\n", " p = pred_labels.reshape(-1).astype(jnp.int32)\n", "\n", " best_acc = -1.0\n", " best_perm = tuple(range(K))\n", " for perm in permutations(range(K)):\n", " p_mapped = jnp.array(perm)[p]\n", " acc = float(jnp.mean(p_mapped == t))\n", " if acc > best_acc:\n", " best_acc = acc\n", " best_perm = perm\n", " return best_acc, best_perm\n", "\n", "\n", "def infer_qs_sequence(model: FrontendModel, batch: dict, agent: Agent):\n", " prior = agent.D\n", " qs_all = []\n", "\n", " for t in range(batch['x_seq'].shape[1]):\n", " x_t = batch['x_seq'][:, t, :]\n", " obs_t = model_obs_categorical(model, x_t)\n", " qs_hist_t = agent.infer_states(obs_t, empirical_prior=prior)\n", " qs_t = qs_hist_t[0][:, -1, :]\n", " qs_all.append(qs_t)\n", "\n", " a_t = batch['a_seq'][:, t, :]\n", " prior = agent.update_empirical_prior(a_t, qs_hist_t)\n", "\n", " return jnp.stack(qs_all, axis=1)\n", "\n", "\n", "def predict_obs_idx(model: FrontendModel, x_points: jnp.ndarray):\n", " logits = jax.vmap(model.encoder)(x_points) / LOGIT_TEMPERATURE\n", " return jnp.argmax(logits, axis=-1)" ] }, { "cell_type": "markdown", "id": "13", "metadata": {}, "source": [ "## 7. Train the Encoder\n", "\n", "We train with minibatches sampled from offline trajectories.\n", "\n", "At each timestep in a sequence, the notebook:\n", "\n", "1. encodes `x_t` to `o_hat_t`\n", "2. runs `infer_states(o_hat_t, prior_t)`\n", "3. accumulates VFE\n", "4. updates prior using observed `a_t`\n", "5. accumulates temporal consistency across steps\n", "\n", "Gradients are computed with `eqx.filter_value_and_grad` and applied directly to encoder parameters.\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "14", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_16049/1731807479.py:39: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "initial objective: 15.04537582397461\n", "training finished in 5.10s\n", "final train total/vfe/temp: 6.0631256103515625 1.2384639978408813 0.6030827164649963\n", "final val total/vfe/temp: 4.517769813537598 1.1381111145019531 0.42245736718177795\n" ] } ], "source": [ "train_agent = build_agent(BATCH_SIZE)\n", "\n", "@eqx.filter_jit\n", "def train_step(model: FrontendModel, batch: dict):\n", " loss, grads = eqx.filter_value_and_grad(sequence_objective)(model, batch, train_agent)\n", " updates = jtu.tree_map(lambda g: -LR * g if g is not None else None, grads)\n", " model = eqx.apply_updates(model, updates)\n", " return model, loss, grads\n", "\n", "\n", "def evaluate_model(model_eval: FrontendModel, batch: dict, agent: Agent):\n", " qs_seq = infer_qs_sequence(model_eval, batch, agent)\n", " pred_states = jnp.argmax(qs_seq, axis=-1)\n", " raw_acc = float(jnp.mean(pred_states == batch['s_seq']))\n", " aligned_acc, best_perm = best_aligned_accuracy(batch['s_seq'], pred_states)\n", "\n", " total, mean_vfe, temporal_kl, _ = sequence_loss_terms(model_eval, batch, agent)\n", "\n", " return {\n", " 'raw_acc': raw_acc,\n", " 'aligned_acc': float(aligned_acc),\n", " 'best_perm': best_perm,\n", " 'total': float(total),\n", " 'vfe': float(mean_vfe),\n", " 'temporal_kl': float(temporal_kl),\n", " 'pred_states': pred_states,\n", " }\n", "\n", "\n", "GLOBAL_KEY, key_probe = jr.split(GLOBAL_KEY)\n", "probe_batch = sample_batch(key_probe, train_data, BATCH_SIZE)\n", "probe_loss, probe_grads = eqx.filter_value_and_grad(sequence_objective)(model_init, probe_batch, train_agent)\n", "print('initial objective:', float(probe_loss))\n", "\n", "model = model_init\n", "train_total_curve = []\n", "train_vfe_curve = []\n", "train_temp_curve = []\n", "val_total_curve = []\n", "val_vfe_curve = []\n", "val_temp_curve = []\n", "curve_steps = []\n", "\n", "start = time.time()\n", "for step in range(TRAIN_STEPS):\n", " GLOBAL_KEY, key_batch, key_val = jr.split(GLOBAL_KEY, 3)\n", " train_batch = sample_batch(key_batch, train_data, BATCH_SIZE)\n", " model, loss, grads = train_step(model, train_batch)\n", "\n", " if (step % CHECKPOINT_EVERY == 0) or (step == TRAIN_STEPS - 1):\n", " val_batch = sample_batch(key_val, val_data, BATCH_SIZE)\n", "\n", " train_metrics = evaluate_model(model, train_batch, train_agent)\n", " val_metrics = evaluate_model(model, val_batch, train_agent)\n", "\n", " train_total_curve.append(train_metrics['total'])\n", " train_vfe_curve.append(train_metrics['vfe'])\n", " train_temp_curve.append(train_metrics['temporal_kl'])\n", " val_total_curve.append(val_metrics['total'])\n", " val_vfe_curve.append(val_metrics['vfe'])\n", " val_temp_curve.append(val_metrics['temporal_kl'])\n", " curve_steps.append(step)\n", "\n", "elapsed = time.time() - start\n", "print(f'training finished in {elapsed:.2f}s')\n", "print('final train total/vfe/temp:', train_total_curve[-1], train_vfe_curve[-1], train_temp_curve[-1])\n", "print('final val total/vfe/temp:', val_total_curve[-1], val_vfe_curve[-1], val_temp_curve[-1])" ] }, { "cell_type": "markdown", "id": "15", "metadata": {}, "source": [ "## 8. Evaluate Representation Quality\n", "\n", "We evaluate both:\n", "\n", "- encoder-level discrete assignments (`argmax` over encoder logits)\n", "- inferred-state assignments (`argmax` over `q(s_t)`)\n", "\n", "To account for permutation symmetry, accuracy is reported after best label alignment.\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "16", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_16049/1731807479.py:39: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Encoder aligned acc (pre/post): 0.5838541984558105 0.9515625238418579\n", "Inferred-state aligned acc (pre/post): 0.48750001192092896 0.9630208611488342\n" ] }, { "data": { "image/png": "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0vxEXj/peGR6sS5rMKXHyX0k4/Cdd95R1yUoKXUWy5Yta/RxExEREaUkXmOnFkMY+jgiIrIO1tkKSYdTi4nMgnQX3r9/vwry3b9//4UZfSVKlFCNP44dO4bjx4/j7bffzpQMQBmTdBeWacAyJiFdiTdv3qzqHEpwb+HChZg5c2aieoIpPU7GLNmO0sBEpib369cPd+7cMfqYiYiIiIiIiIzNRoKD+009EiKbJsE1ybyTTDrpVPyi+oHSFES6FtepU0d1KW7RogWqVKli9DFJIxQJVkpHYRmTkNeRuoFLly5V3ZVHjx6t7ieZjC963MiRI9VjZayNGjVSzUrat29v9DETERERvWxasaELERHZLuudVqzrWCxuHwdingJObqYeEZFNkmm5e/fuTbROMvA0muSt8WT9li1bEq0bMGBAoutJpxmn9DyPHj164Zhq1aqlMhOT6tixo1rS8zjpYvz333+/8PW2bdv2wtuJiIiIMiIO9mox7LFERGTLrDtzMFshwNMXiI8Fbh019WiIiIiIiIgyheZZzUFDFnksERHZLusODtrZAX7VtZeDDph6NERERERERJmC04qJiMhQ1h0cFGxKQkREREREVi5OY5+hhYiIbJf17wUSNiVJoS4ZERERERERERGRrbL+4GC+AMDBGYi4D4RcMfVoiIiIiIiIjC4edoiHvYELaw4SEdky6w8OOroA+StrL7PuIBERERERWSHWHCQiIkNZf3BQ+NXQ/rzBpiRERERERGR9WHOQiIgM5QhbUPBZcJCZg0REREREZLXTig2bHsxpxUREts3RpjIH75wGIsMAV29Tj4iIiIiIiMhopHZgnIETw+LBxo1ERLbMNqYVe/kC2QoDstO7ecjUoyEiAxQpUgQzZswwm233xRdfoFKlSqYeBhEREREREVGG2EZwUPjV1P7k1GIiq9SzZ0+0b98+yx5HREREZE5Yc5CIiAxlQ8FB1h0kIiIiIiLrnVackYWIiGyX7ewF9B2LDwLx8aYeDZFxaDRA9BPTLPLaafDTTz8hf/78iE/y765du3bo3bu3unz58mV1PW/evPD09ET16tWxadOmdE3xXbhwIf755x/Y2dmpZdu2beq2kydP4pVXXoGbmxty5syJvn37Ijw8/KWPGzZsGEqWLAl3d3f4+/tj1KhRiImJSfOYiIiIiLJSnMYuQwsREdku22hI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atTA1KlT1Xt4//331e1DhgzBvn371PrGjRvrx/j222+roGHSwKiOZBDu3btXBQclWJoeEnTs3LmzGicRERERERHZBpsODpbL740C2dxw89FTbL9wD6+W9wXyVwHsHICwG0DoDcCnoKmHSfRSpY4cTv1GB4dEV0vu3pX6fWVqfQLFNyeezpsZqlWrlui6ZA5KdtzatWtVRp/UIXz69OlLMwcl61BHptx6e3vj7t1nJQPS6Pjx4ypjcPHixfp1kv0n2XlXr15VwbykryXTn4U070i6Tl5fFxyULDwJIOqULl1aTTWWjEkJDsrPpE1WJDsx6RThpNtLzJo1C/PmzVPbSLZVdHQ0KlWqhPSSadESiN25c6eaWk1ERESWIyPTgzmtmIjItqV7WvGOHTvUFL/8+fOr+ldSkyoh+UNaMmny5cunalU1bdoUFy9ehDmS8SfrWuziCfiW117m1GKyEPbu7qkvLi5pv++zzLiX3deYJJCX0NChQ1WASrL/JEh17NgxFXiTgNeLODk5Jfv3LUG99JDApGQEymvqFgkYyu8wmSqc0mvp6hWmtC69r2/I9lq6dKnaZlJ38L///lNjlszCl22vlPz4449qqvNrr72mftcTERGR5TC0GYluISIi25Xu4KAU5pcpf5KpkpIpU6aoaXhz5szB/v371R+yUng/MkmjA3OhsgUBbD57BzFxz/6QL8i6g0TGJNOKpXFGWkg9PpleK1NcJSgomXfSwCQrxlSlShVVt6948eLJFrl/RkgGZMImJefPn1d1B3XZiPJT3ntCcr1s2bIvfF65T506ddR05MqVK6uxSu1EQ0hQ86efflJTq2XqtDSSISIiIsvAhiRERJRl04olo0SWlEjWoHQQHTlypJqeJqT4vkyxkwzDhMX3zUXVwtmR08MZD55EY9+VB6hfIre27uDBucANNiUhMgbp8CsnCyTIJ918peZfaqTOnzQMkQxlCVaNGjUqUzLwZEySHSe/l6RTcq5cuVStwFq1aqnahu+99546uSHBwo0bN2a4Dp9kFg4aNEidPJEpxvIa8loypVh88sknqkagBPgk43r16tVqOyTt1JzS9pLfsxs2bFD1BqXD8cGDB9VlQ8g2l5M7UpNRAoQyvVu6O+tIIxSp1Zjw/glrRBIREZFpcFoxERGZRbdiqckVHBys/rBN2IxACvBLgfyUREVFISws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4qCyBomIKOvZOTnCzs46DwE00dGwavEpN/myFifCrbsGcVRud1ir2FjmHJhcvEa7GPpYMjl7dzfY2znDGsVHRMCaaWJjYc3eK9EE1mz2hQ2wRo8fx6NyubTd1zr/MsgC/QP6470K7yEgd4Cph2JRU41fr1IQ7SsVQGy8Bs6OPIgkIiIiIjLqtGJDH0tERDaLwUEDlcuVxvArJWNvbwdnezYgISIiIiIyFrtnU4sNfSwREdkupm4ZgUbDU21ERERERERERGR5GBzMgCcxTzB+73i0/KslouKijPepEBERERERpYckLGRkMcCsWbNQpEgRuLq6ombNmjhw4ECq9507dy7q16+P7Nmzq6Vp06YvvD8REWUdBgczwM3RTTUluRF+Aztu7DDep0JERERERGTG3YqXLVuGIUOGYMyYMThy5AgCAgLQokUL3L17N8X7b9u2DV26dMHWrVuxd+9e+Pn5oXnz5rh58yY/ZyIiE2NwMCMbz84erfxbqcurL6821mdCRERERERkWEMSQ5d0mj59Ovr06YNevXqhbNmymDNnDtzd3TFv3rwU77948WK8//77qFSpEkqXLo2ff/4Z8fHx2Lx5Mz9pIiITY3Awg9r4t1E/d97ciUeRj4zxmRAREREREaWLnUaToUWEhYUlWqKiUi6dFB0djcOHD6upwTr29vbqumQFpkVERARiYmKQI0cOftJERCbG4GAGFc9eHKVzlEZsfCw2XNtgnE+FiIiIiIgoPeIzuABqqq+Pj49+mTx5coovdf/+fcTFxSFv3ryJ1sv14ODgNA132LBhyJ8/f6IAIxERmYajiV7XqrT2b41zIeew5soadC7d2dTDISIiIiIiSregoCB4e3vrr7u4uGTKVvzyyy+xdOlSVYdQmpkQEZFpMXPQCFoWbanqDx67dwxBYUHGeEoiIiIiIqIsnVYsgcGES2rBwVy5csHBwQF37txJtF6u+/r6vnCcU6dOVcHB//77DxUrVuQnTERkBhgcNILc7rnRrlg7vFfhPbg68swXERERERFZb0MSZ2dnVK1aNVEzEV1zkdq1a6f6uClTpmD8+PFYv349qlWrlpF3S0RERsRpxUYyru44Yz0VERERERFR+kj237MMwHQz4HFDhgxBjx49VJCvRo0amDFjBp48eaK6F4vu3bujQIEC+rqFX331FUaPHo0lS5agSJEi+tqEnp6eaiEiItNhcJCIiIiIiMjC2Wm0i6GPTa/OnTvj3r17KuAngb5KlSqpjEBdk5LAwEDVwVhn9uzZqstxp06dEj3PmDFj8MUXXxg2cCIiMgoGB40oJj4Ge2/tRUhkCNoXb2/MpyYiIiIiIjKbzEExcOBAtaREmo0kdO3aNYNeg4iILLDmoKSNV69eHV5eXsiTJw/at2+P8+fPwxYcvH0QAzYPwLRD01SgkIiIiIiIiIiIyKaCg9u3b8eAAQOwb98+bNy4ETExMWjevLmqP2HtauSrgVxuufAo6hF239xt6uEQEREREZGNsIvP2EJERLbL6NOKpc5EQgsWLFAZhIcPH0aDBg2S3T8qKkotOmFhYbBUjvaOeK3oa/j1zK9Yc2UNGvk1MvWQiIiIiIjIFphgWjEREVkHo2cOJhUaGqp+5siRI9VpyD4+PvrFz88PlqyNfxv1c2vgVjyOfmzq4RARERERkS3QZHAhIiKblanBwfj4eHz00UeoW7cuypcvn+J9RowYoQKIuiUoKAiWrHSO0ijmUwzR8dHYdH2TqYdDREREREQ2wE6jydBCRES2K1ODg1J78NSpU1i6dGmq93FxcYG3t3eixZLZ2dmhdbHW6vLqK6tNPRwiIiIiIrKlacWGLkREZLMyLTgoLe3XrFmDrVu3omDBgrAlrYq2Uj/DosIQFfe8niIREREREREREZFVNyTRaDQYNGgQVq5ciW3btqFo0aKwNfk882Fth7Uo5F3I1EMhIiIiIiJbIMl/hnYdZuIgEZFNc8yMqcRLlizBP//8Ay8vLwQHB6v10mzEzc0NtoKBQSIiIiIiyioZqR3ImoNERLbN6NOKZ8+erRqLNGrUCPny5dMvy5Ytgy2KiInAw8iHph4GERFZoS+//FLVupXmX0REZONU12FDaw6aevDWg/tmIrJEmTKtmLR+P/c7vjn8DTqV7IRPq3/KzUJEREZz8OBB/Pjjj6hYsSK3KhERZayxCP+GMwrum4nIUmVqt2Jbl88jH57GPsWKCyvwyfZPsOTsEpwPOY+4+DhTD40oVVdDr+LB0wcM9BOZsfDwcHTt2hVz585F9uzZTT0cIiIyB/EZXChDuG8mIktm9MxBeq5ugboo7F0Y18OuY/219WoRXk5e6F2hN96r8B43F2WJx9GPcefJHdyNuIu7T+9qfz5b4jXxmNlkpv6+o3ePxrF7x+Dm6Ib8HvlRwKsACng+Xxr7NYaDvQM/OSITkvq+rVq1QtOmTTFhwoRU7xcVFaUWnbCwsCwaIRERkW1J675ZcP9MROaGwcFM5GTvhD/b/okT907g8J3DOHr3KI7dPYbHMY/h7uiuv9+10GsYvWc0quSpgip5q6BSnkrwdvbOzKGRlYiOi8a9p/cSBfvuRdxTGauf1/pcf7/3N72vAn4pcbRzVAFCezttInFRn6I4fu+4eo7LoZfVoiMBw/1v79df//rg17jx+EayAKIs7k7Pv+NEZDxLly7FkSNH1NSll5k8eTLGjh3LzU9EZAPYkMQy9s2C+2ciMjcMDmYyFwcXVPetrhYRGx+LCw8vII97Hv19dIFDWX459QvsYIcS2Uugcp7KqJq3Kmrnq41srtkye6hkRiRYJ41sVLDv6T3cibiDJ9FP0LN8T/19BmwegB03dqT4eAc7B4yoOUIf8JPvmwSc5acsud1yq5953fMit3vuRMHBcXXHYWStkbj95DZuPr6Jm09uan+G31SND2TR2Xd7n/o+p0SyDtd3XK+//66bu9RPCRzm98yv/m0QUfoEBQXhww8/xMaNG+Hq6vrS+48YMQJDhgxJlDno5+fHzU5EZI1Yc9Ai9s2C+2ciMjcMDmb1Brd3RNmcZROtq1egHsbVGYcjd4+oAKFMQ5aAiyzLzi/DzFdmoqFfQ3Xf2+G3EREbAX8f/0RBGrIsEiQOfhKsgn+SLaozfu947Ly5UwUE5T5JA37dy3XXB/Eki0842zurAJ8E+lTg79llebyzg7O6z5QGU9I1FVgeJ1PiZXmRj6t9rDJfb4XfUsFD3RIWHaYyBxN+R2ccnoHzD8/rr0uAUmUZehVQ3+e+Ffvqb0sYrCSi5w4fPoy7d++iSpXnvzfi4uKwY8cOzJw5U01TcnB4/m/dxcVFLUREZAMYHLSIfbPg/pmIzA2Dg2Ygr0dedCjRQS3i/tP7Kkh45M4RFTCUacY6f1z4A3NPzkU2l2wqs1A3FblMjjJwcnAy4bug1MhneebBGQSGBSLwcSCCHgepAJoE7yRYfKjrIX3gLjQ6VGXsCckgzemWUwXRdBl+UXFR+qDg8BrDMbLmSPi4+Lw0UJxZNQLr5K+jlpRqHIZGhSZaVzx7ccQjXmUhSoBbAqCyyHTnpMHBLmu7qMzJQl6F4J/NH8V8iqFYNu2S3ZXNF8h2NWnSBCdPnky0rlevXihdujSGDRuW7I8PIiKyIQwOmgT3zURkDRgcNEO53HKhWeFmaklK6sC5OrjiUdQjbA3aqhYh6yrmrohpDadxCnIWkmCd1NxLGviTbE9dQG7x2cXYcG1DssdKxp+fl58KCOZwzaHWSYCse9nuKgNQAoNSt/JF3xNz5eXspZaEvqz/pfqp0WjU91eyDW+E31DbSxfw1JHtKAFGCZTuD35e41BUyFUBS1ot0V8//eC0Cp7mdM3JbFqyel5eXihfvnyidR4eHsiZM2ey9UREZGOk47ChE4vYrdhg3DcTkTVgcNDCDKsxDEOqDsGZkDM4eucoDt/V1iuULK1zIefg7fK8kckPx35QARbJLJQsQ3MOJpmziJgIFaySOpC6qa6zj83GX5f+Uh2ANdAke4xMF87nmU9dlrqRcfFx8PP2U5lwavEupAKASafOlsxeEtZOshwl+0+WcrnKpXiff9r9o4KG18Ku4cqjK9rGKI8uq3USNNWRQGPf//qqacxSU1EyCyULUWUZ+hRT2YoJ63uSYWLiYlQgV4Lg8vk1KNiAm5KIiIiIiMhKMDhogWT6cEDuALX0RE9Vn+1q6FWViZUw2PT3pb9V5tVvZ39T16V+XKnspVA8W3FV91BXx5C0JPChpv8+DlSXJSAol2Wat9jYaSN8PXz1GYNSM1B4OnmqYJ8E/SQTUBYPZw/9Zu1SuotaKO1kCrUsCafU6wK1T2Ke6K+Hx4SrIKP8lAChrrGPTt38dTGn2Rz99d/P/Y6CngVV8FA+S9Y1fC4mPkb9DpGSBTJVXWwP2o7JByar3yPye0aUy1mOwUEzs23bNlMPgYiIzAC7FZsP7puJyNIwOGgFJMChq8emI3/If1TlI1WzUJZLDy+pRiey/Hf9P1TMVTFRcHDKwSkqKCDPIcFDCaBkVp06U5AMs5DIEBXw0wX95Ocn1T7RZ6KtuLgC80/NT/Hxsm0eRD7QBwdfL/E6GhdqrAKCchubw2QNaXIii45MXV7TYY0K1kpjlCuhV1SGoVpCLyfKxJTs2kn7J+mvy1RmyS5UNQ2zFVP1O5MGI62RbIdT90+p3wXy70D9DAtUgcFYTSwm1J2AdsXb6RvTSLambnvJ990WsluJiIgsEmsOEhGRgRgctOKAYUv/lmrRBQRO3j+pgiYXH15M1IU2Oi4aS84uQZwmTr/OxcFFPz2zVr5a+mCBOZOAqEznlUwyGb9YdXkVfj3zqwoEJsw403mj5Bv64GDp7KVVgEiX/afLBizoVVCfSaWjbkOhLHpn9DLyeZfKUUotqZF6nc0LN1cBRJmuLNdPPTilFvFWqbf0wUHJUBy3b5w+eFjUp6iatiwBMqnvac6Bc/l3INPdrz/WBv0k+NfIrxGq+1ZXt0tg8H+b/pfiY+W9SSmChPUd57eYr35fSFkCBsGJiIjMWLxG0gcNfywREdksBgdthAS36hWop5akpGvuoMqDVODw0qNLKngimVhnQ86qRWrq6YKDct9e63uhiE8RlWGoyzSUhhBZFTh48PSBqq+om/6rGoI81v6Mjo/GotcWqRqLIjI2Ut1X1/1XMv90AT8J8OkyAUXCYCpZH/mspzWapp9CKwFjVc/wWZZhNd9q+vvKv4G1V9am+lzvB7yP/pX6q8tBYUEYsn2ICqy5OrpqA4jPfsoi3Zx1Nfok6Lg5cLO6XXd/d0d37XVHV/g4+8DT2TNNmbDyHiSzT0hZgRmHZ+gzYuXfb0KSbakLDsq/XQl6yvdfgn7qp1fhFOtgylgSbhciIiIyY8wcJCIiAzE4SCpw8G6Fd/VbQppnyFTCi48uqsBJiWwl9LdJ4OHYvWNqSUjq7kmgsG2xtniz1Jv6AIZIb9BQMrok0KebAiyL1OzTTZveeH0jJu6fmPIX2s5RBQ91JBgqnYOlGUgBzwL6jEKybdIFWjJjZWlauGmy26Xz8YdVPtQ3Q5HsOwns6ZrP6IJyQmod6gLQKZHgny44KJmtn+36LNX7di3TFcNrDFeXpdZlh3866IONEkyUy/9v707gmyqzv4Gfpkn3BUqhpdCyU/bKVkRGREAWkUUdYZD3ZRFQUAQHRQZGAQGFvwiDIgNuICOKFV+BV0QQ2Rl2FFCBKvvaQoFulK65/8856U2TNrWlpFluft/P55Lt5vLkyc29zcl5npORlyEByWdaPkNj40wBSg7obb241bwdvU4vUwOowT/OiFXx52DtgLV32WMAAADg+hRTgLCizwUAAI+F4CCUwEMmZdhsSAx1i+lm9Vh1/+q0oMsCyTDkeQw5eMiBEy4IcfT6UcmSUnERg6e+fUoyC9UsQ674y5ccnOEABgc72L6r+2jp0aUS9Lh251qJNnHxFTU4yEM8eXsy9Lew8q9kAgabMgF5u6qooChZAO4GV5oe1XKU1X0c7OaMPM5GtQwO8v63tPtSuT8rP4uyC7LlOi8c6FYz9uSAq9PLZ0R9jBfL9TmQqOJgZGpOqiy2cNas5X7OQcW6IXWlPTUDa1p9DgAAAAAAAABKg2+PcFd4mOEjdR6RRZVXkCdzuHHAkIN2Kr7NWVVqUZTi5j44l/rU72PexuHkw+bHgg3Bku2nVgC23G6Hmh1oTf81eOfAoTgDVh3+a4mLonSq1alc2+Ag9gePfFDq42q2LeMA39r+a4uCjoUBRf7/OSPQMujNwXbOOgQAAAAPhmHFAABQQQgOwj0zeBskI5AXS1zIZHXf1RIklPkMb52S6zxkmYdnJmclm9dtHt5cgoVqNiDPkYjiB+BpLPd5/lxZViAHAAAAKLuoCAqSAADA3UNwECoND71sEtZEFkuc/cQZUjzXoSrML8ycRQgAAAAAAHdJMZqWiqjo8wAAQBMQHASHU+cZBAAAAAAAO8GwYgAAqCDNBgdzL1ygvEuXSBcQQLrAQKtLL5+iYgIAAAAAAABuD8OKAQCggjQbHEzfsIGuL3zX5mNeBgPFrFhBAW1am9bduJFSv/qKvAICyDswUC4tg4khPXqQIco0+X9+SgrlJSeb15NLf3/y0ukc+vrA/RRkZlJ+UhLlXU2i/OQkyktKNl9W+etfKaRnD1kv99w5ujzxZSKDXvZVL72h8NJ0O7hHDwp9zDQEO//mTUpZstT8mOnSdJ30evJv3pwC2puq5Rqzsylz2zbzY1bbNuhJX62aeT9XjEYquHlTAunmBfs4AAAAAAAAgOZoNjjoHRpKvo0bkzEri4y3b8ulkpMjjyl5eaTz8zWvm3vuPN3es7fUbfk1a2YOmqRv2kTJs2aXWEcyEgMDqNbbb1Ngx45y3+19++hWQgIZatQg39gm5Ne0Cfk2aIDMRY3h+RONGRmUl8RBv2TTZVIyBXSIp8D4eFkn6+BBOv9/h5a6Df+WLYgKg4MFmbcp+/jxUtf1aVDffL0gNZVuffZZqeuGDRtmDg7yupf/PrHUdasMHEg1Z74h1/n1/PGXB61X4ICijw/pOED5aG+qOX266fXn5dG5p4eYgowSSDRd6vi6wYf8WrWksCFFlXRTliwh8tZbr1e46CMiKKC1KWjPci9dIn3VqhKoBwAAAIA/gWHFAABQQZoNDlYdPFgWSxzEMN65I8FCzpJSBXfvRoZaUaYg4u2iYKJ6aYiIMK/LmVb6GjXMj8tJmIMpWVlEvHgVZRDmnDlDGd9vtG6YwUC+9euTX5MmFPbMM+QX27jyOgHsE/hLS5OAHy8+tWuTb8OG8lh2YqIE2/h+hd/7YsIVozk4yEEvpgsNlf1JHxlBhohI02VkTfLj4GAhnzoxFP3hB6Tk55OSm2e6zM+T/Zfy8yVYrfIOCaFqY54zP8aXSl7hJa/bvGhd0ukkUKg+Zr4s3LZ31apFr5u3V5ysm08F/Hh2TtG6ubmU/csvpfYhZyyqwUHOSLz+7nulrhv44IMU89GH5tvnnvwrFaSlmfqtZk0yREaSIaom6bnPYhtT0EMPlbotuLf9Xn5EKZyCIff8ebr2zny5NMREU/T776N7AQAAXI0UK65gteIKPg0AALRBs8FBWzizyZuXkBCr+znYowZ8ylJ10EBZzF+gs7OtgomG6BjzugFt21HE1KmUe+ki5ZxMpOyTJ8mYnk45iYmyVP0/RdlUaeu/o/T168m3aRPyK8wyNERHYyhnJcu/dYu8vLzIu0oVuZ176TKlLHrPNOSXA4LJyfIeq8KfH0vVx4+X6zp/f8o9c8YqW1XPASwJ/kWSX4uW5scMtWtT7OFD5cqA8w4OpqDOncvVfn14ONV46aVyrcsZrHU++0+5t9vkxHEiDqhzgDIvV4KA6sKZsirO+Ku95N+mQCY/zkFHdd28XPKpU6dow0YjVRk0yGpb6nrG3FzybdyoaNWcHFIKOBRJEqDN4eXkSfPjgX/5i1Vw8EzfftK/avBQgolynQOKUZKBCEX4+JV/7ZoE/HjJu3BBsqh5vlZeqo0YQdXHv2ha2dubMjZvNr0XNgLhAAAA4AKQOQgAABXkUcFBe+OgEs83yEEiWzizyTIzUL6MX7kiGWfZJ05YBSSzDh2kzO3bZVFxAMY3NlYChdXGjJHgDlRM/o0blPPHKco5fYpyTp2iXLl+mgpu3aJqY8dQjQkTCt8kI6Wt+/8lnu8dFiZZfmoQkXEWW8ynn5IhMkIyA0vbDxjP1+flZkNjef8mHx/yluyx0tsu8yA+/HD5tqnXU803ZpRrXZ2vL8UeOkgFPGT76lXKv3pV5muU60lXZai+igNWOX/8IdfvHDlSYlscSIz5+CPz7aSZsyRT0lAz0hTQLcxKtAx6agFnauZfv24K+p0/J5mvgQ88II/lXbxIp3v0LPW5HCBUcf9ETJ0igV6rYC8AAAC4DqOR/7mH5wIAgKdCcNDBwRZDrVqyBHftavVY1UGDyLdhI8pJPEnZJ05KoIMDHnd+/lkWNVuN3Vj+qQzjlCzDJqZFX726I1+KywcBdcFBUoyD5Zw5S2cefbTU5xjTM8zXOchXfeJEU8CPM84iI02BP9+iOSotM+YC7+9QSa8ELDMpeaHGpQ/B5/ei7lcJlHflKuUlWQcSeVHnDGX8ubr1xRc2t8PZn5bzKbL0jZtIH17N9EOAOj9i4fyKUrjIhQKKPF/ljaVLCrMBTRmAlpmvIf36moOD3Cdevr6yf/vExJgDfzysnS/5OKXy8vamsKGlz5kJAAAALgCZgwAAUEEIDroIv6ZNZVHx3G5ctZYDhbkXL1hlrN3etdNUQGXDBvN93uHh5FeYZRg+frx5rjCt4qGrWT/9TDmn/iiRCchC+/cj///5H7nuExNtDoJwQRgZRt7INJTcp149q4w/7rfwZ0c77XVBxXBGon+rVrLYwlm75utGI1WfMN4qC5GDijwtAM9vSPmmocyM77v8J8O2Qx59lGotmG/abn4+JbaPtyrMojMUFmgx+FBAx/spYtIk83OlIjVnlKpFXNR1fXzIt149Cu3Xz7xu2rffml6nwUAF6emmIcCFAUD/tm3MwUydj4FuLFtu/eu/tzcZatcin5g6VvNVcp/xUHe+BAAAAAAAAM+Fb4Uuir+wlzYXYrXnxlBAx46Uc+KkzGPIQcSClBS6nZJC2b/+StVfftm87rV33pGAhy9nGDZuLMNjdUFBpAsMIl2Av8vPaWg5HJjnigzt29cc4LkwYkTJIRCcnRkdTd5Vw4ru0uup8cEDmg+YQhlDpAt5BwVR+NixJdaR4ctXrlpVMi+4fZsC2rWjvGvXJAPPej7FPKvK43LfnTuy2ML7pXldRaF0i+C+rcIslsHBq9Nn2Cx6wyznseT2hI8ZIz8m+NStIxmBnAHIQUWb/YLAIAAAgHYgcxAAACoIwUE3FNghXhYVV2DmYcicZahk37EKhKR/v5HyLl+2uR1DnRhquGmT+faVf0yh/JQUU/AwKJC8OYAo14NkWKUamGO5ly7J/2MKNAbaJcjAAZNbq1bJa8k9dVoyAtVMQOZ/333mNvAw38D775eMQN+GpmxAHw6m1q9vc+4/BAahXMOXY4NLFnFZ+Vmp+6tlcNrLz48a/LjZVJjFsoBLYUDRMmDNf7xHTHu9cJ2ShVx86tez+r8CO3Yk5U6WFG3R+QeYhv/yUGAOANazXtdcRAQAAAA8i1HKFd/DcwEAwFMhOKgBHAyzNaSSgxc1Xn2Vsk+ekCxDHnbL1ZILMjOJCgpKVM7N+uknGa5YWtaTZXDw8oSXKPu338y3ZT62woAiV4iNWbbM/NjNz1ZS/o0UydhSsxYL0tMk+MdBu4gpU0zb8PKimx9/QnlXrlhnAtauLcE//zjr1xez7JOKdhnAPZMgvLd30W2dTgp+lOu5Oh2FPf10uf+v6MXvV6iNAAAA4DkUxShLRZ8LAACeC8FBjQcvQnr2kKV40FCGSObkWN0f+fprVHDzpgQPjZm3yciXtzPltuWch0LvLUMYOctJtnnnDhXwcj1F5l6zlLZ2rVUg0RIPc1aDgyz0iSdIyckuMxMQAADunjr/Zr6Sp9nuUzT82oTFHKpalJtZ9KOLFuXnFxWJ0pr8/JwS8/yCg8mohgr2P943p/KE87NRw6/NE3gprj0d2b3KyNDmDySZmcZyn5sRHPTQoCFn+lGxoFvQgw+Wexv1EhLkkoc5ctEGCSQWLsV3vNB+fcm/deuiYGNGpgT81OHAPH+gOvdh9XEv2OU1AgBASRkZpursu3LXoHvANT3s7AaAPY4zoaGh6EhnkL/BERx05/Pzzjv/z9lNAbDNOq9Ic1o3J/L0c3OlBQcXL15M8+bNo6SkJIqLi6NFixZRfHzRPHmgDTwsWObzq1q11HXChg1zaJsAAMC2qKgounjxIgUHB1vNT1tZ0tPTKTo6Wv7PkJAQzb0teH3uDe+fffGPw/zlg48zAHB3cH62Ly0f37X82hhen/POzZUSHExISKCJEyfS0qVLqUOHDrRw4ULq2bMnJSYmUo0aNSrjvwQAAIAy6HQ6ql3OuTHtif941eIfsCq8PveG989+kDHoZFwozauCQ+Mw56BT4fxcObR8fNfya2N4fY4/N1fKwPEFCxbQ6NGjacSIEdSsWTMJEgYEBNAyiyIVAAAAAAAAYMdhxfeyAACAx7J75mBubi4dPnyYplgUmeBfQrp370579+4tsX5OTo4slmmkAAAAAAAAUH48j7dSwcxBVCsGAPBsds8cTElJoYKCAoqIiLC6n2/z/IPFzZkzR9Ic1YXHzwMAAID78/X1penTp8ulFuH1uTe8f6A5yByEcsLxz33hvXNvvi78t7GXUp6axnfhypUrVKtWLdqzZw917NjRfP+rr75KO3bsoP3795eZOcgBwrS0NE2PoQcA8FR8nOcfg3CcBwAAsN95tav/INJ7+VRoG/lKLm29k4BzMwCAh7L7sOLw8HDy9vam5ORkq/v5dmRkZIn1OWLqilFTAAAAAAAAt2FUOPWjYs/FnIMAAB7N7sOKfXx8qG3btrRlyxbzfUajUW5bZhICAAAAAACAPYcVGyu4oCAJAIAns3vmIJs4cSINGzaM2rVrR/Hx8bRw4UK6ffu2VC8GAAAAAAAA+1KMCikVzBy080xTAADg6ZmDbNCgQfTOO+/QtGnT6L777qMjR47Qxo0bSxQpAQAAAAAAADuocNZg4VIBixcvprp165Kfnx916NCBDhw48Kfrr169mpo0aSLrt2zZkjZs2FDBFwsAAC4fHGTjxo2j8+fPS7ERLkLCJwsAAADwHHf7pdFd7Ny5k/r27UtRUVHk5eVFa9euJS2ZM2cOtW/fnoKDg6lGjRo0YMAASkxMJK1YsmQJtWrVSgrf8cLT3nz//fekRXPnzpV99KWXXnJ2U8BRmYP3sNythIQEGTHGlTd/+ukniouLo549e9K1a9dsrs8FKwcPHkwjR46kn3/+WY4tvPz66692ePXg6edmrZ+fcW7WlrkueH6utOAgAAAAeK67/dLoTniqFH49/AVLi3bs2EEvvPAC7du3jzZv3kx5eXnUo0cPed1aULt2bfmj/PDhw3To0CHq2rUr9e/fn3777TfSkoMHD9IHH3wggVCAyrBgwQIaPXq0TB3VrFkzWrp0KQUEBNCyZctsrv/uu+9Sr169aNKkSdS0aVOaNWsWtWnTht5//328QQ6i5XOz1s/PODdrx0EXPT97KS42wURaWhpVqVKFLl68KL/mAgCAtqSnp1N0dDSlpqZSaGios5sDlYSzETj7TP3Sx8XJ+H1/8cUX6R//+Idm+p1/9V2zZo1kv2jV9evXJYOQv5h07tyZtCgsLIzmzZsnGU1akJmZKUGXf//73zR79myZ5ofnAAftnlf5fPoXepT0ZKjQNvIpj3bThhLfwXx9fWUpLjc3VwKBX3/9tdXxj+ed5/P7unXrSjwnJiZGAlOWmTIcpOLsrqNHj1ao3XB3POXc7AnnZ5yb3VOmC5+fK6Ugyb3IyMiQSz5IAQCAdvHxHsFBbeIvjZyVNWXKFPN9Op2OunfvTnv37nVq26BiP9yqATStKSgokDnQONuEhxdrBWd+9unTRz5z/OUDtM3Hx4ciIyNpd9K9zd8XFBRU4jsYB+9mzJhRYt2UlBT5/BSfU55vnzx50ub2k5KSbK7P90Plw7lZW3Budk8vuPD52eWCgzw/AP9ixfPccLT/XjNT3CEDEW1Fv2IfwD7gTvvAvbaXE9Y5MMjHe9CminxpBNfEWSWc5dOpUydq0aIFacUvv/wiwcDs7GwJiHB2CQ+L1IIvv/xShgvysCXwDDx33NmzZyX4cy/4/Fz8+5etrEFwTzg3awfOze7pSxc/P7tccJAzC3guGHtRJ5t2B2gr+hX7APYBd9oH7qW9yBgEcJ9fuLlYwO7du0lLYmNj6ciRI5J5wcMieSgkD5t29wAh/2AzYcIEmSuSA0bgOfj9duR7Hh4eTt7e3pScnGx1P9/mLEZb+P67WR8AbMO52f1cdIPzMwqSAAAAgNO/NILrGTduHK1fv562bdtm1x9uXWUYZsOGDalt27ZSAZInsOdiCe6Oh/NzYQGez0iv18vCQc/33ntPrnNGL4C9PkP8+dmyZYtVNhPfLm2IPt9vuT7jL8paGtLvynBu1gacm93TYTc4PyM4CAAAAE7/0giug4cW8pcPHmq7detWqlevHmkd7585OTnk7rp16yZDpjkrUl3atWtHQ4YMkesctAewFy4u8tFHH9GKFSvoxIkTNHbsWJm/k6sXs6FDh1rNPctZMxs3bqT58+fLFBM8lyFXDOfjDVQ+nJvdG87N7q2bG5yfXW5Ysb3w/Bg8ga47zJOBtqJfsQ9gH3CnfcAd2wvO+dLIQzX5D5/4+HipxGb5pdHdK82dOnXKfJvn+uI/7LhgB1fj1MJwpS+++EKqjfIc0GqxAJ4OwN/fn9wdByt69+4t7xXPf8qvdfv27bRp0yZyd/x+FZ8bMjAwkKpVq6apOSPBNQwaNEgqpk6bNk2OE1x1k4N/6nyzFy5ckCmjVA888IB83l577TWaOnUqNWrUSCoVY990HC2fm7V+fsa52b0Fu8H52UvhEDQAAACAnb3//vs0b94885dGHjrRoUMHt+9nDiQ9/PDDJe7nL1yffvopubvSCsItX76chg8fTu5u5MiRksV69epVCXi2atWKJk+eTI888ghpUZcuXeTzx0EAAACtnpu1fn7GuVl7urjY+RnBQQAAAAAAAAAAAA+FOQcBAAAAAAAAAAA8FIKDAAAAAAAAAAAAHgrBQQAAAAAAAAAAAA+lyeDg4sWLqW7duuTn5yeTqx44cMDZTaI5c+ZQ+/btpUpNjRo1aMCAAZSYmFhiQkqeaNRyGTNmjMPbOmPGjBLtaNKkifnx7OxsqZbElXWCgoLoySefpOTkZHIGfp+Lt5UXbp+z+3Tnzp3Ut29fioqKkv+Xq7FZ4lpAXN2tZs2aUv2xe/fu9Mcff1itc/PmTSlvHhISQlWqVJFJ1LkKl6Pbm5eXJ5O1t2zZUqoq8TpDhw6lK1eulPl+zJ0716FtZTxhfvF29OrVyyl9W1Zbbe2/vPBE0Y7s1/Ico8rz2efKhH369KGAgADZzqRJkyg/P9+ubQUAAAAAAAD70VxwMCEhQUq0T58+nX766SeKi4ujnj170rVr15zarh07dsiX6n379tHmzZsl2NKjRw8pHW9p9OjRUj1PXd5++22ntLd58+ZW7di9e7f5sb///e/07bff0urVq+V1cYDoiSeecEo7Dx48aNVO7lv21FNPOb1P+b3l/Y+D1bZwO7g62NKlS2n//v0SdON9lQMwKg5e/fbbb/K61q9fL4GmZ5991uHtzcrKks/T66+/LpfffPONBI769etXYt2ZM2da9feLL77o0LaqOBho2Y5Vq1ZZPe6ovi2rrZZt5GXZsmUS/OPAmyP7tTzHqLI++wUFBRIYzM3NpT179tCKFSukMhwHwQEAAAAAAMBFKRoTHx+vvPDCC+bbBQUFSlRUlDJnzhzFlVy7dk3h7t+xY4f5voceekiZMGGC4mzTp09X4uLibD6WmpqqGAwGZfXq1eb7Tpw4Ia9l7969irNx/zVo0EAxGo0u1afcP2vWrDHf5vZFRkYq8+bNs+pbX19fZdWqVXL7+PHj8ryDBw+a1/n+++8VLy8v5fLlyw5try0HDhyQ9c6fP2++r06dOsq//vUvxZFstXXYsGFK//79S32Os/q2PP3K7e7atavVfc7o1+LHqPJ89jds2KDodDolKSnJvM6SJUuUkJAQJScnx6HtBwAAAAAAgPLRVOYgZ6scPnxYhmeqdDqd3N67dy+5krS0NLkMCwuzuv/zzz+n8PBwatGiBU2ZMkUytpyBh7fyMMj69etLhhUPFWTcv5xRZNnHPOQ4JibG6X3M7//KlSvpmWeekcwrV+tTS2fPnqWkpCSrfgwNDZVh8Go/8iUPd23Xrp15HV6f92nONHSFfZj7mdtoiYe78rDT1q1by9BYZw0p3b59uwxrjY2NpbFjx9KNGzfMj7lq3/IQ3e+++06GOBfn6H4tfowqz2efL3noeUREhHkdzoZNT0+XLE0AAAAAAABwPXrSkJSUFBnWZvnFlPHtkydPkqswGo300ksvUadOnSRgpXr66aepTp06EpQ7duyYzPHGQzd5CKcjcYCKhwJyUIWHL77xxhv04IMP0q+//ioBLR8fnxIBIe5jfsyZeC631NRUmW/O1fq0OLWvbO2r6mN8ycEtS3q9XoI1zu5rHvrMfTl48GCZs081fvx4atOmjbSRh5VyMJb3oQULFji0fTykmIe71qtXj06fPk1Tp06l3r17S/DK29vbZfuWh+HynH/Fh+k7ul9tHaPK89nnS1v7tPoYALguntuUP/e8AAAAgPPh3AyOpKngoLvgeb040GY5jx+znO+Ms2+4UEW3bt0kuNGgQQOHtY+DKKpWrVpJsJADbF999ZUUznBVn3zyibSdA4Gu1qdawtljAwcOlIIqS5YssXqM5/u03Hc4mPTcc89JsQtfX1+HtfFvf/ub1fvObeH3m7MJ+f13VTzfIGfqcjElZ/ZraccoAIDSCpnxD3RHjhy5qw7iHyI5GMk/7AEAAID94NwMd0tTw4p56ChnBRWvnsm3IyMjyRWMGzdOih9s27aNateu/afrclCOnTp1ipyJM4UaN24s7eB+5OG7xf+Qd3Yfnz9/nn788UcaNWqUW/Sp2ld/tq/yZfFCOjyUlKvsOquv1cAg9zcXrbDMGiytv7nN586dI2fi4fF8fFDfd1fs2127dklWa1n7cGX3a2nHqPJ89vnS1j6tPgYAlYs/owAAAOA6cG4Gd6Gp4CBn07Rt25a2bNliNTyOb3fs2NGpbeMsK/7SvWbNGtq6dasMdyyL+gs8Z7s5U2ZmpmTacTu4fw0Gg1Ufc0CD5yR0Zh8vX75cholypVR36FN+/zlYYtmPPC8bz3en9iNfciCG53pT8b7D+7Qa5HRGYJDno+RALM9/Vxbub57Hr/gQXke7dOmSzDmovu+u1rdq5it/vriysTP6taxjVHk++3z5yy+/WAVe1SBys2bN7NZWAE/QpUsX+UzywnPS8g8cXDHeVNuoaLjRrFmzaOjQofI5U7PlOeuXpwPhbP/o6GiZmsCy8jh/Rvv27SuP82ed5+YtC2dex8fHU2BgoPxoyNMO8A9FnP3H048cPXpU5qHlhe9jPPUBZ2/zc7gdzz//vPxNoW5vxIgR5vlreeEsB5aTk0OvvPIK1apVS57Lx2VeHwAAwJlwbsa5WdMUjfnyyy+l4uunn34qFUmfffZZpUqVKlbVM51h7NixSmhoqLJ9+3bl6tWr5iUrK0seP3XqlDJz5kzl0KFDytmzZ5V169Yp9evXVzp37uzwtr788svSTm7Hf//7X6V79+5KeHi4VC9lY8aMUWJiYpStW7dKezt27CiLs3BFam7P5MmTre53dp9mZGQoP//8syz8UVuwYIFcV6v7zp07V/ZNbtexY8ekSm29evWUO3fumLfRq1cvpXXr1sr+/fuV3bt3K40aNVIGDx7s8Pbm5uYq/fr1U2rXrq0cOXLEah9Wq9Du2bNHKury46dPn1ZWrlypVK9eXRk6dKhD28qPvfLKK1JBl9/3H3/8UWnTpo30XXZ2tsP7tqz9gKWlpSkBAQFS2bc4R/VrWceo8nz28/PzlRYtWig9evSQ9m7cuFHaOmXKFLu2FcATPPTQQ0pQUJAyYcIE5eTJk/LZ5+PEhx9+aFXJnKuBv/POO3LOU5fAwEA5bvz+++9yHudj3fDhw83P6927txIXFyfHSf4sP/DAA4q/v3+pVdHz8vLk+MDHVt4+/33Ff2fxcYyPEfx3Q/PmzUscN3h7fLzgY/GWLVuU2NhYOdYwPncsXLhQ2q8+j4+XbNSoUdKmnTt3yv83b948+duOXw8AAICz4NyMc7OWaS44yBYtWiRfYH18fJT4+Hhl3759zm6SBAVsLcuXL5fHL1y4IEGrsLAw+QO4YcOGyqRJkyRo4GiDBg1SatasKf1Xq1Ytuc1/nKs4ePX8888rVatWlS8qjz/+uPxR7yybNm2SvkxMTLS639l9um3bNpvv+bBhw+Rxo9GovP7660pERIS0r1u3biVew40bNyRgxV8Q+QvUiBEjzF+eHNle/mJX2j7Mz2OHDx9WOnToIF8g/fz8lKZNmypvvfWWVUDOEW3lL6UcnOKglMFgkC/Po0ePLvEDgaP6tqz9gH3wwQfyxTw1NbXE8x3Vr2Udo8r72T937pwEHvj18I8KHDTgwAIA3P0XEP6887lCxT+C8X0qPr4NGDDA6nkjR46UH0Yt7dq1S9HpdPIZ5vMMf7YPHDhgfvzEiRNyX2nBQT5e8uP844Et06dPl2BjWVavXq1Uq1bNfJuPL3xss8QBR29vb+Xy5ctW9/M5Ej80AACAM+HcjHOzlmkyOAgAAADg7l9A+EcLS2vXrlX0er1k6arBwdmzZ1ut065dO/lxj7MH1YWD+Rzc44w/dRucdW+JM9lLCw4yzjzkH7Iee+wxyfi7cuVKmcHBzZs3K127dlWioqLkhxj+gYPbcfv27VKDg+vXr5d1LNvPC7d54MCBd9WHAAAA9oRzM87NWoZqxQAAAABuiufks8Rz+nE1c55nsLiYmBj6/fffKzy3L29z48aNlJCQQK+99prMKXr//ffbXJ8LJj322GM0duxYevPNNyksLEzmQhw5cqRMzh4QEGDzedx+Li7Hc8LypaWgoKAKtR0AAMCRcG4Gd4TgIAAAAIAL4iJVlvbt20eNGjUqETSz1KZNGzp+/Dg1bNjQ5uNNmjSRauccfGvfvr25uFDxSuS2tG7dWpYpU6ZIAaIvvvhCgoNcEK6goMBqXd4+F3maP3++FFBiX331ldU6tp7H2+f7uGgKF1UBAABwJTg349ysVZqqVgwAAACgFVwNfOLEiRK8W7VqFS1atIgmTJjwp8+ZPHky7dmzR6occ2VzrjC/bt06uc1iY2OpV69ekl3IX3A4iDdq1CipXFyas2fPSkBw7969UqH4hx9+kO02bdrUXDWZ1+H/LyUlRaoNc3CSq9xzm8+cOUOfffYZLV261Gq7/DzOFOQq6Py8rKwsaty4MQ0ZMkQqMH/zzTey3QMHDtCcOXPou+++s0u/AgAAVBTOzTg3a5azxzUDAAAAQMl5jbgAEFcJ56JJXAho6tSpVgVKeM5BW/MEcrGRRx55ROb54/n6WrVqpbz55pvmx7mQUJ8+fWQOQS7g9p///KfUbTEu6MSFT9RiZbzutGnTzPMWcoGkJ598UuYttCxkxNXZ+TlcoKhnz57y//Djt27dMm+bXx8XKeH7ee5ClpubK9uvW7euFJbibXABpGPHjmE3AQAAp8G5GedmLfPif5wdoAQAAACAIl26dKH77ruPFi5ciG4BAABwATg3g5ZhWDEAAAAAAAAAAICHQnAQAAAAAAAAAADAQ2FYMQAAAAAAAAAAgIdC5iAAAAAAAAAAAICHQnAQwEGGDx9OAwYMQH8DAAAAAAAAgMtAcBAAAAAAAAAAAMBDITgIYGdff/01tWzZkvz9/alatWrUvXt3mjRpEq1YsYLWrVtHXl5esmzfvl3Wv3jxIg0cOJCqVKlCYWFh1L9/fzp37lyJjMM33niDqlevTiEhITRmzBjKzc3FewcAAAAAAAAA90R/b08HAEtXr16lwYMH09tvv02PP/44ZWRk0K5du2jo0KF04cIFSk9Pp+XLl8u6HAjMy8ujnj17UseOHWU9vV5Ps2fPpl69etGxY8fIx8dH1t2yZQv5+flJQJEDhyNGjJDA45tvvok3AAAAAAAAAAAqDMFBADsHB/Pz8+mJJ56gOnXqyH2cRcg4kzAnJ4ciIyPN669cuZKMRiN9/PHHkk3IOHjIWYQcCOzRo4fcx0HCZcuWUUBAADVv3pxmzpwp2YizZs0inQ4JwAAAAAAAAABQMYgqANhRXFwcdevWTQKCTz31FH300Ud069atUtc/evQonTp1ioKDgykoKEgWzijMzs6m06dPW22XA4MqzjTMzMyUIckAAAAAAAAAABWFzEEAO/L29qbNmzfTnj176IcffqBFixbRP//5T9q/f7/N9TnA17ZtW/r8889LPMbzCwIAAAAAAAAAVCYEBwHsjIcHd+rUSZZp06bJ8OI1a9bI0OCCggKrddu0aUMJCQlUo0YNKTTyZxmGd+7ckaHJbN++fZJlGB0djfcPAAAAAAAAACoMw4oB7IgzBN966y06dOiQFCD55ptv6Pr169S0aVOqW7euFBlJTEyklJQUKUYyZMgQCg8PlwrFXJDk7NmzMtfg+PHj6dKlS+btcmXikSNH0vHjx2nDhg00ffp0GjduHOYbBAAAAAAAAIB7gsxBADvi7L+dO3fSwoULpTIxZw3Onz+fevfuTe3atZPAH1/ycOJt27ZRly5dZP3JkydLEROublyrVi2Zt9Ayk5BvN2rUiDp37ixFTbgi8owZM/DeAQAAAAAAAMA98VIURbm3TQBAZRo+fDilpqbS2rVr0dEAAAAAAAAAYFcYVgwAAAAAAAAAAOChEBwEAAAAAAAAAADwUBhWDAAAAAAAAAAA4KGQOQgAAAAAAAAAAOChEBwEAAAAAAAAAADwUAgOAgAAAAAAAAAAeCgEBwEAAAAAAAAAADwUgoMAAAAAAAAAAAAeCsFBAAAAAAAAAAAAD4XgIAAAAAAAAAAAgIdCcBAAAAAAAAAAAIA80/8C2RYHZRKsmgEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def confusion_matrix(true_states: jnp.ndarray, pred_states: jnp.ndarray, num_states: int):\n", " cm = jnp.zeros((num_states, num_states))\n", " t = true_states.reshape(-1)\n", " p = pred_states.reshape(-1)\n", " cm = cm.at[t, p].add(1)\n", " cm = cm / jnp.clip(cm.sum(axis=1, keepdims=True), a_min=1.0)\n", " return cm\n", "\n", "\n", "val_batch_full = val_data\n", "val_agent_full = build_agent(val_batch_full['x_seq'].shape[0])\n", "\n", "pre_metrics = evaluate_model(model_init, val_batch_full, val_agent_full)\n", "post_metrics = evaluate_model(model, val_batch_full, val_agent_full)\n", "\n", "# Encoder-level discrete category assignment quality\n", "flat_x = val_data['x_seq'].reshape(-1, D)\n", "flat_s = val_data['s_seq'].reshape(-1)\n", "\n", "enc_pre = predict_obs_idx(model_init, flat_x)\n", "enc_post = predict_obs_idx(model, flat_x)\n", "enc_pre_aligned, enc_pre_perm = best_aligned_accuracy(flat_s, enc_pre)\n", "enc_post_aligned, enc_post_perm = best_aligned_accuracy(flat_s, enc_post)\n", "\n", "print('Encoder aligned acc (pre/post):', enc_pre_aligned, enc_post_aligned)\n", "print('Inferred-state aligned acc (pre/post):', pre_metrics['aligned_acc'], post_metrics['aligned_acc'])\n", "\n", "pre_pred_aligned = jnp.array(pre_metrics['best_perm'])[pre_metrics['pred_states']]\n", "post_pred_aligned = jnp.array(post_metrics['best_perm'])[post_metrics['pred_states']]\n", "cm_pre = confusion_matrix(val_data['s_seq'], pre_pred_aligned, K)\n", "cm_post = confusion_matrix(val_data['s_seq'], post_pred_aligned, K)\n", "\n", "fig = plt.figure(figsize=(16, 4))\n", "gs = fig.add_gridspec(1, 4, width_ratios=[1.35, 1.0, 0.06, 1.0], wspace=0.4)\n", "\n", "ax0 = fig.add_subplot(gs[0, 0])\n", "ax1 = fig.add_subplot(gs[0, 1])\n", "cax = fig.add_subplot(gs[0, 2])\n", "ax2 = fig.add_subplot(gs[0, 3])\n", "\n", "ax0.plot(curve_steps, train_total_curve, label='train total')\n", "ax0.plot(curve_steps, val_total_curve, label='val total')\n", "ax0.plot(curve_steps, train_vfe_curve, '--', label='train VFE')\n", "ax0.plot(curve_steps, train_temp_curve, '--', label='train temporal KL')\n", "ax0.set_title('Training Curves')\n", "ax0.set_xlabel('step')\n", "ax0.legend()\n", "\n", "ax1.imshow(cm_pre, vmin=0.0, vmax=1.0)\n", "ax1.set_title('State Confusion (Pre, aligned)')\n", "ax1.set_xlabel('pred state')\n", "ax1.set_ylabel('true state')\n", "\n", "im = ax2.imshow(cm_post, vmin=0.0, vmax=1.0)\n", "ax2.set_title('State Confusion (Post, aligned)')\n", "ax2.set_xlabel('pred state')\n", "ax2.set_ylabel('true state')\n", "\n", "fig.colorbar(im, cax=cax)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "17", "metadata": {}, "source": [ "## 9. Plan from Continuous Observations\n", "\n", "After training, we run a rollout starting from state 0.\n", "\n", "At each step, the agent receives a continuous sample, maps it through the encoder, infers state beliefs, selects an action from policy inference, and transitions under fixed `B`.\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "18", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_16049/1731807479.py:39: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "rollout states: [0, 1, 2, 3, 4, 4, 4, 4, 4]\n", "rollout actions: ['forward', 'forward', 'forward', 'forward', 'forward', 'forward', 'forward', 'forward']\n", "reached target: True\n" ] } ], "source": [ "def rollout_from_state_zero(model_eval: FrontendModel, horizon: int = ROLLOUT_HORIZON, seed: int = 1):\n", " agent = build_agent(batch_size=1)\n", "\n", " key = jr.PRNGKey(seed)\n", " s_t = START_STATE\n", " prior = [jax.nn.one_hot(jnp.array([s_t], dtype=jnp.int32), K)]\n", "\n", " states = [int(s_t)]\n", " actions = []\n", " obs_points = []\n", " obs_probs_hist = []\n", " qs_hist = []\n", "\n", " for _ in range(horizon):\n", " key, key_obs = jr.split(key)\n", "\n", " x_t = GAUSSIAN_MEANS[s_t] + GAUSSIAN_SCALE * jr.normal(key_obs, (D,))\n", " obs_t = model_obs_categorical(model_eval, x_t[None, :])\n", "\n", " qs_t_hist = agent.infer_states(obs_t, empirical_prior=prior)\n", " qs_t = qs_t_hist[0][:, -1, :][0]\n", "\n", " q_pi_t, _ = agent.infer_policies(qs_t_hist)\n", " a_t = agent.sample_action(q_pi_t)\n", " a_int = int(a_t[0, 0])\n", "\n", " next_probs = B_TRUE[:, s_t, a_int]\n", " s_next = int(jnp.argmax(next_probs))\n", "\n", " obs_points.append(x_t)\n", " obs_probs_hist.append(obs_t[0][0])\n", " qs_hist.append(qs_t)\n", " actions.append(a_int)\n", " states.append(s_next)\n", "\n", " prior = agent.update_empirical_prior(a_t, qs_t_hist)\n", " s_t = s_next\n", "\n", " return {\n", " 'states': jnp.array(states), # length horizon+1\n", " 'actions': jnp.array(actions), # length horizon\n", " 'obs_points': jnp.stack(obs_points), # (horizon, 2)\n", " 'obs_probs': jnp.stack(obs_probs_hist),\n", " 'qs': jnp.stack(qs_hist),\n", " }\n", "\n", "\n", "rollout = rollout_from_state_zero(model, horizon=ROLLOUT_HORIZON, seed=1)\n", "action_names = ['back', 'stay', 'forward']\n", "\n", "print('rollout states:', rollout['states'].tolist())\n", "print('rollout actions:', [action_names[int(a)] for a in rollout['actions']])\n", "print('reached target:', int(rollout['states'][-1]) == TARGET_STATE)" ] }, { "cell_type": "markdown", "id": "19", "metadata": {}, "source": [ "## 10. Animation: Continuous Density + Inference During Control\n", "\n", "The first GIF visualizes control over the continuous observation space:\n", "\n", "- left panel: state geometry, trajectory, and sampled observations over a Gaussian-density background\n", "- right panel: inferred state posterior `q(s_t)` over time\n", "- title: current inference summary plus the action taken at the previous timestep\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "20", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def gaussian_pdf_sum_grid(means: jnp.ndarray, sigma: float, x_min: float, x_max: float, y_min: float, y_max: float, n: int = 280):\n", " xs = jnp.linspace(x_min, x_max, n)\n", " ys = jnp.linspace(y_min, y_max, n)\n", " xx, yy = jnp.meshgrid(xs, ys)\n", " grid = jnp.stack([xx, yy], axis=-1) # (n, n, 2)\n", "\n", " diffs = grid[:, :, None, :] - means[None, None, :, :] # (n, n, K, 2)\n", " sq_maha = jnp.sum((diffs / sigma) ** 2, axis=-1)\n", "\n", " norm = 1.0 / (2.0 * jnp.pi * (sigma ** 2))\n", " pdf_each = norm * jnp.exp(-0.5 * sq_maha)\n", " pdf_sum = jnp.sum(pdf_each, axis=-1) # (n, n)\n", "\n", " return pdf_sum, norm\n", "\n", "\n", "def normalize_density_for_display(pdf_sum: jnp.ndarray, mode_peak: float):\n", " # Saturate at single-Gaussian mode height so each cluster center can reach max color.\n", " capped = jnp.minimum(pdf_sum, mode_peak)\n", "\n", " lo = jnp.min(capped)\n", " hi = jnp.max(capped)\n", " denom = jnp.maximum(hi - lo, 1e-12)\n", "\n", " return (capped - lo) / denom\n", "\n", "\n", "def make_rollout_gif(rollout_data: dict):\n", " states = rollout_data['states']\n", " actions = rollout_data['actions']\n", " obs_points = rollout_data['obs_points']\n", " obs_probs = rollout_data['obs_probs']\n", " qs = rollout_data['qs']\n", "\n", " horizon = actions.shape[0]\n", "\n", " fig, (ax_l, ax_r) = plt.subplots(1, 2, figsize=(12, 5))\n", "\n", " pad = 3 * GAUSSIAN_SCALE\n", " x_min = float(jnp.min(GAUSSIAN_MEANS[:, 0])) - pad\n", " x_max = float(jnp.max(GAUSSIAN_MEANS[:, 0])) + pad\n", " y_min = float(jnp.min(GAUSSIAN_MEANS[:, 1])) - pad\n", " y_max = float(jnp.max(GAUSSIAN_MEANS[:, 1])) + pad\n", "\n", " # Left: line-world geometry on top of summed Gaussian PDF background.\n", " region_cmap = plt.get_cmap('tab10', K)\n", " pdf_bg_sum, mode_peak = gaussian_pdf_sum_grid(GAUSSIAN_MEANS, GAUSSIAN_SCALE, x_min, x_max, y_min, y_max)\n", " pdf_bg = normalize_density_for_display(pdf_bg_sum, mode_peak)\n", "\n", " ax_l.imshow(\n", " pdf_bg,\n", " extent=[x_min, x_max, y_min, y_max],\n", " origin='lower',\n", " cmap='seismic',\n", " vmin=0.0,\n", " vmax=1.0,\n", " alpha=0.82,\n", " aspect='auto',\n", " zorder=0,\n", " )\n", "\n", " ax_l.plot(GAUSSIAN_MEANS[:, 0], GAUSSIAN_MEANS[:, 1], 'k--', alpha=0.35, linewidth=1.0, zorder=2)\n", " ax_l.scatter(GAUSSIAN_MEANS[:, 0], GAUSSIAN_MEANS[:, 1], s=180, c=jnp.arange(K), cmap=region_cmap, zorder=3, edgecolors='black')\n", " for s in range(K):\n", " ax_l.text(float(GAUSSIAN_MEANS[s, 0]) + 0.08, float(GAUSSIAN_MEANS[s, 1]) + 0.08, f's{s}', fontsize=10)\n", "\n", " path_line, = ax_l.plot([], [], '-o', color='tab:red', linewidth=2.0, markersize=6, zorder=4)\n", " obs_dot = ax_l.scatter([], [], s=112, marker='x', color='green', linewidths=2.0, zorder=5)\n", "\n", " ax_l.set_title('State Path over Continuous Observation Density')\n", " ax_l.set_xlabel('x1')\n", " ax_l.set_ylabel('x2')\n", " ax_l.set_aspect('equal', adjustable='box')\n", " ax_l.set_xlim(x_min, x_max)\n", " ax_l.set_ylim(y_min, y_max)\n", "\n", " # Right: inferred state posterior q(s_t) over time.\n", " heat_init = jnp.full((K, horizon), jnp.nan)\n", " heat = ax_r.imshow(heat_init, vmin=0.0, vmax=1.0, cmap='viridis', origin='lower', aspect='auto')\n", " ax_r.set_title('Inference Result: q(s_t)')\n", " ax_r.set_xlabel('timestep')\n", " ax_r.set_ylabel('state index')\n", " ax_r.set_xticks(range(horizon))\n", " ax_r.set_yticks(range(K))\n", " fig.colorbar(heat, ax=ax_r, fraction=0.046, pad=0.04)\n", "\n", " title = fig.suptitle('', fontsize=12)\n", "\n", " def update(frame):\n", " # Show states only up to current time t (edge for a_t appears at frame t+1).\n", " state_path = states[: frame + 1]\n", " coords = GAUSSIAN_MEANS[state_path]\n", " path_line.set_data(coords[:, 0], coords[:, 1])\n", "\n", " # Continuous observation sampled at current timestep t.\n", " obs_dot.set_offsets(obs_points[: frame + 1])\n", "\n", " # Show inference results up to current frame.\n", " heat_arr = jnp.full((K, horizon), jnp.nan)\n", " heat_arr = heat_arr.at[:, : frame + 1].set(jnp.stack(qs[: frame + 1], axis=1))\n", " heat.set_data(heat_arr)\n", "\n", " enc_idx = int(jnp.argmax(obs_probs[frame]))\n", " q_idx = int(jnp.argmax(qs[frame]))\n", " action_taken = 'None' if frame == 0 else action_names[int(actions[frame - 1])]\n", "\n", " title.set_text(\n", " f't={frame} | true_state={int(states[frame])} | encoded_obs_idx={enc_idx} | inferred_state={q_idx} | action taken: {action_taken}'\n", " )\n", "\n", " return path_line, obs_dot, heat\n", "\n", " ani = animation.FuncAnimation(fig, update, frames=horizon, interval=900, blit=False, repeat=True)\n", " plt.close(fig)\n", " return ani\n", "\n", "\n", "make_rollout_gif_anim = make_rollout_gif(rollout)\n", "make_rollout_gif_anim\n", "\n" ] }, { "cell_type": "markdown", "id": "21", "metadata": {}, "source": [ "## 11. Animation: Encoder Decision Regions + Control Trajectory\n", "\n", "The second GIF replaces the left-panel density background with encoder decision regions.\n", "\n", "Each region corresponds to the observation index predicted by the encoder, making the learned continuous-to-discrete partition explicit during rollout.\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "22", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def encoder_decision_grid(model_eval: FrontendModel, x_min: float, x_max: float, y_min: float, y_max: float, n: int = 320):\n", " xs = jnp.linspace(x_min, x_max, n)\n", " ys = jnp.linspace(y_min, y_max, n)\n", " xx, yy = jnp.meshgrid(xs, ys)\n", "\n", " pts = jnp.stack([xx.reshape(-1), yy.reshape(-1)], axis=-1)\n", " pred = predict_obs_idx(model_eval, pts).reshape(n, n)\n", "\n", " return xx, yy, pred\n", "\n", "\n", "def make_rollout_decision_gif(model_eval: FrontendModel, rollout_data: dict):\n", " states = rollout_data['states']\n", " actions = rollout_data['actions']\n", " obs_points = rollout_data['obs_points']\n", " obs_probs = rollout_data['obs_probs']\n", " qs = rollout_data['qs']\n", "\n", " horizon = actions.shape[0]\n", "\n", " fig, (ax_l, ax_r) = plt.subplots(1, 2, figsize=(12, 5))\n", "\n", " pad = 3 * GAUSSIAN_SCALE\n", " x_min = float(jnp.min(GAUSSIAN_MEANS[:, 0])) - pad\n", " x_max = float(jnp.max(GAUSSIAN_MEANS[:, 0])) + pad\n", " y_min = float(jnp.min(GAUSSIAN_MEANS[:, 1])) - pad\n", " y_max = float(jnp.max(GAUSSIAN_MEANS[:, 1])) + pad\n", "\n", " xx, yy, pred_grid = encoder_decision_grid(model_eval, x_min, x_max, y_min, y_max, n=320)\n", "\n", " region_cmap = plt.get_cmap('tab10', K)\n", " region_img = ax_l.imshow(\n", " pred_grid,\n", " extent=[x_min, x_max, y_min, y_max],\n", " origin='lower',\n", " cmap=region_cmap,\n", " vmin=-0.5,\n", " vmax=K - 0.5,\n", " interpolation='nearest',\n", " alpha=0.72,\n", " aspect='auto',\n", " zorder=0,\n", " )\n", "\n", " ax_l.contour(\n", " xx,\n", " yy,\n", " pred_grid,\n", " levels=jnp.arange(0.5, K, 1.0),\n", " colors='white',\n", " linewidths=0.8,\n", " alpha=0.9,\n", " zorder=1,\n", " )\n", "\n", " ax_l.plot(GAUSSIAN_MEANS[:, 0], GAUSSIAN_MEANS[:, 1], 'k--', alpha=0.35, linewidth=1.0, zorder=2)\n", " ax_l.scatter(GAUSSIAN_MEANS[:, 0], GAUSSIAN_MEANS[:, 1], s=180, c=jnp.arange(K), cmap=region_cmap, zorder=3, edgecolors='black')\n", " for s in range(K):\n", " ax_l.text(float(GAUSSIAN_MEANS[s, 0]) + 0.08, float(GAUSSIAN_MEANS[s, 1]) + 0.08, f's{s}', fontsize=10)\n", "\n", " path_line, = ax_l.plot([], [], '-o', color='tab:red', linewidth=2.0, markersize=6, zorder=4)\n", " obs_dot = ax_l.scatter([], [], s=112, marker='x', color='black', linewidths=2.0, zorder=5)\n", "\n", " ax_l.set_title('State Path over Encoder Decision Regions')\n", " ax_l.set_xlabel('x1')\n", " ax_l.set_ylabel('x2')\n", " ax_l.set_aspect('equal', adjustable='box')\n", " ax_l.set_xlim(x_min, x_max)\n", " ax_l.set_ylim(y_min, y_max)\n", "\n", " cb_left = fig.colorbar(region_img, ax=ax_l, fraction=0.046, pad=0.03, ticks=jnp.arange(K))\n", " cb_left.set_label('encoder class')\n", "\n", " heat_init = jnp.full((K, horizon), jnp.nan)\n", " heat = ax_r.imshow(heat_init, vmin=0.0, vmax=1.0, cmap='viridis', origin='lower', aspect='auto')\n", " ax_r.set_title('Inference Result: q(s_t)')\n", " ax_r.set_xlabel('timestep')\n", " ax_r.set_ylabel('state index')\n", " ax_r.set_xticks(range(horizon))\n", " ax_r.set_yticks(range(K))\n", " fig.colorbar(heat, ax=ax_r, fraction=0.046, pad=0.04)\n", "\n", " title = fig.suptitle('', fontsize=12)\n", "\n", " def update(frame):\n", " state_path = states[: frame + 1]\n", " coords = GAUSSIAN_MEANS[state_path]\n", " path_line.set_data(coords[:, 0], coords[:, 1])\n", "\n", " obs_dot.set_offsets(obs_points[: frame + 1])\n", "\n", " heat_arr = jnp.full((K, horizon), jnp.nan)\n", " heat_arr = heat_arr.at[:, : frame + 1].set(jnp.stack(qs[: frame + 1], axis=1))\n", " heat.set_data(heat_arr)\n", "\n", " enc_idx = int(jnp.argmax(obs_probs[frame]))\n", " q_idx = int(jnp.argmax(qs[frame]))\n", " action_taken = 'None' if frame == 0 else action_names[int(actions[frame - 1])]\n", "\n", " title.set_text(\n", " f't={frame} | true_state={int(states[frame])} | encoded_obs_idx={enc_idx} | inferred_state={q_idx} | action taken: {action_taken}'\n", " )\n", "\n", " return path_line, obs_dot, heat\n", "\n", " ani = animation.FuncAnimation(fig, update, frames=horizon, interval=900, blit=False, repeat=True)\n", " plt.close(fig)\n", " return ani\n", "\n", "\n", "make_rollout_decision_gif_anim = make_rollout_decision_gif(model, rollout)\n", "make_rollout_decision_gif_anim\n", "\n" ] }, { "cell_type": "markdown", "id": "23", "metadata": {}, "source": [ "## 12. Summary\n", "\n", "This notebook demonstrates a practical recipe for combining a differentiable layer with an structured `pymdp` generative model that can be trained with gradients & backpropagation, while the active inference agent performs variational inference and planning with explicit active inference style updates.\n", "\n", "One way of interpreting the differentiable front-end in this notebook, is as an _amortized inference module_ that learns how to execute inference in a Gaussian mixture model in its forward pass; specifically computing the latent assignment variable of a GMM (also known as the \"E-step\"). The analogy to amortized inference is not exact since the MLP layer is not guaranteed to provide calibrated probabilistic assignments; the decision-boundaries it creates in 2-D space are not the same as the soft decision-boundaries achieved by fitting a proper GMM via expectation maximization or variational Bayesian expectation maximization.\n", "\n", "In the current notebook, we fixed the generative model at the `pymdp` level; a natural next step would be to combine gradient-based learning with either gradient-based or explicitly Bayesian updates to the POMDP model parameters (A, B, and D)." ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } ================================================ FILE: examples/api/model_construction_tutorial.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Generative Model Construction with `Model` and `Distribution`\n", "\n", "This tutorial walks through usage of the `Model` and `Distribution` classes. The `Model` class wraps the `A`, `B`, `C`, and `D` arrays into a unified model object, whose structure can be generated automatically from a JSON-like configuration dict. The configuration dict, often labelled `model_description`, allows you to assign string-valued names to the random variables of the model (observations, hidden states, and control states), and to specify dependencies between these random variables (via the `\"depends_on\"` key within each variable-specific sub-dict). \n", "\n", "Within the `Model` object, each component distribution is an instance of the `Distribution` class. The `Distribution` class can use string- or integer-valued labels for both the axes and specific indices along those axes. The intention of these classes and their named dimensions/values, is to provide users a more user-friendly, interpretable entrypoint for building discrete generative models in `pymdp`.\n", "\n", "In the summary, the advantages of the `Model` and `Distribution` classes are:\n", "- Reduce memory burden on the user (and the indexing errors that often ensue) by working with named axes and elements (e.g., \"left\", \"right\" instead of 0, 1)\n", "- Increase interpretability (if applicable) and intuition in the generation and inspection of the POMDP model\n", "- Flexible specification of dependencies between random variables via string labels\n", "\n", "## Tutorial Structure\n", "\n", "1. Basic Example: A simple grid navigation task built from a structured description using labels, in which the agent has to travel to a goal location.\n", "2. A More Advanced Example: A simple foraging task built from a structured description using labels, in which the agent has to search for apples and eat them while they spawn at a set rate.\n", "\n", "---\n", "\n", "## Example 1: Grid World Navigation\n", "\n", "Let's start with the simple example: an agent moving horizontally in a 1D grid world. Our agent can be in one of four positions: \"left\", \"center_left\", \"center_right\", or \"right\", and can take actions \"move_right\" or \"move_left\". We give an example of setting up a single agent and then an example of running three agents in parallel by using the`batch_size` argument to the `Agent` constructor." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import jax.tree_util as jtu\n", "from jax import numpy as jnp\n", "from jax import random as jr\n", "from pymdp.agent import Agent\n", "from pymdp.distribution import compile_model\n", "from pymdp.envs.env import Env\n", "from pymdp.envs import rollout" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "positions = [\"left\", \"center_left\", \"center_right\", \"right\"]\n", "actions = [\"move_left\", \"move_right\"]\n", "\n", "model_description = {\n", " \"observations\": {\n", " \"position_obs\": {\n", " \"elements\": positions, \n", " \"depends_on\": [\"position\"] # we specify that the observation depends on the \"position\" state factor\n", " },\n", " },\n", " \"controls\": {\n", " \"movement\": {\"elements\": actions} # we specify the available actions\n", " },\n", " \"states\": {\n", " \"position\": {\n", " \"elements\": positions, \n", " \"depends_on\": [\"position\"], # our current position depends on previous position...\n", " \"controlled_by\": [\"movement\"] # ...and the movement action taken\n", " },\n", " },\n", "}\n", "\n", "# compile the model structure from the description\n", "model = compile_model(model_description)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have built a generative model structure using the model description, however the model's parameters are currently uninitialized arrays of zeros. So now, we can fill in the parameter tensors by using the axis and element labels we defined in the model description dict, to set values in particular indices of these arrays." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# fill in the likelihood (A) tensor\n", "# the observations have an identical mapping to the states (i.e., the agent will perfectly observe its position)\n", "model.A[\"position_obs\"][\"left\", \"left\"] = 1.0\n", "model.A[\"position_obs\"][\"center_left\", \"center_left\"] = 1.0\n", "model.A[\"position_obs\"][\"center_right\", \"center_right\"] = 1.0\n", "model.A[\"position_obs\"][\"right\", \"right\"] = 1.0\n", "# model.A[\"position_obs\"].data = jnp.eye(len(positions)) # you could also use the .data attribute to set the identity mapping directly\n", "\n", "# fill in the transition model (B) tensor\n", "# note that it's specified as [\"to\", \"from\", \"action\"]\n", "# moving right\n", "model.B[\"position\"][\"center_left\", \"left\", \"move_right\"] = 1.0 \n", "model.B[\"position\"][\"center_right\", \"center_left\", \"move_right\"] = 1.0 \n", "model.B[\"position\"][\"right\", \"center_right\", \"move_right\"] = 1.0 \n", "model.B[\"position\"][\"right\", \"right\", \"move_right\"] = 1.0 \n", "\n", "# moving left \n", "model.B[\"position\"][\"left\", \"left\", \"move_left\"] = 1.0 \n", "model.B[\"position\"][\"left\", \"center_left\", \"move_left\"] = 1.0 \n", "model.B[\"position\"][\"center_left\", \"center_right\", \"move_left\"] = 1.0 \n", "model.B[\"position\"][\"center_right\", \"right\", \"move_left\"] = 1.0 \n", "\n", "# set preferences (C) tensor - prefer to be at \"center_right\"\n", "model.C[\"position_obs\"][\"center_left\"] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's create the agent (via the Agent object) and have it infer which state it is in via an observation and select an action according to it's goal." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Current belief about position: left\n", "Goal position: center_left\n", "Action chosen: move_right\n" ] } ], "source": [ "gamma = 10 # deterministic behavior; make gamma smaller for stochastic behavior\n", "\n", "# create agent\n", "agent = Agent(**model, gamma=gamma)\n", "\n", "# set up initial observation to be \"left\"\n", "observation = jnp.zeros((agent.batch_size, 1)) # broadcast to agent's batch size (defaults to 1 agent) and add a time dimension\n", "\n", "# get the prior\n", "qs_init = jtu.tree_map(lambda x: jnp.expand_dims(x, 1), agent.D) # qs needs a time dimension too\n", "\n", "# print initial beliefs, goal, and action chosen\n", "qs = agent.infer_states([observation], qs_init)\n", "print(f\"Current belief about position: {positions[jnp.argmax(qs[0][0])]}\")\n", "qs = [jnp.squeeze(q, 1) for q in qs]\n", "\n", "print(f\"Goal position: {positions[jnp.argmax(agent.C[0])]}\")\n", "\n", "q_pi, G = agent.infer_policies(qs)\n", "action_idx = agent.sample_action(q_pi)\n", "print(f\"Action chosen: {actions[action_idx[0][0]]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also run multiple agents or independent trials in parallel, each with a different initial observation (i.e., different initial position) by using the `batch_size` argument" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Agent 0's current belief about position: left\n", "Agent 1's current belief about position: center_right\n", "Agent 2's current belief about position: right\n", "\n", "Goal position for all agents: center_left\n", "\n", "Agent 0's action chosen: move_right\n", "Agent 1's action chosen: move_left\n", "Agent 2's action chosen: move_left\n" ] } ], "source": [ "batch_size = 3 # running 3 trials or agents in parallel\n", "gamma = 10 # deterministic behavior; make gamma smaller for stochastic behavior\n", "\n", "# create agent\n", "agent = Agent(**model, batch_size=batch_size, gamma=gamma)\n", "\n", "# set up different initial observations for each agent: \"left\", \"center_right\", and \"right\"\n", "observation = [jnp.array([[0], [2], [3]])] # wrap in a list to indicate the single modality; observation[0].shape = (batch_size, 1)\n", "\n", "# get the prior\n", "qs_init = jtu.tree_map(lambda x: jnp.expand_dims(x, 1), agent.D) # qs needs a time dimension too\n", "\n", "# print goal and initial beliefs\n", "qs = agent.infer_states(observation, qs_init)\n", "for a in range(batch_size): \n", " print(f\"Agent {a}'s current belief about position: {positions[jnp.argmax(qs[0][a])]}\")\n", "qs = [jnp.squeeze(q, 1) for q in qs]\n", "\n", "print(f\"\\nGoal position for all agents: {positions[jnp.argmax(agent.C[0])]}\\n\")\n", "\n", "q_pi, G = agent.infer_policies(qs)\n", "action = agent.sample_action(q_pi)\n", "for a in range(batch_size): \n", " print(f\"Agent {a}'s action chosen: {actions[action[a][0]]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## Example 2: Apple Foraging Task\n", "\n", "Now let's look at a slightly more complex example: an apple foraging task. Here, we have a 1x3 grid, with a \"left\", \"center\", and \"right\" cell. These are orchard cells where an apple can grow at a set rate (1/3). The agent's objective is to find apples and eat them as they get a reward to eat apples. The agent can stay, move_left, move_right, or eat.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "num_locations = 3 # these correspond to \"left\", \"center\", and \"right\" and you can just specify [\"left\", \"center\", \"right\"] but we use numbers to show how to use the 'size' key instead of 'elements'\n", "item_list = [\"orchard\", \"apple\"]\n", "\n", "model_description = {\n", " \"observations\": {\n", " \"location_obs\": {\"size\": num_locations, # if you want to use numbers instead of strings, you can use the 'size' key instead of 'elements'\n", " \"depends_on\": [\"location_state\"],\n", " },\n", " \"item_obs\": {\"elements\": item_list, # \"elements\" key for strings\n", " \"depends_on\": [\"location_state\", \"left_state\", \"center_state\", \"right_state\"],\n", " },\n", " \"reward_obs\": {\"elements\": [\"no_reward\", \"reward\"],\n", " \"depends_on\": [\"reward_state\"],\n", " },\n", " },\n", " \"controls\": {\n", " \"move\": {\"elements\": [\"stay\", \"move_left\", \"move_right\"],\n", " },\n", " \"eat\": {\"elements\": [\"noop\", \"eat\"], # noop = no-operation\n", " # note that if you cannot control a state, you still need to add \n", " # an action for it (e.g., with elements: [\"null\"]) for the model to be initialized \n", " # with the correct dimensions\n", " },\n", " },\n", " \"states\": {\n", " \"location_state\": {\"size\": num_locations,\n", " \"depends_on\": [\"location_state\"],\n", " \"controlled_by\": [\"move\"],\n", " },\n", " \"reward_state\": {\"elements\": [\"no_reward\", \"reward\"],\n", " # if you have more than one dependency, the first dependency is its own state factor (at the previous timestep), \n", " # then add the other dependencies in the order they are specified (you can skip over some state factors)\n", " \"depends_on\": [\"reward_state\", \"location_state\", \n", " \"left_state\", \"center_state\", \"right_state\"],\n", " \"controlled_by\": [\"eat\"],\n", " },\n", " \"left_state\": {\"elements\": item_list,\n", " \"depends_on\": [\"left_state\", \"location_state\"], \n", " \"controlled_by\": [\"eat\"],\n", " },\n", " \"center_state\": {\"elements\": item_list,\n", " \"depends_on\": [\"center_state\", \"location_state\"],\n", " \"controlled_by\": [\"eat\"],\n", " },\n", " \"right_state\": {\"elements\": item_list,\n", " \"depends_on\": [\"right_state\", \"location_state\"],\n", " \"controlled_by\": [\"eat\"],\n", " },\n", " },\n", "}\n", "\n", "model = compile_model(model_description)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have built a generative model structure using the model description, however the model's parameters are currently uninitialized arrays of zeros. So now, we can fill in the parameter tensors by using the axis and element labels we defined in the model description dict, to set values in particular indices of these arrays." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "'''\n", "SPECIFY THE A TENSOR\n", "'''\n", "# identity mapping for the observations regarding location and reward\n", "model.A[\"location_obs\"].data = jnp.eye(len(model.A[\"location_obs\"].data))\n", "model.A[\"reward_obs\"].data = jnp.eye(len(model.A[\"reward_obs\"].data))\n", "\n", "# in any of the locations, the agent may observe apple or orchard\n", "model.A[\"item_obs\"][\"apple\", 0, \"apple\", :, :] = 1.0\n", "model.A[\"item_obs\"][\"apple\", 1, :, \"apple\", :] = 1.0\n", "model.A[\"item_obs\"][\"apple\", 2, :, :, \"apple\"] = 1.0\n", "model.A[\"item_obs\"][\"orchard\", 0, \"orchard\", :, :] = 1.0\n", "model.A[\"item_obs\"][\"orchard\", 1, :, \"orchard\", :] = 1.0\n", "model.A[\"item_obs\"][\"orchard\", 2, :, :, \"orchard\"] = 1.0\n", "model.A[\"item_obs\"].data = model.A[\"item_obs\"].data + 1e-3 # add a small amount of noise to the observations\n", "\n", "'''\n", "SPECIFY THE B TENSOR\n", "'''\n", "\n", "# for moving between locations\n", "# (to, from, action)\n", "valid_transitions = [\n", " # from 0 (left)\n", " (0, 0, \"stay\"), # from left to left, stay\n", " (1, 0, \"move_right\"), # from left to center, move right\n", " (2, 0, \"move_left\"), # from left to right, move left\n", "\n", " # from 1 (center)\n", " (0, 1, \"move_left\"), # from center to left, move left\n", " (1, 1, \"stay\"), # from center to center, stay\n", " (2, 1, \"move_right\"), # from center to right, move right\n", "\n", " # from 2 (right)\n", " (0, 2, \"move_right\"), # from right to left, move right\n", " (1, 2, \"move_left\"), # from right to cecenterntre, move left\n", " (2, 2, \"stay\"), # from right to right, stay\n", "]\n", "\n", "for to_state, from_state, action in valid_transitions:\n", " model.B[\"location_state\"][to_state, from_state, action] = 1.0\n", "\n", "# again, remember the reward states will be set as [\"to\", \"from\", ...dependencies..., \"action\"]\n", "# if the agent sees an apple and does not eat the apple (i.e., noop), it does not get a reward\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 0, \"apple\", :, :, \"noop\"] = 1.0\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 1, :, \"apple\", :, \"noop\"] = 1.0\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 2, :, :, \"apple\", \"noop\"] = 1.0\n", "\n", "# if the agent sees an orchard, it does not get a reward regardless of its actions\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 0, \"orchard\", :, :, :] = 1.0 \n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 1, :, \"orchard\", :, :] = 1.0\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 2, :, :, \"orchard\", :] = 1.0\n", "\n", "# from a reward state, there will always be no reward in the next timestep regardless of the action\n", "model.B[\"reward_state\"][\"no_reward\", \"reward\", 0, :, :, :, :] = 1.0\n", "model.B[\"reward_state\"][\"no_reward\", \"reward\", 1, :, :, :, :] = 1.0\n", "model.B[\"reward_state\"][\"no_reward\", \"reward\", 2, :, :, :, :] = 1.0\n", "\n", "# if the agent sees an orchard and eats, it will not get a reward\n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 0, \"orchard\", :, :, \"eat\"] = 0.0\n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 1, :, \"orchard\", :, \"eat\"] = 0.0\n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 2, :, :, \"orchard\", \"eat\"] = 0.0\n", "\n", "# if the agent sees an apple and eats the apple, it gets a reward and never not get a reward\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 0, \"apple\", :, :, \"eat\"] = 0.0 \n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 1, :, \"apple\", :, \"eat\"] = 0.0\n", "model.B[\"reward_state\"][\"no_reward\", \"no_reward\", 2, :, :, \"apple\", \"eat\"] = 0.0\n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 0, \"apple\", :, :, \"eat\"] = 1.0 \n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 1, :, \"apple\", :, \"eat\"] = 1.0\n", "model.B[\"reward_state\"][\"reward\", \"no_reward\", 2, :, :, \"apple\", \"eat\"] = 1.0\n", "\n", "apple_spawn_locations = [\"left_state\", \"center_state\", \"right_state\"]\n", "apple_spawn_rate = 1/3\n", "for i, state in enumerate(apple_spawn_locations):\n", " model.B[state][\"orchard\", \"orchard\", :, :] = 1.0 - apple_spawn_rate # no spawn\n", " model.B[state][\"apple\", \"orchard\", :, :] = apple_spawn_rate # spawn\n", " for agent_location in range(num_locations):\n", " if i == agent_location:\n", " # if the agent does not eat the apple (noop), the apple will stay in the cell\n", " model.B[state][\"apple\", \"apple\", agent_location, \"noop\"] = 1.0\n", " # if the agent eats the apple, it will become an orchard cell\n", " model.B[state][\"orchard\", \"apple\", agent_location, \"eat\"] = 1.0\n", " model.B[state].data = model.B[state].data + 1e-3 # add a small amount of noise to the observations\n", "\n", "'''\n", "SPECIFY THE C TENSOR. \n", "'''\n", "model.C[\"reward_obs\"][\"reward\"] = 1.0\n", "\n", "'''\n", "NORMALISE THE TENSORS\n", "'''\n", "\n", "model.A[\"location_obs\"].normalize()\n", "model.A[\"item_obs\"].normalize()\n", "model.A[\"reward_obs\"].normalize()\n", "\n", "model.B[\"location_state\"].normalize()\n", "model.B[\"reward_state\"].normalize()\n", "model.B[\"left_state\"].normalize()\n", "model.B[\"center_state\"].normalize()\n", "model.B[\"right_state\"].normalize()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "gamma = 1.0\n", "\n", "agent = Agent(**model, learn_A=False, learn_B=False, gamma=gamma, sampling_mode=\"full\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also turn the model description into an environment using `PymdpEnv`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from pymdp.envs import PymdpEnv\n", "\n", "env = PymdpEnv(**model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which can then be used to rollout the agent on the env." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from pymdp.envs import rollout\n", "\n", "info, last = rollout(agent, env, num_timesteps=10, rng_key=jr.PRNGKey(0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There's also a `make` utility method that generates an `env` and `env_params` from the model description. You can decide whether to return `env_params` using the `make_env_params` argument" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from pymdp.envs import make\n", "\n", "env, env_params = make(**model, make_env_params=False)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "info, last = rollout(agent, env, num_timesteps=10, rng_key=jr.PRNGKey(0))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "info, last = rollout(agent, env, num_timesteps=10, rng_key=jr.PRNGKey(0), env_params=env_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you provide `make_env_params = True` to the `make()` function, it will return out the environmental parameters as a separate dict of parameters (e.g., `A`, `B`, `D` as keys), with the batch size of these parameters matched to the batch size of the input tensors `A`, `B`, and `D`. \n", "\n", "Passing `env_params` as input arguments to `Env` functions like `reset()` and `step()`, rather than having them be stored internally as class attrbutes, enables the following:\n", "* different environments per agent -- if you want to use a different environmental parameterization per agent (e.g., different transition probabilities per environment), then this can be differentiated in the leading dimensions of any array-valued leaves of the `env_params` pytree.\n", "* custom changes to environmental parameters -- if you want to changing environmental paramters in a custom way (e.g. `env_params[\"B\"][factor_idx][batch_indices] = env_params[\"B\"][factor_idx].at[batch_indices][:,state_idx].set(new_transition_parameters)`) without having to construct a new `Env`. One can simply change the parameters (as long as as shapes align) and then pass them back into the same environment's `step` " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# here, just broadcast the compiled model's A, B, and D tensors across the batch dimension of the agent to show the point\n", "A_env_batched = [jnp.broadcast_to(a.data, (agent.batch_size, ) + a.data.shape) for a in model.A]\n", "B_env_batched = [jnp.broadcast_to(b.data, (agent.batch_size, ) + b.data.shape) for b in model.B]\n", "D_env_batched = [jnp.broadcast_to(d.data, (agent.batch_size, ) + d.data.shape) for d in model.D]\n", "\n", "env, env_params = make(A_env_batched, B_env_batched, D_env_batched, agent.A_dependencies, agent.B_dependencies, make_env_params=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, also pass `env_params` to `rollout` for vmapping across both agents and environments in parallel. NOTE: This means that the `env_params` must have a matched batch size to the `Agent` class" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "info, last = rollout(agent, env, num_timesteps=10, rng_key=jr.PRNGKey(0), env_params=env_params)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv311", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/envs/chained_cue_navigation.py ================================================ """Generate legacy-style chained-cue navigation GIFs with the JAX environment. This script recreates: - `.github/chained_cue_navigation_v1.gif` - `.github/chained_cue_navigation_v2.gif` using `CueChainingEnv`, `Agent`, and environment assets in `pymdp/envs/assets/`. """ from __future__ import annotations import argparse from pathlib import Path import jax.numpy as jnp import jax.random as jr import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as np import scipy.ndimage as ndimage from matplotlib.animation import FuncAnimation, PillowWriter from matplotlib.offsetbox import AnnotationBbox, OffsetImage from pymdp.agent import Agent from pymdp.envs.cue_chaining import CueChainingEnv from pymdp.envs.rollout import rollout def build_agent(env: CueChainingEnv, policy_len: int = 4) -> Agent: """Construct an agent with known start location and uncertain latent context.""" C = [jnp.zeros((a.shape[0],), dtype=jnp.float32) for a in env.A] C[3] = C[3].at[1].set(2.0) C[3] = C[3].at[2].set(-4.0) D_agent = [ env.D[0], # known initial location jnp.ones_like(env.D[1]) / env.D[1].shape[0], # uncertain cue2 latent jnp.ones_like(env.D[2]) / env.D[2].shape[0], # uncertain reward latent ] return Agent( A=env.A, B=env.B, C=C, D=D_agent, A_dependencies=env.A_dependencies, B_dependencies=env.B_dependencies, policy_len=policy_len, action_selection="deterministic", batch_size=1, ) def rollout_locations( cue2_state: int, reward_condition: int, num_timesteps: int = 12, seed: int = 0, policy_len: int = 4, ) -> tuple[list[tuple[int, int]], CueChainingEnv]: """Run one rollout and return location trajectory and environment.""" env = CueChainingEnv( grid_shape=(5, 7), start_location=(0, 0), cue1_location=(2, 0), cue2_locations=((0, 2), (1, 3), (3, 3), (4, 2)), reward_locations=((1, 5), (3, 5)), cue2_state=cue2_state, reward_condition=reward_condition, ) agent = build_agent(env, policy_len=policy_len) _, info = rollout(agent, env, num_timesteps=num_timesteps, rng_key=jr.PRNGKey(seed)) locs = [env.index_to_coords(int(info["observation"][0][0, t, 0])) for t in range(num_timesteps + 1)] return locs, env def interpolate_locations( locations: list[tuple[int, int]], points_per_segment: int = 10, ) -> np.ndarray: """Linearly interpolate between discrete trajectory points for smoother animation.""" weights = np.linspace(0.0, 1.0, points_per_segment) segments = [] for idx in range(len(locations) - 1): p0 = np.asarray(locations[idx], dtype=float) p1 = np.asarray(locations[idx + 1], dtype=float) inter = [(1.0 - w) * p0 + w * p1 for w in weights] segments.append(np.asarray(inter)) return np.vstack(segments) def load_assets(asset_dir: Path) -> dict[str, np.ndarray]: """Load and orient image assets.""" mouse = plt.imread(asset_dir / "mouse.png") assets = { "mouse_down": mouse, "mouse_right": np.clip(ndimage.rotate(mouse, 90, reshape=True), 0.0, 1.0), "mouse_left": np.clip(ndimage.rotate(mouse, -90, reshape=True), 0.0, 1.0), "mouse_up": np.clip(ndimage.rotate(mouse, 180, reshape=True), 0.0, 1.0), "cheese": plt.imread(asset_dir / "cheese.png"), "shock": plt.imread(asset_dir / "shock.png"), } return assets def make_animation( output_path: Path, env: CueChainingEnv, locations: list[tuple[int, int]], fps: int = 15, points_per_segment: int = 10, ) -> None: """Render one chained-cue navigation rollout to GIF.""" cue1_loc = env.cue1_location cue2_loc = env.cue2_locations[env.D[1].argmax().item()] reward_condition = env.D[2].argmax().item() reward_locs = env.reward_locations reward_loc = reward_locs[reward_condition] shock_loc = reward_locs[1 - reward_condition] points = interpolate_locations(locations, points_per_segment=points_per_segment) rows, cols = env.grid_shape fig, ax = plt.subplots(figsize=(16, 10)) X, Y = np.meshgrid(np.arange(cols + 1), np.arange(rows + 1)) cue_grid = np.ones((rows, cols)) cue_grid[cue1_loc[0], cue1_loc[1]] = 15.0 for r, c in env.cue2_locations: cue_grid[r, c] = 5.0 mesh = ax.pcolormesh( X, Y, cue_grid, edgecolors="k", linewidth=3, cmap="coolwarm", vmin=0, vmax=30, ) ax.invert_yaxis() reward_top = ax.add_patch( patches.Rectangle( (reward_locs[0][1], reward_locs[0][0]), 1.0, 1.0, linewidth=10, edgecolor=[0.5, 0.5, 0.5], facecolor="none", ) ) reward_bottom = ax.add_patch( patches.Rectangle( (reward_locs[1][1], reward_locs[1][0]), 1.0, 1.0, linewidth=10, edgecolor=[0.5, 0.5, 0.5], facecolor="none", ) ) cue1_rect = ax.add_patch( patches.Rectangle( (cue1_loc[1], cue1_loc[0]), 1.0, 1.0, linewidth=15, edgecolor=[0.2, 0.7, 0.6], facecolor="none", ) ) cue2_rect = ax.add_patch( patches.Rectangle( (cue2_loc[1], cue2_loc[0]), 1.0, 1.0, linewidth=15, edgecolor=[0.2, 0.7, 0.6], facecolor="none", ) ) cue2_rect.set_visible(False) qmark_offsets = (0.4, 0.6) cue_texts = {} for i, (r, c) in enumerate(env.cue2_locations): cue_texts[(r, c)] = ax.text(c + qmark_offsets[0], r + qmark_offsets[1], "?", fontsize=55, color="k") if i == 0: pass ax.text(cue1_loc[1] + 0.3, cue1_loc[0] + 0.6, "Cue 1", fontsize=20) ax.set_xticklabels([]) ax.set_yticklabels([]) ax.grid(which="minor", color="w", linestyle="-", linewidth=2) fig.tight_layout() assets = load_assets(Path(__file__).resolve().parents[2] / "pymdp" / "envs" / "assets") mouse_images = { "down": OffsetImage(assets["mouse_down"], zoom=0.05), "right": OffsetImage(assets["mouse_right"], zoom=0.05), "left": OffsetImage(assets["mouse_left"], zoom=0.05), "up": OffsetImage(assets["mouse_up"], zoom=0.05), } cheese_img = OffsetImage(assets["cheese"], zoom=0.03) shock_img = OffsetImage(assets["shock"], zoom=0.13) mouse_artists = { name: AnnotationBbox(img, (points[0, 1] + 0.5, points[0, 0] + 0.5), frameon=False) for name, img in mouse_images.items() } for name, artist in mouse_artists.items(): ax.add_artist(artist) artist.set_visible(name == "down") revealed_cue1 = False revealed_cue2 = False cheese_artist = None shock_artist = None def _set_mouse_heading(prev_xy: np.ndarray, curr_xy: np.ndarray) -> None: dx = curr_xy[1] - prev_xy[1] dy = curr_xy[0] - prev_xy[0] if dx > 1e-6: heading = "right" elif dx < -1e-6: heading = "left" elif dy > 1e-6: heading = "down" elif dy < -1e-6: heading = "up" else: heading = next(name for name, artist in mouse_artists.items() if artist.get_visible()) for name, artist in mouse_artists.items(): artist.set_visible(name == heading) if name == heading: artist.xy = (curr_xy[1] + 0.5, curr_xy[0] + 0.5) artist.xybox = (curr_xy[1] + 0.5, curr_xy[0] + 0.5) artist.set_zorder(3) def init(): return [mesh, *mouse_artists.values()] def update(frame_idx: int): nonlocal revealed_cue1, revealed_cue2, cheese_artist, shock_artist curr = points[frame_idx] prev = points[max(frame_idx - 1, 0)] curr_rc = (int(round(curr[0])), int(round(curr[1]))) if (not revealed_cue1) and curr_rc == cue1_loc: revealed_cue1 = True cue1_rect.set_visible(False) cue2_rect.set_visible(True) cue_grid[cue2_loc[0], cue2_loc[1]] = 15.0 mesh.set_array(cue_grid.ravel()) for coord, text in cue_texts.items(): if coord == cue2_loc: text.set_position((cue2_loc[1] + 0.3, cue2_loc[0] + 0.6)) text.set_text("Cue 2") text.set_fontsize(20) else: text.set_visible(False) if (not revealed_cue2) and curr_rc == cue2_loc: revealed_cue2 = True cue2_rect.set_visible(False) if reward_condition == 0: reward_top.set_edgecolor("g") reward_top.set_facecolor("g") reward_bottom.set_edgecolor([0.7, 0.2, 0.2]) reward_bottom.set_facecolor([0.7, 0.2, 0.2]) else: reward_bottom.set_edgecolor("g") reward_bottom.set_facecolor("g") reward_top.set_edgecolor([0.7, 0.2, 0.2]) reward_top.set_facecolor([0.7, 0.2, 0.2]) cheese_artist = AnnotationBbox( cheese_img, (reward_loc[1] + 0.5, reward_loc[0] + 0.5), frameon=False, ) cheese_artist.set_zorder(2) ax.add_artist(cheese_artist) shock_artist = AnnotationBbox( shock_img, (shock_loc[1] + 0.5, shock_loc[0] + 0.5), frameon=False, ) shock_artist.set_zorder(2) ax.add_artist(shock_artist) _set_mouse_heading(prev, curr) artists = [mesh, *mouse_artists.values()] if cheese_artist is not None: artists.append(cheese_artist) if shock_artist is not None: artists.append(shock_artist) return artists anim = FuncAnimation( fig, update, frames=len(points), init_func=init, blit=True, interval=1000 / max(fps, 1), ) output_path.parent.mkdir(parents=True, exist_ok=True) anim.save(output_path, writer=PillowWriter(fps=fps)) plt.close(fig) def main(): parser = argparse.ArgumentParser(description="Generate chained-cue navigation GIFs.") parser.add_argument( "--output-dir", type=Path, default=Path(".github"), help="Directory to write GIFs into.", ) parser.add_argument("--fps", type=int, default=15, help="GIF frames per second.") parser.add_argument("--timesteps", type=int, default=12, help="Rollout timesteps.") parser.add_argument( "--interp-points", type=int, default=10, help="Interpolated points per step transition.", ) args = parser.parse_args() # Legacy-matching variants: # v1 -> cue2 state 0 (Cue 1), reward condition 0 (TOP) # v2 -> cue2 state 2 (Cue 3), reward condition 1 (BOTTOM) variants = [ ("chained_cue_navigation_v1.gif", 0, 0), ("chained_cue_navigation_v2.gif", 2, 1), ] for filename, cue2_state, reward_condition in variants: locations, env = rollout_locations( cue2_state=cue2_state, reward_condition=reward_condition, num_timesteps=args.timesteps, seed=0, policy_len=4, ) make_animation( output_path=args.output_dir / filename, env=env, locations=locations, fps=args.fps, points_per_segment=args.interp_points, ) print(f"Saved {(args.output_dir / filename).as_posix()}") if __name__ == "__main__": main() ================================================ FILE: examples/envs/cue_chaining_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "id": "b803090f", "metadata": {}, "source": [ "# Active Inference Demo: Cue Chaining (JAX)\n", "\n", "This tutorial ports the legacy cue-chaining demo to modern JAX `pymdp` using:\n", "\n", "- `CueChainingEnv` (a reusable `PymdpEnv` subclass)\n", "- `Agent` for inference + planning\n", "- `rollout()` for a scanned active-inference loop\n", "\n", "The task is a two-stage epistemic chain:\n", "\n", "1. Visit **Cue 1** to learn which **Cue 2** location is informative.\n", "2. Visit that **Cue 2** location to learn which reward location is correct.\n", "3. Exploit by moving to the rewarding location." ] }, { "cell_type": "code", "execution_count": 1, "id": "b59618c1", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:06.154964Z", "iopub.status.busy": "2026-02-17T16:40:06.154873Z", "iopub.status.idle": "2026-02-17T16:40:16.988569Z", "shell.execute_reply": "2026-02-17T16:40:16.988276Z" } }, "outputs": [], "source": [ "import jax.numpy as jnp\n", "import jax.random as jr\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "\n", "from pymdp.agent import Agent\n", "from pymdp.envs.cue_chaining import CueChainingEnv\n", "from pymdp.envs.rollout import rollout" ] }, { "cell_type": "markdown", "id": "4f715d31", "metadata": {}, "source": [ "## 1) Build the Cue-Chaining Environment\n", "\n", "We fix the hidden cue and reward condition for interpretability." ] }, { "cell_type": "code", "execution_count": 2, "id": "21de5c24", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:16.990191Z", "iopub.status.busy": "2026-02-17T16:40:16.989980Z", "iopub.status.idle": "2026-02-17T16:40:17.862819Z", "shell.execute_reply": "2026-02-17T16:40:17.862419Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A shapes: [(35, 35), (5, 35, 4), (3, 35, 4, 2), (3, 35, 2)]\n", "B shapes: [(35, 35, 5), (4, 4, 1), (2, 2, 1)]\n", "D shapes: [(35,), (4,), (2,)]\n" ] } ], "source": [ "env = CueChainingEnv(\n", " grid_shape=(5, 7),\n", " start_location=(0, 0),\n", " cue1_location=(2, 0),\n", " cue2_locations=((0, 2), (1, 3), (3, 3), (4, 2)),\n", " reward_locations=((1, 5), (3, 5)),\n", " cue2_state=3, # active cue2 is L4\n", " reward_condition=1, # reward at second reward location\n", ")\n", "\n", "print(\"A shapes:\", [a.shape for a in env.A])\n", "print(\"B shapes:\", [b.shape for b in env.B])\n", "print(\"D shapes:\", [d.shape for d in env.D])" ] }, { "cell_type": "markdown", "id": "0785fbbc", "metadata": {}, "source": [ "## 2) Create the Agent (Generative Model)\n", "\n", "We keep the legacy cue-chaining prior structure:\n", "\n", "- The agent is certain about its **start location**.\n", "- The agent is uncertain (uniform) over latent **cue2 state** and **reward condition**.\n", "\n", "This lets short-horizon planning (`policy_len=4`) still prioritize epistemic actions (visiting cue1, then cue2).\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "203e2547", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:17.865208Z", "iopub.status.busy": "2026-02-17T16:40:17.865087Z", "iopub.status.idle": "2026-02-17T16:40:18.998759Z", "shell.execute_reply": "2026-02-17T16:40:18.997954Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num_states: [35, 4, 2]\n", "num_obs: [35, 5, 3, 3]\n", "num_controls: [5, 1, 1]\n", "agent D shapes: [(35,), (4,), (2,)]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_92050/3369534931.py:12: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "C = [jnp.zeros((a.shape[0],), dtype=jnp.float32) for a in env.A]\n", "C[3] = C[3].at[1].set(3.0)\n", "C[3] = C[3].at[2].set(-6.0)\n", "\n", "# Legacy-style prior: known initial location, uncertain latent context.\n", "D_agent = [\n", " env.D[0],\n", " jnp.ones_like(env.D[1]) / env.D[1].shape[0],\n", " jnp.ones_like(env.D[2]) / env.D[2].shape[0],\n", "]\n", "\n", "agent = Agent(\n", " A=env.A,\n", " B=env.B,\n", " C=C,\n", " D=D_agent,\n", " A_dependencies=env.A_dependencies,\n", " B_dependencies=env.B_dependencies,\n", " policy_len=4,\n", " action_selection='deterministic',\n", " batch_size=1,\n", ")\n", "\n", "print(\"num_states:\", agent.num_states)\n", "print(\"num_obs:\", agent.num_obs)\n", "print(\"num_controls:\", agent.num_controls)\n", "print(\"agent D shapes:\", [d.shape for d in D_agent])\n" ] }, { "cell_type": "markdown", "id": "92e9b6a5", "metadata": {}, "source": [ "## 3) Run `rollout()`" ] }, { "cell_type": "code", "execution_count": 4, "id": "ea613d7d", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:19.000570Z", "iopub.status.busy": "2026-02-17T16:40:19.000446Z", "iopub.status.idle": "2026-02-17T16:40:20.737451Z", "shell.execute_reply": "2026-02-17T16:40:20.736672Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "action shape: (1, 11, 3)\n", "location observation shape: (1, 11, 1)\n", "reward observation shape: (1, 11, 1)\n" ] } ], "source": [ "T = 10\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=jr.PRNGKey(0))\n", "\n", "print(\"action shape:\", info[\"action\"].shape)\n", "print(\"location observation shape:\", info[\"observation\"][0].shape)\n", "print(\"reward observation shape:\", info[\"observation\"][3].shape)" ] }, { "cell_type": "markdown", "id": "13dc607b", "metadata": {}, "source": [ "## 4) Decode Observations and Actions" ] }, { "cell_type": "code", "execution_count": 5, "id": "c6a9125f", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:20.738979Z", "iopub.status.busy": "2026-02-17T16:40:20.738871Z", "iopub.status.idle": "2026-02-17T16:40:20.790395Z", "shell.execute_reply": "2026-02-17T16:40:20.790080Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tloccue1_obscue2_obsreward_obsaction
00(0, 0)NullNullNullDOWN
11(1, 0)NullNullNullDOWN
22(2, 0)L4NullNullDOWN
33(3, 0)NullNullNullDOWN
44(4, 0)NullNullNullRIGHT
55(4, 1)NullNullNullRIGHT
66(4, 2)Nullreward_on_bottomNullUP
77(3, 2)NullNullNullRIGHT
88(3, 3)NullNullNullRIGHT
99(3, 4)NullNullNullRIGHT
1010(3, 5)NullNullCheeseSTAY
\n", "
" ], "text/plain": [ " t loc cue1_obs cue2_obs reward_obs action\n", "0 0 (0, 0) Null Null Null DOWN\n", "1 1 (1, 0) Null Null Null DOWN\n", "2 2 (2, 0) L4 Null Null DOWN\n", "3 3 (3, 0) Null Null Null DOWN\n", "4 4 (4, 0) Null Null Null RIGHT\n", "5 5 (4, 1) Null Null Null RIGHT\n", "6 6 (4, 2) Null reward_on_bottom Null UP\n", "7 7 (3, 2) Null Null Null RIGHT\n", "8 8 (3, 3) Null Null Null RIGHT\n", "9 9 (3, 4) Null Null Null RIGHT\n", "10 10 (3, 5) Null Null Cheese STAY" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "records = []\n", "for t in range(T + 1):\n", " loc_obs = int(info[\"observation\"][0][0, t, 0])\n", " cue1_obs = int(info[\"observation\"][1][0, t, 0])\n", " cue2_obs = int(info[\"observation\"][2][0, t, 0])\n", " rew_obs = int(info[\"observation\"][3][0, t, 0])\n", " action_idx = int(info[\"action\"][0, t, 0])\n", "\n", " records.append(\n", " {\n", " \"t\": t,\n", " \"loc\": env.index_to_coords(loc_obs),\n", " \"cue1_obs\": env.cue1_obs_names[cue1_obs],\n", " \"cue2_obs\": env.cue2_obs_names[cue2_obs],\n", " \"reward_obs\": env.reward_obs_names[rew_obs],\n", " \"action\": env.ACTION_LABELS[action_idx],\n", " }\n", " )\n", "\n", "trajectory_df = pd.DataFrame(records)\n", "trajectory_df" ] }, { "cell_type": "markdown", "id": "e9b08794", "metadata": {}, "source": [ "## 5) Visualize the trajectory" ] }, { "cell_type": "code", "execution_count": 6, "id": "ee345b31", "metadata": { "execution": { "iopub.execute_input": "2026-02-17T16:40:20.791550Z", "iopub.status.busy": "2026-02-17T16:40:20.791455Z", "iopub.status.idle": "2026-02-17T16:40:21.209469Z", "shell.execute_reply": "2026-02-17T16:40:21.209081Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnwAAAHqCAYAAACeOpOVAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUcRJREFUeJzt3QeYE+XaxvE72UbvRXqTXhQQFFFEQBFRERsWPux4rCBWVFRs6LH3BurxgEfUI2IBVJSiFKWIBwURUBGlwy7ba/Jdz2DW3WWBbewkw//nFdlM2pOZSXLnfd954wsGg0EBAADAs/xuFwAAAICDi8AHAADgcQQ+AAAAjyPwAQAAeByBDwAAwOMIfAAAAB5H4AMAAPA4Ah8AAIDHEfgAAAA8jsCHQ9bcuXPl8/n03nvvldl93nvvvc59lsQbb7zh3Pa3335TJGrevLkuueSSvdav/Rtu3nnnHdWqVUvJycme3y4ldTC2X2leH2XFtqPVYNvVy4455hjdeuutbpeBMELgQ5lYv369rrrqKrVs2VIVKlRQtWrV1Lt3bz399NNKS0tzuzx4VGpqqhMiihNKcnJydM899+j6669XlSpVcpc/9NBD+uCDDw5SpSiOt956S0899ZQi0aZNm5x9csWKFa7Wcdttt+n555/Xli1bXK0D4YPAh1L75JNP1LlzZ6fV5PTTT9ezzz6rCRMmqGnTprrllls0atQoHSruuuuuEgfc//u//3Nu26xZszKvy8uBb/z48cUKfB999JHWrFmjkSNH5lu+r8DHdvFW4LPtaNvTtuvBCny2T7od+IYMGeJ88X7hhRdcrQPhI9rtAhDZfv31V51//vnOm+iXX36pBg0a5F527bXXat26dU4gPFRER0c7p5KIiopyTuEiJSVFlStXlte8/vrrTutzo0aNInK7IL/09HTFxsbK7y9a+4V151ovRKQp7uvR1sc555yjN9980wmgbnelw3208KFU/vnPfzrjoCZNmpQv7IUcfvjhuS18+xs7Y8utGySvP//8U5dddpnq16+vuLg4dezYUa+99lqRa0tISNCNN97ojC2z2zdu3FgjRozQjh078l0vEAjowQcfdC63D4L+/fs7QTWvr776Sueee67Tamn31aRJE+e+C7bmFTZGyc5fd911TutRp06dcp/LrFmzDjhWzGo/7bTT9PXXX6tnz55OfdZtbm/iBf3vf//TCSecoIoVKzrP5YEHHnDCTVHGn9nYO+vetK75U089VVWrVtVFF12U+0Fz0003Oc/Zam/btq0ee+wxBYNBlcS7776r7t27O3XWqVNHw4cPd7Z1Xn379nVOhdVp68TYc6pbt67zd+gDrbD9qGA4sPU+YMCAfMvtdvY8//Wvf+XeT2g84v62i7UsHnXUUc5zsVbuUEvj+++/75y37WXP9bvvvturlp9++sn5QLaxhHY9u58PP/ywyOvR1tnll1+uhg0bOtulRYsWuvrqq5WZmZl7nV9++cXZb+0xKlWq5IzrKuwL2B9//KEzzzzTCRT16tVz9u2MjIxCH/ebb77RKaecourVqzv3afvcggUL9rqe7bM9evRwnlurVq308ssvF+l52Xa3Gjds2JC7LULbPDSu8O2333Za0y20Ww2JiYnatWuXbr75Zme9275srVuDBg3S999/n+/+9/U+VNTtsb/3FavPnrO59NJLc+vP+1hF2f/39Xq0oQgxMTHavn37XnVZi3WNGjWcfTzkpJNOctaj262NCA+08KFUrHvMAsixxx5bpve7detW58MpFJbsg33mzJnOB5y9uY8ePXq/t7cQevzxx2v16tVOaOzWrZvzhmxv4PbhZm+0IQ8//LDzbdg+LHbv3u2EWHtztQ+2vG/S1n1oH6i1a9fWt99+63Rd233ZZQdiH34WAq655hrnzfuZZ57R2Wefrd9//925v/2x8GkfRPbcL774Yif02geCfWhYcDT2gXHiiSc662vs2LHOB/fEiROdD6Siys7O1sCBA3Xcccc5gc4+SC3UnXHGGZozZ47z+EceeaQ+/fRTp6veHvPJJ59UcdgHn30Q2oeidfvbdrZxnhYYLBTZB1ZR2T7x4osvOttk6NChOuuss5zlXbp02edtli1b5gQi2x/y+ve//60rrrjCCdWhrl4LKQfaLhdeeKEzdtU+tG2d2ZCGl156SXfccYezrY09z/POO8/pRg61Qv3444+5rYy33367s71sSISFrv/+97/O8zlQt6HVauHD6m3Xrp2zPewAJNtPrcXL1q29Lu38DTfc4OxnFmhte9r1Qo9hX1rsS47ti3Y9C5C2PqzFviBbZiHK9j0LH/Z87EtFv379nC9FVpNZuXKlTj75ZGcbWQC3fcuub1/eDuTOO+90Xof22grtX3nHWpr777/feY72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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10, 5))\n", "rows, cols = env.grid_shape\n", "\n", "for r in range(rows):\n", " for c in range(cols):\n", " ax.add_patch(plt.Rectangle((c, r), 1, 1, facecolor=\"white\", edgecolor=\"black\", linewidth=1))\n", "\n", "c1r, c1c = env.cue1_location\n", "ax.add_patch(plt.Rectangle((c1c, c1r), 1, 1, facecolor=\"#d6bcfa\", edgecolor=\"#553c9a\", linewidth=2))\n", "ax.text(c1c + 0.5, c1r + 0.5, \"Cue1\", ha=\"center\", va=\"center\", fontsize=9)\n", "\n", "active_cue_idx = int(info[\"env_state\"][1][0, 0])\n", "for i, (r, c) in enumerate(env.cue2_locations):\n", " color = \"#68d391\" if i == active_cue_idx else \"#e2e8f0\"\n", " ax.add_patch(plt.Rectangle((c, r), 1, 1, facecolor=color, edgecolor=\"#2d3748\", linewidth=2))\n", " ax.text(c + 0.5, r + 0.5, env.cue2_names[i], ha=\"center\", va=\"center\", fontsize=9)\n", "\n", "true_reward_state = int(info[\"env_state\"][2][0, 0])\n", "for i, (r, c) in enumerate(env.reward_locations):\n", " is_reward = i == true_reward_state\n", " face = \"#9ae6b4\" if is_reward else \"#feb2b2\"\n", " label = \"Cheese\" if is_reward else \"Shock\"\n", " ax.add_patch(plt.Rectangle((c, r), 1, 1, facecolor=face, edgecolor=\"#1a202c\", linewidth=2))\n", " ax.text(c + 0.5, r + 0.5, label, ha=\"center\", va=\"center\", fontsize=8)\n", "\n", "coords = [env.index_to_coords(int(info[\"observation\"][0][0, t, 0])) for t in range(T + 1)]\n", "xs = [c + 0.5 for _, c in coords]\n", "ys = [r + 0.5 for r, _ in coords]\n", "ax.plot(xs, ys, color=\"#2b6cb0\", linewidth=2)\n", "ax.scatter(xs, ys, c=range(T + 1), cmap=\"viridis\", s=50)\n", "\n", "for t, (x, y) in enumerate(zip(xs, ys)):\n", " ax.text(x, y - 0.2, str(t), ha=\"center\", va=\"center\", fontsize=7)\n", "\n", "ax.set_xlim(0, cols)\n", "ax.set_ylim(rows, 0)\n", "ax.set_aspect(\"equal\")\n", "ax.set_title(\"Cue-chaining rollout (time-coded trajectory)\")\n", "ax.set_xticks(range(cols + 1))\n", "ax.set_yticks(range(rows + 1))\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "f17c82fc", "metadata": {}, "source": [ "This reusable environment can now be used directly in future planning and docs demos." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 5 } ================================================ FILE: examples/envs/generalized_tmaze_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# T-Maze Task with Distractors\n", "\n", "In this tutorial, we set up a T-maze task where an agent navigates a grid to locate rewards. The agent can move in four directions: up, down, left, or right. \n", "\n", "The agent would navigate to the cues to obtain information about two potential reward locations. While these cues guide the agent's search, they do not guarantee the presence of a real reward. The agent must learn that some cues are distractors, so it may follow them initially but should recognize when a location does not contain a real reward and continue exploring.\n", "\n", "This is to test sophisticated inference. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial Setup\n", "To run this notebook, it's recommended to use a virtual environment. You can refer to [this guide](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/) to learn how to set up a virtual environment.\n", "\n", "Then, install the current repo as a package in editable mode by running the following command in your terminal:\n", "```bash\n", "pip install -e .\n", "```\n", "\n", "And then, install mediapy by running the following command in your terminal:\n", "```bash\n", "pip install mediapy\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "from jax import numpy as jnp, random as jr\n", "\n", "from pymdp.envs.generalized_tmaze import (\n", " GeneralizedTMazeEnv, parse_maze, get_maze_matrix \n", ")\n", "\n", "from pymdp.envs.rollout import rollout\n", "from pymdp.agent import Agent\n", "from pymdp.utils import list_array_uniform\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the Environment\n", "\n", "The environment consists of the following elements, which are represented in the figure:\n", "\n", "- **Agent (Green Square)**: The agent starts at a designated position and explores the grid to locate rewards.\n", "- **Cues and Reward Sets**: Each colour represents a set that includes one cue (marked by a black cross) and two potential reward locations associated with that cue.\n", " - **Green Set (True Reward Set)**: Contains real outcomes. Each reward location has a secondary dot to indicate the type of outcome:\n", " - **Red Dot**: Indicates a reward.\n", " - **Blue Dot**: Indicates a punishment.\n", " - **Orange and Blue Sets (Distractor Sets)**: These are distractor sets that do not contain real rewards. The reward locations in these sets lack a secondary dot, indicating a false reward location. Although the cues point to these locations, they do not contain actual rewards.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAALVCAYAAABHiZeHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgA1JREFUeJzs3Xd0VHX+//HXnclMeichCQkp9G4ERBQEFAULP1FURFSwrigiuqxlv7t2xbXsulixUVwLrrIrgqKigB0QjPQeSJBACJBOyszc3x8js4QkkIQbSvJ8nDNHcudz733PZJD7mk+5hmmapgAAAADAQrYTXQAAAACApoegAQAAAMByBA0AAAAAliNoAAAAALAcQQMAAACA5QgaAAAAACxH0AAAAABgOYIGAAAAAMsRNAAAAABYjqABoNl7+OGHZRhGlW0pKSkaO3bsca1j+vTpMgxD27ZtO67nRd3w+wGA+iFoAKhRZmamxo8fr/bt2ysoKEhBQUHq3Lmz7rjjDq1cufJEl9csbdu2TYZh1OlR28VwSkqKDMPQ4MGDa3z+9ddf9x3j559/bsRX0zBHew+eeuqpE11is/Luu+/q+eefP9FlADhJ+Z3oAgCcfObOnauRI0fKz89Po0ePVo8ePWSz2bR+/XrNnj1br7zyijIzM5WcnHyiS200GzZskM12cn0XExMTo7fffrvKtueee047duzQP/7xj2ptaxMQEKCFCxdq165diouLq/LcO++8o4CAAJWVlVlXeCMYNWqULrroomrb09PTG+2c1113na6++mr5+/s32jlONe+++65Wr16tiRMnnuhSAJyECBoAqtiyZYuuvvpqJScn66uvvlJ8fHyV5//2t7/p5ZdfPukuwg9VUlKi4ODgYzrGyXgxGRwcrGuvvbbKtvfff1/79++vtv1Izj77bC1btkyzZs3SXXfd5du+Y8cOffvtt7rsssv00UcfWVZ3Yzj99NPr9ZqtYLfbZbfbj9jGNE2VlZUpMDDwOFUFACevk/dKAcAJ8fTTT6ukpETTpk2rFjIkyc/PTxMmTFBSUlKV7evXr9cVV1yhqKgoBQQEqFevXpozZ06VNgfHuH///fe65557FBMTo+DgYF122WXas2dPtXN99tln6t+/v4KDgxUaGqqLL75Ya9asqdJm7NixCgkJ0ZYtW3TRRRcpNDRUo0ePliR9++23uvLKK9W6dWv5+/srKSlJd999tw4cOHDU9+HwORp1HaZUl/dBktasWaNzzz1XgYGBSkxM1OOPPy6Px3PUuqwQEBCgyy+/XO+++26V7e+9954iIyM1ZMiQavusXLlSY8eOVVpamgICAhQXF6cbb7xRe/fu9bU52rCmQy1ZskRDhw5VeHi4goKCNGDAAH3//feWvs6UlBRdcskl+u6773TGGWcoICBAaWlpmjlzpq/Nzz//LMMwNGPGjGr7f/755zIMQ3PnzpVU8xyNg+f4/PPP1atXLwUGBmrq1KmSpK1bt+rKK69UVFSUgoKCdOaZZ2revHlVzrFo0SIZhqEPPvhATzzxhBITExUQEKDzzjtPmzdvrtJ24MCB6tq1q1auXKkBAwYoKChIbdu21YcffihJWrx4sfr06aPAwEB16NBBCxYsqPaafvvtN914441q2bKl/P391aVLF7311lsNqmngwIGaN2+etm/f7vsdp6Sk1OE3A6C5oEcDQBVz585V27Zt1adPnzrvs2bNGp199tlq1aqV7r//fgUHB+uDDz7Q8OHD9dFHH+myyy6r0v7OO+9UZGSkHnroIW3btk3PP/+8xo8fr1mzZvnavP322xozZoyGDBmiv/3tbyotLdUrr7yifv366ZdffqlyQeNyuTRkyBD169dPzz77rIKCgiRJ//73v1VaWqpx48YpOjpaS5cu1QsvvKAdO3bo3//+d73el8OHLEnSX/7yF+Xm5iokJKRe78OuXbs0aNAguVwuX7vXXnvtuH4Lfs011+iCCy7Qli1b1KZNG0neYTBXXHGFHA5HtfZffvmltm7dqhtuuEFxcXFas2aNXnvtNa1Zs0Y//fSTDMOocWhXZWWl7r77bjmdTt+2r7/+WhdeeKF69uyphx56SDabTdOmTdO5556rb7/9VmecccZR6y8tLVVeXl617REREfLz+98/bZs3b9YVV1yhm266SWPGjNFbb72lsWPHqmfPnurSpYt69eqltLQ0ffDBBxozZkyVY82aNavW4HWoDRs2aNSoUfrDH/6gW265RR06dNDu3bt11llnqbS0VBMmTFB0dLRmzJih//f//p8+/PDDan8nnnrqKdlsNk2aNEkFBQV6+umnNXr0aC1ZsqRKu/379+uSSy7R1VdfrSuvvFKvvPKKrr76ar3zzjuaOHGibrvtNl1zzTV65plndMUV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hYVZ9nmxwsiRI/XII4/oo48+UsuWLVVYWFhliFJ9JScn1/j7XL9+ve/54ykmJkahoaFyu92Wvu+19YABgMTytgAOc++99yooKEg33nijdu/eXe35w7/NjI2N1cCBAzV16lTl5ORUa1/TsrVHM2TIEIWFhenJJ59UZWVlg4558NvYQ+s1TVP//Oc/612PJE2bNk1Tp07VSy+9VGMAq8/7cNFFF+mnn37S0qVLqzz/zjvvNKi2w3Xu3FmDBw/2PXr27Flr25tvvlkPPfSQnnvuuVrb1PReSqrxjtCPPPKIPv/8c7333ns1Dinq2bOn2rRpo2effbbGIXoN+bxYoVOnTurWrZtmzZqlWbNmKT4+Xuecc06Dj3fRRRdp6dKl+vHHH33bSkpK9NprryklJaXaXJLGZrfbNWLECH300Uc19lg29H0PDg5u8DBEAE0fPRoAqmjXrp3effddjRo1Sh06dPDdGdw0TWVmZurdd9+VzWarMifipZdeUr9+/dStWzfdcsstSktL0+7du/Xjjz9qx44d+vXXX+tVQ1hYmF555RVdd911Ov3003X11VcrJiZGWVlZmjdvns4++2y9+OKLRzxGx44d1aZNG02aNEm//fabwsLC9NFHHzVofHleXp5uv/12de7cWf7+/vrXv/5V5fnLLrtMwcHBdX4f7r33Xr399tsaOnSo7rrrLt/ytsnJyVq5cmW96zsWycnJevjhh4/YJiwsTOecc46efvppVVZWqlWrVvriiy+UmZlZpd2qVav02GOP6ZxzzlFubm619+naa6+VzWbTG2+8oQsvvFBdunTRDTfcoFatWum3337TwoULFRYWpk8++eSoda9YsaLa8SVvj0nfvn2P/sJrMHLkSD344IMKCAjQTTfddEw3pbz//vv13nvv6cILL9SECRMUFRWlGTNmKDMzUx999NEJueHlU089pYULF6pPnz665ZZb1LlzZ+3bt08rVqzQggULtG/fvnofs2fPnpo1a5buuece9e7dWyEhIRo2bFgjVA/gVETQAFDNpZdeqlWrVum5557TF198obfeekuGYSg5OVkXX3yxbrvtNvXo0cPXvnPnzvr555/1yCOPaPr06dq7d69iY2OVnp5eZahNfVxzzTVKSEjQU089pWeeeUbl5eVq1aqV+vfvrxtuuOGo+zscDn3yySeaMGGCJk+erICAAF12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bF133XVVtl133XW1rkZlhZdeeklut1tnnHGGPvroI23atEnr1q3TlClT1LdvXwUGBurMM8/UU089pXXr1mnx4sX6y1/+UuUYd9xxh/bt26dRo0Zp2bJl2rJliz7//HPdcMMNcrvdjVY7jg1BAwAAoBk4fOL3999/X+MEcaulpaVpxYoVGjRokP74xz+qa9euOv/88/XVV1/plVdekSS99dZbcrlc6tmzpyZOnKjHH3+8yjESEhL0/fffy+1264ILLlC3bt00ceJERURE+IZe4eRjmFbN0qmjwsJChYeHq6CgQGFhYcfz1AAAACetI10jlZWVKTMzU6mpqQoICKj3sQ8PGQfnZNS2HahNfT6LREAAAIAmrKKiQoMHD64xTBy+GtXgwYMtvY8GmjeCBgAAQBPmdDr16KOPqn379jX2WBwMG+3bt9ejjz5q6X000LyxvC0AAEATN3LkSF122WW1hoikpCStWrWKkAFL0aMBAADQDBwtRBAyYDWCBgAAAADLETQAAAAAWI6gAQAAAMByBA0AAAAAlmPVKQAAgObENKW9e6XiYikkRIqOlgzjRFeFJogeDQAAgOYgP1/65z+ldu2kmBgpNdX733btvNvz8090hSedgQMHauLEiSe6jFMWQQMAAKCp+/xzKTFRuvtuaevWqs9t3erdnpjobWexsWPHyjAMGYYhh8Oh1NRU3XvvvSorK7P8XDi5EDQAAACass8/ly6+WDpwwDtsyjSrPn9w24ED3naNEDaGDh2qnJwcbd26Vf/4xz80depUPfTQQ5afpyFM05TL5TrRZTRJBA0AAICmKj9fGjHCGyQ8niO39Xi87UaMsHwYlb+/v+Li4pSUlKThw4dr8ODB+vLLL38/rUeTJ09WamqqAgMD1aNHD3344Ye+fXv16qVnn33W9/Pw4cPlcDhUXFwsSdqxY4cMw9DmzZslSW+//bZ69eql0NBQxcXF6ZprrlFubq5v/0WLFskwDH322Wfq2bOn/P399d1336mkpETXX3+9QkJCFB8fr+eee87S96A5ImgAAAA0VTNmSKWlRw8ZB3k83vYzZzZaSatXr9YPP/zguxP55MmTNXPmTL366qtas2aN7r77bl177bVavHixJGnAgAFatGiRJG/vw7fffquIiAh99913kqTFixerVatWatu2rSSpsrJSjz32mH799Vf997//1bZt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QYMGacaMGTIMQ/n5+b423333nfr376/AwEAlJSVpwoQJKin5X69LSkqKnnzySd14440KDQ1V69at9dprr/meT01NlSSlp6fLMAwNHDiwMV8yRNAAAABAI/vggw/UsWNHdejQQddee63eeustmaYpScrMzNQVV1yh4cOH69dff9Uf/vAH/d///V+V/bds2aKhQ4dqxIgRWrlypWbNmqXvvvtO48ePr9LuueeeU69evfTLL7/o9ttv17hx47RhwwZJ0tKlSyVJCxYsUE5OjmbPnn0cXnnzRtAAAABAo3rzzTd17bXXSpKGDh2qgoICLV68WJI0depUdejQQc8884w6dOigq6++WmPHjq2y/+TJkzV69GhNnDhR7dq101lnnaUpU6Zo5syZKisr87W76KKLdPvtt6tt27a677771KJFCy1cuFCSFBMTI0mKjo5WXFycoqKijsMrb94IGgAAAGg0GzZs0NKlSzVq1ChJkp+fn0aOHKk333zT93zv3r2r7HPGGWdU+fnXX3/V9OnTFRIS4nsMGTJEHo9HmZmZvnbdu3f3/dkwDMXFxSk3N7exXhqOguVtAQAA0GjefPNNuVwuJSQk+LaZpil/f3+9+OKLdTpGcXGx/vCHP2jChAnVnmvdurXvzw6Ho8pzhmHI4/E0sHIcK4IGAAAAGoXL5dLMmTP13HPP6YILLqjy3PDhw/Xee++pQ4cO+vTTT6s8t2zZsio/n3766Vq7dq3atm3b4FqcTqckye12N/gYqB+CBgAAABrF3LlztX//ft10000KDw+v8tyIESP05ptv6oMPPtDf//533XfffbrpppuUkZHhW5XKMAxJ0n333aczzzxT48eP180336zg4GCtXbtWX375ZZ17RWJjYxUYGKj58+crMTFRAQEB1WqCtZijAQAAgEbx5ptvavDgwTVe0I8YMUI///yzioqK9OGHH2r27Nnq3r27XnnlFd+qU/7+/pK8cy8WL16sjRs3qn///kpPT9eDDz5YZTjW0fj5+WnKlCmaOnWqEhISdOmll1rzIlErwzy4tthxUlhYqPDwcBUUFCgsLOx4nhoAAOCkdaRrpLKyMmVmZio1NVUBAQF1Ot7avWs1cu7IBtcz65JZ6hzducH7H4snnnhCr776qrKzs0/I+VG7+nwWGToFAACAE+rll19W7969FR0dre+//17PPPNMtXtk4NRD0AAAAMAJtWnTJj3++OPat2+fWrdurT/+8Y964IEHTnRZOEYEDQAAgCYo2BF8Qvevj3/84x/6xz/+cdzOh+ODoAEAANAEJYcla+5lc1VSWVLvfYMdwUoOS26EqtCcEDQAAACaKMICTiSWtwUAAABgOYIGAAAAAMsxdAoAAKAZMU1TZZUeVbg9ctptCnDYfHfgBqxE0AAAAGgGyirdWptTqGWZ+7R9b4ncHlN2m6Hk6GD1To1S5/gwBTjsJ7pMNCEEDQAAgCZuW16JZv2cre17S2TIUGSQQ06nXS63Ryt3FOjXHflKjg7WyF5JSmlx/Ja1PZxhGPrPf/6j4cOHn7AaYB3maAAAADRh2/JKNO37TG3PK1FyVLDaxoYoOsRf4YEORYf4q21siJKjgrX993bb8uq/HO6RjB07VoZhyDAMORwOtWzZUueff77eeusteTyeKm1zcnJ04YUX1um4hmHov//9r6W11ubhhx/Waaed1qjneP3119WjRw+FhIQoIiJC6enpmjx5cp3337ZtmwzDUEZGxlHbTpgwQT179pS/v3+jvi6CBgAAQBNVVunWrJ+ztaeoXG1jQ+T0q/nSz+lnU9vYEO0pKtesn7NVVum2tI6hQ4cqJydH27Zt02effaZBgwbprrvu0iWXXCKXy+VrFxcXJ39/f8vOW1FRYdmxrFBbPW+99ZYmTpyoCRMmKCMjQ99//73uvfdeFRcXN1otN954o0aOHNlox5cIGgAAAE3W2pxCbd9bouTo4KNO+DYM73yN7XtLtC6n0NI6/P39FRcXp1atWun000/Xn//8Z3388cf67LPPNH369Co1HOylqKio0Pjx4xUfH6+AgAAlJyf7vuFPSUmRJF122WUyDMP388GehzfeeEOpqakKCAiQJM2fP1/9+vVTRESEoqOjdckll2jLli1VatyxY4dGjRqlqKgoBQcHq1evXlqyZImmT5+uRx55RL/++quvZ+ZgzVlZWbr00ksVEhKisLAwXXXVVdq9e7fvmLXVc7g5c+boqquu0k033aS2bduqS5cuGjVqlJ544okq7d544w116tRJAQEB6tixo15++WXfc6mpqZKk9PR0GYahgQMH1vr7mDJliu644w6lpaXV2sYKzNEAAABogkzT1LLMfTJk1NqTcTinn02GDC3N3KfTkiIadTWqc889Vz169NDs2bN18803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GAp02hUoei/QuFh1CgAAAIDlCBoAAAAALEfQAAAAAGA55mgAAAA0J6YpVR6Q3BWS3Sk5AiUmg6MREDQAAACag8oyadcqKetHad9WyeOWbHYpKk1q3VeK6yY56nczQOBICBoAAABN3d4t0i9vS/syJRlSUJTk8Jc8ldJvK6TflktRqVL6dVJ0mxNWpmEY+s9//qPhw4efsBpgHeZoAAAANGV7t0hLXvWGjKg0KaaDFBwjBUZ4/xvTwbt9X6a33d4tlp5+7NixMgxDhmHI4XCoZcuWOv/88/XWW2/J4/FUaZuTk6MLL7ywTsc1DEP//e9/La21Ng8//LBOO+20Rj3H66+/rh49eigkJEQRERFKT0/X5MmT67z/tm3bZBiGMjIyjtju119/1ahRo5SUlKTAwEB16tRJ//znP4+x+prRowEAANBUVZZ5ezKKc6UWHWqfi2F3ep/P2+BtP+B+S4dRDR06VNOmTZPb7dbu3bs1f/583XXXXfrwww81Z84c+fl5L0nj4uIsO6ckVVRUyOl0WnrMY1FbPW+99ZYmTpyoKVOmaMCAASovL9fKlSu1evVqy2tYvny5YmNj9a9//UtJSUn64YcfdOutt8put2v8+PGWnoseDQAAgKZq16r/9WQcbcK3YUiRqd72u629wPX391dcXJxatWql008/XX/+85/18ccf67PPPtP06dMPKeF/vRQVFRUaP3684uPjFRAQoOTkZN83/CkpKZKkyy67TIZh+H4+2PPwxhtvKDU1VQEB3rA0f/589evXTxEREYqOjtYll1yiLVuq9tzs2LFDo0aNUlRUlIKDg9WrVy8tWbJE06dP1yOPPKJff/3V1zNzsOasrCxdeumlCgkJUVhYmK666irt3r3bd8za6jncnDlzdNVVV+mmm25S27Zt1aVLF40aNUpPPPFElXZvvPGGOnXqpICAAHXs2FEvv/yy77nU1FRJUnp6ugzD0MCBA2s814033qh//vOfGjBggNLS0nTttdfqhhtu0OzZs2v+5R0DejQAAACaItP0TvyW4e2xqAs/f2/77T9IrXo26mpU5557rnr06KHZs2fr5ptvrvb8lClTNGfOHH3wwQdq3bq1srOzlZ2dLUlatmyZYmNjNW3aNA0dOlR2+//ucr5582Z99NFHmj17tm97SUmJ7rnnHnXv3l3FxcV68MEHddlllykjI0M2m03FxcUaMGCAWrVqpTlz5iguLk4rVqyQx+PRyJEjtXr1as2fP18LFiyQJIWHh8vj8fhCxuLFi+VyuXTHHXdo5MiRWrRo0RHrOVxcXJwWL16s7du3Kzk5ucY277zzjh588EG9+OKLSk9P1y+//KJbbrlFwcHBGjNmjJYuXaozzjhDCxYsUJcuXerVk1NQUKCoqKg6t68rggYAAEBTVHnAu7pUUD0vIIOivPtVHpCcQY1T2+86duyolStX1vhcVlaW2rVrp379+skwjCoX4DExMZKkiIiIasOtKioqNHPmTF8bSRoxYkSVNm+99ZZiYmK0du1ade3aVe+++6727NmjZcuW+S6427Zt62sfEhIiPz+/Kuf68ssvtWrVKmVmZiopKUmSNHPmTHXp0kXLli1T7969a63ncA899JAuv/xypaSkqH379urbt68uuugiXXHFFbLZbL42zz33nC6//HJJ3h6MtWvXaurUqRozZozv+NHR0fUagvbDDz9o1qxZmjdvXp33qSuGTgEAADRF7orfl7B11G8/m593P3dF49R1CNM0ZdTSazJ27FhlZGSoQ4cOmjBhgr744os6HTM5ObnaRf2mTZs0atQopaWlKSwszDfUKisrS5KUkZGh9PT0en2rv27dOiUlJflChiR17txZERERWrdu3RHrOVx8fLx+/PFHrVq1SnfddZdcLpfGjBmjoUOHyuPxqKSkRFu2bNFNN92kkJAQ3+Pxxx+vNgSsPlavXq1LL71UDz30kC644IIGH6c29GgAAAA0RXan9z4Znsr67edxefer63CrY7Bu3Trf3ILDnX766crMzNRnn32mBQsW6KqrrtLgwYP14YcfHvGYwcHB1bYNGzZMycnJev3115WQkCCPx6OuXbuqosIbpgIDA4/9xdSjntp07dpVXbt21e23367bbrtN/fv31+LFi9W5c2dJ3pWp+vTpU2Wf2oZjHc3atWt13nnn6dZbb9Vf/vKXBh3jaOjRAAAAaIocgd5J4KX76rdf6T7vfo7Gu/iWpK+//lqrVq2qNqzpUGFhYRo5cqRef/11zZo1Sx999JH27fO+HofDIbfbfdTz7N27Vxs2bNBf/vIXnXfeeerUqZP2799fpU337t2VkZHhO/bhnE5ntXN16tSpyrwRyXvxnp+f7wsGx+LgMUpKStSyZUslJCRo69atatu2bZXHwaB2cE5GXd6TNWvWaNCgQRozZky1CedWokcDAACgKTIM7x2/f1vuHQZVlx4KV7kkU0o+y9KJ4OXl5dq1a1eV5W0nT56sSy65RNdff32N+/z9739XfHy80tPTZbPZ9O9//1txcXGKiIiQ5F156quvvtLZZ58tf39/RUZG1nicyMhIRUdH67XXXlN8fLyysrJ0//33V2kzatQoPfnkkxo+fLgmT56s+Ph4/fLLL0pISFDfvn2VkpKizMxMZWRkKDExUaGhoRo8eLC6deum0aNH6/nnn5fL5dLtt9+uAQMGqFevXvV6f8aNG6eEhASde+65SkxMVE5Ojh5//HHFxMSob9++kqRHHnlEEyZMUHh4uIYOHary8nL9/PPP2r9/v+655x7FxsYqMDBQ8+fPV2JiogICAhQeHl7tXKtXr9a5556rIUOG6J577tGuXbskeXtGjjbEq77o0QAAAGiq4rp57/i9b6t3FaojMU1pf6a3fcuulpYxf/58xcfHKyUlRUOHDtXChQs1ZcoUffzxx7UO/QkNDdXTTz+tXr16qXfv3tq2bZs+/fRT3+To5557Tl9++aWSkpKUnp5e67ltNpvef/99LV++XF27dtXdd9+tZ555pkobp9OpL774QrGxsbrooovUrVs3PfXUU77aRowYoaFDh2rQoEGKiYnRe++9J8Mw9PHHHysyMlLnnHOOBg8erLS0NM2aNave78/gwYP1008/6corr1T79u01YsQIBQQE6KuvvlJ0dLQk6eabb9Ybb7yhadOmqVu3bhowYICmT5/u69Hw8/PTlClTNHXqVCUkJOjSSy+t8Vwffvih9uzZo3/961+Kj4/3PQ5OXreSYZpH+9RZq7CwUOHh4SooKFBYWNjxPDUAAMBJ60jXSGVlZcrMzDzivRhqdfDO4MW53vtk+PlXb+Mq94aMkFjpzHHeoVNADerzWWToFAAAQFMW3Ubqc5v3jt/7MiUZ3iVsbX7eid+l+ySZ3p6M068nZMAyBA0AAICmLrqNNOB+7x2/t//wv/tk2OxSq9O9czJadpUc9ewtAY6AoAEAANAcOAKkxF7eO35XHvjfBHFHYKPeARzNF0EDAACgOTGM3+/43bh3/QZYdQoAAACA5QgaAAAAACxH0AAAAABgOeZoAAAANCOmaarMXaZKT6UcNocC7AEymAyORkDQAAAAaAbK3eVav2+9VuxeoeyibLk9btltdiWFJun0lqerY1RH+dtruJkf0EAEDQAAgCYuqzBLszfNVnZRtgzDUIR/hJx+TrlMl9bsXaPVeauVFJqky9tdrtZhrU90uahBSkqKJk6cqIkTJ57oUuqMORoAAABNWFZhlv617l/KKspS69DWSgtPU1RAlML8wxQVEKW08DS1Dm2trKLf2xVmWXZuwzCO+Hj44YctO9fRDBw40HfegIAAtW/fXpMnT5ZpmsethsZUWlqqBx54QG3atFFAQIBiYmI0YMAAffzxx3U+xvTp0xUREWFZTfRoAAAANFHl7nLN3jRbeQfy1Ca8Ta1zMRx2h9qEt9GWgi2avWm2xp02zpJhVDk5Ob4/z5o1Sw8++KA2bNjg2xYSEuL7s2macrvd8vNrvMvTW265RY8++qjKy8v19ddf69Zbb1VERITGjRvXaOesD7fbLcMwZLPVvy/gtttu05IlS/TCCy+oc+fO2rt3r3744Qft3bu3ESqtG3o0AAAAmqj1+9YruyhbyaHJR53wbRiGWoe2VnZRtjbs23DEtnUVFxfne4SHh8swDN/P69evV2hoqD777DP17NlT/v7++u677zR27FgNHz68ynEmTpyogQMH+n72eDyaPHmyUlNTFRgYqB49eujDDz88aj1BQUGKi4tTcnKybrjhBnXv3l1ffvml7/ny8nJNmjRJrVq1UnBwsPr06aNFixZJ8gahmJiYKuc57bTTFB8f7/v5u+++k7+/v0pLSyVJf//739WtWzcFBwcrKSlJt99+u4qLi33tD/YgzJkzR507d5a/v7+ysrKUm5urYcOGKTAwUKmpqXrnnXeO+trmzJmjP//5z7rooouUkpKinj176s4779SNN95Yp9e3aNEi3XDDDSooKLCsx4mgAQAA0ASZpqkVu1fIMAw57I467eO0OyVDWr57+XEbUnT//ffrqaee0rp169S9e/c67TN58mTNnDlTr776qtasWaO7775b1157rRYvXlyn/U3T1Lfffqv169fL6XT6to8fP14//vij3n//fa1cuVJXXnmlhg4dqk2bNskwDJ1zzjm+C/P9+/dr3bp1OnDggNavXy9JWrx4sXr37q2gIO9d1202m6ZMmaI1a9ZoxowZ+vrrr3XvvfdWqaW0tFR/+9vf9MYbb2jNmjWKjY3V2LFjlZ2drYULF+rDDz/Uyy+/rNzc3CO+pri4OH366acqKiqqtc2RXt9ZZ52l559/XmFhYcrJyVFOTo4mTZpUp/ezNgydAgAAaILK3GXKLspWhH9EvfaL9I9UdlG2ytxlCvQLbJziDvHoo4/q/PPPr3P78vJyPfnkk1qwYIH69u0rSUpLS9N3332nqVOnasCAAbXu+/LLL+uNN95QRUWFKisrFRAQoAkTJkiSsrKyNG3aNGVlZSkhIUGSNGnSJM2fP1/Tpk3Tk08+qYEDB2rq1KmSpG+++Ubp6emKi4vTokWL1LFjRy1atKjK+Q+duJ2SkqLHH39ct912m15++WXf9srKSr388svq0aOHJGnjxo367LPPtHTpUvXu3VuS9Oabb6pTp05HfF9ee+01jR49WtHR0erRo4f69eunK664QmeffXadX9+hvU5WoEcDAACgCar0VMrtccvPqN/3ynbDLrfHrUpPZSNVVlWvXr3q1X7z5s0qLS3V+eefr5CQEN9j5syZ2rJlyxH3HT16tDIyMvT999/rwgsv1P/93//prLPOkiStWrVKbrdb7du3r3LcxYsX+447YMAArV27Vnv27NHixYs1cOBADRw4UIsWLVJlZaV++OGHKkO8FixYoPPOO0+tWrVSaGiorrvuOu3du9c3tEqSnE5nlZ6cdevWyc/PTz179vRt69ix41EnaZ9zzjnaunWrvvrqK11xxRVas2aN+vfvr8cee6zOr89q9GgAAAA0QQ6bQ3abXS7TVa/93Kb3/hoOW92GWx2r4ODgKj/bbLZqw7YqK/8Xeg7OcZg3b55atWpVpZ2//5EnsIeHh6tt27aSpA8++EBt27bVmWeeqcGDB6u4uFh2u13Lly+X3W6vst/BSevdunVTVFSUFi9erMWLF+uJJ55QXFyc/va3v2nZsmWqrKz0BZdt27bpkksu0bhx4/TEE08oKipK3333nW666SZVVFT4hlcFBgZadsNEh8Oh/v37q3///rrvvvv0+OOP69FHH9V9991Xp9dnNYIGAABAExRgD1BSaJLW7F2jqICoOu+3v3y/ukZ3VYA9oBGrq11MTIxWr15dZVtGRoYcDm/wOXTS9JGGSR1NSEiI7rrrLk2aNEm//PKL0tPT5Xa7lZubq/79+9e4j2EY6t+/vz7++GOtWbNG/fr1U1BQkMrLyzV16lT16tXLF5yWL18uj8ej5557zreK1AcffHDUujp27CiXy6Xly5f7hk5t2LBB+fn59X6NnTt3lsvlUllZWZ1en9PplNvtrvd5asPQKQAAgCbIMAyd3vJ0maapSnfdhkFVuCskU+rZsqdl37LX17nnnquff/5ZM2fO1KZNm/TQQw9VCR6hoaGaNGmS7r77bs2YMUNbtmzRihUr9MILL2jGjBn1Otcf/vAHbdy4UR999JHat2+v0aNH6/rrr9fs2bOVmZmppUuXavLkyZo3b55vn4EDB+q9997TaaedppCQENlsNp1zzjl65513qgSftm3bqrKyUi+88IK2bt2qt99+W6+++upRa+rQoYOGDh2qP/zhD1qyZImWL1+um2++WYGBR54vc3D+yPLly7Vt2zZ9+umn+vOf/6xBgwYpLCysTq8vJSVFxcXF+uqrr5SXl1dliFdDEDQAAACaqI5RHZUUmqTtRduPuoqUaZrKKspSUmiSOkR1OE4VVjdkyBD99a9/1b333qvevXurqKhI119/fZU2jz32mP76179q8uTJ6tSpk4YOHap58+YpNTW1XueKiorS9ddfr4cfflgej0fTpk3T9ddfrz/+8Y/q0KGDhg8frmXLlql16//dLX3AgAFyu91V5mIMHDiw2rYePXro73//u/72t7+pa9eueueddzR58uQ61TVt2jQlJCRowIABuvzyy3XrrbcqNjb2iPsMGTJEM2bM0AUXXKBOnTrpzjvv1JAhQ6r0ohzt9Z111lm67bbbNHLkSMXExOjpp5+uU721MczjfDvEwsJChYeHq6CgQGFhYcfz1AAAACetI10jlZWVKTMzU6mpqQoIqN+QpoN3Bs87kKfWoa29S9gepsJdoayiLLUIbKHrOl2npLCkY3otaLrq81lkjgYAAEAT1jqsta7tdK1mb5qt7KJsyfAuYWs37HKbbu0v3y+ZUuvQ1hrRbgQhA5YhaAAAADRxrcNaa9xp47Rh3wYt371c2UXZqnRXym6zq2t0V/Vs2VMdojrI337kVZuA+iBoAAAANAP+dn91j+mubi26qcxdpkpPpRw2hwLsASds4jeaNoIGAABAM2IYhgL9AhWoxr/rN5o3Vp0CAAAAYDmCBgAAwCnC4/Gc6BLQzNXnM8jQKQAAgJOc0+mUzWbTzp07FRMTI6fTybwKHFemaaqiokJ79uyRzWaT01l9meTDETQAAABOcjabTampqcrJydHOnTtPdDloxoKC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "M = get_maze_matrix()\n", "key = jr.PRNGKey(0)\n", "\n", "key, subkey = jr.split(key)\n", "env_info_m = parse_maze(M, subkey)\n", "\n", "tmaze_env = GeneralizedTMazeEnv(env_info_m)\n", "\n", "init_obs, init_state = tmaze_env.reset(key)\n", "tmaze_env.render(states=init_state, mode=\"human\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the Agent\n", "\n", "State Factors: \n", "- Position: however large the grid is\n", "- Reward: location of the reward\n", "\n", "Observation Modalities:\n", "- Position: however large the grid is\n", "- Cued info: null, first location, second location\n", "- Reward: null, no reward, reward\n", "\n", "The `PymdpEnv` class contains the environmental parameters as POMDP parameters (`A`, `B`, and `D`). We initialize our agent's generative model using the same parameters. This means that the agent has full knowledge about the environment transitions, and likelihoods. We initialize the agent with a flat prior, i.e. it does not know where it, or the reward is. Finally, we set the C vector to have a preference only over the rewarding observation of cue-reward pair 1 (i.e. C[1][1] = 1 and zero for other values). " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "A, B = tmaze_env.A, tmaze_env.B\n", "A_dependencies, B_dependencies = tmaze_env.A_dependencies, tmaze_env.B_dependencies\n", "\n", "# [position], [cue], [reward]\n", "C = [jnp.zeros(a.shape[0]) for a in A]\n", "\n", "rewarding_modality = -1\n", "\n", "C[rewarding_modality] = C[rewarding_modality].at[1].set(1.0)\n", "C[rewarding_modality] = C[rewarding_modality].at[2].set(-3.0)\n", "\n", "D = list_array_uniform([b.shape[0] for b in B])\n", "\n", "# make 9 different agents to simulate in parallel\n", "batch_size = 9\n", "\n", "\n", "agent = Agent(\n", " A, B, C, D, \n", " E=None,\n", " pA=None,\n", " pB=None,\n", " policy_len=5,\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies,\n", " use_utility=True,\n", " use_states_info_gain=True,\n", " sampling_mode='full',\n", " action_selection='stochastic',\n", " gamma=4.0,\n", " batch_size=batch_size,\n", " learn_A=False,\n", " learn_B=False\n", ")\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A tensors\n", "(9, 25, 25)\n", "(9, 3, 25, 2)\n", "(9, 3, 25, 2)\n", "(9, 3, 25, 2)\n", "(9, 3, 25, 2)\n", "(9, 3, 25, 2)\n", "(9, 3, 25, 2)\n", "\n", "B tensors\n", "(9, 25, 25, 5)\n", "(9, 2, 2, 1)\n", "(9, 2, 2, 1)\n", "(9, 2, 2, 1)\n", "\n", "C tensors\n", "(9, 25)\n", "(9, 3)\n", "(9, 3)\n", "(9, 3)\n", "(9, 3)\n", "(9, 3)\n", "(9, 3)\n", "\n", "D tensors\n", "(9, 25)\n", "(9, 2)\n", "(9, 2)\n", "(9, 2)\n", "\n", "A and B dependencies\n", "[[0], [0, 1], [0, 2], [0, 3], [0, 1], [0, 2], [0, 3]]\n", "[[0], [1], [2], [3]]\n" ] } ], "source": [ "print(\"A tensors\")\n", "print(agent.A[0].shape)\n", "print(agent.A[1].shape)\n", "print(agent.A[2].shape)\n", "print(agent.A[3].shape)\n", "print(agent.A[4].shape)\n", "print(agent.A[5].shape)\n", "print(agent.A[6].shape)\n", "print()\n", "print(\"B tensors\")\n", "print(agent.B[0].shape)\n", "print(agent.B[1].shape)\n", "print(agent.B[2].shape)\n", "print(agent.B[3].shape)\n", "print()\n", "print(\"C tensors\")\n", "print(agent.C[0].shape)\n", "print(agent.C[1].shape)\n", "print(agent.C[2].shape)\n", "print(agent.C[3].shape)\n", "print(agent.C[4].shape)\n", "print(agent.C[5].shape)\n", "print(agent.C[6].shape)\n", "print()\n", "print(\"D tensors\")\n", "print(agent.D[0].shape)\n", "print(agent.D[1].shape)\n", "print(agent.D[2].shape)\n", "print(agent.D[3].shape)\n", "print()\n", "print(\"A and B dependencies\")\n", "print(agent.A_dependencies)\n", "print(agent.B_dependencies)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rollout an agent episode \n", "\n", "Using the rollout function, we can run an active inference agent in this environment over a specified number of discrete timesteps using the parameters previously set. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "key = jr.PRNGKey(1)\n", "T = 10\n", "_, info = rollout(agent, tmaze_env, num_timesteps=T, rng_key=key)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "images = []\n", "for t in range(T):\n", " env_state_t = [s[:, t] for s in info['env_state']]\n", " images.append(tmaze_env.render(states=env_state_t, mode=\"rgb_array\"))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# make animation\n", "import matplotlib.pyplot as plt\n", "import matplotlib.animation as animation\n", "from IPython.display import HTML\n", "\n", "\n", "def animate(images, savefile=None, interval=1000):\n", " # Make a bigger figure (pick whatever looks good)\n", " fig = plt.figure(figsize=(6, 6), dpi=150)\n", "\n", " # Axes that fills the entire figure\n", " ax = fig.add_axes([0, 0, 1, 1])\n", " ax.set_axis_off()\n", "\n", " im = ax.imshow(images[0], animated=True)\n", "\n", " def update(k):\n", " im.set_data(images[k])\n", " return (im,)\n", "\n", " ani = animation.FuncAnimation(\n", " fig, update, frames=len(images), interval=interval, blit=True, repeat_delay=1000\n", " )\n", "\n", " if savefile is not None:\n", " ani.save(savefile)\n", "\n", " plt.close(fig)\n", " return ani\n", "\n", "ani = animate(images)\n", "HTML(ani.to_html5_video())" ] } ], "metadata": { "kernelspec": { "display_name": "pymdp_dev_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/envs/graph_worlds_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Graph worlds\n", "\n", "This environment demonstrates agents that can navigate a graph and find an object. Object is only visible when agent is at the same location as the object." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:18.683564Z", "iopub.status.busy": "2026-03-06T15:30:18.683447Z", "iopub.status.idle": "2026-03-06T15:30:22.673717Z", "shell.execute_reply": "2026-03-06T15:30:22.673356Z" } }, "outputs": [], "source": [ "# a way to edit and run code and see the effects in the notebook without having to restart the kernel\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "from jax import numpy as jnp, random as jr, jit\n", "from jax import vmap\n", "import networkx as nx\n", "\n", "from pymdp.envs import GraphEnv\n", "from pymdp.envs.graph_worlds import generate_connected_clusters\n", "from pymdp.agent import Agent\n", "from pymdp.envs.rollout import rollout\n", "from pymdp.utils import list_array_uniform, list_array_zeros\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "key = jr.PRNGKey(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start by generating a graph of locations" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:22.675254Z", "iopub.status.busy": "2026-03-06T15:30:22.675132Z", "iopub.status.idle": "2026-03-06T15:30:22.711116Z", "shell.execute_reply": "2026-03-06T15:30:22.710815Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graph, _ = generate_connected_clusters(cluster_size=3, connections=2)\n", "nx.draw(graph, with_labels=True, font_weight=\"bold\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can create a GraphEnv given this graph. \n", "\n", "We then specify two object locations and two agent location, which using `env.generate_env_params(...)` can be used to generate two environments which differ in their initial state prior (their `D` vectors), which will encode precise priors over a particular initial object location and agent location." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:22.728168Z", "iopub.status.busy": "2026-03-06T15:30:22.728062Z", "iopub.status.idle": "2026-03-06T15:30:23.547234Z", "shell.execute_reply": "2026-03-06T15:30:23.546948Z" } }, "outputs": [], "source": [ "env = GraphEnv(graph)\n", "\n", "object_locations=[3, 5]\n", "agent_locations=[0, 1]\n", "\n", "env_params = env.generate_env_params(key=key, graph=graph, object_locations=object_locations, agent_locations=agent_locations)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create an Agent, we reuse the environment's A and B tensors, but give the agent a uniform initial belief about the object location, and a preference to find (see) the object." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:23.548655Z", "iopub.status.busy": "2026-03-06T15:30:23.548575Z", "iopub.status.idle": "2026-03-06T15:30:24.284551Z", "shell.execute_reply": "2026-03-06T15:30:24.284270Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61026/831457487.py:9: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(A, B, C, D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, policy_len=2, batch_size=2)\n" ] } ], "source": [ "A, B = env.A, env.B\n", "A_dependencies, B_dependencies = env.A_dependencies, env.B_dependencies\n", "\n", "C = list_array_zeros([a.shape[0] for a in A])\n", "C[1] = C[1].at[1].set(1.0)\n", "\n", "D = list_array_uniform([b.shape[0] for b in B])\n", "\n", "agent = Agent(A, B, C, D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, policy_len=2, batch_size=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the `rollout` function, we can easily simulate two agents in parallel for 10 timesteps..." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:24.285830Z", "iopub.status.busy": "2026-03-06T15:30:24.285749Z", "iopub.status.idle": "2026-03-06T15:30:25.187202Z", "shell.execute_reply": "2026-03-06T15:30:25.186837Z" } }, "outputs": [], "source": [ "rollout_jitted = jit(rollout, static_argnums=[1,2])\n", "last, result = rollout_jitted(agent, env, num_timesteps=10, rng_key=key, env_params=env_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "if you want to continue, call `rollout` again but with `initial_carry=last`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:25.188717Z", "iopub.status.busy": "2026-03-06T15:30:25.188616Z", "iopub.status.idle": "2026-03-06T15:30:25.766341Z", "shell.execute_reply": "2026-03-06T15:30:25.766014Z" } }, "outputs": [], "source": [ "last, result2 = rollout_jitted(agent, env, num_timesteps=10, rng_key=key, env_params=env_params, initial_carry=last)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result dict contains the expected free energy, executed actions, observations, environment state and beliefs over states and policies." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:25.768119Z", "iopub.status.busy": "2026-03-06T15:30:25.768003Z", "iopub.status.idle": "2026-03-06T15:30:25.777434Z", "shell.execute_reply": "2026-03-06T15:30:25.777195Z" } }, "outputs": [ { "data": { "text/plain": [ "dict_keys(['action', 'empirical_prior', 'env_state', 'neg_efe', 'observation', 'qpi', 'qs'])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The beliefs result is an array for each state factor, and the shape is [batch_size x time x factor_size]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:25.778621Z", "iopub.status.busy": "2026-03-06T15:30:25.778545Z", "iopub.status.idle": "2026-03-06T15:30:25.785706Z", "shell.execute_reply": "2026-03-06T15:30:25.785467Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "(2, 11, 7)\n" ] } ], "source": [ "print(len(result[\"qs\"]))\n", "print(result[\"qs\"][0].shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can plot the agent's beliefs over time." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:25.786826Z", "iopub.status.busy": "2026-03-06T15:30:25.786748Z", "iopub.status.idle": "2026-03-06T15:30:26.031626Z", "shell.execute_reply": "2026-03-06T15:30:26.031042Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGqCAYAAABXpw1AAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIKlJREFUeJzt3QuQleV9P/DfArIYs7vxAgJlvWMR8RJBDNHEKKi1SGsyNU2KCWqbtBQb1KaTkNTaTqKrZeLYqEVlUsw0QdJJg9HMaEoUcYyScIkZEeMtJKwGxBu7QGAxu+c/z+vs/lkEZeFZzu7Zz2fmze57Oec8PHnd8z3P7VSVSqVSAABk0C/HkwAACBYAQFZaLACAbAQLACAbwQIAyEawAACyESwAgGwECwAgG8ECAMhGsAAAshEsoIL953/+Z1RVVcUZZ5wRPbV8d999d5cec99998Vpp50WgwYNiiOOOCKuu+66+MMf/tBtZQS6psp3hUDlOvPMM+N3v/td/OY3v4nnn38+jjvuuOhJxowZE4cddlg88sgje3T9Aw88EJMnT46Pfexj8elPfzqeeuqpuP322+Pzn/98zJkzp9vLC7y3AXtwDdALrVmzJh5//PH4wQ9+EH/7t38b3/3ud4tP973ZF7/4xTj55JPj//7v/2LAgLf/fNXW1sYNN9wQM2fOjFGjRpW7iNDn6QqBCpWCxMEHH1x8wv+Lv/iLYn9XXn/99fjMZz5TvEF/4AMfiGnTpsUvf/nLogtl526KX/3qV8VzHXLIIUVXxLhx44quiR2lx6TH/vSnP41rrrkmBg8eHAcddFB8/OMfj1dffbXjuqOOOiqefvrpWLJkSXF92lJLxO6sXr262FLrRHuoSP7+7/8+0pc0f//739+H2gJyESygQqUg8YlPfCIGDhxYdBukrpBly5Z1uqatrS2mTJkS99xzTxEorr/++li3bl3x+85SCPjQhz4UzzzzTHz5y1+Ob3zjG0VguPjii2PhwoXvuP4f/uEfioCSWkmmT58e999/f1x55ZUd52+55ZYYMWJE0crw3//938X21a9+dbf/nl/84hfFzxRmdjR8+PDiedrPA2WWxlgAlWX58uWl9J/3okWLiv22trbSiBEjSjNnzux03f/+7/8W191yyy0dx1pbW0vnnntucXzevHkdxydOnFg66aSTStu2bes4lp73wx/+cGnkyJEdx9Jj0mMnTZpUnG939dVXl/r371/auHFjx7ETTzyxdPbZZ+/Rv2n27NnF865du/Yd504//fTShz70oT16HqB7abGACm2tOPzww+Occ84p9lM3w1/+5V/GggULorW1teO6Bx98MA444ID43Oc+13GsX79+MWPGjE7P98Ybb8TDDz8cn/zkJ2PTpk3x2muvFVvqRrnggguK1pCXX36502NSl0V63XYf+chHitf+7W9/u1f/pq1btxY/q6ur33Eudcu0nwfKS7CACpPevFOASKEiDeB84YUXii1NOX3llVfioYce6rg2vckPGzYs3ve+93V6jp1nj6THp3EM1157bTFmYsetfUDohg0bOj0mTQXdURrvkbz55pt79e868MADi58tLS3vOLdt27aO80B5mRUCFSa1LKRxEilcpG1XrRnnn39+l54zjcVon5WRWih2Zecw0r9//11elwLK3kgBKEn/tvr6+k7n0rHx48fv1fMCeQkWUGFScBgyZEixvsPO0tTTNNDyjjvuKD7hH3nkkbF48eL4/e9/36nVIrVQ7OiYY44pfqZuk0mTJmUr645dJe/l1FNPLX4uX768U4hI63S89NJLRdcLUH66QqCCpHEGKTxcdNFFxbTQnbc0KyONkWifIppaH956662YO3dup9aJnUNJCippKuidd95ZtA7sbMdppF2RZpVs3Lhxj6498cQTixkkd911V6dxImlhrBRQ0r8PKD8tFlBBUmBIweHP/uzPdnk+TRdN4yJSq0YazJmmiqZP///4j/9YtFKkN+70HGmw5s4tCilsnHXWWXHSSScVgz1TK0Yas/HEE08ULQZpamlXjR07tggGX//614uulBRgzj333N1eP3v27OLflrpyPvWpT8WqVavitttui7/5m7+JE044ocuvD3SDbp51AuxHU6ZMKQ0aNKi0ZcuW3V5z2WWXlQ444IDSa6+9Vuy/+uqrpb/6q78q1dTUlOrq6orzP/3pT4upnQsWLOj02BdffLH02c9+tjR06NDiOf7oj/6odNFFF5W+//3vv2O66bJlyzo9dvHixcXx9LPd+vXrS5MnTy5eO53bk6mnCxcuLJ166qml6urqYgrtP//zP5e2b9/epXoCuo/vCgHe4d577y1WynzssceK7xsB2FOCBfRxaVzGjlM10/iF1NWQBkmuX7/eNE6gS4yxgD4u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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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elVNjwUAUH6CBQCQjWABAGQjWAAA2QgWAEA2VRMsbrnlljjiiCNi0KBBccopp8QTTzxR7ipVlcbGxjj55JOLrdiHDh0aF1xwQTz//PPlrlbVu/7664ut76+44opyV6XqvPrqqzF9+vQ46KCDYv/994/jjjsuVqxYUe5qVZW2tra4+uqrY9SoUUUbjx49Or7//e/v9kOs2L1HHnkkpk6dWmyvnf5G3HPPPV2upzb+3ve+F8OHDy/aftKkSfHiiy/GvlAVweLuu++Oq666qli7u2rVqjjhhBPivPPOiw0bNpS7alVj6dKlMXPmzFi2bFksXry4+LTXc889tyI/2bNSLF++PG677bY4/vjjy12VqvP222/HqaeeGvvtt1888MAD8cwzz8SPfvSjOPDAA8tdtarywx/+MObMmRP/+q//Gs8++2xx/M///M9x8803l7tqFW/Lli3Fa116U70zqZ1//OMfx6233hq//e1v44ADDiheF7du3drzlStVgQkTJpRmzpzZedzW1lYaMWJEqbGxsaz1qmYbNmxIbzlKS5cuLXdVqtKmTZtKY8aMKS1evLh0+umnly6//PJyV6mq/OM//mPptNNOK3c1qt6UKVNKl1xySZdzX/ziF0vTpk0rW52qUUSUFi5c2Hnc3t5eGjZsWOmGG27oPLdx48ZSbW1t6a677urx+lR8j8W2bdti5cqVRTfP9h90lo4ff/zxstatmjU3Nxf/DhkypNxVqUqpd2jKlCldfq/J57777ouTTjopLrzwwmJo79Of/nTMnTtXE2f2mc98Jh588MF44YUXiuPf/e538eijj8bkyZO1dQ9as2ZNrF+/vsvfj/ThYWmawL54Xdznn26a2xtvvFGM4x166KFdzqfj5557rmz1qmbt7e3FmH/qSh43bly5q1N1FixYUAzppaEQesbvf//7oos+DaF+5zvfKdr6m9/8ZgwcODBmzJih2TP59re/XXyM9zHHHBP9+/cv/lZfe+21MW3aNG3cg1KoSHb2uthxrSdVfLCgPO+mV69eXbzzIK+mpqa4/PLLi3ksaSIyPReOU4/FddddVxynHov0O53GowWLfH7+85/Hz372s5g/f34ce+yx8eSTTxZvStKEQ+1cvSp+KOTggw8ukvBrr73W5Xw6HjZsWNnqVa0uu+yy+NWvfhVLliyJkSNHlrs6VScN66VJxyeeeGIMGDCgKGnibJqElb5O7/jYe2mm/NixY7uc+9SnPhVr167VvBn9wz/8Q9Fr8dd//dfFqpuvfOUrceWVVxarzOg5Ha995XpdrPhgkboux48fX4zjbf9uJB1PnDixrHWrJml+UAoVCxcujIceeqhYPkZ+Z599djz11FPFO7uOkt5Zp67j9HUK0ey9NIy343LpNA/g8MMP17wZvfPOO8Wct+2l3+H0N5qek/4+pwCx/etiGpJKq0P2xetiVQyFpHHS1K2W/gBPmDAhbrrppmIpzte+9rVyV62qhj9Sd+a9995b7GXRMU6XJgSlNdLkkdp2x3kraZlY2mvBfJZ80rvmNLEwDYVcdNFFxb43t99+e1HIJ+2zkOZUHHbYYcVQyP/+7//GjTfeGJdccolm3kubN2+Ol156qcuEzfTmI02oT+2dhpx+8IMfxJgxY4qgkfYTSUNQaQ+iHleqEjfffHPpsMMOKw0cOLBYfrps2bJyV6mqpF+VnZV58+aVu2pVz3LTnnH//feXxo0bVyzBO+aYY0q33357D32nvqulpaVYKp3+Ng8aNKh05JFHlr773e+WWltby121irdkyZKd/k2eMWNG55LTq6++unTooYcWv+Nnn3126fnnn98ndatJ/+n5+AIA9AUVP8cCAOg9BAsAIBvBAgDIRrAAALIRLACAbAQLACAbwQIAyEawAACyESwAgGwECwAgG8ECAIhc/j8VL/q1nPPJ7QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_results(result, agent_idx=0):\n", " \"\"\"Plot the results of the agent's beliefs and actions.\"\"\"\n", " fig, ax = plt.subplots()\n", " ax.title.set_text(f\"Agent {agent_idx}\")\n", "\n", " # Plot the agent location belief as blue dots\n", " T = result[\"qs\"][0].shape[1]\n", " locations = [jnp.argmax(result[\"qs\"][0][agent_idx, t, :]) for t in range(T)]\n", " ax.scatter(jnp.arange(T), locations, c=\"tab:blue\")\n", "\n", " # Plot object location beliefs as greyscale intensity\n", " ax.imshow(result[\"qs\"][1][agent_idx, :, :].T, cmap=\"gray_r\", vmin=0.0, vmax=1.0)\n", "\n", "plot_results(result, agent_idx=0)\n", "plot_results(result, agent_idx=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you cannot use the `rollout` method, e.g., you are using a 3rd party environment that is not jax.jit compatible, you can construct your own loop using the `infer_and_plan` function." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:26.032916Z", "iopub.status.busy": "2026-03-06T15:30:26.032823Z", "iopub.status.idle": "2026-03-06T15:30:29.888893Z", "shell.execute_reply": "2026-03-06T15:30:29.888628Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step 1: Action taken: [[1 0]\n", " [0 0]], Observation: [Array([[1.],\n", " [0.]], dtype=float32), Array([[0.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 2: Action taken: [[0 0]\n", " [2 0]], Observation: [Array([[0.],\n", " [2.]], dtype=float32), Array([[0.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 3: Action taken: [[2 0]\n", " [0 0]], Observation: [Array([[2.],\n", " [0.]], dtype=float32), Array([[0.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 4: Action taken: [[0 0]\n", " [3 0]], Observation: [Array([[0.],\n", " [3.]], dtype=float32), Array([[0.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 5: Action taken: [[3 0]\n", " [4 0]], Observation: [Array([[3.],\n", " [4.]], dtype=float32), Array([[1.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 6: Action taken: [[1 0]\n", " [3 0]], Observation: [Array([[3.],\n", " [3.]], dtype=float32), Array([[1.],\n", " [0.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 7: Action taken: [[1 0]\n", " [5 0]], Observation: [Array([[3.],\n", " [5.]], dtype=float32), Array([[1.],\n", " [1.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 8: Action taken: [[1 0]\n", " [0 0]], Observation: [Array([[3.],\n", " [5.]], dtype=float32), Array([[1.],\n", " [1.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 9: Action taken: [[1 0]\n", " [0 0]], Observation: [Array([[3.],\n", " [5.]], dtype=float32), Array([[1.],\n", " [1.]], dtype=float32)]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Step 10: Action taken: [[1 0]\n", " [0 0]], Observation: [Array([[3.],\n", " [5.]], dtype=float32), Array([[1.],\n", " [1.]], dtype=float32)]\n" ] } ], "source": [ "from jax import vmap\n", "import jax.tree_util as jtu\n", "from pymdp.envs.rollout import infer_and_plan\n", "\n", "rng_key = jr.PRNGKey(0)\n", "\n", "# start with None action, and expand agent.D to add time dimension\n", "action = -jnp.ones((agent.batch_size, len(agent.num_controls)), dtype=jnp.int32)\n", "qs = jtu.tree_map(lambda x: jnp.expand_dims(x, -2), agent.D)\n", "\n", "# reset environment and get initial observation\n", "keys = jr.split(rng_key, agent.batch_size + 1)\n", "rng_key = keys[0]\n", "observation, state = vmap(env.reset)(keys[1:], env_params=env_params)\n", "\n", "for i in range(10):\n", " # random keys\n", " keys = jr.split(rng_key, agent.batch_size + 2)\n", " rng_key = keys[0]\n", "\n", " # infer and plan\n", " agent, action, qs, _ = infer_and_plan(agent, qs, observation, action, keys[1])\n", "\n", " # step the environment\n", " observation, state = vmap(env.step)(keys[2:], state, action, env_params=env_params)\n", "\n", " print(f\"Step {i+1}: Action taken: {action}, Observation: {observation}\")" ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/envs/knapsack_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo: Knapsack Problem\n", "\n", "In this notebook, we demonstrate how to solve the knapsack problem, a classic Operations Research problem. In this problem, we have a knapsack with fixed weight capacity and a set of items each associated with a weight and a value. We want fit items into the knapsack in a way such as the total value of all fitted items is as high as possible, however, the sum of item weights cannot exceed the knapsack weight capacity. \n", "\n", "While is problem is traditionally solved with linear programming, we can convert it into a contextual bandit problem (a simplified 1-stage Markov decision problem) and solve it using pymdp.\n", "\n", "Let us define our actions `a_i` as whether to include an item or not for each item i. The state `s_i` of the system is defined as whether an item is included or not, i.e., copying the action variables over to the corresponding state variables. We also need another state variable `z` which represents whether the knapsack capacity is exceeded. If an item is included, i.e., `s_i = 1`, we get a reward `r_i`, otherwise, we get a reward of 0 when `s_i = 0`. We can thus define our preference of including valuable items to be proportional to the exponential of reward: `C[s_i] = softmax([0, r_i])`. Our preference on the capacity constraint variable `z` is to never violate it, i.e., `C[z] = [1, 0]`. Since the system is fully observable, we will set all the Categorical/Dirichlet parameters of the emission model (the `A` tensors) to be diagonal." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from jax import numpy as jnp, random as jr\n", "from jax import tree_util as jtu\n", "import jax.nn as nn\n", "import itertools\n", "\n", "from pymdp.agent import Agent\n", "from pymdp import distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specify model structure" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "item rewards [0.00729382 0.02089119 0.5814265 0.36183798 0.22303772]\n", "item weights [8.211571 4.9118934 5.1358905 4.603628 4.9590673]\n", "item weight sum 27.822052\n" ] } ], "source": [ "# knapsack problem setup\n", "num_items = 5\n", "max_capacity = 20\n", "key = jr.PRNGKey(0)\n", "key_w, key_r = jr.split(key)\n", "item_weights = max_capacity / num_items + jr.uniform(key_w, shape=(num_items,), minval=0.0, maxval=5.0)\n", "rewards = jr.uniform(key_r, shape=(num_items,), minval=0.0, maxval=1.0)\n", "\n", "print(\"item rewards\", rewards)\n", "print(\"item weights\", item_weights)\n", "print(\"item weight sum\", item_weights.sum())\n", "\n", "# mdp config\n", "state_config = {\n", " f\"s_{i}\": {\"elements\": [\"not enclude\", \"include\"], \"depends_on\": [f\"s_{i}\"], \"controlled_by\": [f\"a_{i}\"]} \n", " for i in range(num_items)\n", "}\n", "state_config[\"z\"] = {\n", " \"elements\": [\"not violated\", \"violated\"], \"depends_on\": [\"z\"], \"controlled_by\": [f\"a_{i}\" for i in range(num_items)]\n", "} \n", "\n", "obs_config = {\n", " k: {\"elements\": v[\"elements\"], \"depends_on\": [k]} for k, v in state_config.items()\n", "}\n", "\n", "act_config = {\n", " f\"a_{i}\": {\"elements\": [\"not enclude\", \"include\"]} \n", " for i in range(num_items)\n", "}\n", "\n", "model_description = {\n", " \"observations\": obs_config,\n", " \"controls\": act_config,\n", " \"states\": state_config,\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specify model parameters" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A shapes [(2, 2), (2, 2), (2, 2), (2, 2), (2, 2), (2, 2)]\n", "B shapes [(2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2, 2, 2, 2, 2)]\n" ] } ], "source": [ "model = distribution.compile_model(model_description)\n", "\n", "print(\"A shapes\", [a.data.shape for a in model.A])\n", "print(\"B shapes\", [a.data.shape for a in model.B])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A shapes [(2, 2), (2, 2), (2, 2), (2, 2), (2, 2), (2, 2)]\n", "B shapes [(2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2, 2, 2, 2, 2)]\n", "A normalized [True, True, True, True, True, True]\n", "B normalized [True, True, True, True, True, True]\n", "C normalized [True, True, True, True, True, True]\n" ] } ], "source": [ "def create_identity_transition_factor(mat):\n", " for i in range(mat.shape[1]):\n", " mat[:, i] = np.eye(len(mat))\n", " return mat\n", "\n", "def create_constraint_factor_z_greater_than(act_dim, maximum, num_items, weights):\n", " # Create an array of shape (2, act_dim, act_dim, ..., act_dim)\n", " tensor_shape = (2,) + (act_dim,) * num_items\n", " \n", " # Create an array with indices from 0 to act_dim - 1 along each dimension\n", " indices = np.indices(tensor_shape[1:])\n", "\n", " # Reshape weights to fit indices shape\n", " weights_reshaped = np.array(weights).reshape((-1,) + (1,) * (indices.ndim - 1))\n", " # Multiply weights with matrix that conforms to constraint\n", " result = np.array(indices == (act_dim - 1)) * weights_reshaped\n", "\n", " # Calculate the total for each combination of actions\n", " total = np.sum(result, axis=0)\n", " \n", " # Create the tensor based on the total hours condition\n", " tensor = np.where(total > maximum, 1, 0)\n", "\n", " # Stack the tensor along the first axis to create the final tensor\n", " tensor = np.stack((1 - tensor, tensor), axis=0)\n", "\n", " # make a copy for self state \n", " tensor = np.stack([tensor, tensor], axis=1)\n", " return tensor\n", "\n", "# update A tensor\n", "for i in range(len(model.A)):\n", " model.A[i].data = np.eye(len(model.A[i].data))\n", "\n", "# update B tensors\n", "for i in range(num_items):\n", " model.B[i].data = create_identity_transition_factor(model.B[i].data)\n", "\n", "model.B[-1].data = create_constraint_factor_z_greater_than(2, max_capacity, num_items, item_weights)\n", "\n", "# create C tensors\n", "preferences = nn.softmax(np.stack([np.zeros_like(rewards), rewards], axis=-1), axis=-1)\n", "Cs = [None for _ in range(len(model.A))]\n", "for i in range(len(model.A)):\n", " Cs[i] = preferences[i]\n", " \n", "Cs[-1] = np.array([1., 0]) # capacity constraint cannot be violated\n", "\n", "print(\"A shapes\", [a.data.shape for a in model.A])\n", "print(\"B shapes\", [a.data.shape for a in model.B])\n", "\n", "print(\"A normalized\", [np.isclose(a.data.sum(0), 1.).all() for a in model.A])\n", "print(\"B normalized\", [np.isclose(b.data.sum(0), 1.).all() for b in model.B])\n", "print(\"C normalized\", [np.isclose(a.sum(0), 1.).all() for a in Cs])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run agent" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "agent = Agent(\n", " model.A, model.B, Cs,\n", " B_action_dependencies=model.B_action_dependencies,\n", " num_controls=model.num_controls,\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "qs = jtu.tree_map(lambda x: jnp.expand_dims(x, axis=0), agent.D)\n", "q_pi, G = agent.infer_policies(qs)\n", "action = agent.sample_action(q_pi)\n", "action_multi = agent.decode_multi_actions(action)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "best action [[ 0 1 1 1 1 15]]\n", "best action multi [[0 1 1 1 1]]\n", "item weights\n", "[8.211571 4.9118934 5.1358905 4.603628 4.9590673]\n", "item rewards\n", "[0.00729382 0.02089119 0.5814265 0.36183798 0.22303772]\n" ] } ], "source": [ "print(\"best action\", action)\n", "print(\"best action multi\", action_multi)\n", "print(\"item weights\")\n", "print(item_weights)\n", "print(\"item rewards\")\n", "print(rewards)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Verify that the solution chosen by the active inference agent is the best solution, as validated by brute force search" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Brute-force best bits: [0 1 1 1 1] reward: 1.1871933937072754\n", "Agent best bits: [0 1 1 1 1] reward: 1.1871933937072754\n" ] } ], "source": [ "def brute_force_knapsack(weights, rewards, capacity):\n", " best_r = -jnp.inf\n", " best_bits = None\n", " for bits in itertools.product([0,1], repeat=len(weights)):\n", " w = jnp.dot(jnp.array(bits), weights)\n", " if w <= capacity + 1e-9:\n", " r = jnp.dot(jnp.array(bits), rewards)\n", " if r > best_r:\n", " best_r, best_bits = float(r), jnp.array(bits)\n", " return best_bits, best_r\n", "\n", "bf_bits, bf_reward = brute_force_knapsack(item_weights, rewards, max_capacity)\n", "print(\"Brute-force best bits:\", bf_bits, \"reward:\", bf_reward)\n", "print(\"Agent best bits:\", action_multi[0], \"reward:\", float(jnp.dot(action_multi[0], rewards)))\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "action [ 0 1 1 1 1 15]\n", "action multi [0 1 1 1 1]\n", "efe: -3.79, reward: 1.19\n", "\n", "action [0 0 1 1 1 7]\n", "action multi [0 0 1 1 1]\n", "efe: -3.78, reward: 1.17\n", "\n", "action [ 0 1 1 1 0 14]\n", "action multi [0 1 1 1 0]\n", "efe: -3.68, reward: 0.96\n", "\n", "action [ 1 0 1 1 0 22]\n", "action multi [1 0 1 1 0]\n", "efe: -3.67, reward: 0.95\n", "\n", "action [0 0 1 1 0 6]\n", "action multi [0 0 1 1 0]\n", "efe: -3.67, reward: 0.94\n", "\n", "action [ 0 1 1 0 1 13]\n", "action multi [0 1 1 0 1]\n", "efe: -3.61, reward: 0.83\n" ] } ], "source": [ "# print top actions, sorted in decreasing posterior probability (lowest EFE first)\n", "from pymdp import utils\n", "for i, idx in enumerate(np.argsort(q_pi[0])[::-1]):\n", " action_multi_f = utils.index_to_combination(agent.policies[idx, 0][-1].tolist(), agent.num_controls_multi)\n", " print(\"\\naction\", agent.policies[idx, 0])\n", " print(\"action multi\", action_multi_f)\n", " print(\"efe: -{:.2f}, reward: {:.2f}\".format(G[0, idx], np.sum(rewards * action_multi_f)))\n", " if i == 5:\n", " break" ] } ], "metadata": { "kernelspec": { "display_name": "pymdp_dev_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/envs/tmaze_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# T-Maze Demo\n", "\n", "In this notebook, we simulate an active inference agent solving the T-Maze task - a type of two-armed contextual bandit. Note that unlike in earlier demos in the legacy version of the [`pymdp` package](https://pymdp-rtd.readthedocs.io/en/latest/) which has a `NumPy` backend, this demo relies on `pymdp`'s new `jax` backend. The JAX backend accelerates `pymdp` by dispatching the core inference, learning and planning computations to CUDA-compatible GPU devices (if available). This, in combination with JAX's just-in-time (JIT) compilation features, enables pymdp to take advantage of batch processing (i.e., running many AIF processes in parallel) and increased memory-usage / speed, especially recurrent operations (e.g., iterative inference routines or processes that run over time)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The T-Maze Task\n", "\n", "The T-Maze task implemented in this notebook is adapted from [the sophisticated inference paper](https://discovery.ucl.ac.uk/id/eprint/10124606/), and was originally introduced in an active inference context in [\"Active Inference and Epistemic Value\"](https://pubmed.ncbi.nlm.nih.gov/25689102/). The T-maze is a two-armed contextual bandit: at any given time, the agent can choose between sampling a cue (context) or choosing between two reward arms (left vs. right).” This task represents a classic problem in sequential decision-making, where an agent (in this case, analogized to a rat) must navigate a T-shaped maze. The agent starts at the centre of the T-maze. Within either the left or right arm, there is either a preferred (i.e., rewarding; cheese) stimulus or an aversive (i.e., punishing; shock) stimulus, with these reward contingencies initially unknown to the agent. In the bottom part of the T-Maze, a cue provides information about the which arm the rewarding stimulus is in.\n", "\n", "The agent is faced with a dilemma: commit to one of the potentially rewarding arms or first seek information from the cue to identify the more rewarding option before taking action. We use the term \"cue validity\" to indicate the probability that the cue correctly indicates the reward's location. If the cue has information about which of the two arms is more rewarded (i.e., the cue validity is greater than 50%), then the optimal behavior entails first visiting the cue arm and then choosing one of the two reward arms. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline of this notebook\n", "### This notebook steps through the following variants of the T-Maze Demo:\n", "\n", "#### **1.** A deterministic generative process (environment), and a single agent solving the task with standard (non-sophisticated) active inference.\n", "\n", "#### **2.** A noisy generative process, and a single agent solving the task with standard active inference.\n", "\n", "#### **3.** A noisy generative model with A and B learning, with correct and incorrect prior structure of those parameters, and a single agent solving the task with standard active inference." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:30.989078Z", "iopub.status.busy": "2026-03-06T15:30:30.988960Z", "iopub.status.idle": "2026-03-06T15:30:34.892366Z", "shell.execute_reply": "2026-03-06T15:30:34.891996Z" } }, "outputs": [], "source": [ "# a way to edit and run code and see the effects in the notebook without having to restart the kernel\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "# importing necessary libraries\n", "import jax.numpy as jnp\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import mediapy\n", "\n", "from jax import random as jr\n", "from pymdp.envs import TMaze, rollout\n", "from pymdp.agent import Agent\n", "from pymdp.maths import dirichlet_expected_value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating the T-Maze Task (Generative Process)\n", "\n", "- The `reward_condition` parameter determines the reward location: `0` for the left arm, `1` for the right arm, or `None` for random allocation.\n", "- The `reward_probability` parameter sets the chance of receiving a reward in the correct arm. For example, if set at 0.80, there would be an 80% chance of reward and 20% chance of no outcome in the rewarding arm.\n", "- The `punishment_probability` parameter specifies the likelihood of punishment in the other arm. For example, if set at 0.80, there would be an 80% chance of punishment and 20% chance of no outcome in the non-rewarding arm.\n", "- The `cue_validity` parameter represents the accuracy of the cues as a probability between 0 and 1.\n", "\n", "
\n", " Click here to see how the generative process is set up. \n", "\n", "#### States and Observations\n", "\n", "**State Factors:**\n", "1. Location (5 states):\n", " - 0: centre (start location)\n", " - 1: left arm\n", " - 2: right arm\n", " - 3: cue location (bottom)\n", " - 4: middle of arms (between left and right arm)\n", "2. Reward Location (2 states):\n", " - 0: reward in left arm \n", " - 1: reward in right arm\n", "\n", "**Observation Modalities:**\n", "1. Location (5 observations):\n", " - Matches the location states exactly\n", "2. Outcome (3 observations):\n", " - 0: no outcome\n", " - 1: reward (cheese)\n", " - 2: punishment (shock)\n", "3. Cue (3 observations):\n", " - 0: no cue\n", " - 1: left arm cued\n", " - 2: right arm cued\n", "\n", "#### Environment Parameters\n", "\n", "**Observation Likelihood Model (A):**\n", "- A[0]: Location observations (5x5 tensor)\n", " - Perfect mapping between true and observed location.\n", "- A[1]: Outcome observations (3x5x2 tensor)\n", " - In the more rewarding arm, reward is presented with a likelihood determined by the `reward_probability` parameter.\n", " - In the less rewarding arm, punishment is presented with a likelihood determined by the `punishment_probability` parameter.\n", " - No outcomes are observed in the centre/start location, cue location, or middle of the two arms.\n", "- A[2]: Cue observations (3x5x2 tensor)\n", " - Indicating the reward location, at the cue location (bottom), with accuracy set by the `cue_validity` parameter.\n", " - No cues visible elsewhere.\n", "\n", "**Transition Model (B):**\n", "- B[0]: Location transitions (5x5x5 tensor)\n", " - Agent can move between adjacent maze cells or stay in the same cell.\n", "- B[1]: Reward location (2x2x1 tensor)\n", " - Reward location remains fixed throughout trial.\n", "\n", "**Initial Conditions (D):**\n", "- D[0]: Starting location (5x1 tensor)\n", " - Agent always begins in centre location\n", "- D[1]: Reward placement (2x1 tensor)\n", " - Default: Equal chance (50/50) of reward in either arm (`reward_condition=None`)\n", " - Optional: Can fix reward to specific arm, by setting `reward_condition` to `0` (for left arm) or `1` (for right arm)\n", "\n", "
\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:34.893886Z", "iopub.status.busy": "2026-03-06T15:30:34.893745Z", "iopub.status.idle": "2026-03-06T15:30:35.262412Z", "shell.execute_reply": "2026-03-06T15:30:35.262092Z" } }, "outputs": [], "source": [ "# setting the parameters for the environment\n", "reward_condition = None # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "reward_probability = 1.0 # 100% chance of reward in the correct arm\n", "punishment_probability = 1.0 # 100% chance of punishment in the other arm\n", "cue_validity = 1.0 # 100% valid cues\n", "dependent_outcomes = False # if True, punishment occurs as a function of reward probability (i.e., if reward probability is 0.8, then 20% punishment). If False, punishment occurs with set probability (i.e., 20% no outcome and punishment will only occur in the other (non-rewarding) arm)\n", "\n", "# initialising the environment. see tmaze.py in pymdp/envs for the implementation details.\n", "env = TMaze( \n", " reward_probability=reward_probability, \n", " punishment_probability=punishment_probability, \n", " cue_validity=cue_validity, \n", " reward_condition=reward_condition,\n", " dependent_outcomes=dependent_outcomes\n", ")\n", "\n", "# you may print the environment parameters to see the shapes of the tensors and the values by editing and uncommenting the following lines and running the code: \n", "\n", "# print([a.shape for a in env.params[\"A\"]]) # shape of all A tensors; the shape should start with the batch_size, then the rows, columns, and additional dimensions for the dependencies\n", "# print(env.params[\"A\"][1][0][:,:,1]) # likelihood of observing no outcome, reward, or punishment (rows), in each location (columns), when the reward condition is 1 (right arm)\n", "# print(env.params[\"A\"][2][0][:,:,0]) # likelihood of observing no cue, left arm cued, or right arm cued (rows), in each location (columns), when the reward condition is 0 (left arm)\n", "\n", "# print([b.shape for b in env.params[\"B\"]]) # shape of all B tensors\n", "# print(env.params[\"B\"][0][0][:,:,4]) # probability of transitioning to each location (rows), from each location (columns), when the agent wants to move to the middle of the arms (location 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. A deterministic generative process (environment), and a single agent solving the task with standard active inference.\n", "\n", "### Creating the Agent (Generative Model)\n", "\n", "We will create the agent's generative model based off the true observation and transition models (encoded by tensors `A` and `B`, respectively) of the environment. In other words, we assume the agent knows how the environment works - i.e., it knows that the likelihood of observing a reward in the left arm is 1.0 (`reward_probability=1.0`) if the reward is actually in the left arm (`reward_condition=0`), and it knows the cues are 100% accurate (`cue_validity=1.0`), and it knows that the reward location will be fixed throughout the trial (non-volatile environment). We can of course change these assumptions to create a more complex agent, and we will do that in the next sections where the environment will be more stochastic and we will also add uncertainty to the agent's generative model so it will have to learn that the environment is deterministic or not.\n", "\n", "The preference tensors (`C`) are set using the known dimensions of the outcome modalities, which we can infer from the A tensor's shape. We fix the agent's preferences *a priori* to prefer reward and avoid punishment. The agent is set to not have any preference to observe certain locations and cues. \n", "\n", "The initial beliefs tensors (D; i.e., state priors) are set using the known dimensions of the hidden state factors, which we can infer from the B tensor's shape. The agent has the prior belief that it starts in the center location and it has no prior about the reward location - i.e., the prior for the reward location is uniformly distributed. \n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:35.263798Z", "iopub.status.busy": "2026-03-06T15:30:35.263720Z", "iopub.status.idle": "2026-03-06T15:30:36.072631Z", "shell.execute_reply": "2026-03-06T15:30:36.072248Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of generated agents: 1\n", "\n", "[(1, 5, 5), (1, 3, 5, 2), (1, 3, 5, 2)]\n", "[[1. 0. 0. 1. 1.]\n", " [0. 0. 1. 0. 0.]\n", " [0. 1. 0. 0. 0.]]\n", "[[ 0. 2. -3.]]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61033/343300159.py:29: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "# setting A tensors from the environment parameters\n", "A = env.A\n", "A_dependencies = env.A_dependencies # dependencies allow you to specify which state factors each observation modality depends on, so you dont have to store all the conditional dependencies between all state factors and each modality\n", "\n", "# setting B tensors from the environment parameters\n", "B = env.B\n", "B_dependencies = env.B_dependencies\n", "\n", "# creating C tensors filled with zeros for [location], [reward], [cue] based on A shapes\n", "C = [jnp.zeros(a.shape[0], dtype=jnp.float32) for a in A] \n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[1].set(2.0) # prefer reward\n", "C[1] = C[1].at[2].set(-3.0) # avoid punishment\n", "\n", "# creating D tensors [location], [reward] based on B shapes\n", "D = []\n", "# D[0]: location - all zeros except location 0 (centre) because the agent always starts in the centre\n", "D_loc = jnp.zeros(B[0].shape[0], dtype=jnp.float32) \n", "D_loc = D_loc.at[0].set(1.0) # set centre location to 1.0\n", "D.append(D_loc)\n", "\n", "# D[1]: reward location - uniform distribution\n", "D_reward = jnp.ones(B[1].shape[0], dtype=jnp.float32) \n", "D_reward = D_reward / jnp.sum(D_reward, axis=0, keepdims=True) # normalise to get uniform distribution\n", "D.append(D_reward)\n", "\n", "\n", "# initialising the agent\n", "agent = Agent(\n", " A, B, C, D, \n", " policy_len=2, # how long the action sequence is that the agent is evaluating\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies,\n", " learn_A=False,\n", " learn_B=False\n", ")\n", "\n", "# you may print the agent's generative model parameters to see the shapes of the tensors and the values by editing and uncommenting the following lines and running the code: \n", "\n", "print(f'Number of generated agents: {agent.batch_size}\\n')\n", "print([a.shape for a in agent.A]) # shape of all A tensors\n", "print(agent.A[1][0][:,:,1]) # likelihood of observing no outcome, reward, or punishment (rows), in each location (columns), when the reward condition is 1 (right arm)\n", "print(agent.C[1]) # preferences for outcomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the active inference agent" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:36.074529Z", "iopub.status.busy": "2026-03-06T15:30:36.074406Z", "iopub.status.idle": "2026-03-06T15:30:37.066512Z", "shell.execute_reply": "2026-03-06T15:30:37.066101Z" } }, "outputs": [], "source": [ "key = jr.PRNGKey(0) # random key for seeding reproducible stochasticity in the AIF loop (e.g., for sampling any random processes in the TMaze, and for sampling actions from the agent's chosen policy).\n", "T = 10 # number of timesteps to rollout the aif loop for\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=key) # running the aif loop\n", "\n", "# you may print the info dictionary to see the numerical results of the aif agent completing the T-maze task by editing and uncommenting the following lines and running the code: \n", "\n", "# print(info.keys()) # keys in the info dictionary\n", "# print(info[\"action\"][:,0,:]) # actions taken by the agent (locations throughout the maze) \n", "# print(info[\"observation\"][0]) # observations of the locations for each batch\n", "# print(info[\"observation\"][2]) # observations of the cues for each batch\n", "# print(jnp.around(info[\"qs\"][1], decimals=2)) # posterior beliefs about the reward location\n", "# print(info[\"qpi\"][0].shape) # shape of the policy tensor\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rendering the Task to Visualise the Agent's Behaviour" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:37.067936Z", "iopub.status.busy": "2026-03-06T15:30:37.067856Z", "iopub.status.idle": "2026-03-06T15:30:39.106070Z", "shell.execute_reply": "2026-03-06T15:30:39.105739Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "frames = []\n", "for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :] \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = np.array(frames, dtype=np.uint8)\n", "mediapy.show_video(frames, fps=1)\n", "\n", "# # uncomment the following lines to save the video as a gif\n", "# os.makedirs(\"figures\", exist_ok=True)\n", "# pil_frames = [Image.fromarray(frame) for frame in frames]\n", "# reward_location = \"random\" if reward_condition is None else (\"left\" if reward_condition == 0 else \"right\")\n", "# filename = os.path.join(\"figures\", f\"tmaze_{batch_size}_{reward_location}.gif\")\n", "# pil_frames[0].save(\n", "# filename,\n", "# save_all=True,\n", "# append_images=pil_frames[1:],\n", "# duration=1000, # 1000ms per frame\n", "# loop=0\n", "# )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running multiple agents in parallel using the `batch_size` parameter\n", "The active inference computations taking place within the the `Agent` methods (inference, planning/action selection, and learning) interally expect most arrays to have an additional leading dimension, with length `batch_size`. This extra dimension can be used to generate and run multiple agents in parallel, each with their own generative model, observation and action history, and posterior beliefs. For instance, if `batch_size = 10`, then each `A`, `B`, `C`, ... array will represent the corresponding generative model parameters for 10 different agents, and each agent will receive its own history of observations / emit its own actions. The single agent (default) case is therefore the case of `batch_size = 1`. If you pass in generative model arrays to the `Agent` constructor without a `(batch_size,)`-sized leading dimension (as we did in the previous example), they will be expanded internally to have this dimension, creating `batch_size` identical copies of the provided model parameters.\n", "\n", "One can also run multiple _environments_ in parallel by passing a separate, stateful `env_params` pytree which stores `batch_size` different `A`, `B`, and `D` arrays, but for now we are using a single fixed environment. This is the default case where the environmental attributes `env.A`, `env.B`, and `env.D` arrays have no leading `(batch_size,)` dimension, even while the `Agent` class _does_ have it." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:39.107336Z", "iopub.status.busy": "2026-03-06T15:30:39.107255Z", "iopub.status.idle": "2026-03-06T15:30:57.520123Z", "shell.execute_reply": "2026-03-06T15:30:57.519692Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61033/1007283590.py:32: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "batch_size = 9 # number of agents to run in parallel\n", "\n", "# setting A tensors from the environment parameters\n", "A, B = env.A, env.B\n", "A_dependencies, B_dependencies = env.A_dependencies, env.B_dependencies # dependencies allow you to specify the state factors the observation modality depends on so you dont have to compute the full tensor using all state factors\n", "\n", "# now expand A and B to have a new batch_size-length leading dimension\n", "A = [jnp.broadcast_to(a, (batch_size,) + a.shape) for a in A]\n", "B = [jnp.broadcast_to(b, (batch_size,) + b.shape) for b in B]\n", "\n", "# creating C tensors filled with zeros for [location], [reward], [cue] based on A shapes\n", "C = [jnp.zeros((batch_size, a.shape[1]), dtype=jnp.float32) for a in A] \n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[:,1].set(2.0) # prefer reward\n", "C[1] = C[1].at[:,2].set(-3.0) # avoid punishment\n", "\n", "\n", "# creating D tensors [location], [reward] based on B shapes\n", "D = []\n", "# D[0]: location - all zeros except location 0 (centre) because the agent always starts in the centre\n", "D_loc = jnp.zeros((batch_size, B[0].shape[1]), dtype=jnp.float32) \n", "D_loc = D_loc.at[0,0].set(1.0) # set centre location to 1.0\n", "D.append(D_loc)\n", "\n", "# D[1]: reward location - uniform distribution\n", "D_reward = jnp.ones((batch_size, B[1].shape[1]), dtype=jnp.float32) \n", "D_reward = D_reward / jnp.sum(D_reward, axis=1, keepdims=True) # normalise to get uniform distribution\n", "D.append(D_reward)\n", "\n", "\n", "# initialising the agent\n", "agent = Agent(\n", " A, B, C, D, \n", " policy_len=2,\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies,\n", " batch_size=batch_size, # note we have to pass in this batch_size parameter so the class knows to treat the first dimension as the batch size\n", " learn_A=False,\n", " learn_B=False\n", ")\n", "\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=key) # running the aif loop\n", "\n", "# rendering the task to visualise the agent's behaviour \n", "frames = []\n", "for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :] \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = np.array(frames, dtype=np.uint8)\n", "mediapy.show_video(frames, fps=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. A noisy generative process, and a single agent solving the task with standard active inference.\n", "\n", "### Making the world more stochastic\n", "\n", "In this variant, we will once again give the agent true knowledge of the parameters of the generative process (by fixing the `A` and `B` tensors of the agent to those of the true generative process), but now we will add stochasticity to the true generative process parameters, such that the agent is not guaranteed to get reward in the rewarded-arm every time, but only more likely to get reward than punishment there. This stochasticity can be modulated using the `reward_probability` argument to the `TMaze()` environment. We can likewise modulate the probability of seeing punishment in the punishment arm, by changing the `punishment_probability` argument to the `TMaze` environment. Finally, another source of uncertainty is the cue reliability or validity, which encodes the likelihood that the signal observed in the cue location of the TMaze, accurately identifies which arm is the more-rewarding vs. more-punishing arm. This probability (of the cue signalling the 'correct arm') can be modulated using the `cue_validity` argument to the `TMaze` constructor." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:57.523036Z", "iopub.status.busy": "2026-03-06T15:30:57.522878Z", "iopub.status.idle": "2026-03-06T15:30:57.552414Z", "shell.execute_reply": "2026-03-06T15:30:57.552056Z" } }, "outputs": [], "source": [ "# THE GENERATIVE PROCESS (NOISY)\n", "# setting the parameters for the environment\n", "batch_size = 4 # number of environments/agents to run in parallel\n", "reward_condition = None # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "reward_probability = 0.7 # 70% chance of reward in the correct arm\n", "punishment_probability = 0.6 # 60% chance of punishment in the other arm\n", "cue_validity = 0.95 # 90% valid cues\n", "dependent_outcomes = False # if True, punishment occurs as a function of reward probability (i.e., if reward probability is 0.8, then 20% punishment). If False, punishment occurs with set probability (i.e., 20% no outcome and punishment will only occur in the other (non-rewarding) arm)\n", "\n", "# initialising the environment. see tmaze.py in pymdp/envs for the implementation details.\n", "env = TMaze( \n", " reward_probability=reward_probability, \n", " punishment_probability=punishment_probability, \n", " cue_validity=cue_validity, \n", " reward_condition=reward_condition,\n", " dependent_outcomes=dependent_outcomes\n", ")\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:30:57.553800Z", "iopub.status.busy": "2026-03-06T15:30:57.553715Z", "iopub.status.idle": "2026-03-06T15:31:00.132559Z", "shell.execute_reply": "2026-03-06T15:31:00.132150Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61033/34467052.py:32: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "# THE GENERATIVE MODEL\n", "\n", "# Get A, B, and dependencies from the environment\n", "A, B = env.A, env.B\n", "A_dependencies, B_dependencies = env.A_dependencies, env.B_dependencies # dependencies allow you to specify\n", "\n", "# now expand A and B to have a new batch_size-length leading dimension\n", "A = [jnp.broadcast_to(a, (batch_size,) + a.shape) for a in A]\n", "B = [jnp.broadcast_to(b, (batch_size,) + b.shape) for b in B]\n", "\n", "# creating C tensors filled with zeros for [location], [reward], [cue] based on A shapes\n", "C = [jnp.zeros((batch_size, a.shape[1]), dtype=jnp.float32) for a in A] \n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[:,1].set(3.0) # prefer reward\n", "C[1] = C[1].at[:,2].set(-4.0) # avoid punishment\n", "\n", "\n", "# creating D tensors [location], [reward] based on B shapes\n", "D = []\n", "# D[0]: location - all zeros except location 0 (centre) because the agent always starts in the centre\n", "D_loc = jnp.zeros((batch_size, B[0].shape[1]), dtype=jnp.float32) \n", "D_loc = D_loc.at[0,0].set(1.0) # set centre location to 1.0\n", "D.append(D_loc)\n", "\n", "# D[1]: reward location - uniform distribution\n", "D_reward = jnp.ones((batch_size, B[1].shape[1]), dtype=jnp.float32) \n", "D_reward = D_reward / jnp.sum(D_reward, axis=1, keepdims=True) # normalise to get uniform distribution\n", "D.append(D_reward)\n", "\n", "\n", "# initialising the agent\n", "agent = Agent(\n", " A, B, C, D, \n", " policy_len=3, # how long the action sequence is that the agent is evaluating\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies,\n", " batch_size=batch_size,\n", " learn_A=False,\n", " learn_B=False\n", ")\n", "\n", "key = jr.PRNGKey(0) # random key for the aif loop\n", "T = 20 # number of timesteps to rollout the aif loop for\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=key) # running the aif loop" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:00.134138Z", "iopub.status.busy": "2026-03-06T15:31:00.134056Z", "iopub.status.idle": "2026-03-06T15:31:13.111259Z", "shell.execute_reply": "2026-03-06T15:31:13.110818Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "frames = []\n", "for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :] \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = np.array(frames, dtype=np.uint8)\n", "mediapy.show_video(frames, fps=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Agent is equipped with a partially-uncertain model of the true generative process, and can also perform parameter learning to update its beliefs about outcome and transition contingencies over time.\n", "\n", "You can tweak the following arguments to the `Agent` constructor: `learn_A` and `learn_B` between True and False -- this selectively turns on/off the ability to update the parameters of the Dirichlet posterior over the `A` and `B` tensors, respectively. These functionalities should be used when your agent does not have a correct or confident model of the world, and you want the agent to *learn* its model over time.\n", "\n", "As an example, we will do the following two variants in this section:\n", "\n", "**1** We initialize the agent to have partially-uncertain beliefs about the A and B parameters, but the mode of their beliefs (i.e. the value with the highest probability) is still based on the true generative process.\n", "\n", "**2** We will equip the agent with incorrect beliefs about the generative process.\n", "\n", "### Correct Prior Structure" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:13.114299Z", "iopub.status.busy": "2026-03-06T15:31:13.114183Z", "iopub.status.idle": "2026-03-06T15:31:13.165763Z", "shell.execute_reply": "2026-03-06T15:31:13.165478Z" } }, "outputs": [], "source": [ "# setting the parameters for the environment\n", "reward_condition = 0 # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "reward_probability = 1.0 # 100% chance of reward in the correct arm\n", "punishment_probability = 1.0 # 100% chance of punishment in the other arm\n", "cue_validity = 1.0 # 100% valid cues\n", "dependent_outcomes = False\n", "\n", "# initialising the environment. see tmaze.py in pymdp/envs for the implementation details.\n", "env = TMaze( \n", " reward_probability=reward_probability, \n", " punishment_probability=punishment_probability, \n", " cue_validity=cue_validity, \n", " reward_condition=reward_condition, \n", " dependent_outcomes=dependent_outcomes\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We can encode uncertainty in the agent's prior knowledge about the state-outcome contingencies by adding non-zero parameter values to the `pA` tensor (the prior Dirichlet parameters **over** the Categorical parameters of the A tensor). In practice, we still put 'true knowledge' into this prior, in the sense that the mode of the likelihood distribution aligned with the true generative process parameters, but we add some uncertainty by adding non-zero values into the parts of the Dirichlet prior tensor where they don't exist in the true generative process parameters; this encodes the agent's uncertainty about whether certain relationships between hidden states (e.g., location states or reward-condition states) and outcomes (cue signals or reward outcomes) exist." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:13.167263Z", "iopub.status.busy": "2026-03-06T15:31:13.167167Z", "iopub.status.idle": "2026-03-06T15:31:13.735458Z", "shell.execute_reply": "2026-03-06T15:31:13.735184Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61033/1366977802.py:37: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "# initializing the prior over the A tensors (pA) based on the environment parameters\n", "num_obs = [a.shape[0] for a in env.A] # number of observations for each modality\n", "num_states = [b.shape[0] for b in env.B] # number of states for each factor\n", "\n", "# initializing pA, pB to be identical to the environmental parameters\n", "pA, pB = [jnp.copy(a) for a in env.A], [jnp.copy(b) for b in env.B] # have to copy them here because we will be modifying pA below\n", "\n", "# adding non-zero Dirichlet parameter values to pA flatten the expected value of the A tensor (make more uncertain) \n", "alpha_scale_pA = 0.3 \n", "for m in [1, 2]: # only modifying the outcome (m=1) and cue (m=2) observation likelihood mappings\n", " pA[m] = pA[m] + (alpha_scale_pA * jnp.ones_like(pA[m]))\n", "\n", "expected_A = [dirichlet_expected_value(pa_m, event_dim=0) for pa_m in pA]# compute the expected value of the Dirichlet parameters in pA \n", "expected_B = [dirichlet_expected_value(pb_f, event_dim=0) for pb_f in pB]# compute the expected value of the Dirichlet parameters in pB \n", "\n", "# creating C tensors filled with zeros for [location], [reward], [cue] based on modality shapes\n", "C = [jnp.zeros(no, dtype=jnp.float32) for no in num_obs] \n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[1].set(2.0) # prefer reward\n", "C[1] = C[1].at[2].set(-3.0) # avoid punishment\n", "\n", "# creating D tensors [location], [reward] based on B shapes\n", "D = [jnp.zeros(ns, dtype=jnp.float32) for ns in num_states] # creating D tensors filled with zeros for [location], [reward] based on B shapes\n", "# D[0]: location - all zeros except location 0 (centre) because the agent always starts in the centre\n", "D_loc = jnp.zeros(num_states[0], dtype=jnp.float32) \n", "D_loc = D_loc.at[0].set(1.0) # set centre location to 1.0\n", "D[0] = D_loc\n", "\n", "# D[1]: reward location - uniform distribution\n", "D_reward = jnp.ones(num_states[1], dtype=jnp.float32) \n", "D_reward = D_reward / jnp.sum(D_reward, axis=0, keepdims=True) # normalise to get uniform distribution\n", "D[1] = D_reward\n", "\n", "\n", "# initialising the agent\n", "# NOTE: We initialize the first value of A and B based on the expected values of the Dirichlet parameters in pA and pB, respectively.\n", "agent = Agent(\n", " expected_A, expected_B, C, D, \n", " pA=pA,\n", " pB=pB, \n", " policy_len=5, # how long the action sequence is that the agent is evaluating\n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " learn_A=True,\n", " learn_B=False,\n", " gamma=1.0,\n", " action_selection=\"stochastic\"\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:13.736663Z", "iopub.status.busy": "2026-03-06T15:31:13.736571Z", "iopub.status.idle": "2026-03-06T15:31:14.973093Z", "shell.execute_reply": "2026-03-06T15:31:14.972575Z" } }, "outputs": [], "source": [ "key = jr.PRNGKey(0) # random key for the aif loop\n", "T = 10 # number of timesteps to rollout the aif loop for\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=key) # running the aif loop" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can print out the A tensors over time to see how the agent updates its beliefs about the state-outocome contingencies based on the data its collecting through active inference." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:14.974645Z", "iopub.status.busy": "2026-03-06T15:31:14.974520Z", "iopub.status.idle": "2026-03-06T15:31:15.009425Z", "shell.execute_reply": "2026-03-06T15:31:15.009143Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "the environment's A tensor\n", "[[1. 0. 0. 1. 1.]\n", " [0. 0. 1. 0. 0.]\n", " [0. 1. 0. 0. 0.]]\n", "\n", "the agent's A tensor at t=0\n", "[[0.68421054 0.15789475 0.15789476 0.68421054 0.68421054]\n", " [0.15789476 0.15789475 0.68421054 0.15789476 0.15789476]\n", " [0.15789476 0.68421054 0.15789476 0.15789476 0.15789476]]\n", "\n", "the agent's A tensor at t=10\n", "[[0.86867255 0.15789475 0.15789476 0.72054607 0.6926888 ]\n", " [0.06566371 0.15789475 0.68421054 0.13972697 0.15365562]\n", " [0.06566371 0.68421054 0.15789476 0.13972697 0.15365562]]\n" ] } ], "source": [ "print(\"the environment's A tensor\")\n", "print(env.A[1][:,:,1])\n", "print()\n", "print(\"the agent's A tensor at t=0\")\n", "print(agent.A[1][0][:,:,1])\n", "print()\n", "print(f\"the agent's A tensor at t={T}\")\n", "print(info[\"A\"][1][0,-1,:,:,1])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:15.010576Z", "iopub.status.busy": "2026-03-06T15:31:15.010492Z", "iopub.status.idle": "2026-03-06T15:31:16.051568Z", "shell.execute_reply": "2026-03-06T15:31:16.051201Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "frames = []\n", "for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :] \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = np.array(frames, dtype=np.uint8)\n", "mediapy.show_video(frames, fps=1)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:16.053250Z", "iopub.status.busy": "2026-03-06T15:31:16.053154Z", "iopub.status.idle": "2026-03-06T15:31:18.010715Z", "shell.execute_reply": "2026-03-06T15:31:18.010367Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61033/3157206125.py:16: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "# Random initialization test\n", "key = jr.PRNGKey(24)\n", "\n", "# setting A tensors from the environment parameters, but randomize the prior over the transitions\n", "pA, pB = [jnp.copy(a) for a in env.A], [jr.uniform(subkey, shape=b.shape) for subkey, b in zip(jr.split(key, num=2), env.B)]\n", "\n", "# adding noise to outcome and cue modalities to make priors more uncertain\n", "key1, key2 = jr.split(key, num=2)\n", "for(key_m, modality) in zip([key1, key2], [1, 2]): # only modifying the outcome (m=1) and cue (m=2) observation likelihood mappings\n", " pA[modality] = jr.uniform(key_m, shape=pA[modality].shape) # generating random values between 0 and 1\n", "\n", "expected_A = [dirichlet_expected_value(pa_m, event_dim=0) for pa_m in pA] # compute the expected value of the Dirichlet parameters in pA\n", "expected_B = [dirichlet_expected_value(pb_f, event_dim=0) for pb_f in pB]# compute the expected value of the Dirichlet parameters in pB\n", "\n", "# initialising the agent\n", "agent = Agent(\n", " expected_A, expected_B, C, D, \n", " pA=pA,\n", " pB=pB, \n", " policy_len=5, # how long the action sequence is that the agent is evaluating\n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " batch_size=batch_size, \n", " learn_A=True,\n", " learn_B=True,\n", " gamma=0.1,\n", " action_selection=\"stochastic\"\n", ")\n", "\n", "# running the active inference simulation\n", "key = jr.PRNGKey(0) # random key for the aif loop\n", "T = 50 # number of timesteps to rollout the aif loop for\n", "_, info = rollout(agent, env, num_timesteps=T, rng_key=key) # running the aif loop" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:18.012533Z", "iopub.status.busy": "2026-03-06T15:31:18.012394Z", "iopub.status.idle": "2026-03-06T15:31:18.062683Z", "shell.execute_reply": "2026-03-06T15:31:18.062343Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "the environment's A tensor\n", "[[1. 0. 0. 1. 1.]\n", " [0. 0. 1. 0. 0.]\n", " [0. 1. 0. 0. 0.]]\n", "\n", "the agent's A tensor at t=0\n", "[[0.00308274 0.07115752 0.55618274 0.42624453 0.36277273]\n", " [0.02319651 0.4746476 0.31333998 0.5615474 0.43671665]\n", " [0.9737207 0.45419487 0.13047728 0.01220808 0.20051058]]\n", "\n", "the agent's A tensor at t=50\n", "[[0.01081832 0.06939295 0.55391985 0.4478869 0.3744181 ]\n", " [0.02301651 0.48767537 0.31206512 0.5403655 0.4287357 ]\n", " [0.9661652 0.4429317 0.134015 0.01174758 0.19684626]]\n" ] } ], "source": [ "print(\"the environment's A tensor\")\n", "print(env.A[1][:,:,1])\n", "print()\n", "print(\"the agent's A tensor at t=0\")\n", "print(agent.A[1][0][:,:,1])\n", "print()\n", "print(f\"the agent's A tensor at t={T}\")\n", "print(info[\"A\"][1][0,-1,:,:,1])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:18.063914Z", "iopub.status.busy": "2026-03-06T15:31:18.063837Z", "iopub.status.idle": "2026-03-06T15:31:18.194246Z", "shell.execute_reply": "2026-03-06T15:31:18.193802Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "the environment's B tensor\n", "[[1. 0.]\n", " [0. 1.]]\n", "\n", "the agent's B tensor at t=0\n", "[[0.8990159 0.44466075]\n", " [0.10098408 0.5553392 ]]\n", "\n", "the agent's B tensor at t=50\n", "[[0.9954207 0.6131649 ]\n", " [0.0045793 0.38683507]]\n" ] } ], "source": [ "print(\"the environment's B tensor\")\n", "print(env.B[1][:,:,1])\n", "print()\n", "print(\"the agent's B tensor at t=0\")\n", "print(agent.B[1][0][:,:,1])\n", "print()\n", "print(f\"the agent's B tensor at t={T}\")\n", "print(info[\"B\"][1][0,-1,:,:,1])" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:18.195581Z", "iopub.status.busy": "2026-03-06T15:31:18.195478Z", "iopub.status.idle": "2026-03-06T15:31:40.817883Z", "shell.execute_reply": "2026-03-06T15:31:40.816585Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "frames = []\n", "for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :] \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = np.array(frames, dtype=np.uint8)\n", "mediapy.show_video(frames, fps=1)" ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/experimental/sophisticated_inference/mcts_generalized_tmaze.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sophisticated inference with Monte Carlo Tree Search\n", "\n", "This notebook demonstrates how you can implement Sophisticated inference with a Monte Carlo tree search algorithm, to mitigate the combinatorial explosion of exploring all branches. \n", "\n", "### Sophisticated inference\n", "\n", "In sophisticated inference the choice probability is computed in an iteartive way, using the following recursive relation for expected free energy \n", "\n", "\\begin{equation}\n", "\\begin{split}\n", " G(u_\\tau| o_{\\leq\\tau}, u_{<\\tau}) &= - \\ln p(u_{\\tau}|u_{<\\tau}) + E_{Q(o_{\\tau+1}, s_{\\tau+1}|u_{\\leq\\tau}. o_{<\\tau})} \\left[ \\ln \\frac{Q(s_{\\tau+1}|u_{\\leq\\tau}, o_{<\\tau})}{P(o_{\\tau+1}, s_{\\tau+1})} \\right] \\\\ \n", " &\\:\\:\\: + E_{Q(o_{\\tau+1}|u_{\\leq\\tau}, o_{\\leq\\tau}) Q(u_{\\tau+1}|u_{< \\tau + 1}, o_{\\leq\\tau+1})}\\left[G(u_{\\tau + 1}|o_{\\leq \\tau+1}, u_{<\\tau+1} ) \\right]\\\\ \n", " Q(u_{\\tau}|o_{\\leq\\tau}, u_{<\\tau}) &= \\text{softmax}(- G(u_{\\tau}|o_{\\leq\\tau}, u_{<\\tau})) \\\\ \n", " G(u_T|o_{\\leq T}, u_{< T}) &= - \\ln p(u_{T}|u_{< T}) + E_{Q(o_{T+1}, s_{T+1}|u_{\\leq T}, o_{< T})} \\left[ \\ln \\frac{Q(s_{T+1}|u_{\\leq T}, o_{< T})}{P(o_{T + 1}, s_{T + 1})} \\right]\n", "\\end{split}\n", "\\end{equation}\n", "\n", "where we use subscript $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAALVCAYAAABHiZeHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAclNJREFUeJzt3Qd4XMX59uFHvRfLvci944IBQ0w1YDDNHyZACIHQSegYkn8CKUASwAQCAULooTcTIEAMmNBsQnM3uONuGcvdVrW6vusdsYokS7LKqK1+d6695N1z9uzsrkTOc2bemZDS0tJSAQAAAIBHoT4PBgAAAACGoAEAAADAO4IGAAAAAO8IGgAAAAC8I2gAAAAA8I6gAQAAAMA7ggYAAAAA7wgaAAAAALwjaAAAAADwjqABoN277bbbFBISUumxvn376qKLLmrWdjzzzDOuHevXr2/W10Xd8P0AQP0QNABUa926dbrmmms0ePBgxcbGutvw4cN19dVX65tvvmnp5rVLdoJrJ7p1udV0MmwByrZPmDCh2u1PPPFE+THmzZuntvYZ3HXXXS3dxHblpZde0v3339/SzQDQSoW3dAMAtD7Tp0/XOeeco/DwcJ133nkaPXq0QkNDtWLFCr3xxht65JFHXBDp06ePgtXKlSvde25NOnfurOeff77SY/fee682bdqkv/71r/vsW5Po6Gh98skn2rJli7p161Zp24svvui25+XlqTU799xzdcopp+zz+JgxY5rsNX/605/qxz/+saKioprsNdpi0FiyZImmTJnS0k0B0AoRNABUsmbNGncyZSHio48+Uvfu3Stt//Of/6yHH3641Z2EV5STk6O4uLhGHaM1nkzaezr//PMrPfbKK69o9+7d+zxemyOOOEJz587VtGnTdP3115c/boHlv//9r8444wy9/vrras0OOuiger1nH8LCwtytNqWlpS6kxcTENFu7AKC1ar1nCgBaxN133+1O1J9++ul9QoaxXo7rrrtOqamplR633o6zzjpLKSkp7or4IYccorfffrvaMe6ff/65brzxRnfV3U6e7cR2+/bt+7zWe++9p6OOOsrtk5CQoFNPPVVLly6ttI/VUcTHx7uAZFe4bT/rhTF20nz22Werd+/eLjhYm2+44Qbt3bt3v59D1RqNug5TqsvnYOx9HHfcce6EtFevXrr99ttVUlKi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bHrciy++2B0brRNBAwAAoB2oWvj9+eefV1sg7pu9xoIFC3TsscfqF7/4hUaMGKETTjjBLdb3yCOPuH2ssLuoqEgHH3ywpkyZottvv73SMXr06OHaa6HixBNPdFPx2n42a1Vg6BVan5BSX1U6dZSZmamkpCRlZGQoMTGxOV8aAACg1artHCkvL0/r1q1Tv379FB0d3eiQEajJqOlxoCb1+V0kAgIAAAQxWxdjwoQJ1YaJqrNR2X4+19FA+0bQAAAACGK2LsYf//hHtyJ3dT0WgbBh220/n+tooH1jelsAAIAgd8455+iMM86oMURY2Fi8eDEhA17RowEAANAO7C9EEDLgG0EDAAAAgHcEDQAAAADeETQAAAAAeEfQAAAAAOAds04BAAC0J7ZW886dUna2FB8vdewohYS0dKsQhOjRAAAAaA/27JEeeEAaNEjq3Fnq16/sp923x207KrFV06dMmdLSzWizCBoAAADB7v33pV69pBtukNaurbzN7tvjtt328+yiiy5SSEiIu0VERKhfv3761a9+pby8PO+vhdaFoAEAABDMLDyceqq0d2/ZsCm7VRR4zLbbfk0QNk466SSlp6dr7dq1+utf/6rHHntMt956q1qD0tJSFRUVtXQzghJBAwAAIFjZcKgzzywLEiUlte9r220/29/zMKqoqCh169bNrUA+efJkTZgwQR988MH3L1uiqVOnup6OmJgYjR49Wq+99lr5cw855BD95S9/Kb9vz7eekWyrMZG0adMm11uyevVqd//55593z0lISHCv+ZOf/ETbtm0rf/7MmTPd/u+9954OPvhg17bPPvtMOTk5uuCCCxQfH6/u3bvr3nvv9foZtEcEDQAAgGD17LNSbu7+Q0aA7Wf7P/dckzVpyZIl+uKLL8pXIreQ8dxzz+nRRx/V0qVLdcMNN+j888/XrFmz3PZjjjnGhYNA78N///tfJScnu3BgbL+ePXtq4MCB7n5hYaH+9Kc/6euvv9abb76p9evXu+FbVd1000266667tHz5co0aNUr/93//54711ltv6T//+Y97zQULFjTZ59AeMOsUAABAMLLeib/9rWHPffBB6dprvc1GNX36dNdTYEOU8vPzFRoaqoceesj9+84779SHH36ocePGuX379+/vQoQNr7KQYQXZ//jHP1RcXOxCigWUc845xwUBG5JlP22/gEsu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vtHZZ5+tk046SatWrXKf49FHH11+Yr57927X5r1797rjGHv9sWPHukBjrGfiwQcfdG189tlnXS/Kr371K1VkoeTPf/6znnzySbdfly5dXNhKS0vTJ5984oLNww8/7MJHbSxAvfvuu8rKyqpxn9re3+GHH677779fiYmJrifKbhZKGoOhUwAAAEHIprC13gkr/K6PDlEd3PPs+THhMWpqNpTphBNOqPP+dlX+zjvv1Icffqhx48a5x/r37+96Ex577DFXl1ATO2G3E/qCggIVFha6WobrrrvObbOehKefftr97NGjh3vMTrRnzJjhHrfXtF4Vew3z6aefasyYMe4E38LH0KFD3c+Krz+lQuG29TLcfvvtboiTtSPA2mH3rVfGfPvtt66XZ86cOS60mH/84x8aNmxYrZ/L448/rvPOO08dO3Z0xzryyCN11lln6Ygjjqjz+6vY6+QDPRoAAABByNbJsClsw0Pqd105LCTMPc+e3xwOOeSQeu2/evVq1wtg4cRqPAI36+FYs2ZNrc+1E/FFixbp888/18knn6zf/va37kq+Wbx4sauRsCLxise1XorAcS1ELFu2TNu3b3ePW/CwmwUMCwxWE1FxiNeHH36o448/3g1VsmFiP/3pT13NRGBolbEelYo9OdZLYnUqNvQpwELM/oq0rbdl7dq1+uijj1zAsN6Ro446Sn/605/q/P58o0cDAAAgCNlifLZOhk1hWx/FpWXra9jzm4PVClRkw42qDtuyk/iAQI3DO++8407gK7Iah9rYFfuBAwe6f7/66qvu3z/4wQ80YcIEd9ywsDDNnz/f/awoULRu9RYpKSnu5Nxud9xxh7v6b0Of5s6d69oZCC7r16/Xaaed5grNbT97nvW6XHrppa5HJTC8yuowfC2YGBER4cKF3X7961+7HhTrMbJ/1+X9+UbQAAAACEK24retjWHrZNg0tnW1O3+3RnQc4Z7fEqzgesmSJZUes14IO4k2FYumaxsmtT92cn399de74UMLFy50w6Dsir/VQtiJenUsENg2mzLWegxseJIFBhvOZUOqrHcmEJzmz5/vitbvvffe8lmkLNzsj/VeFBUVuecHhk7ZTF179uyp93u0z8qOlZeXV6f3Z70rto8vDJ0CAAAIQnZSbCt+W+9AYXHdhkEVFBdIpdLBXQ/2dpW9vo477jjNmzfPDYWyIuVb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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "M = get_maze_matrix()\n", "key = jr.PRNGKey(0)\n", "\n", "key, subkey = jr.split(key)\n", "env_info_m = parse_maze(M, subkey)\n", "\n", "tmaze_env = GeneralizedTMazeEnv(env_info_m)\n", "\n", "init_obs, init_state = tmaze_env.reset(key)\n", "tmaze_env.render(states=init_state, mode=\"human\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create the agent. \n", "\n", "The PyMDPEnv class consists of a params dict that contains the A, B, and D vectors of the environment. We initialize our agent using the same parameters. This means that the agent has full knowledge about the environment transitions, and likelihoods. We initialize the agent with a flat prior, i.e. it does not know where it, or the reward is. Finally, we set the C vector to have a preference only over the rewarding observation of cue-reward pair 1 (i.e. C[-1] = [0, 1, -2] and zero for all other modalities). " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def make_aif_agent(tmaze_env, batch_size=5):\n", " A, B = tmaze_env.A, tmaze_env.B\n", " A_dependencies, B_dependencies = tmaze_env.A_dependencies, tmaze_env.B_dependencies\n", "\n", " # [position], [cue], [reward]\n", " C = list_array_zeros([a.shape[0] for a in A])\n", "\n", " rewarding_modality = -1\n", "\n", " C[rewarding_modality] = C[rewarding_modality].at[1].set(1.0)\n", " C[rewarding_modality] = C[rewarding_modality].at[2].set(-2.0)\n", "\n", " D = list_array_uniform([b.shape[0] for b in B])\n", "\n", " agent = Agent(\n", " A, B, C, D, \n", " E=None,\n", " pA=None,\n", " pB=None,\n", " policy_len=1,\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies,\n", " use_utility=True,\n", " use_states_info_gain=True,\n", " sampling_mode='full',\n", " action_selection='stochastic',\n", " gamma=4.0,\n", " batch_size=batch_size,\n", " learn_A=False,\n", " learn_B=False\n", " )\n", "\n", " return agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MCTS based policy search\n", "\n", "Here we defined the sofisticated active inference monte-carlo tree search policies using the [mctx](https://github.com/google-deepmind/mctx) package for google deep mind. Although other algorithms are provided in mctx package here we will use only Gumbel based planning algorithm intoroduced in [Policy improvement by planning with Gumbel](https://openreview.net/forum?id=bERaNdoegnO)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run active inference" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "timesteps, batch_size = 6, 9\n", "agent = make_aif_agent(tmaze_env, batch_size=batch_size)\n", "_, info = rollout(agent, tmaze_env, num_timesteps=timesteps, rng_key=key, policy_search=mcts_policy_search(search_algo=mctx.gumbel_muzero_policy, max_depth=3, num_simulations=1024))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['action', 'action_weights', 'empirical_prior', 'env_state', 'observation', 'qpi', 'qs', 'search_tree'])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info.keys()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Info keys: ['action', 'action_weights', 'empirical_prior', 'env_state', 'observation', 'qpi', 'qs', 'search_tree']\n", "Env state shape: [(9, 7), (9, 7), (9, 7), (9, 7)]\n" ] } ], "source": [ "print(\"Info keys:\", list(info.keys()))\n", "print(\"Env state shape:\", [s.shape for s in info[\"env_state\"]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we plot the resulting data, we see all agents prefer the correct cue that is actually yielding reward, and avoid the distracting cues. Depending on the amount of samples though, some agents might still get distracted the first timestep." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "images = []\n", "for t in range(timesteps):\n", " env_state_t = [s[:, t] for s in info['env_state']]\n", " images.append(tmaze_env.render(states=env_state_t, mode=\"rgb_array\"))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ani = animate(images)\n", "HTML(ani.to_html5_video())" ] } ], "metadata": { "kernelspec": { "display_name": ".venv311", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/experimental/sophisticated_inference/mcts_graph_world.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:43.007199Z", "iopub.status.busy": "2026-03-06T15:31:43.006910Z", "iopub.status.idle": "2026-03-06T15:31:43.763955Z", "shell.execute_reply": "2026-03-06T15:31:43.763519Z" } }, "outputs": [], "source": [ "from pymdp.agent import Agent\n", "from pymdp.utils import list_array_zeros, list_array_norm_dist\n", "from typing import Sequence, Optional\n", "\n", "import mctx\n", "\n", "import jax.numpy as jnp\n", "import jax.random as jr\n", "import jax.nn as nn\n", "\n", "import chex\n", "import pygraphviz\n", "\n", "from IPython.display import SVG" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Utility function to convert and display the MCTX output to an SVG visualization of the search tree." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:43.765921Z", "iopub.status.busy": "2026-03-06T15:31:43.765742Z", "iopub.status.idle": "2026-03-06T15:31:43.769987Z", "shell.execute_reply": "2026-03-06T15:31:43.769739Z" } }, "outputs": [], "source": [ "def convert_tree_to_graph(\n", " tree: mctx.Tree,\n", " action_labels: Optional[Sequence[str]] = None,\n", " batch_index: int = 0\n", ") -> pygraphviz.AGraph:\n", " \"\"\"Converts a search tree into a Graphviz graph.\n", "\n", " Args:\n", " tree: A `Tree` containing a batch of search data.\n", " action_labels: Optional labels for edges, defaults to the action index.\n", " batch_index: Index of the batch element to plot.\n", "\n", " Returns:\n", " A Graphviz graph representation of `tree`.\n", " \"\"\"\n", " chex.assert_rank(tree.node_values, 2)\n", " batch_size = tree.node_values.shape[0]\n", " if action_labels is None:\n", " action_labels = range(tree.num_actions)\n", " elif len(action_labels) != tree.num_actions:\n", " raise ValueError(\n", " f\"action_labels {action_labels} has the wrong number of actions \"\n", " f\"({len(action_labels)}). \"\n", " f\"Expecting {tree.num_actions}.\")\n", "\n", " def node_to_str(node_i, reward=0, discount=1):\n", " return (f\"{node_i}\\n\"\n", " f\"Reward: {reward:.2f}\\n\"\n", " f\"Discount: {discount:.2f}\\n\"\n", " f\"Value: {tree.node_values[batch_index, node_i]:.2f}\\n\"\n", " f\"Visits: {tree.node_visits[batch_index, node_i]}\\n\")\n", "\n", " def edge_to_str(node_i, a_i):\n", " node_index = jnp.full([batch_size], node_i)\n", " probs = nn.softmax(tree.children_prior_logits[batch_index, node_i])\n", " return (f\"{action_labels[a_i]}\\n\"\n", " f\"Q: {tree.qvalues(node_index)[batch_index, a_i]:.2f}\\n\" # pytype: disable=unsupported-operands # always-use-return-annotations\n", " f\"p: {probs[a_i]:.2f}\\n\")\n", "\n", " graph = pygraphviz.AGraph(directed=True)\n", "\n", " # Add root\n", " graph.add_node(0, label=node_to_str(node_i=0), color=\"green\")\n", " # Add all other nodes and connect them up.\n", " for node_i in range(tree.num_simulations):\n", " for a_i in range(tree.num_actions):\n", " # Index of children, or -1 if not expanded\n", " children_i = tree.children_index[batch_index, node_i, a_i]\n", " if children_i >= 0:\n", " graph.add_node(\n", " children_i,\n", " label=node_to_str(\n", " node_i=children_i,\n", " reward=tree.children_rewards[batch_index, node_i, a_i],\n", " discount=tree.children_discounts[batch_index, node_i, a_i]),\n", " color=\"red\")\n", " graph.add_edge(node_i, children_i, label=edge_to_str(node_i, a_i))\n", "\n", " return graph" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's test it on the graph world example as well." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:43.771113Z", "iopub.status.busy": "2026-03-06T15:31:43.771033Z", "iopub.status.idle": "2026-03-06T15:31:47.657184Z", "shell.execute_reply": "2026-03-06T15:31:47.656936Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import networkx as nx\n", "from pymdp.envs import GraphEnv\n", "from pymdp.envs.graph_worlds import generate_connected_clusters\n", "\n", "graph, _ = generate_connected_clusters(cluster_size=3, connections=2)\n", "env = GraphEnv(graph, object_location=4, agent_location=0)\n", "\n", "nx.draw(graph, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We set the initial location of the agent at node 1, and prior belief that the object is at node 4. Therefore, the expected rewarding path is 1 -> 0 -> 3 -> 4." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:47.658379Z", "iopub.status.busy": "2026-03-06T15:31:47.658247Z", "iopub.status.idle": "2026-03-06T15:31:48.370082Z", "shell.execute_reply": "2026-03-06T15:31:48.369784Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61044/329308290.py:12: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(\n" ] } ], "source": [ "A, B= env.A, env.B\n", "A_dependencies, B_dependencies = env.A_dependencies, env.B_dependencies\n", "\n", "C = list_array_zeros([a.shape[0] for a in A])\n", "C[1] = C[1].at[1].set(1.0)\n", "\n", "D = [jnp.ones(d.shape[0]) for d in env.D]\n", "D[0] = D[0].at[0].set(100.0)\n", "D[1] = D[1].at[4].set(10.0)\n", "D = list_array_norm_dist(D)\n", "\n", "agent = Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " A_dependencies=A_dependencies,\n", " B_dependencies=B_dependencies,\n", " categorical_obs=False,\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:48.371274Z", "iopub.status.busy": "2026-03-06T15:31:48.371191Z", "iopub.status.idle": "2026-03-06T15:31:48.389603Z", "shell.execute_reply": "2026-03-06T15:31:48.389313Z" } }, "outputs": [], "source": [ "import mctx\n", "from pymdp.planning.mcts import make_aif_recurrent_fn\n", "\n", "recurrent_fn = make_aif_recurrent_fn()\n", "rng_key = jr.PRNGKey(111)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:48.390928Z", "iopub.status.busy": "2026-03-06T15:31:48.390851Z", "iopub.status.idle": "2026-03-06T15:31:51.874739Z", "shell.execute_reply": "2026-03-06T15:31:51.874453Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.5554491e-16 6.9548679e-11 1.7227886e-17 1.3283233e-13 1.9635755e-14\n", " 1.0000000e+00 1.0319131e-14]]\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "0\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 1.20\n", "Visits: 1025\n", "\n", "\n", "\n", "4\n", "\n", "4\n", "Reward: 0.46\n", "Discount: 0.91\n", "Value: 0.30\n", "Visits: 48\n", "\n", "\n", "\n", "0->4\n", "\n", "\n", "0\n", "Q: 0.74\n", "p: 0.14\n", "\n", "\n", "\n", "3\n", "\n", "3\n", "Reward: 0.57\n", "Discount: 0.89\n", "Value: 0.57\n", "Visits: 335\n", "\n", "\n", "\n", "0->3\n", "\n", "\n", "1\n", "Q: 1.08\n", "p: 0.14\n", "\n", "\n", "\n", "1\n", "\n", "1\n", "Reward: 0.57\n", "Discount: 0.06\n", "Value: 1.83\n", "Visits: 48\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "2\n", "Q: 0.68\n", "p: 0.14\n", "\n", "\n", "\n", "6\n", "\n", "6\n", "Reward: 0.39\n", "Discount: 0.92\n", "Value: 0.57\n", "Visits: 161\n", "\n", "\n", "\n", "0->6\n", "\n", "\n", "3\n", "Q: 0.91\n", "p: 0.14\n", "\n", "\n", "\n", "7\n", "\n", "7\n", "Reward: 0.63\n", "Discount: 0.88\n", "Value: 0.27\n", "Visits: 48\n", "\n", "\n", "\n", "0->7\n", "\n", "\n", "4\n", "Q: 0.86\n", "p: 0.14\n", "\n", "\n", "\n", "2\n", "\n", "2\n", "Reward: 0.61\n", "Discount: 0.88\n", "Value: 1.23\n", "Visits: 336\n", "\n", "\n", "\n", "0->2\n", "\n", "\n", "5\n", "Q: 1.69\n", "p: 0.14\n", "\n", "\n", "\n", "5\n", "\n", "5\n", "Reward: 0.61\n", "Discount: 0.88\n", "Value: 0.27\n", "Visits: 48\n", "\n", "\n", "\n", "0->5\n", "\n", "\n", "6\n", "Q: 0.85\n", "p: 0.14\n", "\n", "\n", "\n", "13\n", "\n", "13\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "4->13\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "21\n", "\n", "21\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "4->21\n", "\n", "\n", "1\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "76\n", "\n", "76\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "4->76\n", "\n", "\n", "2\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "119\n", "\n", "119\n", "Reward: 0.30\n", "Discount: 0.06\n", "Value: 0.86\n", "Visits: 28\n", "\n", "\n", "\n", "4->119\n", "\n", "\n", "3\n", "Q: 0.35\n", "p: 0.14\n", "\n", "\n", "\n", "196\n", "\n", "196\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "4->196\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "336\n", "\n", "336\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "4->336\n", "\n", "\n", "5\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "10\n", "\n", "10\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.30\n", "Visits: 334\n", "\n", "\n", "\n", "3->10\n", "\n", "\n", "0\n", "Q: 0.58\n", "p: 0.14\n", "\n", "\n", "\n", "8\n", "\n", "8\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "1->8\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "16\n", "\n", "16\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.95\n", "Visits: 44\n", "\n", "\n", "\n", "1->16\n", "\n", "\n", "1\n", "Q: 1.95\n", "p: 0.14\n", "\n", "\n", "\n", "75\n", "\n", "75\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "1->75\n", "\n", "\n", "2\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "96\n", "\n", "96\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "1->96\n", "\n", "\n", "3\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "14\n", "\n", "14\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.29\n", "Visits: 160\n", "\n", "\n", "\n", "6->14\n", "\n", "\n", "0\n", "Q: 0.57\n", "p: 0.14\n", "\n", "\n", "\n", "12\n", "\n", "12\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "7->12\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "19\n", "\n", "19\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 15\n", "\n", "\n", "\n", "7->19\n", "\n", "\n", "1\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "74\n", "\n", "74\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 15\n", "\n", "\n", "\n", "7->74\n", "\n", "\n", "2\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "116\n", "\n", "116\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 14\n", "\n", "\n", "\n", "7->116\n", "\n", "\n", "3\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "151\n", "\n", "151\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "7->151\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "193\n", "\n", "193\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "7->193\n", "\n", "\n", "5\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "9\n", "\n", "9\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "2->9\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "17\n", "\n", "17\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 25\n", "\n", "\n", "\n", "2->17\n", "\n", "\n", "1\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "71\n", "\n", "71\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 25\n", "\n", "\n", "\n", "2->71\n", "\n", "\n", "2\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "113\n", "\n", "113\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 1.19\n", "Visits: 282\n", "\n", "\n", "\n", "2->113\n", "\n", "\n", "3\n", "Q: 1.41\n", "p: 0.14\n", "\n", "\n", "\n", "149\n", "\n", "149\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "2->149\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "191\n", "\n", "191\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "2->191\n", "\n", "\n", "5\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "11\n", "\n", "11\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "5->11\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "18\n", "\n", "18\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 15\n", "\n", "\n", "\n", "5->18\n", "\n", "\n", "1\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "73\n", "\n", "73\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 15\n", "\n", "\n", "\n", "5->73\n", "\n", "\n", "2\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "115\n", "\n", "115\n", "Reward: 0.30\n", "Discount: 0.94\n", "Value: 0.00\n", "Visits: 14\n", "\n", "\n", "\n", "5->115\n", "\n", "\n", "3\n", "Q: 0.30\n", "p: 0.14\n", "\n", "\n", "\n", "150\n", "\n", "150\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "5->150\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "192\n", "\n", "192\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "5->192\n", "\n", "\n", "5\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "28\n", "\n", "28\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "21->28\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "83\n", "\n", "83\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "76->83\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "126\n", "\n", "126\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "119->126\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "133\n", "\n", "133\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "119->133\n", "\n", "\n", "1\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "189\n", "\n", "189\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "119->189\n", "\n", "\n", "2\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "238\n", "\n", "238\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "119->238\n", "\n", "\n", "3\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "273\n", "\n", "273\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "119->273\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "329\n", "\n", "329\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "119->329\n", "\n", "\n", "5\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "15\n", "\n", "15\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "10->15\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "72\n", "\n", "72\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "10->72\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "114\n", "\n", "114\n", "Reward: 0.31\n", "Discount: 0.93\n", "Value: 0.00\n", "Visits: 319\n", "\n", "\n", "\n", "10->114\n", "\n", "\n", "2\n", "Q: 0.31\n", "p: 0.14\n", "\n", "\n", "\n", "25\n", "\n", "25\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "16->25\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "33\n", "\n", "33\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "16->33\n", "\n", "\n", "1\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "103\n", "\n", "103\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "16->103\n", "\n", "\n", "2\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "146\n", "\n", "146\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "16->146\n", "\n", "\n", "3\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "181\n", "\n", "181\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "16->181\n", "\n", "\n", "4\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "216\n", "\n", "216\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 7\n", "\n", "\n", "\n", "16->216\n", "\n", "\n", "5\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "244\n", "\n", "244\n", "Reward: 1.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "16->244\n", "\n", "\n", "6\n", "Q: 1.00\n", "p: 0.14\n", "\n", "\n", "\n", "20\n", "\n", "20\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "14->20\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "77\n", "\n", "77\n", "Reward: 0.31\n", "Discount: 0.93\n", "Value: 0.00\n", "Visits: 151\n", "\n", "\n", "\n", "14->77\n", "\n", "\n", "1\n", "Q: 0.31\n", "p: 0.14\n", "\n", "\n", "\n", "26\n", "\n", "26\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "19->26\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "222\n", "\n", "222\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "19->222\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "81\n", "\n", "81\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "74->81\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "229\n", "\n", "229\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "74->229\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "123\n", "\n", "123\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "116->123\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "236\n", "\n", "236\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 5\n", "\n", "\n", "\n", "116->236\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "23\n", "\n", "23\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "17->23\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "219\n", "\n", "219\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "17->219\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "341\n", "\n", "341\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 5\n", "\n", "\n", "\n", "17->341\n", "\n", "\n", "2\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "386\n", "\n", "386\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 4\n", "\n", "\n", "\n", "17->386\n", "\n", "\n", "3\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "423\n", "\n", "423\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "17->423\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "78\n", "\n", "78\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "71->78\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "226\n", "\n", "226\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "71->226\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "344\n", "\n", "344\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 5\n", "\n", "\n", "\n", "71->344\n", "\n", "\n", "2\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "389\n", "\n", "389\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 4\n", "\n", "\n", "\n", "71->389\n", "\n", "\n", "3\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "426\n", "\n", "426\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 1\n", "\n", "\n", "\n", "71->426\n", "\n", "\n", "4\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "120\n", "\n", "120\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "113->120\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "233\n", "\n", "233\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "113->233\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "347\n", "\n", "347\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 5\n", "\n", "\n", "\n", "113->347\n", "\n", "\n", "2\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "392\n", "\n", "392\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 4\n", "\n", "\n", "\n", "113->392\n", "\n", "\n", "3\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "429\n", "\n", "429\n", "Reward: 1.30\n", "Discount: 0.67\n", "Value: 0.00\n", "Visits: 258\n", "\n", "\n", "\n", "113->429\n", "\n", "\n", "4\n", "Q: 1.30\n", "p: 0.14\n", "\n", "\n", "\n", "24\n", "\n", "24\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "18->24\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "220\n", "\n", "220\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "18->220\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "80\n", "\n", "80\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "73->80\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "227\n", "\n", "227\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 6\n", "\n", "\n", "\n", "73->227\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "122\n", "\n", "122\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 8\n", "\n", "\n", "\n", "115->122\n", "\n", "\n", "0\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "\n", "235\n", "\n", "235\n", "Reward: 0.00\n", "Discount: 1.00\n", "Value: 0.00\n", "Visits: 5\n", "\n", "\n", "\n", "115->235\n", "\n", "\n", "1\n", "Q: 0.00\n", "p: 0.14\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%timeit\n", "root = mctx.RootFnOutput(\n", " prior_logits=jnp.log(agent.E),\n", " value=jnp.zeros((agent.batch_size)),\n", " embedding=agent.D,\n", ")\n", "\n", "policy_output = mctx.gumbel_muzero_policy(\n", " agent,\n", " rng_key,\n", " root,\n", " recurrent_fn,\n", " num_simulations=1024,\n", " max_depth=3\n", ")\n", "\n", "tree_gumbel = policy_output.search_tree\n", "print(policy_output.action_weights)\n", "\n", "graph = convert_tree_to_graph(tree_gumbel)\n", "svg = graph.draw(format='svg', prog='dot').decode(graph.encoding)\n", "SVG(svg)" ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/experimental/sophisticated_inference/si_generalized_tmaze.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sophisticated inference on a Generalized T-Maze\n", "\n", "This notebook demonstrates the effect of sophisticated inference on a generalized T-maze which has multiple cues, out of which only one leads to reward. Sophisticated inference correctly focuses on the cue that yields reward, whereas vanilla AIF will be distracted by the prospect of information gain of the other cues. However, due to the long planning horizon this takes a long time to compute doing the full tree search. See the mcts_generalized_tmaze example to see how to combat this using MCMC sampling." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "from pymdp.envs.generalized_tmaze import (\n", " GeneralizedTMazeEnv, get_maze_matrix, parse_maze \n", ")\n", "from pymdp.agent import Agent\n", "from pymdp.utils import list_array_zeros, list_array_uniform\n", "\n", "from jax import random as jr, numpy as jnp\n", "from jax import tree_util as jtu\n", "\n", "key = jr.PRNGKey(0)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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FRER4ZaYmBh16NBBN998s7Kysrw/F2oWggYAAEBdZuHhpJOknTsLm03ZUlRwnW23/aogbBx//PFKS0vTsmXL9Mgjj+jZZ5/V7bffrpogEAgoLy8v3MWokwgaAAAAdZU1hzr99MIgUVBQ/r623faz/T03o4qLi1Pz5s3Vpk0bDR06VIMHD9a4ceN+e9oCjRo1ytV0JCQkqGfPnnrnnXdCx/bt21cPPvhg6LEdbzUjGdbHRNKaNWtcbcmSJUvc41deecUd06BBA/ec5513ntavXx86ftKkSW7/zz77TH369HFlmzp1qnbs2KFhw4apfv36atGihR566CGv12BfRNAAAACoq156ScrM3H3ICLL9bP+XX66yIv3www+aNm2aYmNj3WMLGS+//LKeeeYZLViwQNdff73++Mc/avLkyW770Ucf7cJBsPbhq6++UkpKigsHxvZr1aqVOnfu7B7n5ubq7rvv1nfffacPPvhAK1ascM23Srrlllt077336scff1SPHj100003uXN9+OGH+uKLL9xzzpkzp8quw76AUacAAADqIqudeOKJPTv28cela67xNhrVxx9/7GoKrIlSdna2IiMj9eSTT7rf77nnHo0fP179+/d3+3bs2NGFCGteZSHDOmT/5z//UX5+vgspFlDOPvtsFwSsSZb9tP2CLr744tDvdq7HH39chxxyiKsBsTIE3XXXXTr22GPd77bNnuPVV1/VMccc49a99NJLam39VrDHqNEAAACoi2wI26VLd+2TsTu2vx23ebO3ogwaNEjz5s3Tt99+qwsvvFAXXXSRTj/9dNfcKTMz093wWwgILlbDsdTKIOnII4/U9u3bNXfuXFfjEAwfwVoOW2ePg2bPnq1TTjlFbdu2dc2ngiFk1apVxcpkzauC7LlycnLUr1+/0LrU1FR16dLF2zXYF1GjAQAAUBf91odhj23fXjjHhgf16tULNW164YUXXD8Mq0E46KCD3LpPPvnENX8qyvpOGGsmZftbsJg+fboLJUcddZSr1fj555+1ePHiUJiwfhZDhgxxy2uvvaYmTZq4gGGPLUiULBOqFkEDAACgLirSTGiPNGigqmDNpv72t7/phhtucEHBAoWFgaLNn0qybRMnTtSMGTP0z3/+09U2dO3a1f1uHbf3339/t9+iRYu0adMm1/fCOp6bWbNm7bZMnTp1ch3MrcbFakLMli1bXPnKKxfKR9MpAACAushqIzp1qnw/C9vfjktNraqS6cwzz1RUVJTrh/GXv/zFdQC3PhHWhMk6YD/xxBPucZA1jRo7dqyio6N1wAEHhNZZrUXRIGAhwfpw2PE2lO5HH33kOobvjjXXuuSSS1yH8AkTJri+INaB3EIR9hxXDwAAoC6ywGAduvfEtdd66wheGgsMV199te6//36NHDlSt956qxt9ymoprIO3NaWy4W6DrJ+GDYNbNFRY0LAO4kX7Z1hTqdGjR+vtt99Wt27dXM1G0aFxy/PAAw+457H+HTb87hFHHOGGv8WeiwjYOGF1yLZt25ScnKz09HQlJSWFuzgAAAB7fQ9js2gvX77c3XzHx8dX/KQ2H4aNnGST8VVkiFv7Bj8hwSansM4Re/AqUNdlVeK9SI0GAABAXWVh4d13C2sndtcMyLbbfu+9R8iAFwQNAACAumzIEBvWqbCmwoJEySZRwXW2/dNPpeOOC1dJUccQNAAAAPaFsGHNoR591GaxK77NHtv6X34hZMArhrcFAADYF1hzKOvkbR3EbTI+myfDhrC10aWqsOM39l0EDQAAgH2JhQob+tbTZHxAWWg6BQAAAMA7ggYAAAAA7wgaAAAAALyjjwYAAMA+xKZq3rRJysiQ6tcv7KpBX3BUBWo0AAAA9gE2Sfhjj0n77Sc1aSJ16FD40x7betteG61YsUIRERGaN2+e132x9wgaAAAAddzYsVLr1tL110vLlhXfZo9tvW23/XwbPny4u7m3JTY2Vp07d9Zdd92lvLw8L+dv06aN0tLSdNBBB6m2Gz58uIYOHaq6gqABAABQh1l4OOkkaefOwmZTthQVXGfbbb+qCBvHH3+8CwOLFy/WjTfeqDvuuEMPPPCAl3NHRUWpefPmio6mR0BNQ9AAAACoo6w51OmnFwaJgoLy97Xttp/t77sZVVxcnAsD7dq10xVXXKHBgwfro48+0sCBAzVixIhi+9o3+vbNflD79u11zz336OKLL1aDBg3Utm1bPffcc2U2h9qyZYvOP/98NWnSRAkJCdpvv/304osvFnuOZcuWadCgQUpMTFTPnj01ffr00LbRo0crJSVFH3/8sbp06eL2OeOMM5SZmamXXnrJladhw4a69tprlZ+fHzouOztbf/nLX9SqVSvVq1dP/fr106RJk3Y579ixY9W1a1fVr18/FMCMhS87/4cffhiqASp6fG1E0AAAAKijXnpJyszcfcgIsv1s/5dfrtpyWQDIycmp8P4PPfSQ+vbtq7lz5+rKK690YeWnn34qdd9bb71VCxcu1GeffaYff/xR//rXv9S4ceNi+/z97393ocDCyf77769zzz23WFMuCxWPP/643nzzTX3++efuhv+0007Tp59+6pZXXnlFzz77rN55553QMVdffbULLHbM999/rzPPPNMFCavFKXreBx980B0/ZcoUrVq1ypXD2M+zzjorFD5sGTBggGozggYAAEAdZLUTTzyxZ8c+/viuTax8CAQCGj9+vPtW/3e/+12FjzvxxBNdwLD+HX/9619dcJg4cWKp+9rNe69evVwwsdoHqz055ZRTiu1jN/UnnXSSCxl33nmnVq5cqSVLloS25+bmuoBi5znqqKNcjcbUqVP1n//8R926ddPJJ5/sakSCZbDntFqTt99+W0ceeaQ6derknuOII44oVpti533mmWdc2Xr37u3CyZdffum2WQ2HBbBg7Y8t1qelNqMxGwAAQB1kQ9guXVr54yxg2HGbNxcOfeuDNUOyG2m70S4oKNB5553nmgrZzX5F9OjRI/S7NSmym/D169eXuq/Vdpx++umaM2eOjjvuONcUq2TNQNHztWjRwv208x1wwAHud2suZWEhqFmzZi602Gsoui5Yhvnz57tmVBZcisrOzlajIhex5Hntuct6HXUBQQMAAKAOsnky9sb27f6Chn37bzUE9g19y5YtQx23IyMjXS1HURZGSoqJiSn22MKGBZbSnHDCCa6Gwpo4jRs3Tsccc4yuuuoq12SptPPZuUzR85X2fOWVISMjw3VKnz17tvtZVP0i4aS0c5R8/XUJTacAAADqoCL3t3ukQQNfJZHrHG3Nnqwjd9HRoazDdrAztLFagR9++GGvn8/Oe+GFF+rVV1/Vo48+WqzzeFWwJlZWdqudsNdZdGnevHmFz2NBrGgH89qOoAEAAFAHWW2EtdKp7Kzftr8dl5qqKmf9ND755BO3LFq0yDV72rqXQ17ddtttbuQm63OxYMEC12zLRnmqStZkyka6GjZsmN577z0tX75cM2bM0KhRo9xrqyhrnmUdya2j+8aNG0ut3alNCBoAAAB1kAWGa67Zs2OvvbbyAWVP2JC1VvNgN+hHH320Onbs6JpZ7Q2rFRg5cqTrh2Ed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aqrbVpbzzjtP7dq1czUe33//vf7617/qp59+0nvvvVfmMaNGjdKdd965y/o2bdrs5asAAACofps2bVJycnK4iwFUb9C45ZZbdN999+222dSesj4cQd27d1eLFi10zDHHaOnSperUqVOpx4wcOVI33HBD6PHWrVtdWFm1ahX/kVbztzAW7lavXu0GAEDV45qHB9e9+nHNw4PrXv2sVUbbtm3dF7PAPhc0brzxRg0fPrzcfTp27OiaPa1fv77Y+ry8PDcSVWX6X/Tr18/9XLJkSZlBIy4uzi0lWcjgg7H62TXnulcvrnl4cN2rH9c8PLju1c+amgP7XNBo0qSJW3anf//+rmZh9uzZ6tOnj1s3YcIEFRQUhMJDRcybN8/9tJoNAAAAALVHlUTmrl276vjjj3dD1c6YMUNff/21rr76ap1zzjmhEad++eUXHXDAAW67seZRd999twsnK1as0EcffaRhw4bpqKOOUo8ePaqimAAAAACqSJXVzdnoURYkrI+FDWt7xBFH6Lnnngttt7k1rKN3ZmamexwbG6vx48fruOOOc8dZM63TTz9d//3vfyv1vNaM6vbbby+1ORWqDte9+nHNw4PrXv245uHBda9+XHPUNREBxlADAAAA4Bm9jQAAAAB4R9AAAAAA4B1BAwAAAIB3BA0AAAAA3hE0AAAAAHhXJ4KGzTh+/vnnu5lLU1JSdMkllygjI6PcYwYOHKiIiIhiy+WXX15tZa6NnnrqKbVv317x8fFu4sXgHChlefvtt91QxbZ/9+7d9emnn1ZbWffFaz569Ohd3tN2HCpuypQpOuWUU9x8P3b9Pvjgg90eM2nSJPXu3dsNR9m5c2f3d0DVXne75iXf67asXbu22spc240aNUqHHHKIGjRooKZNm2ro0KFuyPnd4XO9eq85n+uo7epE0LCQsWDBAo0bN04ff/yx+0frT3/6026PswkF09LSQsv9999fLeWtjcaMGaMbbrjBje89Z84c9ezZU0OGDNH69etL3X/atGk699xzXeibO3eu+0C15Ycffqj2su8r19xY2C76nl65cmW1lrm227Fjh7vOFvAqYvny5TrppJM0aNAgzZs3TyNGjNCll16qsWPHVnlZ9+XrHmQ3aUXf73bzhoqZPHmyrrrqKn3zzTfu306b28rmsbK/RVn4XK/+a274XEetFqjlFi5caPOABGbOnBla99lnnwUiIiICv/zyS5nHHX300YHrrruumkpZ+x166KGBq666KvQ4Pz8/0LJly8CoUaNK3f+ss84KnHTSScXW9evXL/DnP/+5ysu6r17zF198MZCcnFyNJazb7HPl/fffL3efm2++OXDggQcWW3f22WcHhgwZUsWl27ev+8SJE91+W7ZsqbZy1XXr169313Ty5Mll7sPnevVfcz7XUdvV+hqN6dOnu+ZSffv2Da0bPHiwIiMj9e233+529vLGjRvroIMO0siRI0OzlKO4nJwczZ49213XILu+9tiuf2lsfdH9jX0bX9b+2PtrbqzJYLt27dSmTRudeuqprqYPVYf3eXgdfPDBatGihY499lh9/fXX4S5OrZaenu5+pqamlrkP7/fqv+aGz3XUZrU+aFib3JLV5dHR0e4/3PLa65533nl69dVXNXHiRBcyXnnlFf3xj3+shhLXPhs3blR+fr6aNWtWbL09Lusa2/rK7I+9v+ZdunTRCy+8oA8//NC9twsKCjRgwACtWbOmmkq97ynrfb5t2zbt3LkzbOWq6yxcPPPMM3r33XfdYjdg1u/Omhii8uyzwpr9HX744e6Lt7LwuV7915zPddR20aqhbrnlFt13333l7vPjjz/u8fmL9uGwDm32D9cxxxyjpUuXqlOnTnt8XiBc+vfv75Yg+8eoa9euevbZZ3X33XeHtWyAT3bzZUvR97p9dj/yyCPuSyNUjvUbsH4WU6dODXdR9hkVveZ8rqO2q7FB48Ybb9Tw4cPL3adjx45q3rz5Lp1j8/Ly3EhUtq2ibEQfs2TJEoJGCda8LCoqSuvWrSu23h6XdY1tfWX2x95f85JiYmLUq1cv955G1SjrfW6dNxMSEsJWrn3RoYceyo3yHrj66qtDg6i0bt263H35XK/+a14Sn+uobWps06kmTZq4IfTKW2JjY13S37p1q2vPHjRhwgRXvRgMDxVhI8YYq9lAcXad+/Tpoy+//DK0zq6vPS76TUtRtr7o/sZG2Shrf+z9NS/Jml7Nnz+f93QV4n1ec9hnOO/1irN+93bD+/7777t/Mzt06LDbY3i/V/81L4nPddQ6gTrg+OOPD/Tq1Svw7bffBqZOnRrYb7/9Aueee25o+5o1awJdunRx282SJUsCd911V2DWrFmB5cuXBz788MNAx44dA0cddVQYX0XN9uabbwbi4uICo0ePdiN9/elPfwqkpKQE1q5d67ZfcMEFgVtuuSW0/9dffx2Ijo4OPPjgg4Eff/wxcPvttwdiYmIC8+fPD+OrqF0qe83vvPPOwNixYwNLly4NzJ49O3DOOecE4uPjAwsWLAjjq6hdtm/fHpg7d65b7OPx4Ycfdr+vXLnSbbfrbdc9aNmyZYHExMTATTfd5N7nTz31VCAqKirw+eefh/FV1P3r/sgjjwQ++OCDwOLFi91nio0gGBkZGRg/fnwYX0XtcsUVV7jRjCZNmhRIS0sLLZmZmaF9+FwP/zXncx21XZ0IGps2bXLBon79+oGkpKTARRdd5P7hCrIwYf942ZCIZtWqVS5UpKamuhu5zp07uxuF9PT0ML6Kmu+JJ54ItG3bNhAbG+uGXv3mm2+KDRd84YUXFtv/rbfeCuy///5ufxsC9JNPPglDqfedaz5ixIjQvs2aNQuceOKJgTlz5oSp5LVTcNjUkkvwOttPu+4ljzn44IPddbcvLGw4SlTtdb/vvvsCnTp1cjdc9jk+cODAwIQJE8L4Cmqf0q63LUXfv3yuh/+a87mO2i7C/i/ctSoAAAAA6pYa20cDAAAAQO1F0AAAAADgHUEDAAAAgHcEDQAAAADeETQAAAAAeEfQAAAAAOAdQQMAAACAdwQNAAAAAN4RNAAAAAB4R9AAAAAA4B1BAwAAAIB8+381vh9jttvB9AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "key, subkey = jr.split(key)\n", "M = get_maze_matrix(small=True)\n", "env_info = parse_maze(M, subkey)\n", "tmaze_env = GeneralizedTMazeEnv(env_info)\n", "\n", "init_obs, init_state = tmaze_env.reset(key)\n", "tmaze_env.render(states=init_state, mode=\"human\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "A, B = tmaze_env.A, tmaze_env.B\n", "A_dependencies, B_dependencies = tmaze_env.A_dependencies, tmaze_env.B_dependencies\n", "\n", "# [position], [cue], [reward]\n", "C = list_array_zeros([a.shape[0] for a in A])\n", "\n", "rewarding_modality = 2 + env_info[\"num_cues\"]\n", "\n", "C[rewarding_modality] = C[rewarding_modality].at[1].set(2.0)\n", "C[rewarding_modality] = C[rewarding_modality].at[2].set(-3.0)\n", "\n", "D = list_array_uniform([b.shape[0] for b in B])\n", "D[0] = tmaze_env.D[0].copy()\n", "\n", "agent = Agent(\n", " A, B, C, D, \n", " None, None, None, \n", " policy_len=1,\n", " A_dependencies=A_dependencies, \n", " B_dependencies=B_dependencies\n", " )" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "qs = agent.infer_states(\n", " observations=jtu.tree_map(lambda x: jnp.broadcast_to(x, (agent.batch_size,) + x.shape), init_obs),\n", " past_actions=None,\n", " empirical_prior=agent.D,\n", " qs_hist=None,\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from pymdp.planning.si import si_policy_search\n", "\n", "key = jr.PRNGKey(0)\n", "policy_search = si_policy_search(horizon=3, entropy_stop_threshold=0.0, gamma=5)\n", "qpi, info = policy_search(agent, qs, key) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When plotting the plan tree, the preferred plan is indeed to go to the right cue, and then fetch the reward." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAKyCAYAAABIREjrAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAx09JREFUeJzs3QV4VNfWxvE37gYhBHd3KwXaUmhLqdBSd3fvbXvr7nLrrtRdKPVCkdIWKFLc3SGEBAghnu9Zm2/SBAIkTEIyk//veQaS0XMmJ5m1zt5rr4DCwsJCAQAAAIAXAr15MAAAAAAYEgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOA1EgsAAAAAXiOxAAAAAOC1YO+fAgAAoGYpKChQTk5OVW8G4LWQkBAFBQV5/0QkFgAAAOVjCcWyZctccgH4g/j4eCUnJysgIMCr5yGxAAAAKKPCwkKtW7fOneFt1KiRAgOZVQ7fPp4zMzO1ceNG9329evW8ej4SCwAAgDLKy8tzgVj9+vUVGRlZ1ZsDeC0iIsL9b8lFUlKSV9OiSLMBAADKKD8/3/0fGhpa1ZsCVBhPkpybm+vV85BYAAAAlJO3c9EBfzyeSSwAAACwV++++64r8PW4//771bVrV/kqX9/+6ooaCwAAAC9lZGQoKyvrgL1eeHi4oqOjy3z/Cy+8UO+9917R8qKNGzfW+eefrzvvvFPBweUPB2+55RZdd911qixjx47VgAED1L59e82cObPEvH9LcJ577jm3T6heSCwAAAC8TCo+/uhTZWUfuL4W4WGhOvucM8uVXAwePFjDhg1Tdna2fvzxR11zzTUuybjjjjvK/fr2uuV57f21dOlSvf/++7rooosq/bXgPaZCAQAAeMFGKiypSIhrreQ6XSv9Yq9jr1feEZKwsDDXq6BJkya66qqrdOSRR2rEiBHutrS0NDeCkZCQ4Ap5jznmGC1atKhcU4neeecddejQwb2OLVt67bXXuusvvvhiHX/88SXua0XCtgLR22+/vddttlGR++67zyVDe7Jy5UqdeOKJLtGJjY3V6aefrg0bNpS4z+OPP666desqJiZGl1xySanv3VtvvaV27dq50aC2bdvqlVdeKdG7xPbH9stut/fwscce2+u210QkFgAAABUgLDRS4eGxlX6x16moZUY93cNtWtGUKVNcojFhwgTX3+DYY48t8ypBr776qhsBufzyyzVr1iz3PC1btnS3XXrppfr5559d/w+P77//3i3be8YZZ+z1eW+88Ua3xO+LL75Y6u3WpNCSis2bN2vcuHEaOXKkG+Uo/ryff/65S4QeffRRt4+WHBRPGsxHH32ke++9V4888ojmzZvn7nvPPfcUTR974YUX3D7Zcy1YsMDdv2nTpmV6b2oSpkIBAADUIJY0/Pbbb/rll1/ciICNTFjQ/Oeff6pv377uPhY4WwPA4cOH67TTTtvncz788MO6+eabdcMNNxRd16tXL/e/PWebNm30wQcf6NZbb3XX2ZQse959Taey0RMbsbBakMsuu0xxcXElbrf9sETGOqHb9hqbOmUjJ5MnT3bbYPUYNkphF8+2jho1qsSohb3G008/rZNPPtl936xZM82dO1evv/66LrjgAjcq0qpVKx1yyCFuBSUbscDuGLEAAACoAWyUwAJ5m8pjU53srL6dybcz9FbA3bt376L71q5d2yUDdtu+WGO1tWvX6ogjjtjjfWzUwpIJY9OUfvrpJzdFqiwsIbDteeKJJ3a7zbbPEgpPUmGs4NsKvD3bbv8X3zfTp0+foq+3b9+uJUuWuNfx1I7YxRIQu94zojN9+nT3nlx//fX69ddfy7TtNQ0jFgAAADWArbJkU5asuZ91Dt+f1aD21rl5b6x+4/bbb3fTrP766y83InDooYeW6fltO22KkgX3nrqNii6+N2+++eZuCYhnNaru3bu7URFLiGy0w+o4rEblyy+/rPDt8WWMWAAAANQAUVFRru7BlpotnlRYwbLVMUyaNKnoutTUVFdLYGf/98UKoq3ewKYl7YmNOAwdOtSNWlhPjPKu8mTTpmx60wMPPFDietv2VatWuYuHTWFKT08v2na7T/F9MxMnTiz62oq6LdGy2gx7f4pfLAHysMJwG+WxBOSzzz7TV1995Wo78C9GLAAAAGowqx2wAmirYbCaAksUbHShQYMG7vqysClVV155pVvpyaZZbdu2zdVsFO91YdOhbHWo/Px8V7dQXray09FHH13iOhs16NSpk8455xxXS2EJ0tVXX63+/furZ8+e7j5W92GjHfZ9v379XP3InDlz1Lx586LnsYTF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cPuNN97QOeecU9WbV+2RWJTRmWeeqd9//12pqakukTjkkEP0yCOPuDWpsf+sQM3mkdKVFACA/evqbSfgrMjbTsixoIz3vv/+e91xxx1uNVCLSayQm1WhyobEAgecHXIbN250CYXnjIvVTthoEGdcAADY/xF/O/lpwTAj/qgKJBY4oN2xPXNErSDNis/s7IoVSjFHFAAA72sU7aSdrVxp9RmWYFizN2oUcaCQWKDSZWZmumSieHds+2NnxWcAAKBi2eInlmBYouFZVdE+dyMjI6t60+DnSCxQaWyakyUU69evV0hIiJvuxDrcAAAcGDt27CjqA5Wbm+tWkbKZArVr167qTYOfIrFAhQ/FWiGZJRRWWGZFZPZHjM6hAABUDZst4Pls9nT19nw2MxUZFYnEApXSHbtu3bpu2JWleAEAqD5SUlJcgkFXb1QGEotK8ttvv+naa6/V7NmzK/VM/e233+4KoV988UVVBSsQs3mcnu7YViRmCQXdsQEAqL48Xb2t/tFCQVtIha7e5VdT4r2yYvyrDI1SjjjiCPeLZsXGRx99tGbMmLHPx9166626++67iw6yr7/+WkcddZQ7g29DkH369NEvv/yy1+cYO3asTjzxRPfLboF6165d9dFHH+3WuO+9995zwf2BYn+ALJH4448/XAdQKxKz7thHHnmk6xBKUgEAgG909bbYpF27du6z3D7T//zzT/cZX9POOxPvVQwSi73IyMjQ4MGD3WoKkyZNcoG01QzYwWZFUHti91uyZIlOOeWUouusuZ4daD/++KOmTp2qAQMGuE7e//zzzx6f56+//lLnzp311VdfaebMmbrooot0/vnnu8YtHtah2rbn1VdfVWWzKU6LFy/WqFGj3D7YL1GvXr00cOBAd5bDCrQBAIDvsM9u+wy3z3L7TLfeF/YZb2fi7TN/b/GOvyDeqwFToQ4//HCXSZsPPvjAHfhXXXWVHnzwwaKGL5Zd33DDDfruu++UnZ2t/v3764UXXlCrVq3c7Tbf34an7AdvQbHNIXzqqad07LHHlmkbrI177969NXr0aEVHR7s+DAsXLtSFF16oL774wv0iWlZrWallmJ7tste0uYt2n73p0KGDzjjjDN17771lfl+OO+44V7/wzjvvFF33/vvv66677nI9IiqDFXp5unva4UJ3bAAA/JctvmJnxtesWeNiG8/nfmV0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iYiI2ONjbRrUiBEj3AFgLBO2A8kOFss2bT7eruyAsoO4uA0bNhTd5vnfc13x+9ioyN62BwAAABUb7+0pLjO1atUq9TE26mHat29fdF2dOnXcCImtDlqcrTLlua8t8nP55Zfr5ptvVlBQkPyRX0+Fql27thuWeumll1y1fnnYnLvp06cXXSyZsCVnrRi7tEIe06dPH7eawMaNG0vMw7OkwXPw2X1sJaji7D52PQAAAA5cvGfx1++//15iGViLy5o1a+bivtLY6lOmeCJjU6E2bdqkJk2a7HOkw/73V36dWJhXXnnF9ZHo2bOnG46aN2+eOxA+/PBDt3KAJ2O844473LJgHlaM07Fjx6KLVf8HBga6Ay0uLs7d55tvvimxOpQNh1kCcd5557khr19++cWtWWzFRLbkmbFlZm1ung2D2evb9tnKA//5z38O+HsDAABQk+M9m/ZuhduXXHKJW2jHHvv888+7OluPXeO91q1b68QTT3Q9M6y9gK30ecEFF7j7WO8KYy0FLL6z7bC4z7621z7jjDPcUrT+yq+nQpkWLVron3/+cQU29gNdvXq1C/ItAbjlllt09dVXu/tZz4ldh6/2ZcuWLSWyVTtov//+e1111VUuA7aVCexAK16oY4mJLTdriYQduLaSwFtvvUUPCwAAgAMc79nJYs+KUj169HDTme69916XONhzlBbvmffff9/FctabzE4822pPP//8c1HSEBwcrCeeeEILFy500+ltJOPaa6/1+xPJft/HoqKNGjVqj30sAAAA4PtslMMSiz1Nf0cNnQoFAAAAoPKRWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGokFAAAAAK+RWAAAAADwGolFKR577DH16tVLMTExSkpK0tChQ7VgwYKi29esWaOAgIBSL1988UWVbjsAAAD27dVXX1Xnzp0VGxvrLn369NFPP/1UdHtOTo6uueYa1a5dW9HR0TrllFO0YcOGKt3m6o7EohTjxo1zB9LEiRM1cuRI5ebmatCgQdq+fbu7PTk5WevWrStxeeCBB9xBd8wxx1T15gMAAGAfGjZsqMcff1xTp07VlClTNHDgQJ144omaM2dOUeLx3XffuZPGFhuuXbtWJ598clVvdrUWUFhYWFjVG1Hdbdy4UXXr1nVZbF5enurXr682bdooJCREoaGh7j7dunVT9+7d9fbbb1f15gIAAGA/1KpVSw8//LA6dOigI488Uu+8845OPfVUhYeHu9kr7dq104QJE3TwwQdX9aZWS8FVvQHVjeVZW7ZsUUpKijZt2uSSilmzdmauv4/7Q/EJCVq4cIn++nOim/oUHROtbdu2aPr06br33nu1Y8cORUREVPVuAAAAYC8sZrNYz2K+9evX67vvftC2bdu0ZvU6F/vZyeR1azfo7bffdSeS69ZNdCeaR4wYobZt2youLs7FgvgXicX/y8zMdJmoHUhbtmxVfl6BgoLCFRQYqS++GK7WrTqqU4ejlJm5Q8EhwW60oqAgV1nZGfr883dVt26yVq5c6w6+xo0bqGPHjmratKkCA5ltBgAAUB0UFBRo+fLlmj17tlauXKNVq1bpueeeUV5ersLCwnXD9ferQ/tD9Pv4XxQcHKxGDXqpoLBAObmZWrdmq8LCIjRp4mR98MHHiouLVadOHVySwUnlnYJr+uiEZag2l27hwsXKzSlQRHgdJdbqqPCwGAUFhejV1x/S+nVr9Ngj7ykqqrby87e6rNWGxExYaJamTZ2s0067XA3qHaQdO9K1auU6LVv2k+LiYtSxY3s3bBYVFVXVuwsAAFAjWZ3svHnzNHv2XG1J36bg4BjFxbRU7S5d9Pwz/ZS5I0N/TRipN996Wo881FGhIZFWMeBiv+LCQqMVG9vAxYrbtm3Q7+MmaOLEv9WqVQs3fcrqcGvyKEaNTSxsqGvMmLFasXyVpFDFRDdRXFKySyY8Xn/zEU2eMk6PPfyuEhOTS30eOwizc3Zo4OEnKDQkwl3iYuspOztDaVvW6M8/Jmvy31PV66Aerg4jKCjoAO4lAABAzZWfn69//vnHxWI5dgI5Ikn1k1srLCy66D5REbHu/5YtOmjR4tn6/vsPddBBA90oRsb2rYqO2nm7SU9PVa1aSYqKrOUu+fkttWXres2bu1zz5i5Uk6aNNGDA4W5l0ZoouCaOUsydO1d//jlBWTsKlVi7vaIia5fILu0+b7z1qCZOGq1HHnxHdes23OPzjfrta/XqOUBxcbVKXG8HbHJSG+UXtFBa2kr98cckLV26TAMHDlBiYmKl7iMAAEBNZ/UTo38bo7XrNio2upGS6zZWUODeQ9/CgkLl5uWoebN2CgoK1syZk9S3z1HuttVrlill0zq1bd2l6P52QrpWQiMlxDfU9sxULV++SJ988pn69euj9u3b17jRi+CaOEqxbOlKRUbUVeOGLRVYygH2+huP6PfxP+rOO55XRESU0tI2uesjI//Nbs26dSs1Z+5U3XvXK3t8TTuAE2s3V3R0HW3cMF+ff/6lDjqoJ6MXAAAAlThK8fekKSooCFP95O5uivuu3v/wOfXodogS69TTjh3bXew3e85k3X/Pay7m63/Y8Xpn2FOKjo5TZGSU3njrMbVp08VdduUW9IlKVGREvFI2LdaoUWO1ZMnSGjd6UWOWm7VeE99//6N2ZBaoTmIbN3y1Jyee3KnU66+/9iH16jmwqMbigw+f19jfv9ebr/1SpiLtwsICpW5erq0Zq9SsWSMdc8zgouVqAQAA4B1ramftAZYtW+1GKWrXaqqAgNJjtBdfvteNSGxOS1FUZIyaNG2lU4ZerK5d+yorK0sZGdv05deva/wfP7meZt269tWVl9+thIR9zzzZnrlZKZsWKCIyUEOGHOdqL2qCGpFYWMX/jz/+rPzccNWr12mfw2B7s3VryeLt/bFjxxat3zhLDRrW0XHHHctKAgAAABWwfOwPP/yoNatTlJzUSRERcfv9XJZYWJJiHbn3V35Bntatm6WgkCwde+xgNWrUSP7O79dCXbNmjb7//icV5Eepfr0uXiUVFcUO9HrJXbRmzSZ9//0Pys7OrupNAgAA8FkWS1lMZbGVxVjeJBUVJSgw2MWeFoNaLGoxqb/z68Riw4YN+uGHn1RYEKX6yR2rVU8Jm+tXv24XrV2zyQ3Z2RAbAAAAysdiqB9//MnFVBZblVZPUVUCAwNdDGqxqMWkFpv6s+oTaVdC5vrzz78qNyfE/UD3NL+urGzGmA2x2fNmZe1QTo73owxu5ai6nbRi+VpNnDjR6+cDAACoaSZMmKCVK9YquW7nEsvI7i+L8SzWs5jPYj9vqwYCAnYmFxaTWmzqzzNVAv35IEtPy1By3Q4KDKyA1ZcKC113bmuwYqtL5eRUzAhDRHic4uOaa8b0WTViiAwAAKCiWOw0c8ZsF0tFhO9/PURxFuNZrGcxn8V+FgN6KzAwSMlJHVxsajGqv/LLxGLlypWaNWuuasW3UEjwvous77rnIr319hN7vU9AYGBRkbWtaxweHlZh2xsf10CBATEaM3osU6IAAADKwGKm0aPHuhjKYqmy2lfcZzGexXrGYr9Jk8foiquP1UmndtlnvLg3ISHhSohv4WJUi1X9kd8lFja8NGbMOAUFxik2tl6FPrcdaCEhwQoLC1Nw8L8dur1lax8nJbVVaupWpkQBAACUgcVMm1O3qm5S2wptRGcxnsV6FvNZ7PfKaw+6JnlvvTFSZ599rZ5/8S49+vj1+/XccbH1FBwYq7Fjx/nllCi/SyymTJnihpnqJrWp8G6HNoxVq1ZtxcVVzFBbcaEhEYqPa6YZM2b7fWEPAACANyxWsmnkFjuFhFT8sv0W61nMZ8H/li2b1a1rP9WulaTIiCjvTybXaau0zRkuZvU3Vb/2agWyH/7s2XMVE91wj1OgsrIy9errD2vipFGKCI/S0BMvLHF7RsYWvfn2E5o8Zee0pI4deuiyS+5Q/fpNXPHO5Vcd7Zqj9Os7yN3/xptOVXp6qt59Z4z7fu68abrnvkv18Qd/KiwswjXbu+aq+zVl6u/6Z/pfql07SRddcIt6HzRgt22zYbyt29Zo9uzZqlu3bqW8RwAAAL5u1qxZKiwMK9cUqNLk5ubow49e0O9//KTt27epceOWuuC8/6hTx16aN3+67r73Yne/e+67xP3fsUNPzZ4zpURD5YcffMfdvzxTomKiG2jO7Lnq1auXXzVL9qsRi0WLFmnHjhzFx9Xf433efe8ZzZkzRXfe/oLuv+9117p9ydJ5Rbc//+LdWrxkju6640U9+diHrl7nwUeuVl5erssyO7Tv4R7jSUJWrV7qVg9YvXqpu84OtlYtO7qkwuPTz1/VIf2O1gvPfqUe3Q/VM8/drm3btuy2bfb8MdH1tHDhYrcKAQAAAEqygupFi5a4mMnb2Smvv/mo5i+YoVtuelLPP/uV+vUZpAceulJr165Q2zZd9cpL37n73X7rs3r37TEuPuzX92h179bPfW8Xu195xcU1UOaOHC1cuFD+xG8SCxtNmDVrtsLDais4uPTC6h07MjXyt6910YU3q0vng9W0SWvdcN0jys/Pd7fbQfT35LG69uoHXALRrFkb3fSfx5WaulGT/h79b6Y6e2emOmfuVDVv1k4dO/bUrP/PXmfPnqwOHXqWeN0jBpyoww49VvXqNdZ551zvRk0WLZq1x7l3Odn5mj9/foW+PwAAAP5gwYIFLlaymMkbKSnr9Nvo4br1v0+7uK9eciOdNPRCtWvXzV0fEhKiuLha7r7R0XFKSEhUZGT0/9dfhLrv7WL3K6+Q4DCFh9Zysau3y9lWJ34zFWrt2rVKSdmspNo7h6VKs379Kjfy0LpV56LrYmLi1KBBU/e1jT7YKgCtW/37HLEx8e52u82TWLz1zhNuvp2NTlhSkRCf6BKKo444yWW9Jw+9qMTrNm3auujr8PBId1Cmb9lc6jYGBYUoIryOZs2ao65du1Z4nQgAAICvKigocDGSxUoWM3ljxYpFKijI19XXHl/iepsKHxMdr8oWH9dQG1Nmad26dapff8+zbXyJ3yQWNpQUoDBFRFTugdCkSWuXtVpSYVOqzj37esUnJOrrb97RosVzlJ+fq7ZtSw6JeZYs8whQgAoLC/Y6PLZh4z8uWWrQwLu5gwAAAP7CYqP0tC2qm9TN6+fakZXpFuZ5+qnPFLRLzzM7EVzZIiLiXexqIzD+klj4zVSodWvXKzwsfq9n+JOTGyk4OFgLF80sus7qJGwKlGnUsLny8/O0sNg0pa3b0rVmzXI1atjCfW/P375dd/09eYxWrlqidu26uylVuXk5+uXXL9SiRQevD0ZrRV+oIG3cuNGr5wEAAPAnO2OjIBcreat587ZuxMJmodh09eIXm+K0t+VobeTEWwEBAS52XbfOf1YD9YvEIicnR2np6QrfR8fFiIhIHXnEya6Ae+asSW4IzIq1PcmIrfxkqzW9/Or9bnWnZcsW6NnnbncrORVfxckq/38f/5OaNW3rnjMwMNDNzRv3+w9uqpS3bHtCgqOUkpLi9XMBAAD4C4uNgoOjKmSqeIP6TdX/sOP03At3acLEUdqwYbU7ufzlV29pypTf9/i4pDoNtHz5Qq1es0xbt6a5afb7Kzw8RmlpaS6W9Qd+MRVq06ZNys8rKFP2euH5N7vi6Ycfvc4lBSeecIEyMzOKbr/+2ofccrMPP3KtcvNyXcJw712vlGiIZ8XZluFafYVHxw69NOnvMe7/ihAaGqP16xmxAAAA8NiwYaOLkSqKxX2ff/mG3nn3f9q8eYNiYhLUpnVn9ex52B4fM+ioU9wKoTf/98ydMWU5l5stLjwsVmnpBUpNTVW9ehXb2LkqBBT6QSn6zJkzNWb0H2ra+FC/KXbeum2D0rcu1KWXXqTw8NJ7cgAAANQUthT/22+/q/jY1oqN8Y9+X4WFhVq+crwGDDxEnTv/u7iQrwr0lxGLihoWqy5s9CU/v8DtGwAAQE1nZ/UtNqqI+orqIiAgwMWwtm/+wC8Si6ysbAUGeLfkWHUTHByqwoJC100cAACgpsvKynKx0Z76lfmqwIAQt2/+wC8SC9cVO9AvdqVIQECQbI5aXl5eVW8KAABAlbOGxhYbBQT4W8wXqNxc/4j3Av3lQAvwj10p4pnWVRHLmQEAAPhDvGf8aeq7J7Hw7Juv84to3BrQ7a3hnC/y7I8tZQsAAFDTBQXtbGLnB+sO7RbzWZ81f+AXUWtIiH8mFpaQ+8uBBgAA4A2LiWysorDQP87uexQUFrhY1h/4xV5ERkaqoGB9qbc9/+JdGj1mRNEBmZhYTwMOH6LTTrnMjXTsas6cKfrm23e1eMlcpaWl6I7bntPBvY/Y5zbMmj1Z7wx7SitXLVZiYrJOP/VyHTFwaIn7/PDTJxo+/F2lpW9S06ZtdPmld6h1q06lPl9ubpYCAwIUERFRxncBAADAf1lMFBgY4GKksLBor2O+8sZmnrreL79+S2PGjFDq5o2uyd4F5/1H3bsfst+xZEFBtt/Ee34xYpGYmKjc/Mw91iN079ZP7749Rq++9IOGnnCBPv3sVX0z/N1S75uVvUNNm7bWFZfdVebXt06NDz1yjWuO8twzX+qE48/VS6/cr2n//Fl0n/F//OwSjzNOv1LP/O9zNWvaWvc/eIXS00tfXiwre5uCggPdvgEAANR0FhNZbGQx0p6UJ+Yrb2xmPvr4Rf3y65e67NI79NLzwzX46NP12JM3aunSefsVS1rsmpef6Tfxnt8kFpbB5uT820G7uJCQUCUkJCopqb6OGXyGunQ+WH9PHlPqfXt0P1Tnnn29+hy871EKj59/+Vx1kxro4ov+q0YNm+u4Y89W3z5HacR3HxTd59vv3nedGo884iQ1btRCV11xr8LCIjRq9DelPqf90sTHxys0NLTM2wEAAOCvLCaKj4/ba2JRnpivvLGZGTPue516yqXq2eMwJSc3cq9hsePwEe/tVyyZnZPhYlgSi2qkdu3aCt5HBltcaGiYG8oyJ57cSb+NHu7V689fOMMduMV169pXCxbOcF/n5uZqyZK5Je5jRdn2/YIFO++zq5ycbapbt45X2wUAAOBP6tZN2uOJ5PLEfPsTm5m83ByFhoTt9hrz5v2zH3sjZWdvczGsxbL+wC8SC5tHV7t2rX0mFraKwPQZE/TP9L/UqVNvd12DBk0VGeldB8f0tFTFx5c8IOz7zMwMZWdnaeu2NBUU5Jd6n7RShttsO/PytqtOHRILAAAAD4uNLEba18pQ+4r5yhubeXTr1teNdKxdu8JNY5o+/S9NmPibNqel7Nf+ZGVt+/8T5H5R9uwfxdumfv162rB+vjuQdl3fePKU33XG2Qe5ZnN2+2GHHquzzrjK3fbKi9+pusnckSZbZTY5ObmqNwUAAKDasNgoMLDQxUpRkbV2u72yY75LL75dL796v665/gTrQOGmQx0x8MT9mv1SWFiorOw0tW/QTv7CbxKLtm3bavr0Wdq+fZOio0ue6bei6quuuEfBwSGqVavOHlcG2F/xCbV3K/Sx7yMjoxUWFq7AwCB3Ke0+CbtkymbL1jWqk1RbSUlJFbqdAAAAvsxiI4uR0jevKTWxKGvMFxuTUK7YzCMurpbuvP0F5eRka9u2dNWqlaT3P3hWdes2LPe+ZGzfpIDAXBfD+gu/mArlGRqrXz/ZBeW7Cg+PUL16jVWnTr0KTypM29ZdNHPWxBLXzZg5QW1ad3Ffh4SEqEWL9po5c1LR7TZ8NnPmRLVps/M+Hrl5WcrK3qxOnTr6XWdJAAAAb1hsZDFSVs5m5eZl73fMV57YrDRWV1G7dl3l5+fpr4mj1LvXgHLvi8WsDRrU85vCbb9KLIwdaNm5W5STk1nmx1x93RA3N85jx45MLV02313Mho1r3NcpKeuKGte9/+Fzevb5O4seY0uNrd+wRu++/4xWr16qH3/6VH/8+atOGHJe0X1OHHK+fh31lUaP+VarVi/Va68/5JYjO3KXXhdbtqxVZGSYWrVq5dV7AQAA4I8sRrJYacuW3U8mlyfm23tsVuhiPov3LO7zWLBwpiZMHKX161dpztypeuChq9z9TjrpojLHksZi1ZzcLerYsYP8id9MhTLNmzdXTEyk0resVlKd1mV6zJo1y5WZ+W/R9+Ilc3T3vRcXfW/rG5uBA07QDdc9ooyM7dq0aYNSU/9tyGfDX/fc9bLeHvakvvv+QyXWrqtrr77fraXsceghg7V162Z9/MnLrglLs2Ztdd89ryk+PrFEppyxfb26dW/HMrMAAAClsBipXbs2+mfaPNWu1VQBAYH7FfPtLTbLzs5WTk6ONm1a55aD9cjNzdaHH7/oepiFh0e6pWVvvOFRRUfFljmWNBarWszaokUL+ZOAwn2V1fuYqVOnavz4iWqQ3KPUroze2rp1qzugw8PDK/y5U1KXKDtnnc466wwlJCRU+PMDAAD4g7S0NH3yyWcKD62vxNrNK/z5s7KyXGIRG/tvwlBRsrMztGb9VB166MHq0aOH/IlfTYUyXbt2VXJyojak2ApRpXfiro6ysrZqW8Zq9e7di6QCAABgLyxWsphpa8YqF0P5isLCAm1Imad6yXVczOpv/C6xCAoK0sCBAxQQmKXNaSvlOwfZfDVoUFfdunWr6s0BAACo9iwwt9hp4ybfOZm8OW2lAgKzNfCIAS5m9Td+l1h4liLr1au7tmxb4YabqrtNm5cpKDjHJUTW9REAAABlO5kcGJSj1M3LVd1lZ2e42NRiVH9tguy3UazNWbMpUes3zlZeXo6qq20ZKcr4/ylQ/tLOHQAA4ECw2MliqG0Zq1xMVV3l5eW4mNRiU3+rq6gRiYVlscccM1gxMSFau36G8vNzVd1sz9yslNR5at+htbp3717VmwMAAOBzLIayWMpiKoutqpv8/FwXi8bEhrjY1B+nQPnlcrO7iouL0wknDtG7776v51+6VQvmz1fq5o2uI3a95MY6vP/xbumvsLCI3R47a/ZkjfjufS1aNFuZO7arfr3GGnrihere7bC9vqatUfzq6w+5x0eER2rAgBN0/rk3lGjSYre99fZjWrV6mZKS6ujhhx+mGR4AAMB+sBhq4MCB2rBhg157/T4tWLBQm9M2lSneM8uXL9Drbz6qRYtnKzY2Qccfe7aOPebsCon33h72hFatXKKEWrV07733uNjUn/l1YmHS09P1xBOPuexw8DEnqGungYqIiNGKlYv0y69fulbsvQ/avVvi/PnT1bRJa5180iWKj6+tKVPG6fkX79KN1z9e6v1Nfn6+Hnrkarf+8ROPfaC0tBQ998JdCg4K1nnn3uDuY+seP/jw1erbt6/uuPMWt5zZ5ZdfrgYNGujoo4+u9PcDAADA36xYsUL//e9/XUftowcPVvt2fZUQV3+f8V5mZobue/AKdel8sK664h4tX7lIL750r0JDw3XYocd7Fe899MjV6tvnUF1yyQUKDg7UjTfe6Jr7+XO853d9LHY1ePBgzZkzR5MmTdLo0WOUummrEuKbKy62vstwbffLOlpgCUFUVKyuuer+UvtYTJ02Xg8/eq2GvfVbUeO7n375XO9/8KzeH/a7rC77tTfu08xZU/TRRx/q8MMPd8XaZ555pkuAfv755wrffwAAAH/niffmzp2ryZMna/bseQoLSXQNk4OCQvYY7/3082f68OMX9O7bY11SYt774FlNnPibnnjs41L7WOwr3gsODtYbbz2kaf/8oaeeekpDhhzvRipqQrzntzUWJjU1Vb/++quuueYa1a9fX6effpq6dmuvLduWaM266crN3VF0kNloxF33/NuOvTSW1VpisSfzF8xQk8atSnTT7t61r3vc/AWTtXLN31q2fL6OPnqQBgz4dwUoy1wnTJhQYfsNAABQUxSP92JiYlyMdcwxgxQUst3FXlbUvad4z2K3Du17FCUVplvXflq7boW2b99a7nhv6bI5LsZcsHCa+vXr62JPz/SnmhDv+fVUqMWLF7sMtU2bNu5765jdv39/nXTSScrMzJSN1RwxcIguv/QuJSTUUUHBngdv/vjzZzf37vzzbtrjfdLTNykuvuTKTpGRO+fzrVozXUN7nVC0PcWz5rp167qO3jt27FBEROnz/wAAALDveM9iLJtydPDBB7t4r6CgQIf3P1qXXXL3bvGexW51kxqUeD6bAu9u27JZ9eo1LFO8Fxu7M3lYvHSi+vU72L2mrf5ksWdNivf8OrHYkylTprjahlNPPVVZWalasWqCjh50jOLjSh5Y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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pymdp.planning.visualize import visualize_plan_tree\n", "\n", "\n", "def generalized_tmaze_observation_description(observation, model=None, env_info=env_info):\n", " obs = observation[0]\n", " maze_shape = env_info[\"maze\"].shape\n", " num_cues = env_info[\"num_cues\"]\n", "\n", " pos_idx = int(obs[0])\n", " row, col = divmod(pos_idx, maze_shape[1])\n", "\n", " cue_vals = [int(v) for v in obs[1 : 1 + num_cues]]\n", " reward_vals = [int(v) for v in obs[1 + num_cues : 1 + (2 * num_cues)]]\n", "\n", " cue_map = {0: \"none\", 1: \"r1\", 2: \"r2\"}\n", " reward_map = {0: \"none\", 1: \"reward\", 2: \"punish\"}\n", "\n", " cues_str = \", \".join(\n", " f\"c{i + 1}:{cue_map.get(v, v)}\" for i, v in enumerate(cue_vals)\n", " )\n", " rewards_str = \", \".join(\n", " f\"r{i + 1}:{reward_map.get(v, v)}\" for i, v in enumerate(reward_vals)\n", " )\n", "\n", " return (\n", " f\"pos: {pos_idx} ({row},{col})\\n\"\n", " f\"cues: {cues_str}\\n\"\n", " f\"rewards: {rewards_str}\"\n", " )\n", "\n", "\n", "def generalized_tmaze_action_description(action, model=None):\n", " action_idx = int(action[0])\n", " actions = [\"down\", \"up\", \"left\", \"right\", \"stay\"]\n", "\n", " if 0 <= action_idx < len(actions):\n", " return actions[action_idx]\n", " return str(action_idx)\n", "\n", "\n", "visualize_plan_tree(\n", " info,\n", " time_idx=None,\n", " observation_description=generalized_tmaze_observation_description,\n", " action_description=generalized_tmaze_action_description,\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we limit the planning horizon to a single step, we can see that indeed it renders both cues equally attractive." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "policy_search = si_policy_search(horizon=1, entropy_stop_threshold=0.0, gamma=5)\n", "qpi, info = policy_search(agent, qs, key) " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAKyCAYAAABIREjrAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAt1VJREFUeJzs3QV4neX5x/E77tI00tTdvbi7DRsbTBk2GLox+W+DDbexDQZDNgbDfbgOL9qW0lJ3tzTaNNb4+V+/pzshaZs2aeQ98v1cV642yck5z3vOY/f7WITP5/MZAAAAAHRAZEf+GAAAAACEwAIAAABAhxFYAAAAAOgwAgsAAAAAHUZgAQAAAKDDCCwAAAAAdBiBBQAAAIAOI7AAAAAA0GEEFgAAAAA6jMACAAAAQIcRWAAAAADoMAILAAAAAB1GYAEAAACgwwgsAAAAAHQYgQUAAACADovu+FMAAACEl8bGRqutrfU6GUCHxcTEWFRUVMefiMACAACgfRRQrF692gUXQChIT0+3Xr16WURERIeeh8ACAACgjXw+n+Xl5bk7vP369bPISGaVI7jzc1VVlRUUFLjvc3NzO/R8BBYAAABtVF9f7zpivXv3tsTERK+TA3RYQkKC+1fBRXZ2doemRRFmAwAAtFFDQ4P7NzY21uukAJ3GHyTX1dV16HkILAAAANqpo3PRgVDMzwQWAAAA2K1HH33ULfD1u/76623ixIkWrII9/YGKNRYAAAAdVFFRYdXV1d32evHx8ZacnNzmx5977rn22GOPNW0v2r9/f/vJT35iV199tUVHt787+Jvf/MauuOIK6ypTp061I4880kaPHm3z5s1rMe9fAc5dd93lrgmBhcACAACgg0HF0089a9U13XeuRXxcrP3wR99vV3Bxwgkn2COPPGI1NTX21ltv2WWXXeaCjKuuuqrdr6/Xbc9r761Vq1bZ448/buedd16XvxY6jqlQAAAAHaCRCgUVPdKGW6+siV3+pdfR67V3hCQuLs6dVTBgwAC75JJL7JhjjrHXXnvN/W7Lli1uBKNHjx5uIe+JJ55oy5cvb9dUoocfftjGjBnjXkfbll5++eXu5+eff76dfPLJLR6rRcLagejf//73btOsUZHrrrvOBUOtWbdunZ122mku0ElNTbWzzjrL8vPzWzzmT3/6k+Xk5FhKSopdcMEFu3zvHnroIRs1apQbDRo5cqTdf//9Lc4u0fXouvR7vYe33XbbbtMejggsAAAAOkFcbKLFx6d2+Zdep7O2GfWfHq5pRV999ZULNKZNm+bONzjppJPavEvQP/7xDzcCctFFF9n8+fPd8wwdOtT97qc//an997//ded/+L3xxhtu297vfe97u33eK6+80m3xe8899+zy9zqkUEFFSUmJffzxx/bee++5UY7mz/v888+7QOjWW29116jgoHnQIE899ZRde+21dsstt9jixYvdY6+55pqm6WN///vf3TXpuZYuXeoeP3DgwDa9N+GEqVAAAABhREHDBx98YO+8844bEdDIhDrNn3/+uR100EHuMeo46wDAV155xc4888w9PufNN99sv/71r+0Xv/hF08/23Xdf96+ec8SIEfbEE0/Yb3/7W/czTcnS8+5pOpVGTzRiobUgF154oaWlpbX4va5DgYxOQld6RVOnNHIyc+ZMlwatx9Aohb78aX3//fdbjFroNe644w4744wz3PeDBg2yRYsW2QMPPGDnnHOOGxUZNmyYHXLIIW4HJY1YYGeMWAAAAIQBjRKoI6+pPJrqpLv6upOvO/RawL3//vs3PbZnz54uGNDv9kQHq23atMmOPvroVh+jUQsFE6JpSm+//babItUWCgiUnttvv32n3yl9Cij8QYVowbcWePvTrn+bX5sceOCBTf+vrKy0lStXutfxrx3RlwIQ/dw/ojNnzhz3nvz85z+3d999t01pDzeMWAAAAIQB7bKkKUs63E8nh+/NblC7O7l5d7R+4/e//72bZvXFF1+4EYFDDz20Tc+vdGqKkjr3/nUbnb34Xh588MGdAhD/blSTJ092oyIKiDTaoXUcWqPywgsvdHp6ghkjFgAAAGEgKSnJrXvQVrPNgwotWNY6hhkzZjT9rLi42K0l0N3/PdGCaK030LSk1mjE4fTTT3ejFjoTo727PGnalKY33XDDDS1+rrSvX7/efflpClNpaWlT2vWY5tcm06dPb/q/FnUr0NLaDL0/zb8UAPlpYbhGeRSAPPfcc/biiy+6tR34BiMWAAAAYUxrB7QAWmsYtKZAgYJGF/r06eN+3haaUnXxxRe7nZ40zaq8vNyt2Wh+1oWmQ2l3qIaGBrduob20s9Pxxx/f4mcaNRg3bpz96Ec/cmspFCBdeumldvjhh9s+++zjHqN1Hxrt0PcHH3ywWz+ycOFCGzx4cNPzKGDRFCet4dC2vNqFSgu9tVvWr371K7vzzjvdou9JkyZZZGSk/ec//3E7bDU/NBCMWAAAAIQ9jSRMmTLFdfy1/kALvHXWhc65aAsFCurYa7cljSzoeXbcrlZBgDrnCg40QtBeRx11lPtS8OCnhdSvvvqq2yb3sMMOc6+hgEEjCn4aZdAOT1o4rmtcu3at2263OQU92m5W74MCFQUmGlnxj1go2Przn//sghMtCF+zZo17fxRk4BsRPuUcAAAA7JF2EtJce3U4tQhaioqK7Omnn3fnS3TWVrC7U1NbZVu2LrMf/vAsy8zMtGChtQwaBVHn3b/7EgI3X+8NpkIBAAB0gDpiOglbnf1ue8242A51ALuTzppQ8KXtXDV16NRTT/U6SegiBBYAAAAdoK1Jf/ij77f7JOyOUFCxpzMgAoXOgNCd8L59+7rpRZ21GxUCD58sAABAB/nPPsDOtGMUM+/DAytOAAAAAHQYgQUAAACADiOwAAAAANBhrLEAALSgw6t06u7WrVvdfvH+PeO14FJfOkBKp+hGRUV5nVQAQAAhsACAMKcTctevX2+FhYWWn5/vtoVUMKEAQwsudQCV+P+vgEIBhvbPz8nJsaysLOvXr587QAoAEL4ILAAgDClI2LBhgy1YsMBWrlxpdXV1TQFDXFycCxJiY2NdINE8sNBXbW2t+1IAsnnzZheA6HTeoUOHuhN3taWk/28AAOGDwAIAwogCiEWLFtn8+fPddCcFAElJSW7UITJy98vu/EGGOwys2cFcOvxKJ+ouW7bMli5d6qZJjRs3zkaPHu0CDgDBtz3slVde6b5CwdSpU+3II4+0LVu2uAP6gtXAIPhcCCwAIExs3LjRPvroIzfSoNGIjIwMNzrR0dEFBSSpqalulKOmpsbKysrc6yh4Oeqoo6x3796ddg1AoFJwHegH5GnK43XXXWf//e9/XT2Qm5trp59+ul177bXuhkAoOOKII2zixIl21113Nf3soIMOsry8PLc+rCude+659thjj9ltt91mv//975t+/sorr9i3v/3tsDjLg8ACAMJglGL69Ok2Z84c9312dnaXjCQ0H83Qa2pE5MUXX7RJkybZ/vvvz+gFQjqoeP6px6y+urLbXjM6PsnO+tE5bQ4uVq1aZQceeKANHz7cnnnmGXcS9sKFC+3//u//7O2333Z1hG42eEHTKVV/7GnUdG/pRkqvXr2sO8THx9vtt99uP/vZz6xHjx4WbthuFgBCmO7SPffcc/bVV19ZQkKCW2zdHR18vYZeS685c+ZMlwalBQhFGqlQUHFE/Fo7PWVll3/pdfR67Rkhueyyy1wH+91337XDDz/c+vfvbyeeeKK9//77bjTzD3/4w06bOvzgBz9wUyX79Olj9913X9PvdOf9+uuvd8+hUU+NSv785z9v+r1GLn/zm9+4v9Pf68aCpiP5Pfroo25K0muvveamTOo5HnroIdcpLy0tbZGOX/ziF27kU3SzQmnS8yYmJroplwqSmo8YfPzxx3b33Xc3Td1cs2aNe239v/lz66aH1oTptTXF6I477mjxuvrZrbfeaueff74bjdW1/utf/9rj+3zMMce4IEajFruzp9cvKCiwU045xdWhCgKfeuqpnZ5D1/PTn/7UTWXVqLHep7lz5zb9Xv/XFDClX7+fMmWKawu6EoEFAIQo3aF8+eWX3bxidfI1DaA7F1XrtfSaem2lQWlRmoBQlR5Tb5mxXf+l12mPkpISe+edd+zSSy91HdXm1An+0Y9+5IL/5lN1/vKXv9iECRPs66+/dtN61MF/7733mjrFf/vb3+yBBx6w5cuXu6k+6uT7XX755TZt2jR79tlnbd68eXbmmWfaCSec4B7rV1VV5e7sK6DQyInSoGBDz918JEPp0u9EgZQ6x2+++abbeOKiiy6ys88+27788kv3ewUUGpW58MIL3Y0MfWnHuh3NmjXLzjrrLPv+97/vpmwqSLrmmmtcwNOcOvv77LOPew/03l1yySVuHdnuREVFuYDknnvucRtk7EpbXl9BkqauaVrpCy+8YPfff78LNprT+6qfacRJzzl58mQ7+uij3ectet+0mYZu7uj3+hy7+sYSU6EAIASp8VMnQJ17dey93KXJP3qh7WzfeustO+6449x0DADdQx16BQ2jRo3a5e/1cwX/KqOaKikHH3xw0zoBldfPP//cBRPHHnusrVu3zgUkujuv8q27+fvtt597rH73yCOPuH/966s0eqF1Hfq5Ot2i6ZLqLCt48VNH++mnn7YLLrjAff/BBx+4u/Lf+c533PcaqdBz+V1xxRUuYHr++efd6+tGhkZlNJqxu6lPd955p+uAqzPvvz5taqFgSh16v5NOOskFFPK73/3OXb86+iNGjNjt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asmpjVZQNM/WbZhhvXpl2YIFM21rWYE1NNS5x8+dO81yc/tbclJq03PoJGJ1nopLVltGT53ebbZ02aeWmRVrxx9/lJ166sm2detWGzZsWIvX1q46Cmw0avHMM8/YgQce6O64AoFcno499li79957rbJSp1+3pE6+Ri3OPfcnLu+rDBSXLLS1G6ZZr16ZrjyVbs1vOr1b5al37gBLalaeVNYqq0rceRQ9eya7ny1aMtWVzaOPPsxOO+0UV55GjhzZ4rWTk5PtuOOOs5KSEjfVkPIEoK0ILAC0ieZb/+QnP3F3WTVCoQBj8eLF7o7rk08+aUuWLHEdfO0io879O++8bWeccarts+8YO+XUoy0qOtLuue8qmz7zBXv51bvttTcet0MOPtTy8r92wcerb9xrl1x+khVvWWgNvkKbss8It0j8/ffftd69c90JwT/96U9dJ0gngfvT9M9//tO99pw5c+wXv/iF/ec//7G77rrL67cL2KP777+/afSvtfKkBdqPP/64vf76a3bW975j++8/wU47/XhXnu69/2qb8dVL9tIr28vTwQcfYvmFc115eu2N++ziy06wopIFVlefZxMnD7ZDDz3U3n//HRs4sL8rxxdddFGr5WnTpk2uLGla1vXXX+/1WwUgSET4vDryE0DQ0GLSTz75xFJSUtwi6dtuu83efPNNt1uMAonRo0fbmWee6bbP1Dzxc88919asWeOmTfnNnTvXLr74YjeHXNMvvvvd77oRkO3bZfa3t99+22644QZ3B1Wvo45PWVmZ/fKXv7SXXnrJ3cE9/PDD7e6777Z+/fo1dYROOeUUmz9/vpsiojurt9xyi+2///4evltA22lRtM5e2ZvydMkll9isWbOaytMRRxxhdXV1bjqVAgKtldCog36/t+VJayxUPhXka2tcANgdAgsAu9XY2GjTpk1zp26rc6GOT2f54osv3JSqSZMmddpzAuFKGyls27bNDjrooE57Tu34ppsKCnD0vJxlAWB3mAoFYLc0LWLLli1Nh2UBCB8q8yr7qgNUFwDA7hBYAGiVdllauXKlm5qRkbHr3WYAhDaVfR1AqbM3VCcAQGsILADsknaq0YLoXr16sdUkEOa0bkN1geoETYsEgF0hsACwE+3ApEPwtH3rxIkTvU4OgACgukB1guoGrb0CgB0RWADYyYIFC9yhc9oGU7s2AYDqAtUJ5eXlbucoANgRgQWAFtavX2/r1q2zcePGWWrqN4dtAYDqBNUNqiNUVwBAcwQWAJpon3vdidS+9foCgB2pbtDZF6orVGcAgB+BBQBHJwBr7nRSUpKNHTvW6+QACGAatVBdoTpDdQcACIEFAEe7vegwLM2hjoqK8jo5AAKY6gjVFaozdAo4AAiBBQBbtWqV5eXluV1fdBcSAPZEdYXqjE2bNtnq1au9Tg6AAEBgAYS5kpISW7RokTurIjc31+vkAAgiqjNUdyxcuNCdzg0gvBFYAGGstrbWZs2aZT169HAn6wJAe6nuUB2i9RaqUwCELwILIEz5fD6bPXu2O+hqypQpFhlJdQCg/VR3qA5RXaI6RXULgPBETwIIU8uWLbPCwkLXIYiPj/c6OQCCmOqQyZMnuzpl+fLlXicHgEcILIAwpMZfgcXIkSMtMzPT6+QACAFZWVk2YsQIW7p0qatjAIQfAgsgzGzbts1NV8jOzrahQ4d6nRwAIWTYsGEuwFAdo7oGQHghsADCiOZAa7G29qCfNGmSRUREeJ0kACFEdYqmRKmOUV2jOgdA+CCwAMLI4sWLbevWrW5dRWxsrNfJARCCVLeojlFdozoHQPggsADChA6x0kF4o0ePdltDAkBXUR2jusZ/+CaA8EBgAYSBiooKmzt3rvXp08cGDRrkdXIAhAHVNb1797Y5c+ZYZWWl18kB0A0ILIAQ19DQ4A6u0naQ48eP9zo5AMLIhAkTXN0zc+ZMVxcBCG0EFkCImzdvnlVVVdk+++xj0dHRXicHQBhRnaO6R3WQ6iIAoY3AAghh69atsw0bNri7hikpKV4nB0AYUt2j0VLVRaqTAIQuAgsgRGlHlvnz59uAAQPc2goA8Erfvn1dXaQ6SXUTgNBEYAGEoLq6OreuQncKx44d63VyAMDVRaqTVDepjgIQeggsgBDj8/ncLixquDW3OTKSYg7Ae6qLVCepblIdBSD00OMAQszKlStt8+bN7mTtxMREr5MDAE1UJ6luUh2lugpAaCGwAEJIcXGxLVmyxIYNG2Y5OTleJwcAdqK6aejQoe5UbtVZAEIHgQUQImpqamzWrFmWkZFhI0aM8Do5ANCqkSNHurpKdZbqLgChgcACCJF1FWqgZcqUKRYREeF1kgCgVaqjVFfJ7NmzXR0GIPgRWAAhYOnSpVZSUuIa6ri4OK+TAwB7pLpKdZamQ6kOAxD8CCyAIJefn2/Lly93Uwt69uzpdXIAoM1UZ6nuUh2mugxAcCOwAIJYVVWVff3119arVy+3GBIAgs2QIUPcgm7VZarTAAQvAgsgSDU2NrqDpmJiYmzixIleJwcA9nq9hbagVV2mtWKq2wAEJwILIEgtWLDAysvL3YFTapABIFipDlNdVlZWZgsXLvQ6OQD2EoEFEIQ2bNhga9eutXHjxllaWprXyQGADlNdNnbsWFuzZo1t3LjR6+QA2AsEFkCQ0SjFvHnzrG/fvta/f3+vkwMAnWbAgAGubps7d66r6wAEFwILIIjU19e7dRWJiYk2fvx4r5MDAJ1OdZvqONV1qvMABA8CCyCIaKSiurrazUWOioryOjkA0OlUt6mOU12nOg9A8CCwAILE6tWr3bzjCRMmWHJystfJAYAuozpOdZ3qPK25ABAcCCyAILBlyxZbtGiRDR482Hr37u11cgCgy6muGzRokNslqrS01OvkAGgDAgsgwNXW1rq93bVjyqhRo7xODgB0m9GjR7u6T+stVBcCCGwEFkAA8/l87jTahoYGmzJlikVGUmQBhA/Vear7VAeqLlSdCCBw0UsBAtiKFSusoKDAJk+ebAkJCV4nBwC6neo+ncytulB1IoDARWABBKjCwkJbsmSJDR8+3LKysrxODgB4Jjs729WFS5cutaKiIq+TA6AVBBZAANI2i7Nnz3YBhRpTAAh3qgszMzNd3ag6EkDgIbAAAkxjY6NbrK25xZoCFRER4XWSAMBzqgv9daLqSNWVAAILgQUQYBYvXuy2l9UBUbGxsV4nBwAChupELeZWHampogACC4EFEEDy8vJs1apVbovFHj16eJ0cAAg4GRkZro5cuXKlbd682evkAGiGwAIIEJWVlTZnzhzLzc11B+EBAHZNdaTqSm1Bq7oTQGAgsAACgPZo1wFQcXFxNnHiRK+TAwABT3Wl6kzVnapDAXiPwAIIAAsWLHB33bSuIjo62uvkAEDAU12pOrOiosLVoQC8R2ABeGzdunXua9y4cZaamup1cgAgaKjOHD9+vKtD169f73VygLBHYAF4qKyszObPn2/9+/e3fv36eZ0cAAg6qjtVh86bN8/VqQC8Q2ABeKSurs7NDU5JSXGjFQCAvTN27FhLTk52darqVgDeILAAPKIdoGpra92e7DoMDwCwd6Kiotx6C9Wpc+fO9To5QNiiNwN4QGdVaP917WqSlJTkdXIAIOipLlWd6j8PCED3I7AAullJSYktWrTIhgwZYr169fI6OQAQMlSnqm5VHau6FkD3IrAAulFNTY3NmjXLnao9cuRIr5MDACFHdavqWNW1qnMBdB8CC6Cb+Hw+mz17tvuXdRUA0DVUt6qOVV2rk7n1L4DuQc8G6CbLli2z4uJimzx5ssXHx3udHAAIWapjVdcWFRW5uhdA9yCwALpBQUGBa9xGjBhhmZmZXicHAEKe6lrVuap7VQcD6HoEFkAX27Ztm5sClZOTY0OHDvU6OQAQNlTnZmdnuylRqosBdC0CC6ALNTY2ugOboqOjbdKkSRYREeF1kgAgbKjO1ZQonXOhxdyqkwF0HQILoAtpy8OysjJ3cFNMTIzXyQGAsKO6V3Xw1q1bXZ0MoOsQWABdZOPGjbZ69WobM2aMpaene50cAAhbqoNVF6tO3rRpk9fJAUIWgQXQBSoqKmzu3LnWp08fGzhwoNfJAYCwp7pYdbLqZtXRADofgQXQyRoaGty6isTERBs/frzXyQEA/I/qZG1FqzpadTWAzkVgAXQy3Q2rqqpyc3q1aBsAEBhUJ++7776ujp43b57XyQFCDoEF0InWrl3r1lZMmDDBkpOTvU4OAGAHqptVR2/YsMHV2QA6D4EF0ElKS0ttwYIFTfN4AQCByb/+TXW2dosC0DkILIBOUFdX5+bspqamup1HAACBTXW16mzV3arDAXQcgQXQQT6fz53qWl9f79ZVREZSrAAg0KmunjJligsqVIerLgfQMfSAgA5auXKl5efnu9NdExISvE4OAKCNtHvfpEmTXB2uuhxAxxBYAB1QXFxsS5YssWHDhll2drbXyQEAtFNOTo6rw1WXq04HsPcILIC9VF1dbbNmzbKePXvaiBEjvE4OAGAvqQ5XXa46XXU7gL1DYAHsBc3FVQMUERHhpkDpXwBAcGpel8+ePZv1FsBeIrAA9oKGzLds2eIW/sXFxXmdHABAB6kuV51eUlLi6ngA7UdgAbTT5s2bbcWKFTZq1CjLyMjwOjkAgE6iOl11u+p4LegG0D4EFkA7VFVV2Zw5c6xXr142ZMgQr5MDAOhkqttVx2sLWtX5ANqOwAJoo8bGRneQUmxsrE2cONHr5AAAuojqeNX1qvNV9wNoGwILoI0WLFhg5eXl7hC8mJgYr5MDAOgiquNV16vOV90PoG0ILIA22LBhg61du9bGjRtnqampXicHANDFVNerzlfdrzYAwJ4RWAB7UFZWZvPmzbN+/fpZ//79vU4OAKCbqM5X3a82QKMXAHaPwALYjfr6ejfHNikpyd25AgCEF9X9agPUFqhNANA6AgtgN+bOnWs1NTVurm1UVJTXyQEAdDPV/WoDdCK32gQArSOwAFqxevVq27Rpk9sdRHerAADhSW2A2gK1CWobAOwagQWwCzpVe+HChTZ48GDLzc31OjkAAI+pLVCbsGjRItdGANgZgQWwg9raWjeXtkePHu4EVgAARG1Cenq6zZo1y7UVAFoisACa8fl8Nnv2bHcg0pQpUywykiICANhObYLahoaGBtdWqM0A8A16TUAzy5cvt8LCQps8ebLFx8d7nRwAQIBR26A2Qm2F2gwA3yCwAP5HjcTSpUttxIgRlpWV5XVyAAABSm2E2gq1GWo7AGxHYAGY2bZt29ywthqLYcOGeZ0cAECAU1uhNkNth7aiBUBgAbj1FFqIp73KNbwdERHhdZIAAAFObYXaDLUdakPUlgDhjsACYW/x4sW2detWtyAvNjbW6+QAAIKE2gy1HaWlpa4tAcIdgQXCWl5enq1atcpGjx7ttpcFAKA91HaoDVFbojYFCGcEFghblZWVNmfOHOvdu7cNGjTI6+QAAIKU2hC1JWpT1LYA4YrAAmFJe5DrEDxtGzhhwgSvkwMACHJqS9SmqG1RGwOEIwILhKV58+a5u0r77LOPRUdHe50cAECQU1uiNkVty/z5871ODuAJAguEnXXr1tmGDRts/PjxlpKS4nVyAAAhQm2K2pb169e7tgYINwQWCCva/Ul3kgYMGGB9+/b1OjkAgBCjtkVtjNqasrIyr5MDdCsCC4SNuro6N/dVd5TGjh3rdXIAACFKbYzaGrU5anuAcEFggbCh3TpUwWsObGQkWR8A0DXUxqitqa2tdW0PEC7oXSEsrFy50jZv3myTJk2yxMREr5MDAAhxamsmTpzo2h61QUA4ILBAyCsuLnYnog4dOtRycnK8Tg4AIEz06tXLtT1qg0pKSrxODtDlCCwQ0mpqamzWrFmWkZFhI0eO9Do5AIAwo7ZHbZDaIrVJQCgjsEDI8vl8Nnv2bPf/KVOmWEREhNdJAgCEGbU9kydPbmqT9C8QqggsELKWLl3qpkEpqIiLi/M6OQCAMKUTudUWqU1S2wSEKgILhKT8/Hxbvny5G4Lu2bOn18kBAIQ5tUVqk9Q2FRQUeJ0coEsQWCDkVFVV2ddff+0WzQ0ZMsTr5AAA4KhN0iYimhK1bds2r5MDdDoCC4SUxsZGt0AuJibGbfPHugoAQKBQm6Rtz9VG6fA8tVlAKCGwQEhZuHChlZWVuYOJVHEDABBI1DapjVJbpTYLCCUEFggZGzdutDVr1tjYsWMtLS3N6+QAALBLaqPUVqnNUtsFhAoCC4SE8vJymzt3rvXt29cGDBjgdXIAANgttVVqs9R2VVRUeJ0coFMQWCDo1dfXu7mqiYmJNn78eK+TAwBAm6jNUts1c+ZM15YBwY7AAkFv3rx5Vl1d7easRkVFeZ0cAADaRG2W2i61YWrLgGBHYIGg5p+fOmHCBEtOTvY6OQAAtIvaLrVh/nWCQDAjsEDQKi0tdTtqDBo0yHr37u11cgAA2Ctqw9SWqU1T2wYEKwILBKXa2lq3rkI7a4wePdrr5AAA0CFqy9SmqW2rq6vzOjnAXiGwQNDx+XzuZO2GhgabMmWKRUaSjQEAwU1tmdo0LeJWG6e2Dgg29MgQdFasWGEFBQXu9NKEhASvkwMAQKdQmzZ58mTLz893bR0QbAgsEFSKiops6dKlNnz4cMvOzvY6OQAAdCq1bWrj1NapzQOCCYEFgoa245s9e7ZlZma6ShcAgFCkNk5tndo8tX1AsCCwQFBobGy0WbNmWUREhBsm1r8AAISi5m2d2j61gUAwILBAUFiyZIlt2bLFLWyLjY31OjkAAHQptXVq89T2qQ0EggGBBQLe5s2bbeXKlW4rvoyMDK+TAwBAt1Cbp7ZPbaDaQiDQEVggoFVWVrpt93Jzc23w4MFeJwcAgG6ltk9t4Jw5c1ybCAQyAgsELJ1ToYOC4uLibOLEiV4nBwAAT0yYMMFNjVKbqLYRCFQEFghYCxYssIqKCttnn30sOjra6+QAAOCJmJgY1xaqTVTbCAQqAgsEpPXr19u6dets/Pjxlpqa6nVyAADwlNpCtYlqG9VGAoGIwAIBp6yszObNm2f9+/e3fv36eZ0cAAACgtpEtY3z5893bSUQaAgsEFDq6urcHNLk5GQbO3as18kBACCgqG1MSkpybWV9fb3XyQFaILBAQJk7d67V1ta6uaRRUVFeJwcAgICitlFtZE1NjdspCggkBBYIGKtWrbK8vDy3A5TuxgAAgJ2pjZw0aZJrM9V2AoGCwAIBoaSkxBYtWmRDhgyxXr16eZ0cAAACmtpKtZlqO3U6NxAICCzgOQ3nzpo1y3r06GEjR470OjkAAAQFtZlqO7XeQtOIAa8RWMBTPp/Pnaytf6dMmWKRkWRJAADaQm2m2s7GxkabPXu2a0sBL9GLg6eWLVtmRUVFNnnyZIuPj/c6OQAABBW1nQou1JaqTQW8RGABzxQUFLhKcMSIEZaZmel1cgAACEpqQ9WWqk0tLCz0OjkIYwQW8MS2bdvcFKjs7GwbOnSo18kBACCoqS1Vm6opUWpjAS8QWKDbaS6oFmtrL25NgYqIiPA6SQAABDW1pdqCVm2r2li1tUB3I7BAt9PWeFu3bnUH/MTExHidHAAAQkJsbKxrW9XGLl682OvkIAwRWKBbbdq0yVavXm1jxoyx9PR0r5MDAEBIUduqNlYH56nNBboTgQW6TUVFhc2dO9f69OljAwcO9Do5AACEJLWxamvV5qrtBboLgQW6RUNDgzvAR9vijR8/3uvkAAAQ0tTWqs1V26s2GOgOBBboFvPmzbOqqio39zM6Otrr5AAAENLU1qrNVdurNhjoDgQW6HJr1661DRs22IQJEywlJcXr5AAAEBbU5qrtVRu8bt06r5ODMEBggS6lnSkWLFjQNN8TAAB0H/+6xvnz57s2GehKBBboMnV1dW5uZ2pqqtuhAgAAdD+1wWqL1SarbQa6CoEFuoTP53Mna6sCmzJlikVGktUAAPCC2mC1xWqT58yZ43VyEMLo7aFLrFy50vLz890poImJiV4nBwCAsKa2WG3y5s2bbcWKFV4nByGKwAKdrri42JYsWWLDhg2znJwcr5MDAADMXJustllttNpqoLMRWKBTVVdX26xZs6xnz542YsQIr5MDAACaUdusNlptdU1NjdfJQYghsECnrquYPXu2RURE2OTJk92/AAAgcDRvoxVcqO0GOguBBTqNhlZLSkrcArG4uDivkwMAAHZBbbSCC7XZS5cu9To5CCEEFugU/sVgo0aNsoyMDK+TAwAAdkPTodRmL1++3G22AnQGAgt0WFVVldu+rlevXjZkyBCvkwMAANpAbbbabm0Pr7Yc6CgCC3RIY2OjO3AnJibGJk6c6HVyAABAO6jtVhuutlxtOtARBBbokAULFlh5ebnts88+rmICAADBQ2232nC15WrTgY4gsMBe27Bhg61du9bGjRtnaWlpXicHAADsBbXhasvVpqttB/YWgQX2iu5szJs3z/r162f9+/f3OjkAAKAD1JarTVfbrjYe2BsEFmi3+vp6NxczKSnJ3eEAAADBT2262na18WrrgfYisEC7zZ07152wrTmZUVFRXicHAAB0ArXpatvVxmvkAmgvAgu0y+rVq23Tpk1uFwnd1QAAAKFDbfuECRNs48aNtmbNGq+TgyAT7XUCEDy2bNliixYtssGDB1tubq7XyQEAAF2gd+/ers1fuHChW9jdo0cPr5OEIMGIBdqktrbWZs2a5SoYndQJAABCl9p6tflq+9UHANqCwAJ75PP5bPbs2dbQ0GBTpkyxyEiyDQAAoUxtvdp8tf06mVt9AWBP6CFij5YvX26FhYU2efJkS0hI8Do5AACgG6jNV9tfUFBgK1as8Do5CAIEFtgtBRRLly61ESNGWFZWltfJAQAA3Uhtv/oAS5YscX0CYHcILNAqbTenKVCqVIYNG+Z1cgAAgAfUB1BfQH0C9Q2A1hBYYJcaGxvdATmaY6lh0IiICK+TBAAAPKA+gPoC6hNoMbf6CMCuEFhglxYvXmylpaXuoJzY2FivkwMAADykvoD6BNqGVn0EYFcILLCTvLw8W7VqlY0ZM4a9qwEAgKM+wejRo10fQX0FYEcEFmihsrLS5syZ4w7HGTRokNfJAQAAAcR/SK76CuozAM0RWKCJ9qrWuoq4uDibMGGC18kBAAABaOLEia6voD6D+g6AH4EFmsyfP9/dfdAcyujoaK+TAwAAApD6COorqM+wYMECr5ODAEJgAWfdunW2fv16Gz9+vKWmpnqdHAAAEMDUV1CfQf0HfQFCYAErKytzoxUDBgywvn37ep0cAAAQBNRn6N+/v+tDqC8BEFiEubq6OjdHMiUlxcaOHet1cgAAQBAZN26c60OoL6E+BcIbgUWY064OtbW1bq6kDr4BAABoK/UdpkyZ4voS6lMgvNGTDGMrV660zZs3u90dEhMTvU4OAAAIQklJSa4voT6FzrhA+CKwCFMlJSXu5MyhQ4dar169vE4OAAAIYupLDBkyxBYtWuT6GAhPBBZhqKamxmbNmmUZGRk2cuRIr5MDAABCwKhRo9zp3OpjqK+B8ENgEWZ8Pp/Nnj3b/Tt58mSLiIjwOkkAACAEqE+h9RbN+xoILwQWYWbp0qVWXFzsCn58fLzXyQEAACFEfQvduFRfY9myZV4nB92MwCKM5Ofn2/Lly930p549e3qdHAAAEIIyMzNtxIgRLrAoKCjwOjnoRgQWYWLbtm329ddfW05OjltcBQAA0FW0OYz6HJoSpT4IwgOBRRhobGx0B9fExMTYpEmTWFcBAAC6lPoa6nNER0e7Poj6Igh9BBZhYOHChVZWVubWVSi4AAAA6Grqc+gAXvVBtA0tQh+BRYjbuHGjrVmzxsaOHWvp6eleJwcAAIQR9T3GjBljq1evdn0ShDYCixBWXl5uc+fOtT59+tiAAQO8Tg4AAAhDAwcOdH0R9UkqKiq8Tg66EIFFiKqvr3dzGhMTE23ChAleJwcAAISx8ePHuz6J+iYNDQ1eJwddhMAiRM2bN8/twqC5jVFRUV4nBwAAhDEt4lafpKqqyo1cIDQRWIQgranQPEaNVCQnJ3udHAAAANcnUd9EfZS1a9d6nRx0AQKLEFNaWup2gRo0aJCbzwgAABAo1DfRmosFCxa4PgtCC4FFCKmrq3NzF1NTU2306NFeJwcAAGAn2iVKfRX1WdR3QeggsAgRPp/PnaytRduawxgZyUcLAAACj/oo6quoz6K+i/owCA30PkPEihUrLD8/3yZPnmwJCQleJwcAAKBV6quoz6K+y8qVK71ODjoJgUUIKCoqsqVLl9rw4cMtOzvb6+QAAADskfosw4YNsyVLllhxcbHXyUEnILAIctXV1TZ79mzr2bOnCywAAACCxYgRI1wfZtasWa5Pg+BGYBHEGhsbXUGMiIhww4n6FwAAIFg078OoT8N6i+BGYNFG//jHP9ypkdrFQF8HHnigvf32256mSUOHW7ZssSlTplhcXJynaQH21iOPPOIalCuvvNLrpABB6frrr2/qnB188MHu/yNHjvQ6WUCbqQ+jvoz6NOrbeE3nbPz4xz92IylaCzJu3Di3gxX2LLoNj4GZ9e3b1/70pz+5uYCKph977DE77bTT3G4G2jatu23evNktdtJrZ2RkdPvrA51h8eLF9uKLL7qgHcDeU1vwt7/9zU0l2Xfffd0px0AwUV9m1KhRtmjRIuvRo4f16tXLk3QouFGAfuSRR7obyFlZWbZ8+XKXJuwZNU8bnXLKKS2+v+WWW9woxvTp07s9sKisrLQ5c+a4Qjd48OBufW2gs1RUVNgNN9xg11xzjT377LNeJwcIagokMjMzbdu2bZ51yICOGjJkiJWUlLg+zmGHHWaJiYndnobbb7/d+vXr50bT/XToMNqGqVB7oaGhwXWE1MHXlKjufm0Nx8XGxtrEiRO79bWBznTZZZe58rP//vt7nRQg6OmO6nHHHWdnnnmm/ehHP7J169Z5nSRgr6hvoz6O+jpaS9rdXnvtNXfGhsqSdq2aNGmSPfjgg92ejmBFYNEO8+fPt+TkZDcX8OKLL7aXX36520+4XrBggbvTq0wfExPTra8NdBYF5trNTOUIQMcoOH/00Uft3nvvtd/85je2evVqO/TQQ628vNzrpAHtpr6N+jjKv+rzdLdVq1a5GSma+v7OO+/YJZdcYj//+c/dFHjsWYSP5fdtVltb6+4Cbd261V544QV76KGH7OOPP+624GL9+vVueFDRvIbpgGCkfKxG47333nNBshbG/fKXv3T5+q677vI6eUDQ0po/TYVSmzRgwAC788477YILLvA6WcBeUX9r7ty5bsRA61y7i0ZL1EZ98cUXTT9TYDFz5kybNm1at6UjWLHGop2ZbejQoe7/2r1Amezuu++2Bx54oMtfu6yszI2Y9O/fn6ACQU3bCRYUFLgdbJpP8fvkk0/cHdeamhqLioryNI1AMEtPT3fnGq1YscLrpAB7Tf0drbeYN29e046c3SE3N3enG8ZaVK6NRrBnTIXqAM39Uyeoq9XX17u5hklJSTZ27Ngufz2gKx199NEuSNbom6ZvPPPMM+7ukOaF62cEFUDHaCRQuwaqgwQEM23zqr6P+kDqC3UH7Qi1dOnSFj9btmyZGwXEnjFi0UZXXXWVnXjiiS6C1ry/p59+2qZOnerm33U1dbYUwGiHBDpdCHYpKSlNAbJG4jQVSg2H9gsncAbaT+sqtHOhAooNGzbYdddd59qKH/zgB14nDegQ5WPdeNKItqZFabZIV9PU3IMOOshuvfVWO+uss+zLL7+0f/3rX+4Le0Zg0UaauvGTn/zE8vLyLC0tze27r6Di2GOP7fJFRHpNFSx1vgAAaE7BhIKIoqIiNw3qqKOOcluha/99INip76M1eBq10FkXXb31q86B0eY8uqF84403utfT+j+NqmPPWLwdwHRIy+eff+4ytReH8AFdTYvjNGKhxXkAOmfxtu62AqFm4cKFbsczTVXisLrAxRqLAN6BStG5Co8WDQEAAIQr9YXUJ1LfSH0kBCYCiwCkQSTt8a/F4ZpPGBnJxwQAAMKX+kLqE6lvpD4SE24CEz3WAKTdBwoLC10Bio+P9zo5AAAAnlOfSFuVq4+k0+YReAgsAowKiwKLkSNHWmZmptfJAQAACBjalGDEiBFuS1j1mRBYCCwCiBbdaXgvOzu76SA+AAAAfGPYsGEuwFCfSX0nBA4Ciy7ywQcfuIVGOlG4LTRnUCcSa89m7ZATERHRpr/7/e9/b1dccUUHUwuEVnnaW5QnhAPKE4Kd+kiaEqU+k/pO6kN5hfK0A203i9175JFHfOPGjfPFxcX5srKyfJdeeuke/2by5Mm+J598sun7F1980XfMMcf4MjMzfSkpKb4DDjjA99///rfp9wsWLPC98cYbvpKSkhbPM3fuXN8hhxziXrtv376+22+/vcXvCwsL3fOtXLmyU64V6M7ylJ6e7jvzzDM7vTy1hvKEUPLll1/6jjrqKF9aWporSyoHjz76aLeUp48++sh36qmn+nr16uVLTEz0TZgwocVzCuUJXU19JvWd1Ifq7PJ03HHH+ebMmbPHv6M8tcSIxR7ceeed9oc//MFFitpD+f3337fjjz9+t3/z2Wef2cqVK+073/lO0890aqQO03vrrbdcdH3kkUe6k1K17/imTZvcQXijR49usTezTiU+7rjj3DHy+pu//OUvdv3117c4/VHrMJSef/zjH130DgBdV57uvvvuPe65397y1BrKE0KJTtk+4YQTrH///jZjxgxXTnSQ2K9+9Surq6vr8vKkM2h0UOyLL75o8+bNs/POO88dIvvGG280PYbyhK6mPpP6Tv7DhDuzPKWkpLj8S3lqJ1+AOvzww32XXXaZ+0pNTfX17NnT98c//tHX2NjYIlI9++yzXWSZkJDgO+GEE3zLli1r+v2aNWt8J598svu9IsDRo0f73nzzzTa9vl5n7dq1vvj4eN+9997re//9913E+eYbr/veeutN37vvvuv78MMPXTS7ceNGX01NTdPfKs3f/e539/gaSs8f/vAH31tvveWbNWvWTr+///77fT169Gjx3L/73e98I0aMaPG4xx57zN19BQK5PK1fv96Vp/vuu8+Vp3feecf374ce8j326KPu/x988IFv9uzZvnXr1vmqqqr2qjzdcMMNrf6e8oRQKU/y6aefaq9N136o7KgM3XzTTe5nDz/8sCtjM2fOdK9TUVHR6eVpV0466STfeeed1+JnlCd0R3l6/fXXffvtt99el6fPP//clR3189S3Ux9PbVXz8jRjxgw3WlBWVtaUNsrTzqItgD322GN2wQUX2JdffukORLnoootcNHnhhRe635977rluu7HXXnvNUlNT7Xe/+52ddNJJtmjRIouJibHLLrvMHaKi6FF3cvTz5OTkpucfOHCgew7dtRQtANKOTBvWr7OizRvdqdf19fU2//P37U83Xmvbampt9KDedtGph1tGj1SrsBhb3Zho9ZGxZtGxlpqeYZm9+rj5duecc85ur03zAcvLy92Xtk9TpLqjadOm2WGHHWaxsbFNP1O0evvtt7tTuf2jG/vtt59t2LDB1qxZ464JCITypMfq+davW2uFeRvt008/ceVpzmfv2W03XOPK08gBveynpxxi9Vt62jaLtnWNiVYbsb08JaemW2ZuXzdK2NbylJGR0epjKE8I5vKk+du6M6p8WZS3wYoKNltSUqI9cNef7cfH7mNRjbX25TsfW7/sHpZVMt8qty61jb4Eq7bt5SkhKdWycvvYe++91ynlaVe2bt2604GulCd0R3nSXXyVkTvuuMMOPfRQt2PU7sqT8vjatWtdmVJ/r2DzJlee7r/zT/ajY/e1mMYae+/NT61/ToYrT1Vbl1ieL8HmWJxZVKzFJSa5/p7K09lnn73ba2sMs/IU0IFFv3797G9/+5tbpKOtxebPn+++V0bzZzB1/v1TKZ566in3N6+88oqdeeaZtm7dOjc8NW7cOPf7wYMHt3j+IUOGWM+ePS0/P98WLlxgq5YstIjqMusTWWpjYmtt0dblFuFrtKlTP7J/nbO/pSXG2rUvzLKbH3ze5tx6usVGR5nOZymtj7Ki2hgrKo2x/MKltnbNGlu7aoXbrUDbxiYmJu50bX/9619dptl///1tn332sejonT+KzZs326BBg1r8LCcnp+l3/o5Q79693b8qJIGa0RAe5UlDtSUlJW6a0/JF86yhstR6R261ETE1Nv9/5emTZuXp6me/tFsfetHm/emMpvJU1rC9PBWXR1v+lmW2bu1aW71yuRueViWrRmVX5UlD2WeddVar1095QjCWJ03hW7x4sS1ZMMdqykosJ2KrDY7eZvum1duU359o59zzrn3vvY+3/012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8zbYmN+9aKk/fdxO/PM7llfacsTwoalL3e/1HL+9/R/25KOPuJGX9s6B11kFKgO683n88ce7zRtEZebcc8/dq/Kp9mn06NHus9ff6E7tX/7yF/v+97/PRighXp6URh2md/VNf7a735jd5vKkPpn6Zkqf+mraXMeL8pR0wWN2xZ8espdf/I87YTsQy9NTTz1ll156qWvb1B/t9MBCkeHTTz/drl0htDOTGmMNTepAj+eee85lussvv9z9XvM1lenUOKsTrDfksMMOa/Vkwl256qqr3N2Ja665xv71r3/ZL358mg3NiLX2GPzL5+2Gl77JmPLhok3uJMV3fneCvfbrY9v8XBqC1geUlZVtSUlJO22hubGk0o645S2Li46096860WbeeJqde/gwq//f/sejkyutojjffaiiOzCKODMyvikk119/vRvq3dEf/vAHu+OOO9z7qrm2559/ftPvXn75ZXeSpQ5XUXDws5/9zM477zwXiTZ3ww032FlnneU+r5NOOsl+9KMfNR0prwpFDeOkSZPca+jz0rC4Ho+2aZ5fA71M6bO/9beX2VOXHmbZaQndUqa2VtW6mwLpSW0vw5qSeOyf/muj+qTb59eebJ9c8y07ZVI/a2j02YjEbdZQWWrLly//5jW2bm8MmpcpVcSqqJtT2fvrX//qAvBPPvnElcnf/OY3Tb+/++67XXnTY/RZqHI/9dRTW7yWv1zq79QIDx8+3N0B8i+C3dPnidApTxdccIFd/39X2OOXHNEp5Wnq4jx3mvAHV59oj1x0qD326Qp79NNv8t55//rUBemv/OoYVy50U/Tkv77XorNUVVNvd7y1wB772eE29Y8n2friSvu/p7+ZevvU5yvt+hdn203fnWIL/3SG/emsyfbqm2+5PN9WyvdHH32067AoqNb7e8opp7R6p7g95fP22293N8M0BUrTPhA+5emSSy6x63/3S3vw4iPbVZ7UJxv3xzftH59tdH01nXHhWXk6c7K9/tY79rc77wyp8tTmcyx0t0VfhxxySLvmeqlzcuWVV7rvFaX+/e9/d1N9dPdcDbU63zqiXfPBBgwY4Dqtfmlpae7OemvKy8td437vvfe6qPfpRx+yM8ak2pjk1v9ml9eWnWKZKS0XjybFxdiDPz3EYts5V1VRsL5ac//7iy0tIcaeuexIi4neHtcNz01rsddxpm21RQsX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hz6znEuftvQLn7Dv/uUN21y0xZ2c2Fa7es/Hjh1rL774ontPdVDNUUcdZbfccou9/vrru114pz2UdaieMqgOyenZs6c70bH5Satbtmxx26Lps1I+OPHEE91Jm37K1DoQR6dz64BFnXqsw/R0OEtzDz30kPu9TtXUqZv333+/BYrW8rEKra5X15STk2Nnn31208mXOl1U1+1fKKwtGTX8q5OZg6U8KahVcBsq5elbt79l6zcXtutMGMpT5wvb8hQda0W1MSFTno667W1bv7mI8uSxcCxPqampFpuQFFLl6chb37blG4stKysroMtTpwcWOk3Rf5KfTkycMmWKO9JdGfiiiy5yGffLL79s8TePPfaYxcbGutOa//nPf9r69evtjDPOcBetzKzM2zwziy5GJzp/8skn7qAuHSmuwuGnw638J1D7uQ9DFXfdN9Mcrn7uK7v1rH1s4e1n2Ph+bYtY/Zl0TWF5i5/f9PIcO3P/QW7byxMn9LWz/zHVSipq3O82llTayX99z/YZlGlf33K63XfuQfbwx8vtllfntHiOxz9b7k5ZnHb9Kfan7+9jN70yx96b/82Bfmfd85EVlG2zN39znM286VQb0CfH/nrX39v1Ye7qPd8VDYupcDYfxt7V+/rRRx+5E771r55XFXHz0yCVGb/66it32vC0adPc3YKTTjqpRWasqqpymfWJJ55wn6lOe/zNb37T9PunnnrKnfKpzL948WK79dZb3emfer1AseN7qvmhKrA64VXXrzsC+fn5dtZZZ7nH68RRna3y9ddfN5UdFfzmJ78GcnlSJR8VG+8q7lApT4P75Nhd9z1glZWV1h6Up84XbuUpLi7OUtJ6hFT7NLRPtt11/4NtPonXj/LU+cKtPCkIyszpbUV1sSFTnob3y7a//fPfFhkZGdDlqa3aPEFyxYoVdvjhh7v/K3JtXvg0p0tR//PPP++OGPfTce1//vOfm77XEeSKou644w73veaB+TOTnwr2d77zHRcVy+DBg1ukQ3+/410SRdEJSalWtO2bivv670y2Y8f1aevlbX+e2GgbkZtmMVEtP9xzDh1qPzhwiPv/LWdOsXveXWRfriq0E8b3tX98sNj69Uyye8450GX4kb3T3fy+3z830645fZJF/u+UMWX2a8+YtP196ZVm97+32D5ctMml8bOlm23mqkLbfN8PLS5m+3D5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IrPZRGEhWoI99dRTcsEU0eorMDAQI0eOlCszXrt2rdvjTp06hdGjR8tjwsPDsXLlyr/7WmJhsKysLLn4XkBAAJYtWyZblnV06NAhpKSkyFZn4mfasmWLRd4n0e3APBFZDvNEZDnMkwooVu7cuXNKUFCQEhcXp+zcuVMpLS2V23bv3q1MmTJF2bNnT5fH1dXVKYGBgcq8efOU4uJiZfv27Yqbm5uycePGbl+rtbVVSUpKUjIzM5WvvvpK2bdvn+Ln56fk5+eb9ikvL1fc3d2VJUuWyJ9l9erVioODg7J///4eef9ElsQ8EVkO80RkOcyTOlh9YTFx4kQlLCxMaWho6PLrRqOxy+3r1q1TfHx8lObmZtO2vLw8JTY2ttvXEgPL3t5euXz5smnb+vXrFY1GY/o+y5cvVxITEzsdl5ubK39OIrVjnogsh3kishzmSR2s+lao6upqfPjhh1i0aJFcsbQrYtVf4aGHHkJ6erppe2FhIdLS0uQKp+0mTpwoV22sra3t8nuJY8QS7+LSW8djdDodSkpKTPtkZmZ2Ok7sI7YTqRnzRGQ5zBOR5TBP6mHVhcXZs2flcuyxsbGdtosl2T09PeVHXl6e3BYcHIyIiIhO9+l1HDBC++fia135Ocd0t48YjE1NTWa8W6KexTwRWQ7zRGQ5zJN6OMIGHTt2DEajEfPmzUNzc7PctmLFit7+sYj6JOaJyHKYJyLLYZ5uP6suLMQT+OLSl7ic1VFMTIz8r5ubW7fHBgUFobKystO29s/F17o7Rgzinzqmu++r0Wh+8uch6m3ME5HlME9ElsM8qYdV3wrl6+uL8ePHY82aNWhsbLylY1NTU3H48GHo9XrTtgMHDsjLbD4+Pt0eU1RUhKqqqk7HiEGUkJBg2qegoKDTcWIfsZ1IzZgnIsthnogsh3lSEcXKnT17VrYRE+3HduzYIVt+nT59Wtm2bZvcLtqACc8++6wyf/5803FarVZ+XWwT7cfEsaJtWMf2Y7t27erUNaC9/diECROUEydOyJZi/v7+XbYfW7ZsmVJWVqasXbvWJtqPkXVgnogsh3kishzmSR2svrAQKioqlCeeeEKJjo5WnJycFE9PT2Xo0KHKqlWrlMbGRrnPggULlDFjxnQ67uTJk8qoUaMUFxcXJTQ0VHn55Zc7fX3z5s3KzbXZ+fPnlcmTJ8seyKKn8TPPPKPo9fpO+3z88cdKcnKy4uzsrMTExMjvQ9RXME9ElsM8EVkO89T77MT/9PZVEyIiIiIi6tus+hkLIiIiIiK6PVhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERGR2VhYEBERERERzPX/4EKa2RvWj2cAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "visualize_plan_tree(\n", " info,\n", " time_idx=None,\n", " observation_description=generalized_tmaze_observation_description,\n", " action_description=generalized_tmaze_action_description,\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/experimental/sophisticated_inference/si_graph_world.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sophisticated inference on Graph Worlds\n", "\n", "This notebook demonstrates tree searching policies with sophisticated active inference." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create a `GraphEnv`, where an agent can move between locations on a graph, and see objects at the location it is at." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from jax import numpy as jnp, random as jr\n", "from jax import vmap\n", "import jax.tree_util as jtu\n", "from pymdp.utils import list_array_zeros, list_array_norm_dist" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import networkx as nx\n", "from pymdp.envs import GraphEnv\n", "from pymdp.envs.graph_worlds import generate_connected_clusters\n", "\n", "graph, _ = generate_connected_clusters(cluster_size=3, connections=2)\n", "env = GraphEnv(graph, object_location=4, agent_location=0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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pYZKXb7UUKl1K4HS9PdDi+N/8MEHpuOS7p0EAJxCoETI08452kFHl7+vu+46EyrHjBlj9bAQILRQubZS1PJACxYskFGjRlk9JAAIOI4i3RQEQFwulwmUGhr0pr3AEdq0leJll10mu3fvliVLltBKEQA8IFACpeTn58v48eNNfUENENpKD6GpdCtFLVjerVs3q4cEAAHLafUAgEASEREh8+fPl8GDB5tlzo8//tjqIcGiVooXX3yxOYijrRQJkwDgHYESOI3uoXz//fdNoNBlb907h9Ch/74vueQSady4MX25AaCCCJSAG9pBZ9GiRdKjRw8ZMWKEbN682eohoQYsX77czE537drVzE7TlxsAKoZACXgQFRUlH374oSQmJpq9dF9//bXVQ0I1t1LUE9xDhgwxeyYbNGhg9ZAAIGgQKAEv6tata2at2rdvb2audG8d7EdrkeoJ/0mTJpntDvTlBoDKIVAC5ahfv76sWLFCWrRoYULljh07rB4S/NxKUftya1/3uXPn0pcbAKqAskFABR05ckQGDBggx44dkw0bNki7du2sHhJ8oCe477rrLnn55Zflz3/+swmUAICqIVAClXDo0CHp37+/6aqjobJVq1ZWDwlVbKWoS9wLFy6UV155RW688UarhwQAQY1ACVTSTz/9ZMrKaB9wDZXNmze3ekioYivFd955h1aKAOAHBEqgil1UNFTq4Y3169dTXibIWinu2rXLdELSf4cAAN8RKIEq0v7OGkhiY2NNzcJGjRpZPSR4kZSUZMo/HT9+3ByyovsNAPgPp7yBKtJSQmvXrjWHdbR24dGjR60eEjzYvn279OnTR1wuF60UAaAaECgBH3Tu3FnWrFkj+/fvl2HDhklGRobVQ8JpPvvsM+nXr59ppfjpp59yOh8AqgGBEvBRly5dZOXKlWZfnu7Py8rKsnpIOK2Vov470m0JTZs2tXpIAGBLBErAD84//3zTru/bb7+VK664QnJycqweUsgrbqWogVL3TNJKEQCqD4ES8JNevXrJsmXL5IsvvpAxY8aYWpWwxgsvvGDqTOqNVooAUP0IlIAf9e3b15Sj0fqU48aNk7y8PKuHFFK0aMVjjz0m9957r0yfPl3mzZtHK0UAqAGUDQKqgS6x6nLryJEjTfFsQk31o5UiAFiHQAlUE52pHDt2rJmpfOONNyQsLMzqIdkWrRQBwFpMmwDVRA/nzJ8/X66++mqJjIyUuXPnitPJLpPqaqWo9SUXLFhAK0UAsACBEqhGV155pbz++utm9qxWrVryj3/8w/QAh39oUfkRI0aYkk1auolWigBgDQIlUM2uvfZasyR70003Se3ateX5558nVPq5laL2U+/evbvVQwKAkEWgBGqA7unTE9+33367Wf6ePXs2odLHVoramUj/LHWpm+43AGAtAiVQQ6ZMmWJqU953332mLuITTzxh9ZCCtpXi5ZdfLi1btjTF5Ol+AwDWI1ACNUjrI+ry90MPPWRm12bOnGn1kIKKBkjdl9qjRw9ZvHgx3W8AIEAQKIEa9uCDD5qZykceecSEygceeMDqIQWFf//733LDDTeYQzha25PuNwAQOAiUgAW0m4uGSu3mogd1tCA3PHvxxRflnnvukcmTJ5s6kxSKB4DAwt/KgAX0QM5TTz1lQuXUqVPNTOUtt9xi9bACjvZdmDVrlvz+97834Vs74HCYCQACD4ESsIgGo+eee87sqbzttttMqJw0aZLVwwoYtFIEgOBBoAQsDpW6nKuhUpdzNVSOHz9eQl1xK0XtfDNv3jxaKQJAgCNQAhbTdow6C6chSouga0cdbSUYyq0Ux4wZI59++qkJlKNHj7Z6SACAcjiKdJMSAMu5XC4TKD/44ANzu+yyyyQUWynqz71z505TFqh///5WDwkAUAEESiCA5Ofny7hx40y9xQ8//FAGDx5s9ZBqtJWidr85duyY+flppQgAwYNACQQYXfrWJd+PP/7YBKtLLrlEQqWVoi73r1q1ilaKABBknFYPAEBZejDn/ffflz59+pgWg9pq0M4+//xz6devn8TFxdGXGwCCFIESCEDaBWbRokVy3nnnyfDhw2XLli1iRzoDe+mll0piYqKsX7+evtwAEKQIlECAio6OlqVLl8o555wjQ4cOlW+++Ubs5O2335YrrrjCBMqVK1fSlxsAghiBEghgdevWleXLl0vbtm3NAZ3vv/9e7EBrb06cONHctDQQfbkBILgRKIEApzN3K1askGbNmpnZPC2pE6z0DODvfvc705f7/vvvN0XL6csNAMGPU95AkEhJSZEBAwZIRkaGbNiwwcxaBlsrRe1b/o9//ENmz54tDz74oNVDAgD4CYESCCIHDx40ZYS0CLoeYklISJBgKYWkfcr19Porr7wiN910k9VD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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(graph, with_labels=True, font_weight=\"bold\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create an agent, we give the agent a prior on the object location to showcase the planning depth and pruning. We let the agent start at location 0, and give it a prior about where the object is (location 4)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from pymdp.agent import Agent\n", "\n", "A, B = env.A, env.B\n", "A_dependencies, B_dependencies = env.A_dependencies, env.B_dependencies\n", "\n", "C = list_array_zeros([a.shape[0] for a in A])\n", "C[1] = C[1].at[1].set(10.0)\n", "\n", "D = [jnp.ones(d.shape[0]) for d in env.D]\n", "D[0] = D[0].at[0].set(100.0)\n", "D[1] = D[1].at[4].set(100.0)\n", "D = list_array_norm_dist(D)\n", "\n", "agent = Agent(A, B, C, D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, policy_len=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can call the `si_policy_search` method and visualize the planning tree." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from pymdp.planning.si import si_policy_search\n", "from pymdp.envs import rollout\n", "\n", "key = jr.PRNGKey(0)\n", "last, info = rollout(agent, env, 5, key, policy_search=si_policy_search(horizon=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the agent prior, it should commit to going to location 4, expecting to see the object there." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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tr8jzJcNFcF0pzS/P47WanqizBcp1atX16kQGBio5557TjfccIMiIyN1umG6WQDwYOZbuq+++krz589XUFCQHWx9Km7wzTXMtcw1582bZ8tgygJ4ItNSYUJFr8AtGlZlw0l/mOuY6x1PC8nNN99sb7B//fVXnXXWWapdu7YGDBig33//3bZmPvTQQwdN6vDPf/7TdpWMj4/Xm2++6dpnvnkfNWqUPYdp9TStkrfddptrv2m5vPvuu+37zPvNFwumO1KJ0aNH2y5JP/74o+0yac7xwQcf2Jvyffv2lSnH7bffbls+DfNlhSmTOW9wcLDtcmlCUukWg+nTp+u1115zdd3cvHmzvbZ5Xvrc5ksPMybMXNt0MXrppZfKXNdse/rpp3XNNdfY1lhT1/fee++on3Pfvn1tiDGtFkdytOvv3r1bQ4YMsb9DTQj87LPPDjqHqc91111nu7KaVmPzOS1ZssS13zw3XcBM+c3+Dh062L8FJxPBAgA8lPmGcuzYsbZfsbnJN90ATuWganMtc01zbVMGUxZTJsBTRfgVKNr/5D/MdY7H3r17NWnSJN100032RrU0cxN8+eWX2/BfuqvOCy+8oDZt2mjRokW2W4+5wf/tt99cN8WvvPKK3n33Xa1bt8529TE3+SVuueUWzZ49W19++aWWLl2qf/zjHzr33HPtsSWysrLsN/smUJiWE1MGEzbMuUu3ZJhymX2GCVLm5njixIl24onrr79eV155pf766y+73wQK0yozcuRI+0WGeZgZ6w60YMECXXzxxbr00kttl00Tkh555BEbeEozN/sdO3a0n4H57G688UY7juxIfHx8bCB5/fXX7QQZh3Is1zchyXRdM91Kv/32W7311ls2bJRmPlezzbQ4mXO2b99effr0sf/ehvnczGQa5ssds9/8O57sL5boCgUAHsj88TM3Aebm3tzYV+QsTSWtF2Y6259++knnnHOO7Y4B4NQwN/QmNDRr1uyQ+812E/7N/6Omq6TRvXt31zgB8//rzJkzbZjo16+ftm7dagOJ+Xbe/P9tvs3v3LmzPdbs+/jjj+3PkvFVpvXCjOsw281Nt2G6S5qbZRNeSpgb7c8//1zXXnutfT158mT7rfyFF15oX5uWCnOuErfeeqsNTF9//bW9vvkiw7TKmNaMI3V9evnll+0NuLmZL6mfmdTChClzQ19i4MCB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MU2UnpFny368XaK+//57dezYUREREXa2KrNGxn//+99yLR8A4PiwjgUAuLnNmzfv7wIV2VS+vuV78+/l5a2I8HDX8/Jkylo1sqFWr16jRo0aqV69esf83qioKD300ENq2rSp/P39NWHCBI0YMUKxsbHq379/uZYTAHBsWMcCACqIGbfwr3/9S+PGjVNYWJjuvfde/fDDD/bb91dffdUek5KSottvv13jx4+3C96dddZZ+s9//mNvxEuMHTtOiTvSVbNGO428ob9279nh2hcbU0PvvzvJPv/5l6807ofRSkreqdjYmrr4ouvVu9eQw5bvtdcfUmZmupo1ba8ffhyjgoJ8nXnmubrumvtsC4aRkZGq9z98TvPmT1N+fr5atuigkdc+oBo16pTp+vT5l28qLW2f2rXtpubN2uvrb97V55/Osvu3JyzStoSVmjRpklauXKkaNWro6quvtsHB1/fYv/9q3769Bg0apCeffPK4/h0AAOWDrlAAUEHuuusuzZw5Uz/++KN+++032yVo4cKFZY4ZPny45s+fb4+ZPXu27TI0cOBAexNvJCUlafv2HQoPi7evX3z+C/vztlue1OgPp7pez54zWR989KzOG3q1/vPqWJ17zkX6zxuPaOmyv45YxmXL52nnrm369xMf6vbbntKUqT9qytQfXPtfe/1hrd+wQg898Lqef+ZTma+qnnjqJhtCjDVrl+qNtx7ToAH/1Ksvf6NWrTrr62/fLXONxJ3JNkhde+21Nli8++67Gj16tJ566qlj+hzNZzJ58mStWbNGPXv2PKb3AADKH8ECACqotWLMmDF68cUX1adPH7Vs2VIff/yxCgsLXcesW7fOBooPPvhAPXr0UJs2bfTZZ58pISHBtnIY5ka8uMhXoSEx9nV4eJT9GRJSRZGR0a7XpqXi7N7naeCASxVfo64NGF3P6GO3H0loSJiuv+5B1axZX506nqWOHXpoydK5dt+OHVv017xpuuWmx9WieQfVq9dEd935rJKTd2vuX1PsMRMmfqp2bbvrgvOvsdcdMuhy+7q0H3/8Un37nKvWrVurfv366tevn211MAHjSFJTUxUaGmq7QpmWitdff92+FwBQMRhjAQAVwEyzalodOnfu7NoWHh6uJk2auF6vWrXKdgXq0qWLa1vVqlXtMWaf6Rq1atUahYbEyctM23QE2xM2qv85F5XZ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d/pvaqhEdY1IVYD3if26z8zcv6BdSMihW0COxgzUNmMqTPcn01JBqAAAz0SwAAAPtm7dOs2Y+pv8M3bqzLA9qhWYd0qDhZlSdkZ6jPKqxOnMXn3p/gQAHoxgAQAeLiMjQ39Mm6rt61eqsc8udQlPO67WixMJFqaVYk5qmNYVVlPNRi3s7E8M1AYAz0awAIDTgPlVv2bNGs3+Y4p8M3arWeBeNQnOVojv/tW4yytYZBZ4a01WkFblRKmgSjV17dHbrlPBlLIA4PkIFgBwmrVeLFq0SOtWLlVh5j7V8UlR85BMxQXklRngfTzBwvwVScz118rMEG0pjJRPSIQaNW+tdu3a0UoBAKcRggUAnIby8vLs+IuVyxYrZVeCQooyFeOdqWi/PEX75yvaL1+BPsWHDBY5hV5KyvdTUp6fkvL9tacoRJneIYqsFq/mrdracRT+/v4VWj8AwKlHsAAAD7Rz504988wzmjhxorZv367w8HA1bNhQV1xxha6++moFB+9fVdv8CUhMTNTWrVu1Z9dO/TRxvCb89LN27U5SWGiw+p/ZSYN6tLfHevsFKr/YW9nFfpKvv/wCg5W4e68eeuSRQ5bhr7/+UqdOnTRt2jS98sor9rWZBtcEj3vuuUeXX375Kf1MAAAnF+tYAICH2bhxo7p3766IiAg9/fTTatWqlQICArRs2TK99957io+P19ChQ+2xZuxDjRo17OPnn3/WBx9/oueff95OCWuO//e//y3/qjXVv39/1atXT76+vjakxMTEKCwsTPn5+brmuuvKXP+RRx7R5MmT1bFjR/t61qxZat26te677z5Vq1ZNEyZM0FVXXWXPM3jw4Ar5jAAA5Y8WCwDwMOeee65WrFih1atXH3JchPm1f6jB1JdddpkNCt98841r2+uvv27DxY8//qguXboc9drm/Sa43HrrrTZgHM6gQYNsyPjoo4+Oq24AgMrLu6ILAAAoP8nJyfr111918803H3awdUmoGD58uHr16uXanpubq8DAwDLHBgUFaffu3ba71LEwAcSUYcSIEUc8LjU11a4QDgDwHAQLAPAg69evty0SZorX0qKjo+0MTeZhuiQZcXFxql27tusY093p+++/t92YioqKtHbtWr300kt2nwkLx+LDDz+056lZs+Zhj/n66681b968o4YPAIB7YYwFAJwGzMBpExbMgGnTMmGY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pymdp.planning.visualize import visualize_plan_tree\n", "\n", "def graph_world_observation_description(observation, model=None, graph=graph):\n", " obs = observation[0]\n", " loc_idx = int(obs[0])\n", " obj_val = int(obs[1])\n", "\n", " obj_str = \"object\" if obj_val == 1 else \"no object\"\n", " return f\"loc: {loc_idx}\\nobj: {obj_str}\"\n", "\n", "\n", "def graph_world_action_description(action, model=None, graph=graph):\n", " action_idx = int(action[0])\n", " if action_idx in graph.nodes:\n", " return f\"go to node {action_idx}\"\n", " return str(action_idx)\n", "\n", "\n", "visualize_plan_tree(\n", " info,\n", " observation_description=graph_world_observation_description,\n", " action_description=graph_world_action_description,\n", ")\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/experimental/sophisticated_inference/si_tmaze_SIvalidation.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Validating Sophisticated Inference (SI) Planning Algorithm using the T-Maze Task\n", "\n", "### Overview\n", "\n", "This notebook provides a comparative test of two planning algorithms within the active inference framework:\n", "1. Vanilla Active Inference Planning: Standard and default planning approach in `pymdp.control.infer_policies()` that computes the expected free energy of policies in parallel, and the log probability of each policy is proportional to its expected free energy. The expected free energy of each policy is computed by propagating beliefs about hidden states forward in time under each policy (a typical 'posterior predictive rollout'), without updating those beliefs with counterfactual observations, expected under those future states. This means the belief over hidden states at timestep `t` in a given rollout, only depends on:\n", "- the previous belief over hidden states at time `t` and\n", "- the action entailed by the policy in question at time `t`.\n", "\n", "2. Sophisticated Inference (SI) Planning: A more complex but thorough planning approach that evaluates policies using recursive expected free energy calculations, where the agent considers how its beliefs would change under counterfactual observations encountered in the future. This algorithm has higher complexity since it branches on both observations and actions in the future, but it more accurately captures how uncertainty over hidden states changes in the future, as a function of (possibly-encountered) observations.\n", "\n", "This notebook uses a simplified version of the T-Maze environment `TMazeSimplified` as described in the [sophisticated inference paper](https://discovery.ucl.ac.uk.id/eprint/10124606/) to validate the SI implementation. \n", "\n", "### The T-Maze Task\n", "\n", "The T-maze is a classic sequential decision-making problem where the agent (analogized to a rat) faces a fundamental exploration vs. exploitation dilemma. The agent begins at the center of a T-shaped maze, where there is also a left arm, right arm, and cue location (bottom arm). One arm contains reward (cheese), the other punishment (shock), but the agent does not know which arm contains what. A cue at the bottom provides information about reward location with a given accuracy. This version of the T-Maze differs from that described in the [T-Maze Demo](https://github.com/infer-actively/pymdp/blob/main/examples/envs/tmaze_demo.ipynb) because there is no \"middle\" location between the left and right arms, and because every location is reachable from every other location. Additionally, location and cue observations are embedded into a single modality, rather than separated out into two separate modalities.\n", "\n", "The agent must choose between immediate but risky exploitation by directly committing to one of the reward arms (50% chance of success) or gather information (explore) first by visiting the cue location at the expense of time, then make an informed choice. When cue validity > 50%, the optimal strategy is to first gather information at the cue location, then select the indicated rewarding arm. This notebook tests whether both planning algorithms can discover this optimal policy and how.\n", "\n", "### Notebook Structure\n", "1. Environment Setup: Set up the generative process for the T-Maze environment\n", "2. Agent Setup: Set up the generative model for the agent\n", "3. Active Inference Rollout: Run active inference rollouts with vanilla and sophisticated inference planning algorithms, with optional visualizations of the agents' behavior\n", "4. Results Analysis: Compare actions selected and policy evaluations " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:52.929478Z", "iopub.status.busy": "2026-03-06T15:31:52.929410Z", "iopub.status.idle": "2026-03-06T15:31:56.831792Z", "shell.execute_reply": "2026-03-06T15:31:56.831372Z" } }, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import jax.numpy as jnp\n", "import jax.random as jr\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import mediapy\n", "\n", "from pymdp.envs import SimplifiedTMaze, rollout\n", "from pymdp.agent import Agent\n", "from pymdp.planning.si import si_policy_search" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting up the T-Maze environment (Generative Process)\n", "\n", "- The `reward_condition` parameter determines the reward location: `0` for the left arm, `1` for the right arm, or `None` for random allocation.\n", "- The `cue_validity` parameter (default 0.95) represents the accuracy of the cues as a probability.\n", "- The `reward_probability` parameter sets the probability `a` of receiving a reward in the correct arm. \n", "- With `dependent_outcomes=True`, the remaining probability (`1-a`) becomes punishment in the correct arm (and reward in the incorrect arm). With `dependent_outcomes=False`, the remaining probability in the correct arm is no-outcome, and punishment in the incorrect arm is set by `punishment_probability` (with no-outcome as the remainder).\n", "\n", "
\n", " Click here to see how the generative process is set up. \n", "\n", "#### States and Observations\n", "\n", "**State Factors:**\n", "1. Location (4 states): \n", " - 0: center (start location)\n", " - 1: left arm\n", " - 2: right arm\n", " - 3: cue location (bottom arm)\n", "2. Reward Location (2 states):\n", " - 0: reward in left arm \n", " - 1: reward in right arm\n", "\n", "**Control State Factors:**\n", "1. Location (4 actions): \n", " - 0: move to center (start location)\n", " - 1: move to left arm\n", " - 2: move to right arm\n", " - 3: move to cue location (bottom arm)\n", "\n", "**Observation Modalities:**\n", "1. Location (5 observations):\n", " - 0: center (start location)\n", " - 1: left arm\n", " - 2: right arm\n", " - 3: cued left arm (bottom arm)\n", " - 4: cued right arm (bottom arm)\n", "2. Outcome (3 observations):\n", " - 0: no outcome\n", " - 1: reward (cheese)\n", " - 2: punishment (shock)\n", "\n", "#### Environment Parameters\n", "\n", "**Observation Likelihood Model (A):**\n", "- A[0]: Location observations (5x4x2 tensor)\n", " - Perfect mapping between true and observed locations.\n", " - At the cue location (bottom), the rewarding arm is cued with accuracy set by the `cue_validity` parameter.\n", "- A[1]: Outcome observations (3x4x2 tensor)\n", " - In the rewarding arm (set by `reward_condition`), reward is presented with a likelihood determined by the `reward_probability` parameter.\n", " - Punishment and/or no-outcome are presented with a likelihood determined depending on if `dependent_outcome` is True or False and consequently by the `punishment_probability` parameter.\n", " - No-outcome is observed in the center/start location and cue location.\n", "\n", "**Transition Model (B):**\n", "- B[0]: Location transitions (4x4x4 tensor)\n", " - Agent can move to any one of the four locations from any location regardless of adjacency.\n", "- B[1]: Reward location (2x2x1 tensor)\n", " - Reward location remains fixed throughout trial.\n", "\n", "**Initial Conditions (D):**\n", "- D[0]: Starting location (4x1 tensor)\n", " - Agent always begins in center location\n", "- D[1]: Reward placement (2x1 tensor)\n", " - Default: Equal chance (50/50) of reward in either arm (`reward_condition=None`)\n", " - Optional: Can fix reward to specific arm, by setting `reward_condition` to `0` (for left arm) or `1` (for right arm)\n", "\n", "
\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:56.833504Z", "iopub.status.busy": "2026-03-06T15:31:56.833257Z", "iopub.status.idle": "2026-03-06T15:31:56.847073Z", "shell.execute_reply": "2026-03-06T15:31:56.846835Z" } }, "outputs": [], "source": [ "# setting the parameters for the environment\n", "reward_condition = 0 # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "cue_validity = 0.95 # 95% valid cues\n", "\n", "reward_probability = 1.0 # 100% chance of reward in the correct arm\n", "dependent_outcomes = True # if True, punishment occurs as a function of reward probability (i.e., if reward probability is 0.8, then 20% punishment). If False, punishment occurs with set probability (i.e., 20% no outcome and punishment will only occur in the other (non-rewarding) arm depending on the punishment_probability parameter)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:56.848285Z", "iopub.status.busy": "2026-03-06T15:31:56.848208Z", "iopub.status.idle": "2026-03-06T15:31:57.167276Z", "shell.execute_reply": "2026-03-06T15:31:57.166854Z" } }, "outputs": [], "source": [ "# initializing the environment. see si_tmaze.py in pymdp/envs for the implementation details\n", "env = SimplifiedTMaze(\n", " reward_condition=reward_condition,\n", " cue_validity=cue_validity, \n", " reward_probability=reward_probability, \n", " dependent_outcomes=dependent_outcomes,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting up the Agents" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.168745Z", "iopub.status.busy": "2026-03-06T15:31:57.168662Z", "iopub.status.idle": "2026-03-06T15:31:57.218343Z", "shell.execute_reply": "2026-03-06T15:31:57.218066Z" } }, "outputs": [], "source": [ "# creating C tensors filled with zeros for [location], [reward], [cue] based on A shapes for the Agent\n", "C = [jnp.zeros(a.shape[0], dtype=jnp.float32) for a in env.A] \n", "\n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[1].set(2.0) # prefer reward\n", "C[1] = C[1].at[2].set(-6.0) # avoid punishment\n", "\n", "# slight cost of observing a cue\n", "# C[0] = C[0].at[3].set(-1.0).at[4].set(-1.0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.219677Z", "iopub.status.busy": "2026-03-06T15:31:57.219596Z", "iopub.status.idle": "2026-03-06T15:31:57.256084Z", "shell.execute_reply": "2026-03-06T15:31:57.255633Z" } }, "outputs": [], "source": [ "# flat D tensors [location], [reward] based on B shapes for the agent\n", "D = [jnp.ones(b.shape[0], dtype=jnp.float32) / b.shape[0] for b in env.B]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.257395Z", "iopub.status.busy": "2026-03-06T15:31:57.257311Z", "iopub.status.idle": "2026-03-06T15:31:57.878736Z", "shell.execute_reply": "2026-03-06T15:31:57.878428Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61048/282069077.py:8: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent_vanilla = Agent(\n", "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61048/282069077.py:20: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent_si = Agent(\n" ] } ], "source": [ "# note that we initialize agents with different policy lengths for the vanilla vs sophisticated inference planning algorithms\n", "# even though both will eventually end up planning with a horizon of 2. The sophisticated inference planning algorithm requires\n", "# a policy length of 1 in the Agent as we specify horizon length of 2 when initializing the planning algorithm in the `rollout`.\n", "\n", "# action_selection=\"deterministic\" means selecting an action from the policy probability distribution (q_pi) by arg-maxxing\n", "# sampling_mode=\"full\" means evaluating the whole action sequence in each policy and executing the first action (as opposed to marginal where the agent evaluates each action type)\n", "policy_len = 2\n", "agent_vanilla = Agent(\n", " env.A, env.B, C, D, \n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " policy_len=policy_len,\n", " learn_A=False,\n", " learn_B=False,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " gamma=3.0\n", ")\n", "\n", "agent_si = Agent(\n", " env.A, env.B, C, D, \n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " policy_len=1,\n", " learn_A=False,\n", " learn_B=False,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " gamma=3.0\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the active inference rollouts" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.879961Z", "iopub.status.busy": "2026-03-06T15:31:57.879884Z", "iopub.status.idle": "2026-03-06T15:31:57.903963Z", "shell.execute_reply": "2026-03-06T15:31:57.903562Z" } }, "outputs": [], "source": [ "key = jr.PRNGKey(0) \n", "T = 3" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.905455Z", "iopub.status.busy": "2026-03-06T15:31:57.905365Z", "iopub.status.idle": "2026-03-06T15:31:57.914559Z", "shell.execute_reply": "2026-03-06T15:31:57.914227Z" } }, "outputs": [], "source": [ "si_search = si_policy_search(\n", " horizon=policy_len, # plans 2 timesteps ahead\n", " max_nodes=5000, # maximum number of nodes allowed in the tree\n", " max_branching=10, # maximum number of children allowed per node (moderating the branching factor)\n", " policy_prune_threshold=0.0, # no pruning of unlikely policies\n", " observation_prune_threshold=0.0, # no pruning of unlikely observations\n", " entropy_stop_threshold=0.0, # disabling halting of expansion if agent is certain enough\n", " neg_efe_stop_threshold=1e10, # disabling efe value based halting of expansion\n", " kl_threshold=-1, # disabling node reuse if agent is in similar states after an action\n", " prune_penalty=512, # default value for prune penalty\n", " gamma=3, # temperature parameter; lower value (--> 1) prunes policies less aggressively as probabilities are flattened while higher value (--> 16) prunes more aggressively\n", " topk_obsspace=10000, # max number of top observation combinations - this default value just means we want to consider all the observation combinations\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:31:57.915721Z", "iopub.status.busy": "2026-03-06T15:31:57.915633Z", "iopub.status.idle": "2026-03-06T15:32:00.062125Z", "shell.execute_reply": "2026-03-06T15:32:00.061837Z" } }, "outputs": [], "source": [ "_, info_vanilla = rollout(agent_vanilla, env, num_timesteps=T, rng_key=key) # default policy search is vanilla\n", "_, info_si = rollout(agent_si, env, num_timesteps=T, rng_key=key, policy_search=si_search)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:00.063840Z", "iopub.status.busy": "2026-03-06T15:32:00.063750Z", "iopub.status.idle": "2026-03-06T15:32:00.072935Z", "shell.execute_reply": "2026-03-06T15:32:00.072623Z" } }, "outputs": [], "source": [ "def make_gif(info):\n", " frames = []\n", " for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", " frames = np.array(frames, dtype=np.uint8)\n", " mediapy.show_video(frames, fps=1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:00.074536Z", "iopub.status.busy": "2026-03-06T15:32:00.074457Z", "iopub.status.idle": "2026-03-06T15:32:00.798079Z", "shell.execute_reply": "2026-03-06T15:32:00.797742Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "make_gif(info_vanilla)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:00.799469Z", "iopub.status.busy": "2026-03-06T15:32:00.799378Z", "iopub.status.idle": "2026-03-06T15:32:01.460002Z", "shell.execute_reply": "2026-03-06T15:32:01.459679Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "make_gif(info_si)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Result analysis" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:01.461295Z", "iopub.status.busy": "2026-03-06T15:32:01.461200Z", "iopub.status.idle": "2026-03-06T15:32:01.474045Z", "shell.execute_reply": "2026-03-06T15:32:01.473684Z" } }, "outputs": [], "source": [ "# qpi is a posterior over whole policies (action sequences).\n", "# To get the probability of the *current* action, we marginalize over policies\n", "# that share the same first action and sum their qpi values.\n", "# helper functions for:\n", "# - printing out policies and respective probabilities of selecting those policies\n", "# - printing out action and observation info for each timestep\n", "\n", "np.set_printoptions(precision=2, suppress=True)\n", "\n", "def print_qpi(agent, info, print_t1=False):\n", " qpi_values = info[\"qpi\"]\n", "\n", " action_names = {\n", " 0: \"move to center\",\n", " 1: \"move to left arm\",\n", " 2: \"move to right arm\",\n", " 3: \"move to cue\",\n", " }\n", " max_timesteps = 1 if print_t1 else qpi_values.shape[1]\n", "\n", " # unique_multiactions returns the unique first-step actions across policies\n", " # for a single control factor, this is just a list of action indices\n", " unique_actions = agent.unique_multiactions[:, 0]\n", "\n", " for t in range(max_timesteps):\n", " print(f\"Timestep {t}:\")\n", " action_probs = agent.multiaction_probabilities(qpi_values[:, t, :])[0]\n", "\n", " for action_idx, total_prob in zip(unique_actions.tolist(), action_probs.tolist()):\n", " if action_idx < 0:\n", " continue\n", " action_name = action_names.get(action_idx, f\"action_{action_idx}\")\n", " print(f\" {action_name}: {total_prob:.3f}\")\n", " print()\n", "\n", "def print_agent_behavior(info):\n", "\n", " action_names = {0: \"move to center\", 1: \"move to left arm\", 2: \"move to right arm\", 3: \"move to cue\"}\n", "\n", " location_obs = {0: \"center loc\", 1: \"left arm loc\", 2: \"right arm loc\", 3: \"cue-left-arm\", 4: \"cue-right-arm\"}\n", " outcome_obs = {0: \"no_outcome\", 1: \"reward\", 2: \"punishment\"}\n", "\n", " actions = info[\"action\"]\n", " observations = info[\"observation\"]\n", "\n", " num_timesteps = actions.shape[1]\n", "\n", " for t in range(num_timesteps):\n", " action_idx = int(actions[0, t, 0]) # [batch, timestep, action_dim]\n", " action_name = action_names.get(action_idx, f\"action_{action_idx}\")\n", "\n", " location_obs_idx = int(observations[0][0, t, 0]) # [modality][batch, timestep, obs_dim]\n", " outcome_obs_idx = int(observations[1][0, t, 0])\n", "\n", " location_name = location_obs.get(location_obs_idx)\n", " outcome_name = outcome_obs.get(outcome_obs_idx)\n", "\n", " print(f\"t={t}: observed=({location_name}, {outcome_name}) -> action={action_name}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see both agents select the optimal actions to go to the cue first and then go to the left arm to get a reward. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:01.475190Z", "iopub.status.busy": "2026-03-06T15:32:01.475112Z", "iopub.status.idle": "2026-03-06T15:32:01.512705Z", "shell.execute_reply": "2026-03-06T15:32:01.512455Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t=0: observed=(center loc, no_outcome) -> action=move to cue\n", "t=1: observed=(cue-left-arm, no_outcome) -> action=move to left arm\n", "t=2: observed=(left arm loc, reward) -> action=move to left arm\n", "t=3: observed=(left arm loc, reward) -> action=move to left arm\n" ] } ], "source": [ "print_agent_behavior(info_vanilla)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:01.514071Z", "iopub.status.busy": "2026-03-06T15:32:01.513970Z", "iopub.status.idle": "2026-03-06T15:32:01.522916Z", "shell.execute_reply": "2026-03-06T15:32:01.522628Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t=0: observed=(center loc, no_outcome) -> action=move to cue\n", "t=1: observed=(cue-left-arm, no_outcome) -> action=move to left arm\n", "t=2: observed=(left arm loc, reward) -> action=move to left arm\n", "t=3: observed=(left arm loc, reward) -> action=move to left arm\n" ] } ], "source": [ "print_agent_behavior(info_si)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, to see how the two planning algorithms differ, let's examine how they evaluate policies... \n", "\n", "While both agents select the optimal strategy (information gathering first), they differ significantly in their confidence, with the SI agent shows much stronger preference for the information-gathering strategy.\n", "- Vanilla Agent: 81% probability for cue-seeking, 18% for staying at center\n", "- SI Agent: 98% probability for cue-seeking, <1% for staying at center" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:01.524335Z", "iopub.status.busy": "2026-03-06T15:32:01.524244Z", "iopub.status.idle": "2026-03-06T15:32:02.045804Z", "shell.execute_reply": "2026-03-06T15:32:02.045524Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Timestep 0:\n", " move to center: 0.183\n", " move to left arm: 0.004\n", " move to right arm: 0.004\n", " move to cue: 0.809\n", "\n" ] } ], "source": [ "print_qpi(agent_vanilla, info_vanilla, print_t1=True)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.047026Z", "iopub.status.busy": "2026-03-06T15:32:02.046935Z", "iopub.status.idle": "2026-03-06T15:32:02.257558Z", "shell.execute_reply": "2026-03-06T15:32:02.257293Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Timestep 0:\n", " move to center: 0.003\n", " move to left arm: 0.008\n", " move to right arm: 0.008\n", " move to cue: 0.980\n", "\n" ] } ], "source": [ "print_qpi(agent_si, info_si, print_t1=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Doing the same experiment but with the extended`TMaze` environment used in other demos\n", "\n", "This section mirrors the preceding section, but uses `pymdp`'s default T-Maze environment as used in the [T-Maze Demo](https://github.com/infer-actively/pymdp/blob/main/examples/envs/tmaze_demo.ipynb). It differs from the `SimplifiedTMaze` environment used before due to the restricted spatial geometry (middle connector that the agent must pass through to reach the two arms) and the fact that the cue and location modalities are split out into separate modalities. We set cue validity (cue probability) to 1.0, use `policy_len = 4` (to account for the additional planning depth required for navigating the T-Maze), and `observation_prune_threshold = 1e-4` for the SI search.\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.258821Z", "iopub.status.busy": "2026-03-06T15:32:02.258747Z", "iopub.status.idle": "2026-03-06T15:32:02.267207Z", "shell.execute_reply": "2026-03-06T15:32:02.266928Z" } }, "outputs": [], "source": [ "from pymdp.envs import TMaze" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting up the T-Maze environment (Generative Process)\n", "\n", "The rules/hyperparameters of the T-Maze are identical to the TMaze above, except that the generative process parameters (states and observations) are slightly different due to the factorization of the joint cue+location modality (embedded together in `SimplifiedTMaze`) into two separate modalities. \n", "\n", "
\n", " Click here to see how the generative process for the `TMaze` env (non-simplified) is set up. \n", "\n", "#### States and Observations\n", "\n", "**State Factors:**\n", "1. Location (5 states): \n", " - 0: center (start location)\n", " - 1: left arm\n", " - 2: right arm\n", " - 3: cue location (bottom arm)\n", " - 4: middle (junction between center and arms)\n", "2. Reward Location (2 states):\n", " - 0: reward in left arm \n", " - 1: reward in right arm\n", "\n", "**Control State Factors:**\n", "1. Location (5 actions): \n", " - 0: move to center (start location)\n", " - 1: move to left arm\n", " - 2: move to right arm\n", " - 3: move to cue location (bottom arm)\n", " - 4: move to middle (junction)\n", "\n", "**Observation Modalities:**\n", "1. Location (5 observations):\n", " - 0: center (start location)\n", " - 1: left arm\n", " - 2: right arm\n", " - 3: cue location (bottom arm)\n", " - 4: middle (junction)\n", "2. Outcome (3 observations):\n", " - 0: no outcome\n", " - 1: reward (cheese)\n", " - 2: punishment (shock)\n", "3. Cue (3 observations):\n", " - 0: no cue\n", " - 1: cue indicates left arm\n", " - 2: cue indicates right arm\n", "\n", "#### Environment Parameters\n", "\n", "**Observation Likelihood Model (A):**\n", "- A[0]: Location observations (5x5 tensor)\n", " - Perfect mapping between true and observed locations.\n", "- A[1]: Outcome observations (3x5x2 tensor)\n", " - In the rewarding arm (set by `reward_condition`), reward is presented with a likelihood determined by the `reward_probability` parameter.\n", " - Punishment and/or no-outcome are presented with a likelihood determined depending on if `dependent_outcomes` is True or False and consequently by the `punishment_probability` parameter.\n", " - No-outcome is observed in the center/start location, cue location, and middle.\n", "- A[2]: Cue observations (3x5x2 tensor)\n", " - The cue is only observed at the cue location, with accuracy set by `cue_validity`.\n", " - No cue is observed at all other locations.\n", "\n", "**Transition Model (B):**\n", "- B[0]: Location transitions (5x5x5 tensor)\n", " - Agent can move between adjacent locations in the T-maze; invalid moves leave the agent in place.\n", "- B[1]: Reward location (2x2x1 tensor)\n", " - Reward location remains fixed throughout trial.\n", "\n", "**Initial Conditions (D):**\n", "- D[0]: Starting location (5x1 tensor)\n", " - Agent always begins in center location\n", "- D[1]: Reward placement (2x1 tensor)\n", " - Default: Equal chance (50/50) of reward in either arm (`reward_condition=None`)\n", " - Optional: Can fix reward to specific arm, by setting `reward_condition` to `0` (for left arm) or `1` (for right arm)\n", "\n", "
\n", "\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.268359Z", "iopub.status.busy": "2026-03-06T15:32:02.268289Z", "iopub.status.idle": "2026-03-06T15:32:02.275050Z", "shell.execute_reply": "2026-03-06T15:32:02.274830Z" } }, "outputs": [], "source": [ "# setting the parameters for the environment\n", "reward_condition = 0 # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "cue_validity = 1.0 # 100% valid cues (cue probability)\n", "\n", "reward_probability = 1.0 # 100% chance of reward in the correct arm\n", "dependent_outcomes = True # if True, punishment occurs as a function of reward probability (i.e., if reward probability is 0.8, then 20% punishment). If False, punishment occurs with set probability (i.e., 20% no outcome and punishment will only occur in the other (non-rewarding) arm depending on the punishment_probability parameter)\n", "punishment_probability = 1.0 # 100% chance of punishment in the other arm\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.276198Z", "iopub.status.busy": "2026-03-06T15:32:02.276130Z", "iopub.status.idle": "2026-03-06T15:32:02.468939Z", "shell.execute_reply": "2026-03-06T15:32:02.468537Z" } }, "outputs": [], "source": [ "# initializing the environment. see tmaze.py in pymdp/envs for the implementation details\n", "env = TMaze(\n", " reward_condition=reward_condition,\n", " cue_validity=cue_validity, \n", " reward_probability=reward_probability,\n", " punishment_probability=punishment_probability, \n", " dependent_outcomes=dependent_outcomes,\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting up the Agents\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.470266Z", "iopub.status.busy": "2026-03-06T15:32:02.470180Z", "iopub.status.idle": "2026-03-06T15:32:02.480041Z", "shell.execute_reply": "2026-03-06T15:32:02.479797Z" } }, "outputs": [], "source": [ "# creating C tensors filled with zeros for [location], [reward], [cue] based on A shapes for the Agent\n", "C = [jnp.zeros(a.shape[0], dtype=jnp.float32) for a in env.A] \n", "\n", "# setting preferences for outcomes only\n", "C[1] = C[1].at[1].set(2.0) # prefer reward\n", "C[1] = C[1].at[2].set(-6.0) # avoid punishment\n", "\n", "# slight cost of observing a cue\n", "C[2] = C[2].at[1].set(-0.5) \n", "C[2] = C[2].at[2].set(-0.5)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.481139Z", "iopub.status.busy": "2026-03-06T15:32:02.481067Z", "iopub.status.idle": "2026-03-06T15:32:02.515618Z", "shell.execute_reply": "2026-03-06T15:32:02.515309Z" } }, "outputs": [], "source": [ "# D tensors [location], [reward] based on B shapes for the agent\n", "# - agent starts in the center location\n", "# - reward location prior is uniform\n", "D_loc = jnp.zeros(env.B[0].shape[0], dtype=jnp.float32)\n", "D_loc = D_loc.at[0].set(1.0)\n", "\n", "D_reward = jnp.ones(env.B[1].shape[0], dtype=jnp.float32)\n", "D_reward = D_reward / jnp.sum(D_reward, axis=0, keepdims=True)\n", "\n", "D = [D_loc, D_reward]\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:02.516898Z", "iopub.status.busy": "2026-03-06T15:32:02.516821Z", "iopub.status.idle": "2026-03-06T15:32:03.124129Z", "shell.execute_reply": "2026-03-06T15:32:03.123813Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61048/2056066623.py:10: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent_vanilla = Agent(\n", "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61048/2056066623.py:22: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent_si = Agent(\n" ] } ], "source": [ "# note that we initialize agents with different policy lengths for the vanilla vs sophisticated inference planning algorithms\n", "# even though both will eventually end up planning with a horizon of 4. The sophisticated inference planning algorithm requires\n", "# a policy length of 1 in the Agent as we specify horizon length of 4 when initializing the planning algorithm in the `rollout`.\n", "\n", "# action_selection=\"deterministic\" means selecting an action from the policy probability distribution (q_pi) by arg-maxxing\n", "# sampling_mode=\"full\" means evaluating the whole action sequence in each policy and executing the first action (as opposed to marginal where the agent evaluates each action type)\n", "\n", "gamma = 3.0\n", "policy_len = 4 \n", "agent_vanilla = Agent(\n", " env.A, env.B, C, D, \n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " policy_len=policy_len,\n", " learn_A=False,\n", " learn_B=False,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " gamma=gamma,\n", ")\n", "\n", "agent_si = Agent(\n", " env.A, env.B, C, D, \n", " A_dependencies=env.A_dependencies, \n", " B_dependencies=env.B_dependencies,\n", " policy_len=1,\n", " learn_A=False,\n", " learn_B=False,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " gamma=gamma,\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the active inference rollouts\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:03.125390Z", "iopub.status.busy": "2026-03-06T15:32:03.125293Z", "iopub.status.idle": "2026-03-06T15:32:03.134006Z", "shell.execute_reply": "2026-03-06T15:32:03.133672Z" } }, "outputs": [], "source": [ "key = jr.PRNGKey(0) \n", "T = 5\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:03.135256Z", "iopub.status.busy": "2026-03-06T15:32:03.135176Z", "iopub.status.idle": "2026-03-06T15:32:03.142772Z", "shell.execute_reply": "2026-03-06T15:32:03.142315Z" } }, "outputs": [], "source": [ "si_search = si_policy_search(\n", " horizon=policy_len, # plans 4 timesteps ahead\n", " max_nodes=5000, # maximum number of nodes allowed in the tree\n", " max_branching=45, # maximum number of children allowed per node (moderating the branching factor)\n", " policy_prune_threshold=0.0, # no pruning of unlikely policies\n", " observation_prune_threshold=1e-4, # no pruning of unlikely observations\n", " entropy_stop_threshold=0.0, # disabling halting of expansion if agent is certain enough\n", " neg_efe_stop_threshold=1e10, # disabling efe value based halting of expansion\n", " kl_threshold=-1, # disabling node reuse if agent is in similar states after an action\n", " prune_penalty=512, # default value for prune penalty\n", " gamma=gamma, # temperature parameter; lower value (---> 1) prunes policies less aggressively as probabilities are flattened while higher value (---> 16) prunes more aggressively\n", " topk_obsspace=10000, # max number of top observation combinations - this default value just means we want to consider all the observation combinations\n", ")\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:03.143984Z", "iopub.status.busy": "2026-03-06T15:32:03.143902Z", "iopub.status.idle": "2026-03-06T15:32:06.213280Z", "shell.execute_reply": "2026-03-06T15:32:06.212996Z" } }, "outputs": [], "source": [ "_, info_vanilla = rollout(agent_vanilla, env, num_timesteps=T, rng_key=key) # default policy search is vanilla\n", "_, info_si = rollout(agent_si, env, num_timesteps=T, rng_key=key, policy_search=si_search)\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:06.215016Z", "iopub.status.busy": "2026-03-06T15:32:06.214922Z", "iopub.status.idle": "2026-03-06T15:32:06.224643Z", "shell.execute_reply": "2026-03-06T15:32:06.224077Z" } }, "outputs": [], "source": [ "def make_gif(info):\n", " frames = []\n", " for t in range(info[\"observation\"][0].shape[1]): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " info[\"observation\"][0][:, t, :],\n", " info[\"observation\"][1][:, t, :], \n", " info[\"observation\"][2][:, t, :],\n", " ]\n", " \n", " frame = env.render(mode=\"rgb_array\", observations=observations_t) # render the environment using the observations for this timestep\n", " frame = np.asarray(frame, dtype=np.uint8)\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", " frames = np.array(frames, dtype=np.uint8)\n", " mediapy.show_video(frames, fps=1)\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:06.226122Z", "iopub.status.busy": "2026-03-06T15:32:06.226036Z", "iopub.status.idle": "2026-03-06T15:32:07.084714Z", "shell.execute_reply": "2026-03-06T15:32:07.084232Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "make_gif(info_vanilla)\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:07.086134Z", "iopub.status.busy": "2026-03-06T15:32:07.086057Z", "iopub.status.idle": "2026-03-06T15:32:07.907502Z", "shell.execute_reply": "2026-03-06T15:32:07.907193Z" } }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "make_gif(info_si)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Result analysis\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:07.908846Z", "iopub.status.busy": "2026-03-06T15:32:07.908757Z", "iopub.status.idle": "2026-03-06T15:32:07.921807Z", "shell.execute_reply": "2026-03-06T15:32:07.921532Z" } }, "outputs": [], "source": [ "# qpi is a posterior over whole policies (action sequences).\n", "# To get the probability of the *current* action, we marginalize over policies\n", "# that share the same first action and sum their qpi values.\n", "# helper functions for:\n", "# - printing out policies and respective probabilities of selecting those policies\n", "# - printing out action and observation info for each timestep\n", "\n", "np.set_printoptions(precision=2, suppress=True)\n", "\n", "def print_qpi(agent, info, print_t1=False):\n", " qpi_values = info[\"qpi\"]\n", "\n", " action_names = {\n", " 0: \"move to center\",\n", " 1: \"move to left arm\",\n", " 2: \"move to right arm\",\n", " 3: \"move to cue\",\n", " 4: \"move to middle\",\n", " }\n", " max_timesteps = 1 if print_t1 else qpi_values.shape[1]\n", "\n", " # unique_multiactions returns the unique first-step actions across policies\n", " # for a single control factor, this is just a list of action indices\n", " unique_actions = agent.unique_multiactions[:, 0]\n", "\n", " for t in range(max_timesteps):\n", " print(f\"Timestep {t}:\")\n", " action_probs = agent.multiaction_probabilities(qpi_values[:, t, :])[0]\n", "\n", " for action_idx, total_prob in zip(unique_actions.tolist(), action_probs.tolist()):\n", " if action_idx < 0:\n", " continue\n", " action_name = action_names.get(action_idx, f\"action_{action_idx}\")\n", " print(f\" {action_name}: {total_prob:.3f}\")\n", " print()\n", "\n", "def print_agent_behavior(info):\n", "\n", " action_names = {\n", " 0: \"move to center\",\n", " 1: \"move to left arm\",\n", " 2: \"move to right arm\",\n", " 3: \"move to cue\",\n", " 4: \"move to middle\",\n", " }\n", " \n", " location_obs = {\n", " 0: \"center loc\",\n", " 1: \"left arm loc\",\n", " 2: \"right arm loc\",\n", " 3: \"cue loc\",\n", " 4: \"middle loc\",\n", " }\n", " outcome_obs = {0: \"no_outcome\", 1: \"reward\", 2: \"punishment\"}\n", " cue_obs = {0: \"no cue\", 1: \"cue-left\", 2: \"cue-right\"}\n", " \n", " actions = info[\"action\"]\n", " observations = info[\"observation\"]\n", " \n", " num_timesteps = actions.shape[1]\n", " \n", " for t in range(num_timesteps):\n", " action_idx = int(actions[0, t, 0]) # [batch, timestep, action_dim]\n", " action_name = action_names.get(action_idx, f\"action_{action_idx}\")\n", " \n", " location_obs_idx = int(observations[0][0, t, 0]) # [modality][batch, timestep, obs_dim]\n", " outcome_obs_idx = int(observations[1][0, t, 0])\n", " cue_obs_idx = int(observations[2][0, t, 0])\n", " \n", " location_name = location_obs.get(location_obs_idx)\n", " outcome_name = outcome_obs.get(outcome_obs_idx)\n", " cue_name = cue_obs.get(cue_obs_idx)\n", " \n", " print(f\"t={t}: observed=({location_name}, {outcome_name}, {cue_name}) -> action={action_name}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the classic T-maze's adjacency constraints (and the extra middle location), reaching the reward after sampling the cue takes multiple steps. With the current horizon (4) and `T=5`, you should see cue-seeking and movement toward the chosen arm; increase `policy_len` and/or `T` if you want longer sequences.\n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:07.923120Z", "iopub.status.busy": "2026-03-06T15:32:07.923047Z", "iopub.status.idle": "2026-03-06T15:32:07.952261Z", "shell.execute_reply": "2026-03-06T15:32:07.952001Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t=0: observed=(center loc, no_outcome, no cue) -> action=move to cue\n", "t=1: observed=(cue loc, no_outcome, cue-left) -> action=move to center\n", "t=2: observed=(center loc, no_outcome, no cue) -> action=move to middle\n", "t=3: observed=(middle loc, no_outcome, no cue) -> action=move to left arm\n", "t=4: observed=(left arm loc, reward, no cue) -> action=move to center\n", "t=5: observed=(left arm loc, reward, no cue) -> action=move to center\n" ] } ], "source": [ "print_agent_behavior(info_vanilla)\n" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:07.953763Z", "iopub.status.busy": "2026-03-06T15:32:07.953663Z", "iopub.status.idle": "2026-03-06T15:32:07.963337Z", "shell.execute_reply": "2026-03-06T15:32:07.963090Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t=0: observed=(center loc, no_outcome, no cue) -> action=move to cue\n", "t=1: observed=(cue loc, no_outcome, cue-left) -> action=move to center\n", "t=2: observed=(center loc, no_outcome, no cue) -> action=move to middle\n", "t=3: observed=(middle loc, no_outcome, no cue) -> action=move to left arm\n", "t=4: observed=(left arm loc, reward, no cue) -> action=move to center\n", "t=5: observed=(left arm loc, reward, no cue) -> action=move to center\n" ] } ], "source": [ "print_agent_behavior(info_si)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, to see how the two planning algorithms differ, let's examine how they evaluate policies... \n", "\n", "With `cue_validity = 1.0`, both planners should prefer information gathering, but the SI planner typically yields a sharper (more confident) posterior over policies. Compare how each planner's probabilities shift with the longer horizon.\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:07.964611Z", "iopub.status.busy": "2026-03-06T15:32:07.964506Z", "iopub.status.idle": "2026-03-06T15:32:08.564500Z", "shell.execute_reply": "2026-03-06T15:32:08.564141Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Timestep 0:\n", " move to center: 0.142\n", " move to left arm: 0.142\n", " move to right arm: 0.142\n", " move to cue: 0.539\n", " move to middle: 0.036\n", "\n" ] } ], "source": [ "print_qpi(agent_vanilla, info_vanilla, print_t1=True)\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:08.565830Z", "iopub.status.busy": "2026-03-06T15:32:08.565750Z", "iopub.status.idle": "2026-03-06T15:32:08.781566Z", "shell.execute_reply": "2026-03-06T15:32:08.781263Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Timestep 0:\n", " move to center: 0.001\n", " move to left arm: 0.001\n", " move to right arm: 0.001\n", " move to cue: 0.810\n", " move to middle: 0.186\n", "\n" ] } ], "source": [ "print_qpi(agent_si, info_si, print_t1=True)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/inductive_inference/inductive_inference_example.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from pymdp import control\n", "import jax.numpy as jnp\n", "import jax.tree_util as jtu\n", "from jax import random as jr\n", "from jax import nn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set up generative model (random one with trivial observation model)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Set up a generative model\n", "num_states = [5, 3]\n", "num_controls = [2, 2]\n", "\n", "# make some arbitrary policies (policy depth 3, 2 control factors)\n", "policy_1 = jnp.array([[0, 1],\n", " [1, 1],\n", " [0, 0]])\n", "policy_2 = jnp.array([[1, 0],\n", " [0, 0],\n", " [1, 1]])\n", "policy_matrix = jnp.stack([policy_1, policy_2]) \n", "\n", "# observation modalities (isomorphic/identical to hidden states, just need to include for the need to include likleihood model)\n", "num_obs = [5, 3]\n", "num_factors = len(num_states)\n", "num_modalities = len(num_obs)\n", "\n", "# sample parameters of the model (A, B, C)\n", "key = jr.PRNGKey(1)\n", "factor_keys = jr.split(key, num_factors)\n", "\n", "d = [0.1* jr.uniform(factor_key, (ns,)) for factor_key, ns in zip(factor_keys, num_states)]\n", "qs_init = [jr.dirichlet(factor_key, d_f) for factor_key, d_f in zip(factor_keys, d)]\n", "A = [jnp.eye(no) for no in num_obs]\n", "\n", "factor_keys = jr.split(factor_keys[-1], num_factors)\n", "b = [jr.uniform(factor_keys[f], shape=(num_controls[f], num_states[f], num_states[f])) for f in range(num_factors)]\n", "b_sparse = [jnp.where(b_f < 0.75, 1e-5, b_f) for b_f in b]\n", "B = [jnp.swapaxes(jr.dirichlet(factor_keys[f], b_sparse[f]), 2, 0) for f in range(num_factors)]\n", "\n", "modality_keys = jr.split(factor_keys[-1], num_modalities)\n", "C = [nn.one_hot(jr.randint(modality_keys[m], shape=(1,), minval=0, maxval=num_obs[m]), num_obs[m]) for m in range(num_modalities)]\n", "\n", "# trivial dependencies -- factor 1 drives modality 1, etc.\n", "A_dependencies = [[0], [1]]\n", "B_dependencies = [[0], [1]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate sparse constraints vectors `H` and inductive matrix `I`, using inductive parameters like depth and threshold " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# generate random constraints (H vector)\n", "factor_keys = jr.split(key, num_factors)\n", "H = [jr.uniform(factor_key, (ns,)) for factor_key, ns in zip(factor_keys, num_states)]\n", "H = [jnp.where(h < 0.75, 0., 1.) for h in H]\n", "\n", "# depth and threshold for inductive planning algorithm. I made policy-depth equal to inductive planning depth, out of ignorance -- need to ask Tim or Tommaso about this\n", "inductive_depth, inductive_threshold = 3, 0.5\n", "I = control.generate_I_matrix(H, B, inductive_threshold, inductive_depth)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate posterior probability of policies and negative EFE using new version of `update_posterior_policies`\n", "#### This function no longer computes info gain (for both states and parameters) since deterministic model is assumed, and includes new inductive matrix `I` and `inductive_epsilon` parameter" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# evaluate Q(pi) and negative EFE using the inductive planning algorithm\n", "\n", "E = jnp.ones(policy_matrix.shape[0])\n", "pA = jtu.tree_map(lambda a: jnp.ones_like(a), A)\n", "pB = jtu.tree_map(lambda b: jnp.ones_like(b), B)\n", "\n", "q_pi, neg_efe = control.update_posterior_policies_inductive(policy_matrix, qs_init, A, B, C, E, pA, pB, A_dependencies, B_dependencies, I, gamma=16.0, use_utility=True, use_inductive=True, inductive_epsilon=1e-3)" ] } ], "metadata": { "kernelspec": { "display_name": "pymdp_dev_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/inductive_inference/inductive_inference_gridworld.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:10.138587Z", "iopub.status.busy": "2026-03-06T15:32:10.138354Z", "iopub.status.idle": "2026-03-06T15:32:14.052446Z", "shell.execute_reply": "2026-03-06T15:32:14.052121Z" } }, "outputs": [], "source": [ "import jax.tree_util as jtu\n", "from jax import numpy as jnp, random as jr\n", "from jax import nn, vmap\n", "from equinox import tree_at\n", "\n", "import numpy as np\n", "\n", "from pymdp.envs import GridWorld, rollout\n", "from pymdp import control\n", "from pymdp.agent import Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grid world generative model" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:14.054405Z", "iopub.status.busy": "2026-03-06T15:32:14.054246Z", "iopub.status.idle": "2026-03-06T15:32:14.378834Z", "shell.execute_reply": "2026-03-06T15:32:14.378553Z" } }, "outputs": [], "source": [ "# size of the grid world\n", "grid_shape = (7, 7)\n", "\n", "# start in the middle of the grid\n", "env = GridWorld(shape=grid_shape, initial_position=(3,3), include_stay=False)\n", "\n", "desired_state = (6,6) # bottom right corner\n", "# get linear index of desired state\n", "desired_state_id = env.coords_to_index(shape=grid_shape, coord=desired_state)\n", "\n", "# create helpful num_obs and num_states lists (lists of observation dimensions per modality, and state dimensions per factor, respectively)\n", "num_obs = [a.shape[0] for a in env.A]\n", "num_states = [b.shape[0] for b in env.B]\n", "num_controls = [b.shape[-1] for b in env.B]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Planning and inductive inference parameters" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:14.380265Z", "iopub.status.busy": "2026-03-06T15:32:14.380186Z", "iopub.status.idle": "2026-03-06T15:32:14.445066Z", "shell.execute_reply": "2026-03-06T15:32:14.444718Z" } }, "outputs": [], "source": [ "# number of agents\n", "batch_size = 5\n", "\n", "planning_horizon, inductive_threshold = 1, 0.1\n", "inductive_depth = 7\n", "policy_matrix = control.construct_policies(num_states, num_controls, policy_len=planning_horizon)\n", "\n", "# inductive planning goal states\n", "H = [jnp.broadcast_to(nn.one_hot(desired_state_id, num_states[0]), (batch_size, num_states[0]))] # list of factor-specific goal vectors (shape of each is (n_batches, num_states[f]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialize an `Agent()`" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:14.446460Z", "iopub.status.busy": "2026-03-06T15:32:14.446379Z", "iopub.status.idle": "2026-03-06T15:32:15.109623Z", "shell.execute_reply": "2026-03-06T15:32:15.109349Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61059/4163094735.py:6: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(A, B, C, D, batch_size=batch_size, policies=policy_matrix, policy_len=planning_horizon,\n" ] } ], "source": [ "# create agent, using generative process parameters from the environment to initialize the generative model\n", "A = env.A\n", "B = env.B\n", "C = [jnp.repeat(nn.one_hot(desired_state_id, num_states[0])[None, :], batch_size, axis=0)] # preferred outcomes (shape of each is (n_batches, num_obs[f]))\n", "D = env.D\n", "agent = Agent(A, B, C, D, batch_size=batch_size, policies=policy_matrix, policy_len=planning_horizon, \n", " inductive_depth=inductive_depth, inductive_threshold=inductive_threshold,\n", " H=H, use_utility=True, use_states_info_gain=False, use_param_info_gain=False, use_inductive=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run active inference" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:15.110855Z", "iopub.status.busy": "2026-03-06T15:32:15.110771Z", "iopub.status.idle": "2026-03-06T15:32:16.107364Z", "shell.execute_reply": "2026-03-06T15:32:16.106994Z" } }, "outputs": [], "source": [ "T = 7 \n", "last, info = rollout(agent, env, num_timesteps=T, rng_key = jr.PRNGKey(0))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.108728Z", "iopub.status.busy": "2026-03-06T15:32:16.108649Z", "iopub.status.idle": "2026-03-06T15:32:16.111586Z", "shell.execute_reply": "2026-03-06T15:32:16.111341Z" } }, "outputs": [ { "data": { "text/plain": [ "(5, 8)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info['env_state'][0].shape" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.112658Z", "iopub.status.busy": "2026-03-06T15:32:16.112589Z", "iopub.status.idle": "2026-03-06T15:32:16.232366Z", "shell.execute_reply": "2026-03-06T15:32:16.232099Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Grid position for agent 2 at time 0: (3, 3)\n", "Grid position for agent 2 at time 1: (3, 4)\n", "Grid position for agent 2 at time 2: (3, 5)\n", "Grid position for agent 2 at time 3: (3, 6)\n", "Grid position for agent 2 at time 4: (4, 6)\n", "Grid position for agent 2 at time 5: (5, 6)\n", "Grid position for agent 2 at time 6: (6, 6)\n" ] } ], "source": [ "agent_id_to_track = 1\n", "for t in range(T):\n", " state_time_t = env.index_to_coords(shape=grid_shape, idx=info['env_state'][0][agent_id_to_track, t])\n", " print(f\"Grid position for agent {agent_id_to_track+1} at time {t}: {state_time_t}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Now the agent starts further from the goal and thus need more timesteps to reach it" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.233977Z", "iopub.status.busy": "2026-03-06T15:32:16.233839Z", "iopub.status.idle": "2026-03-06T15:32:16.249571Z", "shell.execute_reply": "2026-03-06T15:32:16.249295Z" } }, "outputs": [], "source": [ "# size of the grid world\n", "grid_shape = (7, 7)\n", "\n", "# number of agents\n", "batch_size = 5\n", "\n", "# start in the upper left corner this time\n", "upper_left_initial_states = [jnp.repeat(jnp.array(env.coords_to_index(shape=grid_shape, coord=(0,0))), batch_size, axis=0)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Increase inductive planning depth in order to compute the needed inductive planning matrix " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.250817Z", "iopub.status.busy": "2026-03-06T15:32:16.250732Z", "iopub.status.idle": "2026-03-06T15:32:16.253357Z", "shell.execute_reply": "2026-03-06T15:32:16.253075Z" } }, "outputs": [], "source": [ "planning_horizon, inductive_threshold = 1, 0.1\n", "inductive_depth = 14\n", "policy_matrix = control.construct_policies(num_states, num_controls, policy_len=planning_horizon)\n", "\n", "# inductive planning goal states\n", "H = [jnp.broadcast_to(nn.one_hot(desired_state_id, num_states[0]), (batch_size, num_states[0]))] # list of factor-specific goal vectors (shape of each is (n_batches, num_states[f]))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.254701Z", "iopub.status.busy": "2026-03-06T15:32:16.254624Z", "iopub.status.idle": "2026-03-06T15:32:16.382125Z", "shell.execute_reply": "2026-03-06T15:32:16.381861Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61059/1146799413.py:5: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agent = Agent(A, B, C, D, batch_size=batch_size, policies=policy_matrix, policy_len=planning_horizon,\n" ] } ], "source": [ "# create agent, using generative process parameters from the environment to initialize the generative model\n", "A, B = [jnp.broadcast_to(a, (batch_size,) + a.shape) for a in env.A], [jnp.broadcast_to(b, (batch_size,) + b.shape) for b in env.B]\n", "C = [jnp.repeat(nn.one_hot(desired_state_id, num_states[0])[None, :], batch_size, axis=0)] # preferred outcomes (shape of each is (n_batches, num_obs[f]))\n", "D = [nn.one_hot(upper_left_initial_states[0], num_states[0])] # need to do this since the D of the environment won't match the env state if you reset to a different state\n", "agent = Agent(A, B, C, D, batch_size=batch_size, policies=policy_matrix, policy_len=planning_horizon, \n", " inductive_depth=inductive_depth, inductive_threshold=inductive_threshold,\n", " H=H, use_utility=True, use_states_info_gain=False, use_param_info_gain=False, use_inductive=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run active inference" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:16.383442Z", "iopub.status.busy": "2026-03-06T15:32:16.383329Z", "iopub.status.idle": "2026-03-06T15:32:17.230297Z", "shell.execute_reply": "2026-03-06T15:32:17.229993Z" } }, "outputs": [], "source": [ "T = 14\n", "# construct a partial initial_carry that only overwrites env_state/observation\n", "init_obs, init_env_state = vmap(env.reset)(\n", " jr.split(jr.PRNGKey(1), batch_size), state=upper_left_initial_states\n", ")\n", "initial_carry_overwrite = {\"observation\": init_obs, \"env_state\": init_env_state}\n", "last, info = rollout(agent, env, num_timesteps=T, rng_key = jr.PRNGKey(0), initial_carry=initial_carry_overwrite)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:17.231657Z", "iopub.status.busy": "2026-03-06T15:32:17.231576Z", "iopub.status.idle": "2026-03-06T15:32:17.252610Z", "shell.execute_reply": "2026-03-06T15:32:17.252328Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Grid position for agent 2 at time 0: (0, 0)\n", "Grid position for agent 2 at time 1: (0, 1)\n", "Grid position for agent 2 at time 2: (0, 2)\n", "Grid position for agent 2 at time 3: (0, 3)\n", "Grid position for agent 2 at time 4: (0, 4)\n", "Grid position for agent 2 at time 5: (0, 5)\n", "Grid position for agent 2 at time 6: (0, 6)\n", "Grid position for agent 2 at time 7: (1, 6)\n", "Grid position for agent 2 at time 8: (2, 6)\n", "Grid position for agent 2 at time 9: (3, 6)\n", "Grid position for agent 2 at time 10: (4, 6)\n", "Grid position for agent 2 at time 11: (5, 6)\n", "Grid position for agent 2 at time 12: (6, 6)\n", "Grid position for agent 2 at time 13: (6, 6)\n" ] } ], "source": [ "agent_id_to_track = 1\n", "for t in range(T):\n", " state_time_t = env.index_to_coords(shape=grid_shape, idx=info['env_state'][0][agent_id_to_track, t])\n", " print(f\"Grid position for agent {agent_id_to_track+1} at time {t}: {state_time_t}\")" ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/inference_and_learning/inference_methods_comparison.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:18.347670Z", "iopub.status.busy": "2026-03-06T15:32:18.347498Z", "iopub.status.idle": "2026-03-06T15:32:19.684289Z", "shell.execute_reply": "2026-03-06T15:32:19.683853Z" } }, "outputs": [], "source": [ "import jax.numpy as jnp\n", "from jax import tree_util as jtu, vmap, jit\n", "from jax.experimental import sparse\n", "from pymdp.agent import Agent\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "from pymdp.inference import smoothing_ovf\n", "from pymdp.algos import hmm_smoother_scan_colstoch\n", "from pymdp.maths import log_stable\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up generative model and a sequence of observations. The A tensors, B tensors and observations are specified in such a way that only later observations ($o_{t > 1}$) help disambiguate hidden states at earlier time points. This will demonstrate the importance of \"smoothing\" or retrospective inference" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:19.685687Z", "iopub.status.busy": "2026-03-06T15:32:19.685565Z", "iopub.status.idle": "2026-03-06T15:32:19.993067Z", "shell.execute_reply": "2026-03-06T15:32:19.992755Z" } }, "outputs": [], "source": [ "num_states = [3, 2]\n", "num_obs = [2]\n", "n_batch = 2\n", "\n", "A_1 = jnp.array([[1.0, 1.0, 1.0], [0.0, 0.0, 1.]])\n", "A_2 = jnp.array([[1.0, 1.0], [1., 0.]])\n", "\n", "A_tensor = A_1[..., None] * A_2[:, None]\n", "\n", "A_tensor /= A_tensor.sum(0)\n", "\n", "A = [jnp.broadcast_to(A_tensor, (n_batch, num_obs[0], 3, 2)) ]\n", "\n", "# create two transition matrices, one for each state factor\n", "B_1 = jnp.broadcast_to(\n", " jnp.array([[0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 0.0]]), (n_batch, 3, 3)\n", ")\n", "\n", "B_2 = jnp.broadcast_to(\n", " jnp.array([[0.0, 1.0], [1.0, 0.0]]), (n_batch, 2, 2)\n", " )\n", "\n", "B = [B_1[..., None], B_2[..., None]]\n", "\n", "# for the single modality, a sequence over time of observations (one hot vectors)\n", "obs = [jnp.broadcast_to(jnp.array([[1., 0.], # observation 0 is ambiguous with respect state factors\n", " [1., 0], # observation 0 is ambiguous with respect state factors\n", " [1., 0], # observation 0 is ambiguous with respect state factors\n", " [0., 1.]])[:, None], (4, n_batch, num_obs[0]) )] # observation 1 provides information about exact state of both factors \n", "C = [jnp.zeros((n_batch, num_obs[0]))] # flat preferences\n", "D = [jnp.ones((n_batch, 3)) / 3., jnp.ones((n_batch, 2)) / 2.] # flat prior\n", "E = jnp.ones((n_batch, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Construct the `Agent`" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:19.995016Z", "iopub.status.busy": "2026-03-06T15:32:19.994907Z", "iopub.status.idle": "2026-03-06T15:32:20.425222Z", "shell.execute_reply": "2026-03-06T15:32:20.424904Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61062/464010401.py:4: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agents = Agent(\n" ] } ], "source": [ "pA = None\n", "pB = None\n", "\n", "agents = Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " E=E,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " categorical_obs=True,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " inference_algo=\"ovf\",\n", " num_iter=16,\n", " batch_size=n_batch\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### OVF Smoothing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using `obs` and `policies`, pass in the arguments `outcomes`, `past_actions`, `empirical_prior` and `qs_hist` to `agent.infer_states(...)`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run first timestep of inference using `obs[0]`, no past actions, empirical prior set to actual prior, no qs_hist" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:20.426515Z", "iopub.status.busy": "2026-03-06T15:32:20.426430Z", "iopub.status.idle": "2026-03-06T15:32:21.658480Z", "shell.execute_reply": "2026-03-06T15:32:21.658102Z" } }, "outputs": [], "source": [ "prior = agents.D\n", "action_hist = []\n", "qs_hist=None\n", "for t in range(len(obs[0])):\n", " first_obs = jtu.tree_map(lambda x: jnp.moveaxis(x[:t+1], 0, 1), obs)\n", " beliefs = agents.infer_states(first_obs, prior, qs_hist=qs_hist)\n", " actions = jnp.broadcast_to(agents.policies[0, 0], (2, 2))\n", " prior = agents.update_empirical_prior(actions, beliefs)\n", " qs_hist = beliefs\n", " if t < len(obs[0]) - 1:\n", " action_hist.append(actions)\n", "\n", "v_jso = jit(vmap(smoothing_ovf), backend='cpu')\n", "actions_seq = jnp.stack(action_hist, 1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:21.659932Z", "iopub.status.busy": "2026-03-06T15:32:21.659845Z", "iopub.status.idle": "2026-03-06T15:32:23.746863Z", "shell.execute_reply": "2026-03-06T15:32:23.746596Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "24.1 μs ± 2.27 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" ] } ], "source": [ "smoothed_beliefs = v_jso(beliefs, agents.B, actions_seq)\n", "%timeit v_jso(beliefs, agents.B, actions_seq)[0][0].block_until_ready()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try the version of `smoothing_ovf` with sparse tensors\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:23.748100Z", "iopub.status.busy": "2026-03-06T15:32:23.748018Z", "iopub.status.idle": "2026-03-06T15:32:27.438063Z", "shell.execute_reply": "2026-03-06T15:32:27.437786Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "28.4 μs ± 361 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" ] } ], "source": [ "sparse_B = jtu.tree_map(lambda b: sparse.BCOO.fromdense(b, n_batch=1), agents.B)\n", "\n", "smoothed_beliefs_sparse = v_jso(beliefs, sparse_B, actions_seq)\n", "%timeit v_jso(beliefs, sparse_B, actions_seq)[0][0].block_until_ready()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can plot that pair of filtering / smoothing distributions for the single batch / single agent, that we ran" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:27.439187Z", "iopub.status.busy": "2026-03-06T15:32:27.439114Z", "iopub.status.idle": "2026-03-06T15:32:27.720017Z", "shell.execute_reply": "2026-03-06T15:32:27.719729Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQMAAAKqCAYAAACO80jyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMAxJREFUeJzt3QuYlmWdP/B7ODgqwpSiHMpMI8M00SU1JKE80WE1bPO0h0Qp1xXd0tVqrnYjK8NC1xMq5F4ecv9balm5bUqidDBtBVSyDF1XMvOAEgYr4ijw/K/72f87/xkYmHnn9M7w+3yu65WZ5z39nofXmR/f577vp64oiiIBAAAAANu8AbUuAAAAAADoHcJAAAAAAAhCGAgAAAAAQQgDAQAAACAIYSAAAAAABCEMBAAAAIAghIEAAAAAEIQwEAAAAACCEAYCAAAAQBDCQGCLfve736W6urp0ww03NG/74he/WG7rLzpa7/ve97603377det7v/Wtb03Tpk1r/v4nP/lJWUv+szMWLVqUDj300DRkyJDydR5++OFurBYAgC3JvddZZ53V4weoo/1ipcdduXJlt7137ltz/9pSfo/8Xp2xYsWK9LGPfSztsssu5etcdtll3VQp0FXCQAgsh3z5F3Nbt8997nMdfp2vfvWr6fvf/36P1hrd66+/no4//vi0atWqdOmll6abbrop7bHHHrUuCwBgM4888kgZAuVeZfvtt09vetOb0lFHHZWuvPLKPn207rvvvjL4+tOf/lTrUrYJ55xzTpo/f35qbGwse9cPfOADtS4J+H8GVb4A4vrSl76U9txzz1bb8ii53MCtW7cuDR48uN0wMDd8U6dO7eFK+7dJkyaVx3O77bar+rn//d//nZ566ql07bXXpk984hM9Uh8AQFflQO39739/estb3pI++clPppEjR6ann346/fKXv0yXX355Ovvss/t07RdccEE5Qu4Nb3hDrcvpE3LvOmhQ52KDe+65J33kIx9J5513XrfXBXSNMBBIH/zgB9O73/3uNo9EPptbC6+++moZmg0YsO0MYM770tnj+cILL5R/akwBgL7swgsvTA0NDeXyJpv2LZV+hv6jK/8WyH/felfom7adf2UDvbJm4Kby/WvXrk033nhj8xTjluvkPfPMM+m0005LI0aMSPX19WnfffdN1113XZtro3z7299O//iP/1hOJdlxxx3TmjVryvv/8z//s5xWkBvLvH3y5MnpF7/4xWa13Hvvvemggw4qm5a3ve1tad68eVXv85IlS8p1+XbYYYdytOTcuXM3e0xTU1OaOXNmGjNmTLlPu+++e/rMZz5Tbu/MGjDt7V8+nnlblqcK59fIaxxmzz//fDr11FPTm9/85rKWUaNGlWdg898dAEBvy7MZcr/XVgi02267tbkO36233pre+c53lv3XhAkTymnGWe7lcr+Ve7vc+7TV3+Tnjh8/vnzu8OHD01//9V+X/Wdbo9QOO+ywcu3lXFvul377298235+nB59//vnl17kHrPS1m75nXhonz6Cp9LV33nnnZu/Vkf43+8Mf/lDOrMk15WOTp9W2109uKq8ZeMIJJ6Rhw4aVa/N96lOfKk+qb+pf//Vfm4/TzjvvnE466aRyxGZ72lozsL39qyxFVBRFuuqqq5qPZWXpmzz68u1vf3v595prfu9735vuuuuuqvYb6BojA4G0evXqzRYfzs1UR+T1P/K01YMPPjidfvrp5bYcxFUWDX7Pe97T3Ojtuuuu6Y477kjTp08vg75Pf/rTrV7ry1/+cjkaME8lyI1Q/jo3bnnkYm5ecgCXR9ddf/316fDDD08///nPy/fNctN49NFHl++RG5b169eXj89NSke99NJL6UMf+lDZUJ188snplltuSX/3d39X1pEbnmzjxo3p2GOPLYPHvL/77LNP+d55Hb/HH3+86rUTO7J/f/u3f1sGpHk69t///d+XgWdlv/7iL/4i/eY3vymn3OQFn/MZ2NxM/f73v99sAWgAgJ6Wl5m5//77069//esOXZwt9zu33357mjFjRvn9rFmz0p//+Z+XJ1qvvvrqdOaZZ5Y92te//vWyH8u9U8vQKZ8Uzb1Rfl7uPfNU5HxS9aGHHmoOJBcsWFD2W3vttVfZJ+apr3n9wokTJ6YHH3yw7Jk++tGPlr3ct771rbKvq/TCubesyP3fbbfdVtY0dOjQdMUVV5S9WO67cqhVTf+bazjiiCPK5+b+bvTo0WVf3XL/OiL3rbn+vP95KnauKR+vb37zm61Ga/7TP/1T+djct7/44ovl/uclbFoep47oyP7l18378jd/8zflWpEf//jHm5+fj3+utfLvh/ycxYsXl38P+bFALymAsK6//voi/xho65YtX768/Do/rmLmzJnN91cM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# with dense matrices\n", "fig, axes = plt.subplots(2, 2, figsize=(16, 8), sharex=True)\n", "\n", "sns.heatmap(beliefs[0][0].mT, ax=axes[0, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(beliefs[1][0].mT, ax=axes[1, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "sns.heatmap(smoothed_beliefs[0][0][0].mT, ax=axes[0, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(smoothed_beliefs[0][1][0].mT, ax=axes[1, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "axes[0, 0].set_title('Filtered beliefs')\n", "axes[0, 1].set_title('Smoothed beliefs')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:27.721291Z", "iopub.status.busy": "2026-03-06T15:32:27.721191Z", "iopub.status.idle": "2026-03-06T15:32:27.821278Z", "shell.execute_reply": "2026-03-06T15:32:27.821030Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQMAAAKqCAYAAACO80jyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMAxJREFUeJzt3QuYlmWdP/B7ODgqwpSiHMpMI8M00SU1JKE80WE1bPO0h0Qp1xXd0tVqrnYjK8NC1xMq5F4ecv9balm5bUqidDBtBVSyDF1XMvOAEgYr4ijw/K/72f87/xkYmHnn9M7w+3yu65WZ5z39nofXmR/f577vp64oiiIBAAAAANu8AbUuAAAAAADoHcJAAAAAAAhCGAgAAAAAQQgDAQAAACAIYSAAAAAABCEMBAAAAIAghIEAAAAAEIQwEAAAAACCEAYCAAAAQBDCQGCLfve736W6urp0ww03NG/74he/WG7rLzpa7/ve97603377det7v/Wtb03Tpk1r/v4nP/lJWUv+szMWLVqUDj300DRkyJDydR5++OFurBYAgC3JvddZZ53V4weoo/1ipcdduXJlt7137ltz/9pSfo/8Xp2xYsWK9LGPfSztsssu5etcdtll3VQp0FXCQAgsh3z5F3Nbt8997nMdfp2vfvWr6fvf/36P1hrd66+/no4//vi0atWqdOmll6abbrop7bHHHrUuCwBgM4888kgZAuVeZfvtt09vetOb0lFHHZWuvPLKPn207rvvvjL4+tOf/lTrUrYJ55xzTpo/f35qbGwse9cPfOADtS4J+H8GVb4A4vrSl76U9txzz1bb8ii53MCtW7cuDR48uN0wMDd8U6dO7eFK+7dJkyaVx3O77bar+rn//d//nZ566ql07bXXpk984hM9Uh8AQFflQO39739/estb3pI++clPppEjR6ann346/fKXv0yXX355Ovvss/t07RdccEE5Qu4Nb3hDrcvpE3LvOmhQ52KDe+65J33kIx9J5513XrfXBXSNMBBIH/zgB9O73/3uNo9EPptbC6+++moZmg0YsO0MYM770tnj+cILL5R/akwBgL7swgsvTA0NDeXyJpv2LZV+hv6jK/8WyH/felfom7adf2UDvbJm4Kby/WvXrk033nhj8xTjluvkPfPMM+m0005LI0aMSPX19WnfffdN1113XZtro3z7299O//iP/1hOJdlxxx3TmjVryvv/8z//s5xWkBvLvH3y5MnpF7/4xWa13Hvvvemggw4qm5a3ve1tad68eVXv85IlS8p1+XbYYYdytOTcuXM3e0xTU1OaOXNmGjNmTLlPu+++e/rMZz5Tbu/MGjDt7V8+nnlblqcK59fIaxxmzz//fDr11FPTm9/85rKWUaNGlWdg898dAEBvy7MZcr/XVgi02267tbkO36233pre+c53lv3XhAkTymnGWe7lcr+Ve7vc+7TV3+Tnjh8/vnzu8OHD01//9V+X/Wdbo9QOO+ywcu3lXFvul377298235+nB59//vnl17kHrPS1m75nXhonz6Cp9LV33nnnZu/Vkf43+8Mf/lDOrMk15WOTp9W2109uKq8ZeMIJJ6Rhw4aVa/N96lOfKk+qb+pf//Vfm4/TzjvvnE466aRyxGZ72lozsL39qyxFVBRFuuqqq5qPZWXpmzz68u1vf3v595prfu9735vuuuuuqvYb6BojA4G0evXqzRYfzs1UR+T1P/K01YMPPjidfvrp5bYcxFUWDX7Pe97T3Ojtuuuu6Y477kjTp08vg75Pf/rTrV7ry1/+cjkaME8lyI1Q/jo3bnnkYm5ecgCXR9ddf/316fDDD08///nPy/fNctN49NFHl++RG5b169eXj89NSke99NJL6UMf+lDZUJ188snplltuSX/3d39X1pEbnmzjxo3p2GOPLYPHvL/77LNP+d55Hb/HH3+86rUTO7J/f/u3f1sGpHk69t///d+XgWdlv/7iL/4i/eY3vymn3OQFn/MZ2NxM/f73v99sAWgAgJ6Wl5m5//77069//esOXZwt9zu33357mjFjRvn9rFmz0p//+Z+XJ1qvvvrqdOaZZ5Y92te//vWyH8u9U8vQKZ8Uzb1Rfl7uPfNU5HxS9aGHHmoOJBcsWFD2W3vttVfZJ+apr3n9wokTJ6YHH3yw7Jk++tGPlr3ct771rbKvq/TCubesyP3fbbfdVtY0dOjQdMUVV5S9WO67cqhVTf+bazjiiCPK5+b+bvTo0WVf3XL/OiL3rbn+vP95KnauKR+vb37zm61Ga/7TP/1T+djct7/44ovl/uclbFoep47oyP7l18378jd/8zflWpEf//jHm5+fj3+utfLvh/ycxYsXl38P+bFALymAsK6//voi/xho65YtX768/Do/rmLmzJnN91cM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# with sparse matrices\n", "fig, axes = plt.subplots(2, 2, figsize=(16, 8), sharex=True)\n", "\n", "sns.heatmap(beliefs[0][0].mT, ax=axes[0, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(beliefs[1][0].mT, ax=axes[1, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "sns.heatmap(smoothed_beliefs_sparse[0][0][0].mT, ax=axes[0, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(smoothed_beliefs_sparse[0][1][0].mT, ax=axes[1, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "axes[0, 0].set_title('Filtered beliefs')\n", "axes[0, 1].set_title(\"Smoothed beliefs\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compare to marginal message passing" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:27.822551Z", "iopub.status.busy": "2026-03-06T15:32:27.822425Z", "iopub.status.idle": "2026-03-06T15:32:28.734939Z", "shell.execute_reply": "2026-03-06T15:32:28.734565Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61062/1188368462.py:1: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " mmp_agents = agents = Agent(\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQMAAAGHCAYAAAAEKUSHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIoVJREFUeJzt3QmUVmX9B/BnAEVTnFIU8KhpkoIbnnBfwH1NxRKXFkUpM5FSjtucUqOysbDccMtyzz33NFe0TI1Nccklcy0VRQ0UdVR4/+d3O+/8Z4CBeWGGd4bn8znnHmbuve97n3vfOzPXr7/neWpKpVIpAQAAAABLvC7VbgAAAAAAsHgIAwEAAAAgE8JAAAAAAMiEMBAAAAAAMiEMBAAAAIBMCAMBAAAAIBPCQAAAAADIhDAQAAAAADIhDAQAAACATAgDAYAlynbbbVcs7eknP/lJqqmpSbmJcz7qqKPa/TgPPPBAcaz4tzWfw7Rp09rs2MOGDUtrrrlms3VxjDjWwpg6dWrab7/90korrVS8z5lnntlGLQUAWDjCQACgVS699NIizIjloYcemmt7qVRKq6++erH9q1/9qqvaST388MNF8PXf//632k1ZIhxzzDHprrvuSnV1demKK65Iu+22W7WbBABkrlu1GwAAdC7LLLNMuuqqq9I222zTbP2DDz6Y/v3vf6fu3bunarr77rurevwlIQwcPXp0USH3+c9/vtrN6RA++uij1K3bwj0233///WmfffZJxx57bJu3CwBgYagMBAAqsscee6Trr78+ffbZZ83WR0A4cODA1Lt37za7orNnz04ff/xxRa9ZeumliwXaMgBf2DDwrbfeEqoCAB2KMBAAqMhBBx2U3nnnnXTPPfc0rvvkk0/SDTfckL7xjW/M8zWnn3562mqrrYpx05ZddtkiNIz9WxqT7g9/+ENaf/31iyrDP//5z8W2J554Ig0ePLh4/WqrrZZ+/vOfp0suuaR4zcsvv9zimIHl8eeuu+66dOqppxavjXBnxx13TC+88EKz4//1r39NQ4cOTWussUZx7Oj2HN08ozJsYfzzn/9MX//614uANI4Zxz7wwAPT9OnT5zrnCFjXW2+94vy23HLL9OSTTxbbL7zwwtS3b9/i9XFeTc+1LF4b1zRe27Nnz/Stb30r/ec//5lnldq2226blltuuSKgioq1Z555pnF7dA8+7rjjiq/XWmutxm7hcx7z5ptvThtssEFxjeJzKn9GTcXxDzvssNSrV6/G/S6++OK59otq0iFDhhRtWmWVVYrr3dDQUNF1jjED999//7TCCisU99gPf/jDeYbIV155ZeN1WnHFFYvP4rXXXlvg+89rzMAFnV+5W310nz/33HMbr2X49NNPi+rLL3/5y8XnGm2OStumP1MAAO1FN2EAoCIxuUKEVVdffXXafffdi3V33nlnEXBFuHL22WfP9Zqzzjor7b333umb3/xmERxec801Reh2++23pz333HOuwCqCuwjIItiK40Xwsv322xdhSoy9FsHR7373u4q6JJ922mmpS5cuRXfNaOuvfvWroj1///vfm4VqH374Yfr+979fBDTjx49P55xzThFYxbZKxHnuuuuuRbA1cuTIIhCM84hzjvH4amtrm4WQt956axoxYkTxfX19fTHu4vHHH5/OO++8dOSRR6b33nuvaHMEUHGNmoZOhx56aNp0002L18WEFXG9//a3v6XHHnussSrt3nvvLT6vL33pS0WwFQFnnNvWW2+dJk+eXFznr33ta+n5558vPtszzjijuP5h5ZVXbjxejBd54403Fm3q0aNH8XlH4Pnqq68W1yxEG7bYYovGoDNeH/fI8OHD04wZM9LRRx9d7BdtiFA2XvuDH/wgrbrqqsW4ek3PrzUiCIz2x/k/+uijRZviel1++eWN+0QQfNJJJxX7fuc730lvv/12cf6DBg1qdp1aozXnF+8b5/Ltb3877bzzzunggw9ufH1c/2hrtGOzzTYrXjNx4sTic4h9AQDaVQkAoBUuueSSUjw6TJgwoTR27NhSjx49Sh9++GGxbejQoaXtt9+++PqLX/xiac8992z22vJ+ZZ988klpgw02KO2www7N1sf7d+nSpfT00083Wz9y5MhSTU1N6bHHHmtc984775RWXHHF4jUvvfRS4/rBgwcXS9m4ceOKffr3719qaGhoXH/WWWcV65988skW2xnq6+uLY7/yyiuN60455ZTitfMTbY19rr/++vnuF/t079692TlceOGFxfrevXuXZsyY0bi+rq6u2fnGdVxllVWKa/nRRx817nf77bcX+5188smN6zbeeONi37huZVOmTCmu98EHH9y4bsyYMXNd06ZtXXrppUsvvPBCs/eI9eecc07juuHDh5f69OlTmjZt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kz799NO0yy67FPcSzMtqq62WTjvttDRp0qQ0ceLEtMMOO6R99tknPf300y4YLKE8j1Ipz6RUwvMolfI82nZqSqVSqQ3fjzYSlYBRtTN27Nji+9mzZ6fVV189jRw5Mp144omuMy2KysCbbrqpqPSC1nr77beLCsF4KBs0aJALR6usuOKKacyYMWn48OGuGCyBPI+yKDyTUinPoywMz6MLR2VgB/TJJ58UlRc77bRT47ouXboU3z/yyCNVbRuwZJo+fXrjH1NYkFmzZqVrrrmmqACJ7sLAksfzKLC4eR6lEp5HF023RXw97WDatGnFjd2rV69m6+P7Z5991jUH2lRUHh999NFp6623ThtssIGrS4uefPLJIvz7+OOP0/LLL19UIa+33nquGCyBPI8Ci5PnUVrL82jbEAYCZC7GDnzqqafSQw89VO2m0MGtu+666fHHHy/+z/0NN9yQDjnkkKJruUAQAFgUnkfxPLp4CQM7oJ49e6auXbumqVOnNlsf3/fu3btq7QKWPEcddVS6/fbbi9n/YkBemJ+ll1469e3bt/h64MCBacKECemss85KF154oQsHSxjPo8Di4nmUSngebRvGDOygN3f8R9Z9993XrGw6vjc2E9AWYu6oePCKbp73339/WmuttVxYKhZ/mxoaGlw5WAJ5HgXam+dR2oLn0YWjMrCDGjVqVNH9apNNNkmbbbZZOvPMM4uB2g899NBqN40O6IMPPkgvvPBC4/cvvfRS0ZUvJoNYY401qto2Om5XjKuuuirdcsstqUePHunNN98s1tfW1qZll1222s2jA6qrq0u777578Tvl/fffL+6fBx54IN11113VbhrQTjyPUinPpFTC8yiV8jzadmpKEcfTIY0dOzaNGTOm+I/0jTfeOJ199tlp8803r3az6IDiP8i33377udZHoHzppZdWpU10bDU1NfNcf8kll6Rhw4Yt9vbQ8Q0fPryoUH/jjTeK0HijjTZKJ5xwQtp5552r3TSgHXkepRKeSamE51Eq5Xm07QgDAQAAACATxgwEAAAAgEwIAwEAAAAgE8JAAAAAAMiEMBAAAAAAMiEMBAAAAIBMCAMBAAAAIBPCQAAAAADIhDAQAAAAADIhDAQAAACATAgDAQAAACATwkAAAAAASHn4P3KzCFUZjPCeAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mmp_agents = agents = Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " E=E,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " control_fac_idx=None,\n", " categorical_obs=True,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " inference_algo=\"mmp\",\n", " num_iter=16,\n", " batch_size=n_batch,\n", ")\n", "\n", "mmp_obs = [jnp.moveaxis(obs[0], 0, 1)]\n", "post_marg_beliefs = mmp_agents.infer_states(mmp_obs, mmp_agents.D, past_actions=jnp.stack(action_hist, 1))\n", "\n", "#with sparse matrices\n", "fig, axes = plt.subplots(1, 2, figsize=(16, 4), sharex=True)\n", "\n", "sns.heatmap(post_marg_beliefs[0][0].mT, ax=axes[0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(post_marg_beliefs[1][0].mT, ax=axes[1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "fig.suptitle('Marginal smoothed beliefs');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compare to variational message passing" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:28.736227Z", "iopub.status.busy": "2026-03-06T15:32:28.736142Z", "iopub.status.idle": "2026-03-06T15:32:28.887900Z", "shell.execute_reply": "2026-03-06T15:32:28.887623Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_61062/4088240323.py:1: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " vmp_agents = agents = Agent(\n" ] }, { "data": { "text/plain": [ "Text(0.5, 0.98, 'VMP smoothed beliefs')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vmp_agents = agents = Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " E=E,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " control_fac_idx=None,\n", " categorical_obs=True,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " inference_algo=\"vmp\",\n", " num_iter=16,\n", " batch_size=n_batch,\n", ")\n", "\n", "vmp_obs = [jnp.moveaxis(obs[0], 0, 1)]\n", "post_vmp_beliefs = vmp_agents.infer_states(vmp_obs, vmp_agents.D, past_actions=jnp.stack(action_hist, 1))\n", "\n", "#with sparse matrices\n", "fig, axes = plt.subplots(1, 2, figsize=(16, 4), sharex=True)\n", "\n", "sns.heatmap(post_vmp_beliefs[0][0].mT, ax=axes[0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(post_vmp_beliefs[1][0].mT, ax=axes[1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "fig.suptitle('VMP smoothed beliefs')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Associative-scan HMM (B-native, single-factor reduction)\n", "\n", "The associative-scan implementation expects a single hidden-state factor. For this multi-factor model, we collapse the two factors into a joint state space via a Cartesian product and run exact filtering/smoothing using the **B-native** (column-stochastic) formulation, then marginalize back to factor-wise beliefs for visualization.\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-03-06T15:32:28.889131Z", "iopub.status.busy": "2026-03-06T15:32:28.889058Z", "iopub.status.idle": "2026-03-06T15:32:31.917104Z", "shell.execute_reply": "2026-03-06T15:32:31.916807Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQMAAAKqCAYAAACO80jyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPY1JREFUeJzt3QmYXFWZP+DTSTBgIHFkTUQUBxEUCBhFFgGVbRxkc0FxZmQbEI2MwiAQZ0ZEhTADyiKyyAi444aijsoA4o6SBI0LAiqoOKwRTAChIUn9n+/+n9tWd6q7q3pJd+d73+cpSFdVV5176nbd7/7uued2NRqNRgEAAAAA1niTxroBAAAAAMDqIQwEAAAAgCSEgQAAAACQhDAQAAAAAJIQBgIAAABAEsJAAAAAAEhCGAgAAAAASQgDAQAAACAJYSAAAAAAJCEMJKVvf/vbpaurq/r/SIrXfM973jOir7km+vWvf1322WefMmPGjKrPvvzlL5crrrii+vfvfve7nue97GUvq24TRbvtjeV829veNmLvG30Wrxl9WIv1MO4bqk984hNlq622KmuttVZ52tOeNuw2rly5smyzzTbl9NNPLxPZaP+Nf/Ob3yzrrrtueeCBB0btPQAYHepLRsrhhx9e1QOrw7Of/ezq/dqpNc8+++xR/XuJdkR7huqss84qz3nOc8rkyZPL9ttvP+w2PvLII2WjjTYqn/rUp8pE1Wo/YaRdfPHFZbPNNivd3d2j9h6MPGEgw3bhhRdWXzAveclLUvTm17/+dYHfMB122GHl5z//eRUMRej0ohe9qK3fu/vuu6u+/+lPfzrcJjCAW2+9tSrG/vZv/7Zceuml5SMf+ciw++szn/lMueuuu3qFoHUA3HyLguvlL395+cY3vpHyb/zv/u7vyhZbbFHmz58/Ju8PMF6oL1nT/eUvf6nqjZEenJDV//7v/5aTTjqp7LrrruXyyy8vZ5xxxrBf87zzzivrrbdeecMb3rDKAff6NmnSpDJz5szyqle9qvzoRz8qY+XTn/50Offcc8fkvWO/4YknniiXXHLJmLw/QzNliL8HPeJISRzBuemmm8pvfvObakd2vNt9993LY489Vp7ylKcMKSj48Ic/3DIsiNecMsWf1UCij2688cbyb//2b72CoX/6p3+qNrRTp04dMAw87bTTqvVtJI72rcn+/d//vZxyyilD+t0oSmMkXxRAI/X3HEdq4/ON0aB9vfe97y2bb755aTQa5b777qtCwr//+78vX/3qV6vCanUb67/xN7/5zeXEE0+s1vUoQAEyUl/+lfpyzQ0DY1sfJtKZMKMpDkJHDToU3/rWt6pg7qMf/eiQ9vH6evLJJ6ta+Pjjj69GGvZ10UUXVaM3o71xwDvaHvuYsU88FvspEQb+4he/KO94xzt63f+sZz2r+g6Js31Gy9prr10N9vjgBz9YjjvuuGGdncTqY2Qgw3LnnXeWH/7wh9Uf/oYbbjhhhlDHhiK+tOL/IyleUxg4sPr0x76nnsZGNvpvLDYejz76aFnTxHoY/TkU999/f/X/kTg9OPzkJz8pixcvLoccckjLx1/5yleWf/zHf6wC4QjBvve971UFS4wmHG9Wx9/4a17zmuo0i89//vOj+j4A45X6sjf1JVlE/TfQwIDB6td11llnRILA8LWvfa3ab+mvfn3ta19b1a9vetObqkEO//M//1MFiOOtfot9q/gOaRVojqTop9///vflhhtuGNX3YeQIAxmWCP/+5m/+puy3337VF2J/YeCVV15Z5syZU41ymT59etl2222rIy21+OKMI2PPfe5zqy+r9ddfv7z0pS8t11577SpHfHbbbbcybdq0Kqg48MADy69+9atV3u///u//ylFHHVVmzZpVbVBi1NFb3vKWavhyf3NURADxute9rprvIH7nmc98ZnUkKI6kNA+BjhFDoXl4eKv5xL7whS9UP3/nO99ZpX0xhDoei6M3zadmRh8+/elPr/ogTp39yle+0tbnMFj/hj//+c/V8sSouli+TTfdtNp4LVmypHo8+ubd73539Toxeiv6OPq67xd685whcfponEoar/fiF7+4LFiwYMB2Rt/E0anwzne+s3qdel6QVnMGNovPKt4jHHHEET193zz/xY9//OPqNMto/1Of+tSyxx57lB/84AertCF+75ZbbilvfOMbq/U31rXaJz/5yaoPopiIzyJGs8XRvr7qZY/n7bjjjtX606n4e3ne855Xfd7xnt/97ndbrstHHnlk2Xjjjat+fsELXlAuu+yyQV+7vzkDB1u++DxOPfXU6t8R8Dev0wsXLiz77rtv2WCDDarfj7+raNtgYk7IKMziaGk74m87Xr+d0K3+W/7c5z5XnXYe63X055577lmNVG42Uf7G41Tp7bbbrlx99dVt9RfAmkZ9qb7spL5sd1+inofvD3/4Q3XmQfz7Gc94Rs92P6awecUrXlHVwFGvxkirvu64446qlohtedSaO+20UxUCtQqmYl8k6rdoz+zZs8vHPvaxnsej3o06K0S763qj71kJUQcedNBBVVvj+XHQdMWKFb2eEyPT4vTQqBHjveI94yyDhx56qNfz4gyM97///VWtFG2PaVl++ctflk6dc845Vf9ErRa1dnOtM9z9mlZzBrazfNF3cWpwHODvu48Q60CsC1FfRj9G7f2ud72rrfo12hLrYjs22WST6v/t1K/1fk/sp5xwwgnVZxvr3cEHH7zKvNFRD8a+dr1fG+153/ve12s9iJGlsR5GGFcvf92PfecMjH24+Dme29e8efOqmr25b9vZvwqxfxGft/p14nA+I8Mu1l796ldXXxqHHnpoNVw6Nth1aFN/AcdjsXP+n//5n9V9EeDFl8jb3/726ufY8MUcWf/8z/9cBSvLli2rgoebb7657L333tVzrrvuumoEUUwKG8+PHfgPfehD1bwQ8bz6Cy9OJY3XiPDrmGOOqS6CEBvS2HGP4fj9HS2KozjxeISGUUDEEO94/T/+8Y89R3hiwxOvH8sUc90NJL60Y4MTIUV8aTb77Gc/W23Q4oIKITbEsRxRkMSpnbExiN+Ljf8Xv/jFasPQn3b6Nya/jWAv7o/w5oUvfGEVAsZGOZYvwp3o8//+7/+uXuvoo48uDz/8cDXMPsKfVsPdo0CK50SfxAblv/7rv6p1IYqk/oahx+OxIY4AJt4nTgVtd3LkrbfeujqdNALL+FxjecIuu+zSExTH+hEbogizYtRnFAVR1EUIFOtEsyjkomCM+USiOAoRJv3Hf/xHdWQr1sXYGMc6ECFWjG6rR8pFv8Ryx3vHUPxY5gMOOKDaAEbA1I4IkGI9+Jd/+Zdqwx5zI8WGNvq6Xi/ilNkoMusLjkShEHPpRXEZn1ff0wAG087yRbH18Y9/vHzpS1/qOf0hgqkoauOiL9GGWEfjuVFcXHXVVYO+b4wejmXqb71YunRptT7G5xDvE22KdTaOtrbrzDPPrD7zKJLj9WJ9/Id/+IeqgJmIf+OxHkcRCpCR+rJ/6svW2tmXCBGgRL0YtU/UCrGuRY0V2+UY3RW1Q9SrcUGEOGi+8847Vwc/67osar+oJaJ+i1oiAr6oAWM/o96Wxz5KhDNxUDJeO34/6owIumL/JOrzqKeizoqaJH4v3jNEzdXc1qjDY172CHBiX+gDH/hAFQbF79WidomgJw6WR7tiZO0FF1xQ1XaxP1DXX1FDRxgY9Xfcom+itqsHS7QjasSo/+fOnVsef/zxavBB1NoRpEZIN9z9mlbaWb6o2eJAfdR2sT8T4rOKtkTwG/0a+xFRc8fn0irMalW/xj5Tfx588MGesDL2NSOgi7Cyv5GErcQptTEwIfZdoq6OOjzWmagja7HsUW9GaBj/j32e+CxjHY9peEKsu1H/Rk0bYW3obx8r2hdzK8ZnEoMzmsV9sU5Em4ayfxX91U7fMk40YIgWLlwYCUrj2muvrX5euXJlY9NNN228/e1v7/W8+Hn69OmN5cuX9/tas2fPbuy3334Dvt/222/f2GijjRp/+tOfeu5bvHhxY9KkSY03velNPffFv+O+BQsWrPIa0cZwww03VG2P/9f+8pe/rPL8+fPnN7q6uhq///3ve+6bO3du9butxP2nnnpqz8+HHnpo1ebmZb/nnnuq9r33ve/tuW/PPfdsbLvtto3HH3+8V1t32WWXxnOf+9wB+6Wd/n33u99dte2qq67qt0/i97u7u3s99tBDDzU23njjxpFHHtlz35133lm91vrrr9948MEHe+6/+uqrq/u/+tWvDtje+vfPOuusXvdffvnl1f3xeG2PPfaobrX4TOM58dy+yxD9tO+++/YsT/2Zbr755o2999675774fOI14rNp9rvf/a4xefLkxumnn97r/p///OeNKVOm9Nz/xBNPVJ9prI/N/fWRj3yket3m9vYnnhe3+BuqxTq29tprNw4++OCe+4466qjGzJkzG0uWLOn1+294wxsaM2bM6Fln6z5t7pd6OTtdvubffeCBB3ru+9KXvlTd1+rvajDxvfCa17xmlfvrz7zvberUqY0rrriirdeu/5a33nrrXp/HeeedV90fyzcR/8bPOOOM6r3uu+++tvoBYE2hvlyV+nLw+rKdfYnDDjus6svYxjbXuuuss05VC1x55ZU99996662r9Ps73vGO6r7vfe97Pfc9/PDDVa357Gc/u7FixYrqvnPPPbd63ic/+cme50X9uPPOOzfWXXfdxrJly6r7os7q+x5929pcS4QddtihMWfOnJ6foy3xvE996lO9nvfNb36z1/33339/4ylP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8/UYrIHUo8DqpB6lXerRkSEMBEgu5g78xS9+Ub7//e+PdVMY5573vOeVn/70p9WR+y984QvlsMMOq04tFwgCAMOhHkU9unoJA8ehDTbYoEyePLncd999ve6PnzfZZJMxaxew5nnb295Wvva1r1VX/4sJeWEgT3nKU8oWW2xR/XvOnDllwYIF5bzzziuXXHKJjoM1jHoUWF3Uo3RCPToyzBk4Tlfu2Mm6/vrrew2bjp/NzQSMhLh2VBRecZrnt771rbL55pvrWDoW26bu7m49B2sg9Sgw2tSjjAT16NAYGThOnXDCCdXpVy960YvKjjvuWM4999xqovYjjjhirJvGOPTII4+U3/zmNz0/33nnndWpfHExiM0222xM28b4PRXj05/+dLn66qvLeuutV+69997q/hkzZpR11llnrJvHODRv3rzyyle+svpOefjhh6v159vf/na55pprxrppwChRj9IpNSmdUI/SKfXoyOlqRBzPuHTBBReUs846q9pJ33777cv5559fXvKSl4x1sxiHYof85S9/+Sr3R6B8xRVXjEmbGN+6urpa3n/55ZeXww8/fLW3h/HvqKOOqkao33PPPVVovN1225WTTz657L333mPdNGAUqUfphJqUTqhH6ZR6dOQIAwEAAAAgCXMGAgAAAEASwkAAAAAASEIYCAAAAABJCAMBAAAAIAlhIAAAAAAkIQwEAAAAgCSEgQAAAACQhDAQAAAAAJIQBgIAAABAEsJAAAAAAEhCGAgAAAAASQgDAQAAAKDk8P8AW5+/Z0YKfMUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "batch_idx = 0\n", "T = obs[0].shape[0]\n", "s1, s2 = num_states\n", "\n", "# single-modality observations for one batch\n", "obs_single = obs[0][:, batch_idx, :] # (T, obs_dim)\n", "\n", "# collapse A over factors into a single-state emission matrix\n", "A0 = A[0][batch_idx] # (obs_dim, s1, s2)\n", "A_big = A0.reshape(num_obs[0], s1 * s2)\n", "log_likelihoods = obs_single @ log_stable(A_big)\n", "\n", "# build joint transition (column-stochastic) via Kronecker product\n", "B1 = B[0][batch_idx, :, :, 0] # (s1,s1) column-stochastic\n", "B2 = B[1][batch_idx, :, :, 0] # (s2,s2) column-stochastic\n", "B_big = jnp.kron(B1, B2)\n", "\n", "# joint prior\n", "D1 = D[0][batch_idx]\n", "D2 = D[1][batch_idx]\n", "prior_big = jnp.kron(D1, D2)\n", "\n", "mll, filt_big, pred_big, smooth_big, cond_big = hmm_smoother_scan_colstoch(\n", " prior_big, B_big, log_likelihoods\n", ")\n", "\n", "# reshape joint beliefs to factor-wise marginals\n", "filt_joint = filt_big.reshape(T, s1, s2)\n", "smooth_joint = smooth_big.reshape(T, s1, s2)\n", "\n", "filt_fac1 = filt_joint.sum(axis=2)\n", "filt_fac2 = filt_joint.sum(axis=1)\n", "smooth_fac1 = smooth_joint.sum(axis=2)\n", "smooth_fac2 = smooth_joint.sum(axis=1)\n", "\n", "fig, axes = plt.subplots(2, 2, figsize=(16, 8), sharex=True)\n", "sns.heatmap(filt_fac1.mT, ax=axes[0, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(filt_fac2.mT, ax=axes[1, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "sns.heatmap(smooth_fac1.mT, ax=axes[0, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(smooth_fac2.mT, ax=axes[1, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "axes[0, 0].set_title('Associative scan filtered beliefs (B-native)')\n", "axes[0, 1].set_title('Associative scan smoothed beliefs (B-native)')\n", "plt.show()\n" ] } ], "metadata": { "kernelspec": { "display_name": "pymdp_dev_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/learning/learning_gridworld.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "from jax import nn, vmap, lax, jit\n", "from jax import numpy as jnp, random as jr\n", "from jax import tree_util as jtu\n", "from jax.scipy.special import gammaln, digamma\n", "\n", "import numpy as np\n", "\n", "from pymdp.envs import GridWorld, rollout\n", "from pymdp.agent import Agent\n", "from pymdp.maths import dirichlet_expected_value\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grid world generative model\n", " \n", "Here we will explore learning of the generative model inside a simple grid 7x7 world environment, where at each state agent can move into 4 possible directions. The agent can explore the environment for 100 time steps, after which it is reaturned to the original position. We will start first with an example where likelihood is fixed, and state transitions are unkown. Next we will explore the example where likelihood is unknown but the state transitions are known, and finally we will look at learning under joint uncertainty over likelihood and transitions (we would expect this case not to work in general with flat priors on both components). \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# size of the grid world\n", "grid_shape = (7, 7)\n", "\n", "# number of agents\n", "batch_size = 20\n", "\n", "env = GridWorld(shape=grid_shape, initial_position=(3,3), include_stay=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define KL divergence between Dirichlet distributions" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@jit\n", "def kl_div_dirichlet(alpha1, alpha2):\n", " alpha0 = alpha1.sum(1, keepdims=True)\n", " kl = gammaln(alpha0.squeeze(1)) - gammaln(alpha2.sum(1))\n", " kl += jnp.sum(gammaln(alpha2) - gammaln(alpha1) + (alpha1 - alpha2) * (digamma(alpha1) - digamma(alpha0)), 1)\n", "\n", " return kl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialize different sets of agents using `Agent()` class, use a different `alpha` (action selection temperature) for each set" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, the agents have to learn B matrix, with A matrix being fixed to the true observation mapping of generative process, and flat prior oevr initial hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# create agent with A matrix being fixed to the A of the generative process\n", "num_obs = [a.shape[0] for a in env.A]\n", "num_states = [b.shape[0] for b in env.B]\n", "\n", "_A = [jnp.array(a) for a in env.A]\n", "C = [jnp.zeros(num_obs[0])]\n", "pB = [jnp.ones_like(env.B[0]) / num_states[0]]\n", "_B = jtu.tree_map(lambda b: dirichlet_expected_value(b), pB)\n", "_D = [jnp.ones(num_states[0])/num_states[0]] # flat prior over initial states\n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " _B,\n", " C,\n", " _D,\n", " E=None,\n", " pA=None,\n", " pB=pB,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=False,\n", " learn_B=True,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the B tensors are performed at the end of each block.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pB_ground_truth = 1e4 * env.B[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 40\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "divs = {i : [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1, 2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs[i].append(kl_div_dirichlet(last['agent'].pB[0], pB_ground_truth).sum(-1).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHpCAYAAACful8UAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QeUZWWVN/z/yefmULlzk3MQJKkIigKGeTEwYAIRnE9HHBBRQRBFUcaA4rw6ssSAOjogr4ojKsqggOQsQWg6d1d35ZvTyd96nqKq63aA7qab6qr+/9a6q+qe+5xT51aXLvbd+9lbiaIoAhERERERERHtcOqOvyQRERERERERCQy6iYiIiIiIiHYSBt1EREREREREOwmDbiIiIiIiIqKdhEE3ERERERER0U7CoJuIiIiIiIhoJ2HQTURERERERLSTMOgmIiIiIiIi2kkYdBMRERERERHtJAy6iYiIiIiIiHYSBt0v4e6778bb3/52zJkzB4qi4JZbbtnma0RRhG984xvYZ599YFkW5s6diy9/+cs75X6JiIiIiIho16FP9w3s6ur1Og499FB86EMfwjvf+c7tusYFF1yAP//5zzLwPvjgg1EoFOSDiIiIiIiIZjclEmlY2ioi0/2b3/wGp5122uQxx3Fw2WWX4b//+79RKpVw0EEH4atf/SpOOOEE+fqzzz6LQw45BE8//TT23Xffabx7IiIiIiIieqWxvPxlOv/883H//ffjxhtvxJNPPonTTz8dp5xyCpYuXSpf/93vfoc99tgDt956KxYvXoxFixbhvPPOY6abiIiIiIhoN8Cg+2VYs2YNfvzjH+Pmm2/G6173Ouy55564+OKL8drXvlYeF1asWIHVq1fLNT/96U9xww034NFHH8W73/3u6b59IiIiIiIi2sm4p/tleOqppxAEgWyQNpUoOe/o6JDfh2Eon4uAe2LdD3/4QxxxxBFYsmQJS86JiIiIiIhmMQbdL0OtVoOmaTJzLb5OlUwm5de+vj7out4WmO+///6TmXIG3URERERERLMXg+6X4fDDD5eZ7uHhYVlevjmvec1r4Ps+li9fLsvPheeff15+Xbhw4St6v0RERERERPTKYvfyrchmL1u2bDLI/uY3v4kTTzwR+XweCxYswPvf/37ce++9uOaaa+TrIyMjuOOOO2TH8re+9a2yvPzVr361zHxfe+218vnHPvYxpNNpOUaMiIiIiIiIZi8G3S/hzjvvlEH2xs4++2zZFM3zPFx11VVyz/a6devQ2dmJY445BldeeaWcyS2sX78eH//4x2WQnUgkcOqpp8ogXQTuRERERERENHsx6CYiIiIiIiLaSTgyjIiIiIiIiGgnYSO1zRD7rkVJeCqVgqIo0307REREREREtIsRRePVahVz5syBqm45n82gezNEwD1//vzpvg0iIiIiIiLaxa1duxbz5s3b4usMujdDZLgnfnmiyzgRERERERHRVJVKRSZrJ+LHLWHQvRkTJeUi4GbQTURERERERFvyUluS2UiNiIiIiIiIaCdh0E1ERERERES0kzDoJiIiIiIiItpJpnVP9913342vf/3rePTRRzEwMIDf/OY3OO2007a4/oMf/CB+8pOfbHL8gAMOwDPPPCO//8IXvoArr7yy7fV9990Xzz333E54B0RERERENBtHCLuuO923QdPMMAxomjazg+56vY5DDz0UH/rQh/DOd77zJdd/+9vfxr//+79PPvd9X55/+umnt6078MAD8b//+7+Tz3Wd/eKIiIiIiOiliWB75cqVMvAmymaz6O3tfclmaS9mWqPRU089VT62ViaTkY8Jt9xyC4rFIs4555y2dSLIFr+YreU4jnxMbf1ORERERES7lyiKZAWuyG6KUVCqyt24u/PfQqPRwPDwsHze19e33dea0SngH/7whzjppJOwcOHCtuNLly7FnDlzYNs2jj32WFx99dVYsGDBFq8jXt+4JJ2IiIiIiHYvopJWBFoilojH49N9OzTNYrGY/CoC7+7u7u0uNZ+xH92sX78ef/zjH3Heeee1HT/66KNxww034LbbbsP3vvc9WRryute9DtVqdYvXuvTSS1Eulycfa9eufQXeARERERER7UqCIJBfTdOc7luhXcTEhy+e5+1+mW7RUE3U12/ceG1qufohhxwig3CRCf/lL3+Jc889d7PXsixLPoiIiIiIiF7O/l2aXZQd8LegztT6+h/96Ef4wAc+8JKfQonAfJ999sGyZctesfsjIiIiIiIimrFB91133SWD6C1lrqeq1WpYvnz5y9r4TkRERERERDTjgm4RED/xxBPyIYj91+L7NWvWTO61PuusszbbQE2UjR900EGbvHbxxRfLoHzVqlW477778I53vENueH/Pe97zCrwjIiIi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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 1, figsize=(10, 5), sharex=True, sharey=True)\n", "for i in range(len(agents)):\n", " p = axes.plot(jnp.stack(divs[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes.plot(jnp.stack(divs[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes.legend(title='alpha')\n", "axes.set_ylabel('KL divergence')\n", "axes.set_xlabel('epoch')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned B tensor alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABiUAAAMWCAYAAACeLYXeAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QucTfX+//HPHgxymXJLwhAOUe73/KISOVK6SOqEcdwqhSkxKoPSpCSKqByli5IK5dpEOO7iSCXKXQ6hi3CY6/4/vt/+e5qx19Jc9mV993o9H4/1YH9n7zXfQe+125/1+X49Xq/XKwAAAAAAAAAAAEEWFexvAAAAAAAAAAAAoFCUAAAAAAAAAAAAIUFRAgAAAAAAAAAAhARFCQAAAAAAAAAAEBIUJQAAAAAAAAAAQEhQlAAAAAAAAAAAACFBUQIAAAAAAAAAAIQERQkAAAAAAAAAABASFCUAAAAAAAAAAEBIUJQAAAAwSLt27fSR39deddVVAZ8TAAAAgJx++uknufPOO6Vs2bLi8Xhk0qRJ4Z4S4BgUJQCXGj16tL4onjhxwvLr6kOr/H7oBQDImzfffFNnsu8oXLiwXH755dK7d285fPhwyOfz3//+V18ntm3bFvLvDQCmZnexYsWkUqVK0rFjR3nppZfk1KlT4Z4iACCf2f7ll18W+FxDhw6VZcuWSUJCgrz99tty0003yeLFi/X7bMDtCod7AgAAAPjD2LFjpXr16nLu3DnZsGGD/p+iNWvWyDfffKM/7FI+++yzkBQlxowZI9WqVZOGDRsG/fsBQCRkd1pamhw9elRWrlwpQ4YMkYkTJ8onn3wi9evXD/cUAQBhsGLFCrn11lvl0UcfzRqbMmWKTJ06lcIEXI+iBAAAgEN06tRJmjZtqn/ft29fKVeunIwfP15/qHXXXXfp8ejo6DDPEgBgl92KuiNWfRB18803yy233CLfffedFC9ePKxzBACE3rFjx+Tiiy8O9zQAR2L5JgB/Sd3tpdoX58yZIyNHjpSKFStKiRIl9P9kHTp0KNzTA4CI9X//93/61z179lxwT4kDBw7oTFbZXKFChaxWcZXdKsPPt2PHDrnuuuvkoosu0stEPffcc1lfU89v1qyZ/n1cXFzWsiSqawMAkDvXX3+9PPnkkzqf33nnnaxxVaxQ2a7yWn1Qpe6gVUULn+3bt+vMVcVony1btuixxo0b+xVDWrRokfVYdbepQojqsGvevLnusLviiivkrbfeCvrPCwBuopZX7dOnj1x66aVStGhRqVevnsycOdNvCSiv16u7Inzvp9XSrOqxkn35P8CNKEoAyLVx48bJokWLZPjw4fLwww9LcnKytG/fXs6ePRvuqQFARNq/f7/+9ZJLLrF9zpkzZ/SHX59//rnO5scff1zWrVuns9rKr7/+qtezbdCggbzwwgtSp04d/dwlS5bor1955ZV6KRKlf//+ev1bdVx77bVB+RkBIFLdd999OZbdUzmt9ptQd86qZTvi4+N1Xl9zzTVZea/2dVPFitWrV2ed59///rdERUXJV199Jb///rsey8zM1K89P5t3796tN1W98cYbdcar64f6EOzbb78N4U8OAJG9eXXLli11pg8aNEgmT54sNWvWlH/+859ZG1mrbFbvnxWVx7730wMGDNCPFd+Y73mA27B8E4Bc++WXX/SdXKVKldKP1d1aajmR119/XX8QBgAomJMnT8qJEyf0nhIbN27U+zqou6/Una92Xn31Vdm7d6/Mnz9f33GrqP/hadSoke1+EequWd+HZep/oGJjY+Vf//qXvutW3fGlfh01apS0atVK/vGPfwTppwWAyFa5cmWJiYnJ6nYbNmyYlClTRtavX69/Vbp27arzOjExUWbNmqWLD6pIoQoRPur36nkLFizQhQhVWPYVKHwddT67du3SBQ3fuHqvXqVKFXnjjTdkwoQJIf35ASASqRuAMjIy5Ouvv5ayZcvqsYEDB0qPHj10wVm9D1ddaupQ77f/9re/5Xg/rR6rGzx5jw23o1MCQK717NkzqyChqLuwLrvsMlm8eHFY5wUAkUJ1n5UvX15/gKQyVi3voZbwUB9s2Vm6dKlegkkt3+Sjluzo16+f5fNLliyZ43+C1B4VapkPVdgAAASWytxTp07JkSNHZNu2bbprwVeQUNQm2Oqu2ezvp1VBYevWrboTTlHLMf3973+Xhg0bZhUr1K9qyY82bdrk+H5169bNUahQ15TatWuT8QAQAGo5po8++ki6dOmif69uJvIdqhNO3WCk8hvAX6NTAoCt89c2rFWrlt/XVZuir90cAFAwao1ZdfeU+h8atS6tuttVdUpciFqvvEaNGn6ZrfLZiipwnP9ctbyHWsccABBYp0+f1nv9qKxWVIHgfGrZPLUP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x+qcurNj8ODBocL497//HWrQoEGof//+oZMnT0akQnzffffpv2uqhbRr1676z6Vly5a6/VW126kqekHb7dRdIVl3VmT59ddfdXvftddeq58r6HupPv+5557TH6uWwLPvmnnvvff030k3vo8mvpdwJrsV8vt35Hc48js33kfkFfkdjvz2zr978tsb7yO8k9/RzG6F/PbOv3vy2xvvo1dQlPAZ1SKo1gNUR1a7YCTt27dPrwN44sSJQo+VmZkZeuaZZ0I33nhjaPz48brdSV241QW1XLlyoV69ehX461xxxRU6EM+WdWFVQVnQIP7+++/1/FSL41NPPaXbsVQYqe9FnVPr6r3xxhsFGvv06dOhAQMGhOLj4/X81DqA6lAfq3MDBw7Uryms3377LfTAAw/oi79aM7KwYaxaAK+//nr9Z6GC+OjRo/qikbU+n/o627dvL9DY9erVC3300Udh59Ual+rC2qhRowK/l2q9w8TExNCYMWN022j58uX1D3zvvPNOaPTo0XpNwGeffTZi76P684jk+2jaewnnslshv8lvK+S3M/lt0vuIcyO//0B+e+ffPfntjfcR3snvaGa3Qn575989+e2N99ErKErAlx599NFQx44dLZ9TF1ZVrS/oOnqKCpa77rorVKZMmey7K9T6capavHDhwlBhqYrwJ598EpozZ44+1Mc5K8aR8sEHH4SGDh0atr5epKg19L755hv9Z15QDz74oG11WVX8VWW6oBfVrAurqmafvdnRRRddFJo8eXKoMNR7pjY6y3of1cfReB+z3ku1fqSb30sgL8jvvCG/vZHfZDe8hPzOG/Kb/M4L8huxRH7nDflNfucF+f0HnRpOLyEFxJpay+23336ThIQE2+f3798vNWrUKNTXUf+8Dh06JMFgUMqXLy/FihUr1HgI98svv8h///tfueyyy2zXF9ywYYO0a9euUF9HrbO4c+dO/V6q9TNr1qwpkRYfH6/XWLz00ksjPna0x4/23IEs5Ld3kN/eHhs4G/ntHeS3t8cGzkZ+ewf57e2xTVPU6QkATlCbKdldUJUDBw7I2LFjZdasWYX6OmqDoIoVK+Y6t2/fPhkzZkyBxz516pTeHKts2bLSoEGDXM+dPn1a3n33XenRo4dvxr7gggvk4MGD8sYbb0irVq2kfv36elOlKVOm6I2a7rvvPr0BV0H95z//kS+//FJat24tV111lR772WefLdTYSUlJlufVplATJkyQcuXK6ceTJk0q0JyjOX605w78GfLbO2OT394YG8gr8ts7Y5Pf3hgbyCvy2ztjk9/eGNsr6JQALKiqZZMmTXRYuGnsrVu3SseOHWXv3r36gt2mTRv5+9//LlWqVNHP//jjj/rjSI09d+5cXdV289hLly6Vm2++WUqXLq3v3li4cKG+ODdq1EhX5VeuXCn//Oc/C3Txi9bYcXFxeozzzz8/13k1XrNmzaRUqVL6z+mTTz7J95yjPX605w4UFvlNfkdzbFPzleyGCchv8juaY5uaseQ3TEB+k9/RHNvUjCW/8yDHUk6Ab6g14s51vPjiiwVeRy+aY6tNpLp06RI6fPhwaNu2bfrjWrVqhfbs2ZO9kY7fxlabMT322GP6Y7WZ1wUXXBAaNWpU9vMjR47Umwu5aeyUlBT9/as1EHMqWrRooTdTivb40Z478GfIb++MTX57Y2wgr8hv74xNfntjbCCvyG/vjE1+e2Nsr6AoAV/K2u3+7M13ch4FDflojl2hQoXQpk2bsh8Hg8HQgAEDQtWrV9eb5RTm4mTq2AkJCfpCrWRmZuqA37BhQ/bzagOhihUrum7stWvXhi655JLQww8/HDpz5kzEL07RHD/acwfOhfz2ztjkt3fGBvKC/PbO2OS3d8YG8oL89s7Y5Ld3xvaCuLx0UwBeo9reFixYoFvIrA61sY8bx1brCqr1HLOoVq8ZM2ZI165d9UZEqs3Pb2NnjZfVHleiRAlJTEzMfq5MmTJy7Ngx143dvHlzvUak2gBKte59++232V8rEqI5frTnDpwL+e2dsbPGU8hvs8cG8oL89s7YWeMp5LfZYwN5QX57Z+ys8RTy2+yxvYCiBHypadOmOhjsqJAo6HYr0RxbbUK0bt26sPPTpk3Ta/fddNNNBRrX5LFr1qwp27Zty368evVqqV69evZjtQ5j1tqLbhpbUWstzp49W5KTk6VDhw4RX4MzmuNHe+6AHfLbO2OT394aG/gz5Ld3xia/vTU28GfIb++MTX57a2zjOd2qATjhs88+Cy1ZssT2+RMnToRWrFjhurHHjx8f6ty5s+3zAwcO1O2Nfhp7xowZocWLF9s+n5ycHPrLX/7iurHPtm/fvtCiRYv0349oiOb40Z47kBP57Z2xyW/vjg1YIb+9Mzb57d2xASvkt3fGJr+9O7aJ9N9ipwsjAAAAAAAAAADA+1i+CQAAAAAAAAAAxARFCQAAAAAAAAAAEBMUJQAAAAAAAAAAQExQlAAAAAAAAAAAADFBUQIAAAAAAAAAAMQERQkAAAAAAAAAABATFCUAAAAAAAAAAEBMUJQAAAAAAAAAAAASC/8f8bOpda5I27sAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "num_actions = env.B[0].shape[-1]\n", "base_labels = [\"Up\", \"Right\", \"Down\", \"Left\", \"Stay\"]\n", "action_labels = base_labels[:num_actions]\n", "\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "\n", "fig, axes = plt.subplots(len(agents)+1, num_actions, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "\n", "for i in range(num_actions):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.B[0][0, ..., i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.B[0][..., i], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(action_labels[i])\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true B', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, the agents have to learn A matrix, with B matrix being fixed to the true observation mapping of generative process, and precise (and accurate) prior over initial hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = [jnp.zeros((batch_size, num_obs[0]))]\n", "pA = [jnp.ones_like(a) / a.shape[0] for a in env.A]\n", "_A = jtu.tree_map(lambda a: dirichlet_expected_value(a), pA)\n", "B = [jnp.array(b) for b in env.B]\n", "D = [jnp.array(d) for d in env.D] \n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " B,\n", " C,\n", " D,\n", " E=None,\n", " pA=pA,\n", " pB=None,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=True,\n", " learn_B=False,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the A matrix are performed at the end of each block.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pA_ground_truth = 1e4 * env.A[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 20\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "\n", "divs = {i: [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1, 2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs[i].append(kl_div_dirichlet(agents[i].pA[0], pA_ground_truth).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Qe0ZGWVN/z/yZWrbr63b2douslIBhUQEFD0HRRnUBQQUV99xTGCCWVERxR11PlMA6g4ioKM4iggiESRKElSQzedu2++latOPt96nuq6favj7aabTv/fWrUqPXXq1O3C5a69n72VKIoiEBEREREREdF2p27/QxIRERERERGRwKCbiIiIiIiIaAdh0E1ERERERES0gzDoJiIiIiIiItpBGHQTERERERER7SAMuomIiIiIiIh2EAbdRERERERERDsIg24iIiIiIiKiHUTfUQemDYVhiDVr1iCdTkNRlJ19OkRERERERLSNoihCuVzGtGnToKqbzmcz6H4ViYB7xowZO/s0iIiIiIiIaDtZuXIlpk+fvsnnGXS/ikSGu/mPkslkdvbpEBERERER0TYqlUoyqdqM8zaFQferqFlSLgJuBt1ERERERES7vy1tHWYjNSIiIiIiIqIdhEE3ERERERER0Q7CoJuIiIiIiIhoB+GebiIiIiIiovVG/bquu7NPg3YywzCgadorPg6DbiIiIiIiorVEsL106VIZeBPlcjn09vZusVna5jDoJiIiIiIiAhBFEQYGBmR2U4yCUlXuxt2bvwu1Wg3Dw8Pyfl9f3zYfi0E3ERERERERAN/3ZaA1bdo0JBKJnX06tJPF43F5LQLv7u7ubS415083REREREREAIIgkNemae7sU6FdRPPHF8/ztvkYDLqJiIiIiIgmeSX7d2nPomyH7wKDbiIiIiIiIqIdhEE3ERERERHRXmLZsmUye/vUU09N+TXXXXed7OJN24ZBNxEREREREdEOwqCbiIiIiIiIaAdh0E1ERERERLQHuf322/G6171OloR3dHTgLW95C15++eWNrr333ntlufmtt96KQw45BLFYDMceeyyeffbZDdbecccd2H///ZFKpXDGGWfImeZNjz32GN74xjeis7MT2WwWJ554Ip544okd+jl3Fwy6iYiIiIiI9iDVahWf/OQn8fe//x133XUXVFXF2972NoRhuMnXXHLJJfj2t78tg+euri689a1vbRmTJeaXf+tb38IvfvEL3H///VixYgU+/elPTzxfLpdxwQUX4IEHHsDDDz+MefPm4c1vfrN8fG+n7+wToF1DFEW476ZfYWz5Srz+Xeeie/rMnX1KRERERES0Dc4+++yW+z/96U9lIP3888/LLPXGXH755TJTLfz85z/H9OnTcfPNN+Nf/uVf5GMiAP/xj3+MffbZR96/+OKLccUVV0y8/uSTT2453tVXXy0z7ffdd5/MtO/NmOmmCaufW4TKUBHPP/K3nX0qRERERES0jRYtWoR3vetdmDt3LjKZDGbPni0fF9npTTnuuOMmbre3t2P+/Pl44YUXJh5LJBITAbfQ19eH4eHhiftDQ0P4wAc+IDPcorxcvG+lUtnse+4tmOkmSezjyPa0Y2zJAEaXLUcQRtDUVz4InoiIiIiIXl2iNHzWrFm45pprMG3aNFlWftBBB8F13W0+pmEYG8QPolq2SZSWj42N4Xvf+558b8uyZCDvvoL33FMw000Tps2bBwUK7HwVo4Xizj4dIiIiIiLaSiLwffHFF3HZZZfhlFNOkY3P8vn8Fl8n9mE3ifUvvfSSfO1U/e1vf8O//uu/yn3cBx54oAy6R0dHt/lz7EkYdNOEaQsWQNMNBHaI5S89Dz/YdKMFIiIiIiLa9bS1tcmO5WJP9eLFi3H33XfLpmpbIvZni6Zromv5e9/7XtmF/Kyzzpry+4qyctFkTZSkP/LII3j3u9+NeDz+Cj/NnoFBN03o6Z8FK2lCQYT80hcwWnZ29ikREREREdFWEJ3Kb7jhBjz++OOypPwTn/gEvvnNb27xdV//+tfxsY99DEcccQQGBwfxxz/+EaZpTvl9f/KTn8gM+eGHH47zzjtPZr27u7tf4afZMyjR5EJ82qFKpZJsKlAsFmVjgV3Rn370I4wvXYNYXwr7n/Vu7DdzGnSNv80QERER0Z7Ptm0sXboUc+bMkfOq9wZiTvcb3vAGGTCLbuM09e/EVOM7RlPUomNGH1RNg1uyEVWGMVJhtpuIiIiIiGhbMeimFr1inIBuAF6I+vBqjJXq8Li3m4iIiIiIaJsw6KYWXdOmQ4vpiAKgVhiH6hQxwr3dRERERER7pJNOOkmO/mJp+Y7DoJta6IkUkpkYFKiojxeg2XmMV124PrPdREREREREW0vf6lfQHutv//tblEZGYCVjiFQNdrEGrV6Al3YwUjHRn2PLfyIiIiIioq3BTDdNCAIXYRBAUVSopgbHjaA6VZntzjPbTUREREREtNUYdNOEbFdP40YUQrN0eA5QL1WRRgVisNxw2d7Zp0hERERERLRbYdBNE7qmz5DXnuvDShhAqGB4pICc4UP1qijUPDh+sLNPk4iIiIiIaLfBoJsmdPbNABQFASJYliEz3pV6gMCuIxOVG9nuEjuZExERERERTRWDbppgxmJI5rIy8FbDEHpMh10LURwrotOoySBcZLttj9luIiIiIqJdzQ9+8APMnj0bsVgMxxxzDB599NHNrr/pppuwYMECuf7ggw/Gbbfd9qqd696EQTe1yHWv3dctgm5Lg+t6KBTriGtAVqnKpzi3m4iIiIho13LjjTfik5/8JC6//HI88cQTOPTQQ3H66adjeHh4o+sffPBBvOtd78JFF12EJ598EmeddZa8PPvss6/6ue/pGHRTi/Zp0+R1IILuuIHI8VAoBzL47tZr8jlmu4mIiIiIdi3/8R//gQ984AO48MILccABB+DHP/4xEokEfvrTn250/fe+9z2cccYZuOSSS7D//vvjK1/5Cg4//HB8//vff9XPfU+3U4PuH/3oRzjkkEOQyWTk5bjjjsOf/vSniedPOukkKIrScvnQhz7UcowVK1bgzDPPlF+o7u5u+aXxfb9lzb333iu/QJZlYd9998V111231aUYtm3jIx/5CDo6OpBKpXD22WdjaGgIe5qu/lmyvDyECkNToQCoehGK+SJiYRUZM5LruLebiIiIiPZkYRhhrOLs1Is4h6lwXRePP/44Tj311InHVFWV9x966KGNvkY8Pnm9IDLjm1pP207HTjR9+nR8/etfx7x58xBFEX7+85/jn/7pn2R5w4EHHijXiF9rrrjiionXiOC6KQgCGXD39vbK8oiBgQGcf/75MAwDX/va1+SapUuXyjUiWL/++utx11134f3vfz/6+vrkl2pyKYb4NUgE3N/97nflcy+++KIM5IVPfOITuPXWW+W+h2w2i4svvhhvf/vb8be//Q17kngyiXg6hXpQgub5MAygXndRLHkQE8V6jBpKbhLFeiPbHTO0nX3KRERERETbXb7m4oiv/mWnnsPjl52KjpS1xXWjo6MyNurpWbtVdC1xf+HChRt9zeDg4EbXi8dpD8p0v/Wtb8Wb3/xm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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 1, figsize=(10, 5), sharex=True, sharey=True)\n", "for i in range(len(agents)):\n", " p = axes.plot(jnp.stack(divs[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes.plot(jnp.stack(divs[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes.legend(title='alpha')\n", "axes.set_ylabel('KL divergence')\n", "axes.set_xlabel('epoch')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned A matrices alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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OwEFRT5Fh1tXhXNueeaVBwqObIoe52dKXDsB/ssmO0cdR/kVIB555BFJT0+X999/X9auXStz5syR1atXy8aNGz1dsAAQfceCxRM9BAAIQzYBMBX5BMBEZBMAEx2zNJsoWpyiWJFTgDh06JCULVtW//e2bdvk1Vdflddee02aNm2qt9atW8vVV18tjz76qDzwwAPi9yr4W+mfhB1zc3LzOI4IsMdxSxdFsoFbV8VsR2dYdzrDAFdkU+y43Rk4YefakMfDUlrGcUSAXcin2HF2VsxND80mpUsy+QS4IZvie+3kXG+VtVYBb2UTLQH5yClWvPLKK3LFFVfI008/nfu1okWL6vUsKlWqpB+rBbkbNWok9957r0yaNEn27dsXkzGpwsmQIUMkJSVFSpUqJa1atZJPP/00Jt8LQPwcyy4WtgFAopFNAExFNgEwEddOAEx0zNJsotMiH2rqp169esmWLVvk9ttvl5YtW+Z2W/z2229Sv359+fe//y0tWrTQBQyld+/e8vjjj8s777wjffv21cWMnK9Fgzrn119/LbNnz5aqVavqbo+2bdvKt99+K+eee66YxK2r4vbvt4Y8nnp+7TiOCDBXRtCOFwyvcHZWzEkPXfeiWzJrXgAK2RRfzs4K592DCncQAr8jn+LHrauCzjDAHdkUX87rIud6hqxlCNidTRQt8jF//nzdbfGf//xHypQpE/K1evXqSeXKlWXTpk26uKEW4lbTSVWsWFE6dOigp41SBYZoFiyOHj0qb731lixatEguvfRSvW/s2LHy7rvvytSpU/UaGwDsdNzSRZEAeBvZBMBU5BMAE5FNAEx03NJssnPUMaY6KT744AO55ZZbpFixYvLQQw/pboZmzZrJVVddJRdffLFcd9118txzz8nixYtl4MCBudNJqcLFgQMH5MiRI1K6dOmojenEiROSlZUlJUuWDNmvpolSC4DbwNlZMeqHL8OOGX9e/TiOCDBDhiWteV7l7KyY7nJ3s3N+Z8APyKbEcuuqmOVYk8e5phjgF+RTYjk7KybvDM2mQSlkE/yJbEosZ2eFs/PC7RjADzIszSZfrWmhpmsqiHLlysn69eulePHiMmjQIPnoo4/knHPOkRkzZkj79u3lu+++k65du0rdunVl+vTputsix8aNG6VWrVq6YFHQ71cQaloqNUXVww8/LP/97391AUNND7V2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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_batches_to_show = min(5, agents[0].A[0].shape[0])\n", "num_rows = len(agents) + 1\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(num_rows, n_batches_to_show, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(n_batches_to_show):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.A[0][i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.A[0], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(f'batch={i + 1}')\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true A', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, once again the agents have to learn the A matrix, with B matrix being fixed to the true B matrix of generative process. This time, agents have a flat prior over initial hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# create agent with B matrix being fixed to the B of the generative process, and precise initial beliefs about hidden states\n", "C = [jnp.zeros(num_obs[0])]\n", "pA = [jnp.ones_like(a) / a.shape[0] for a in env.A]\n", "_A = jtu.tree_map(lambda a: dirichlet_expected_value(a), pA)\n", "B = [jnp.array(b) for b in env.B]\n", "_D = [jnp.ones(num_states[0])/num_states[0]] # flat prior over initial states\n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " B,\n", " C,\n", " _D,\n", " E=None,\n", " pA=pA,\n", " pB=None,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=True,\n", " learn_B=False,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the A matrix are performed at the end of each block.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pA_ground_truth = 1e4 * env.A[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 20\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "\n", "divs = {i: [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1, 2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs[i].append(kl_div_dirichlet(agents[i].pA[0], pA_ground_truth).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 1, figsize=(10, 5), sharex=True, sharey=True)\n", "for i in range(len(agents)):\n", " p = axes.plot(jnp.stack(divs[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes.plot(jnp.stack(divs[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes.legend(title='alpha')\n", "axes.set_ylabel('KL divergence')\n", "axes.set_xlabel('epoch')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned A matrices alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_batches_to_show = min(5, agents[0].A[0].shape[0])\n", "num_rows = len(agents) + 1\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(num_rows, n_batches_to_show, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(n_batches_to_show):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.A[0][i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.A[0], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(f'batch={i + 1}')\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true A', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, once again the agents have to learn the A matrix, but now have a flat/uninformative prior over the B matrix\n", "#### We use a precise and accurate prior over hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = [jnp.zeros(num_obs[0])]\n", "pA = [jnp.ones_like(env.A[0]) / num_obs[0]]\n", "_A = jtu.tree_map(lambda a: dirichlet_expected_value(a), pA)\n", "pB = [jnp.ones_like(env.B[0]) / num_states[0]]\n", "_B = jtu.tree_map(lambda b: dirichlet_expected_value(b), pB)\n", "D = [jnp.array(d) for d in env.D]\n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " _B,\n", " C,\n", " D,\n", " E=None,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=True,\n", " learn_B=False,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the A matrix are performed at the end of each block." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pA_ground_truth = 1e4 * env.A[0] + 1e-4\n", "pB_ground_truth = 1e4 * env.B[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 100\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "\n", "divs1 = {i: [] for i in range(len(agents))}\n", "divs2 = {i: [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1, 2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs1[i].append(kl_div_dirichlet(agents[i].pA[0], pA_ground_truth).mean(-1))\n", " divs2[i].append(kl_div_dirichlet(agents[i].pB[0], pB_ground_truth).sum(-1).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyCFJREFUeJzs3Qd8FGX6B/DfzPb0hAChV6VIU5qgAiqCip4o/g/LCVYOBY9ixQJ2zt6FQ0+snIhnRQQVAQsgiHAUKYooNRAI6dk68/88b9h1NwRIMMkmm9/3/5+bnZl3Z99J+LiTZ573eTXTNE0QERERERERERFVI706P4yIiIiIiIiIiEgwKEVERERERERERNWOQSkiIiIiIiIiIqp2DEoREREREREREVG1Y1CKiIiIiIiIiIiqHYNSRERERERERERU7RiUIiIiIiIiIiKiasegFBERERERERERVTsGpYiIiIiIiIiIqNoxKEVEFEM0TcN9990X7W4QERERVQne6xDFFgaliKhOeumll9RNTe/evVETLV26VN1w5eTkRLsrREREVEu89tpr6v4mfGnQoAHOPPNMfPbZZ6hJeK9DRMLKHwMR1UVvv/02WrZsiRUrVuCXX35B27ZtUdNu1O6//35cffXVSElJKff7iouLYbXyP+1ERER12QMPPIBWrVrBNE3s3btXBavOP/98fPLJJ7jgggtQE/Beh4gEM6WIqM7Ztm2buhF66qmnUL9+fRWgqs0Mw4Db7VavnU4nb9SIiIjquPPOOw9/+9vfcNVVV+HWW2/FN998A5vNhv/85z+ojXivQxS7GJQiojpHglCpqakYMmQILr300goFpSS7Sp4wLl68GD169IDL5ULnzp3Vtnj//ffVttwwde/eHatXr454/9q1a9UTwdatW6s2GRkZuPbaa3HgwIFQG0llv+2229RrecoZTL//7bff1D55PXbsWNXvk046CQ6HA/Pnzz+szoI8SWzfvr1a5HVQdnY2GjVqhL59+yIQCPypnyURERHVfJKJJPcs5Qnm8F6HiKoTQ8xEVOfIDc4ll1wCu92Oyy+/HNOmTcPKlSvRs2fPcr1fhvtdccUV+Pvf/66eQj7xxBO48MILMX36dNx111246aabVLupU6fir3/9KzZv3gxdL3kG8MUXX+DXX3/FNddco27SNmzYgBkzZqj18uXL1Y2W9G3L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C94XHC+ZAU5mcJs+fTp69+6tZpkbPHiwmqWuQYMGh7VPS0vD3XffrWaPk5np5s6di2uuuUa1lfcJOd9XX32Ft956S8089/nnn+Omm25STzn/8pe/lKtfvN8hIiKivHLe73D2vWr+pSQnJ6vpjHmTRkREVDdV1v2ABKJ69uyJF154ITRsTm7+br75Ztx5553lOscpp5yCIUOG4MEHH1TbnTp1wvDhw3HvvfeG2nTv3h3nnXceHnrooXKdk/c7RERElFfO+4HYK2RAREREFOO8Xi9WrVqFgQMHhvZJvQbZXrZs2THfL88kFy5cqLKq+vXrF9rft29ffPzxx9i1a5dqs2jRImzZsgWDBg064rk8Ho+68QxfiIiIiMqDw/eIiIiIapn9+/cjEAigYcOGEftle9OmTUd8nzytbNKkiQokWSwWvPTSSzjnnHNCx59//nmMGjUKTZs2hdVqVYGul19+OSJwVdrUqVNx//33V9KVERERUV3CoBQRERFRHSF1HdasWYOCggKVKSU1pFq3bo0BAwaEglLLly9X2VItWrTA119/jTFjxqiaUuFZWeEmTZqkzlO6hgQRERHRsTAoRUREVIkke8Xn80W7GxRFNptNZSFVpfT0dPUZe/fujdgv2xkZGUd8n2Q+tW3bVr3u1q0bNm7cqDKdJChVXFyMu+66Cx988IGqMyW6dOmiglhPPPHEEYNSDodDLUREREQVxaAUERFRJZD6O5mZmcjJyYl2V6gGSElJUcEhTdOq5Pwye54UIJdsp6FDh4YKncv22LFjy30eeY8M5RMSTJVFAlfhJPgl7YiIiIgqG4NSRERElSAYkGrQoAHi4uKqLBhBNT84WVRUhH379qntRo0aVdlnyZC5kSNHokePHujVqxeeeeYZFBYW4pprrlHHR4wYoepHSSaUkLW0bdOmjQpEzZs3D2+++SamTZumjsvMOP3798dtt90Gl8ulhu8tWbIEb7zxBp566qkquw4iIiKquxiUIiIiqoQhe8GAVL169aLdHYoyCegICUzJv4mqGso3fPhwZGVlYfLkySooKsPx5s+fHyp+vn379oisJwlY3XTTTdi5c6fqY/v27fHWW2+p8wS98847qkbUlVdeiezsbBWYevjhhzF69OgquQYiIiKq2zRTHulRtZDCn8nJyWrmG3kaSUREscHtdmPbtm1o2bJlKCBBdZvU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EcU4t9uNbdu2qUyculDwm/7cv4nKuh+QwuuS5favf/0rlOX27rvvYtOmTSqoWDrLTdaSEScz6kkgat68ebjzzjtVoPH6669XbaRovQQqX3zxRZx55pkqgCfZZosXL1YBvWje7xAREVHtUd77AWZKxQB7ogvIDt9jlUef6pW7ODyFioiIiOpqlptkjN10003YuXMnXC4X2rdvj7feekudJ0gKm8swRglg/eMf/1A1vP773/+WOyBFREREVBHMlKpGVfXk8NN/vYjfVnf4Y4fhR2rjZUhulI4TevbEiaf0qrTPIiKiwzFTiqKRKVVTxfr1ERERUeXdD/zx+IxqraT69SN36FYEfH710u1mphQRERERERER1TwMSsWA+mUUH/UV+tTa7y4pXkpEREREREREVJMwKBUDmrRpd9g+v7tk9j2vxx2FHhERERERERERHR2DUjEgMSUFCJTKiPKX/Gr9XmZKEREREREREVHNw6BUrPCX1JAKMvwlEyv6Pd4odYiIiIiIiIiI6MgYlIoVZmRQSvM71NrvLaktRURERERERERUkzAoFSM0IzIjSkPJ9NM+N2tKEREREREREVHNw6BUjNCMUsEn0wkzYMAIBOD3MVuKiIiIiIiIiGqWqAalpk2bhi5duiApKUktffr0wWeffRY6PmDAAGiaFrGMHj064hzbt2/HkCFDEBcXhwYNGuC2226Dv1R9pcWLF+OUU06Bw+FA27Zt8dprrx3WlxdffBEtW7aE0+lE7969sWLFiojjbrcbY8aMQb169ZCQkIBhw4Zh7969qCk0FJfa4UDAMNRLT3FRdDpFRES1wrG+A4/knXfeUd/NQ4cOjdhvmiYmT56MRo0aweVyYeDAgfj5558j2mRnZ+PKK69U3/8pKSm47rrrUFBQENFm7dq1OOOMM1S/mjVrhscee+ywPsyZMwft27dXbTp37ox58+ZVel/uu+++w+5HZImPjy/Xz4mIiIiIamBQqmnTpvjnP/+JVatW4YcffsBZZ52Fiy66CBs2bAi1ueGGG7Bnz57QEn5DGggEVEDK6/Vi6dKleP3111XASW4+g7Zt26banHnmmVizZg3Gjx+P66+/HgsWLAi1mT17NiZOnIgpU6bgxx9/RNeuXTF48GDs27cv1GbChAn45JNP1M3vkiVLsHv3blxyySWoKXSjVOBJs0MzS4JSRQV50ekU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MZNtIyRzpl27dnC5XGjWrBkmTJgAt9tdoXNK+zFjxqBevXpISEjAsGHDsHfv3og227dvx5AhQxAXF4cGDRrgtttug79UfcTFixfjlFNOgcPhQNu2bfHaa69V+PpmzJiBAQMGICkpSWUG5eTkHHaOv/zlL2jevLk6R6NGjXDVVVdh9+7diKannnoKN9xwgwosdezYEdOnT1c/q1dffbXM9nKNF198MTp06IA2bdpg3Lhx6NKlC7799tuIdrt27cLNN9+Mt99+GzabrZquhoiIiOoiBqViiDM+Dpa4Mm4eDSsMoyRY5S0qqv6OERFRzGTbzJo1C3feeadqv3HjRvz73/9W57jrrrsqdE4JZH3yySeYM2cOlixZogI8l1xySeh4IBBQASmv14ulS5fi9ddfVwGnyZMnh9ps27ZNtTnzzDOxZs0ajB8/Htdff31E5k95+lJUVIRzzz034hpKk8949913sXnzZvz3v//F1q1bcemllyJa5OeyatUqDBw4MLRP13W1LZlQx2KaJhYuXKiup1+/fqH9hmGogJsEAE866aQq6z8RERGRKJmajWKCMy4RzngHirJ9JbWkDtFgQzB/yu1mphQRUVUyDRPuQl9U++CMt4WGbVck20ZIts2nn36qsm0k+FSaBIhOO+00XHHFFWpbMpAuv/xyfP/99+U+Z25urgpmSYDrrLPOUm1mzpypMnhkyNipp56Kzz//HD/99BO+/PJLNGzYUNU/evDBB3HHHXfgvvvug91uV+dt1aoVnnzySXUOeb9k/Tz99NMq8FTe65NgVjDr6kgkiBbUokUL9d6hQ4fC5/NFJZto//79KnAnP5twsr1p06Yjvk9+9k2aNIHH44HFYsFLL72Ec845J3T80UcfhdVqxT/+8Y9y90XOJUtQXl5eha+HiIiI6iYGpWKIKz4esFrkL6KI/SZs0A9lSvndpWfnIyKiyiQBqVdvixwOVd2uffx0uBLt5c62mTRpUrmzbfr27Yu33npLDYHr1asXfv31V8ybN09l15T3nHJcgjnhWT7t27dXw+OkjQSlZN25c+eIoIsEmm688UZs2LABJ598smoTfo5gm2CQ6Xiurzyys7PV0Db5WdS24W2JiYkqq6ygoEBlSkkWWevWrdXQPvlZPfvssyqjTIYxltfUqVNx//33V2m/iYiIKDZx+F4MsdpsagEig1IarAgc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CpgSfHKE9mu6AwFPAB63O6r9IyIiIiIiIqK6qcKZUv/+978xfvz4iCmG5fXNN9+MGTNmqMypsWPHYv369ZXdVzoOVocdNqcdMCPrSplwwPCaCAR8UesbEREREREREdVdFQ5KyRC9TZs2HbZf9gUCJYEPqS1VVt0pqn4Wqw02hx2aUSr4pDlgmEDOvn3R6hoRERERERER1WEVHr531VVX4brrrsNdd92Fnj17qn0rV67EI488ghEjRqjtJUuW4KSTTqr83lKF2Z0OWG1W6KYP4blShm4B/EDO/r1R7B0RERERERER1VUVDko9/fTTaNiwIR577DHs3VsS0JDtCRMmqDpSYtCgQTj33HMrv7dUYTanE7BYoJmRs+wZh371xTm5UeoZEREREREREdVl1ooO3Zs1axauv/563H333cjLy1P7k5KSIto1b968cntJx83ujIOljKAUdCvMgIbinIJodY2IiIiIiIiI6rAK1ZSyWq1qZj33oRnbJBhVOiBFNYvd6YKm6zA1b+QBzQIpAeYrKI5W14iIiIiIiIioDqtwofNevXph9erVVdMbqnTOOJdaH5YppVmhBawwDAMHszKj0zkiIiIiIiIiqrMqXFPqpptuwi233IKdO3eie/fuiI+PjzjepUuXyuwf/UkOV5xaa3pJdluI1QZ4bDACARzI3IPU+hnR6SARERERERER1UkVDkpddtllav2Pf/wjtE/TNJimqdYBGRNGNYYzLkGtTb1UppQwnIBZiLysrOrvGBERERERERHVaRUOSm3btq1qekJVmimlW6SAlAewOf44qMUh4M9FQc6B6HWQiIiIiIiIiOqkCgelWrRoUTU9oSphtdlgsdkAqwF4vJFBKThheAwUZudGsYdEREREREREVBdVuNC5ePPNN3HaaaehcePG+P3339W+Z555Bh999FFl948qgdVuh6bJGL7IIXyG7oThN1VdKRY7JyIiIiIiIqIaHZSaNm0aJk6ciPPPPx85OTmhGlIpKSkqMEU1j9UumVKAHihVV8rihGmY6qUUOyciIiIiIiIiqrFBqeeffx4vv/wy7r77blgsltD+Hj16YN26dZXdP6oEVocdmlWHhsgZ+AKaAyiJSbHYORERERERERHV7KCUFDo/+eSTD9vvcDhQWFhYWf2iSmSx2iDxQ71UUAqaHYZhqJf52fuj0zkiIiIiIiIi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QamCggI1E54swYLi8nr79u3qmMyGt3z5cvz2228qICQz37Vt21YVIRcdOnRQdaduuOEGrFixAt999x3Gjh2rhv3JzHviiiuuUEXOr7vuOmzYsAGzZ89Ws+1NnDgx1I9x48apWfyefPJJbNq0Cffddx9++OEHdS6haRrGjx+Phx56CB9//DHWrVuHESNGqM8YOnQoYklS/frQdFPlQcEMQLf6YfFH1sIytVSYuh+mCRjFFmz89ju13+50qHVBTmR2FRERERERERFRjaopJYGfM888M7QdDBSNHDkS06ZNw9q1a/H666+rbCgJAA0aNAgPPvigykAKevvtt1XwSGpMyax7w4YNw3PPPRcxS97nn3+OMWPGoHv37mr43+TJkzFq1KhQm759+2LWrFm45557VDH1E044AR9++CE6deoUanP77bejsLBQvU/6c/rpp6tAltMps9HFjsTUNGgWE5oJlSkluU8W/0EEkB5qY1jTYTV2QtN8MA0bDmzci28+fBcWuwModqM4n0EpIiIiIiIiIjo6zTQl34Wqgwz5kyCZ1JeqqUP5Mn/figXPvgJftkVlS2nQEfA74U84NaKdvfAbiVbB0AxYHQac9aywuOywuRxo26sHup5xVtSugYiIqCarDfcDf0asXx8RERFV3v1AraopRVXPERcPzWEBdBmbpyEgkSlbHuD3RDY0kiSkCc0egO4wEfCZ8Oa5UbDnIHZs+Cla3SciIiIiIiKiWoJBKYpgd7iQ1CBNBZxMTYPFcEC3AzZvdkQ7U09Wa90P2FPsSG5RH5pFk/rnyNuZhfycnChdARERERERERHVBgxKUQSHKw62OAd0VwDQDMCwAV4rdHNfRDu/tV5J4MqwwGKzwxnngjM5XmVMGYEAtv30v6hdAxERERERERHVfAxKUQSrzQZN12GNtwFOH0xdg2Y4ELDujWhnOhKBgA0wrXAfLETTTp1hsdvUTIW+Qj/2/botatdARERERERERDUfg1J0GKvdBovDCotNtrwwTQOwBwBfqbpSgTg1S58/38T2devQsG1r6DbAcOvI35+tiqYTEREREREREZWFQSk6jMVqhc1hg65rgMWjhunppg6bLyuinaklwbT6AK8Debsy4XcXQ7Npqkh63p5sbN+8MWrXQEREREREREQ1G4NSdBiLzQbdYYEpM+9JKpRVAlOAbhyIaOezZUCz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OkRERER0EFg4g4iIiIiIiIiIso6hFBERERERERERZR1DKSIiIiIiIiIiyjqGUkRERERERERElHUMpYiIiIiIiIiIKOsYShERERERERERUdYxlCIiIiIiIiIioqxjKEVERERERERERFnHUIqIiIiIiIiIiLKOoRQREREREREREWUdQykiIiIiIiIiIso6hlJERERERERERJR1DKWIiIiIiIiIiCjrGEoREREREREREVHWubL/kkcupZTed3R05PpUiIiIKEe6+wHd/YJ8w/4OERERdfSzv8NQKos6Ozv1fvTo0bk+FSIiIhoC/YLi4mLkG/Z3iIiIqL/9HUPl68d0Q5DjOKirq0NhYSEMwxjwFFI6f7t27UJRUdGAPjd9NrZ97rDtc4dtnzts+8O/3aXrJR206upqmGb+VVJgfyc/se1zh22fO2z73GC7H1n9HY6UyiL5QowaNWpQX0P+4fAbNzfY9rnDts8dtn3usO0P73bPxxFS3djfyW9s+9xh2+cO2z432O5HRn8n/z6eIyIiIiIiIiKiIY+hFBERERERERERZR1DqTzh9Xpxzz336D1lF9s+d9j2ucO2zx22fW6w3YcGfh1yh22fO2z73GHb5wbb/chqexY6JyIiIiIiIiKirONIKSIiIiIiIiIiyjqGUkRERERERERElHUMpYiIiIiIiIiIKOsYSuWJxx57DOPGjYPP58NJJ52EFStW5PqU8soDDzyAOXPmoLCwEMOHD8dFF12ELVu29DkmHo/jpptuQnl5OQoKCnDppZeioaEhZ+ecrx588EEYhoHvfe97Pbex7QfP7t278Y1vfEO3rd/vx4wZM7Bq1aqe+6Us4d13340RI0bo+88++2xs27Ytp+ecD2zbxl133YXx48frdp04cSLuu+8+3d7d2PYD429/+xsuvPBCVFdX658tzz33XJ/7+9POra2tuPLKK1FUVISSkhJ885vfRDgczvI7OTKwvzO42N8ZOtjfyS72d3KD/Z3sGcr9HYZSeeCpp57Crbfeqqvkv/fee5g1axbOPfdcNDY25vrU8sbSpUt1J+Cdd97Bq6++ilQqhXPOOQeRSKTnmFtuuQXPP/88nnnmGX18XV0dLrnkkpyed75ZuXIlfvvb32LmzJl9bmfbD462tjaceuqpcLvdePnll7Fp0yb88pe/RGlpac8xDz30EB555BE8/vjj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O+7A6NGj9TGTJk3Cf/7nf/Y5ZvXq1TjhhBMQCARwyimnYMuWLVl490RERJTv2NcholxgKEVE1A/SSfuf//kfPP7449i4cSNuueUWfOMb38DSpUt7jrntttt052vlypUYNmwYLrzwQqRSqZ4O1te//nVcfvnleP/993HvvffirrvuwhNPPNHz+Kuvvhp//OMf8cgjj2Dz5s347W9/i4KCgj7n8eMf/1i/xqpVq+ByuXDddddlsRWIiIgoX7GvQ0S5YCilVE5emYjoMCGf6pWVleG1117D3Llze26//vrrEY1GccMNN+CMM87AokWLcNlll+n7WltbMWrUKN0Rkw7alVdeiaamJrzyyis9j7/99tv1J47S8du6dSumTJmCV199FWefffY+5yCfUMpryDmcddZZ+raXXnoJ559/PmKxmP7EkoiIiOjzYF+HiHKFI6WIiA5g+/btukO2YMEC/Wle9yafJn744Yc9x/XuxEnHTjpe8imgkP2pp57a53nl+rZt22DbNtauXQvLsjB//vzPPBcZMt9txIgRet/Y2Dhg75WIiIiOPOzrEFGuuHL2ykREh4lwOKz38knfyJEj+9wn9RB6d9Y+L6nd0B9ut7vnstR26K4BQURERPR5sa9DRLnCkVJERAcwffp03SGrqanRBTl7b1Kos9s777zTc7mtrU0PU582bZq+Lvu33nqrz/PK9cmTJ+tPDWfMmKE7XL3rNhARERFlA/s6RJQrHClFRHQAhYWF+MEPfqALfkpnat68eWhvb9cdraKiIowdO1Yf99Of/hTl5eWorKzURTorKipw0UUX6fu+//3vY86cObjvvvt0LYbly5fj0Ucfxa9//Wt9v6xQc8011+hinlL8U1a82blzpx6uLnUaiIiIiAYL+zpElCsMpYiI+kE6WLLKjKxM89FHH6GkpATHHXccfvSjH/UMKX/wwQdx880369oJxx57LJ5//nl4PB59nxz79NNP4+6779bPJTUSpGP3j//4jz2v8Zvf/EY/37e//W20tLRgzJgx+joRERHRYGNfh4hygavvEREdou7VYmQYu3TgiIiIiPIJ+zpENFhYU4qIiIiIiIiIiLKOoRQREREREREREWUdp+8REREREREREVHWcaQUERERERERERFlHUMpIiIiIiIiIiLKOoZSRERERERERESUdQyliIiIiIiIiIgo6xhKERERERERERFR1jGUIiIiIiIiIiKirGMoRUREREREREREWcdQioiIiIiIiIiIso6hFBERERERERERIdv+f+BfVYi/i5OtAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(12, 5), sharex=True, sharey=False)\n", "for i in range(len(agents)):\n", " p = axes[0].plot(jnp.stack(divs1[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[0].plot(jnp.stack(divs1[i]), color=p[0].get_color(), alpha=.2)\n", "\n", " p = axes[1].plot(jnp.stack(divs2[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[1].plot(jnp.stack(divs2[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes[0].legend(title='alpha')\n", "axes[0].set_ylabel('KL divergence')\n", "axes[0].set_xlabel('epoch')\n", "axes[1].set_xlabel('epoch')\n", "axes[0].set_title('A matrix')\n", "axes[1].set_title('B matrix')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned A matrices alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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PUJi/fr18t133+nCRP/+/eWbb76R66+/XlasWCFvvfWW7Nu3T7p37555LPWvKlioqaKKes0KANEpwxeTYwMAp5FNAExFNgEwEedOAEyUYWk2xdm2TkVW33//vV6LYu/evbogoRbWrlChgv7Z/PnzZeLEiXL06FGZN2+edOrUSbp27SoXXnihjBgxQkaNGiWnTp3Sj7njjjtyHDvU87mBn292WIl+czdbq94A3I1sAmAq8ok176xFv7ka2cRnFzaj79wrzdJsMr5oERgBceDAAdm5c6dcccUVUqNGDb2vYsWKMnr0aL1eRWAtimnTpskzzzyjR0rcc889ctddd+n7KWrkhFrnQk0Tpda6CEwdFfiZlQtrA7BemtfONxAA7kY2ATAV+QTARGQTABOlWZpNxhct1PoSalTExo0bpXr16nLixAkZP3683H333XqNiY4dO+oFstVaFi+//LKUK1dO3//222+X0qVLBx0ra1EiULBQj1WFEacLFmo9jqefflq2b98ux48fl4ULF+qRIQFqsXBVoFm0aJH88MMPUrt2bXnggQdk0KBB+Xoe5qizQ/b6Nv3mbl6/O0d2AbAb2QTAVOQTABORTXx2YQvWtIguXkuzydGiRWC0Q1pamp6OKftC1ydPntQf5KtCxO7du6VatWoye/ZsGTNmjNSpU0evTaGo0RRqbYqpU6fqdS0Ci2znhSmLaycnJ0ujRo2kX79+eqHw7IYPHy5r166VOXPm6L/ZqlWr5N5775WqVavKjTfemPcnYsFUO9FvrpZuadW7UMXyGrcWfedaZBMAU5FPXB9Yi35zNbJJf8jmdAuQF2lpOffRd66Vbmk2OfKKTE9PlyeffFKeffZZOX36dFCRQX14X7JkyczbqgjRvn17ve+DDz6QmTNn6tEW77//vp7qSX1or45VuXJlx0dLFIRac0Ntudm0aZP06dNH2rZtq28PHDhQjyzZunVr/ooWAIyT4eXiBYB5yCYApiKfAJiIbAJgogxLs8mRokV8fLy0aNFCihcvrhfM7tGjh0yePFmPIlALZavFtf/2t79JpUqVpEuXLrpIoaZ7Umta3HffffpDenV/NSJBFS2qVKkibteqVStZsmSJHomhfud169bJV199Jc8//3z+DsRwLzvRb66WbumiSIXJ89/1i2Af+s69yCbef61G37ka+cRr3Fr0m6uRTXrB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nDsBMFGmpdnESItiLF68WMaPH6+LF2rNiltuuUWPorj11lvlhx9+kDPPPFPefvttOffcc/NHY6Slpcn9998vr732mowYMaLYqaWipdrcsmWLPP/889KgQQM92qN3797yxRdfyKmnnlqiNph73E70m7dlOXa8YcRTINHOyr/fOLk5RfbRd95FNjH3uNXoO08jnwCYiGwScYJBtw8BUaLvvCvL0mzibD6Cb7/9VmbOnCmDBw+WL7/8Uhch7rnnHpk+fbp+XhUs6tWrJ5s2bdLrWuRNJ1WzZk0ZMGCAnjZKiWXB4vjx43rUx9///nc577zzpEWLFnLnnXfq/z/22GMx+zwAyl+2k1RkAwC3kU0ATEU2ATAR504ATJRtaTbZcZTlTE259O6778pTTz2lH1erVk0qV64sF154oWRnZ0tycrJcdNFFuljwxhtvyOjRo/Onk1KFi++//14yMjKkSpUqMTum3NxcCQaDUrFixbD9apootQB4SXFHrJ13M9Nv3pZlydA8AP5CNgEwFfnEaCJr0W+eRjbxM26PCKMq6DvPyrI0m3z1E6mmayqJVq1a6XUr5s6dK3v37pUnn3xSj7RQIyfyRlFcccUV0qZNG/1c3mgLZePGjdK8eXNdsCjp5ysJVTjp1q2bPo7//ve/uoChpodau3atHDhwIGafB0D5y3SSimwA4DayCYCpyCYAJuLcCYCJMi3NJjuOsozy1pbIm64pb7REcZo1a6YX316zZo106dJFj7K46aab9FoWN9xwg15X4oEHHtDrXKj96jXDhw+Xbdu2yb59++S+++6L+fRQilrL4uqrr9brVyQmJkqnTp1kyJAhsmHDhoivz8rK0ltBIScoCQHu2gdMkhPyRRTnI5sAO5BNZBNgKvJJTU+cQz7ZyAm5fQSII7JJxEkQsskCrFXoLzmWZpMvRlrkFQ/efPNNPa3TqFGj5J///Kd89913er8atVDYddddJ9dee620bNlSlixZInfccYc89NBDMnv2bP2xagSGWtti0aJF8pe//EW2b98uNWrU0NNK/frXv47L16FGcKxevVqOHj2qiyPr1q2TnJwcOe200yK+furUqZKamhq27crdEpdjAxC9rFBSkc3LyCbADmQT2QSYyk/ZVGw+BT93+7AAFMK5E+dOgImyLM0mO44yBh5++GGZMmWKjBgxQvbv3y8TJ07UC2yr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_batches_to_show = min(5, agents[0].A[0].shape[0])\n", "num_rows = len(agents) + 1\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(num_rows, n_batches_to_show, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(n_batches_to_show):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.A[0][i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.A[0], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(f'batch={i + 1}')\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true A', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the B tensor (just the expected value of the posterior which in absence of learning is same as the prior) alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "num_actions = env.B[0].shape[-1]\n", "base_labels = [\"Up\", \"Right\", \"Down\", \"Left\", \"Stay\"]\n", "action_labels = base_labels[:num_actions]\n", "\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(len(agents)+1, num_actions, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(num_actions):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.B[0][0, ..., i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.B[0][..., i], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(action_labels[i])\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true B', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, once again the agents have to learn the A matrix, but now have an informative prior over the B matrix: we fix it to the expected transition distribution under a flat prior over actions, i.e. the agent knows generally that motion on the grid is restricted to the locality, but have no sense of how particular actions relate to particular transitions.\n", "#### We use a flat prior over initial hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = [jnp.zeros(num_obs[0])]\n", "pA = [jnp.ones_like(env.A[0]) / num_obs[0]]\n", "_A = jtu.tree_map(lambda a: dirichlet_expected_value(a), pA)\n", "B_collapsed_actions = jnp.clip(env.B[0].sum(-1), max=1)\n", "pB = [jnp.expand_dims(B_collapsed_actions, -1) + jnp.ones_like(env.B[0]) / num_states[0]]\n", "_B = jtu.tree_map(lambda b: dirichlet_expected_value(b), pB)\n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " _B,\n", " C,\n", " _D,\n", " E=None,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=True,\n", " learn_B=False,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the A matrix are performed at the end of each block." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pA_ground_truth = 1e4 * env.A[0] + 1e-4\n", "pB_ground_truth = 1e4 * env.B[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 100\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "\n", "divs1 = {i: [] for i in range(len(agents))}\n", "divs2 = {i: [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1,2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs1[i].append(kl_div_dirichlet(agents[i].pA[0], pA_ground_truth).mean(-1))\n", " divs2[i].append(kl_div_dirichlet(agents[i].pB[0], pB_ground_truth).sum(-1).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAzbhJREFUeJzs3Qd8FGX+P/DPbN/0kBB6E5QiTUAQz7MiRfQORQULHREPPAEFRBEUPTkLggXlsAB3ygn4U09BQaRZQEGKFAFRSlB6SSHJ1pnf6/uEXXZDgIBJdpN83v//3OzMPDvz7JLXb8fvfJ/voxmGYYCIiIiIiIiIiKgUmUrzYkRERERERERERIJBKSIiIiIiIiIiKnUMShERERERERERUaljUIqIiIiIiIiIiEodg1JERERERERERFTqGJQiIiIiIiIiIqJSx6AUERERERERERGVOgaliIiIiIiIiIio1DEoRUREREREREREpY5BKSKiMkzTNDz55JOR7gYRERFRRPBeiKhsY1CKiCqE119/Xd20tGvXDtFo5cqV6oYqIyMj0l0hIiKicmLmzJnq/id0SUtLw3XXXYfPP/8c0YT3QkQVkyXSHSAiKg3vvfce6tati9WrV+OXX35BgwYNEG03Yk899RT69u2LpKSkIr8vLy8PFgv/TzkRERGd2YQJE1CvXj0YhoGDBw+qYNVNN92ETz/9FDfffDOiAe+FiComZkoRUbm3a9cudaPz0ksvoXLlyipAVZbpug6Xy6VeOxwO3ogRERHRWXXp0gX33nsvevXqhUceeQRff/01rFYr/vvf/6Is4r0QUfnBoBQRlXsShEpOTkbXrl1x++23n1dQSrKr5Ani8uXL0aZNGzidTjRr1kxtiw8//FBtyw1R69atsX79+rD3b9y4UT3xu+iii1SbqlWron///jh69GiwjaSqjxw5Ur2Wp5iB9Prdu3erffJ66NChqt+XXnop7HY7Fi5ceFodBXlS2KhRI7XI64Bjx46hWrVquPLKK+H3+//Qd0lERERln2QiyT1NUYI5vBciopLEkDIRlXtyA3PbbbfBZrPhrrvuwhtvvIE1a9bg8ssvL9L7Zbjf3Xffjfvvv189ZXzxxRdxyy23YNq0aXjsscfwt7/9TbWbOHEi7rzzTmzfvh0mU37Mf/Hixdi5cyf69eunbsK2bNmC6dOnq/V3332nbqSkbz///LN6Wjl58mSkpqaq90pWV8DSpUsxd+5cdUMmx+UGsSC5SZw1axb+9Kc/4fHHH1eZYWLIkCHIzMxUqfpms7lYvlMiIiIqO+Q+4MiRI2r43qFDh/Dqq6/ixIkT6r6mKHgvREQlxiAiKsd++OEHQ/5P3eLFi9W2rutGzZo1jYceeqhI769Tp456/8qVK4P7Fi1apPY5nU5jz549wf3/+te/1P5ly5YF9+Xm5p52zv/+97+q3VdffRXc98ILL6h9u3btOq297DeZTMaWLVsKPTZ+/PiwfWPGjFHt5fzz5s1TbaZMmVKkz0tERETlx4wZM9R9QMHFbrcbM2fOLNI5eC9ERCWJw/eIqNxnSVWpUkXNMiPkaVyPHj3w/vvvFzl9u0mTJmjfvn1wOzCD3/XXX4/atWuftl+eBoY+sQuQ2gfylPKKK65Q2+vWrSvy57jmmmtUP4pCUtgltb1Pnz7qyaW89+9//3uRr0VERETly9SpU1XGkizvvvuuui8aOHCgGnpXFLwXIqKSwqAUEZVbEnSS4JPceEmxc0k9l0VumGTmmSVLlhTpPKE3WyIxMVGta9WqVej+48ePh9UweOihh1RgTG7KJA1daiUISSMvqsB7ikKGKb7zzjvqM2dnZ2PGjBkqGEdEREQVU9u2bdGhQwe13HPPPViwYIEK8MhQOI/Hc873816IiEoKa0oRUbkltQf279+vAlOyFJZF1bFjx3Oe50y1B860Pz+TPJ/UVZCZ/6R4Z8uWLREXF6dmjOncubNaF1XoU8aiWLRoUfCJ5I4dO87rRo6IiIjKN6n3JA/tXn75ZXWfIFlFZ8N7ISIqKQxKEVG5JUGntLQ0lbJekKSrf/TRR6pA5/ne5BSVPCWUbKynnnoK48aNC+6XG6OCivPpncxyM2HCBFVQdMOGDSo9f9OmTcGnl0REREQ+n0+tpeB5SeG9EBGdC4NSRFQuyTTAEni64447cPvtt592vHr16mqGl08++UTVmCoJgaeHoU8LxZQpU05rGxsbq9YZGRl/6Jper1dNuyyfT55+Stq6zDI4fPhwlcZOREREJPcLX3zxhRrm1rhx4xK7Du+FiOhcGJQionJJgk1SQ+Avf/lLocelwKbUNJBsqpIKSiUkJODqq6/G888/r26QatSooW4A5eaooNatW6u1TF/cs2dPWK1WNdVy4AatqJ555hn1RFCeSsbHx6N58+bqyeTYsWNVcO6mm24qts9HREREZcPnn3+Obdu2qdeHDh3C7NmzVbbSo48+qu5XSgrvhYjoXBiUIqJySYJNDocDN9544xlrKXTt2lW1O3r0KFJSUkqkH3LT9+CDD6ohhPKUUGpYyY2hPL0LJU/wnn76aTWccOHCharGgtywnc+NmMxg8+yzz6qipYHZBoXccP7vf//Dfffdhy1btiApKalYPyMRERFFt9Chc3J/1KhRI7zxxhu4//77S/zavBciorPRjIK5lERERERERERERCXMVNIXICIiIiIiIiIiKohBKSIiIiIiIiIiKnUMShERERERERERUaljUIqIiIiIiIiIiEodg1JERERERERERFTqGJQiIiIiIiIiIqJSZyn9S1Zcuq5j3759iI+Ph6Zpke4OERERlSDDMJCdnY3q1avDZOJzQN4HERERVRxGEe+DGJQqRXIjVqtWrUh3g4iIiErR3r17UbNmTVR0vA8iIiKqePae4z6IQalSJE8GA/8oCQkJke4OERERlaCsrCwVhAn8/ld0vA8iIiKqOLKKeB/EoFQpCqSqy40Yb8aIiIgqBg5Vy8f7ICIioopHO8d9EAscEBERERERERFRqWNQioiIiIiIiIiISh2DUkREREREREREVOpYU4qIiOg8+f1+eL3eSHeDIsxqtcJsNpfoNerWrYs9e/actv9vf/sbpk6digMHDmDkyJFYvHixmna5YcOGePzxx9G9e/dg22PHjuHBBx/Ep59+qqZklmMvv/wy4uLigm02btyIIUOGYM2aNahcubJqP2rUqLBrzps3D0888QR2796Niy++GM899xxuuummEv38REREVL4xKEVERFREhmGoIEBGRkaku0JRIikpCVWrVi2xYuYSJJIgaMDmzZtx44034o477lDbvXv3Vn+Pn3zyCVJTUzF79mzceeed+OGHH3DZZZepNvfccw/279+vAlcSTO3Xrx8GDRqk2gZmx+nYsSM6dOiAadOmYdOmTejfv7/6bNJOrFy5EnfddRcmTpyIm2++Wb23W7duWLduHZo2bVoin52IiIjKP82QO2wqFXLTl5iYiMzMTM46Q0RUBsl/2EsAIC0tDTExMZxVrQKT26fc3FwcOnRIBW+qVatWKr/7w4YNw/z587Fjxw719yfZTm+88QZ69eoVbJOSkqKymAYOHIit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e+WE2ZH/T6m7OLU2EREVn2uvvbbQ4XxERERERH8UM6XKCZvNodZejzfSXSEiIiIiIiIiOicGpcoJs8Ou1rqPQSkiIiIiIiIiin4MSpUTDkeMWhs+wMO6UkREREREREQU5RiUKify8rKhewC/z4+8nBOR7g4RERERERERUdkISv3zn/+EpmkYNmxYcJ/L5cKQIUOQkpKCuLg4dO/eHQcPHgx7X3p6Orp27YqYmBikpaVh5MiR8Pl8YW2WL1+OVq1awW63o0GDBpg5c+Zp1586dSrq1q0Lh8OBdu3aYfXq1WHHi9KXSDqyIx26CzD8Oty5OZHuDhERERERERFR9Ael1qxZg3/9619o3rx52P7hw4fj008/xbx587BixQrs27cPt912W/C43+9XASmPx4OVK1di1qxZKuA0bty4YJtdu3apNtdddx02bNiggl4DBw7EokWLgm3mzJmDESNGYPz48Vi3bh1atGiBTp064dChQ0XuS8SZzepf0zB0uPIYlCIiIiIiIiKi6BbxoNSJEydwzz334M0330RycnJwf2ZmJt5++2289NJLuP7669G6dWvMmDFDBZ++++471eaLL77ATz/9hHfffRctW7ZEly5d8PTTT6usJwlUiWnTpqFevXqYNGkSGjdujKFDh+L222/H5MmTg9eSa9x3333o168fmjRpot4jmVfvvPNOkfsSaRZz/j+l4TfgycuNdHeIiIiIiIiIiKI7KCVD4iSTqUOHDmH7165dC6/XG7a/UaNGqF27NlatWqW2Zd2sWTNUqVIl2EYynLKysrBly5Zgm4LnljaBc0jwSq4V2sZkMqntQJui9CXSNItZrQ0/4MploXMiIsJ5D1UvSLKD5fdO2svv7WeffVZqfSUiIiKi8i+iQan3339fDZebOHHiaccOHDgAm82GpKSksP0SgJJjgTahAanA8cCxs7WRwFVeXh6OHDmihgEW1ib0HOfqS2Hcbre6TuhSUkxWMzRNolI6fG4GpYiIKFxRhqqHkmzgu+66CwMGDMD69evRrVs3tWzevLnU+05ERERE5ZMlUhfeu3cvHnroISxevFg9gS2PJNj21FNPlcq1zGbLyZpSkv3FoBQRUUnTdQPHc/OHikdKcowNJpM8kTi30KHqQoaqL1iwQA1Vf/TRR09r//LLL6Nz585qAhEhw+PlN/u1115T7yUiIiIiKrNBKRkSJ09nZVa8AMlY+uqrr9QNrxQil6F1GRkZYRlKMuNd1apV1WtZFxx6EJgRL7RNwVnyZDshIQFOpxNms1kthbUJPce5+lKYMWPGqKfSAZIpVatWLZQEQ/6f34DhBbx57hK5BhERnSIBqdbPfBnRPqwd2wEpcfZztgsMVZffpTMNVS9I9of+hgnJrPr444+LoedERERERBEcvnfDDTdg06ZNaka8wNKmTRtV9Dzw2mq1YsmSJcH3bN++Henp6Wjfvr3alrWcI3TogTzFlYCTFCwPtAk9R6BN4BwyLE8Kl4e20XVdbQfayPFz9aUwdrtd9SV0KSkZuw/DcFth6AZ8XgaliIjolKIMVS/oTMPfzzZsnYiIiIioTGRKxcfHo2nTpmH7YmNjkZKSEtwvdSzkKW2lSpVUQOfBBx9UQaArrrhCHe/YsaMKPvXq1QvPP/+8ulEeO3asKp4uASExePBglXk1atQo9O/fH0uXLsXcuXPVkIUAuUafPn1UIKxt27aYMmUKcnJygkMcEhMTz9mXSNOs8j+qpBR87sgOJyEiIiIiIiIiitqgVFFMnjxZDS/o3r27KhouwwZef/314HEZdjd//nw88MADKkAkQS0JLk2YMCHYpl69eioANXz4cFUfo2bNmnjrrbfUuQJ69OiBw4cPY9y4cSqw1bJlSyxcuDDsCfG5+hJp3kwf4IuDYfPA5/FGujtERBRFUlNTzzlUvaAzDX8/27B1IiIiIqLzoRmGlMam0iA1pSTrKjMzs9iH8r31wGggJw5w5KBam9roOuhvxXp+IqKKzuVyYdeuXephh0zQUdYKnbdr105lA7/66qvBoeq1a9fG0KFDCy10Lg9scnNz8emnnwb3XXnllWjevDkLnZ/l76K0fvfLIn4fREREFUdWEX/3ozpTis6DWf7HAPwaDJ8feTk5cMbGRrpXRETllgSDilJkPFqca6h67969UaNGDTVzrJAZcq+55hpMmjQJXbt2xfvvv48ffvgB06dPj/AnISIiIqLygkGpcsJkBnQt/2m539Dhys1mUIqIiIo8VF0m75Bh6qFZUbNnz1a1Gh977DFcfPHFaua9gvUgiYiIiIguFINS5YDP6wXcGqDbYRguGLoOd25OpLtFRERRRobqyVKY5cuXn7bvjjvuUAsRERERUUk49UiUyiyL1Qpdhu4ZJjX7HvwGXHl5ke4WEREREREREdEZMShVThgeSXqzwjBM0HU/PLm5ke4SEREREREREdEZMShVThiQFCkTpKqUTKjocUd2RigiIiIiIiIiorNhUKq80Iz8tWGG7jfgc7si3SMiIiIiIiIiojNiUKqc0Kx+GDCgyT+pZEp5GJQiIiIiIiIioujFoFQ5oamBewB0E6Dr8Oa5I90lIiIiIiIiIqIzYlCqnDBZ84NShqbB0A34vAxKEREREREREVH0YlCqnDDZ8v8pNZgh1aV8LHRORERERERERFGMQalyQrPmz7wHXYPf64PP4410l4iIiIiIiIiIzohBqXLCareqQucwmQCZfc/LoBQRERERERERRS8GpcoJe4Iz/4Vhgq771Qx8eTk5ke4WERFFkalTp6Ju3bpwOBxo164dVq9efca2b775Jv785z8jOTlZLR06dDitvWEYGDduHKpVqwan06na7NixI6zNsWPHcM899yAhIQFJSUkYMGAATpw4EdZm48aN6lrSr1q1auH5558/rT/z5s1Do0aNVJtmzZrhs88+K/a+bN++Hddddx2qVKmirnPRRRdh7Nix8EbwQY/8e2madtoyZMgQ7N69u9Bjssj3FZCeno6uXbsiJiYGaWlpGDlyJHw+X9h1li9fjlatWsFut6NBgwaYOXPmH/r7ISIiIioKBqXKCWtsrIzdU7Pw+b262ufKzY50t4iIKErMmTMHI0aMwPjx47Fu3Tq0aNECnTp1wqFDhwptL0GKu+66C8uWLcOqVatUsKhjx474/fffg20kePTKK69g2rRp+P777xEbG6vO6XK5gm0kCLRlyxYsXrwY8+fPx1dffYVBgwYFj2dlZanz1qlTB2vXrsULL7yAJ598EtOnTw+2WblypeqLBJHWr1+Pbt26qWXz5s3F2her1YrevXvjiy++UAGqKVOmqOCcfGeRsmbNGuzfvz+4SN/FHXfcof5NQo/J8tRTTyEuLg5dunRR7fx+vwpIeTwe9T3OmjVLBZwkgBewa9cu1UYCchs2bMCwYcMwcOBALFq06IL/foiIiIiKxKBSk5mZKTXI1bq4LfrPO8b0eycZb97zkvHOw6ON+dNeM/bv/qXYr0NEVFHl5eUZP/30k1orfr9hnDgc2UX6UERt27Y1hgwZEtz2+/1G9erVjYkTJxbp/T6fz4iPjzdmzZqltnVdN6pWrWq88MILwTYZGRmG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s7p166qanQWXIUOGhLWT2p5dunRRxz7++OOwY+np6ejatStiYmKQlpaGkSNHwufzhbVZvnw5WrVqBbvdjgYNGmDmzJmn9WXq1KmqPw6HA+3atcPq1atL6FMTERFRRXHew/deffVVvPnmm+jWrRv++c9/Bve3adMGjzzySHH3j4ohU0ox+QC/FzBJefOTdAf8njzkZmZGrH9ERER0ZmvWrAmbRGbz5s248cYbcccdd4S1kweDEpAqSN4rAamqVati5cqV2L9/P3r37g2r1Ypnn302WC9U2gwePBjvvfcelixZgoEDB6JatWro1KmTajNnzhz1UHLatGkqICXXk2Pbt29Xga5IFmWVGhhERERUDL+pEXBBhc4vu+yy0/bLk7WcnJzi6hcVE4vVCpPZDGgG4HcD1tBq+rHwew/Bx2LnREREUaly5cph2/JAsH79+rjmmmuC+zZs2IBJkybhhx9+UIGkUF988QV++uknfPnll6hSpQpatmyJp59+GqNHj8aTTz4Jm82mAk316tVT5xCNGzfGN998g8mTJweDUi+99BLuu+8+9OvXT23LexYsWIB33nkHjz76KCJFZgmKRFFWIiIiitDwPblpkZufghYuXKhuYij6WGxWaCYdJsMTfsAcCxj5T1UP/54emc4RERFRkXg8Hrz77rvo379/MCsqNzcXd999txpaJ9lQBa1atQrNmjVTAakACTRlZWVhy5YtwTYdOnQIe5+0kf2B665duzasjclkUtuBNkRERESlkiklqdtSx8Dlcqn6BVJP4L///S8mTpyIt95664I6QSVLZt8zNB0mvwt6yH7d7AzEpHD8wO/Apc0j1UUiIiI6B6kVJfU8+/btG9w3fPhwXHnllfjrX/9a6HsOHDgQFpASgW05drY2ErjKy8vD8ePH1TDAwtps27btjP11u91qCZDzEREREf2hoJTUGHA6nRg7dmzw6ZzMwvfyyy+jZ8+e53s6KgVWmx2a1QDcrrD9utmGQPWJTBY7JyIiimpvv/22KmYu913ik08+wdKlS7F+/XpEI3lg+dRTT0W6G0RERFSehu+Je+65Bzt27MCJEyfU07XffvsNAwYMKP7eUbGw2G3QNAMmmYEvlGaB54QHhq4jLysbHld40IqIiIiiw549e1RdKHk4GCABqV9//VXNgCwz7coiunfvjmuvvVa9liF9Bw8eDDtXYDsw3O9MbRISEtSDyNTUVJjN5kLbFDZkMGDMmDHIzMwMLnv37v3D3wMRERFV8KDUM888o4qdi8DUwhTdbA47NKl1jgI1pSxW6H4Num7IXNI4uHdPpLpIREREZzFjxgx1zyWz5AVIgfGNGzeqWp+BRUiBcmkv2rdvj02bNuHQoUPB9y1evFgFnJo0aRJsIzPuhZI2sl9IMfTWrVuHtdF1XW0H2hRGJsGR64QuRERERH8oKDVv3jw0aNBA1S94/fXXceQIh31FO4vNDpgMQPMCRmhVKcDIdcJit6rXx6SuFBEREUUVCQBJkKlPnz7BbCghWUpNmzYNW0Tt2rXVxDSiY8eOKvjUq1cv/Pjjj1i0aJEqwSD1QSVoJAYPHoydO3di1KhRqkaU3N/NnTtX1asKrSn65ptvYtasWdi6dSseeOABNetyYDY+IiIiolIJSskNjTyVk7TwF198UdU1kKd2s2fPVjWmKPrY7HZoJjMMKXPuLTCEzx8LszU/KJV5ODwtn4iIiCJPhu2lp6erWffOlwy7mz9/vlpLVtO9996L3r17Y8KECcE2EsBasGCByo5q0aIFJk2apCavkRn4Anr06KHu+8aNG4eWLVuqrCyZeblg8XMiIiKi86EZMoXeH/Dtt9+qgJRkUMmMfJxZ5czku0lMTFR1FUozhf2XTevx7b/nwnMgHn5zQ/gdycFjluztqNPBAr/HA5PZjBv7DIDlZJCKiIiIyt7vfrTi90FERFRxZBXxd/+CCp2Hio2NVUUwpd6A1+v9o6ejEmB3xECzSlEpA9ALFDM3xagi5xKQ0v1+HD+cPz00EREREREREVFJuqCglBQ6/8c//oFLL70Ubdq0UVMRy5S/MhMfRR9HbAzMNgs0GDAVCEoZWgzcmTmIrZSoto/8lh6hXhIRERERERFRRXKqWmYRXXHFFVizZg2aN2+uilveddddqFGjRsn0joqFIyYeZosJ0PzQtLywY36zDZ6cPJgdDrWdcfDU7DxERERERERERFETlLrhhhvwzjvvBKcRpuhndzigmeWf2gvDCA9KwWSH7jZUYEpkHzsamU4SERERERERUYVy3kEpGbZHZYvN4YDVZoUGLzStwOx7Vhu8Lh1ZBw/DYrPC63Ij8+gRJKakRqq7RERERERERFQBFCkoNWLECDz99NOqqLm8PpuXXnqpuPpGxcga5wSQA5gKFDqXulJeM3wuF6x2G2QyxsO/7WZQioiIiIiIiIgiH5SSQuaBmfXk9ZlomlZ8PaNi5YyNkzLm+aXtvTmANfbUQZ/MvGfA63bDYrXi2EEWrCciIiIiIiKiKAhKLVu2rNDXVHbYYuzQTf78DU92eFDK74Bu6PC5PDCbzcg+fCRi/SQiIiIiIiKiikHyZqgCsFod0GBAMzRY9MywYwZiYNI0mO1W5GXlwHUiB3k5ORHrKxERERERERGVf0XKlLrtttuKfMIPP/zwj/SHSogEnDSTDsNvAbSssGMmJMCZIMc1uI5lq32Hf9+D2pdwhkUiIiIiIiIiimCmVGJiYnBJSEjAkiVL8MMPPwSPr127Vu2T4xSdbDYHYDXUa3OBYuc+czziU5PVa92vw+f14ti+fRHpJxERERERERFVDEUKSs2YMSO4VKlSBXfeeSd27dqlsqJk2blzJ3r27InU1PObsW3ixIm4/PLLER8fj7S0NHTr1g3bt28Pa+NyuTBkyBCkpKQgLi4O3bt3x8GDB8PapKeno2vXroiJiVHnGTlyJHw+X1ib5cuXo1WrVrDb7WjQoAFmzpx5Wn+mTp2KunXrwuFwoF27dli9evV59yVaWewOCTlJOXpolvyi9QG6JRa2mFg44mJhsVvhyspB5pFDEesrEREREREREZV/511T6p133sEjjzyiCmIHyOsRI0aoY+djxYoVKsjz3XffYfHixWqGv44dOyInpJ7R8OHD8emnn2LevHmq/b59+8KGE/r9fhWQ8ng8WLlyJWbNmqUCTuPGjQu2kQCatLnuuuuwYcMGDBs2DAMHDsSiRYuCbebMmaM+w/jx47Fu3Tq0aNECnTp1wqFDh4rcl2jmiHFAs5ycHdEWHrCD1YmsI0dQuV492GKc8GS5kHM8U2VMERERERERERGVBM0wjPwxXUWUnJysgj5//etfw/b/73//Q9++fXH8+PEL7szhw4dVppMEfK6++mpkZmaicuXKmD17Nm6//XbVZtu2bWjcuDFWrVqFK664Ap9//jluvvlmFSCSLC4xbdo0jB49Wp3PZrOp1wsWLMDmzZuD15LMroyMDCxcuFBtS2aUZG299tpralvXddSqVQsPPvggHn300SL15VyysrLUEEc5lwyDLE3pP/+EJa//B3qGFYhzweXrHHY8qfJX+MvDw/DVnPdw9Jd9SKxZCZf/5S+oXu/iUu0nERFReRHJ3/1oxO+DiIio4sgq4u/+eWdK9evXDwMGDMBLL72Eb775Ri2TJk1SmUdy7I+QzopKlSoFa1VJ9lSHDh2CbRo1aoTatWurQJCQdbNmzYIBKSEZTvIFbNmyJdgm9ByBNoFzSJaVXCu0jclkUtuBNkXpSzRzOGNhcphgSLKUbga8eWHH3cdciE9KQkLlyjDbzcjLyMGRfb9FrL9EREREREREVL4Vafa9UC+++CKqVq2qAlH79+9X+6pVq6bqOD388MMX3BHJTJJhdX/605/QtGlTte/AgQMq0ykpKSmsrQSg5FigTWhAKnA8cOxsbSRwlZeXp7K7ZBhgYW0kG6qofSnI7XarJUCuFylWhx2OxBh4D+YBfg1mXxb8VmfwuJ5rU+tq9S/Cvq074M7IxeFde4A/RazLRERERERERFSOnXemlGQQjRo1Cr///rsa/iaLvJZ9oXWmzpfUlpLhde+//z7KCynkHjpzoQwHjBRHTDwc8bHQTH4YPgOaHp4pZfhi1bpukxaITUuCYejYv/VX1pUiIiIiIiIiougISoWScYHFURNg6NChmD9/PpYtW4aaNWsG90tGlgytk8BXKJnxTo4F2hScAS+wfa420nen06lmDZSAWmFtQs9xrr4UNGbMGDUkMbDs3bsXkeKMjYXFZgMcUkJMA3RX2HG/kaQCUBarFe1v6QZoJvjdPqxe9GnE+kxERERERERE5dcfCkr9UVJjXQJSH330EZYuXYp69eqFHW/dujWsViuWLFkS3Ld9+3akp6ejffv2alvWmzZtCpslT2byk4BTkyZNgm1CzxFoEziHDMuTa4W2keGEsh1oU5S+FGS324OBu+IK4P0REnCyJVogYSmTdmpYoTDMSXDn5arXKVVrILlumnq998ctOLR3T0T6S0RERERERETlV0SDUjJk791331Uz2sXHx6vaTLJInSchQ96kqPqIESNUFpUUG5di6hIECsx217FjRxV86tWrF3788UcsWrQIY8eOVeeWoJAYPHgwdu7cqYYYSo2o119/HXPnzsXw4cODfZFrvPnmm5g1axa2bt2KBx54ADk5OcHi7UXpS7Sz2Kywx8fInItS3j3smG6Jxa7tPwW3617WEhaHDd48H35c9iU8rvDMKiIiIiIiIiKiUi10XpzeeOMNtb722mvD9s+YMQN9+/ZVrydPnqzqWHXv3l0VDZdZ8ySoFCDD7mTonwSRJEAUGxuLPn36YMKECcE2koG1YMECFYR6+eWX1RDBt956S50roEePHjh8+DDGjRunAmMtW7bEwoULw4qfn6sv0c5stcKeEAtYMgFTeKYULA7sXrsWTS/Pz/pKq1ETcVWTkfX7EXjyXFi37Atc0eUvkek4EREREREREZU7miFj6IrBb7/9pgJB06dPL47TlUsy+55kXEl9qUgM5fvmf/OQeeAQDm/bC+9xMzyOG8KOxzgX4y+jh6rhe1Jf6ouZbyEvMwtmkwnW2Bg0vurPuOjS5qXebyIiorIo0r/70YbfBxERUcWRVcTf/WIbvnf06FG8/fbbxXU6KgE2p1OtrUlOaGYd8IUP4fMcB3asXxusPxWXkgRHfBzsyYlq364N6yLQayIiIiIiIiIqjyJaU4pKV0JKZbWOSYyFZpYp9/ILmwd5quLo3t+QfXKGwcTK+UMXYxISYDKb4TqRg51bNpZ+x4mIiIiIiIio3GFQqgJJqVZdrS02GwyTDrMvPChlWFJlSkT8uuEHtV25Zi21dmVlo8pFF6nXuzduKPV+ExEREREREVH5w6BUBZJcuSo0k0llPZnsGkxGdthxvyURhq7jwM6dara91Gq1AE2Dz+NB5dp11XvzsrKR/vOpWfqIiIiIiIiIiEp09r3bbrvtrMczTg75ougldaJiEhOQczwD1gQr/EfCg1KwxSBz32Ek1ayCn9f/gKbtr0JsUqJqn5N5HFUuqosDv+zEzg3rUfuSJpH6GERERERERERUkTKlpGr62ZY6deqgd+/eJdtb+sPiUyoFi54blmxA94UdzznkUuuDO39R66S0/LpSxw/sxyWt26vMKQlS7du1o9T7TkREREREREQVMFNqxowZ52xz4sSJP9ofKmGJaVVVtpPVYYVmzgb8XsB06s/AyElWaylqLkP4KlWvjt+3b0f2kSOIT0pC5bq1cXjXHvyy/gdUr3dxBD8JEREREREREVWITKnJkyef9Xh2djY6depUHH2iElS5en7xcs1sgmHzwaR7whtoVeH35WdPHTv4O6rWvkhlR3ldbmQePYKGra9Q29mHj+HAnl8j8RGIiIiIiIiIqCIFpR577DH8+9//PmOGVOfOnXH06NHi7BuVgMSUVDX7ntlqhcVuhqnADHy6NQmu7PyMt4wjR2BzOOBMiFfbB/fsVO+vVCN/Fr8da9dG4BMQERERERERUYUKSv3nP//B/fffj08++SRsf05OjgpIHT58GMuWLSuJPlIxi0lMhNlshiXGDM3ICjumW2KRcyi/AHrW0cNqHZ+SotbZx/ODjpe0vjz/+OHDOH74QCn3noiIiIiIiIgqVFDq9ttvx6uvvoq77roLy5cvDwtIHTx4UO2rVq1aSfaViklC5VS1ttilltSx8IMmC7xHLfD7/Thx7Lja5YxLUGvXifysqpSqNYLZUzKkj4iIiIiIiIioxIJSYuDAgRg/fjz++te/qiBUly5dsG/fPpUhVb16/pAuin7JVaqqtWY2Q7PkAl532HHNn4zc49lqGJ/P64UjLlbt97rzZ+YTthinWudlZZZq34mIiIiIiIiogs2+FzBq1CgcO3YMN9xwA+rWrauCUzVr1iyZ3lGJqFyjjlqbrBbo5hPQdA8M2IPHDS0JnoydMFKTkHn0EOIS8jOlPHl5wTb2mPxAVW52+PA/IiIiIiIiIqJiDUrddtttYdtWqxWpqal46KGHwvZ/+OGHRT0lRYgzNhb22Fg1HM9sBYy8HPiRPxxP6OZEeHN9MPw6jh/cjyp1Gqj9XrdHZU5ZrNbThvQREREREREREZVIUCoxMTFsW2pLUdkVm5iInMxMwKTB5M+GH/lD+oTfEg+rD3Dl5iDzyGHUbdIC0DTAMJCXk4P4pCTEnMyecucxKEVEREREREREJRiUmjFjxgWcnqJVfGplHNu3DyaLCQbyZ9sLsljhz7Mj7+gJ5GRmqMwoq90Gr8uNnMyjKigVl5AfpPTknhrSR0RERERERERUIoXOqfxIrZ4/U6It3gyYcgCvN+y45k+E57gXuRn5ASuLPb/m1Ims/BpS8ZXyZ/Dze73wuE4VQCciIiIiIiIiKgoGpSqo1Oq11ZC82LRkGJoEpHxhxw0tHkaeA9mHjyHz6BHYnTFqv+tETrAulclsVq+zM45G4BMQERGVfzKpjKZppy1DhgxRx++//37Ur18fTqcTlStXVjMkb9u2Lewc6enp6Nq1K2JiYpCWloaRI0fC5wv/3ZeJa1q1agW73Y4GDRpg5syZp/Vl6tSpqj8OhwPt2rXD6tWrS/jTExERUXnHoFQFpYqVJ8TD5nBAc7ph8odnOxmmeBW0yv79OI4fPgBHXH5Qyp17aqifzelQ65yszFLuPRERUcWwZs0a7N+/P7gsXrxY7b/jjjvUunXr1qrEwtatW7Fo0SIYhoGOHTvC7/er47KWgJTH48HKlSsxa9YsFXAaN25c8Bq7du1Sba677jps2LABw4YNw8CBA9X5AubMmYMRI0Zg/PjxWLduHVq0aIFOnTrh0KFDpf6dEBERUfnBoFQFFlcpWa3NDhNMenhtKL85FtA1+LNt+P3nbbAGM6VOFTa3ndyXk3G8VPtNRERUUUj2U9WqVYPL/PnzVWbUNddco44PGjQIV199tcpgkkynZ555Bnv37sXu3bvV8S+++AI//fQT3n33XbRs2RJdunTB008/rbKeJFAlpk2bhnr16mHSpElo3Lgxhg4dittvvx2TJ08O9uOll17Cfffdh379+qFJkybqPZJ59c4770TomyEiIqLygEGpCiwpNU2tTXYz4D8WdsywxcEwLND8dvz63Y9wxsSq/V73qYwqR3ycWuedHNJHREREJUeCSBJc6t+/vxrCV1BOTo7KmpIAU61atdS+VatWoVmzZqhSpUqwnWQ4ZWVlYcuWLcE2HTp0CDuXtJH9geuuXbs2rI3JZFLbgTZEREREF4JBqQospXqN4FA+QzsuVcvDjhuGCTCscB/zYN/PO9Q+T96pjCp7bH6gyp3DoBQREVFJ+/jjj5GRkYG+ffuG7X/99dcRFxenls8//1wN8bPZbOrYgQMHwgJSIrAtx87WRgJXeXl5OHLkiBoGWFibwDkK43a71TlCFyIiIqJQDEpVYClVa6hi5RaHGZrJD+j59ScCNNhhSAH03Fgc+f03NXTP6/bAd3Kmvpj4BLXOyzkRkf4TERFVJG+//bYafle9evWw/ffccw/Wr1+PFStW4JJLLsGdd94JVxTMjDtx4kQkJiYGl0D2FhEREVEAg1IVXI3GDWG2WGHSDGj+/NoSAQbs0DS/ypbK3HsYrswcSZ9C3snMqISkSmrtzYv8jS8REVF5tmfPHnz55ZeqAHlBEvC5+OKLVW2pDz74QM2+99FHH6ljUofq4MGDYe0D23LsbG0SEhLUrH6pqakwm82FtgmcozBjxoxBZmZmcJFaV0REREShGJSq4Jq0vQqOhFhoZj9Mhjv8oLUyDIsEnHToGVborvzpo3Myj6p1bGKSWvs8p7KniIiIqPhJrai0tDQ1S97ZyOx7ssjQOdG+fXts2rQpbJY8Gd4nAScpWB5os2TJkrDzSBvZL2QooMzyF9pG13W1HWhTGLvdrq4TuhARERGFYlCqgpN6UpdceSUMmx+aHp4p5bWnwrB5YZi8gNcJb54XPp8PuScLm8cmJEIz5f8JZWfkB6qIiIioeEkASIJSffr0gcViCe7fuXOnGiInRcjT09OxcuVK3HHHHSq76aabblJtOnbsqIJPvXr1wo8//ohFixZh7NixGDJkiAoaicGDB6tzjRo1SmVZSY2quXPnYvjw4cFrjRgxAm+++SZmzZqFrVu34oEHHlCF1WU2PiIiIqILxaAUoWHLNjA7NJiMHMAXnvGkue3QoMOAGboX8OW6kBtSqNTmdKp19vHw2fuIiIioeMiwPQk6yax7oRwOB77++msVgGrQoAF69OiB+Ph4FZySrCohw+7mz5+v1pLVdO+996J3796YMGFC8DwyW9+CBQtUdlSLFi0wadIkvPXWW2oGvgA594svvohx48ahZcuW2LBhAxYuXHha8XMiIiKi83HqcRtVaEn1KuPIETdgyBA966kDvkrQzMdgQIPh1eDNdcOdmx08bI+JUbPv5Waf2kdERETFR7KdZEheQVLw/LPPPjvn++vUqXPOdtdee60qln42Q4cOVQsRERFRcWGmFCmJaamAlgWTP7yulGGpBcMss/L5ZTwf/G4vPLmnCpvb42LU2sWgFBERERERERGdBwalSIlPSQHMbmj+3LD9XnsKdIsuAwBg6Da4c71hWVGO2Fi1zmNQioiIiIiIiIjOA4NSdCq45PBC03OAgjPpuaSulBSYMsPwAjnHM4KHYuLi1dqdFx7MIiIiIiIiIiI6GwalSIlJSILFbIJm8kAzwmfhg78qDOjQDBNkdF9e5qlC53FJyWrtycsr7S4TERERERERURnGoBQpcQkJ0CwGNN0Lkz88wGTYqkmaFHRDg+axwpfnRXZGfrZUbGKKWntdbvgKZlgREREREREREZ0Bg1KkxCenAmYN0Nww+U+EHfPbEtWsPybYYOixKiiVl52Z/76kJEBTg/uQnXE0In0nIiIiIiIiorKHQSlSYhMSYbaYYGheGMbpdaU0w4z8yahj4HfrOLh3T/CYPSZ/Br4TGfmBKiIiIiIiIiKic2FQioKsDiug+aBpfpgMV9gx3RQPk8mABjN8ucCR3/YGj9li7GodyJ4iIiIiIiIiIjoXBqUoyJYcC5j8MHQdJn94UMqw1oCOHHkFeOJwfP/+U+9zxqp1btapAuhERERERERERGfDoBQFxcTFw2TWVaYU9IJ1peKhwQcDBkyGE1l7jgWPOePi1DovJ/w9RERERERERERRGZT66quvcMstt6B69erQNA0ff/xx2PG+ffuq/aFL586dw9ocO3YM99xzDxISEpCUlIQBAwbgxInw4MjGjRvx5z//GQ6HA7Vq1cLzzz9/Wl/mzZuHRo0aqTbNmjXDZ599FnZcCn2PGzcO1apVg9PpRIcOHbBjxw6UJzEpSdDMGgxzLqBnA15PeAPDAcNwQ4cF3kwD+3b9onbHJiSotScvNxLdJiIiIiIiIqIyKKJBqZycHLRo0QJTp049YxsJQu3fvz+4/Pe//w07LgGpLVu2YPHixZg/f74KdA0aNCh4PCsrCx07dkSdOnWwdu1avPDCC3jyyScxffr0YJuVK1firrvuUgGt9evXo1u3bmrZvHlzsI0Esl555RVMmzYN33//PWJjY9GpUye4XOHD3MqyuMRKgMmASTNgMuXApOeFN9BSYTa5oRk64LNi3ReL1O6YhES1ducwKEVERERERERERWNBBHXp0kUtZ2O321G1atVCj23duhULFy7EmjVr0KZNG7Xv1VdfxU033YQXX3xRZWC999578Hg8eOedd2Cz2XDppZdiw4YNeOmll4LBq5dfflkFv0aOHKm2n376aRXkeu2111QQSrKkpkyZgrFjx+Kvf/2ravPvf/8bVapUUdldPXv2RHkQn5Ka/0IzVMFzkz8LOvIDTsJrqwKL93doMkOfbsOJg8dwaO8exCYk5x93e+DzemGxWiP1EYiIiIiIiIiojIj6mlLLly9HWloaGjZsiAceeABHjx4NHlu1apUashcISAkZVmcymVQ2U6DN1VdfrQJSAZLhtH37dhw/fjzYRt4XStrIfrFr1y4cOHAgrE1iYiLatWsXbFMeJFWurP4iJBPK0KTYeUbYccMaowJ0MDRohhWurFxkZRxDrGRKaZqMcUROFmfgIyIiIiIiIqIyHpSS7CXJSFqyZAmee+45rFixQmVW+f1+dVwCRRKwCmWxWFCpUiV1LNBGMppCBbbP1Sb0eOj7CmtTGLfbrYYPhi7RrFJaVZhMOqDJ/9dhmLIAb/gQPpMRl59JBQt8J/zIzcpQmVE2h10dz8nKD/QREREREREREUXt8L1zCR0WJ8XHmzdvjvr166vsqRtuuAHRbuLEiXjqqadQVkhwyWQzwSdBJ10Ky+uw+LLhszqDbQytEjT8BhgxMDxmHNy1G/gTYItxwpPnwgnJPqsX0Y9BRERERERERGVAVGdKFXTRRRchNTUVv/ySP+ub1Jo6dOhQWBufz6dm5AvUoZL1wYMHw9oEts/VJvR46PsKa1OYMWPGIDMzM7js3bsX0c7kMEPTDBiaoUbkaQWG8HltaTAg2VR+aD47Dm7bBY/LBZszRh3Pywmf+ZCIiIiIiIiIqMwHpX777TdVU6patWpqu3379sjIyFCz6gUsXboUuq6rek+BNjIjn9frDbaRIuZSoyo5OTnYRoYIhpI2sl/Uq1dPBZ9C28hQPKlbFWhzpiLtCQkJYUu0s8bYTxY612EYGoDwoBSsTphggwEPDJjhPuLFt5/8H2JOfra8EwxKEREREREREVGUB6VOnDihZsKTJVBQXF6np6erYzIb3nfffYfdu3ergJDMfNegQQNVhFw0btxY1Z267777sHr1anz77bcYOnSoGvYnM++Ju+++WxU5HzBgALZs2YI5c+ao2fZGjBgR7MdDDz2kZvGbNGkStm3bhieffBI//PCDOpfQNA3Dhg3DM888g08++QSbNm1C79691TW6deuG8sQeFwNIXSmTFDQ3wTCfALzhgSbDiIVmcqvC5oYXSF+9BbvWb1C1vtzMlCIiIiIiIiKiaK8pJYGf6667LrgdCBT16dMHb7zxBjZu3IhZs2apbCgJAHXs2BFPP/20ykAKeO+991TwSGpMyax73bt3xyuvvBI2S94XX3yBIUOGoHXr1mr437hx4zBo0KBgmyuvvBKzZ8/G2LFj8dhjj+Hiiy/Gxx9/jKZNmwbbjBo1Cjk5Oep90p+rrrpKBbIcDgfKE1uMHZoZgF/G7unQzAYs7qPwWeOCbXRTMkzaIcDiAmwGdD+QsecwTJoGQ5ci6EREREREREREZ6cZhsEoQimRIX8SJJP6UtE6lG/FB+/jlyUbYLjNMLwx0Kx58LsT4Itvc6qRNw82/3eq5lRMHTNMVjPcx/Ogu/ywxFpxw+A+qF7v4kh+DCIioogrC7/7pYnfBxERUcWRVcTf/TJVU4pKXlxyImyJkkAn9aRMMPwWwHosvJHMxuePUcP7dJ8fVRrUQ2LtyjB8JvjcPuzevDlS3SciIiIiIiKiMoJBKQpjsdnhTI4DbD6ZyxCaboPJ4Ye5QF0pGIlSUgquox5Uql4d8akpMNkB3QUcTt+jZuQjIiIiIiIiIjoTBqUojNlig8Vmg1nKdplkhj0NcNtgch8Ia6eb4qFBg+Gy4ueV36Ppn6+GyW4GDA05B45h908bI/YZiIiIiIiIiCj6MShFYRwxDljsVqhCYw4PoPnVUD4NR8Pa+awp0E0eaLoVJw5mYdv3K+FMjYNmAdwZHuzaxKAUEREREREREZ0Zg1IUxmJ3QDObYDJrqpC5obkhLwx7VnhDqwOGYQbMHvhzDJw4ehy+XDc0uw7d0HB4WzqOHw7PriIiIiIiIiIiCmBQisIkV66qglBC90qGlGz6YXHoMHuyw9pq3gRA01Vz94lcVRvdZLLAbDbg93rx3fz5EfoURERERERERBTtGJSiMIkpqbj06qthcpjz/zz8DrXf7zdg9h0Kb2xOg6p2rkJXRv4KBmLS4tThI9v24PC+vRH4FEREREREREQU7RiUotPUbdQUtS67FGaTBJrMMHw2FWzSjMNh7by2ytB1EwyPGV6PD74THtUuoVoqLA4rdL8P33/6ScQ+BxERERERERFFLwalqFB1mlwKS6y88qsy57phQLcWqCtlcUDzx8IwDLgOZcPv0WF4AHduHmpc1lhlUGX+dgibV30ToU9BRERERERERNGKQSkqVHxyMjSrCTC7YGg+mAwzzBYNZk+BwJQRC80E+Fw6dJ8Ov1uDOzsPl7S6HM7kWPjyvNi5fh0O7d0TqY9CRERERERERFGIQSkqVGKlyjCZTYAM4bP4JGEKhq7B4i1QV8qUCJj9gJSg8mlqKJ87MxexCUlIqVsDZocVeRnZ2LhiGTwuV6Q+DhERERERERFFGQalqFA2hwNmuwkmzQ/NIvWkLDBMOnSEB6U8tioqU0q1jdUAwwLvCS+OH96PynXrIL5qJehuL9w5OVi37IuIfR4iIiIiIiIiii4MStEZmWMcgPXk7HomP0wmQIvNDm9kccDISVSz8NkTZKY+Pwyfhl/Xr0Nq9ZqwWC1wJMerpkfT9+KXTesj82GIiIiIiIiIKKowKEVn5Ih1ypx7gFeDZsn/azFbALM7I6yd31QX/lzA6rABZi/gNeHort/gjE0ANA02pwNJ1auptju+/x6ZR49E6BMRERERERERUbRgUIrOyJ4YD82kA4akSBkSX4LhN8Hs/TWsnc+eAiM3Bp48N2DVYRga/B4fdm5aB2dCfpZUSrXqcCYmQPf7sXbx5/B5vRH6VEREREREREQUDRiUojOKS6oEzSwFzk3QrIAOQxUzR+JBQA8JKpksMIxqyD2UA00yqzSZic+PA7/ugtlmU02yjx9D6xu7wGQ2Iy8zC4d+2x25D0ZEREREREREEcegFJ1RUlplmC0maIYGs8zEJ0P4DMAaZ4XVdSCsrc9WFX5JqvLmj/OTSlRSZyrn6FF1PPvIESSmpCImKUFt52ZlRuIjEREREREREVGUYFCKziilRm1AMqU0QDcAR3x+1hO8gGb+Oaytbo2FKTceBvwSoYKh+dV+GdKXm3kCedkn4HG5YLM71f7cnJzS/0BEREREREREFDUYlKIzSq1SDZrJrOpJ6T4DVodVBan8LiClZSVYXMfD2utGbWhWCUaZ4D7iQ1ylSrDabcg7ko3j6QexfcMa2GNjVVs3g1JERETnVLduXWiadtoyZMgQHDt2DA8++CAaNmwIp9OJ2rVr4+9//zsyM8OzkdPT09G1a1fExMQgLS0NI0eOhM/nC2uzfPlytGrVCna7HQ0aNMDMmTNP68vUqVNVfxwOB9q1a4fVq1eX+OcnIiKi8o1BKToji9UKi80ETbKefIDZblf1oiQZSg3p0zaGtfc5q8NQA/d0wGNGbk62mnXPbDPD7/Jgy5fL8Pu2bfDmueHJzYvY5yIiIior1qxZg/379weXxYsXq/133HEH9u3bp5YXX3wRmzdvVoGkhQsXYsCAAcH3+/1+FZDyeDxYuXIlZs2apdqNGzcu2GbXrl2qzXXXXYcNGzZg2LBhGDhwIBYtWhRsM2fOHIwYMQLjx4/HunXr0KJFC3Tq1AmHDh0q5W+EiIiIyhPNMAxV/odKXlZWFhITE9UTzISE/NpK0W7OM88ge08OYDYQVysWeQdzoOeaEFsvBmazGYd+bQWYrcH21uwfYXIcBnQTki6NQ73LWsDj9mLnyh9UjSlbfAxyj2SjStO66Nx3UEQ/GxERUVn73ZeA0fz587Fjxw6VMVXQvHnzcO+99yInJwcWiwWff/45br75ZhW8qlKlimozbdo0jB49GocPH4bNZlOvFyxYoAJbAT179kRGRoYKcgnJjLr88svx2muvqW1d11GrVi2VqfXoo49G7PsgIiKi6FTU331mStFZWWOdgAzJ82rwZrlgcub/ybgz8xCTnACHe1tYe6+tAQyzAZh1eF1eHPhlJ0wmIKlWFcRWSYYjIU5VS886cCRCn4iIiKhskmynd999F/379y80ICUCN34SkBKrVq1Cs2bNggEpIRlOcqO4ZcuWYJsOHTqEnUfayP7AddeuXRvWxmQyqe1Am8K43W51ndCFiIiIKBSDUnRWzvhYWOxmVUtK9+vQJMIkwwFy/bDY7TCnhM/CB3ss9Nw4aBYD9pj8ouZH9uyFz+2B1W5HUq1qap8n01X6H4aIiKgM+/jjj1X2Ut++fQs9fuTIETz99NMYNOhUJvKBAwfCAlIisC3HztZGgkh5eXnqvDIMsLA2gXMUZuLEieoJaWCRzCoiIiKiUAxK0VnFJCdBk1rnFl1t615VUAqGT4PfryP1kuqw5e0Pf5OpPqBrsMbYEZeSrHblHs+E4dcRn5C/7fd6sT99Z+l/ICIiojLq7bffRpcuXVC9evXTjkkASepCNWnSBE8++SSiwZgxY1TmVmDZu3dvpLtEREREUYZBKTqrhNTKam2JMeUXOPdJvEkKn2vw5uSozCmTdWvYe3yOZBhuM/KOZ6PldR1hMpulfBlOHMmAx50Hi9Om2u3a9GNEPhMREVFZs2fPHnz55ZeqAHlB2dnZ6Ny5M+Lj4/HRRx/Baj1V67Fq1ao4ePBgWPvAthw7WxsZBiiz+qWmpqo6koW1CZyjMDKTn5wjdCEiIiIKxaAUnVV8pUrQNBPMVjPMsVZASlT4JcgEnMjIrw2R2CgB0EOmljZZofuqIPdYDhJTUnHx5W1gcdjhzsrD4Z274UiKVc2O7v0tMh+KiIiojJkxYwbS0tJUNlTBDKmOHTuqguWffPIJHA5H2PH27dtj06ZNYbPkyQx+EiCSrKpAmyVLloS9T9rIfiHnbt26dVgbKXQu24E2RERERBeCQSk6q5i4OGhmEwy/gYTqKcH9hqHBm+mGTN4odadseeFD8XRLFfiyvcjOyECDFm2QWremKnB+bNeBk8XOgdyMbHWciIiIzkwCQBKU6tOnT7CAeWhASmbak6F9si01nmSRGlBCjkvwqVevXvjxxx+xaNEijB07FkOGDFGZTGLw4MHYuXMnRo0ahW3btuH111/H3LlzMXz48OC1RowYgTfffBOzZs3C1q1b8cADD6jr9uvXLwLfCBEREZUXDErRWTnj4mGymqDrBuzxsTDbLNDkflg3wfDq8HvyM6Q0556w9/mtCTBcdvyyaZ3abtvlFpisFuh+P7IPHFWvDZ8Pv/+6PSKfi4iIqKyQYXvp6elq1r1Q69atw/fff68yoRo0aIBq1aoFl0D9Jhl2N3/+fLWWrKZ7770XvXv3xoQJE4LnqVevHhYsWKCyo1q0aIFJkybhrbfeUjPwBfTo0QMvvvgixo0bh5YtW2LDhg1YuHDhacXPiYiIiM6HZkiqC5UKeYIps88EpmsuCzwuF/43ZTJyj2QhoVYqTuw/Dk+GD3qeDZrTg6R6SXAmxcPn8eC3zc0A7VSc03biRyS3cOP2kY+q7UUz38SBzfkZVTKVtSXWjprNL8HVt90Vsc9HRERUUsri735J4vdBRERUcWQV8XefmVJ0VjaHA3GpyXAkx0LTtfyhfDCgwQDcFuQezUbO8UzEVUqGPS98Vh2/uSpyDmbiwJ5f1XaNho1hi3fC8AF+jw7X0TxkHzqKvJycCH06IiIiIiIiIooUBqXonKwnA1NpF9eFLcYOzSw1pSyqrpQnx4vs3Vk49MseGNYdYe/zW5LgO6Hjx6VLcfTA70irWQsJVVNgjrPCZNVgeIHj6Qexc9P6iH02IiIiIiIiIooMBqXonKwOm1qn1aqNS65uD4vNBE0DDLNPZT3JxHuu4y5YEvUCb7TDnxMHV1YWfvj8M5VlpZlMiK0ULzXPFX+eD5sWLUPm0SMR+GREREREREREFCkMStE52exOtc7NyUHLP1+PhLqVoTld0HQzTJoZJguge/xwJsXC6jo15bTQUAV+n65qTq1fvAgxlZJUkXOooJYOX46GnP25+OKdd7B72+YIfUIiIiIiIiIiKm0MStE52WNj1Trn6DG1rtOsKRypVmhmPwyv1JjSYegmuHNcMOm7w97rtVVHXtYJSD19r8sNz4kcXHrtdbAnOeGIt8MUk59ddSL9GNYvXITVX8xXxdWJiIiIiIiIqHxjUIrOqXr9+mp9/MABFTCqWq8eEmtUhmY1oDm8gM8MzWeCJ1OHOSk/cBVgWGOQ95sXx3YfgCs7WwWmdq37ARa7DQm1K6N6qwawJkvmlIHM9CPYt+VnLHv/Pzi0d0+EPi0RERERERERlQYGpeicqtapD5vTAUPXkb59M9Jq1oXFboejkhUmkwmw+wBDg+a2wDCZYHEfD3u/4U6D4fMj6/csZOw9pAJTrqM5yNh5EK6sXMQkxcJkM8PwGji2+xAObN6Jha9Mx6dvvBKcuY+IiIiIiIiIyhcGpahIKteuo9b7f90Ji9WKSjWrI6Zykip4brVZoFt8MDQ/DBdg9u4Ne6/PWhPWeAdMZgPeEx4cTz8AmPOH/bmysuHzeKGZNEASpkyAyWKGYeg49ut+fPmvmVg0Yzq2rv4WeTk5Efr0RERERERERFTcGJSiIqnVqLFaZx05gpysTNRr2kJlT2kOkyRJqWLnmsWA4TUD1vCZ9HR7JfhyvUi+qBo0iwa/2weTGYipnAhbjAPxaZVQqV5VWO1WWKxmtb9W2+awxtjh9/hx8Kc9+GnFN/hq7mzO0kdERERERERUTkQ0KPXVV1/hlltuQfXq1aFpGj7++OOw41Ice9y4cahWrRqcTic6dOiAHTt2hLU5duwY7rnnHiQkJCApKQkDBgzAiRMnwtps3LgRf/7zn+FwOFCrVi08//zzp/Vl3rx5aNSokWrTrFkzfPbZZ+fdl/IspWoNOBPi5YtA+rbNqFy9FmKTk+CId0CzmmCyajD8gK5rgMMNzR3+b+DdX0llWCU3qKbm5HMdd8OT40K1hhfjqtt7oHrDhoirngJdN3Bi/zEc37MHDa9tjyqX1oU9KQY5h7JwLH0fdv24IWLfARERERERERGVk6BUTk4OWrRogalTpxZ6XIJHr7zyCqZNm4bvv/8esbGx6NSpE1whs7NJQGrLli1YvHgx5s+frwJdgwYNCh7PyspCx44dUadOHaxduxYvvPACnnzySUyfPj3YZuXKlbjrrrtUQGv9+vXo1q2bWjZv3nxefSnvUuvkD+E7uDt/hr2aDRvCFh8LTQc0qxkmqyHhO2iGBRbvwbD3umJa4uDGdBh+XdWPgg64M9z4fctWJKakotX1HXHzA0NQtdlFMFktyDmcjf0/70Dz665HvctbwJ7ogCfbhS3LvsKPXy/lUD4iIiIiIiKiMk4zJAUoCkim1EcffaSCQUK6JRlUDz/8MB555BG1LzMzE1WqVMHMmTPRs2dPbN26FU2aNMGaNWvQpk0b1WbhwoW46aab8Ntvv6n3v/HGG3j88cdx4MAB2Gw21ebRRx9VWVnbtm1T2z169FABMglqBVxxxRVo2bKlCkIVpS9FIQGyxMRE9V7J7CprZOjcNx/MUa8luyk2IRFf/mcGjvy8F5ZYK3IO58LIMcHQJWPKDJ/tKsBsDb7f6j6KlKa74cnOgSfHA1+2AXuSBY1vvBKtb+ii2sjsfsvnvIvDP++BxWFF6kW18efuPfHTD6uw8dMlKqiVclE1mG1WVGvQABe3ulz1g4iIKNqU9d/94sbvg4iIqOLIKuLvftTWlNq1a5cKJMkwuQD5QO3atcOqVavUtqxlyF4gICWkvcwIJ9lMgTZXX311MCAlJMNp+/btOH78eLBN6HUCbQLXKUpfCuN2u9U/ROhSlklGU1xKsnq9Z/sWNRwvrW5dWOMc8Lu8cCTaoKlsKQ2a2QerKz+jKsBrT8HxjT44kxLUbH1S2Nzn9uHALzuxYfmXqo3N4UDtps0QW7WSqj3lOpGjMqNaXnUdUi+uiZjUeOiGDt3vx+/bt2Plxx+oQBYRERERERERlS1RG5SSIJCQbKRQsh04Juu0tLSw4xaLBZUqVQprU9g5Qq9xpjahx8/Vl8JMnDhRBa8Ci9SzKuuq1Kuv1kf27FHres2aw54Qo4JLmvxBOQwJSUGz+mHgAMzu8ECc23E5MnYdVgXPzWYDmhkq+0kCTHt3bFdtKteoCavNBntiHAxdx6Gdu5D+809IrlIFMckJqH3ppWh81Z9hsdngyXNh07fLIvBNEBEREREREVG5DEqVB2PGjFGpaoFl7969KOtqXdxIxloiLysbRw/8juTKVZFSswZMFgt0AzDbTNBsPkDXYNYAs2c74PeeOoFmgifrMlhjbPC7JYylIeZk9tXWlV+rWlFSVN1kNsOREIvYlEr5x779FjGVktTrYwf246JLm6Nh+/ZqWzKtDu3ND5IRERERERERUdkQtUGpqlWrqvXBg+EFs2U7cEzWhw4dCjvu8/nUjHyhbQo7R+g1ztQm9Pi5+lIYu92uxk6GLmWd1G9KSE1Vr/du26rWtZo0gS3eDt3tz29k1aH5zdA1v0SlYMv7OewcXnsqcn+1q9e634DZbIHN6YDX5caPXy1R+2NkiJ/M+lerJhxxsfB5PDi8K384YF5mlgpe1W3UFEknv//N36yAzxsS/CIiIiIiIiKiqBa1Qal69eqpgM+SJflBCiE1maRWVPuTGTKyzsjIULPqBSxduhS6rqt6T4E2MiOfNyRgITP1NWzYEMnJycE2odcJtAlcpyh9qUiq1b9IrQ+n52cn1azfEPFp/9/enYDJUdVrA3+ruqrX2TOTmUz2kJAFkhBICGEV2UGuCCogCgjKo4KXRQVUQNSrePHjqoiA3Osj3/0MWxRRwiKBsAhkJyH7HiaZTGZfeu/qqjrfc05PNzNJwAFmuieZ96dNd1dVV/ecyUyfefuc/xmmbsuKUrr8Z+V1AU86UzvK0wwjsa/XOZL+4yAsHSIl0L5nLyafkGnHtt178N7m9SiuyARf8c4uzDj9DDU6KxWLI9raqbbve2+Hup5x2hlqVJUcubV5ZaaOGBERERERERENfgUNpaLRKNasWaMu2YLi8vbu3bvVanw33XQT/uM//gN///vfsW7dOlx55ZVqFbzsCn1Tp07Fueeei69//etYvnw53nrrLdxwww1qNTx5nPSlL31JFTm/9tprsWHDBjz55JP4zW9+g1tuuSX3Om688Ua1at99992nVuS7++67sXLlSnUuqS+vZSgZM/loaLqu6jnt3LBWFTwfOWUyAsOK1LQ9IYMoWxY7d6HpFjTXC91YB7i9p/HZYhacuIlwYzuS8RhqJmbCri1LlsBXUqxux9rbUVU7GpO6i9nL4ued9c25QKy4rAzjZkxXt3evX6dWCCQiIiIiIiKiwa+goZQMfmbNmqUukgyK5O277rpL3b/11lvx7W9/G9dddx3mzJmjQiwZHvn9/tw55s+fjylTpuCMM87A+eefj5NPPhmPPPJIbr8sMP7SSy+pwOu4447Dd77zHXV+ec6sE088EY899ph63MyZM/HnP/8ZzzzzDI4++ujcMX15LUOFXCGv5ohMwfNty5epqXQTph+LYEUpvMVeQHcBx4BwAGGkITQNwtXhs5b2Oo/jqwCcWqTbBFb8eSFGHjkVvlBmql7zjsxIqGQsrlbXO/LY4zH5hLkwi3ywExZ2rVidm6439fiTECgtUUXR173JoudEREREREREhwJNCCFnXFEeyCl/MiSTRc8P9fpSMih6/an5arTU8AnjMees87H8pYVo3rELbTv2we4UcNJeaIEEkPADbghaeTtE19GwAiPfP5GThje1DN5hCRglPhx30WewY8VyQAhEmlvhLyrG8RddiNrxk9Thm1Ytw/LH/6YmCo485kic+vnLVUjW0rAHyxc+qx43YtIktSqgLMJORERUKIfT+35/YHsQERENHeE+vu8P2ppSNLjJIChbB6p55y61+t2kWbPVtL5gZTGE4WZqS0FA81qQ6+yJzgB8I7YAwn3/RB4TAuPg2C7sWAqrn3kWpTXD1S4n5aBrbwuWPv0MNq/KjMiaetxclE+QYZOG9j0NePvvf1GBlJziN2LiRPW4fdu24e2n/4JX5j+Kd/+5WK0SSERERERERESDC0Mp+tjGHDkNFd21u+Tqd8Vlw9T9YHkJzCId0FxoKS/0Eg1CS0ETfqTDafhSb/c6Tzo4StWWcm0XVszCntUbMXLqZASHy0L0GhIdUexYuRKvPzlf1YwaM20aimpKYSfSiHV0qhFSKxY9j6lzT8IRs2ejuKpCFUZPRmOo37gJS//+NzTs2lagViIiIiIiIiKig2EoRZ/IjNM+nVv9buOKt3HEMceq7d5iP4Q/KYtKQcRcIBhR/9xELIiiiToMq6PXeRzMhe434MQEEm1xbH1jKSpqaxCoLIavJADT74OTTmPXujUYNnI0/MVFKBpRkRlVJYQarSVDK+HYOPHCz+NTl12BSXPmqFpTcv+O1asL1EJEREREREREdDAMpegTCZWUYnx3ofr6DRvhC4ZQUlUFX0kIhk+DpjlwHaGm8rmesFqZL94YheFf2es8jhlCumEcvBUmhKUhUh9D3TsbkWgKI94SUQXPk+GoWnVvxLgJapqgR/dg8pwTMP3001WBdBla7Vy9Bm/8+XFEOlpVcfRZZ5ylzh9uaeE0PiIiIiIiIqJBhKEUfWJTjpuLUHmZWv1uzasvYeSUKfAFA9BNHSKQhmabcNI6dI9ciS8NJ2agaGQI/vjmXudJBY9Asn48jBINmiFgd6aRTrhwUi4SXRFEm7oQbmpFa8NuFA0rU49pqqtT0wg/dekVGDtjZm7U1qoXX8SS556BYfpVSCbtWMvRUkRERERERESDBUMp6hfTT/2UGr0UbevAznfegcdrwFfshxnUoflc6FYIri2Lmst/dQ4ie8LwVO2BZid7nScVGAereSrMEhNGyAPNIyukC1iRhJreJ+tL7dm6BWU1mVpWHfsa1LVhmjh63sk49YuXY9iY0Wpbe/1evPnnJ9RzpuMpNO+sU8XSiYiIiIiIiKjwGEpRvxhWMxKzzz0fhteLVCyGWHsYnoAP3hI/9BAgdAu6G4Tm+iFcTQVFbkLAay85IJiy/CMR3zcTQgc8fk1N+ROOCztiIdVuY9s/lyHa0oZkJIqOxkYsefaviHR25qYTnnDev+G4c89FoKQYruMg0tKCSFM72rbvxfO/fxCrXnkBe7ZtKVBLEREREREREZHEUIr6zfDRY3Hi576gwiB/URDJ9gh0w0DlEbXw1tjqGE0GTBDQLBOOK+DqDkx7CTxpWQj9fbavAonWuXCTaiE9WQkdRsAD2BoSLRYatm2FFUuhq64JbfX1akTU+iVvwk6n1eNrxh6BUz9/uVqNT04tDJSH5JArxBo7sW/rdqxd/DLe/NsCtZofEREREREREeUfQynqV8VlZTj5c19EWU0NAuVFSLbHEG5sg+7RgVAXXE8CuuuF5k1DgwbdMdQKfTqWwky19TqXYxYhkT4dbsQPoQuMmnMUjFJA0wWctI3S2iqEqsuQTllqRFTd2nfx+lPz0bynLjelT9a7+tQXr8D537oB5WOHw18ehOnzqqSrq7EZbz29AGvfejUXZhERERERERFRfjCUon7n9ftx0mcvwaQTj0dpbTlcy4abdOU4KejChKvZELYHngAgAim5FZrtg6dkJbyJfb1PpptI+k+Bva8S8fZOlIyuhCegQdc9GDltCnyhIELlpRg7M1PkPBmNYeWLz2P7u71X9wsWF2PM9OkIVZTBDAZx/GcuzBVn37N+I157cj7e/edibF+3Gi0Ne2Ale08pJCIiIiIiIqL+ZfTz+YhyZp7yaVTUjMT6N15DZ30T7HgcQnPgcYJw9Si0hAZfhQGrOaFW6HMjBrw1G6A1JpAKTOh1rmRoFva9sQn+8Z1wogIRK6zCLlnDKp1MwaNrqsj5Oy//A+GWFmxZugxdrS2YeeqZasSUdMQxs7F361YkusJw0pYaQbX1neXYuWaNqoNVv3FTr+c0/T4Ey0pRXDEMxRWVGFZTi9JhlXltQyIiIiIiIqLDlSaEUAui0cALh8MoLS1FV1cXSkpKMFTEwl0qLGrcvh2dmxKAY0C4OnSPA5hJGCUa0l1yMp+sNgUUjfcjvrUIyeCsA87lTdRB82+B5ugwK4BgRTFSsST8ZUX49JVXq+mDa//5KvZt26aOL66qwJxz/g2BkKwpBSx57hm1Kl9FbS3mXfg5tU2uyLft3ZWIdXQgEYkgFY2p6YAHI1cY9AYCMP1eeH0B+EIheANB+IN++ILFCBYXIVhclns+IiIauobq+/4HYXsQERENHeE+vu8zlMqjod4Z27T8Lbzz/CIk3nMgXK+aOqfJCaR6GlogBSS8gMcFPEDpEWUIb0kgaZ4sk6Be5zETTdCNddBMgYpp1YjsaYEQrqphVTF2JPzFIUQ7uxCub4Tm8cAb8uOI4+dg9MQpiEU6sfof/1A1pU74t8+qVQM/KEhrb2pUo60i7a2Id3YiGYsDfflx0TTMOuss1I6f1F9NR0REh6Ch/r6/P7YHERHR0BFmKDX4sDMGVa/phft/D6vFhbCCcGFDhwHNm4BrpqElghCGBY/XQeWU4Wjd3IqUfRqEx9vrPIbVBcO7DBPOnoVkVxfatuyB67goG18Nj8ejjknF4mq1PdeV9awAM+BDqKYcsX3tsC0bvrIgxsw8CsGSEoRKShAsKUWopByhktLclL+eZJ0pGWrJwCsVjyAei6lpf1Y8ATudQjppwUokVNg2fMJ4zDnr/Dy1KhERDUZ83++N7UFERDR0hPv4vs+aUpRXVbWj8YU7v48n7/gp7HAceiogEyY4tg7d9UHAhWaVwLajaHuvBZXTR6Jz5xtIdJygVuPLsr2lEOmTUPfG27js53fijQWPIRGJoqRmOCpHjIKViKvAKFbdhfZd9Uh2JZBOWOh6rxlGkRciKZBsj6Jh81b4i/abaqdpaoU+WU9q5mlnqSmB2QLuXn8NyqtqPvDrkwXWZT2rSGvrwDUiERERERER0WGAoRTlnay3dN4t38Tz/+ch2CIJLe2HrrsQSEKT/yItB7ozDHZrEk3hvQjUeuG134LVNReOLxMQSY4ZQixyCubf8lOMPWUqPLoHqa4Ijjx/tgqQemrYtQ0b33oL8XAYru0g6YnCYxhqOl7FqJHdIVYc6ZSltsni6V2NzVi9+AWcevHlff7aqkaNwxYsUwGZHFm1/+sgIiIiIiIiogyGUlQQ1aPHYvq/nY51f38NTiQB4ajiUtBMG8LbAURtaCiFSHmQ3B0FAgJmcBn06CykA8PfP5HpRxJnYdcL24GSPSgbXYYlC5/B+BkzVE2n7DQ8eXv4qHHYsPSfqN+0GZqmwYon4S8uQtWYsZg4PVNU3U6nVT2prrZmrH/9dURa2lUtrKnHn9Snr0uuzidX7ZOhVtOeOoyeNHlgGpCIiIiIiIjoENe7gjRRHs0+4xzUzBwLo8SF5rMB1wOk5ap8HgTGONBDe6EhDThBaAkfkPJA86+BEa8/4FxW0URYqU+hc4MPu95eg3WvvoqX/98fsfylhWqUlCQDqpmnfBqjpk6B4TUB14XjONi1+h0VRmWPkcHSmCOnYczR09W2Xe+uRUdLY5+/ruKKYeq6vXFvP7UUERERERER0eGHoRQV1AkXXoTSsZXwlujQ/SmItA8iocNJpBGoKYJREQHMCITwQKS90GwNHnMzzHjdgScz/bCKZiHVNhMNq+tgJ1No2VWH1S+9hNeemo8927aow6bOOVGNZvKVFiHRGYWVSGLzymUHnO7oeScjVF6mCpevfX1xn7+msurMSK6ulqZP0jREREQYN26cGt27/+X6669X+x955BF86lOfUgVE5fbOzs4DztHe3o4rrrhCHVNWVoZrr70W0Wi01zFr167FKaecAr/fj9GjR+Pee+894DwLFizAlClT1DHTp0/H888/P4BfOREREQ0FDKWooGTR8FMvvxzl46thFnsAMwlhe2HHBdKRJDwlJvSQBd1rwfUnIIQG1+PCE9wCM7YEsK0DzmkHqmG5Z2Lf2wkkIzFZIgqxjk6sXfyyCqfktLoJxxyjVunTdCBtWajftBGJWOyAc808/Qxouo5oW4eaxtcXlaPGqOtoW2duBBYREdHHsWLFCuzbty93WbRokdr+hS98QV3H43Gce+65+MEPfvCB55CB1IYNG9RjFy5ciDfeeAPXXXddr9Vxzj77bIwdOxarVq3CL3/5S9x9990q8Mp6++23cfnll6tAa/Xq1bjooovUZf369QP69RMREdHhTRNC/slO+cClkD+YDIRel4HRu7uQjugQjgYYNnSvBngA4ThAyoBmunAdqGtfuRd2woHdOhlWMBME7c+TjsDUlmPYjGGAC5gBn9oeKC1Bx959gNDgJFMIVZWjpKoKx3z67Nxqe1nrl7yJurXvqnBq3kWf+9DV9yQZRC36v3+A6ziYc/5nMHz02H5sKSIiGsrv+zfddJMKlrZt26ZGRmW99tprOP3009HR0aFGQ2Vt2rQJ06ZNU+HW7Nmz1bYXX3wR559/Purr61FbW4uHHnoIP/zhD9HY2Aiv16uOuf322/HMM89g8+bN6v6ll16KWCymnjvrhBNOwDHHHIOHH364YO1BREREg1Nf3/c5UooGzYp85371Okw4bRb0oAPN4wC2ARHzwYlqEEkvXM2FK+tKWT6IuBdWWxrB8iCq53XBl3oVevrAkU6OWYykcQZaVlWjbXMLoq0diLa2I9Larjrz0cZ2xFujaH+vAW319fjngsex9u3Xe41wktP4ioaVq2l8K55fiDeefhxv/m0Bljz3DFYseh4tDXt6PaesSxWqKFW3m+t77yMiIvq4LMvCn/70J1xzzTW9AqkPs2TJEhVSZQMp6cwzz4Su61i2bFnumFNPPTUXSEnnnHMOtmzZokKu7DHycT3JY+R2IiIioo+LoRQNKqd87ouYdcmZ8FZq0IscaL4UdCcA2F4g7QWEDlcICNsPJ1aCyE4LLZsb4K124fW+CW9sC9RQqv1YgRFqlb7w1vGI7okjFYkhNKxcjZzSDA2u7SLe0oV0ysKedevx2pPv16CSZpz2aVWAXa6qJ1fk62psRnv9XjTv3IUVz71fTD2rtKpaXXc1s64UERH1DzlySdaMuvrqq/v8GDn6afjw4b0/PDEMVFRUqH3ZY6qrM+9bWdn7/+qY7P6DSaVS6lPSnhciIiKinoxe94gGgVmfOhPTTzoNq175B+pWrUGkMQrE9UwwJVxAd6DLa9cP19ahdRiwrDhMvw7HVwdf5164YgrSgdqDhlPACLib9yG6Zz3mfvVCbHrtTSRau6CbBtJWCqbPi1QspmpQbV7yJipG1mLEhIk49YuXq3pUdioJx04jnbbQvrdB1ata8/LLwJlA7fhJ6nkqakaifuMmRNvbC9CCRER0OPrDH/6A8847T025OxTcc889+PGPf1zol0FERESDGEMpGpTkFLi5535GXXZtXIvVL/4DnbvaIdICblqHMBKAY0FPF0PAgBv3wxIJGD4NWrENw1kPEdkJ25gJ+IoPHk65I/D2A9thVnSoFQDD9W1IheNIlyYRKCuGY1kQjovG7TvVxfB6UVRRAW8wAF8wgGBRMYqnT8fONWuQDEd6BVPVso6UpsG2LHS1taJ0WGVB2pGIiA4PdXV1ePnll/H0009/pMfV1NSgubm51zbbttWKfHJf9pimpt4je7P3/9Ux2f0H8/3vfx+33HJL7r4cKSVX9iMiIiLK4vQ9GvTGT5uBi2/5Ho794lnwVZjwlgsYQQG9KA23qFUdo7lBIB6CawlZvR+aFzCK4zDEMpjhd6FZB9abkqzAKMQSZ6F1VQXSURdwAKsrgXQsCTMQQCqWgBVPwEokVMDU2diopuztWb8RW5Yuw8Y3/olERxjRlg5EmlqxYuFzaiqf1+9HoCQThrXUv5fX9iIiosPPH//4RzUN74ILLvhIj5s3b56a8idX1ctavHgxXNfF3Llzc8fIFfnSPeopypX6Jk+ejPLy8twxr7zySq9zy2Pk9g/i8/lUYdOeFyIiIqKeOFKKDhnHnPJpjDxiEt6Y/xiiTV3QHQGPT4OFLohYCJprQkRL4Pii0AwB3QAMvwv4myGsJmiRkUj7xgLeogPObYXkCnljYYWjMFN1sDoaMOxoE/6SkNovi5zLelKm3w8z4FcjpQDRHVglEagoQbi+BcnOJrzy+/8LX2kQ6VQKsF1s9axESUUVfMEQAqEiFVgRERH1lQyQZCh11VVXqXpQPcmaTvKyfft2dX/dunUoLi7GmDFjVN2oqVOn4txzz8XXv/51tUqeDJ5uuOEGXHbZZblpgF/60pfUNLtrr70Wt912G9avX4/f/OY3+NWvfpV7nhtvvBGnnXYa7rvvPhWMPfHEE1i5ciUeeeSRPLcGERERHU40IYQo9IsYKrgUcv+wkkn8869PoXH9NtgpG5D/T9lwY0WqzpQcJiWQBPQ4hC8NXXehG7ImlQsn4YPmjoLlrQXMTOD0gdJJmKkNMCvbUDVltJyN14svFELRsAp4A0HYVgqRtjY0btgOO5n5pNlNCbgJHfAAZpkOj8+AN+iDrygAf3ERQmXlqB43FiMnTlWrDxIR0eGlv973X3rppdxqeEceeWSvfXffffdB6zbJECtbEF1O1ZNB1LPPPqtW3bvkkktw//33o6jo/Q9p1q5di+uvvx4rVqxAZWUlvv3tb6uAqqcFCxbgjjvuwHvvvYdJkybh3nvvxfnnn9/nr4P9ICIioqEj3Mf3fYZSecTOWP/a+s5y7Fi9GpHmVlgxS027c+NeOJYJXRRBZkiulgY8Meh+C56gppbQtqMAkiaEUwNLjpwy5ainD6dZUZj2RngrOlE8rhK+wIGPkTWnvKEQEuEINF1DtKUdkbouVZvdE5IlpuQryvy46R49E5R5PDBMjxppVTFmFGonTIJhGqqmlvzDIVQ6DMVlZQPSfkRENLD4vt8b24OIiGjoCDOUGnzYGRsY721ej7r1a9HV3IpUJIZoYxfssACsEkB4odIpkQIMC5o/BbPMhJOyIRIu3JQXsCqR9o6D8PX9e6JbXTDSLYDWBs0XQWCECX9xENB1eExDTe+rnjABjTt3Ip1MYvgRE+D1mmir34t4RxiOY8OKJmHHUmpaRpbHa6C4dpgKpbKKqypQO2kKxkyayql/RESHEL7v98b2ICIiGjrCDKUGH3bGBlbznjrsXP8uuhqbEGluQ7SxE3anAWEHAOHLlFDTnO6pfQkIuPBoGlyhw9Ud6I4HmlMF2xwJ158p7Npnrg0z2QAN9TCCEeghHbppwE7aqrbViOkT8ekvXanCpkQshpa9dYhHIkhGIuhobEDXvhbE2rrgOkKNsiodWQlfKKjqWGXpHg+GjRmFMZOnombsEf3fgERE1K/4vt8b24OIiGjoCDOUGnzYGcufxrodaNixA7veWYPw7g44MUCk/YAjRxoF5HJ9aiqdgAYNNlyk1ap9MrSCbkO4BnRUwjaGf/SASsZfiWZo2iZ4ginA0gFDwCzW4CvyI1BZgoqRtagZPwHDakehvCqznHZLwx68u/gVpGIxOdcPY6fPwMiJE1G3YT2a697rFVCZfh/Ka2sxcuIk1I6f1K9tR0RE/YPv+72xPYiIiIaOMEOpwYedscIFVFtWLMfedVuQbE/AiXkA2wcIA0LoALzQ4IEQsuaU/HHwAMIBtBQEUoAm71fANmsg5Mp98n4fackOmPYu6L4OwOyepicHbGmAxwSMkIngsFKUjRiB0qpK6NBRv2UTEp2yLpWOUFUZRk2ZitoJR6KrrRlNO3eio7FRrQbYM6CaMu9EjDly2kA0HxERfUx83++N7UFERDR0hBlKDT7sjBVWR0sjtq95Bw2bt6rQJ9Eeg5sQECkDwvUCjlxm2wSEDqGCKA0CHuiaDK6SEFocLizobhACQUArgWsUw/WWQM3R+zB2EobVCt3tgqbFAE8SMOTIJzlSS6igSo6m0g1Nncq2HMCSxbC0zHZTh7fIRGh4OUKlpUhbKaQTSaSTFgyPDs0wMP64WRh/1DHQdQ2+QLBXXSoiIso/vu/3xvYgIiIaOsIMpQYfdsYGByuZROPunWitr0dT3Xvoqm9CKpyAm3ThpgE37YGwvdBdHwQCquaUJgxomketnacm/QlLDoOC68prGVyVw/GUqZAKZh+LkQsXnlQXNLsDOrqg6VEIMwXNdDNRlY1MUOYamVrtchSX/HE10tADDjwhD4yAD07CgnAyI6f8FUUoGlaWWw1QjqLyBgPwBUOqSLrm8cA0DJg+HwyfH7XjJrJ4OhHRAOH7fm9sDyIioqEj3Mf3/X8xvIPo8CNDGDnVLTvdTYZUTXvq0NHaiJbdexBpaka0qQNWOAGR7gCSBuAEARGAJkdSychI96rASvfo3SOqBHQnDN3pgkiH4BilgDf44S9E0+GoelX71axKJ2HIc7myEFZUjdCCnEYIOaVQQLcNOBEdTsJBWk+qbcLRoBkCdqwLdsJCaW0lbMtSl0Q48oEvYdObb6ri6eOPnomq2tH90r5EREREREREfcFQioY8GVKNnjRZXTCv976m+t3Yt307Gt/bic6GfYg3R+EmBUTCB831Q4NX1aSS0/ygmXBhQpOr+qW74LopCE+g7yOnskw/7A96jJ2CbsegO3FoVhIQcUCLQTOSQEqDEB7E96QRa6lHoMqL0uoqhCpK4Q0G4dE90DQNjmvDdWykonFYiSRadtWpS6i8DDVHTET1mLG54utEREREREREQzKUuvvuu/HjH/+417bJkydj8+bN6nYymcR3vvMdPPHEE0ilUjjnnHPw4IMPorq6Onf87t278c1vfhOvvvoqioqKcNVVV+Gee+6BYbz/pb/22mu45ZZbsGHDBowePRp33HEHrr766l7P+7vf/Q6//OUv0djYiJkzZ+K3v/0tjj/++AFvAyqs6lFj1AX4dK/tdjqN5vo67N68AXXvrkdsbxhO1IBuByFcH3ThU1P+ZEF1N+2Hq8sV/wxAl0XSPYAhQyxZq+ojMnxw5QUVB+5LJ+Fx49AdC4jFkYzGkdwVh2u0QPNZ6qk9Xg0eU4ceMGB4TTUb0E5aELaLDk8j9m3crgqv+0JBhMrKVKhVVlWN4vIKFJcNY50qIiIiIiIiGhqhlHTUUUfh5Zdfzt3vGSbdfPPNeO6557BgwQI1V/GGG27AxRdfjLfeekvtdxwHF1xwAWpqavD2229j3759uPLKK2GaJn7+85+rY3bt2qWO+cY3voH58+fjlVdewde+9jWMGDFChVzSk08+qUKrhx9+GHPnzsWvf/1rtW/Lli0YPnx43tuECk+GM7XjJ6rLCed9Vm1LxGLYu3Mr6jdtQMfeJoT37UM6nIaW8MJjB6EJP1zIcMoHWF41ikrI0VUyrJIBlcfzrwumfxjTDwfysh9ZKCttw5NKwonZgEhDlzWxXLmyYBzQXQgjARgWNN2DeGMCRqmOoupytO/b9/7PnKbBFwzCXxxCSdVwDB85CpW1YxhUERERERER0ccyqAudy5FSzzzzDNasWXPAPlksq6qqCo899hg+//nPq21yBNXUqVOxZMkSnHDCCXjhhRfwmc98Bg0NDbnRUzJYuu2229DS0gKv16tuy2Br/fr1uXNfdtll6OzsxIsvvqjuyyBqzpw5eOCBB9R913XViKpvf/vbuP322/v89bDA59Aj61V1tjShtbEBuzdtQFtdA5L7ImrFP9fyQbghaAhBaHI1PxNCl5fMdEChy5FU3Rc5wEof4PDHllXebehOErpIQJM1rdxOwBuB5rXhCQgYQS/MoKmKpxs+UxVMl4XVS6uqESorR0lZBYorKhEIhQb2tRIRHQL4vt8b24OIiGjoCB8uhc63bduG2tpa+P1+zJs3T029GzNmDFatWoV0Oo0zzzwzd+yUKVPUvmwoJa+nT5/eazqfHOEkp/PJqXqzZs1Sx/Q8R/aYm266Sd22LEs91/e///3cfl3X1WPkY4n+Vb2q4aPHqsu0OfNyU//2vbcTsXAnWvfUo3HbDkQb9yAVs6ElfdBtE8LxA5qsK+XLjKzSDBVWyWs5skpo2el/ck6e3j0t8BMyZOgl62IF4O5ffB3dtdYTaaDZhibDKzcBzYlBQys07IbQE4BpwSNXD/QKeIu98JWF4C8KqlUADV8AvoAfpt8P0+tFoLhIrQpYXFoBj2nAMH3w+gMMtIiIiIiIiIaIQR1KyRFKjz76qKojJafeyfpSp5xyihrVJGs7yZFOZWVlvR4jAyi5T5LXPQOp7P7svg87RqZ6iUQCHR0dahrgwY7J1rb6ILLOlbxkyXMSyeluqqi6dNzcA/bL0Kp13x407n4PbQ0NCDe1oauhGekOCyJpQrMNCNcLXfi7A6sAhC6nAnrVSCtXTQHsDq1U0NSP5GgtOZpLrQVYfNBD0vI/FpBoA9DiAI6cMihDrDQ0IS8RNSILqIcmky6RBHQLmmZBGCnoclSWX0egMoTi6kqUVFbCXxSCaXqhe014fX4YXi98/iCCxUXwB4sQKint36+TiIiIiIiIhnYodd555+Vuz5gxQ4VUY8eOxVNPPYVAIIDBTo7q2r9QO1FfQquaMRPU5WDTASOdbYh0diDa0YlIWzMi7R2ItTUh2tkJqyMBN6XDtWSRdRMiHoKml8LVijJhkubpHmXVfZFTAweyJpQcwaVGccni7B9BEojXA217XMC2ZFQHzUlBExY0V16nVaClQV7LgMuG0FMQugWYjhqtJYMtM+SFv7wIJcOrUF5VhZLqGhSVlsAwvLnRWbK9fYEga2MRERERERHl2aAOpfYnR0UdeeSR2L59O8466yw1tU7Wfuo5WqqpqUkVNpfk9fLly3udQ+7P7steZ7f1PEbOeZTBl8fjUZeDHZM9xweRU/5kgfSeI6VkLSqiTzIdcFjNSHX5MLLoejIeQSIaQVd7O9r27kW4rRnJzihSkRiSXXE4MReuowMJGWAFAQThIgh4QnDkCCw5XVBdZE2rAgU2crSXKacxAsKEGqHVF2mZgMW7Ly1A49bsni7AaZWF4dRYL02O3nJtaLI8vLBV6KUCMBV2WZltug1NS0NoLqA5gMeBZrjQdA0wXBimDs30QPcaMHwGzGAA3oAPgdJiBErK1W3DMOHzB+Dxe2F4DJhePzyGrqYC67oBTU7B7Ca3qWuPB4bph65rML1yamOmHYiIiIiIiA4Xh1QoFY1GsWPHDnzlK1/Bcccdp1bRk6vlXXLJJWq/XA1v9+7dqvaUJK9/9rOfobm5ObdK3qJFi1TgNG3atNwxzz//fK/nkcdkzyGnCMrnks9z0UUX5Qqdy/tytb8P4/P51IUo32RdJnkpr6pB7Xg5TfDgx8mpgjLA6mprQkdTExLhLiTjCdipJNKJdtiWhXg4gVhbJ9JdNhxLh2YFoMkC7XoIQg/C1fwQmi8zbVCuJChX61P1rgYpGbB1l+CSIdfHXulB5lpW9+VDj5MF5JOASKiQC8KFLmQI5qowTJO35cmEA02d1Ol9W44Ek2GYvK85PQIyG5pHQHgcyHxMDnqTza/7PaoIva/YD29REbwBPwJFIfhDRQiVlaKkohKh0nKUlFd0B18cIUZERERERIUxqEOp7373u7jwwgvVlD25gt6PfvQjNWrp8ssvV1Xcr732WjUSqaKiQgVNcjU8GSbJIufS2WefrcInGWLde++9qn7UHXfcgeuvvz4XFn3jG99Qq+rdeuutuOaaa7B48WI1PVCuyJcln+Oqq67C7Nmzcfzxx+PXv/41YrEYvvrVrxasbYj6gwwkisvK1GXUEd11rj6EDLFSibi6tlIJOGkLactGKhVHtLMDqWgU0Y4mdDa0INkRRiqagpPUIFIeIO2HpupgydUF/XDldfYip/hpZo9Qqx8Ktw8W3XW4evpIUxk/bkjWcrCDZLglR302qVBMhl9wBSAXYc2GY7Lelxwh1h2UqQBNBWXZkCwTmOnytgrL5EVA6640JrTMtXq85nYHaC6gC7neq7qWmaU6Xt3XoHk16HLkmBo9psHjM6EbHuhy5JnXBzMgC+AHYAQC6ne3LJpv+L0wDR8CRbK2WCmKSss4DZOIiIiI6BAzqEOp+vp6FUC1tbWhqqoKJ598MpYuXapuS7/61a/UVBc5UkoWFJer5j344IO5x8sAa+HChWq1PRlWhUIhFS795Cc/yR0zfvx4FUDdfPPN+M1vfoNRo0bhf/7nf9S5si699FK0tLTgrrvuUsHWMcccgxdffPGA4udEhzv5B79h9m9RcRlwpS0LVjIBO51CLBxGy5730FS3G5HGVjXV0I6m4aY1CMuE5vhVoXch5GqEflXcXQZdKuSSv9JUCGTIXwAHhEHUg0qG5MqNB9+dHUEmI6cBk8mvgMTHebDTY45m634hW3fspwK17tANLjR1jNzh9hgnJ0eu9divwrjM/fcvMnTLbs/sE9mQTuvelw3hZNOqa9EdymXCO6HL/QK6CucyLy8zoFA+PrNBk/vkbFkj833RNF1NE9U83RcZ2Hk80HSPym3lSDfTa0AzDXgME7qpZ6acq+mhBnS53aOrfTLc83jkVFGPWjjAkKGf4c2Efl4DHtMLrwz7zMyxnC5KRERERPmgCaF62ZQHsqaUHOHV1dWlRnYR0cDIjuiKx6Jo3VeP9oa9CLe0IN4ZhhVJIB1NwU25sFMCwhGAY0K4HmiOHKHlBVwDQo7ckrdhQCAz2slVheLlvu6pipqWGdUl588xAKPDjegR0KnRdNnt3eFcLqTrORE2sz0zcs7tcT/7OCkbGmYep/V8bM9L9jzydcgTdIeGcpvoPreuwkChQkK1vftYFTBq8ohsAJm5lvfVqbLPIUNF+XjTQsWkEnzh9u/3axPyfb83tgcREdHQEe7j+/6gHilFRPRJRnSFSkpRNWIkcOzAP6dcGbGzpQnh9haE29oRaW9HPNyJRDgKK5aEnUghHZMjvlykbZH5G9nWVSCmuQY0WejKlaGYp/tXswy5DGhy1JcMxmQYpobPZI5xuldPFGrEU3ZFxe7hN2o65CCu60WHhsw8y+5/kx/N/p92HQqffoW3vFXol0BEREQ05DCUIiLqB3K60/DRY9WlkCPEXMeB4ziIhbsQ6WhFNNKpVlxMhMNIxOJIJ2JIJlJwEinYKQtO2lajxhzLgVx8UA6eVasypnVAyGBLDjfxQBO6CsWEyIRi8r4GMxOUyfvqWoZkmbAsE4plrtXj1KiyzG0ZoGXGwMhtme2Z9EPNWetxyZ6HaOC9P2KLiIiIiPKFoRQR0WFCFfnuLvQtV1+sHFGLwahneOY6NlxXdF/bartc4TSdSqkaY/FoHMlIWI06SyYSsBKywH4atpWGm7Qy17ajwjUhr20XblqORBNqtperSj/JaV0ydJChmpZd7FDdlv9TdaCE1h24ye0ykJO3ugM4FcxlwrdceIYeoV0uVMtcMkFd9rjuKZ7dk81yIVv3Y9TTyAAuG9LJa3U/e1x3QJc7//vHZ/a9fy4GeJ+QKtJPRERERPnEUIqIiAoWnh3OeoZvkgze1LUsxt59v2cQJxxX3c8ck6m7JEM2SQgHlpWCY9sqaXNl+CbP7aZzx6RTSbXNTiWRTlvqWCdlw3EduPK+HA3n2nAcF8J14aRVMqfOlS0Q79jymMz0UlcmeTLQk68tV+NdBnxatrxTNibLhX1qi7ruDt3kdlWPqjtIy1SCfz9kk+dSRZ66z5Q9TsmGe/K5suFcJjDMBHhy5F2PY3uFcj1Cwdx19tj3R+Wp1ycfJ5LQy5MD8u+AiIiIiD4YQykiIqIBMFTCt/4K76QPC/Ay9zMhXuZ2d2DnZK73D/TU+WwZqPU+3lXhn1ypUY7Uy2wrq6rG8NFfy8vXS0RERETvYyhFREREBcPwjoiIiGjoYgEKIiIiIiIiIiLKO4ZSRERERERERESUdwyliIiIiIiIiIgo7xhKERERERERERFR3jGUIiIiIiIiIiKivGMoRUREREREREREecdQioiIiIiIiIiI8o6hFBERERERERER5R1DKSIiIiIiIiIiyjuGUkRERERERERElHcMpYiIiIiIiIiIKO8YShERERERERERUd4xlCIiIiIiIiIiorxjKEVERERERERERHnHUIqIiIiIiIiIiPLOyP9TDl1CCHUdDocL/VKIiIhogGXf77Pv/0Md+0FERERDR7iP/SCGUnkUiUTU9ejRowv9UoiIiCiP7/+lpaUY6tgPIiIiGnoi/6IfpAl+fJc3ruuioaEBxcXF0DSt31NI2cnbs2cPSkpK+vXc9MHY7vnHNi8MtnthsN0P7TaXXSzZEautrYWus2IC+0GHH7Z7YbDd849tXhhs90O73fvaD+JIqTyS34hRo0YN6HPIfzT8gc0/tnv+sc0Lg+1eGGz3Q7fNOULqfewHHb7Y7oXBds8/tnlhsN0P3XbvSz+IH9sREREREREREVHeMZQiIiIiIiIiIqK8Yyh1mPD5fPjRj36kril/2O75xzYvDLZ7YbDd849tfmji960w2O6FwXbPP7Z5YbDdh0a7s9A5ERERERERERHlHUdKERERERERERFR3jGUIiIiIiIiIiKivGMoRUREREREREREecdQ6jDxu9/9DuPGjYPf78fcuXOxfPnyQr+kw8Y999yDOXPmoLi4GMOHD8dFF12ELVu29DommUzi+uuvx7Bhw1BUVIRLLrkETU1NBXvNh5tf/OIX0DQNN910U24b23xg7N27F1/+8pdVuwYCAUyfPh0rV67M7ZdlCO+66y6MGDFC7T/zzDOxbdu2gr7mQ53jOLjzzjsxfvx41aZHHHEEfvrTn6q2zmK7f3JvvPEGLrzwQtTW1qrfJ88880yv/X1p4/b2dlxxxRUoKSlBWVkZrr32WkSj0Tx/JXQw7AcNHPaDBgf2hfKD/aD8Yz8oPwZzP4ih1GHgySefxC233KIq5L/zzjuYOXMmzjnnHDQ3Nxf6pR0WXn/9dfWGv3TpUixatAjpdBpnn302YrFY7pibb74Zzz77LBYsWKCOb2howMUXX1zQ1324WLFiBX7/+99jxowZvbazzftfR0cHTjrpJJimiRdeeAEbN27Efffdh/Ly8twx9957L+6//348/PDDWLZsGUKhkPp9IzvG9PH853/+Jx566CE88MAD2LRpk7ov2/m3v/1t7hi2+ycnf2fL90cZXhxMX9pYdsQ2bNig3gsWLlyoOnjXXXddHr8KOhj2gwYW+0GFx75QfrAfVBjsB+XHoO4HydX36NB2/PHHi+uvvz5333EcUVtbK+65556Cvq7DVXNzs4ztxeuvv67ud3Z2CtM0xYIFC3LHbNq0SR2zZMmSAr7SQ18kEhGTJk0SixYtEqeddpq48cYb1Xa2+cC47bbbxMknn/yB+13XFTU1NeKXv/xlbpv8Xvh8PvH444/n6VUefi644AJxzTXX9Np28cUXiyuuuELdZrv3P/m74q9//Wvufl/aeOPGjepxK1asyB3zwgsvCE3TxN69e/P8FVBP7AflF/tB+cW+UP6wH1QY7Afl32DrB3Gk1CHOsiysWrVKDa/L0nVd3V+yZElBX9vhqqurS11XVFSoa9n+8lPDnt+DKVOmYMyYMfwefELyk9kLLrigV9tKbPOB8fe//x2zZ8/GF77wBTVFY9asWfjv//7v3P5du3ahsbGxV7uXlpaqqTJs94/vxBNPxCuvvIKtW7eq+++++y7efPNNnHfeeeo+233g9aWN5bUcqi5/RrLk8fI9V36iSIXBflD+sR+UX+wL5Q/7QYXBflDhFbofZHyiR1PBtba2qnm41dXVvbbL+5s3by7Y6zpcua6r5vLLob1HH3202iZ/gL1er/oh3f97IPfRx/PEE0+oaRhyyPr+2OYDY+fOnWr4tJwG84Mf/EC1/b//+7+rtr7qqqtybXuw3zds94/v9ttvRzgcVn9MeDwe9Tv9Zz/7mRoiLbHdB15f2lheyz9SejIMQ/1hzu9D4bAflF/sB+UX+0L5xX5QYbAfVHiF7gcxlCL6iJ9WrV+/XqX3NHD27NmDG2+8Uc1XlkVrKX9/bMhPP37+85+r+/ITQvnvXc4tl50xGhhPPfUU5s+fj8ceewxHHXUU1qxZo/7ok4Uo2e5ENJiwH5Q/7AvlH/tBhcF+EHH63iGusrJSJcr7r7Qh79fU1BTsdR2ObrjhBlXQ7dVXX8WoUaNy22U7y+kDnZ2dvY7n9+Djk0PSZYHaY489ViXw8iILeMrie/K2TO3Z5v1PrrYxbdq0XtumTp2K3bt3q9vZtuXvm/71ve99T31KeNlll6lVfr7yla+o4rVyxSuJ7T7w+tLG8nr/wtm2bauVaPh9KBz2g/KH/aD8Yl8o/9gPKgz2gwqv0P0ghlKHODmc9LjjjlPzcHum/PL+vHnzCvraDheyFpzsiP31r3/F4sWL1XKlPcn2l6t09PweyKWS5RsYvwcfzxlnnIF169apT0qyF/nJlRzGm73NNu9/cjrG/st8y/n9Y8eOVbflv335ptOz3eVwazmPnO3+8cXjcTUfvyf5R7b8XS6x3QdeX9pYXss//uQfilnyPUF+n2TNBSoM9oMGHvtBhcG+UP6xH1QY7AcVXsH7QZ+oTDoNCk888YSqjP/oo4+qqvjXXXedKCsrE42NjYV+aYeFb37zm6K0tFS89tprYt++fblLPB7PHfONb3xDjBkzRixevFisXLlSzJs3T12o//RccUZim/e/5cuXC8MwxM9+9jOxbds2MX/+fBEMBsWf/vSn3DG/+MUv1O+Xv/3tb2Lt2rXis5/9rBg/frxIJBIFfe2HsquuukqMHDlSLFy4UOzatUs8/fTTorKyUtx66625Y9ju/bOC1erVq9VFdn/+67/+S92uq6vrcxufe+65YtasWWLZsmXizTffVCtiXX755QX8qkhiP2hgsR80eLAvNLDYDyoM9oPyYzD3gxhKHSZ++9vfqjclr9erlkZeunRpoV/SYUP+0B7s8sc//jF3jPxh/da3viXKy8vVm9fnPvc51WGjgeuIsc0HxrPPPiuOPvpo9QfelClTxCOPPNJrv1wy9s477xTV1dXqmDPOOENs2bKlYK/3cBAOh9W/bfk73O/3iwkTJogf/vCHIpVK5Y5hu39yr7766kF/l8vOcF/buK2tTXW+ioqKRElJifjqV7+qOnlUeOwHDRz2gwYP9oUGHvtB+cd+UH4M5n6QJv/zycZaERERERERERERfTSsKUVERERERERERHnHUIqIiIiIiIiIiPKOoRQREREREREREeUdQykiIiIiIiIiIso7hlJERERERERERJR3DKWIiIiIiIiIiCjvGEoREREREREREVHeMZQiIiIiIiIiIqK8YyhFRDQIvfbaa9A0DZ2dnYV+KURERER5x74Q0dDAUIqIiIiIiIiIiPKOoRQREREREREREeUdQykiooNwXRf33HMPxo8fj0AggJkzZ+LPf/5zr+Hkzz33HGbMmAG/348TTjgB69ev73WOv/zlLzjqqKPg8/kwbtw43Hfffb32p1Ip3HbbbRg9erQ6ZuLEifjDH/7Q65hVq1Zh9uzZCAaDOPHEE7Fly5Y8fPVEREQ01LEvRET5wFCKiOggZCfsf//3f/Hwww9jw4YNuPnmm/HlL38Zr7/+eu6Y733ve6pztWLFClRVVeHCCy9EOp3OdaC++MUv4rLLLsO6detw9913484778Sjjz6ae/yVV16Jxx9/HPfffz82bdqE3//+9ygqKur1On74wx+q51i5ciUMw8A111yTx1YgIiKioYp9ISLKB00IIfLyTEREhwj5qV1FRQVefvllzJs3L7f9a1/7GuLxOK677jqcfvrpeOKJJ3DppZeqfe3t7Rg1apTqaMkO2BVXXIGWlha89NJLucffeuut6hNF2bHbunUrJk+ejEWLFuHMM8884DXITyDlc8jXcMYZZ6htzz//PC644AIkEgn1iSQRERHRQGBfiIjyhSOliIj2s337dtXhOuuss9SnddmL/LRwx44dueN6dtJkx012rOSnfJK8Pumkk3qdV97ftm0bHMfBmjVr4PF4cNppp33oa5FD4rNGjBihrpubm/vtayUiIiLaH/tCRJQvRt6eiYjoEBGNRtW1/CRv5MiRvfbJegc9O2Mfl6zN0BemaeZuy9oN2RoPRERERAOFfSEiyheOlCIi2s+0adNUh2v37t2q4GbPiyzEmbV06dLc7Y6ODjUMferUqeq+vH7rrbd6nVfeP/LII9WngtOnT1cdqp51GYiIiIgGA/aFiChfOFKKiGg/xcXF+O53v6sKesrO0sknn4yuri7VkSopKcHYsWPVcT/5yU8wbNgwVFdXqyKclZWVuOiii9S+73znO5gzZw5++tOfqloLS5YswQMPPIAHH3xQ7Zcr0Fx11VWqWKcs7ilXtKmrq1PD0WUdBiIiIqJCYV+IiPKFoRQR0UHIDpRcRUauPLNz506UlZXh2GOPxQ9+8IPckPFf/OIXuPHGG1VthGOOOQbPPvssvF6v2iePfeqpp3DXXXepc8kaCLLjdvXVV+ee46GHHlLn+9a3voW2tjaMGTNG3SciIiIqNPaFiCgfuPoeEdFHlF0NRg5Tlx00IiIioqGEfSEi6i+sKUVERERERERERHnHUIqIiIiIiIiIiPKO0/eIiIiIiIiIiCjvOFKKiIiIiIiIiIjyjqEUERERERERERHlHUMpIiIiIiIiIiLKO4ZSRERERERERESUdwyliIiIiIiIiIgo7xhKERERERERERFR3jGUIiIiIiIiIiKivGMoRUREREREREREecdQioiIiIiIiIiIkG//H0M6vJ3g1oqNAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(12, 5), sharex=True, sharey=False)\n", "for i in range(len(agents)):\n", " p = axes[0].plot(jnp.stack(divs1[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[0].plot(jnp.stack(divs1[i]), color=p[0].get_color(), alpha=.2)\n", "\n", " p = axes[1].plot(jnp.stack(divs2[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[1].plot(jnp.stack(divs2[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes[0].legend(title='alpha')\n", "axes[0].set_ylabel('KL divergence')\n", "axes[0].set_xlabel('epoch')\n", "axes[1].set_xlabel('epoch')\n", "axes[0].set_title('A matrix')\n", "axes[1].set_title('B matrix')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned A matrices alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABi4AAAMWCAYAAABmzX4pAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsvQeYJUXV/199c5g8s7uzObEB2F1yFAmKgKAYEdH3RcGsKKB/BJRkQEAUI69iQH1VXlExgqCABMk5LLC77LI5Tc5zc/+fan6zzPnWme6+w507d2bO53mGpft216lT53R1qHOqLNu2bSUIgiAIgiAIgiAIgiAIgiAIglABBMa7AoIgCIIgCIIgCIIgCIIgCIIgCEPIwIUgCIIgCIIgCIIgCIIgCIIgCBWDDFwIgiAIgiAIgiAIgiAIgiAIglAxyMCFIAiCIAiCIAiCIAiCIAiCIAgVgwxcCIIgCIIgCIIgCIIgCIIgCIJQMcjAhSAIgiAIgiAIgiAIgiAIgiAIFYMMXAiCIAiCIAiCIAiCIAiCIAiCUDHIwIUgCIIgCIIgCIIgCIIgCIIgCBWDDFwIgiAIgiAIgiAIgiAIgiAIglAxyMCFIAzjiiuuUJZlqba2tvGuirr33nuduvzxj38c76oIgjCOSL8kCEIlIn2TIAiVhvRLgiBUGtIvCcLrQwYuBGEM+Z//+R/1y1/+UlUqjz32mPr0pz+tDjroIBUOh52bmCAIk5tK7pcKhYJTt1NPPVXNnTtXJZNJtWLFCvX1r39dpVKp8a6eIAhTtG/S/PSnP1XHHHOMmjFjhopGo2rhwoXqrLPOUps2bRrvqgmCMEX7peFks1m1zz77OO9z3/rWt8a7OoIgTNF+6cMf/rDTD+Hf8uXLx7tqwgQlNN4VEITJflNpampyOu9K5B//+If62c9+platWqUWLVqk1q1bN95VEgRhCvdLAwMDzofAww8/XH3yk59U06dPVw8//LC6/PLL1d13363+/e9/ywCrIExSKrlv0jz99NPOYIUeWK2vr1cbN250BjNuvfVW9eyzz6pZs2aNdxUFQZhi/dJwfvCDH6gtW7aMdzUEQRhjJkK/pAM89Hem4dTW1o5bfYSJjQxcCMIU5lOf+pS68MILVTweV+ecc44MXAiCMK5EIhH14IMPqiOPPHLPvo997GNqwYIFewYvjj/++HGtoyAIU/dDAfLOd75THXzwwep///d/1UUXXTQu9RIEQWhpaVFf/epXnfe6yy67bLyrIwjCFCcUCqn/+q//Gu9qCJMEmSpKEBj0/IPve9/7VE1NjWpsbFTnnnsumabkF7/4hXrTm97kRAPr0WSdlvujH/2IlKE/tL3wwgvqvvvu25Med+yxx+75vaurS51//vnOcbqMOXPmqDPPPNOY+1BPnXLllVc6v8diMfXmN79ZrV+/viR66ukO9KCFIAiVz1Tol/TAxfBBiyHe9a53Of++9NJLr1uGIAilZSr0TSOh6zNUP0EQKoep1i/pgdNly5bJh0JBqGCmWr+Uz+dVT09PScsUpiaScSEIDPqGojv7q666Sj3yyCPq+9//vurs7HQi6jT6BrLvvvs60wXo0eS///3vzloR+gbwmc98xjnmu9/9rvrsZz+rqqqq1Je//OU9AwWavr4+9cY3vtH5CHf22WerAw880LmZ/O1vf1Pbtm1zUv+GuPrqq1UgEFD/3//3/6nu7m71zW9+U33wgx9Ujz76KJleRf95EQwGnekNBEGYeEzlfmnXrl3Ov8PrIAhCZTDV+qb29nbnZVxPyaIjnDX6hV8QhMphKvVLes3CX/3qV+qBBx6Q6TQFoYKZSv2SPk8P0Oh/9W9nnHGGuuaaa5x6C0LR2IIg7OHyyy+39WVx6qmnkv2f/vSnnf3PPvussz0wMGCce+KJJ9qLFi0i+/bdd1/7mGOOMY697LLLnPL+9Kc/Gb8VCgXn33vuucc5Zu+997bT6fSe37/3ve85+59//nmj3l5/8+fPH1H3z3zmM84xgiBUFlO5Xxri+OOPt2tqauzOzk7PYwVBKA9TtW+KRqN7jmlsbLS///3v+2gtQRDKwVTrl7SsQw891D7jjDOc7Y0bNzrHXXvttb7bTBCEsWWq9UsXXXSRfeGFF9o333yz/X//93/2hz70Iee4N7zhDXY2my2i5QThVSTjQhAYhka0h9Cj2npuY72YtV7Ievj0SnqEOpvNqmOOOUb985//dLa9Fh665ZZb1H777bdn+pPhYKSMXqhWT58yhB5F17zyyitqxYoVzv/r9L+jjjrKUy+ZFkoQJi5TtV/6xje+oe666y5H17q6Os/yBEEoL1Otb7r99tudqR10RONvfvMb1d/f71mWIAjlZar0S7/85S/V888/r/74xz96nisIwvgyVfolnVEynPe///1q6dKlToaI7qv0tiAUgwxcCALDkiVLyPbixYudVLpNmzY523rxWL1Q7MMPP2ykz/m5qWzYsEG95z3v8VWXefPmke2hNDydVjjEokWLnD9BECYvU7Ffuvnmm9Ull1yiPvKRj6hPfepTr6ssQRDGhqnWNx133HHOv29961vVO97xDucFX099cM4554y6TEEQSstU6Jf03PEXX3yxuuCCC9TcuXOLOlcQhPIzFfqlkdDrblx66aVOMJoMXAjFIgMXguCD4SPU+oag5zJevny5uu6665wHRT1arUfKv/Od7zhzEJYSPWcgh23rjDu1Zz5D/eenrGnTppW0foIgjA+TvV+68847nUifU045Rf34xz9+nTUWBKFcTPa+CT86HHDAAeq3v/2tDFwIQgUzGfulb33rWyqTyajTTz99z4dPPY/90MdHvW/WrFkkqloQhMphMvZLblkZekHyjo6OUdRWmOrIwIUgMLz88stq4cKFe7bXr1/v3Cz0Ykp6kaR0Ou0scjR8pPqee+4xyhlpgTT9ort69eqS1Vc/uH7lK1/xPG7+/Pl7HmwFQZhYTKV+SS8Mp9OcDz74YPX73//eWaBOEITKZCr1TRyDg4OOjoIgVA5ToV/asmWLM0ChF/PlptnUf08//bTaf//9S1ZPQRBGz1Tol0ait7fXWShcgmiF0SBfAgSB4frrr1cnnHDCnu0f/OAHe6YFuP/++43RaJ2694tf/MIoJ5lMqq6uLmO/TuH76le/qv785z8bcxDqcke6GY2ErHEhCJOfqdIv6XnjdZaFfoi/9dZbpd8ShApnKvRNuVzOeekemkphiMcee8yZX/4DH/hAUXUQBGFsmQr90uc+9zn1zne+k/ze0tKiPvGJT6gPf/jDzlR2wz+SCoIwvkyFfkmvAabX5qiuribHfO1rX3PqcNJJJxVVB0HQyMCFIDBs3LhRnXrqqU7HqucY1Isv6pdSvdhRLBZz0vbe/va3Ow+GOn3upz/9qZo+fbrauXMnKeeggw5SP/rRj9TXv/51tddeeznHvOlNb3LmItULE5122mnq7LPPdo7TaXN6hF1PiaLlFMNo5x/cvHmz+vWvf+38/xNPPOH8q+s6NHL+3//930WXKQjC2DAV+iX9YfDEE090Igh1fW677TYjkuiII44oqkxBEMaWqdA36XrraRv0lCw6ull/NNADFvqDgp5zWs/bLAhC5TAV+qUDDzzQ+RvOUNSz7qdwUEMQhPFlKvRLu3btcqbQPOOMM5xprzR6cXE95ZXWWw+oCkLR2IIg7OHyyy/XQ9z2iy++aL/3ve+1q6ur7fr6evucc86xBwcH9xz3t7/9zV61apUdi8XsBQsW2Ndcc4194403Oudu3Lhxz3G7du2yTznlFKcc/dsxxxyz57f29nan3NmzZ9uRSMSeM2eO/aEPfchua2tzfr/nnnucc/7whz+QOury9f5f/OIXr1vfIRnc3/C6CoIwfkylfmmonJH+dF0EQagMplLflE6n7XPPPdfRo6amxg6Hw/b8+fPtj3zkI0QHQRDGl6nUL3EMlX3ttdeWvGxBEEbHVOqXOjs77f/6r/+y99prLzuRSNjRaNTed9997W984xt2JpN5XWULUxdL/6f44Q5BEARBEARBEARBEARBEARBEITSExiDMgVBEARBEARBEARBEARBEARBEEaFDFwIgiAIgiAIgiAIgiAIgiAIglAxyMDFBOP6669XCxYscBbvOeyww9Rjjz023lUSBEEQBEEQBEEQBEEQBEEQhJIhAxcTiJtvvll9/vOfV5dffrl66qmn1H777adOPPFE1dLSMt5VEwRBEARBEARBEARBEARBEISSIAMXE4jrrrtOfexjH1NnnXWW2meffdSPf/xjlUgk1I033jjeVRMEQRAEQSg6M/QPf/iDWr58uXP8ypUr1T/+8Q/jmJdeekmdeuqpqra2ViWTSXXIIYeoLVu2jKEWgiAIgiAIgiAIwngjAxcThEwmo5588kl1/PHH79kXCASc7Ycffnhc6yYIgiAIglBsZuhDDz2kzjjjDPWRj3xEPf300+qd73yn87d69eo9x2zYsEEdddRRzuDGvffeq5577jl16aWXOgMdgiAIgiAIgiAIwuQNQrNs27ZHpY1QVnbs2KFmz57tvOQfccQRe/Z/8YtfVPfdd5969NFHx7V+giAIgiBMbfTDrX4Q/eEPf+hsFwoFNXfuXPXZz35WXXTRRcbxp59+uurv71e33nrrnn2HH3642n///Z2sUs373/9+FQ6H1a9//esyaiIIgiAIgiAIgjC1gtDOPPNM5z1Mv9d997vfdQYm1q5dq6ZPn24cr79PH3300eqqq65Sb3vb29RNN92krrnmGieAbcWKFXuC0A499FAnUE0HrNXU1KgXXnjBeefjyuSQgYtJPHCRTqedv+EcfM0NKhAK7dmuf7lAfq97us0U3tlNt+trjUO6DmiipyyhyTwoR1O9cYBsBzfuJNv2wKBxjpWIk+38wplku3dhwjjH0An0KXT3GufYuSyVGwqT7UBttXGO0S4gh9OnMEj32fm8cYwVDFLZ8bhrm/ipy1jpjH6ANvZjZ04fLzujv5XKt1EfTtaar5yviqWwa6mxL9C8Tk0FuH7p6C/coALB1/qlQM68LQWoe6pghh6Tj1jGOQXqwqoQosewcnJ0O9zP1YX6ViFMfSKbZOoSwjJAzoApJ9xLKxNM0f4hH6N9gyO7mgrKJizXdtOEBqk+kS5auUDG7L8LEapzpo42di5uXpNoo3LpjH7gx85oYz92Rhv78Tn0Az++zemDcp76cWn6JU22/nnjmo1Go84fZobq6Sv/+Mc/OlkTQ3zoQx9SXV1d6q9//atR9rx585wMjfPOO2/PPp2t8Ze//EU9++yzzsCHjszRzzoPPPCAk5WxcOFCdfHFFxMZY9EvvfGLtF/SJHZTf0xuo/e4QC8tQ1Oopu3UP4fevwZmmD6NcmLt1FEiO7o5Jeg22meW+eyWagy76qMJdsK+Hvr8YKczxjlWNEJ31NDnh3y9+ayGbWf1U7l2T59xjsrBhTzs+dYpo6bKOMVOJlztY+jrQ2dDX586oy+Uy87oc+hvfnwb282Pbz99ffH9kiNLnpnIvtMO+qoKBF7z9UIV9DHzzef1TA29f0V66D0uudl8Lwj0gc1BTmpG0jinZyH1tXQ9/T3aaZyiajZSv4/t7vfUp38m9a2u5VQfu4p5n+qj59StMZ9Tkjvzru3WN8d8vhtYTOs/c3YH2d65vcE4J7GBtlPVNtvVPmOlM+rL+QLaGW1cKjujv/nxbbSPH9/m5Ny+9mpVLNIv0XY8/uM/Is9MUbBDqD9ntlea+l8haj4P5ZL0vp4Gm6McTlaoM0W2rYxZFztC5eTqY6718CMn0NljnKMG6TEqTuUU6muMU7Au2G7BLuabWRvth+yU6fdWjF5fdhPtq/J15jcZtFG5dMb25/zJy85oYz9y0N9K5ducP6GsR377BTUe/dJhFRqEJlNFTRCamppUMBhUu3fvJvv1dnNzM3uOHvXSL/zD/zoeuKtMNRYEYSSyds74mypw/dLup6VfEoRK7Jf0H3fN6n1IW1ubyufzasaMGWS/3t61axcrU+93O15PMdXX16euvvpqddJJJ6l//etf6l3vepd697vf7QRtjGm/9KT0S4JQCcgzE+2bNnQ8Mt7VEoQpj/RLtF/a8cLd410tQZjyZF9nvzSa5Qn0/uHHa/Q0wUPH64GP2267TS1dutTZrzMs9OCIDlIrBiY+UKhEIpGIOuigg9Tdd9+9J8pQO4HePuecc9hzdESijmQczplPXaCCkZf3bD85fTH5PdxvRoXEdtLR1tRMc/R15xvo9kEHvCaDk6PJxmkER0OeDsAEu2gkhiZfR8/p2Idutx3IRPCCTqhPcBcTKZfFcGgaXZJvNtsJ28WQw+gT7O0rPnKxusq1TXzVZYx0Rj9AG/uxM6ePl53R30rl26jPSLKKJc3cRMzYxckJ1y+dcPaPVKDzteiFQNa8jiMQiW9BRLwN0fCaDETiF8IQ/c7ICffnXSP+nX0QrZWHiLAIlxWQDLrqw2U1hDqgz4BDGJVVqIFeK1HIjMB2c87BSOcUtDWTLWZDZlSoFyKVmGhctFG5dEY/8GNntLEfO6ON/fgc+oEf3+b0QTml6pdGumYx22Ks0M85mne84x3q/PNfjdbWETw6+1RH8RxzzDElkcPpePjlN6gsNPVgE0SaDdBIrXDUtE0WoqqwjKwZiG8cE4BuKJA1I5CDvXDPro65ZkX50UcTCcEx8LvFZIoqyBTNTcMoWbMu2HahEPRdkE3hJ4rPTpr65CCCEO2D+jp18dIZ9PWr83jZGX0Of/fj29hufuSMFnlmon3Te6Z/UhUGtu/ZDkxrJL9HGsz3tFw87P4M0mpm9xRa2+kxICfKRK/aizDVFX5nblXRzrRrXTh9+mZRX7Ph2WC/Jea82c8+u9CzLtgu2G6qYJ6EshIh+i43PWFmi7388uKinw3GQmdODrY/2tmwcYnsjP7mx7cN+/jwbU7OaJB+ifZLp5z2QxXofO0mZkMmcI55N7IgCp3zG9wXHSaDk8NlSOfq6P0s2G+mO+eTYdcyuLoZOoGcMJPZYUXoNxg7DO9PUAYnB9uNe7cLZmkWgxViskkxAzVJPThbY34vMtqhTDqjXLSPHzujjblyvPytVL7N95HM83Qp3uXSaV+Z815BaGvWrHndQWhf//rXnWmk7rjjDicI7Z577vH9LicDFxMIfYPQUy4cfPDBzhxher4xnZZz1llnscdzDhmMmBeWIAjlJYtP+FMIrl/C6VgEQaicfqlmhIfbUmSG6v1ux+syQ6GQ2meffcgxe++9tzN11Jj2S9yHckEQyo48M0HfZMm7nCCMN9IvybucIEyEfum6q65SX/nKV8g+PS3vFVdcMaGC0KSHmUDo+cNaW1vVZZdd5oxgaYPr0Soc4XLj6U1zyHa0nY4y5sNmBLINgx15JrITy/GS45SLz91BWq6dYD6U4DGwHW0362boBOdghN6rJ+Xdj8EymHbBduP0wTmcrQg3GXvAtRyUw9WlXDqjnQ0bM+UY7cLI8bIz+lupfJvzW0PWkapo0vbUfdjl6J9J2znWzmRC9FHbhCArIBsxr69skpabarQ85VgFiHprMyNUrLztGp2frq/yrAvqw0X4Wznwkz6oS1XCOxukMeHabpw+FjeXPJ6Dx4TpvOpBRg7aqFw6Y9v7sTO2iR87c3K8fA79wI9v+5EzGl5vvzSazFC9Zpf+ffgaF3feeeeetbx0mXqeVb0g3HDWrVun5s+fr8aStJmkpyy4TeYS1BbBNBMBBsdgFLofOak66CNbzXMKUeb5waUMri5YV00Epiu2IfLe6jUzRdnnNw852HaoT7DHzFo1Mh3gOYZrkwJkcmBdUF8/Onvpy8nh2r9cdkafQ3/j6ov28aMP59ujQZ6ZgACGntL2sZj1u0KDtvsxUIYfOYq5T8aGZc9y0az4O1uOD32wnEg3lfP8k4uMcyL9lmddUBa2W8hMQDVkhefS56PsVvOZsGqwSPuMkc6cHC87c+1WCjsb/sYc42Uf7hhfckaB9EuUWCt16hxEt6cbmeh9sAU+m2ui7fR+G4IoepSjyUKGI64Dh+s+cev94beHcI+ZpWHoBK6Vm2+uORXpovpk6tzL0ORjAdd2y0LmhCYBzzqqiVmrFBiYBd9+LLMyho3KpDP6AdrYj53Rxn7sHOozn3FzVZHX7duoz0iyStEvXVxE5nwlB6HJwMUEQ7/8j/QBQBCEiUHGZl4UBEEQJni/5JUZeuaZZ6rZs2fvWSPj3HPPdSJtvv3tb6tTTjlF/e53v1NPPPGE+slPfrKnzAsuuMAJ3Dj66KPVcccd5wRs/P3vf1f33nvv666vIAiVjzwzCYJQaUi/JAjCROiXoj4z5ys9CE0GLgRBEMpMmpvYUBAEYYL3S16ZoVu2bHEWeRviyCOPVDfddJO65JJL1Je+9CW1ZMkSZ7G2FStW7DlGL8atU4n1YMfnPvc5tWzZMnXLLbeoo4466nXXVxCEykeemQRBqDSkXxIEYTL2S5+v0CA0GbiYYli7aAqYVXBPy+LSn7hjsBwvOc4+SBlNN9CRwGirOWKIxxhTnDCLpmF9sYx4DyzuqMupoWm9dsC9DFYOtFsswyzyC3JULzMVQjVdeLYAi6Rx6WnjpbPhB0wauZedOTledkZ/K5Vvs37LyCqWFDuH1tSl+m07yfa2l6cbxzQ/ALcruNQHm8zb2e4jqQHnLGnxlFO/GhaIHTDTbyPtdFqhDExN1DfbrEvniry7PsqUExuEtORY1DOFF+syOM293TSRLK2bhXJwAVxuEVxItc3WmtexaaPy6Ix+4MfOaGM/dkYb+/E50w+8fZvTB+WMZ7/klhnKPaCedtppzp8bZ599tvNXTrI1ZjtHeiB1vZNO6xXuZq4VRa+VwpJg0XJisGBfoN9MJw+0dVE5TXVQhvmsMNAcctWHlbWD+pqdZ26UvXSqlEBwJsgxfQ3bLrC7k8rpM5+PCn0gp4o+xwRz5jVpFepd7cO1rafOoK9fndEXymVn9Dn0N3++bT4L+fHt0SDPTJRAI52DqzCt1nMalDRMIWYHYAqNnnpmptqAq5xMo+kDmRp4jrbdf+fKiebrPfXBciL0slBW3nxWCPd61yWYDru2G+rjlNsDslbTKVmYGZaNclIN7vYZK51RX84X0D5cu5XCzuhvfnwb7ePHtzk5o0H6JYqVovcrK07vOwVmKmi0X7SLmb4NptjxksN9N+idQ30iwEyRNthI7Vm9Les5jRXqNAByQinznN75cMwAPSYXM9sJp14z+iXme8vgNPr9KNZutm2qkZYTyNiu73acjcqls+EHjM5edkYb+7GzlTanCLMS4dft25w/cbLGo186vUKD0GTgQhAEocxklDzsCoJQWUi/JAhCJSJ9kyAIlYb0S4IgTNZ+6ZwKDEKTgYspRvNDdLQvF4doGsYjcCFQ7pjaDbhYlrscDQ4IFiL0mMHZZjQuEsi714OrL8pJzTMXEQr34AJAEdcyODnYbjajT6wFyqmno+MOMIibmk4jVnJxq2J0xvbnBn3Hws7cYkul8G3OnwxZdK0jX6S4ykxhtu+i0VDJzabjJHbRhZEjrTTC1cqZix8mN9No/e3V3nLirdS+0Z3mSq1WH12ALpqhkanxOnNF0gzIMvRpgbA4TTfdZ0PmgwVZD05dIOrDyle7tptzTC/NLrBBrsqZUdhqgLZBAI6JQhYHZ6Ny6Yx+4MfOaGM/dkYb+/E59AM/vs3pg3JGg/RLlEizmXWT66hyzdILd5vl4DG5RPFy0rXUb5Lc3NqQnWTBMVgGVxcuMzEC5VgxyLbqN+uPxygog5NjtB1mWzEZF4F43NjnWgYD1gX19aOzoa9PnbH9y2Vn9Dn0N66+aB8/+nC+PRqkb1Luiw1jhnGUeS+AsH/jmELxcrBMB3DZHFyCQSYpzSjHhz4opwCJAyHzUcc4BsvgZGHdUB9OVh66pSCzoLfRLmkP+4yRzqwcLzsz7VYKO7MLxHv4AueDnr7NyRkF0i9RrH76PBsK0ntRuCrsmakT6jffHUI96aLkaApRui/aAxkLtUyWYTc9JpgpuNaD0wm/ewxMN+UE4JUqXUf9NdFi+me4L+/aboOQOeHUBXb1zGeeu+AWjddTnMnSQBuVS2dsf7SxHzujjf3YGf2tVL7N+RMnq1hSk7hfmryaCYIgVChZidIRBKHCkH5JEIRKRPomQRAqDemXBEGoNLKTuF+SgYspRs0L7WS7UEWjxLJ1zDoGECGPI5OacBcdIQz0pVzlOPuiMOduFd0OZJnsCRgJrm0FuWkzMhh1wnnoQgPmOYUIvehD/TDnnG1eOlV9Ofd2SxW85fSZ8xnnqmjmQ7iHyglkmDlawUbl0hn9AG3sx85c9IyXndHfSuXbqM9IsoolZZsj81OZ0FZqqzizvo0Rhd5JI/PNWb11OXRvxoecxK6Uqxw22jZL/TGxy8wiylTHi9JHU+iiIa52BuZ1TTP+CWtARGCb1QcimXHeeDvPZE9AtEkAo7KZueXRRuXSGf3Aj53ZKHIPO6ON/fgcmwHj4ducPihnNEi/RPnCiruMfVf1nUy2rQfp7xZk5bDrec2jPn2xDzlqA9iGyWgy1lmIwDlMYC3WBfXhZNkgx84wc/JiRGtttefcxEbboZyUee0X0rAuRhTWV2PWnrDiEfe6MG3rqTMXwetDZ2z/ctkZfc7wNx++7Ucf07cvVaNB+iaKDeua5OphDYJqZk23Giwk4FqGJmy7y8GsZWefRxI19zuWE/ahD5aDEf4YbawJpPzUNeDebgy4Hl6sjW7nmMQwrJ+XfcZOZyZzysPOXjYerZ3R37i6oC+w9vHwbU7OaJB+CchmXe8ZwSwzOwLYijvGeDbwkKMJpOm9MxeDNS2ZzClcZwHL4ORgfXMx+o0j1WjKSU+j5UZb6ftUBNfM0c/9bQXXduP06V4Ozw8x5jklRcupXQMfvZmsz/HSGdsf7ePHztxaGp52Bn8rlW9z/sTJKpbUJO6XZOBilNi27fyVaoEnQRCmDllmEEgQBGE8kX5JEIRKRPomQRAqDemXBEGoNLKTuF+avJqNIXrAwrIs56+3t1dls1nV0GDOaV6JFJJ06NEOwYgts45BPuo9OBOCcrzkOOXG6WhrAeRkq8xR0SBE5+fztAwrb454ok52iJabSpjD1IEcZAHAOQEm0syGc7DduHU+ghl6Trba+5LMRyCC2sdUneXSGf0AbezHzmhjP3ZGfyuVb6M+I8kqlpQx6ezUJltLox2yScZvEjSKIjgYdf391XKsouXkktQ2YWaOdAvXfIBjsAyuLoY+A4ycKOzD7IkIk2cCdfFqN6ccjF7Kwhzq3BoXIdpXWVGoC9NueO2Mmc4gB9vej51ZnT3szMnx8jmuPwkOZorWB+WMBumXKHVBJusmBJFmCZjfOGq2YS4B969Qtmg5mWpqcxsi3JxzEgnXY7AMP/pw5QQSHutKOHWhxxSgDGwTru1QHwvWu3HqgnIx+wDK4ORgXbi29dIZ9fWrcyBMr/VMdWRM7BwI0/6hASbDx99frW+kqHbj9EE5o0X6JsrAvGrXTOVg2nyOjkMWAL47pOvDnhnSRkY0k91TtROiSsG1uLXvsBysC6dPtBuyF7th/vBBxqfhnSTDrQcDEbnYbpFepm1bqd8HU5CBz1zHg9Mirtct9243FjpzEciGL1juNi6VndHf/Pg22sePb3NyRoP0S8r1eV1lvSPkQ4MBz2OwHC85TjmZvOv3FmUz35jgGCyDlQP1xTIK8M3GIZ53nfHCqCsjB9uNveBAzrQZ5iJsrbtrXcvh1hAdL50Nf0L7+LAzK8fLzuhvpfJtxp9YWUWSmsT9kqQLjAI9YLFt2zZ1+umnq2XLlqm3v/3t6hvf+IbatWuX83uhRIs+IXqQ5LzzzlPz589X8XhcHXnkkerxxx8fE1mCIIwdGTto/AmCIFRavyR9kyAI4430S4IgVBrSLwmCUGlkJnG/JBkXPrMrhpPL5dRFF12k2tra1P/93/+pO++8U/3mN79xBhH+/Oc/j9n0UR/96EfV6tWr1a9//Ws1a9YsR+bxxx+vXnzxRTV79mxfZaz9eJJs16yhLtD8kDnneLCdRkzlG6uMY3YdSaN/epbnXOVoGl6kESrJF1roAczcxKqayh7cq4nW4wizbqhTsA3mMm/vNM4x5lWHKF+rsd44J99U7dpuqoeZzx3mlreZ0VcrDNGOVdSGqqbarAvYqFw6ox+gjX3ZGWzsx87ob6XybdRnJFnFkp7E8w+OhumPes/V2bYf2sK0DRJKFS+ndw61Te/cWcYxGPGVj0KEhO1dF9THsk19In3NtFgMdmTkZKogw8wI3jDlhFIQZQSZVJG+gqcczNDiovgQy64qi87Y9n7szEV4etmZk+Plc22rzDZQittXnBz1aVU00i9RLvzX6ca+aDtEr9aAE8yD+zMzJ3fkFTrf9oXd3nICcNsZmMtcO9XUuTJ1YdcyuLoY+uhrDmTFYX0bi1mHoRCmxwzOohkJmRrmORnaLgoZTaFas20D/bCeWhLmZq81O/l0I0Y6B1z19aMz6utX5/CGeFnsjHIu6DrD1d/8+Da37oCXnNNG0S9ppG+iJB/bSLZteD4PLjLn8E/VUxvHOqkPx1/pMs6x4F0B5WSazeeJzuWQIQhJT2EzwUzVr6Hr10R29Xrq0zOPPuO37g/+uNB8/1Abaf9QvcU8pGZLzrXdeuabft/yXtqWAbicCsw6YbHHaTnJ3barfcZKZ9SX8wW0M9q4VHZGf/Pj22gfP77NyRkN0i9R+g+g36JCfdQO4Y5B45xQJ3UUG7K5Nel5dFaTXBWuD2peK+EuKqv+sd10G76/OMD3lUJN3LUenE71j9Gshrq/txrn4Lce/M5jzZhmnFOoiru2W+Ips/9u/mmP65pgmgZYFyxQV+O6nhJno3LpjO2PNvZlZ/yG5sPO6G+l8m3OnzhZxZKexP2SDFyMgM6a0AMQwwcthvY999xz6pZbblH33HOPOvzww9UxxxyjDjzwQPXxj39c3Xjjjerss89mBzxeD4ODg47Mv/71r+roo4929l1xxRXq73//u/rRj36kvv71r5dMliAIY0tmEs8/KAjCxET6JUEQKhHpmwRBqDSkXxIEodLITOJ+afJq9joZypr417/+pUKhkHrDG96gov9v7u1UKqUaGxtVXd1ro5AnnHCCev/736++8pWvOAMXpRy0GMryyOfzKhajI6N6yqgHHnjAdzknH/ws2f5Hbn+yXb3FnA8Yxyb755jH9OyVL0qOxsrRqLdoG5UUwLmKmfnaO5dGXOvB6VSVo9HDgQITYeiRBVCoM0dssV3wiCCMLnOybZuZN9SCiBqIPsnXxDzrUi6dsf3Rxn7szK1V4GVn9LdS+TbnT5ysYklP4vkHRwNG+AeYKU5zEOAVHoT1YeJmnxuiwV36AvOUk03QchKt5kEYaYrHDEwzIybCA7arPvEO89rPgU7J7VShgVlm1BvWZbAh4NpuXLYEyslVm/6Kx/TNo/1QtNfUB21ULp0NP/BhZy6a2MvOaGM/Pod+4Me3OX1QzmiQfokS7jGv42DK3V+DaWY9FTwmVbycrPeyEipTH3H1Ca4ML300UQjkyzRQp422mqG1eAzCycG2Q31Cvabj5+G5xILIZqNNmHXCsC6orx+dvfTl5IynndHn8HeuvmgfP/pwvj0apG8CmPX8hpPD7EB9nw96H1OsnHzMvE9aEMCfgkDayAZ/5XjVFeUU5tKIV3u3eSFYcIz1StxTFrYb6qPJg6zTj3mQbN903xuMc7AcXKuhXDr78QO0D9ajVHb28jc/9uGOGY0cP0i/RLFwHVJYBynLzKgQGsB1tkwfwedmLzmaTC3NEkrshPV6ZtV5rnUwMDPuuQYn6hTfDZkEEM3vyGmlGQqFaXSdiUKEWRNnRsy13YIN5jea8EbIxlTeZBdOJ9v5KLMOENioXDqjH6CN/diZWxfDy87ob6Xybe4bBCerWNKTuF+SNS5G4Pbbb3fWktBZFB/+8IfVW9/6VnX33Xc7v/X396tp06aR9SWqqqqc41pbW9Wtt97q7NNZF6WiurpaHXHEEeprX/ua2rFjhzOIoaeKevjhh9XOnTtLJkcQhLEnaweNP0EQhErrl6RvEgRhvJF+SRCESkP6JUEQKo3sJO6XJOMCGBps0NMvnXLKKeoHP/iBMyWUngLqv//7v9ULL7yg3vzmN6tgMKgeffRR9ba3vU3V178aAa8HOt70pjepm2++2dlf6qwLvbaFzubQ61lo+Xp6qjPOOEM9+eST7PHpdNr5G86/1i1WgWGR/3aUjgYOTjNH6XIJOoqYTZp62dEs2b5r4zL43YxusGHO4K596Lx6VVvMEDCM6sVrkZODOuUSVE7dS4w+0+kxVp4OQnXtbY7yYrtgu1VtMS+3IGRLBDvMORfzMIqej4Vc24SvS3l0Rj9AG/uxM6ePl53R30rl26gPK+tAVTSpSTwa7gXXL/VML6jAsLkfuSzHBMz/ixHzFhNA1TsXjsmBfRk5yZ1UTn+z6cO1G+g8wt2LITKYyWrAuqA+nJzG52lUb7oh4tlHtq9MuK7VgO2mqd5C/TxbQ/0zsZnOk6oZmE+v48QuWkbvPNPH0Ubl0hnb3o+d0cZ+7MzJ8fI59AM/vu1HzmiQfon2S4GeHOmXNF5NlK7zjgfCMkID3sfEOuh2/8yQ53WM12DYnIJXZellzIKy6l+iBaWnm5F+wUEaktuz0Mx88Gq7COjDyYntoHOkp2bR55RAxrwxpJvdjci1rZfOqK9fncfLzuhzfi79Uvn2aJC+ifZN+UJWBayRP0aEmDWa0rXexyBcFjgpo9/0+wJkUVdvxt/9leNVVywn+QSNmu1daoazVsExbF1AFrYb6qPpXEnPueXPbyTb9gxmNoA1dNsOjI/OfvwA7YM2LpWdvfzNj324Y0Yjxw/SL9F+yc7nVCDw2j1rsI72UQXmnSs7l+4M95m2w3Wb4m10B8rh3gNaD4BvMjvNa6VvJi0n3kb9JJs074GoU98sKqd+rZkpmptNjwn107p0LjMzOPF9A9utehszO0AtXXMkvtVcO3YQ1tGyg/RdoncOM4MA2KhcOqMfcGsRetkZbezHzuhvpfJtbj0yTlaxpCZxvyQZF4AebHjqqaec7Aq9GLYeINALYF9//fXOb3pdCT2NlJ4W6t5771UPPfTQnnN1FkY4HHamkNIZEaVm8eLF6r777lN9fX1q69at6rHHHlPZbFYtWrSIPf6qq65StbW15K/zT/eXvF6CIBTHZB4N94Lrl9oevWu8qyUIU56pnHHB9UvtD0q/JAiVwFTtl0bqm14ZfGa8qyUIUx7pl2i/tGXDPeNdLUGY8mQncb9k2aWcz6jC8btg9vr169XKlSvVgw8+6GQ1ZDIZFYlEnMGLL33pS+rZZ59VTU1NzvRR+t+f//znqqGhwRlEOOigg9R73vMedfnll4+5Pp2dnWrhwoXqm9/8pjOllZ/R8IO+dQOJIMT5aLnRv1g7dZFUIzN3Kow05iFonps/twCDq/Vr6IhnnpmjEkdXO5fDfHHM3N+oU/XWgqfOiR00ZG1gVtxzZLV3bsC13bi57GpfpuFoBWYuwUCanti9JOE5vyfaqFw64zFoYz925kbQveyM/lYq3+Z0RllrLztfFcsXnz3N2PfN/f6gpgJcv7Ti/36orGGZYLHtZrRAtJNuV22nftQ32xyHT9PlYFRqNo1U5eQgMx43HScfpbKCaVqX3Yd4JzOiPnXrTTkWXAqxbTRaJjXHnFPThm6za6+Qa7s5cmBX1XqaYWFDlpdzTorWt2+vGtfoQc5G5dIZ/cCPndHGo7Wzl8+hH/jxbU4flLP57C+qUvRLU6Vv4vqlN1xMn5e4CHILHqHj7UzWZyO1nw3PoTlz+SVDTg6mDG5YY2YE5ePQLw3SunQsN0NgQ4Pu+nAR/nhMBLIeNBnIfECduYwsbDsL1uJKrDcXn8C+Cfulgb3MeaztgOVqH9TXj86or1+dDV8ok53R57jMCC/fxnbz49vPfq/45yWNPDPRvum9h11JIpszzdT/upaYD99e72V1L5svUJFd4Ocgp2+u6WuZari+cC2HVuMUFemlvla1NeOpDwaVDsyEMrm1aqA7SDAzLQey7u2WajDPCUMg8+B0uHZazPfZbJV7thX73jwGOqO+nC+gndHGpbIz+psf3/bz/of6cHLueOFKVSzSL9F2ffebvkX6pXySOmzvPO+1oDiqt1A5wX7qtChH0z876vptgXtnxGdv/D6Ba+5xOuFad/0zTDm1m+lzSvd8+hyT3M2sEchkyw8nXW/+XrcBMlMamGyDDvqNqWsxrUu00/szcbl0Rj9AG/uxM/cO7GVn9LdS+Tbqw8n612OXFV3uFydxvxSaSgMWQ4MWQwMRbgthH3bYYer3v/+9M3ChF+fWfOpTn1KXXHKJ+vvf/64++9nPqs9//vPq2muvVYceeqj69Kc/7WRg6HNPO41/+X+9/POf/3R0WbZsmTO4csEFF6jly5ers846iz1eLyY+tKD4EPgSLghC+ZlMo9/FwvVLwwctBEEYH6RfkuclQahEpG+CvmnYx0FBEMYH6ZekXxKESiM7ifulKdHDDA1Y3Hbbbc6aFc3NzerEE090/nSmhJ7WSU8JNYSeemnvvfdWjzzyiNq2bZuaM2fOnsGOt7/97eovf/mLM3Dxzne+Ux188MFOmbpsfdwdd9yh5s2bNyZ6dHd3q4svvtipk663zuy48sornemp/NIMUaV9zd7zN6drLdfIEi5io2qXuxznHFhDoW9mwHP0FY+p3kzLKMDcfJxOWEbdRjMVonsvGiYW7aF16ZnLzfnn3m6cPiinalvG85hAluo82BDwrEu5dEY/QBtzdcF2wd/92Bn9rVS+zUUicbKKJc2lckxhal4Me/Yx9etSrnOKx1vNNu1cSkOxIt3ecjDaNtrJRES00WitfBONCGt+2Iy8wGhbL32cfdvblRuJ9m5jX352I9me1hfylgP6qDTth+wBMxzXStD+oqZv0LVNOBuVS2f0Az92NtrEh525iGovn0M/8OPbnD4oZzRIv6Q8M1twX+0Gup2PcJmidLt7cfGyazbBvN51pq2S2+g12D+Hhu9He8z7cc8Cy1UfTlbNWhrWa8cZv2+h63X1LKtzbROu7ZJbU55yAm20Pyg00QnPo62moP65cde6cG3rpTPq61dn9IVy2dmPr3v5th99SoX0TZRCkt570vUhzyj0DKxzguF7WIYm1OsuhzMLZiSEe70zFjAjyI8+uLZBrNVdX+4Yri7RbvdyUB8us6jmFfesE64cL/uMlc6orx87s1knJbAz+psfX+B09vJtTs549kt6Rg8dCLtr1y613377Od+VdFDsSPzhD39Ql156qdq0aZNasmSJuuaaa9TJJ5/MHvvJT35S3XDDDeo73/mOOu+889RYEuym7wp2iKYVRbvNbw+DjbCuRHvec+YJLzlOOS30Gb9zKfWKSLd5n8RMgfp1Gdd6cDr1zgl5rnm461BYn2KTd8ZC9baca7tx+njJ4Y6peQW+tzAujjYql87Y/mhjP3bm5HjZGf2tVL7N+RMnq1jSk/h5acqscaE77A996ENq//33dwYqLrroIvWZz3zG+W34oIXOaNADFG95y1tUKpVypoHS6MGBocwNPY+f/k3//9y5c52pmvSAxa9+9Stn0KJQKM2iT8j73vc+tWHDBic1b+fOneqHP/yhUxdBECYWuULQ+BMEQai0fkn6JkEQxhvplwRBmIz90s033+zM4KGnGNdrrOqBCx1Y29LSwh6v11Y944wz1Ec+8hH19NNPO0G0+m/16tXGsX/+85+dINxZs2aNSj9BECYeuUn8vDR5h2SG0dbWpn7961+rL37xi86f5q9//av6wAc+4Aw26AEN5IQTTnBuCN/97nfVKaecolatWuUMGDz//PPq7LPPVrFYjKyZoQc2hgYs9OLdlUpiA51QO9KZJNt9c82wFpyrHOdD11RBZFyoo99VjmZwetQ1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17mtb09jy0paiGvD4/HKpX896Q7HPYDzat1/x/q84u+0+/4n8B79PsNe74nUOl9Tut39mtoWzvOksNJqsgyvZemPS7e73iLV5dpYGjsk7r06iyuspPabot16VA5epz1f6v7bKdxnNdk6V98n2dzmVI6zfowTOc6ey4lzznm9J965nchyUkIuOeb924BbJbLP2cOuaKfzM6FYGxslv9rr/ufOY1O00/mZpy/DazmxYmcrrIM3eNwb91DnvIO2aa3g9rrPG31d9O1R8muc5+N3XZzLKX7To7eB9tlatsmKe62m77u9h+XFXc6ezs7HLbTXRN2N6+SgrbEmj4/XMfyua9Prom+vUvZF08vx2v+u4+zRNknfL/r2JHKc453XiZzbiWyP17mdErLJMa/3n2bLjsLvW9sXaC03D/rK43vaTufxqjpE+3s73H0868qd+11fTlGFeznlG7Tr8xot/3a7z8+KHloPyHIr7va02KJ9LlY7HxdVuM+9mvKiuOuij/ml7zd9e+zXbNXO+zpnuSU17vM31rG0ybH89OPj1za7xjjzOBf046wf43QdZ/18S+Tc1o9PIue213JSQi455p175t2St2rv9zO03wiqW3tcwOtjw2nvUVp/si/p97iWpb1nR293K/oWm7W7LETirEcCy/nm5ENc7yn7wrmc77oWNPm817qksj0VP+zmek35RudrKtsXNL1P7HWJZGWb9f2fyPmk7xfv7UnyfEvTue11PnkuK1l14c0lKi4M0KpVK+ndu7djXosWLaRNmzb2fHU7qLlz58qZZ55pz1NjXEyZMkWGDRsmffr0abTc4uJie2pIv+0BgMyzQlT7nSxyCTATuUQuASYim5zZFCkkm4BsI5e4ZgJMY4U4l0iYACgqKpI33nhDZs2aJZWVldK5c2c5//zz5Ze//GXSZcUKna0dYtp9Ob3uE6jfo83rNXo58ZZjl6uVYxVoLXh3uWsv9ddEovpy49+/XS/j663upnIDun3peLz8c2ezvohWxv7laPcl117itT2duzvvN/jnzf3dr2nlfM3m9W2bXM7+dcnONuv7Xz/GXuui7xf9+f3lRJI639J1bnudT17LSlqdR41/LovpPSPcLbUKK50HJ1qotYLzbIUeS2E58Y9N4Z6m76frVYa+rHjb43U/zFi+fk6736O/Rt8vXsuJtz0tq9x/PHUl+U3n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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_batches_to_show = min(5, agents[0].A[0].shape[0])\n", "num_rows = len(agents) + 1\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(num_rows, n_batches_to_show, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(n_batches_to_show):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.A[0][i], ax=axes[j, i], cmap='viridis')\n", " sns.heatmap(env.A[0], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(f'batch={i + 1}')\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true A', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the B tensor (just the expected value of the posterior which in absence of learning is same as the prior) alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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pxOW5jedErlYsmSJDB482BQXtEPi7LPPlnvvvVfat28vx44dk4oVK5qCQL169czzS5UqJTfeeKPplFi4cKF07do14t0SAwYMkK+++kr+9a9/SdWqVc2WUR06dJBvvvlGzjzzTKv2IsztL15+7wyIZuWdOwCA+EmxtNIfTaHyOx77yEYiv2Od3Yr8BmKD/A5Gfod3bfIbiA3yOxj5Hd61yW8gNlIszW86JU6ihQQ9nn/+eTO8eseOHabQoAOsb7jhBvn9999NYSIxMVE+++wz83WAdjBceumlMnv2bPN1JAsSx48fN1tGPfroo3LJJZeYIsm4cePMr7pWAHDbnognHwAA5yO/AcBO5DcA2CnV0vy2Y5UxpIWETZs2yfLly+Xjjz82xQftRmjatKlccMEFphAwZcoUs1XTq6++KmvWrDHFC6XdE4ULFzbbOmVkZJjXRooO19ZrFitWLMd53cbpk08+yfN1cqvqO31+glPmPnAHABAbKZa0G8ZSqPy2IXuc0nVGfgOxQX4HI78jv454rQVwM/I7GPkd+XXEay2Am6VYmt+e6pTQDoi8KFu2rNmyKSA1NVVOP/10ueeee0wh4scffzRbO+m56dOny2+//Wael5aWZjorKlSoENGChCpdurS0bNlSHnjgAfnPf/5jChS6fdPatWtl7969Ef1eABBvJ/yFgg4AgPOR3wBgJ/IbAOx0wtL8tmOVYQrMdghsp6RFhiJFipyyK+Giiy6St99+W5o0aSKFCv33t+mWW26R++67T95//3257bbbZMSIEfLYY49JixYt5J///KesXLnSvLZXr15R+Tl0lkT//v3N/Agteuja+vTpYzo7QtHh3Hpkl+nPkARfoqsr6bauG8D/pGV64u0pV3nNbydlTyQ62py+7mivBXAD8pv8zsvz3dRJDbgF+U1+5+X5kUB+A5Fla357olMiUIxYtGiRXH755TJo0CB58803szoctOsgu7POOkvOO+88Wbdunfz888+SkJBgChn6a7du3WT+/Pnmed27dzfzI6666ipzbe2cWLp0qdSvXz8qP0edOnVk1apVcvToUdm9e7esX7/edGfoekOZNGmS6frIfuz0fxuVtQFAJKVkFgo6vIT8BmAr8pv8BmAn8pv8BmCnFEvz2+fP655Glnvqqadk4sSJMmDAANmzZ4+sXr1aWrVqZYoToboq3n33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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "num_actions = env.B[0].shape[-1]\n", "base_labels = [\"Up\", \"Right\", \"Down\", \"Left\", \"Stay\"]\n", "action_labels = base_labels[:num_actions]\n", "\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "\n", "fig, axes = plt.subplots(len(agents)+1, num_actions, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "\n", "for i in range(num_actions):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.B[0][0, ..., i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.B[0][..., i], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(action_labels[i])\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true B', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Here, once again the agents have to learn the A matrix, but now have an informative prior over the B matrix: we fix it to the expected transition distribution under a flat prior over actions, i.e. the agent knows generally that motion on the grid is restricted to the locality, but have no sense of how particular actions relate to particular transitions.\n", "#### We use a precise and accruate prior over initial hidden states" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = [jnp.zeros(num_obs[0])]\n", "pA = [jnp.ones_like(env.A[0]) / num_obs[0]]\n", "_A = jtu.tree_map(lambda a: dirichlet_expected_value(a), pA)\n", "B_collapsed_actions = jnp.clip(env.B[0].sum(-1), max=1)\n", "pB = [jnp.expand_dims(B_collapsed_actions, -1) + jnp.ones_like(env.B[0]) / num_states[0]]\n", "_B = jtu.tree_map(lambda b: dirichlet_expected_value(b), pB)\n", "\n", "agents = []\n", "for i in range(5):\n", " agents.append( \n", " Agent(\n", " _A,\n", " _B,\n", " C,\n", " D,\n", " E=None,\n", " pA=pA,\n", " pB=pB,\n", " policy_len=3,\n", " use_utility=False,\n", " use_states_info_gain=True,\n", " use_param_info_gain=True,\n", " gamma=jnp.ones(batch_size),\n", " alpha=jnp.ones(batch_size) * i * .2,\n", " categorical_obs=False,\n", " action_selection=\"stochastic\",\n", " inference_algo=\"exact\",\n", " num_iter=1,\n", " learn_A=True,\n", " learn_B=False,\n", " learn_D=False,\n", " batch_size=batch_size,\n", " learning_mode=\"offline\",\n", " )\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run multiple blocks of active inference on grid world for each batch of agents that was initialized different `alpha` values. \n", "\n", "#### Since the agents are using offline learning (`learning_mode = \"offline\"`), this means that parameter updates to the A matrix are performed at the end of each block." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pA_ground_truth = 1e4 * env.A[0] + 1e-4\n", "pB_ground_truth = 1e4 * env.B[0] + 1e-4\n", "num_timesteps = 50\n", "num_blocks = 100\n", "key = jr.PRNGKey(0)\n", "block_and_batch_keys = jr.split(key, num_blocks * (batch_size+1)).reshape((num_blocks, batch_size+1, -1))\n", "\n", "divs1 = {i: [] for i in range(len(agents))}\n", "divs2 = {i: [] for i in range(len(agents))}\n", "for block in range(num_blocks):\n", " block_keys = block_and_batch_keys[block]\n", " for i, agent in enumerate(agents):\n", " init_obs, init_states = vmap(env.reset)(block_keys[:-1])\n", " last, info = jit(rollout, static_argnums=[1,2])(agent, env, num_timesteps, block_keys[-1], initial_carry={\"observation\": init_obs, \"env_state\": init_states})\n", " agents[i] = last['agent']\n", " divs1[i].append(kl_div_dirichlet(agents[i].pA[0], pA_ground_truth).mean(-1))\n", " divs2[i].append(kl_div_dirichlet(agents[i].pB[0], pB_ground_truth).sum(-1).mean(-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the KL divergence between the true parameters and believed parameters over time for the different groups of agents (agents with different levels of action stochasticity)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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q+BW69at1f6FCxeqDKcDBw6gWrVq6vWSXSUBV5vNpsY88sgj+Oyzz7Bt2zb1vGfPnsjMzFTv7XfFFVegRYsWKpBVEDwPIiIiKj/SCvi7z0wpIiKiApBsFX9ASv6jnygiIkLdS2BK/i6Keimf2+3G+++/j1GjRgUCou3bt8e8efPQrVs3FRybP38+nE4nOnTooPavXLlSbfcHpIRkRMkyvl9//RW33HKLGnP11VcHAlLihhtuUIGtU6dOoUKFCmqMvG8wGSOBKyIiIqILxaAUERFRAfhrSEmGFJGf/+9B/j6KOiglASAJjN5zzz2BbRKEkiwmCZRaLBY1n08//RT16tVT+yX7SQJmwWRcQkKC2ucfU7du3ZAxVapUCeyToJTc+7cFj/EfIz8ul0vdgq+YEhEREQVj9z0iIqLzwCV7FK6/h3fffRddu3ZVS+78pPC4BKq+/fZbVUdKspmkppTUhQo3qT8lafv+W82aNcM9JSIiIiphmClFREREVMJJBz4JPH3yySeBbbt27cIbb7yhip9feumlalvz5s3x448/qs58UutJirDL8sJgXq9XdeSTfULujx49GjLG//xcY/z78zNu3LiQJX+SKcXAFBEREQVjphQREREF7NmzR2X/bNiwocCvmTVrlqpbREVn5syZahme1I7yk0LrQupDBZNlhLquq8ft2rVTmVRr164N7F+2bJna37Zt28CYH374IbBEVUinvgYNGqile/4xS5cuDXkfGSPbz8Rut6vCpsE3IiIiomAMShERERGVYBJAkqBUv379VD0ov4YNG6raUffddx9WrVqlMqcmT56sgkXdu3dXYxo1aoQuXbrg3nvvVWN+/vlnDBs2DL169QosA+zdu7cqcj5w4EBs3bpVFU6fOnVqSJbT8OHDVdc+Ob505HviiSfUckE5FhEREdGFYlCKiIiIqASTZXv79u3DgAEDQrZbrVZ8/fXXqFSpEm6++WY0a9YM//nPfzB79mzceOONgXFz5sxRAazrrrtObb/qqqswY8aMwH6p97R48WLs3r0brVq1wkMPPYQJEyZg8ODBgTHS5W/u3LnqdbJE8OOPP1aF15s0aVJM3wIRERGVRQxKERERlTOS8SKBCVlyJ13bbrrpJpVlk5/ly5er5XwLFixQQQ+Hw4ErrrhC1THKbdGiRSozJzo6WmXnHD58OLBv9erVuP76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7ty5GD9+PB599FHUr19fdd5r0qRJGD8FEREREZUlDEqVEZpZgwZD1ZRyOVlTioiI8pKlemdarrd8+fI8226//XZ1IyIiIiIqCix0XkaYrCZA09Vjr8sZ7ukQEREREREREZ0Vg1JlhMlskjwpQDfB6/KGezpERERERERERGfFoFQZYbLJSkxV6hy6zwO3k9lSRERERERERFRyMShVRuheCUhpOf+kPiA7MyPcUyIiIiIiIiIiOiMGpcoI16lsaLoDmqHKnSM7IzXcUyIiIiIiIiIiOiMGpcoAr8cDb7YOA3YYhgmGrsOZnR3uaRERERERERERnRGDUmWAxWqFJiv3FA3QAXdWVngnRURERERERER0FgxKlRGGRKIkICXL9wwdTiczpYiIiIiIiIio5GJQqozQLJoqcy7/pD6vD16nK9xTIiIiIiIiIiI6IwalygiTOafAuazj07063C5nuKdERERERERERHRGDEqVESa7WS3iU//n88LrZqYUERGFmjZtGurUqQOHw4G2bdti1apVZxz79ttv4x//+AcqVKigbp06dcoz3jAMTJgwAVWrVkVERIQas2PHjpAxJ0+exF133YXY2FjEx8dj4MCByMjICBmzadMm9V4yr5o1a+LFF1/MM5+PPvoIDRs2VGOaNm2Kr7/+utDnsn37dnTs2BFVqlRR73PRRRdh/Pjx8Hg8CBf599I0Lc9t6NCh2LNnT7775Cbfl9++ffvQrVs3REZGonLlyhg9ejS8Xm/I+yxfvhwtW7aE3W5HvXr1MGvWrL/190NERERUEAxKlREWuzUnKKWZoOsavC53uKdEREQlyLx58zBq1ChMnDgR69atQ/PmzXHDDTfg2LFj+Y6XIMWdd96J7777DitXrlTBos6dO+PgwYOBMRI8eu211zB9+nT8+uuviIqKUsd0Ov/K1pUg0NatW7FkyRJ89dVX+OGHHzB48ODA/rS0NHXc2rVrY+3atXjppZfwxBNPYMaMGYExK1asUHORINL69evRvXt3dduyZUuhzsVqtaJv375YvHixClC9+uqrKjgn31m4rF69GocPHw7cZO7i9ttvV/8mwfvk9uSTTyI6Ohpdu3ZV43w+nwpIud1u9T3Onj1bBZwkgOe3e/duNUYCchs2bMCIESMwaNAgLFq06IL/foiIiIgKxKBik5qaashXLveF7cNnnjFm3D3Z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ZlCKiIiIiIiIiMp3plR5UxxXCD+b+goObroUkKLnp1kzfkFCCwsiYqJw+Y03oXLN2kXy3kREZRkzpSg/zJQqOH4fRERE5UdaAX/3Q9vqUKlni46QhY25tkqAKif26HI6wzIvIiIiIiIiIqJgDEqVMTZHlLTay70VOL3J5cwKx7SIiIiIiIiIiEIwKFXGOGKioPkjUKcZsMI4HajyZDMoRUT0d3DVOwXj3wMRERHRhWNQqoxxREVB072hGzU7dF/OSbPH4w7PxIiISjnr6Vp9WVkM7tNf/H8P/r8PIiIiIiq4sHbfo8LniI6GhvRcW63QTteZ8rCmFBHRBZGOr/Hx8apzrIiMjISmaeGeFoUxQ0oCUvL3IH8X8vdBREREROeHQakyJjImFtD359pqhXE6Kc7j9oRlXkREZUFSUpK69wemiCQg5f+7ICIiIqLzw6BUGRMdEwtNDw08GSYLDCMnU8rrdoVpZkREpZ9kRlWtWhWVK1eGx8Mgf3knS/aYIUVERER04RiUKmPskbJ8L9d/KGlmGKdrSnldrClFRPR3SSCCwQgiIiIior+Hhc7LGItV6keFBp50zQLdm9N9z8cr+0RERERERERUAjAoVcZYbXYgV1BKlu/5PDlBKS9rShERERERERFRCcCgVBljczhgGLk77Jmgu73qkc+bc09EREREREREFE4MSpVBBnIVM7fa4D29fM/QdbiduYNWRERERERERETFi0GpMsgwZ+fd5tKlbZR67GJQioiIiIiIiIjCjEGpMsgUmbdulOGxwmzJabbozEoPw6yIiIiIiIiIiP7CoFQZpJkNwBsamDI8ZlhsNvXY42KmFBERERERERGFF4NSZZDZZpHCUiE03aHqSQlnVt7lfURERERERERExYlBqTLIHCUZUb6QbQYcME5HqtxOBqWIiIiIiIiIKLwYlCqD7FGR0mYvdKMRAeP0NjeX7xERERERERFRmDEoVQZFxkbDZIRmSkFzwPDlBKV0d95C6ERERERERERExYlBqTLIHheVN1MKNng9XvXI52NQioiIiIiIiIjCi0GpMigqKgYacgJQfrrJBuN08XOfL1cWFRERERERERFRMWNQqgyyRUVC00ODUobJCt17OlPKxUwpIiIiIiIiIgovBqXKIHtEBDTDk09QKidDypcrYEVEREREREREVCqCUrt27cL48eNx5513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nmKG1KRI8GZ0mzvWtZ8OJPLzyT6+7B666eI1VqoRERERER2pGEoRER3GoVn/gYP1diSTRvzJeCcS0U6kU6ls6JZOIxWPIhmPw0k7cKS/WSYNN5WB46Th6Ao2B15Gwjhp1O/qQM51lL5UOpTL9W7PTRmT/9PNlXQgZ+jADvA8uS3TweQxqXrLTvXMhnbZEE5iu+x12ScXsOVCum6Pdbtfejhl5YI9Qx/a0IFfvjtUfmppNtzL9VjL3df1mvV93a532yer2/V8ILjn7e7HygWFRw/p6UVEREREhcVQioiIDmmhkhK9VdXWFfulHFVy1XipZBKe68DJpOBmHH3bdTPZxzMZfdtJSxiYgus4UI7sm0EiEgM8BU95ehqsng7rOPq2HE9lpA+crPTo6WDQlco9mQbryeqNCtABYrZVlDxXjpXtKd91v4RnnqSKEqRlp8/2oPvLS0iYrfWDhIs9wseu/SWEtByUjy4twlkmIiIiOroxlCIiIqJPrMaTnm5ERERERH3h6KrNJyIiIiIiIiKiQwJDKSIiIiIiIiIiKjiGUkREREREREREVHAMpYiIiIiIiIiIqOAYShERERERERERUcExlCIiIiIiIiIiooJjKEVERERERERERAXHUIqIiIiIiIiIiAqOoRQRERERERERERUcQykiIiIiIiIiIio4hlJERERERERERFRwDKWIiIiIiIiIiKjgGEoREREREREREVHBMZQiIiIiIiIiIqKCYyhFREREREREREQFZxf+Sx69lFL6MhKJFPulEBERUR/L/b7P/f4/2nEcREREdPSI7OM4iKFUAXV2durLoUOHFvulEBERUQF//1dUVOBox3EQERHR0afzM8ZBhuLHdwXjeR527tyJsrIyGIZx0FNIGeRt27YN5eXlB/XY9Ml43guP57w4eN6Lg+f98D7nMsSSgdigQYNgmuyYwHHQkYfnvTh43guP57w4eN4P7/O+r+MgVkoVkHwjhgwZ0qdfQ/7R8D/YwuN5Lzye8+LgeS8OnvfD95yzQupjHAcduXjei4PnvfB4zouD5/3wPe/7Mg7ix3ZERERERERERFRwDKWIiIiIiIiIiKjgGEodIQKBAO6++259SYXD8154POfFwfNeHDzvhcdzfnji9604eN6Lg+e98HjOi4Pn/eg472x0TkREREREREREBcdKKSIiIiIiIiIiKjiGUkREREREREREVHAMpYiIiIiIiIiIqOAYSh0hfve732HEiBEIBoM47bTTsHjx4mK/pCPGvffei1NOOQVlZWXo378/Lr30UtTX1/fYJ5lM4sYbb0RNTQ1KS0tx+eWXY9euXUV7zUea++67D4Zh4Mc//nH+Pp7zvrFjxw58+9vf1uc1FAph0qRJWLp0af5xaUN41113YeDAgfrxc889F+vWrSvqaz7cua6LO++8EyNHjtTndNSoUfjlL3+pz3UOz/uBmzdvHi655BIMGjRI/zx58cUXezy+L+e4tbUVV111FcrLy1FZWYnrrrsO0Wi0wO+EesNxUN/hOOjQwLFQYXAcVHgcBxXGoTwOYih1BHj22Wfxk5/8RHfIf//993HCCSfgi1/8Ipqamor90o4Ic+fO1b/wFy5ciFmzZiGTyeD8889HLBbL73PzzTfj5ZdfxvPPP6/337lzJy677LKivu4jxZIlS/Doo4/i+OOP73E/z/nB19bWhhkzZsDn8+H111/HqlWr8MADD6Cqqiq/z/33348HH3wQjzzyCBYtWoSSkhL980YGxrR//uM//gMPP/wwHnroIaxevVrflvP829/+Nr8Pz/uBk5/Z8vtRwove7Ms5loHYypUr9e+CV155RQ/wbrjhhgK+C+oNx0F9i+Og4uNYqDA4DioOjoMK45AeB8nqe3R4O/XUU9WNN96Yv+26rho0aJC69957i/q6jlRNTU0S26u5c+fq2+3t7crn86nnn38+v8/q1av1PgsWLCjiKz38dXZ2quOOO07NmjVLnXnmmeqmm27S9/Oc943bbrtNzZw58xMf9zxP1dXVqV//+tf5++R7EQgE1NNPP12gV3nkufjii9W1117b477LLrtMXXXVVfo6z/vBJz8r/vKXv+Rv78s5XrVqlX7ekiVL8vu8/vrryjAMtWPHjgK/A+qO46DC4jiosDgWKhyOg4qD46DCO9TGQayUOsyl02m89957urwuxzRNfXvBggVFfW1Hqo6ODn1ZXV2tL+X8y6eG3b8HY8eOxbBhw/g9OEDyyezFF1/c49wKnvO+8de//hUnn3wyvv71r+spGlOmTMF///d/5x/ftGkTGhsbe5z3iooKPVWG533/TZ8+HW+++SbWrl2rb3/00Ud45513cOGFF+rbPO99b1/OsVxKqbr8N5Ij+8vvXPlEkYqD46DC4ziosDgWKhyOg4qD46DiK/Y4yD6gZ1PR7d69W8/DHTBgQI/75faaNWuK9rqOVJ7n6bn8Uto7ceJEfZ/8B+z3+/V/pHt+D+Qx2j/PPPOMnoYhJet74jnvGxs3btTl0zIN5uc//7k+9z/60Y/0ub766qvz57a3nzc87/vv9ttvRyQS0X9MWJalf6bfc889ukRa8Lz3vX05x3Ipf6R0Z9u2/sOc34fi4TiosDgOKiyOhQqL46Di4Dio+Io9DmIoRfQ5P61asWKFTu+p72zbtg033XSTnq8sTWupcH9syKcfv/rVr/Rt+YRQ/r3L3HIZjFHfeO655/Dkk0/iqaeewoQJE/Dhhx/qP/qkESXPOxEdSjgOKhyOhQqP46Di4DiIOH3vMNevXz+dKO+50obcrqurK9rrOhL98Ic/1A3d3nrrLQwZMiR/v5xnmT7Q3t7eY39+D/aflKRLg9oTTzxRJ/CySQNPab4n1yW15zk/+GS1jfHjx/e4b9y4cdi6dau+nju3/HlzcN166636U8Irr7xSr/Lzne98RzevlRWvBM9739uXcyyXezbOdhxHr0TD70PxcBxUOBwHFRbHQoXHcVBxcBxUfMUeBzGUOsxJOelJJ52k5+F2T/nl9rRp04r62o4U0gtOBmJ/+ctfMHv2bL1caXdy/mWVju7fA1kqWX6B8Xuwf8455xwsX75cf1KS2+STKynjzV3nOT/4ZDrGnst8y/z+4cOH6+vyb19+6XQ/71JuLfPIed73Xzwe1/Pxu5M/suVnueB573v7co7lUv74kz8Uc+R3gnyfpOcCFQfHQX2P46Di4Fio8DgOKg6Og4qv6OOgA2qTToeEZ555RnfGf/zxx3VX/BtuuEFVVlaqxsbGYr+0I8L3v/99VVFRoebMmaMaGhryWzwez+/zz//8z2rYsGFq9uzZaunSpWratGl6o4On+4ozguf84Fu8eLGybVvdc889at26derJJ59U4XBYPfHEE/l97rvvPv3z5aWXXlLLli1TX/nKV9TIkSNVIpEo6ms/nF199dVq8ODB6pVXXlGbNm1SL7zwgurXr5/62c9+lt+H5/3grGD1wQcf6E2GP7/5zW/09S1btuzzOb7gggvUlClT1KJFi9Q777yjV8T65je/WcR3RYLjoL7FcdChg2OhvsVxUHFwHFQYh/I4iKHUEeK3v/2t/qXk9/v10sgLFy4s9ks6Ysh/tL1tf/zjH/P7yH+sP/jBD1RVVZX+5fXVr35VD9io7wZiPOd94+WXX1YTJ07Uf+CNHTtWPfbYYz0elyVj77zzTjVgwAC9zznnnKPq6+uL9nqPBJFIRP/blp/hwWBQHXPMMeqOO+5QqVQqvw/P+4F76623ev1ZLoPhfT3HLS0tevBVWlqqysvL1Xe/+109yKPi4zio73AcdOjgWKjvcRxUeBwHFcahPA4y5P8OrNaKiIiIiIiIiIjo82FPKSIiIiIiIiIiKjiGUkREREREREREVHAMpYiIiIiIiIiIqOAYShERERERERERUcExlCIiIiIiIiIiooJjKEVERERERERERAXHUIqIiIiIiIiIiAqOoRQRERERERERERUcQykiokPQnDlzYBgG2tvbi/1SiIiIiAqOYyGiowNDKSIiIiIiIiIiKjiGUkREREREREREVHAMpYiIeuF5Hu69916MHDkSoVAIJ5xwAv70pz/1KCd/9dVXcfzxxyMYDGLq1KlYsWJFj2P8+c9/xoQJExAIBDBixAg88MADPR5PpVK47bbbMHToUL3Pscceiz/84Q899nnvvfdw8sknIxwOY/r06aivry/AuyciIqKjHcdCRFQIDKWIiHohg7D/+7//wyOPPIKVK1fi5ptvxre//W3MnTs3v8+tt96qB1dLlixBbW0tLrnkEmQymfwA6hvf+AauvPJKLF++HL/4xS9w55134vHHH88//5/+6Z/w9NNP48EHH8Tq1avx6KOPorS0tMfruOOOO/TXWLp0KWzbxrXXXlvAs0BERERHK46FiKgQDKWUKshXIiI6TMindtXV1fjHP/6BadOm5e+//vrrEY/HccMNN+Css87CM888gyuuuEI/1traiiFDhuiBlgzArrrqKjQ3N+ONN97IP/9nP/uZ/kRRBnZr167FmDFjMGvWLJx77rl7vQb5BFK+hryGc845R9/32muv4eKLL0YikdCfSBIRERH1BY6FiKhQWClFRLSH9evX6wHXeeedpz+ty23yaeGGDRvy+3UfpMnATQZW8imfkMsZM2b0OK7cXrduHVzXxYcffgjLsnDmmWd+6muRkvicgQMH6sumpqaD9l6JiIiI9sSxEBEVil2wr0REdJiIRqP6Uj7JGzx4cI/HpN9B98HY/pLeDPvC5/Plr0vvhlyPByIiIqK+wrEQERUKK6WIiPYwfvx4PeDaunWrbrjZfZNGnDkLFy7MX29ra9Nl6OPGjdO35fLdd9/tcVy5PXr0aP2p4KRJk/SAqntfBiIiIqJDAcdCRFQorJQiItpDWVkZfvrTn+qGnjJYmjlzJjo6OvRAqry8HMOHD9f7/fu//ztqamowYMAA3YSzX79+uPTSS/Vjt9xyC0455RT88pe/1L0WFixYgIceegi///3v9eOyAs3VV1+tm3VKc09Z0WbLli26HF36MBAREREVC8dCRFQoDKWIiHohAyhZRUZWntm4cSMqKytx4okn4uc//3m+ZPy+++7DTTfdpHsjTJ48GS+//DL8fr9+TPZ97rnncNddd+ljSQ8EGbhdc801+a/x8MMP6+P94Ac/QEtLC4YNG6ZvExERERUbx0JEVAhcfY+I6HPKrQYjZeoyQCMiIiI6mnAsREQHC3tKERERERERERFRwTGUIiIiIiIiIiKiguP0PSIiIiIiIiIiKjhWShERERERERERUcExlCIiIiIiIiIiooJjKEVERERERERERAXHUIqIiIiIiIiIiAqOoRQRERERERERERUcQykiIiIiIiIiIio4hlJERERERERERFRwDKWIiIiIiIiIiKjgGEoREREREREREREK7f8DEpVqxSlUTmoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(12, 5), sharex=True, sharey=False)\n", "for i in range(len(agents)):\n", " p = axes[0].plot(jnp.stack(divs1[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[0].plot(jnp.stack(divs1[i]), color=p[0].get_color(), alpha=.2)\n", "\n", " p = axes[1].plot(jnp.stack(divs2[i]).mean(-1), lw=3, label=agents[i].alpha.mean())\n", " axes[1].plot(jnp.stack(divs2[i]), color=p[0].get_color(), alpha=.2)\n", "\n", "axes[0].legend(title='alpha')\n", "axes[0].set_ylabel('KL divergence')\n", "axes[0].set_xlabel('epoch')\n", "axes[1].set_xlabel('epoch')\n", "axes[0].set_title('A matrix')\n", "axes[1].set_title('B matrix')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the learned A matrices alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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/aqe++U+H3jIOzoPvju+74VGJo3Oq55vRD/FWbP97zIUex7Vc53cf4F3TnKdkpS7oevt0T2NnqM6qho72Eq2qSUiLToOK+69916zzz77mOOPP978/ve/Xx0hYaMWOrPhhhuazTff3Dz99NPmgw8+MNlsNjrosP/df//9zZ133hm1O+CAA6L6FQceeGDUt428eOCBB8zYsWPrIsdGG21kHnvsMbNkyRLz/vvvm2eeeSaK7rDzRVx22WVR1Ejnnynl1+syN0JIOCtLeeenKwNtU4m2iZC0QdvEfRMhaaWVbNMa7ZN5o9HTIoQIuHfi3omQNLKySW1TpqzNmdTk/OQnPzGXXnqpOfbYY820adPM448/bnbaaafo8AJFZfz5z3+Oil7vu+++5vzzz1+dWurII480ixcvNrfccktFfQl7eGDrWVhsail7wFFvbBHwDTbYIJqnPYjRnHp/fsDRjsegJNstXz1fpvg7aqMB529bXrO3q+PdhvIhSpmAl1d+1LqVY30wrerfURvkdSavTX408LaTcknvW5EXUutR7JNbI1NccmtyHca13j40Ohyq55OKt9Y8n/996VDnsx9uU3s/zQKyTQeN+HqlbSoUaq5VAr3bwXfH/Cd6bk1jZaD3qKhNMwzUQRDeHzmUY1faHiET9IATdVxglJqijfRoceoMDR7klQnWcRHXGF2b4tx51b186yQ38uKR863XejtrrdC92PRcjmOMeXDJTaZWaJuM+Xzbkd59k+Z7obmva9B4X0l9lbqq8RZTfdc32sBpUpg8pWob+Xf1nscjk6aOhOZ7nDa5feutkUm13ho0Ohyg55NKt9U+F2CfurJtWpN9OnDQMV77JO9x8t6E7oHw/uUh08Ofez4va7SI2ipqL1SZ91w8C+SHgP3M7Mqx8kOHuG3mzPM+q8pro6nZp7Jxipp9aZI7yfX2odHhED1/qP0PJgTuneJ556Rt4wO+p/B49GsiA2BNBs07pziebzTvnEQkljaSzdlnaCLQUiR3kuutoV7vVie10Dun5jhaWUvmzJkTpVb65je/Gf1Y7rrrLvOlL33J3HTTTeaII45w/s1ee+1lXnjhBXPFFVdEhba33nrryBi//PLLUYome2DRccBhsQcWHXUw6nVg8eCDD0Zjbrrppubtt982Z511ltlss83MUUcdBdv36NEj+umM98GbEJI47aWW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Msi5qK9NiuROcr19qOZbrygPNB/aptiiVoP2u4p9vvTYzw8e7LQpzJ1b+1yk1z+IDJDPLgZEO4Q83zi2CcnkiWRA85H9ONelwXI3dL19cwH9NLTeTtE0JTy0IISQBtOsNxBCSNeGtokQklZonwghaYS2iRCSRjJNapt4aJECrrnmmujn3XffjX7fYostzHnnnWf23Xff1W2eeuopc+6555p//OMfJpfLmW233dY8+OCDplevXrUNJk7yMt1cFSgLb/ysOIEtLV3mdiu822QfaKwy8rQfObyqp738u6U4Y2bVuaD5oH4K/3q9en0N8feon3VHVraZOdtpI68fih7weZnAfO+in1z/fk4buVbO9QUyxSW3oxMyigatQZ3W29E9oJ9x6XkrherVFYUnJorwcaKoQjwygHdDftjQit8Ls2YHtfHJJfuI+hFeJjDaQbSB/cyeW/X6oboNcqzivPneNqgfOZZcp3rJLWVOdL0DvYFi0fO4csbTNkHvTMfbFXiGynWTbVQRiihvsLiX5gYM8HrayzbFhYtqni/qRxM9INug+ZYWL646Fxg9oLg2zlxEH9rozUbK7VtvJFPQeqO6LB49hzocoOeh0D65tl+lQzJvN9jvOnVRwDObc1+XUUDCyx552mvaaOrBOB79InIA6jNo4/Tzznv+3OhivqFe/7If5AEt1ypJuX21cuq13irdA23i0vMQaJsAmv2upvZTXM91nohUVRuFTDAaUj7f9Ovnf76RcxFRorDmFYiIkGMVxT4EtZH9qGxygnI3dL1Dnus0dofPdRXw0CIFjBo1ynzve98zm2yyiSmXy+amm24yn/vc58wLL7wQHWDYA4t99tnHTJw40Vx11VUmn8+bl156yWSz9SkKTAhJlmwRpE8ghJAGQ9tECEkrtE+EkDRC20QISSPZJrVNPLRIAfvvv3/F75deemkUefH0009HhxZnnHGGOfXUU80555yzus2mm4qccEpQZIUk27dPxe/llSur/h210Y3T1+tFnxX9yL+jflAEh5wz6sebYx3lx5PzBSfGzvUD18bn2aHy4gyRW5HLPTa5pccLWsuY1tunfxodjkvPu3KoXqzIKDCQVzzTo0flBwUQMdOrZ9U1iz4rVR8r2wvYprnz/F7/sg2wcaXly6vKJPv4aD69vNEOThvYT8+q1w/KBMbytUH9lJcsrTqXesnt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tLqAd8iECSGky1HKuD818OMf/9gcd9xx5qijjjJjx46NbiK9e/c2N9xwwxr/jbW9w4cPX/2zzjrrxCAIIaRLsZa2yUL7RAipC7RNhJA0wuc6QkgaKTXnc11QpIXln//8p/nzn/9sbrrpJrPFFluYFStWROmfpk2bZq677jpz5ZVXmuuvv95MmDAham9PXWxKKVuo+8ILLzRtbW2hQxNSH8SJZjbA4yUUOdYZk1+v+P0nG5n6AGRKUm7yERlwOe3Bbsfhbgf2sNj+dGbVqlXmueeeMxMnTlz9WTabNXvuuWd0cLwmlixZYsaMGWNKpZIZN26c+e53vxvZcrIGNDofx/dC4S2WQZEMdfIok2N95jU3Guqesf7IimaTO7H17sK2ybS6fUpIP5CXquPFFVNdAdkP8po1ngiDEC9qJJOMqrB86pXKHMqTtnyh5tzNDZVbga8uUpxjpd0GSvtE25R+2+RENtXrewFqVcnnG03dsZDIFec5yhhz+JuVkaO/2dTEsp9JVO4a51LP9U67feJzXdh6qOqzxbQ/dzz2UeQg8upf23HAdxBFOzh1EHxzUUbvy7E+/apbi+a+LZ5b6yj2JOVO03onquct9FwXXNF2q622Mu3t7eall14y7733nrntttvMlltuaS666CKzwQYbRJM/+uijzaBBg1b/G5sqyk6we/fuUVoo8l8uu+wy8/GPf9z069cvOuA54IADKkJo3n33XScXWMePvfaEkK6VX9DaBHu42/nHfiaZM2dOFPEmT6zt7zNmzIDjbbrpptFp+F133WVuvvnm6AZiaxPZmkOEEBKHbbLQPhFC6gVtEyEkjfC5jhCSRjJN+lwXHGlhi2ece+65UTSFjaqwBbSvuuqqqHZFZzrXrFh33XXNOeecEzpkl+axxx4zJ510UnRwUSgUzLe+9S2z1157mddee8306dPHjB492kyfXplD16bkuvzyy82+++6rHwh5zfv+ifDiUp0OBpLtlq/Zu63UXljrcdBYMgco8pxxPOnAXJzrB/Key7FkZAXKfarxnHHyjXqub5xyx7EGca132vRcc+ptT7BtvsDOoBPvEHbcccfopwN749h8883NL37xC3PxxRfHMkZXQ6MfceiQxhMY5QCV3iqhHsUSOdY9Y/25T5HnTKPkDv0eJ7XeaSdp29Q09knjEetro4liDMhprrmXajxikUya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7r///m5PSQghhBBCCCGEEEIIIYTIBB1a9BBXX321O+2009w555zjHnroIbfDDju4/fff382ePbvbUxNCdJG7777bHXzwwW7q1KmuVCq566+/Pvhv7rzzTrfzzju7YcOGuS222ML98Ic/zGWuQojBg2yTEKKoyD4JIYqIbJMQoojc3SXbpEOLHuIb3/iGO/744920adPcNtts4y699FK3zjrruMsvv7zbUxNCdJElS5akh5hJJJaFZ5991h144IHuHe94h3v44YfdKaec4o477jh32223dXyuQojBg2yTEKKoyD4JIYqIbJMQoogs6ZJtKjUajUbknEWOrFixIj2guPbaa90hhxyy6vOjjz7avfbaa+6GG27o6vyEEMUgOfW+7rrrmuwE8tnPftbddNNN7tFHH1312fvf//7Ultx66605zVQIMZiQbRJCFBXZJyFEEZFtEkIMdtukSIseYe7cua5Wq7n11luv6fPk91mzZnVtXkKIzrB8+XK3cOHCpp/ksyy499573b777tv0WZJqLvlcCCFaIdskhBhstilB9kkIEYv2TkKIIrK8B2xTNZPZiEKSKBsq3GHrf9SVS5W/f1AngTblUvPvtVrz75XV/v2a+sE+WJtG3W/S1+/apTwE1LhEzuJgPvVl5EYk8wkCY5WHD/PbwPWjMmYxNl4Hslae3DHjWuUOrHfMWseut0k/M9Lz25b8yLVLfdabvc8uuPRI94UvfKHps6SezbnnnuvWluSgkx2AJg+ppUuXuhEjRri8bdP7tv2cK5f+vraN11/3/l0D9bef6FC1WT9KRDdL66zT3C+M5Y2TrNHSZa5dyiOG+2PDfHAsOk4G9oHOB65fp2wTvW9hnTold8warHE+AXCsGN3LSs9xnIRbXrjItYtsk3OHb3JK874pWSPczOPzI2kDn5XwmUKeMaVhoJvspSFmTxGxX2AyeWN1yD7gtVvTZ1mA6+KtU45y031HaL3ZXCLWG3XPoudsTWL0/Nb533cxoH3qpG0qqn3y3usIpaFDmz+og86Ufd1srFixFjP9Wx+R+/wS09eATPUlr4ftRcAuph+BvpZH+s9SvH64X2j097kYStUhwf0LrlWecjf6QC5I1pHZepfg3YolBYE2pSHN186s5wGZYt7p0qG1d3KHTflYs20yrKNlv2vqB9uQ77vqETaujLaUfZ8Ac8nz/Sav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48a1bBNb06KbcofW2yRTjrnc80T2yd87sX1q6F2Aer9jG8O+2Xuuk0hHS2700F7F8k7B6jZghIGl/oPl2ngykUgGbz9I2nj9wL6Jzaebcue13tHvbBnpeQyyTca9kyUaJouIGUN9u6hnqWG+9DunrbYIRjJ4bZ54qvVcyHyoTDBWZdSocBtLHdUCyZ3relsI9ZPjHq2/R21TR2edHDgkVCqV9MDihRdecC+++KLr73/jYfTWt77V/dM//ZNbuHBhemCRkKR6+tCHPuSeeeaZtIZF8m933nlnd+ONN7qvfe1r7oILLnA33XSTu/76692ll16aHlgMdJYuXeo+97nPuW984xtpuqyklkcSlZKk1UquyZpIrtXYsWObfp5thAsBCiHyJSmKhD8DGWqb6pFf6AghOoZs01j3rHu829MSQhAGk21a895J73VCFA3tnbR3EqKI1HrUNpUaGeVVmj17tjvuuOPS4tpbbrll099mzpyZ1qRIikZvuummbuutt3ZXXnllmubo2muvdR/4wAfc//7v/7rdd989bb9gwYK0r6effto99NBDabHuL33pS+6OO+5w1WrVnXXWWWmExUAliRpJ0mMlUScJyaFOYvyTFFqrF+v+yEc+4p599ll3++23m0+93zvu2KZTb+aZ4HmUrbNO0+/111+POl215KSrThzf9Hv/nLnNf5800fs3/XPntxzHevKMY1nye+J82MkzXr/aokVem9BYlhygldGjvTa4Vig3ymyZi1XukE7gWme53sG8iuT0Ois9n1672rXLm6/9ovfZk4d/3g1UmG06dMLxzbYJPLgSGuDFVR4xwmtTX7q06fcS87RHLy70FlvWPLeE6uRmXex/xY9sqq43ubnNbP/+Kg8f1lKmysQJ3r/BsSz2AOeSUJs7r+X1qy1eHGUPLG3QkwfXqVNyo8xpP+jV16H1xrW26F5Weo7jJNy+4krXLrJNzh06/sOet6ApGgb1DNeVrb0lJzBGSE2aEMwjXp08qfnvc/z7wvOaJTLhWDiOpdYLzoXNh0VIYT+0Dk6gDYvostTByU1uohOh9WZziVlvy74d50LXKULPb++7ysWA9mkg26Y12afD1v9o896J7XnweTEM9iHQZ9oGnjv4XGJj1WEPUR47xvs3+L7A3sfqCxY290M8gT2ZRo1sOU5slFpj8RK/G7h+3ntdpCew965K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+3ezZ8+m2tpa+s///E/vfdeuXb0y1OLHDTfc4Nh6AMxeOlgFL3Gy8uKqejVFpcBTr6asW7eO0uk09ejRI+dz9X7hwoVidfvtt5+nW4MHD6ZNmzZ5kWojR470biB9+vTxo0egRIAHYZnTAm1SQJ9AUMCDEHB9gjaBKABtAniuA1EFz3VlTlb/KA5zp1hEWpho165dznu12qM25W5KfX19zkqPQoWxvP32242vDz74IO++FioV1IYNG7w9MCoqKrzXc889Rw899JAXhdESVLqqww8/nDp06EDdu3f39uRYtGhR4/cqFRbfwGT369FHH21R3QCA6K16K01QUWZNX+ozPxgxYgSNHTuWhgwZ4qXDU3vzqNR4+SLNAADlR9japIA+AQBsgDYBAKIInusAAFEkEdPnuthEWqj0UGpVxwZ1Et5///2cz9SiRKtWrbx/Dxo0yFs5WrZsWd79K5qyfv16euqpp2jmzJl04IEHNn6u2nTUUUfRiy++SF/72tfIFbXR+IUXXugtXDQ0NNBVV11FJ554oreQohZlVCiN2rSkKffeey/98pe/pJNPPtm5XhBNsApeXiQEaZsyZYq3yVFTpBVvFfGl0uWtXr0653P13jZ3oNJGFWWmotAAyAc8CMuLlmiTAvoEwgRRq+WtT9AmEFXwXFde4LkOxAU815UXiZg+18Um0qJ///70j3/8w4s4UGEp+SIbvvrVr9L8+fPpd7/7HX388cfezuZNFzFUNMNPfvITuvTSS70oiSVLlng7n99xxx3ee4nf//731KVLF/rud7/rbQi++6V2S1fpolQURkt44YUXvH011IKIKlPtnaEWVVTOMIUyjt37eex+PfHEE1572rdv36K6AQDFJZHRX+pmUV1dnfOSbiBqQXfo0KE0Z86cxs+UPqr3amXbBrX4+t5771GvXr187RcAoHy1SQF9AgAEBbQJABBF8FwHAIgiiZg+18Um0kItMowbN86Lkti+fXveza/V5tpXX301XX755bRjxw4699xzvZAUdXJ2o/agUBEZKvTlk08+oY4dO9Jhhx3mRThIqDxcp512mpeOiXP66afT9773PW8xRa0++YHK96VobmNxtZihokemT5/uS30g2mAVvLQpdBMkjlodV/qo9vcZPnw4TZs2zdt/Z/z48d73Sv/22GOPxlC/66+/no488kgaOHAgbdy40YvY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_batches_to_show = min(5, agents[0].A[0].shape[0])\n", "num_rows = len(agents) + 1\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "fig, axes = plt.subplots(num_rows, n_batches_to_show, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "for i in range(n_batches_to_show):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.A[0][i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.A[0], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(f'batch={i + 1}')\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true A', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "fig.tight_layout()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize the B tensor (just the expected value of the posterior which in absence of learning is same as the prior) alongside the true environmental parameters after training" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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pxOW5jedErlYsmSJDB482BQXtEPi7LPPlnvvvVfat28vx44dk4oVK5qCQL169czzS5UqJTfeeKPplFi4cKF07do14t0SAwYMkK+++kr+9a9/SdWqVc2WUR06dJBvvvlGzjzzTKv2IsztL15+7wyIZuWdOwCA+EmxtNIfTaHyOx77yEYiv2Od3Yr8BmKD/A5Gfod3bfIbiA3yOxj5Hd61yW8gNlIszW86JU6ihQQ9nn/+eTO8eseOHabQoAOsb7jhBvn9999NYSIxMVE+++wz83WAdjBceumlMnv2bPN1JAsSx48fN1tGPfroo3LJJZeYIsm4cePMr7pWAHDbnognHwAA5yO/AcBO5DcA2CnV0vy2Y5UxpIWETZs2yfLly+Xjjz82xQftRmjatKlccMEFphAwZcoUs1XTq6++KmvWrDHFC6XdE4ULFzbbOmVkZJjXRooO19ZrFitWLMd53cbpk08+yfN1cqvqO31+glPmPnAHABAbKZa0G8ZSqPy2IXuc0nVGfgOxQX4HI78jv454rQVwM/I7GPkd+XXEay2Am6VYmt+e6pTQDoi8KFu2rNmyKSA1NVVOP/10ueeee0wh4scffzRbO+m56dOny2+//Wael5aWZjorKlSoENGChCpdurS0bNlSHnjgAfnPf/5jChS6fdPatWtl7969Ef1eABBvJ/yFgg4AgPOR3wBgJ/IbAOx0wtL8tmOVYQrMdghsp6RFhiJFipyyK+Giiy6St99+W5o0aSKFCv33t+mWW26R++67T95//3257bbbZMSIEfLYY49JixYt5J///KesXLnSvLZXr15R+Tl0lkT//v3N/Agteuja+vTpYzo7QtHh3Hpkl+nPkARfoqsr6bauG8D/pGV64u0pV3nNbydlTyQ62py+7mivBXAD8pv8zsvz3dRJDbgF+U1+5+X5kUB+A5Fla357olMiUIxYtGiRXH755TJo0CB58803szoctOsgu7POOkvOO+88Wbdunfz888+SkJBgChn6a7du3WT+/Pnmed27dzfzI6666ipzbe2cWLp0qdSvXz8qP0edOnVk1apVcvToUdm9e7esX7/edGfoekOZNGmS6frIfuz0fxuVtQFAJKVkFgo6vIT8BmAr8pv8BmAn8pv8BmCnFEvz2+fP655Glnvqqadk4sSJMmDAANmzZ4+sXr1aWrVqZYoToboq3n33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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "num_actions = env.B[0].shape[-1]\n", "base_labels = [\"Up\", \"Right\", \"Down\", \"Left\", \"Stay\"]\n", "action_labels = base_labels[:num_actions]\n", "\n", "row_labels = []\n", "for agent in agents:\n", " alpha_value = float(agent.alpha.mean(0).squeeze())\n", " row_labels.append(f'alpha={alpha_value:.2f}')\n", "\n", "\n", "fig, axes = plt.subplots(len(agents)+1, num_actions, figsize=(16, 8), sharex=True, sharey=True)\n", "\n", "\n", "for i in range(num_actions):\n", " for j, agent in enumerate(agents):\n", " sns.heatmap(agent.B[0][0, ..., i], ax=axes[j, i], cmap='viridis', vmax=1., vmin=0.)\n", " sns.heatmap(env.B[0][..., i], ax=axes[-1, i], cmap='viridis', vmax=1., vmin=0.)\n", " axes[0, i].set_title(action_labels[i])\n", "\n", "for j, label in enumerate(row_labels):\n", " axes[j, 0].set_ylabel(label, rotation=25, labelpad=60, ha='left', va='center')\n", "axes[-1, 0].set_ylabel('true B', rotation=0, labelpad=40, ha='left', va='center')\n", "\n", "\n", "fig.tight_layout()\n" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/agent_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Active Inference Demo: Constructing a basic generative model from the \"ground up\"\n", "This demo notebook provides a full walk-through of how to build a POMDP agent's generative model and perform active inference routine (inversion of the generative model) using the `Agent()` class of `pymdp`. We build a generative model from 'ground up', directly encoding our own A, B, and C matrices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pathlib\n", "import numpy as np\n", "import copy\n", "\n", "path = pathlib.Path(os.getcwd())\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)\n", "\n", "from pymdp.agent import Agent # noqa: E402\n", "from pymdp import utils # noqa: E402\n", "from pymdp.maths import softmax # noqa: E402" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The world (as represented by the agent's generative model)\n", "\n", "### Hidden states\n", "\n", "We assume the agent's \"represents\" (this should make you think: generative _model_ , not _process_ ) its environment using two latent variables that are statistically independent of one another - we can thus represent them using two _hidden state factors._\n", "\n", "We refer to these two hidden state factors are `GAME_STATE` and `PLAYING_VS_SAMPLING`. \n", "\n", "#### 1. `GAME_STATE`\n", "The first factor is a binary variable representing whether some 'reward structure' that characterises the world. It has two possible values or levels: one level that will lead to rewards with high probability (`GAME_STATE = 0`, a state/level we will call `HIGH_REW`), and another level that will lead to \"punishments\" (e.g. losing money) with high probability (`GAME_STATE = 1`, a state/level we will call `LOW_REW`). You can think of this hidden state factor as describing the 'pay-off' structure of e.g. a two-armed bandit or slot-machine with two different settings - one where you're more likely to win (`HIGH_REW`), and one where you're more likely to lose (`LOW_REW`). Crucially, the agent doesn't _know_ what the `GAME_STATE` actually is. They will have to infer it by actively furnishing themselves with observations\n", "\n", "#### 1. `PLAYING_VS_SAMPLING`\n", "\n", "The second factor is a ternary (3-valued) variable representing the decision-state or 'sampling state' of the agent itself. The first state/level of this hidden state factor is just the starting or initial state of the agent (`PLAYING_VS_SAMPLING = 0`, a state that we can call `START`); the second state/level is the state the agent occupies when \"playing\" the multi-armed bandit or slot machine (`PLAYING_VS_SAMPLING = 1`, a state that we can call `PLAYING`); and the third state/level of this factor is a \"sampling state\" (`PLAYING_VS_SAMPLING = 2`, a state that we can call `SAMPLING`). This is a decision-state that the agent occupies when it is \"sampling\" data in order to _find out_ the level of the first hidden state factor - the `GAME_STATE`. \n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "factor_names = [\"GAME_STATE\", \"PLAYING_VS_SAMPLING\"]\n", "num_factors = len(factor_names) # this is the total number of hidden state factors\n", "\n", "HIGH_REW, LOW_REW = 0, 1 # let's assign the indices names so that when we build the A matrices, things will be more 'semantically' obvious\n", "START, PLAYING, SAMPLING = 0, 1, 2 # let's assign the indices names so that when we build the A matrices, things will be more 'semantically' obvious\n", "\n", "num_states = [len([HIGH_REW,LOW_REW]), len([START, PLAYING, SAMPLING])] # this is a list of the dimensionalities of each hidden state factor " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observations \n", "\n", "The observation modalities themselves are divided into 3 modalities. You can think of these as 3 independent sources of information that the agent has access to. You could think of thus in direct perceptual terms - e.g. 3 different sensory organs like eyes, ears, & nose, that give you qualitatively-different kinds of information. Or you can think of it more abstractly - like getting your news from 3 different media sources (online news articles, Twitter feed, and Instagram).\n", "\n", "#### 1. Observations of the game state - `GAME_STATE_OBS`\n", "The first observation modality is the `GAME_STATE_OBS` modality, and corresponds to observations that give the agent information about the `GAME_STATE`. There are three possible outcomes within this modality: `HIGH_REW_EVIDENCE` (`GAME_STATE_OBS = 0`), `LOW_REW_EVIDENCE` (`GAME_STATE_OBS = 1`), and `NO_EVIDENCE` (`GAME_STATE_OBS = 2`). So the first outcome can be described as lending evidence to the idea that the `GAME_STATE` is `HIGH_REW`; the second outcome can be described as lending evidence to the idea that the `GAME_STATE` is `LOW_REW`; and the third outcome within this modality doesn't tell the agent one way or another whether the `GAME_STATE` is `HIGH_REW` or `LOW_REW`. \n", "\n", "#### 2. Reward observations - `GAME_OUTCOME`\n", "The second observation modality is the `GAME_OUTCOME` modality, and corresponds to arbitrary observations that are functions of the `GAME_STATE`. We call the first outcome level of this modality `REWARD` (`GAME_OUTCOME = 0`), which gives you a hint about how we'll set up the C matrix (the agent's \"utility function\" over outcomes). We call the second outcome level of this modality `PUN` (`GAME_OUTCOME = 1`), and the third outcome level `NEUTRAL` (`GAME_OUTCOME = 2`). By design, we will set up the `A` matrix such that the `REWARD` outcome is (expected to be) more likely when the `GAME_STATE` is `HIGH_REW` (`0`) and when the agent is in the `PLAYING` state, and that the `PUN` outcome is (expected to be) more likely when the `GAME_STATE` is `LOW_REW` (`1`) and the agent is in the `PLAYING` state. The `NEUTRAL` outcome is not expected to occur when the agent is playing the game, but will be expected to occur when the agent is in the `SAMPLING` state. This `NEUTRAL` outcome within the `GAME_OUTCOME` modality is thus a meaningless or 'null' observation that the agent gets when it's not actually playing the game (because an observation has to be sampled nonetheless from _all_ modalities).\n", "\n", "#### 3. \"Proprioceptive\" or self-state observations - `ACTION_SELF_OBS`\n", "The third observation modality is the `ACTION_SELF_OBS` modality, and corresponds to the agent observing what level of the `PLAYING_VS_SAMPLING` state it is currently in. These observations are direct, 'unambiguous' mappings to the true `PLAYING_VS_SAMPLING` state, and simply allow the agent to \"know\" whether it's playing the game, sampling information to learn about the game state, or where it's sitting at the `START` state. The levels of this outcome are simply thus `START_O`, `PLAY_O`, and `SAMPLE_O`, where the `_O` suffix simply distinguishes them from their corresponding hidden states, for which they provide direct evidence. \n", "\n", "#### Note about the arbitrariness of 'labelling' observations, before defining the `A` and `C` matrices.\n", "\n", "There is a bit of a circularity here, in that that we're \"pre-empting\" what the A matrix (likelihood mapping) should look like, by giving these observations labels that imply particular roles or meanings. An observation per se doesn't mean _anything_, it's just some discrete index that distinguishes is from another observation. It's only through its probabilistic relationship to hidden states (encoded in the `A` matrix, as we'll see below) that we endow an observation with meaning. For example: by already labelling `GAME_STATE_OBS=0` as `HIGH_REW_EVIDENCE`, that's a hint about how we're going to structure the `A` matrix for the `GAME_STATE_OBS` modality." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "modality_names = [\"GAME_STATE_OBS\", \"GAME_OUTCOME\", \"ACTION_SELF_OBS\"]\n", "num_modalities = len(modality_names)\n", "\n", "HIGH_REW_EVIDENCE, LOW_REW_EVIDENCE, NO_EVIDENCE = 0, 1, 2\n", "REWARD, PUN, NEUTRAL = 0, 1, 2\n", "START_O, PLAY_O, SAMPLE_O = 0, 1, 2\n", "\n", "num_obs = [len([HIGH_REW_EVIDENCE, LOW_REW_EVIDENCE, NO_EVIDENCE]), len([REWARD, PUN, NEUTRAL]), len([START_O, PLAY_O, SAMPLE_O])]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setting up observation likelihood matrix - first main component of generative model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = utils.obj_array_zeros([[o] + num_states for _, o in enumerate(num_obs)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up the **first** modality's likelihood mapping, correspond to how `\"GAME_STATE_OBS\"` i.e. `modality_names[0]` are related to hidden states." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[0][NO_EVIDENCE,:, START] = 1.0 # they always get the 'no evidence' observation in the START STATE\n", "A[0][NO_EVIDENCE, :, PLAYING] = 1.0 # they always get the 'no evidence' observation in the PLAYING STATE\n", "\n", "# the agent expects to see the HIGH_REW_EVIDENCE observation with 80% probability, if the GAME_STATE is HIGH_REW, and the agent is in the SAMPLING state\n", "A[0][HIGH_REW_EVIDENCE, HIGH_REW, SAMPLING] = 0.8\n", "# the agent expects to see the LOW_REW_EVIDENCE observation with 20% probability, if the GAME_STATE is HIGH_REW, and the agent is in the SAMPLING state\n", "A[0][LOW_REW_EVIDENCE, HIGH_REW, SAMPLING] = 0.2\n", "\n", "# the agent expects to see the LOW_REW_EVIDENCE observation with 80% probability, if the GAME_STATE is LOW_REW, and the agent is in the SAMPLING state\n", "A[0][LOW_REW_EVIDENCE, LOW_REW, SAMPLING] = 0.8\n", "# the agent expects to see the HIGH_REW_EVIDENCE observation with 20% probability, if the GAME_STATE is LOW_REW, and the agent is in the SAMPLING state\n", "A[0][HIGH_REW_EVIDENCE, LOW_REW, SAMPLING] = 0.2\n", "\n", "# quick way to do this\n", "# A[0][:, :, 0] = 1.0\n", "# A[0][:, :, 1] = 1.0\n", "# A[0][:, :, 2] = np.array([[0.8, 0.2], [0.2, 0.8], [0.0, 0.0]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up the **second** modality's likelihood mapping, correspond to how `\"GAME_OUTCOME\"` i.e. `modality_names[1]` are related to hidden states." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[1][NEUTRAL, :, START] = 1.0 # regardless of the game state, if you're at the START, you see the 'neutral' outcome\n", "\n", "A[1][NEUTRAL, :, SAMPLING] = 1.0 # regardless of the game state, if you're in the SAMPLING state, you see the 'neutral' outcome\n", "\n", "# this is the distribution that maps from the \"GAME_STATE\" to the \"GAME_OUTCOME\" observation , in the case that \"GAME_STATE\" is `HIGH_REW`\n", "HIGH_REW_MAPPING = softmax(np.array([1.0, 0])) \n", "\n", "# this is the distribution that maps from the \"GAME_STATE\" to the \"GAME_OUTCOME\" observation , in the case that \"GAME_STATE\" is `LOW_REW`\n", "LOW_REW_MAPPING = softmax(np.array([0.0, 1.0]))\n", "\n", "# fill out the A matrix using the reward probabilities\n", "A[1][REWARD, HIGH_REW, PLAYING] = HIGH_REW_MAPPING[0]\n", "A[1][PUN, HIGH_REW, PLAYING] = HIGH_REW_MAPPING[1]\n", "\n", "A[1][REWARD, LOW_REW, PLAYING] = LOW_REW_MAPPING[0]\n", "A[1][PUN, LOW_REW, PLAYING] = LOW_REW_MAPPING[1]\n", "\n", "\n", "# quick way to do this\n", "# A[1][2, :, 0] = np.ones(num_states[0])\n", "# A[1][0:2, :, 1] = softmax(np.eye(num_obs[1] - 1)) # relationship of game state to reward observations (mapping between reward-state (first hidden state factor) and rewards (Good vs Bad))\n", "# A[1][2, :, 2] = np.ones(num_states[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up the **third** modality's likelihood mapping, correspond to how `\"ACTION_SELF_OBS\"` i.e. `modality_names[2]` are related to hidden states." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[2][START_O,:,START] = 1.0\n", "A[2][PLAY_O,:,PLAYING] = 1.0\n", "A[2][SAMPLE_O,:,SAMPLING] = 1.0\n", "\n", "# quick way to do this\n", "# modality_idx, factor_idx = 2, 2\n", "# for sampling_state_i in num_states[factor_idx]:\n", "# A[modality_idx][sampling_state_i,:,sampling_state_i] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Control state factors\n", "\n", "The 'control state' factors are the agent's representation of the control states (or actions) that _it believes_ can influence the dynamics of the hidden states - i.e. hidden state factors that are under the influence of control states are are 'controllable'. In practice, we often encode _every_ hidden state factor as being under the influence of control states, but the 'uncontrollable' hidden state factors are driven by a trivially-1-dimensional control state or action-affordance. This trivial action simply 'maintains the default environmental dynamics as they are' i.e. does nothing. This will become more clear when we set up the transition model (the `B` matrices) below.\n", "\n", "#### 1. `NULL`\n", "This reflects the agent's lack of ability to influence the `GAME_STATE` using policies or actions. The dimensionality of this control factor is 1, and there is only one action along this control factor: `NULL_ACTION` or \"don't do anything to do the environment\". This just means that the transition dynamics along the `GAME_STATE` hidden state factor have their own, uncontrollable dynamics that are not conditioned on this `NULL` control state - or rather, _always_ conditioned on an unchanging, 1-dimensional `NULL_ACTION`.\n", "\n", "#### 1. `PLAYING_VS_SAMPLING_CONTROL`\n", "This is a control factor that reflects the agent's ability to move itself between the `START`, `PLAYING` and `SAMPLING` states of the `PLAYING_VS_SAMPLING` hidden state factor. The levels/values of this control factor are `START_ACTION`, `PLAY_ACTION`, and `SAMPLE_ACTION`. When we describe the `B` matrices below, we will set up the transition dynamics of the `PLAYING_VS_SAMPLING` hidden state factor, such that they are totally determined by the value of the `PLAYING_VS_SAMPLING_CONTROL` factor. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "control_names = [\"NULL\", \"PLAYING_VS_SAMPLING_CONTROL\"]\n", "num_control_factors = len(control_names) # this is the total number of controllable hidden state factors\n", "\n", "NULL_ACTION = 0\n", "START_ACTION, PLAY_ACTION, SAMPLE_ACTION = 0, 1, 2\n", "\n", "num_control = [len([NULL_ACTION]), len([START_ACTION, PLAY_ACTION, SAMPLE_ACTION])] # this is a list of the dimensionalities of each hidden state factor " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (Controllable-) Transition Dynamics\n", "\n", "Importantly, some hidden state factors are _controllable_ by the agent, meaning that the probability of being in state $i$ at $t+1$ isn't merely a function of the state at $t$, but also of actions (or from the generative model's perspective, _control states_ ). So each transition likelihood or `B` matrix encodes conditional probability distributions over states at $t+1$, where the conditioning variables are both the states at $t-1$ _and_ the actions at $t-1$. This extra conditioning on control states is encoded by a third, lagging dimension on each factor-specific `B` matrix. So they are technically `B` \"tensors\" or an array of action-conditioned `B` matrices.\n", "\n", "For example, in our case the 2nd hidden state factor (`PLAYING_VS_SAMPLING`) is under the control of the agent, which means the corresponding transition likelihoods `B[1]` are index-able by both previous state and action." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "control_fac_idx = [1] # this is the (non-trivial) controllable factor, where there will be a >1-dimensional control state along this factor\n", "B = utils.obj_array(num_factors)\n", "\n", "p_stoch = 0.0\n", "\n", "# we cannot influence factor zero, set up the 'default' stationary dynamics - \n", "# one state just maps to itself at the next timestep with very high probability, by default. So this means the reward state can\n", "# change from one to another with some low probability (p_stoch)\n", "\n", "B[0] = np.zeros((num_states[0], num_states[0], num_control[0])) \n", "B[0][HIGH_REW, HIGH_REW, NULL_ACTION] = 1.0 - p_stoch\n", "B[0][LOW_REW, HIGH_REW, NULL_ACTION] = p_stoch\n", "\n", "B[0][LOW_REW, LOW_REW, NULL_ACTION] = 1.0 - p_stoch\n", "B[0][HIGH_REW, LOW_REW, NULL_ACTION] = p_stoch\n", "\n", "# setup our controllable factor.\n", "B[1] = np.zeros((num_states[1], num_states[1], num_control[1]))\n", "B[1][START, :, START_ACTION] = 1.0 \n", "B[1][PLAYING, :, PLAY_ACTION] = 1.0\n", "B[1][SAMPLING, :, SAMPLE_ACTION] = 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prior preferences\n", "\n", "Now we parameterise the C vector, or the prior beliefs about observations. This will be used in the expression of the prior over actions, which is technically a softmax function of the negative expected free energy of each action. It is the equivalent of the exponentiated reward function in reinforcement learning treatments.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = utils.obj_array_zeros([num_ob for num_ob in num_obs])\n", "C[1][REWARD] = 1.0 # make the observation we've a priori named `REWARD` actually desirable, by building a high prior expectation of encountering it \n", "C[1][PUN] = -1.0 # make the observation we've a prior named `PUN` actually aversive,by building a low prior expectation of encountering it\n", "\n", "# the above code implies the following for the `neutral' observation:\n", "C[1][NEUTRAL] = 0.0 # we don't need to write this - but it's basically just saying that observing `NEUTRAL` is in between reward and punishment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialise an instance of the `Agent()` class:\n", "\n", "All you have to do is call `Agent(generative_model_params...)` where `generative_model_params` are your A, B, C's... and whatever parameters of the generative model you want to specify" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "agent = Agent(A=A, B=B, C=C, control_fac_idx=control_fac_idx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generative process:\n", "Important note how the generative process doesn't have to be described by A and B matrices - can just be the arbitrary 'rules of the game' that you 'write in' as a modeller. But here we just use the same transition/likelihood matrices to make the sampling process straightforward." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# transition/observation matrices characterising the generative process\n", "A_gp = copy.deepcopy(A)\n", "B_gp = copy.deepcopy(B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialise the simulation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# initial state\n", "T = 20 # number of timesteps in the simulation\n", "observation = [NO_EVIDENCE, NEUTRAL, START_O] # initial observation\n", "state = [HIGH_REW, START] # initial (true) state" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create some string names for the state, observation, and action indices to help with print statements" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "states_idx_names = [ [\"HIGH_REW\", \"LOW_REW\"], \\\n", " [\"START\", \"PLAYING\", \"SAMPLING\"]]\n", "\n", "obs_idx_names = [ [\"HIGH_REW_EV\", \"LOW_REW_EV\", \"NO_EV\"], \\\n", " [\"REWARD\", \"PUN\", \"NEUTRAL\"], \\\n", " [\"START\", \"PLAYING\", \"SAMPLING\"] ]\n", "\n", "action_idx_names = [ [\"NULL\"], [\"MOVE TO START\", \"PLAY\", \"SAMPLE\"] ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run simulation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for t in range(T):\n", " \n", " print(f\"\\nTime {t}:\")\n", " \n", " print(f\"State: {[(factor_names[f], states_idx_names[f][state[f]]) for f in range(num_factors)]}\")\n", " print(f\"Observations: {[(modality_names[g], obs_idx_names[g][observation[g]]) for g in range(num_modalities)]}\")\n", " \n", " # update agent\n", " belief_state = agent.infer_states(observation)\n", " agent.infer_policies()\n", " action = agent.sample_action()\n", " \n", " # update environment\n", " for f, s in enumerate(state):\n", " state[f] = utils.sample(B_gp[f][:, s, int(action[f])])\n", "\n", " for g, _ in enumerate(observation):\n", " observation[g] = utils.sample(A_gp[g][:, state[0], state[1]])\n", "\n", " print(f\"Beliefs: {[(factor_names[f], belief_state[f].round(3).T) for f in range(num_factors)]}\")\n", " print(f\"Action: {[(control_names[a], action_idx_names[a][int(action[a])]) for a in range(num_factors)]}\")" ] } ], "metadata": { "interpreter": { "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" }, "kernelspec": { "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/free_energy_calculation.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computing the variational free energy in categorical models\n", "\n", "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/infer-actively/pymdp/blob/main/docs/notebooks/free_energy_calculation.ipynb)\n", "\n", "*Author: Conor Heins*\n", "\n", "This notebook walks the user through the computation of the variational free energy (or *VFE*) for discrete generative models, composed of categorical distributions. We can represent these sorts of generative models easily in array-focused programming languages like `NumPy` and `MATLAB` using matrices and vectors.\n", "\n", "In the discrete state-space formulation, the variational free energy is very straightforward to compute when we take advantage of the NDarray representation of probability distributions. The highly-optimized matrix algebra built into today's numerical computing paradigms can be exploited to write simple, one-line expressions for information-theoretic terms (like Kullback-Leibler divergences, cross-entropies, log-likelihoods, etc.). All these terms end up being variants of things like inner products, matrix-vector products or matrix-matrix multiplications.\n", "\n", "This notebook is inspired by the supplementary MATLAB script for the paper [\"A Step-by-Step Tutorial on Active Inference Modelling and its Application to Empirical Data\"](https://www.sciencedirect.com/science/article/pii/S0022249621000973) by Ryan Smith, Karl Friston, and Christopher Whyte. The original MATLAB script is called `VFE_calculation_example.m`, and can be found on [Ryan Smith's GitHub repository](https://github.com/rssmith33/Active-Inference-Tutorial-Scripts), which also contains a set of tutorial scripts that are supplementary to their paper." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*: When running this notebook in Google Colab, you may have to run `!pip install inferactively-pymdp` at the top of the notebook, before you can `import pymdp`. That cell is left commented out below, in case you are running this notebook from Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install inferactively-pymdp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pathlib\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from IPython.display import display, Latex\n", "\n", "path = pathlib.Path(os.getcwd())\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)\n", "\n", "from pymdp import utils, maths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple generative model composed of a likelihood and a prior\n", "\n", "We begin by constructing a simple generative model composed of two sets of categorical distributions: a likelihood distribution $P(o|s)$ and a prior distribution $P(s)$. \n", "\n", "Because both of these distributions are categorical distributions, we can represent them easily in code using matrices and vectors. The likelihood distribution is a conditional distribution that tells the probability that the generative model assigns to different observations, given different hidden states. Since observations and hidden states are both discrete, this can be efficiently represented as a matrix, each of whose **columns** store the conditional probabilities of all the observations (the **rows**), given a particular hidden state. Each hidden state setting is thus indexed by a column. For this reason, each column of this matrix is a categorical probability distributions and its entries must sum to one. \n", "\n", "The prior is represented as a 1-D vector and stores the prior probabilities that the generative model assigns to each hidden state. \n", "\n", "Finally, to set ourselves up later for showing model inversion and free energy calculations, we initialize an observation that we assume the agent or generative model has \"gathered\" or \"seen.\" In `pymdp` we can represent these observations either as one-hot vectors (a `1` in one entry, and `0`'s everywhere else) or more sparsely as simple indices (integers) that represent *which* of the observations was observed. Because observations are not distributions (or technically, they are Dirac distributions), you don't need to store a whole vector of elements, you can just store a particular index.\n", "\n", "Below we create 3 main variables: \n", "\n", "- An `observation` that represents a real observation that the agent or generative model \"sees\". \n", "- The `prior` distribution that represents the agent's prior beliefs about the hidden states\n", "- the `likliheood_dist` that represents the agent's beliefs about how hidden states probabilistically relate to observations.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "## Define a quick helper function for printing arrays nicely (see https://gist.github.com/braingineer/d801735dac07ff3ac4d746e1f218ab75)\n", "def matprint(mat, fmt=\"g\"):\n", " col_maxes = [max([len((\"{:\"+fmt+\"}\").format(x)) for x in col]) for col in mat.T]\n", " for x in mat:\n", " for i, y in enumerate(x):\n", " print((\"{:\"+str(col_maxes[i])+fmt+\"}\").format(y), end=\" \")\n", " print(\"\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Observation: 0\n", "\n", "Prior:[0.5 0.5]\n", "\n", "Likelihood:\n", "0.8 0.2 \n", "0.2 0.8 \n" ] } ], "source": [ "num_obs = 2 # dimensionality of observations (2 possible observation levels)\n", "num_states = 2 # dimensionality of observations (2 possible hidden state levels)\n", "\n", "observation = 0 # index representation\n", "# observation = np.array([1, 0]) # one hot representation\n", "# observation = utils.onehot(0, num_obs) # one hot representation, but use one of pymdp's utility functions to create a one-hot\n", "\n", "prior = np.array([0.5, 0.5]) # simply set it by hand\n", "# prior = np.ones(num_states) / num_states # create a uniform prior distribution by creating a vector of ones and dividing each by the number of states\n", "# prior = utils.norm_dist(np.ones(num_states)) # use one of pymdp's utility functions to normalize any vector into a probability distribution\n", "\n", "likelihood_dist = np.array([ [0.8, 0.2],\n", " [0.2, 0.8] ])\n", "\n", "if isinstance(observation, np.ndarray):\n", " print(f'Observation:{observation}\\n')\n", "else:\n", " print(f'Observation: {observation}\\n')\n", "print(f'Prior:{prior}\\n')\n", "print('Likelihood:')\n", "matprint(likelihood_dist)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bayesian inference\n", "\n", "Before we define variational free energy for this generative model, let's step through the computations involved in inverting this model using Bayes' rule, i.e. computing the optimal Bayesian posterior over hidden states, given our sensory observation (which we will formally refer to as $o_t$). By performing exact Bayesian inference first, we can directly compares its results to that of variational free energy minimization. This will help us better understand the meaning of the free energy calculations that come later.\n", "\n", "#### 1. Compute the likelihood over hidden states, given the observation \n", "\n", "Now that we have a generative model and have fixed a particular observatio $o_t$ (`observation`), we have to perform Bayes' rule to compute the posterior. Mathematically, this can be expressed as follows:\n", "\n", "### $ \\hspace{60mm} P(s | o _t) = \\frac{P(o = o_t | s)P(s)}{P(o = o_t)} $\n", "\n", "Computing the posterior via Bayes' rule (also known as \"model inversion\") is the essence of optimal statistical inference, when one has a generative model of how one's data is caused, and some data. \n", "\n", "To start with, let's computing the likelihood term $P(o = o_t | s)$. We can represent the computation of the likelihood with this line of `NumPy`: ``likelihood_dist[observation,:]``. By doing so, we are providing a numerical answer to the question: \"What is the likelihood that State 1 vs State 2 caused the actual sensory data $o_t$ that I've observed?\".\n", "\n", " Mathematically, our likelihood function $P(o = o_t | s)$ (in the statistics literature also referred to as $L(\\theta)$) is a *function of the hidden states*. The particular function over hidden states we use is *defined* by the observation $o_t$. So you can think of the likelihood as a multi-dimensional function or simply a space of functions, where the particular function you use for inference is determined by your data.\n", "\n", "This act of computing the likelihood via an indexing operation ``likelihood_dist[observation,:]``, is similar in spirit to the operation of *conditioning*. We are, in some sense, \"conditioning\" on a particular observation (slicing out a \"row\" of our ``likelihood_dist`` matrix), and then looking at the *induced* likelihood over possible causes (hidden states) that could've have been the latent source of that observation. This operation captures the essence of what we mean when we speak of \"inverting\" generative models. Generative models are referred to as *generative* because they can be used to generate fictive observations, given some fixed setting of latent parameters. *Inversion* is thus moving in the opposite direction -- given some sensory data, what is the consequent likelihood over the *causes* or hidden states that might have generated that data?\n", "\n", "**Note**: We can also compute the likelihood using a matrix-vector product, if the observation is represented as a one-hot vector.\n", "\n", "```\n", "likelihood_s = likelihood_dist.T @ observation\n", "```\n", "\n", "You can see think of this as a weighted average of the rows of the likelihood matrix, where the weights are provided by the observations. Since we have insisted that the observations are a one-hot vector, this is equivalent to just selecting a single row of the likelihood matrix (the one indexed by the entry of the observation that is `1.0`)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(o=o_t|s):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[0.8 0.2]\n", "==================\n", "\n" ] } ], "source": [ "\n", "if isinstance(observation, np.ndarray): # use the matrix-vector version if your observation is a one-hot vector\n", " likelihood_s = likelihood_dist.T @ observation\n", "elif isinstance(observation, int): # use the index version if your observation is an integer index\n", " likelihood_s = likelihood_dist[observation,:] \n", "display(Latex('$P(o=o_t|s):$'))\n", "print(f'{likelihood_s}')\n", "print('==================\\n')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2. The joint distribution $P(o = o_t, s) = P(o = o_t|s)P(s)$ \n", "\n", "To compute the full numerator on the right-hand side of the Bayes' rule equation, we need to compute the joint distribution $P(o = o_t|s)P(s)$.\n", "\n", "The joint distribution, which also fully defines the generative model, is the product of the likelihood and prior distributions. The joint distribution expresses the joint probability of observations and hidden states, given the likelihood distribution and the prior over hidden states. If we condition on an actual observation $o_t$, as we have done here, then this joint distribution is, like the likelihood, a function of hidden states. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(o = o_t,s) = P(o = o_t|s)P(s):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[0.4 0.1]\n", "==================\n", "\n" ] } ], "source": [ "joint_prob = likelihood_s * prior # element-wise product of the likelihood of each hidden state, given the observation, with the prior probability assigned to each hidden state\n", "display(Latex('$P(o = o_t,s) = P(o = o_t|s)P(s):$'))\n", "print(f'{joint_prob}')\n", "print('==================\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3. Marginal probability or marginal likelihood: $\\sum_s P(o = o_t, s) = P(o = o_t)$\n", "\n", "Let's remind ourselves of Bayes' rule below:\n", "\n", "#### $ \\hspace{60mm} P(s | o _t) = \\frac{P(o = o_t | s)P(s)}{P(o = o_t)} $\n", "\n", "So far, using the likelihood, the observation, and the prior, we have computed the numerator of this term: the unnormalized joint distribution $P(o = o_t,s)$. All that's left is to do is then divide this term by the denominator $P(o=o_t)$. This term is also referred to as the model evidence or the marginal likelihood. \n", "\n", "This can be thought of as the probability of having seen the particular observation you saw, under all possible settings of the hidden states. This can be computed by marginalizing the joint distribution, using the prior probabilities of the hidden states:\n", "\n", "#### $ \\hspace{60mm}P(o) = \\sum_s P(o|s)P(s)$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "p_o = joint_prob.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4. Compute the posterior $P(s|o=o_t)$\n", "\n", "Now to compute the Bayes-optimal posterior, simply divide the numerator by the denominator!" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$P(s|o = o_t) = \\frac{P(o = o_t,s)}{P(o=o_t)}$:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Posterior over hidden states: [0.8 0.2]\n", "==================\n" ] } ], "source": [ "posterior = joint_prob / p_o # divide the joint by the marginal\n", "display(Latex('$P(s|o = o_t) = \\\\frac{P(o = o_t,s)}{P(o=o_t)}$:'))\n", "print(f'Posterior over hidden states: {posterior}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The variational free energy\n", "\n", "The variational free energy is an upper bound on **surprise**: surprise is define as $ - \\ln p(o)$, and is also known as the negative (log) evidence. By minimizing free energy, we are **minimizing** surprise and thus **maximizing** log evidence. This evidence is simply the (log of the) term we computed in the previous step, the normalizing denominator used in Bayes' rule. We can thus first compute the surprise associated with the observation we saw earlier:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$- \\ln P(o=o_t)$:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Surprise: 0.693\n", "==================\n" ] } ], "source": [ "surprise = - np.log(p_o)\n", "\n", "display(Latex('$- \\ln P(o=o_t)$:'))\n", "print(f'Surprise: {surprise.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By minimizing variational free energy with respect to the parameters of an arbitrary, parametrized distribution, also known as the approximate or variational posterior $Q(s)$, we are forcing the surprise to go down, and the model evidence to go up. In doing so, the approximate posterior distribution will get \"closer\" to the true posterior distribution (the $P(s|o)$ we computed above), $Q(s) \\approx P(s|o)$.\n", "\n", "This idea of minimizing a bound on surprise, is the core principle underlying the variational free energy principle, active inference, and the statistical methodology of variational principles more generally. This comes in handy because in many realistic scenarios where agents or systems need to make inferences about the hidden causes of sensory perturbations, performing Bayesian inference exactly becomes intractable (due mostly to the computation of the $P(o)$ denominator term, also known as the normalizing constant). Variational inference turns this intractable marginalization problem into a tractable optimization problem, where one only needs to change the approximate posterior $Q(s)$ in order to minimize a bound on surprise.\n", "\n", "But what is the variational free energy exactly, mathematically? It is commonly written as the expectation, under the approximate posterior, of the log ratio between the approximate posterior and the generative model:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] $\n", "\n", "Because of the rules of logarithms, we can also express this as an expected difference between the log posterior and the log generative model:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)] $\n", "\n", "By doing taking advantage of some more mathematical relationships (the factorization of the joint, rules for logarithms of products, and the definition of the conditional expectation), we can re-write this as an upper bound on surprise:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)] - \\ln P(o) $\n", "\n", "By re-arranging this equality and taking advantage of the fact that the quantity $\\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)]$ (also known as the Kullback-Leibler divergence) is greater than or equal to 0, we can easily show that the VFE is an upper bound on surprise:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} \\geq - \\ln P(o) $\n", "\n", "Let's now compute the VFE numerically for our generative model and fixed observation. Given we already defined those two things ($o_t$ and $P(o,s)$), the last thing we need to do, is to define an initial setting of our approximate posterior $Q(s)$, and compute the variational free energy using one of the formulas above." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Variational free energy (F) = 0.916\n", "==================\n" ] } ], "source": [ "# to begin with, set our initial Q(s) equal to our prior distribution -- i.e. a flat/uninformative belief about hidden states\n", "initial_qs = np.array([0.5, 0.5])\n", "\n", "# redefine generative model and observation, for ease\n", "observation = 0\n", "likelihood_dist = np.array([[0.8, 0.2], [0.2, 0.8]])\n", "prior = utils.norm_dist(np.ones(2))\n", "\n", "# compute the joint or generative model using the factorization: P(o=o|s)P(s)\n", "joint_prob = likelihood_dist[observation,:] * prior\n", "\n", "# compute the variational free energy using the expected log difference formulation\n", "initial_F = initial_qs.dot(np.log(initial_qs) - np.log(joint_prob))\n", "## @NOTE: because of log-rules, `initial_F` can also be computed using the division inside the logarithm:\n", "# initial_F = initial_qs.dot(np.log(initial_qs/joint_prob))\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'Variational free energy (F) = {initial_F.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's then change the approximate posterior $Q(s)$ and see what happens to the variational free energy.\n", "\n", "By definition, optimal inference (and 'perfect' VFE minimization) obtains when we set the approximate posterior $Q(s)$ to be equal to the true posterior, $Q(s) = P(s|o)$. \n", "\n", "As an extreme case, let's do this and then measure the variational free energy. We can see that it has decreased, relative to it's initial setting when the approximate posterior was equal to the prior $P(s)$." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "F = 0.693\n", "==================\n" ] } ], "source": [ "final_qs = posterior.copy() # now we just assert that the approximate posterior is equal to the true posterior\n", "final_F = final_qs.dot(np.log(final_qs) - np.log(joint_prob))\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'F = {final_F.round(3)}')\n", "print('==================')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the free energy is 0.693 -- if you recall, this is exactly the **surprise** or negative log marginal likelihood $-\\ln P(o = o_t)$, related to the marginal likelihood quantity $P(o=o_t)$ that we had to compute when performing exact Bayesian inference earlier. \n", "\n", "It is easy to see why this equality should hold, when we consider the VFE in terms of the surprise bound:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)] - \\ln P(o) $\n", "\n", "When $Q(s) = P(s|o)$, as we have enforced with the line ``final_qs = posterior.copy()`` above, the first term $\\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(s|o)]$ will become 0. This is a property of the Kullback-Leibler divergence between two distributions $\\operatorname{D}_{KL}(Q \\parallel P) = \\mathbb{E}_{Q}[\\ln Q - \\ln P]$. \n", "\n", "So since that KL divergence is 0, this is a case when the bound on surprise is exact:\n", "\n", "#### $ \\hspace{60mm} \\mathcal{F} = 0 - \\ln P(o) = - \\ln P(o)$\n", "\n", "In other words, minimizing free energy \"as much as possible\" in the case of this generative model, means that the approximate posterior equals the true posterior, and the free energy bound becomes \"tight\", i.e. the free energy simply IS the negative log evidence!" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$-\\ln P(o):$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.693\n", "==================\n", "\n" ] } ], "source": [ "# compute the surprise (which we can do analytically for this simple generative model)\n", "p_o = joint_prob.sum()\n", "surprise = - np.log(p_o)\n", "display(Latex('$-\\ln P(o):$'))\n", "print(f'{surprise.round(3)}')\n", "print('==================\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bonus material: auto-differentiation to perform gradient descent on the variational free energy\n", "\n", "In this section, we are going to numerically differentiate the variational free energy with respect to the parameters of the approximate posterior. We can take advantage of modern autodifferentiation software, that can calculate the derivatives of arbitrary computer programs, to compute these derivatives without doing any analytic differentiation." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np_auto # Thinly-wrapped version of Numpy that is auto-differentiable\n", "from autograd import grad # this is the function that we use to evaluate derivatives\n", "from functools import partial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's create a variational free energy function, that takes as input the variational posterior `qs`, an observation `obs`, the likelihood matrix `likelihood` and a prior distribution `prior`.\n", "\n", "By defining this computation as a function, we can calculate its derivatives automatically using the autodifferentiation package `autograd`, which allows users to pass gradients through arbitrary Python code. It includes a special version of `numpy` (`autograd.numpy`) that has a differentiable back-end. We will thus use this \"special\" verison of `numpy` when we instantiate our arrays and perform numerical operations on them." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# define the variational free energy as a function of the approximate posterior, an observation, and the generative model\n", "def vfe(qs, obs, likelihood, prior):\n", " \"\"\"\n", " Quick docstring below on inputs\n", " Arguments:\n", " =========\n", " `qs` [1D np_auto.ndarray]: variational posterior over hidden states\n", " `obs` [int]: index of the observation\n", " `likelihood` [2D np_auto.ndarray]: likelihood distribution P(o|s), relating hidden states probabilistically to observations\n", " `prior` [1D np_auto.ndarray]: prior over hidden states\n", " \"\"\"\n", "\n", " likelihood_s = likelihood[obs,:]\n", "\n", " joint = likelihood_s * prior\n", "\n", " vfe = qs @ (np_auto.log(qs) - np_auto.log(joint))\n", "\n", " return vfe\n", "\n", "# initialize an observation, an initial variational posterior, a prior, and a likelihood matrix\n", "obs = 0\n", "init_qs = np_auto.array([0.5, 0.5])\n", "prior = np_auto.array([0.5, 0.5])\n", "likelihood_dist = np_auto.array([ [0.8, 0.2],\n", " [0.2, 0.8] ])\n", "\n", "# this use of `partial` creates a version of the vfe function that is a function of Qs only, \n", "# with the other parameters (the observation, the generative model) fixed as constant parameters\n", "vfe_qs = partial(vfe, obs = obs, likelihood = likelihood_dist, prior = prior)\n", "\n", "# By calling `grad` on a function, we get out a function that can be used to compute the gradients of the VFE with respect to its input (in our case, `qs`)\n", "grad_vfe_qs = grad(vfe_qs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have a variational free energy function, and a derivative function that will give us the gradients of the VFE, with respect $Q(s)$, we can use it to perform a gradient descent on VFE, with respect to the parameters of $Q(s)$. In other words, we will implement this discretized differential equation to update the approximate posterior:\n", "\n", "#### $ \\hspace{60mm} Q(s)_{t+1} =Q(s)_{t} - \\frac{\\partial \\mathcal{F}}{\\partial Q(s)_{t}} $\n", "\n", "Where the gradient term $\\frac{\\partial \\mathcal{F}}{\\partial Q(s)_{t}}$ will simply be the output of the gradient function `grad_vfe_qs` we've defined above.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# number of iterations of gradient descent to perform\n", "n_iter = 40\n", "\n", "qs_hist = np_auto.zeros((n_iter, 2))\n", "qs_hist[0,:] = init_qs\n", "\n", "vfe_hist = np_auto.zeros(n_iter)\n", "vfe_hist[0] = vfe_qs(qs = init_qs)\n", "\n", "learning_rate = 0.1 # learning rate to prevent gradient steps that are too big (overshooting)\n", "for i in range(n_iter-1): \n", "\n", " dFdqs = grad_vfe_qs(qs_hist[i,:])\n", "\n", " ln_qs = np_auto.log(qs_hist[i,:]) - learning_rate * dFdqs # transform qs to log-space to perform gradient descent\n", " qs_hist[i+1,:] = maths.softmax(ln_qs) # re-normalize to make it a proper, categorical Q(s) again\n", "\n", " vfe_hist[i+1] = vfe_qs(qs = qs_hist[i+1,:]) # measure final variational free energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we were storing the history of the variational free energy over the course of the gradient descent, we can plot its trajectory below." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Gradient descent on VFE')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(8,6))\n", "plt.plot(vfe_hist)\n", "plt.ylabel('$\\\\mathcal{F}$', fontsize = 22)\n", "plt.xlabel(\"Iteration\", fontsize = 22)\n", "plt.xlim(0, n_iter)\n", "plt.ylim(vfe_hist[-1], vfe_hist[0])\n", "plt.title('Gradient descent on VFE', fontsize = 24)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Initial F = 0.916\n", "==================\n", "Final posterior:\n", "[0.8 0.2]\n", "==================\n", "Final F = 0.693\n", "==================\n" ] } ], "source": [ "final_qs, initial_F, final_F = qs_hist[-1,:], vfe_hist[0], vfe_hist[-1]\n", "\n", "display(Latex('$\\mathcal{F} = \\mathbb{E}_{Q(s)}[\\ln \\\\frac{Q(s)}{P(o, s)}] = \\mathbb{E}_{Q(s)}[\\ln Q(s) - \\ln P(o, s)]:$'))\n", "print(f'Initial F = {initial_F.round(3)}')\n", "print('==================')\n", "\n", "print('Final posterior:')\n", "print(f'{final_qs.round(1)}') # note that because of numerical imprecision in the gradient descent (constant learning rate, etc.), the approximate posterior will not exactly be the optimal posterior\n", "print('==================')\n", "print(f'Final F = {vfe_qs(final_qs).round(3)}')\n", "print('==================')\n" ] } ], "metadata": { "interpreter": { "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/gridworld_tutorial_1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial on Active Inference with `pymdp`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This set of 3 tutorial notebooks aims to be an accessible introduction to discrete-state-space active inference modelling with the `pymdp` package. We assume no prerequisites other than a good grasp of Python and some basic mathematical knowledge (specifically some familiarity with probability and linear algebra). We assume no prior knowledge of active inference. Hopefully, by the end of this series of notebooks, you will understand active inference well enough to understand the recent literature, as well as implement your own agents!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These tutorials will walk you through the specification, and construction of an active inference agent which can solve a simple navigation task in a 2-dimensional grid-world environment. The goal here is to implement the agent 'from scratch'. Specifically, instead of just using magical library functions, we will show you an example of how these functions could be implemented from pure Python and numpy code. The goal at the end of these tutorials is that you understand at a fairly detailed level how active inference works in discrete state spaces and how to apply it, as well as how you could implement a simple agent without using the `pymdp` package. Once you understand what the `pymdp` package aims to abstract, we will go through the structure and functionality offered by the package, and show how you can construct complex agents in a simple and straightforward way." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# What is Active Inference?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fundamentally, the core contention of active inference is that the brain (and agents in general) can be thought of as fundamentally performing (Bayesian) inference about the world. Specifically, an agent performs two functions.\n", "\n", "\n", "1.) **Perception**. An agent does not necessarily know the true state of the world, but instead must infer it from a limited set of (potentially ambiguous) observations.\n", "\n", "\n", "2.) **Action**. Typically, the agent can also perform the actions which change the state of the world. The agent can use these actions to drive the world towards a set of states that it desires. \n", "\n", "The theory of Active Inference argues that **both** perception and action can be represented and solved as Bayesian inference problems. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# What is Bayesian Inference?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bayesian inference provides a recipe for performing *optimal* inference. That is, if you have some set of Hypotheses $H$ and some set of data $D$, then Bayesian inference allows you to compute the *best possible* update to your hypotheses given the data that you have. In other words, the best explanation $H$ that accounts for your actual data $D$.\n", "\n", "For instance, suppose you are a trader and you want to know whether some stock will go up tomorrow. And you have a set of information about that stock (for instance earnings reports, sales data, rumours a friend of a friend told you etc). Then Bayesian inference provides the *optimal way* to estimate the probability that the stock will go up. In this scenario, our \"hypotheses\" $H$ is that the stock will go up, or it will go down and our \"data\" $D$ is the various pieces of information we hold." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fundamental equation in Bayesian inference is **Bayes Rule**. Which is \n", "$$\n", "\\begin{align}\n", "p(H | D) = \\frac{p(D | H)p(H)}{p(D)}\n", "\\end{align}\n", "$$\n", "Here $p(H)$ etc are *probability distributions*. All a probability distribution is is a function that assigns a probability value (between 0 and 1) to a specific outcome. A probability distribution then represents the probability of that outcome for every possible outcome. For instance, take p(H). This is the probability distribution over our *hypothesis space*, which you can think of as our baseline assumptions about whether the stock tends to go up or down i.e. $p(H) = [p(stock\\_goes\\_up), p(stock\\_goes\\_down)]$, before we've encountered any data that provides evidence for/against either hypothesis.\n", "\n", "If we assume we have no idea whether the stock will go up or down, we can say that the probability in each case is 0.5 so that $p(H) = [0.5, 0.5]$. When there is a discrete set of possible outcomes or states, probability distributions can be simply represented as vectors with one element for each outcome - where the element itself is simply the probability of seeing that outcome. The sum of all the elements of a probability distribution must equal 1. The vector's elements encode the probabilities of *all possible events*, so one of them *must* occur -- i.e. the probability of seeing *some* outcome is 100%.\n", "\n", "There are three fundamental quantities in Bayesian inference: the **posterior**, the **likelihood** and the **prior**. The posterior is ultimately the goal of inference, it is $p(H | D)$. What this represents is the probability of each hypothesis in the hypothesis space *given the data $D$*. You can think of as you best guesses at the truth of each hypothesis after optimally integrating the data. Next is the **prior** $p(H)$ which represents your assumptions about how likely each hypothesis is *prior to seeing the data*. Finally, there is the likelihood $p(D | H)$ which quantifies how likely each outcome you see is, given the different hypotheses. The likelihood distribution can also be thought of as a *model* for how the data relates to the hypotheses. \n", "\n", "The key insight of Bayes rule is simply that the posterior probability -- how likely the hypothesis is, given the data -- is simply the likelihood times the prior. This multiplication can be expressed as computing the following: how likely is the data you actually saw, given the different hypotheses ($P(D = d | H)$), multiplied by the prior probability you assign to each hypothesis ($P(H)$). So the full posterior is a distribution over the different hypotheses - in the case of discrete / Categorical distributions, your posterior $p(H |D)$ will also be a vector of probabilities, e.g. $p(H | D) = [0.75, 0.25]$.\n", "\n", "Effectively, hypotheses are more likely if they can predict the data well, but are also weighted by their a-priori probability. The marginal likelihood $p(D)$ is basically just there to normalize the posterior (i.e. make sure it equals 1)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Generative Models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Active Inference we typically talk about *generative models* as a core component. But what are generative models? Technically a generative model is simply the product of a likelihood and a prior, for all the possible data points $D$ and hypotheses $H$. This is also known as a *joint distribution* $p(H,D) = p(D | H)p(H)$. The generative model, then, is simply the numerator of Bayes rule, and if we normalize it we can compute posterior probabilities. It is called a generative model because it allows you to *generate* samples of the data. To do so, we follow the following steps:\n", "\n", "1.) Sample a hypothesis $h_i$ from the prior -- i.e. $p(H)$\n", "\n", "2.) Sample a datum $d_i$ from the likelihood distribution, given the particular hypothesis $h_i$ that you sampled i.e. sample $d_i$ from $p(D | H = h_i)$.\n", "\n", "Another way to think about a generative model is that it is simply a model, or set of beliefs/assumptions, of how observed data are generated. This is often a very helpful way to think about inference problems, since it aligns with our notion of causality -- i.e. there are unknown processes in the world which generate data. If we can imagine a process and then imagine the data generated by this process, then we are imagining a generative model. Inference of the posterior, on the other hand, is more difficult because it goes in the *reverse* direction -- i.e. you have some set of observations and want to reconstruct the process that gave rise to them. Fundamentally, all of Bayesian statistics can be broken down into two steps:\n", "\n", "1.) Make a mathematical model of the data-generating process - the sort of environmental / world structures you think could give rise to the sort of data you have (i.e. come up with a generative model). Generative models are classically written down using a set of unknown parameters (e.g. parameters that describe probability distributions, like sufficient statistics). You want to \"fit\" (read: infer the values of) these parameters, given some data.\n", "\n", "2.) Given your generative model and some data, compute the posterior distribution over the unknown parameters using Bayes rule, or some approximation of Bayes rule.\n", "\n", "3.) Be happy!\n", "\n", "All the methods in Bayesian statistics essentially fall into two classes. Coming up with more expressive and powerful generative models and then figuring out algorithms to perform inference on them." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Why is Bayesian Inference hard?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, you may be wondering: Bayesian inference seems pretty easy. We known Bayes rule. We can invent generative models easily enough. Computing the posterior is just taking the generative model and dividing it by $p(D)$. Why all this fuss? Why do we need to make a whole academic field out of this anyway? Luckily this has a straightforward answer. Bayesian inference is hard for essentially just one reason: that computing $p(D)$, the normalizing constant, is hard.\n", "\n", "Let's think about why. $p(D)$, which is known as the **marginal likelihood**, is fundamentally just the probability of the data. What does that mean? How is there just some free-floating probability of the data? Fundamentally there isn't. $p(D)$ is the probability of the data *averaged over all possible hypotheses*. We can write this as,\n", "$$\n", "\\begin{align}\n", "p(D) = \\sum_h p(D | H)p(H)\n", "\\end{align}\n", "$$\n", "\n", "Effectively, $p(D)$ is the sum over all possible hypotheses of the probability of the data given that hypothesis, weighted by the prior probability of that hypothesis. This is challenging to compute in practice because you are often using really large (or indeed often infinite) hypothesis spaces. For instance, suppose your trader doesn't just want to know whether the stock will go up or down but *how much* it will go up or down. Now, with this simple change, you have an *infinite* amount of hypotheses: $p(H) = [p(stock\\_goes\\_up\\_0.00001), p(stock\\_goes\\_up\\_0.00002), p(stock\\_goes\\_up\\_0.00003) ...]$. Then, if we want to compute the posterior in this case, we need to sum over every one of this infinite amount of hypotheses. You can see why this ends up being quite challenging in practice.\n", "\n", "Because of this intrinsic difficulty, there are a large number of special case algorithms which can solve (or usually approximate) the Bayesian posterior in various cases, and a large amount of work in statistics goes into inventing new ones or improving existing methods. Active Inference agents use one special class of approximate Bayesian inference methods called *variational methods* or *variational inference*. This will be discussed in much more detail in notebook 2.\n", "\n", "Beyond merely the difficulty of performing inference, another reason why Bayesian statistics is hard is that you often *don't know* the generative model. Or at least you are uncertain about some aspects of it. There is also a wide class of methods which let you perform inference and *learning* simultaneously, including for active inference, although they won't be covered in this tutorial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# A Generative Model for an Agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Active Inference, we typically go a step beyond the simple cases of Bayesian inference described above, where we have a static set of hypotheses and some static data. We are instead interested in the case of an *agent* interacting with a *dynamic environment*. The key thing we need to add to the formalism to accomodate this is a notion of *time*. We consider an environment consisting of a set of *states* $[x_1, x_2, \\dots x_t]$ evolving over time. Moreover, there is an agent which is in the environment over time. This agent receives a set of *observations* $[o_1, o_2 \\dots o_t]$, which are a function of the state of the environment, and it can emit *actions* $[a_1, a_2 \\dots a_t]$ which can change the state of the environment. The key step to get a handle on this situation mathematically is to define a *generative model* of it. \n", "\n", "To start, we must make some assumptions to simplify the problem. Specifically, we assume that the *state* of the environment $x_t$ only depends on the state at the previous timestep $x_{t-1}$ and the action emitted by the agent at the previous timestep $a_{t-1}$. Then, we assume that the observation $o_t$ at a given time-step is only a function of the environmental state at the current timestep $x_t$. Together, these assumptions are often called the **Markov Assumptions** and if the environment adheres to them it is often called a **Markov Decision Process**. \n", "\n", "The general computational \"flow\" of a Markov decision process can be thought of as following a sequence of steps.\n", "\n", "1.) The state of the environment is $x_t$. \n", "\n", "2.) The environment state $x_t$ generates an observation $o_t$.\n", "\n", "3.) The agent receives an observation $o_t$, and based on it (or inferences derived thereof) decides to take some action $a_t$, which it executes in the environment.\n", "\n", "4.) Given the current state $x_t$ and the agent's action $a_t$, the environment updates its own state to produce $x_{t+1}$\n", "\n", "5.) Go back to step 1.\n", "\n", "Now that we have this series of steps, we can try to define what it means mathematically. Specifically, we need to define two quantities. \n", "\n", "a.) We need to know how the state of the environment $x_t$ is reflected in the observation sent to the agent $o_t$. In Bayesian terms from the agent's perspective, the true state of the environment is unknown, and its various possible states can be thought of as \"hypotheses\", while the observations it receives are \"data\". The agent's generative model encodes some prior assumptions about each possible state $x_t$ (i.e. each hypothesis) relates to the probability of seeing each possible outcome $o_t$. This relationship (from the agent's perspective) is a function known as the **likelihood distribution** $p(D | H)$ or, in our new notation $p(o_t | x_t)$. \n", "\n", "b.) We need to know how the environment updates itself to form its new state $x_{t+1}$, given the old one $x_t$ and the action $a_t$. This can be thought of (from the perspective of the agent who does not observe it) as the **prior** since it can be thought of as the default expectation the agent can have about the state of the environment prior to receiving any observations. It can be written as $p(x_t | x_{t-1}, a_{t-1})$. This distribution is also known as the **transition distribution** since it specifies (the agent's assumptions about) how the environment transitions from one state to another.\n", "\n", "These two distributions $p(o_t | x_t)$ and $p(x_t | x_{t-1}, a_{t-1})$ are all that is needed to specify the evolution of the environment. At this point, it is necessary to make a distinction between the *actual* evolution of the environment -- known as the **generative process** -- and the *agent's model* of the evolution of the environment, which is known as the **generative model**. These are not necessarily the same, although in some sense the goal of the agent is to figure out a generative model that is as close to the true generative process as possible. In this example, we will consider a scenario in which the agent knows the true model, so the generative model and the generative process are the same, although this is not always the case.\n", "\n", "To make this concrete, all that is necessary to do is to specify precisely what the **likelihood** and **transition** distributions actually are.\n", "\n", "In the case of discrete state spaces, where it is possible to explicitly enumerate all states, a very generic way of representing these distributions is as *matrices*. Specifically, we can represent the likelihood distribution as a matrix denoted $\\textbf{A}$, which is of shape $dimension\\_of\\_observation \\times dimension\\_of\\_state$. The element $A_{i,j}$ of $\\textbf{A}$ represents the probability that observation $i$ is generated by state $j$.\n", "\n", "Secondly, we can represent the transition distribution by a matrix $\\textbf{B}$ of shape $state\\_dim \\times state\\_dim \\times action\\_dim$ where element $\\textbf{B}_{i,j,k}$ represents the probability of the environment moving to state $i$ given that it was previously in state $j$ and that action $k$ was taken.\n", "\n", "In the rest of this notebook, we will explicitly write down the generative process / generative model for a simple grid-world environment in code, to get a better handle on how the environment and the agent's model is specified. In the next notebook, we will turn to inference and action selection and discuss how active inference solves these two tricky problems." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constructing a Generative Model " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the rest of this notebook, we will construct a simple generative model for an active inference agent navigating a 3x3 grid world environment. The agent can perform one of 5 movement actions at each time step: `LEFT, RIGHT, UP, DOWN, STAY`. The goal of the agent is to navigate to its preferred position. \n", "\n", "We will create matrices for both the environment as well as the agent itself. As we go up levels of abstraction, these environment and generative model matrices will be imported from classes - but this notebook is the lowest level representation of construction, to show how everything is built from the ground up. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Understanding the state space" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first thing to note is that we are in a 3x3 grid world which means we have 9 states in total. We can define the following mapping to better understand the space." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "state_mapping = {0: (0,0), 1: (1,0), 2: (2,0), 3: (0,1), 4: (1,1), 5:(2,1), 6: (0,2), 7:(1,2), 8:(2,2)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All we're doing with this mapping dictionary is assigning a particular index (`0`, `1`, `2`, ..., `8`) to each grid position, which is defined as a pair of `(x, y)` coordinates ( `(0, 0), (1, 0)`, ..., `(2, 2)`). We will use the linear indices to refer to the grid positions in our probability distributions (e.g. `P(o_t | x_t = 5)`), so this `state_mapping` will allow us to easily move between these linear indices and the grid world indices. These kinds of mappings are very handy for intuition and visualization." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the following heatmap just represents how the coordinates map to the real grid space" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "grid = np.zeros((3,3))\n", "for linear_index, xy_coordinates in state_mapping.items():\n", " x, y = xy_coordinates\n", " grid[y,x] = linear_index # rows are the y-coordinate, columns are the x-coordinate -- so we index into the grid we'll be visualizing using '[y, x]'\n", "fig = plt.figure(figsize = (3,3))\n", "sns.set(font_scale=1.5)\n", "sns.heatmap(grid, annot=True, cbar = False, fmt='.0f', cmap='crest')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Likelihood Matrix: A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The likelihood matrix represents $P(o_t | x_t)$ , the probability of an observation given a state. In a grid world environment, the likelihood matrix of the agent is identical to that of the environment. It is simply the identity matrix over all states (in this case 9 states, for a 3x3 grid world) which represents the fact that the agent has probability 1 of observing that it is occupying any state x, given that it is in state x. This just means that the agent has full transparency over its own location in the grid. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = np.eye(9)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also plot the likelihood matrix as follows:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "labels = [state_mapping[i] for i in range(A.shape[1])]\n", "def plot_likelihood(A):\n", " plt.figure(figsize = (6,6))\n", " sns.heatmap(A, xticklabels = labels, yticklabels = labels, cbar = False)\n", " plt.title(\"Likelihood distribution (A)\")\n", " plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot_likelihood(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Transition matrix: B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The transition matrix determines how the agent can move around the gridworld given each of the 5 available actions (UP, DOWN, LEFT, RIGHT, STAY). \n", "So the transition matrix will be a 9x9x5 matrix, where each entry corresponds to an end state, a starting state, and the action that defines that specific transition. \n", "\n", "To construct this matrix, we have to understand that when the agent is at the edges of the grid, it cannot move outward, so trying to move right at the right wall will cause the agent to stay still. \n", "\n", "We will start by constructing a dictionary which we call P, which maps each state to its next state given an action" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "state_mapping" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "P = {}\n", "dim = 3\n", "actions = {'UP':0, 'RIGHT':1, 'DOWN':2, 'LEFT':3, 'STAY':4}\n", "\n", "for state_index, xy_coordinates in state_mapping.items():\n", " P[state_index] = {a : [] for a in range(len(actions))}\n", " x, y = xy_coordinates\n", "\n", " '''if your y-coordinate is all the way at the top (i.e. y == 0), you stay in the same place -- otherwise you move one upwards (achieved by subtracting 3 from your linear state index'''\n", " P[state_index][actions['UP']] = state_index if y == 0 else state_index - dim \n", "\n", " '''f your x-coordinate is all the way to the right (i.e. x == 2), you stay in the same place -- otherwise you move one to the right (achieved by adding 1 to your linear state index)'''\n", " P[state_index][actions[\"RIGHT\"]] = state_index if x == (dim -1) else state_index+1 \n", "\n", " '''if your y-coordinate is all the way at the bottom (i.e. y == 2), you stay in the same place -- otherwise you move one down (achieved by adding 3 to your linear state index)'''\n", " P[state_index][actions['DOWN']] = state_index if y == (dim -1) else state_index + dim \n", "\n", " ''' if your x-coordinate is all the way at the left (i.e. x == 0), you stay at the same place -- otherwise, you move one to the left (achieved by subtracting 1 from your linear state index)'''\n", " P[state_index][actions['LEFT']] = state_index if x == 0 else state_index -1 \n", "\n", " ''' Stay in the same place (self explanatory) '''\n", " P[state_index][actions['STAY']] = state_index" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "P" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From here, we can easily construct the transition matrix" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num_states = 9\n", "B = np.zeros([num_states, num_states, len(actions)])\n", "for s in range(num_states):\n", " for a in range(len(actions)):\n", " ns = int(P[s][a])\n", " B[ns, s, a] = 1\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "B is a very large matrix, we can see its shape below, which is as expected:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "B.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also visualize B on the plots below. The x axis is the starting state, and the y axis is the ending state, and each plot corresponds to an action given by the title." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig, axes = plt.subplots(2,3, figsize = (15,8))\n", "a = list(actions.keys())\n", "count = 0\n", "for i in range(dim-1):\n", " for j in range(dim):\n", " if count >= 5:\n", " break \n", " g = sns.heatmap(B[:,:,count], cmap = \"OrRd\", linewidth = 2.5, cbar = False, ax = axes[i,j], xticklabels=labels, yticklabels=labels)\n", " g.set_title(a[count])\n", " count +=1 \n", "fig.delaxes(axes.flatten()[5])\n", "plt.tight_layout()\n", "plt.show()\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now our generative model and environment are set up, and we can move on to Notebook 2, where we go through the core mechanics of how to perform inference and planning on this environment with this generative model." ] } ], "metadata": { "interpreter": { "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/gridworld_tutorial_2.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial Notebook 2. Inference and Planning\n", "\n", "\n", "In this notebook, we will continue on from the last notebook to build a fully fledged active inference agent capable of performing inference and planning using Active Inference in the simple grid-world environment. We will also begin to use some aspects of `pymdp`, although this will mostly be helpful functions for building and sampling from discrete distributions while we will implement the core functionality of the agent ourselves.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we simply start out by defining our generative model as we did last time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add `pymdp` module" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# This is needed (on my machine at least) due to weird python import issues\n", "import os\n", "import sys\n", "from pathlib import Path\n", "\n", "path = Path(os.getcwd())\n", "print(path)\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from copy import deepcopy\n", "\n", "from pymdp import maths, utils\n", "from pymdp.maths import spm_log_single as log_stable # @NOTE: we use the `spm_log_single` helper function from the `maths` sub-library of pymdp. This is a numerically stable version of np.log()\n", "from pymdp import control\n", "print(\"imports loaded\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "state_mapping = {0: (0,0), 1: (1,0), 2: (2,0), 3: (0,1), 4: (1,1), 5:(2,1), 6: (0,2), 7:(1,2), 8:(2,2)}\n", "\n", "A = np.eye(9)\n", "def plot_beliefs(Qs, title=\"\"):\n", " #values = Qs.values[:, 0]\n", " plt.grid(zorder=0)\n", " plt.bar(range(Qs.shape[0]), Qs, color='r', zorder=3)\n", " plt.xticks(range(Qs.shape[0]))\n", " plt.title(title)\n", " plt.show()\n", " \n", "labels = [state_mapping[i] for i in range(A.shape[1])]\n", "def plot_likelihood(A):\n", " plt.figure(figsize = (6,6))\n", " sns.heatmap(A, xticklabels = labels, yticklabels = labels, cbar = False)\n", " plt.title(\"Likelihood distribution (A)\")\n", " plt.show()\n", " \n", "def plot_empirical_prior(B):\n", " fig, axes = plt.subplots(3,2, figsize=(8, 10))\n", " actions = ['UP', 'RIGHT', 'DOWN', 'LEFT', 'STAY']\n", " count = 0\n", " for i in range(3):\n", " for j in range(2):\n", " if count >= 5:\n", " break\n", " \n", " g = sns.heatmap(B[:,:,count], cmap=\"OrRd\", linewidth=2.5, cbar=False, ax=axes[i,j])\n", "\n", " g.set_title(actions[count])\n", " count += 1\n", " fig.delaxes(axes.flatten()[5])\n", " plt.tight_layout()\n", " plt.show()\n", " \n", "def plot_transition(B):\n", " fig, axes = plt.subplots(2,3, figsize = (15,8))\n", " a = list(actions.keys())\n", " count = 0\n", " for i in range(dim-1):\n", " for j in range(dim):\n", " if count >= 5:\n", " break \n", " g = sns.heatmap(B[:,:,count], cmap = \"OrRd\", linewidth = 2.5, cbar = False, ax = axes[i,j], xticklabels=labels, yticklabels=labels)\n", " g.set_title(a[count])\n", " count +=1 \n", " fig.delaxes(axes.flatten()[5])\n", " plt.tight_layout()\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generative model\n", "\n", "Here, we setup our generative model which is the same as in the last notebook. This is formed of a likelihood distribution $P(o_t|s_t)$, denoted `A`, and a empirical prior (transition) distribution $P(s_t|s_{t-1},a_{t-1})$, denoted `B`.\n", "\n", "Since this was covered in more detail in the previous tutorial, we quickly skip over the details here\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A matrix\n", "A = np.eye(9)\n", "plot_likelihood(A)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# construct B matrix\n", "\n", "P = {}\n", "dim = 3\n", "actions = {'UP':0, 'RIGHT':1, 'DOWN':2, 'LEFT':3, 'STAY':4}\n", "\n", "for state_index, xy_coordinates in state_mapping.items():\n", " P[state_index] = {a : [] for a in range(len(actions))}\n", " x, y = xy_coordinates\n", "\n", " '''if your y-coordinate is all the way at the top (i.e. y == 0), you stay in the same place -- otherwise you move one upwards (achieved by subtracting 3 from your linear state index'''\n", " P[state_index][actions['UP']] = state_index if y == 0 else state_index - dim \n", "\n", " '''f your x-coordinate is all the way to the right (i.e. x == 2), you stay in the same place -- otherwise you move one to the right (achieved by adding 1 to your linear state index)'''\n", " P[state_index][actions[\"RIGHT\"]] = state_index if x == (dim -1) else state_index+1 \n", "\n", " '''if your y-coordinate is all the way at the bottom (i.e. y == 2), you stay in the same place -- otherwise you move one down (achieved by adding 3 to your linear state index)'''\n", " P[state_index][actions['DOWN']] = state_index if y == (dim -1) else state_index + dim \n", "\n", " ''' if your x-coordinate is all the way at the left (i.e. x == 0), you stay at the same place -- otherwise, you move one to the left (achieved by subtracting 1 from your linear state index)'''\n", " P[state_index][actions['LEFT']] = state_index if x == 0 else state_index -1 \n", "\n", " ''' Stay in the same place (self explanatory) '''\n", " P[state_index][actions['STAY']] = state_index\n", "\n", "\n", "num_states = 9\n", "B = np.zeros([num_states, num_states, len(actions)])\n", "for s in range(num_states):\n", " for a in range(len(actions)):\n", " ns = int(P[s][a])\n", " B[ns, s, a] = 1\n", "\n", "plot_transition(B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Create Environment Class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make things simple we will parcel up the $A$ and $B$ matrices into a class which represents the environment. The environment has two functions `step` which when given an action will update the environment a single step and `reset` which resets the environment back to its initial condition. The API of our simple environment class is similar to the `Env` base class used by `pymdp`, although the `pymdp` version has many more features than we use here." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class GridWorldEnv():\n", " \n", " def __init__(self,A,B):\n", " self.A = deepcopy(A)\n", " self.B = deepcopy(B)\n", " print(\"B:\", B.shape)\n", " self.state = np.zeros(9)\n", " # start at state 3\n", " self.state[2] = 1\n", " \n", " def step(self,a):\n", " self.state = np.dot(self.B[:,:,a], self.state)\n", " obs = utils.sample(np.dot(self.A, self.state))\n", " return obs\n", "\n", " def reset(self):\n", " self.state =np.zeros(9)\n", " self.state[2] =1 \n", " obs = utils.sample(np.dot(self.A, self.state))\n", " return obs\n", " \n", "env = GridWorldEnv(A,B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Inference" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have the generative model setup, we turn to the behaviour of the active inference agent itself. To recap, we assume that this agent receives observations from the environment and can emit actions. Moreover, we assume that this agent has some kind of goal or preferences over the state of the environment it wants to create, and will choose actions in order to increase the probability of observing itself in its preferred state. For the time being, we will not deal with the problem of action selection but only with inference.\n", "\n", "The agent receives observations $o_t$ from the environment but does not naturally know the environments true state $x_t$. Thus, the agent must *infer* this state by computing the posterior distribution $p(x_t | o_t)$. It can do this by Bayesian inference using Bayes rule but, as we discussed last time, explicitly computing Bayes rule is often intractable because the marginal likelihood requires the averaging over an infinite number of hypotheses. We therefore need some other way to compute or approximate this posterior. Active inference assumes that this posterior can be approximated through a family of methods called *variational inference* which only approximate the posterior, but are fast and computationally efficient." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Variational Inference\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Variational inference is a set of inference methods which can rapidly and efficiently compute *approximate* posteriors for Bayesian inference problems. The key idea behind variational inference is that instead of trying to compute the true posterior $p(x_t | o_t)$ which may be extremely complex, is that we instead optimize an *approximate posterior*. Specifically, we will define another distribution $q(x_t ; \\phi)$ which has some parameters $\\phi$ which we then optimize so as to make $q(x_t ; \\phi)$ as close as possible to the true distribution. Typically, we choose this $q$ distribution to be some simple distribution which is easy to work with mathematically. If the process works, then we can get the $q$ distribution very close to the true posterior, and as such get a good estimate of the posterior without ever explicitly computing it using Bayes rule. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mathematically, we can do this by setting up an optimization problem. We have the true posterior $p(x_t | o_t)$, which is unknown, and we have our $q$ distribution which we do know. We then want to optimize the $q$ distribution to make it as *close as possible* to the true posterior $p(x_t | o_t)$. To do this, we first need a way to quantify *how close* two probability distributions are. The way we do this is by using a quantity known as the *Kullback-Leibler (KL) divergence*. This is a metric derived from information theory which lets us quantify the distance (in bits) of two distributions. The KL divergence between two distributions $q(x)$ and $p(x)$ is defined as,\n", "$$\n", "\\begin{align}\n", "KL[q(x) || p(x)] = \\sum_x q(x) (\\ln q(x) - \\ln p(x))\n", "\\end{align}\n", "$$\n", "Mathematically it can be thought of as the average of the difference of the logarithms of the probabilities assigned by $q$ and $p$ to the states $x$. The KL divergence is smallest when $q(x) = p(x)$ when it is equal to 0, and can grow to be infinitely large which happens wherever $q(x)$ assigns a nonzero probability but $p(x)$ doesn't. In code, we can compute the KL divergence as:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def KL_divergence(q,p):\n", " return np.sum(q * (log_stable(q) - log_stable(p)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we know about the KL divergence, we can express our variational problem of making our approximate posterior $q(x_t ; \\varphi)$ as close as possible to the true posterior as simply minimizing the KL divergence between the two distributions. That is, we can define the optimal approximate distribution as,\n", "$$\n", "\\begin{align}\n", "q^*(x_t ; \\varphi) = \\operatorname{argmin}_{\\varphi} \\, KL[q(x_t ; \\varphi) || p(x_t | o_t)]\n", "\\end{align}\n", "$$\n", "\n", "And then simply try to optimize this objective so as to find the setting of the variational parameters $\\varphi$ that make $q(x_t ; \\varphi)$ as close to $p(x_t |o_t)$ as possible. The trouble with this is that our objective actually explicitly contains the true posterior in it and so, since we can't conpute the true posterior, we can't compute this objective either -- so we are stuck!\n", "\n", "Variational inference provides a clever way to get around this problem by instead minimizing an *upper bound* on this divergence called the *variational free energy*. Importantly this bound is computable so we can actually optimize it and moreover since it is an upper bound, if we minimize it, we can make $q$ as close as possible to the real bound, thus still managing to obtain a good approximate posterior distribution. Deriving the variational free energy is very simple, we first take our initial objective and apply Bayes rule to the true posterior, and then take out the marginal likelihood term separately\n", "\n", "\n", "$$\n", "\\begin{align}\n", " KL[q(x_t ; \\varphi) || p(x_t | o_t)] &= KL[q(x_t ; \\varphi) || \\frac{p(o_t,x_t)}{p(o_t)}] \\\\\n", " &= KL[q(x_t ; \\varphi) || p(o_t, x_t)] + \\sum_x q(x_t ; \\varphi) \\ln p(o_t) \\\\\n", " &= KL[q(x_t ; \\varphi) || p(o_t, x_t)] + \\ln p(o_t) \n", "\\end{align}\n", "$$\n", "\n", "\n", "Where in the final line we have used the fact that the sum is over a different variable than the distribution, and the sum of a probability distribution is $1$ -- i.e $\\sum_x q(x_t ; \\varphi) \\ln p(o_t) = \\ln p(o_t) * \\sum_x q(x_t ; \\varphi)$ and $\\sum_x q(x_t ; \\varphi) = 1$. Specifically, since $ \\ln p(o_t)$ is the log of a probability distribution it is always negative, since the probability of a state is always between 0 and 1. This means that we know that this term we have devised $KL[q(x_t ; \\varphi) || p(o_t, x_t)]$ is always necessarily greater than our original divergence between the approximate posterior and the true posterior, so it is an *upper bound*. We call this term the *variational free energy* and denote it by $\\mathcal{F}$.\n", "$$\n", "\\begin{align}\n", "\\mathcal{F} = KL[q(x_t ; \\varphi) || p(o_t, x_t)]\n", "\\end{align}\n", "$$\n", "\n", "The free energy here is simply the divergence between the approximate posterior and the *generative model* of the agent. Since we know both the approximate posterior (as we defined it in the first place!) and the generative model, then both terms of this divergence are computable. We thus have our algorithm to approximate the posterior! Since the free energy is an upper bound, if we minimize the free energy, we also implicitly minimize the true divergence between the true and approximate posteriors, which will force the approximate posterior to be close to the true posterior and thus a good approximation! Moreover, since we can compute the free energy, we can actually perform this optimization! \n", "\n", "In many cases, we typically perform variational inference by taking the gradients of the free energy with respect to the variational parameteres $\\varphi$ and then doing gradient descent on the parameters $\\varphi$ that define $q(x_t ; \\varphi)$. However, when the distributions are discrete (i.e. Categorical distributions), the parameters of the approximate distribution are simply the probability values for each state (the elements of the vector $q(x)$. For some simple generative models (e.g. the grid-world described here), we can actually solve this optimization problem directly to obtain $q(x)$ in a single step, instead of as a gradient descent." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Directly solving variational inference in the case of a simple discrete model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To recap, remember that we have turned the problem of computing the posterior distribution $p(x_t | o_t)$ into that of minimizing the variational free energy: $\\mathcal{F} = KL[q(x_t) || p(o_t, x_t)]$ with respect to an approximate posterior distribution $q(x_t)$. From now on, we will leave out the variational parameters $\\varphi$ when referring to $q(x_t)$, since we are dealing with a single Categorical distribution $q(x_t)$ whose vector elements are identical to the variational parameters, i.e. $\\forall_{i} \\varphi_i = q(x_t = i)$.\n", "\n", "The optimal distribution is simply that particular $q^*(x_t)$ that minimizes the KL divergence. Now, remember from high-school calculus that we can explicitly compute the minimum of a function by taking its derivative and setting it to 0 (i.e. at the minimum the first derivative of the function is 0) (if you don't remember this from calculus, trust me on this). This means that to solve this problem all we need to do is take the derivative of the free energy and set it to 0 and rearrange. First, let's write out the free energy explicitly.\n", "\n", "\n", "\n", "$$\n", "\\begin{align}\n", "\\mathcal{F} &= KL[q(x_t) || p(o_t, x_t)] \\\\\n", "&= \\sum_x q(x_t)(\\ln q(x_t) - \\ln p(o_t,x_t))\n", "\\end{align}\n", "$$\n", "If we then split the generative model up into a likelihood and a prior, we can write it as,\n", "\n", "$$\n", "\\begin{align}\n", "\\mathcal{F} = \\sum_x q(x_t) \\big[ \\ln q(x_t) - \\ln p(o_t | x_t) - \\ln p(x_t) \\big]\n", "\\end{align}\n", "$$\n", "Recall that we have explicitly defined the observation and transition likelihood distributions as the $\\textbf{A}$ and $\\textbf{B}$ matrices, which play the role of the likelihood and prior distributions, respectively. In particular, we can define the prior over the current timestep $p(x_t)$ to be the \"expected prior\", given the beliefs about the state at the last timesep $q(x_{t-1})$ the beliefs about the transition dynamics and the past action, i.e.:\n", "\n", "$$\n", "\\begin{align}\n", "p(x_t) = \\mathcal{E}_{q(x_{t-1})}\\big[p(x_t | x_{t-1}, a_t) \\big]\n", "\\end{align}\n", "$$\n", "\n", "which can be expressed as a simple matrix vector product\n", "\n", "$$\n", "\\begin{align}\n", "p(x_t) = \\textbf{B}_{a_t}q(x_{t-1})\n", "\\end{align}\n", "$$\n", "\n", "where $\\textbf{B}_{a_t}$ is the component of the $\\textbf{B}$ matrix that is conditioned on action $a_t$. In other words, for this simple Markovian model, we assume that \"yesterday's posterior is today's prior.\" For simplicity, we refer to this entire prior term as $\\textbf{B}$ below, i.e. we temporarily define $\\textbf{B} \\equiv \\textbf{B}_{a_t}q(x_{t-1})$.\n", "\n", "As mentioned above, the posterior beliefs $q(x_t)$ are a vector of probabilities (the variational parameters) which we denote $\\textbf{q} = [q_1, q_2, q_3 \\dots]$. With this all defined, we can write out the free energy as,\n", "\n", "$$\n", "\\begin{align}\n", "\\mathcal{F} = \\sum_x \\textbf{q} * \\big[ \\ln \\textbf{q} - \\ln \\textbf{A} - \\ln \\textbf{B} \\big]\n", "\\end{align}\n", "$$\n", "\n", "\n", "And for fun, we can explicitly compute it in code:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def compute_free_energy(q,A, B):\n", " return np.sum(q * (log_stable(q) - log_stable(A) - log_stable(B)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, all we need to do is take the derivative of the free energy with respect to the approximate posterior distribution $\\textbf{q}$ as follows,\n", "$$\n", "\\begin{align}\n", "\\frac{\\partial \\mathcal{F}}{\\partial \\textbf{q}} = \\ln \\textbf{q} - \\ln \\textbf{A} - \\ln \\textbf{B} - \\textbf{1}\n", "\\end{align}\n", "$$\n", "\n", "Where $\\textbf{1}$ is just a vector of ones of equal length to $\\textbf{q}$ and comes from the $q \\frac{\\partial \\ln q}{\\partial q} = q * \\frac{1}{q} = 1$. Thus, if we set this derivative to 0 and rearrange, we can get,\n", "$$\n", "\\begin{align}\n", "0 &= \\ln \\textbf{q} - \\ln \\textbf{A} - \\ln \\textbf{B} - \\textbf{1} \\\\\n", "&\\implies \\textbf{q}^* = \\sigma(\\ln \\textbf{A} + \\ln \\textbf{B})\n", "\\end{align}\n", "$$\n", "\n", "Where $\\sigma$ is a softmax function $\\sigma(x) = \\frac{e^x}{\\sum_x e^x}$ which ensures that the resulting probability distribution is normalized. This expression lets us compute the optimal approximate posterior instantly as a straightforward function of the current observation $o_t$, $\\textbf{A}$, and $\\textbf{B}$. We can thus quickly right the code for inference:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def softmax(x):\n", " return np.exp(x) / np.sum(np.exp(x))\n", "\n", "def perform_inference(likelihood, prior):\n", " return softmax(log_stable(likelihood) + log_stable(prior))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the likelihood term is not the entire $\\textbf{A}$ matrix, but just the 'row' of the $\\textbf{A}$ matrix corresponding to the current observation, i.e. $P(o_t = o \\mid x_t)$. \n", "\n", "Inference for simple discrete state-space models like these is therefore very simple. All we need to do is have some initial set of beliefs $\\textbf{q}_0$ and then update them according to these rules for every observation we get, using the $\\textbf{A}$, $\\textbf{B}$, the past action $a_t$ and the past posterior $q(x_{t-1})$ to provide the likelihood and prior terms." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Planning through Active Inference" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far we just have an agent that can perform perform inference in the discrete state space, but inference by itself isn't really that useful. Instead what we really want to do is *planning*. That is, the agent needs to be able to figure out how to emit a series of actions which will take it to a certain goal state. A key part of Active Inference is that this process of planning, or more broadly action selection, can also be solved as a process of variational inference. This is why it is called *Active* Inference, after all. \n", "\n", "\n", "\n", "However, when starting to think about this, it is not immediately obvious how to turn planning into an inference problem. What are the hypotheses? What are the observations? To turn the problem of planning into an inference problem, we need to introduce two additional concepts. The first is the idea of a *preferred observations*. To make planning useful, the agent has to *want something*. This is different from just performing objective inference about the state of the world in which there is no goal except to infer correctly. In Active Inference, we define the preferred observations as a separate goal vector denoted $\\textbf{C}$. When performing planning we then modify the generative model of the agent so that it no longer reflects the true distribution of observations in the environment, but rather includes the goal vector, which is a *prior over observations*. We denote this new generative model $\\tilde{p}(o_t, x_t) = p(x_t | o_t)\\tilde{p}(o_t)$ where we use $\\tilde{p}$ to say that this distribution is not a true distribution describing the agent's model of the world, but is instead a *preference distribution*. Here, we set the preference distribution to be over the state of the environment $o_t$ such that $\\tilde{p}(o_t) = \\textbf{C}$.\n", "\n", "By changing the generative model in this way, we have effectively changed the inference problem from: *infer the most likely states and actions given the true generative model of the world* to *infer the most likely states and actions given a false model of the world, in which I achieve my goals*. Perhaps more intuitively, we can think of this inference problem as answering the question: *Given that I have achieved my goals, what actions must have I taken to get there?*.\n", "\n", "The second thing we need to do to perform planning is to also extend the inference problem to *actions in the future*, since these are the fundamental things that the agent controls which it can use to adjust the environment. We call a sequence of future actions from now (time $t$) until some set future time $T$ a *policy* and denote it $\\pi = [a_t, a_{t+1}, a_{t+2} \\dots a_T]$. The goal is then to infer the optimal policy $\\pi^*$ given the preferences $\\textbf{C}$. \n", "\n", "However here there is a problem. Typically we would perform variational inference to solve this inference problem, but the variational free energy is not defined over future trajectories of observations, which are not yet known. Instead, we define a new objective which can handle this -- the *Expected Free Energy (EFE)*, which is defined over policies and which we denote as $\\mathcal{G}(\\pi)$. We define the EFE for a particular timepoint $\\tau$ and policy $\\pi$ as:\n", "\n", "$$\n", "\\begin{align}\n", "\\mathcal{G}(\\pi)_{\\tau} = \\sum_{o_{\\tau}, x_{\\tau}} q(x_{\\tau} | \\pi)q(o_{\\tau} | \\pi) \\big[ \\ln q(x_{\\tau} | \\pi) - \\ln \\tilde{p}(o_{\\tau}, x_{\\tau}) \\big]\n", "\\end{align}\n", "$$\n", "\n", "The expected free energy is defined for a single time-step of a trajectory *in the future*, i.e. prior to receiving any observations. The key difference between the standard variational free energy and the expected free energy is that the expected free energy also averages over the *expected observations* $q(o_{\\tau} | pi)$ and *expected states* $q(x_{\\tau} | \\pi)$, where the expectations are conditioned on some policy $\\pi$. This is necessary because with the expected free energy, we are evaluating possible future trajectories without a given observation, unlike the variational free energy where we can assume that we have already received the observation.\n", "\n", "To get an intuitive handle on what the expected free energy *means* we can decompose it into two more intuitive quantities.\n", "\n", "$$\n", "\\begin{align}\n", "\\mathcal{G}(\\pi)_{\\tau}&= \\sum_{o_{\\tau}, x_{\\tau}} q(x_{\\tau} | \\pi)q(o_{\\tau} | \\pi) \\big[ \\ln q(x_{\\tau} | \\pi) - \\ln \\tilde{p}(o_{\\tau}, x_{\\tau}) \\big] \\\\\n", "&= -\\underbrace{\\sum_{o_{\\tau}, x_{\\tau}} q(x_{\\tau} | \\pi)q(o_{\\tau} | \\pi) \\big[ \\ln p(o_{\\tau} | x_{\\tau}) \\big]}_{\\text{Uncertainty}} + \\underbrace{KL[q(x_{\\tau} | \\pi) || \\tilde{p}(x_{\\tau}) ]}_{\\text{Divergence}}\n", "\\end{align}\n", "$$\n", "\n", "The first term is called *expected uncertainty* or sometimes *novelty* and represents essentially the spread of the observations expected in the future. Since we are choosing actions that *minimize* the whole quantity, we want to take actions that *maximize* novelty. We can think of this as a bonus to aid exploration since active inference agents will preferentially pursue resolveable uncertainty. The second term is the *divergence* term which is the KL divergence between the states expected under a given policy (also known as the posterior predictive density $q(x_\\tau | \\pi)$) and the goal distribution of the generative model, $\\tilde{p}(x)$. This term scores how far away (in an informational sense) the agent expects it will be from the goal, if it were to pursue that policy. Since we are minimizing the expected free energy this term is positive and so is also minimized -- that is by minimizing the expected free energy, we are trying to choose trajectories which will bring the expected states in the future close to the desired states.\n", "\n", "Now that we have the expected free energy to score possible trajectories, we now need to infer the optimal policy. A simple approach (which can be derived explicitly although it is somewhat complex) is to say that the posterior probability of a policy is proportional to the (exponentiated) sum of the expected free energy accumulated along the trajectory through the environment created by that policy. While this sounds complex, mathematically we can express it very simply as,\n", "$$\n", "\\begin{align}\n", "q(\\pi) = \\sigma( \\sum_{\\tau}^T \\mathcal{G}(\\pi)_{\\tau})\n", "\\end{align}\n", "$$\n", "\n", "We can then choose which action we choose for the next timestep by computing the marginal probability of each action $P(a)$, given the posterior over actions $q(\\pi)$ and some mapping between policies and actions $P(a | \\pi)$:\n", "\n", "$$\n", "\\begin{align}\n", "P(a) = \\sum_{\\pi}P(a | \\pi)q(\\pi)\n", "\\end{align}\n", "$$\n", "\n", "We can sample from this distribution over actions to choose our action for the next timestep.\n", "\n", "In our simple grid world environment, policies are identical to actions since we are only planning ahead 1-step in the future, so $\\forall_{i} P(a = i | \\pi = i) = 1$, which implies $P(a) == q(\\pi)$.\n", "\n", "While all this may seem exceptionally long and complex, it results in an algorithm which is actually remarkably simple. The algorithm is:\n", "\n", "1.) There is an agent with a generative model of the environment ($\\textbf{A}$ and $\\textbf{B}$ matrices), some initial set of approximate posterior beliefs $q(x_t | o_t)$ and a desired state vector $\\textbf{C}$. \n", "\n", "2.) The agent receives an observation $o_t$ and computes its posterior beliefs as we did earlier by minimizing the free energy.\n", "\n", "3.) The agent now needs to choose what action to make to achieve its goals. It does this by:\n", "\n", " 3.1.) First creating a set of potential policies to evaluate.\n", " \n", " 3.2.) For each policy in this set, use the generative model to simulate the agent's trajectory in the environment *as if* it had emitted the actions prescribed by the policy\n", " \n", " 3.3.) For each future timestep of each future trajectory, compute the expected free energy of that time-step\n", " \n", " 3.4.) Sum the expected free energies for each timestep of each trajectory to get a total expected free energy for each possible policy.\n", " \n", " 3.5.) Use these total expected free energies to compute the posterior distribution $q(\\pi)$ as done above.\n", "\n", " 3.6 ) Compute the marginal probability of each action, expected under the policies that include them, and then sample from this \"action marginal\" to generate an action at the current timestep.\n", " \n", "4.) Execute the sampled action to 'step forward' the environmental dynamics and get a new observation. Go back to step 1.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And that's it! We're done. We have the full algorithm to create an active inference agent. Now all we do is show how to translate this algorithm into code for our specific case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beliefs\n", "\n", "First we need to setup an initial belief distribution which we will then update according to the observations we will receive." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# setup initial prior beliefs -- uncertain -- completely unknown which state it is in\n", "Qs = np.ones(9) * 1/9\n", "plot_beliefs(Qs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Preferences" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have to encode the agent's preferences, so that it can learn to go to its reward state. In the current context, the agent wants (i.e. expects) to be in the reward location 7." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# C matrix -- desires\n", "\n", "REWARD_LOCATION = 7\n", "reward_state = state_mapping[REWARD_LOCATION]\n", "print(reward_state)\n", "\n", "C = np.zeros(num_states)\n", "C[REWARD_LOCATION] = 1. \n", "print(C)\n", "plot_beliefs(C)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The C matrix is a 1x9 matrix, where each value represents the preference to occupy a given state. We will create a one-hot C matrix, so that the agent only has a preference to be in state 7. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Implementing the Active Inference Agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluate policy \n", "\n", "This helper function we evaluate the negative expected free energy for a given policy $-\\mathcal{G}(\\pi)$. To do this we need to calculate the cumulative expected free energy for that policy. All that entails is looping through the timesteps of the policy, simulate what the environment would do, using our generative model, evolving posterior beliefs and the actions entailed by the policy, and then compute the expected free energy of our (policy-dependent) expectations about the hidden states and observations.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def evaluate_policy(policy, Qs, A, B, C):\n", " # initialize expected free energy at 0\n", " G = 0\n", "\n", " # loop over policy\n", " for t in range(len(policy)):\n", "\n", " # get action entailed by the policy at timestep `t`\n", " u = int(policy[t])\n", "\n", " # work out expected state, given the action\n", " Qs_pi = B[:,:,u].dot(Qs)\n", "\n", " # work out expected observations, given the action\n", " Qo_pi = A.dot(Qs_pi)\n", "\n", " # get entropy\n", " H = - (A * log_stable(A)).sum(axis = 0)\n", "\n", " # get predicted divergence\n", " # divergence = np.sum(Qo_pi * (log_stable(Qo_pi) - log_stable(C)), axis=0)\n", " divergence = KL_divergence(Qo_pi, C)\n", " \n", " # compute the expected uncertainty or ambiguity \n", " uncertainty = H.dot(Qs_pi)\n", "\n", " # increment the expected free energy counter for the policy, using the expected free energy at this timestep\n", " G += (divergence + uncertainty)\n", "\n", " return -G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Infer action\n", "\n", "This helper function will infer the most likely action. Specifically, it computes steps 3.1 to 3.5 in the active inference algorithm. First, it constructs all possible policies for a given policy length and set of actions. Then it loops through every possible policy and computes the expected free energy of that policy using our previous function, and then computing the policy distribution $q(\\pi)$ using the softmax over the expected free energies." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def infer_action(Qs, A, B, C, n_actions, policies):\n", " \n", " # initialize the negative expected free energy\n", " neg_G = np.zeros(len(policies))\n", "\n", " # loop over every possible policy and compute the EFE of each policy\n", " for i, policy in enumerate(policies):\n", " neg_G[i] = evaluate_policy(policy, Qs, A, B, C)\n", "\n", " # get distribution over policies\n", " Q_pi = maths.softmax(neg_G)\n", "\n", " # initialize probabilites of control states (convert from policies to actions)\n", " Qu = np.zeros(n_actions)\n", "\n", " # sum probabilites of control states or actions \n", " for i, policy in enumerate(policies):\n", " # control state specified by policy\n", " u = int(policy[0])\n", " # add probability of policy\n", " Qu[u] += Q_pi[i]\n", "\n", " # normalize action marginal\n", " utils.norm_dist(Qu)\n", "\n", " # sample control from action marginal\n", " u = utils.sample(Qu)\n", "\n", " return u" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Main loop" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we simply implement the main loop of the active inference agent interacting with the environment. Specifically, this essentially implements steps 1-5 of the MDP \"program\" we discussed in notebook 1. Specifically, for each timestep, the agent infers an action, it emits that action to the environment, the environment is updated and returns an observation to the agent. The agent then infers the new state of the environment given that observation." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# number of time steps\n", "T = 10\n", "\n", "#n_actions = env.n_control\n", "n_actions = 5\n", "\n", "# length of policies we consider\n", "policy_len = 4\n", "\n", "# this function generates all possible combinations of policies\n", "policies = control.construct_policies([B.shape[0]], [n_actions], policy_len)\n", "\n", "# reset environment\n", "o = env.reset()\n", "\n", "# loop over time\n", "for t in range(T):\n", "\n", " # infer which action to take\n", " a = infer_action(Qs, A, B, C, n_actions, policies)\n", " \n", " # perform action in the environment and update the environment\n", " o = env.step(int(a))\n", " \n", " # infer new hidden state (this is the same equation as above but with PyMDP functions)\n", " likelihood = A[o,:]\n", " prior = B[:,:,int(a)].dot(Qs)\n", "\n", " Qs = maths.softmax(log_stable(likelihood) + log_stable(prior))\n", " \n", " print(Qs.round(3))\n", " plot_beliefs(Qs, \"Beliefs (Qs) at time {}\".format(t))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And that's it! In the last two notebooks, we have implemented a basic active inference agent which can successfully navigate around a 3x3 gridworld using active inference. Moreover, we have implemented this all from scratch using mostly basic numpy functions and not using much of the functionality of `pymdp`. \n", "\n", "Hopefully after going through this you now understand roughly what active inference is and how it works, as well as ideally have some intuitions about how inference as well as policy selection work \"under the hood\", as well as learnt a lot about Bayesian and specifically variational inference. In the next notebook, we will focus more on the `pymdp` library itself and demonstrate how `pymdp` provides a useful set of abstractions that allows us to easily create active inference agents, as well as perform inference and policy selection in considerably more complex environments than the one described here.\n", "\n", "We will discuss the high level structure of the library and show how its possible to replicate these notebooks in a much smaller amount of code using the `pymdp` abstractions." ] } ], "metadata": { "interpreter": { "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/tmaze_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Active Inference Demo: T-Maze Environment\n", "This demo notebook provides a full walk-through of active inference using the `Agent()` class of `pymdp`. The canonical example used here is the 'T-maze' task, often used in the active inference literature in discussions of epistemic behavior (see, for example, [\"Active Inference and Epistemic Value\"](https://pubmed.ncbi.nlm.nih.gov/25689102/))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pathlib\n", "import copy\n", "\n", "path = pathlib.Path(os.getcwd())\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)\n", "\n", "from pymdp.agent import Agent\n", "from pymdp.utils import plot_beliefs, plot_likelihood\n", "from pymdp import utils\n", "from pymdp.envs import TMazeEnv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Environment\n", "\n", "Here we consider an agent navigating a three-armed 'T-maze,' with the agent starting in a central location of the maze. The bottom arm of the maze contains an informative cue, which signals in which of the two top arms ('Left' or 'Right', the ends of the 'T') a reward is likely to be found. \n", "\n", "At each timestep, the environment is described by the joint occurrence of two qualitatively-different 'kinds' of states (hereafter referred to as _hidden state factors_). These hidden state factors are independent of one another.\n", "\n", "We represent the first hidden state factor (`Location`) as a $ 1 \\ x \\ 4 $ vector that encodes the current position of the agent, and can take the following values: {`CENTER`, `RIGHT ARM`, `LEFT ARM`, or `CUE LOCATION`}. For example, if the agent is in the `CUE LOCATION`, the current state of this factor would be $s_1 = [0 \\ 0 \\ 0 \\ 1]$.\n", "\n", "We represent the second hidden state factor (`Reward Condition`) as a $ 1 \\ x \\ 2 $ vector that encodes the reward condition of the trial: {`Reward on Right`, or `Reward on Left`}. A trial where the condition is reward is `Reward on Left` is thus encoded as the state $s_2 = [0 \\ 1]$.\n", "\n", "The environment is designed such that when the agent is located in the `RIGHT ARM` and the reward condition is `Reward on Right`, the agent has a specified probability $a$ (where $a > 0.5$) of receiving a reward, and a low probability $b = 1 - a$ of receiving a 'loss' (we can think of this as an aversive or unpreferred stimulus). If the agent is in the `LEFT ARM` for the same reward condition, the reward probabilities are swapped, and the agent experiences loss with probability $a$, and reward with lower probability $b = 1 - a$. These reward contingencies are intuitively swapped for the `Reward on Left` condition. \n", "\n", "For instance, we can encode the state of the environment at the first time step in a `Reward on Right` trial with the following pair of hidden state vectors: $s_1 = [1 \\ 0 \\ 0 \\ 0]$, $s_2 = [1 \\ 0]$, where we assume the agent starts sitting in the central location. If the agent moved to the right arm, then the corresponding hidden state vectors would now be $s_1 = [0 \\ 1 \\ 0 \\ 0]$, $s_2 = [1 \\ 0]$. This highlights the _independence_ of the two hidden state factors -- the location of the agent ($s_1$) can change without affecting the identity of the reward condition ($s_2$).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Initialize environment\n", "Now we can initialize the T-maze environment using the built-in `TMazeEnv` class from the `pymdp.envs` module." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose reward probabilities $a$ and $b$, where $a$ and $b$ are the probabilities of reward / loss in the 'correct' arm, and the probabilities of loss / reward in the 'incorrect' arm. Which arm counts as 'correct' vs. 'incorrect' depends on the reward condition (state of the 2nd hidden state factor)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "reward_probabilities = [0.98, 0.02] # probabilities used in the original SPM T-maze demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialize an instance of the T-maze environment" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "env = TMazeEnv(reward_probs = reward_probabilities)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Structure of the state --> outcome mapping\n", "We can 'peer into' the rules encoded by the environment (also known as the _generative process_ ) by looking at the probability distributions that map from hidden states to observations. Following the SPM version of active inference, we refer to this collection of probabilistic relationships as the `A` array. In the case of the true rules of the environment, we refer to this array as `A_gp` (where the suffix `_gp` denotes the generative process). \n", "\n", "It is worth outlining what constitute the agent's observations in this task. In this T-maze demo, we have three sensory channels or observation modalities: `Location`, `Reward`, and `Cue`. \n", "\n", ">The `Location` observation values are identical to the `Location` hidden state values. In this case, the agent always unambiguously observes its own state - if the agent is in `RIGHT ARM`, it receives a `RIGHT ARM` observation in the corresponding modality. This might be analogized to a 'proprioceptive' sense of one's own place.\n", "\n", ">The `Reward` observation modality assumes the values `No Reward`, `Reward` or `Loss`. The `No Reward` (index 0) observation is observed whenever the agent isn't occupying one of the two T-maze arms (the right or left arms). The `Reward` (index 1) and `Loss` (index 2) observations are observed in the right and left arms of the T-maze, with associated probabilities that depend on the reward condition (i.e. on the value of the second hidden state factor).\n", "\n", "> The `Cue` observation modality assumes the values `Cue Right`, `Cue Left`. This observation unambiguously signals the reward condition of the trial, and therefore in which arm the `Reward` observation is more probable. When the agent occupies the other arms, the `Cue` observation will be `Cue Right` or `Cue Left` with equal probability. However (as we'll see below when we intialise the agent), the agent's beliefs about the likelihood mapping render these observations uninformative and irrelevant to state inference.\n", "\n", "In `pymdp`, we store the set of probability distributions encoding the conditional probabilities of observations, under different configurations of hidden states, as a set of matrices referred to as the likelihood mapping or `A` array (this is a convention borrowed from SPM). The likelihood mapping _for a single modality_ is stored as a single matrix `A[i]` with the larger likelihood array, where `i` is the index of the corresponding modality. Each modality-specific A matrix has `n_observations[i]` rows, and as many lagging dimensions (e.g. columns, 'slices' and higher-order dimensions) as there are hidden state factors. `n_observations[i]` tells you the number of observation values for observation modality `i`, and is usually stored as a property of the `Env` class (e.g. `env.n_observations`).\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "A_gp = env.get_likelihood_dist()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUwAAAD9CAYAAADXj047AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAQHklEQVR4nO3de7CdVX3G8e9zDtIoUGiDbZFEpG20UrReGMChFTqFGphR7GgdcBzFOsZpG6dTbxN6QaQ3bKu2dnDKcUq9TcVLW5uOcaitglZBk6mXmlhqxNqEi1AEqiLS6K9/7Ddmc5Jz9jrJSc5K8v3MvDN7v3ud9a694Tz5rXe9+z2pKiRJk00t9QAk6WBhYEpSIwNTkhoZmJLUyMCUpEYGpiQ1MjC115JckuRf9+HnNyc5p7HtfyU5d2+PJS0GA7NTQ0B8O8k3k9yR5G1Jjl7qcbVK8pgkNYz/m8P7WTfepqp+uqquX4RjnZNk+772I01iYPbtmVV1NPAk4MnApUs1kCRH7OWPHje8h+cCv5vkvEUclnRAGZgHgaq6A7iOUXACkOTMJJ9Mcm+Sz+2c2ib5+ST/Ptbuw0k2jj3/eJJnD4/XJflykm8k2ZLkl8baXZLkE0nelORu4PIky5OsT/K/ST4N/MQC3sMmYPOs9/D9aXaShyd5e5J7knwxyWv2UDU+Kcnnk9yX5D1JliU5CvgQ8KixavZRreOSFsLAPAgkWQGcD2wdnp8IfBD4feCHgVcBf5vkkcBNwKokxyd5GPBERmFyTJKHA6cBHx+6/jLwc8CxwOuAdyU5YezQZwC3AD8K/AFwFfAAcALwK8PW+h7OBE7d+R724LXAY4AfB84DXrCHNs8DVgMnD+/rkqr61vDZ3FZVRw/bba3jkhbCwOzbB5J8A9gG3MkoVGAUJhuqakNVfa+qPgxsAi6oqm8DG4GnA08FPgd8AjgLOBP4UlXdDVBV76uq24Y+3gN8CTh97Pi3VdVfVNUO4EHgOcBlVfWtqvoC8PaG9/A/Sb4N3Ai8BfjAHO2eB/xhVd1TVduBN++hzZuH8X4d+EfGqlXpQDAw+/bsqjoGOAf4KeD4Yf9JwC8P0/F7k9wL/Cyjyg/ghuFnnj48vh44e9hu2Nl5khcm+exYH6eOHQNGQb3TI4EjZu37asN7OB44GnjlMKaHzdHuUbP63raHNneMPb5/6Fc6YAzMg0BV3QC8DfjTYdc24J1VddzYdlRVXTm8Pjswb2BWYCY5CXgrsBZYXlXHAV8AMn7oscd3ATuAlWP7Ht04/u9W1RsZTed/bY5mtwMrxp6vnKPdHg+xgLbSXjMwDx5/BpyX5GeAdwHPTPKMJNPD4sc5w7lOgE8Cj2M0vf50VW1mVJWeAXxsaHMUo6C5CyDJixlVmHtUVd8F/o7R4s8jkpwCvGiB7+FK4DVJlu3htfcClyb5oeEc7doF9Ps1YHmSYxc4HmlBDMyDRFXdBbyD0TnEbcCFwG8xCrxtwKsZ/nsOCyH/BmyuqgeHLm4EvlpVdw5ttgBvGPZ/DXgCo3Od81nLaBp8B6OK968X+DY+CNwDvHQPr10BbAe+Avwz8H7gOy2dVtV/AO8GbhlOL7hKrv0i3kBYPUryq8BFVXX2Uo9F2skKU11IckKSs5JMJXkco0Wiv1/qcUnjDEz14kjgauAbwEeAf2B0GZK0V5Jck+TOJF+Y4/UkeXOSrcMXIp4ysU+n5JIORUmeDnwTeEdV7bagmeQC4OXABYwWRP+8qs6Yr08rTEmHpKr6GPD1eZpcyChMq6puAo6b9U233ex2Q4Uka4A1AFdfffVT16xZsw9DlnQYyeQm87s8aZ7yvg5expBVg5mqmlnA4U7koV+Q2D7su32uH9gtMIcD7jyo83VJB8xCpryzsuqAaLpl1+XZ5384DmqXj5/nfeDupRtID5Yt3/XYz+L7D/0dWZza6gB/irfy0G+UrRj2zclzmJK6MbWAbRGsB144rJafCdxXVXNOx6GxwpSkA2ExK7gk72Z0T4Xjh3urvpbh5i9V9ZfABkYr5FsZ3czlxZP6NDAldWN6EfuqqosnvF7Ary+kTwNTUjd6PxNsYErqRu+LKgampG4YmJLUyCm5JDWywpSkRou5Sr4/GJiSumGFKUmNPIcpSY2sMCWpkYEpSY1c9JGkRlaYktTIRR9JamSFKUmNDExJauSUXJIauUouSY2ckktSIwNTkhp5DlOSGllhSlIjA1OSGk1N9T0pNzAldSMxMCWpiRWmJDWywpSkRrHClKQ2U9N9r5MbmJK64ZRckho5JZekRlaYktTIy4okqZEVpiQ1cpVckhr1vujTd5xLOqwkad4a+lqd5OYkW5Os28Prj07y0SSfSfL5JBdM6tPAlNSNTKV5m7efZBq4CjgfOAW4OMkps5r9DvDeqnoycBHwlknjMzAldWMRK8zTga1VdUtVPQhcC1w4q00BPzg8Pha4bVKnnsOU1I2FXFaUZA2wZmzXTFXNDI9PBLaNvbYdOGNWF5cD/5Tk5cBRwLmTjmlgSurGQlbJh3CcmdhwbhcDb6uqNyR5GvDOJKdW1ffm+gEDU1I3FvE6zFuBlWPPVwz7xr0EWA1QVTcmWQYcD9w5V6eew5TUjUy1bxNsBFYlOTnJkYwWddbPavPfwC8AJHk8sAy4a75OrTAldWOxKsyq2pFkLXAdMA1cU1Wbk1wBbKqq9cArgbcm+U1GC0CXVFXN16+BKakbi3nhelVtADbM2nfZ2OMtwFkL6dPAlNSNab8aKUltvPmGJDXq/bvkBqakblhhSlIjK0xJamSFKUmNpo6YXuohzMvAlNQPK0xJauM5TElqlCkvXJekJi76SFIrp+SS1GZq2lVySWrioo8ktTIwJalNGm6lvpQMTEndcEouSY3ioo8ktbHClKRGBqYkNfKbPpLU6lD4Lvnl8/+p3sPLsuVLPYJ++Fl8n78ji6P3KflucZ5kTZJNSTbNzMwsxZgkHaampqebt6WwW4VZVTPAzqT0n01JB0zvFWbbOcwH7t7Pw+jc2NTzys5PSu9v68annvffvnQD6cEjTtj12N+Rxemn898vF30kdePQqDAl6QDwjuuS1MjrMCWpUfwzu5LUxgpTkhq56CNJrawwJalN7xVm32v4kg4vU2nfJkiyOsnNSbYmWTdHm+cl2ZJkc5K/mdSnFaakbizWjDzJNHAVcB6wHdiYZH1VbRlrswq4FDirqu5J8iOT+rXClNSPxaswTwe2VtUtVfUgcC1w4aw2LwWuqqp7AKrqzonD24u3JEn7RbKQbded1YZtzVhXJwLbxp5vH/aNeyzw2CSfSHJTktWTxueUXFI/FjAnn3Vntb1xBLAKOAdYAXwsyROq6t65fsAKU1I/phawze9WYOXY8xXDvnHbgfVV9X9V9RXgPxkF6LzDk6QuZGqqeZtgI7AqyclJjgQuAtbPavMBRtUlSY5nNEW/Zb5OnZJL6sZirZJX1Y4ka4HrgGngmqranOQKYFNVrR9e+8UkW4DvAq+uqnlvbGpgSurHIl64XlUbgA2z9l029riAVwxbEwNTUj/6/qKPgSmpH96tSJIaZdrAlKQ2feelgSmpI07JJalN53lpYErqSOf3wzQwJXXDClOSGvV+x3UDU1I/DExJatT5nNzAlNSNzvPSwJTUkc4T08CU1I10fodeA1NSP1z0kaQ23q1IklpZYUpSIytMSWpkhSlJjaaml3oE8zIwJfXDClOSGnV+IaaBKakfVpiS1MhVcklqNOWUXJLaTLtKLkltnJJLUiMDU5IaeQ5TkhpZYUpSG/9qpCS1cpVckho5JZekRi76SFKjzivMvuNc0uElad8mdpXVSW5OsjXJunnaPSdJJTltUp9WmJL6sUiLPkmmgauA84DtwMYk66tqy6x2xwC/AXyqpV8rTEn9mEr7Nr/Tga1VdUtVPQhcC1y4h3a/B7weeKBpeAt5L5K0X2WqeUuyJsmmsW3NWE8nAtvGnm8f9u06VPIUYGVVfbB1eE7JJfVjAReuV9UMMLM3h0kyBbwRuGQhP2dgSurH4q2S3wqsHHu+Yti30zHAqcD1GR3zx4D1SZ5VVZvm6tTAlNSPxbsOcyOwKsnJjILyIuD5O1+sqvuA43c+T3I98Kr5whIMTEk9WaTArKodSdYC1wHTwDVVtTnJFcCmqlq/N/0amJL6sYh/NbKqNgAbZu27bI6257T0aWBK6kffX/QxMCV1pPOvRhqYkvphYEpSIwNTkhoZmJLUyMCUpEaHRGAuW76fh3HwWFe11EPoxyNOWOoR9MPfkcXReWDudpXo+B1AZmb26nvtkrSXsoDtwNutwpx1BxDLKUkHziHxZ3YfuHs/D6Nz49Ot+29funH0YGwafmXn06f97SGnZ/wdWZx+Ov9/ykUfSR0xMCWpjRWmJDUyMCWpUd95aWBK6sgi3g9zfzAwJfXDKbkkNTIwJalR33lpYErqiBWmJDVy0UeSGllhSlKjzgOz7/pXkjpihSmpH51XmAampH4YmJLUyFVySWpkhSlJjawwJamVFaYktXFKLkmNnJJLUiMDU5Ja9R2YfY9O0uElad8mdpXVSW5OsjXJuj28/ookW5J8Psm/JDlpUp8GpqR+LFJgJpkGrgLOB04BLk5yyqxmnwFOq6onAu8H/njS8AxMSR3JArZ5nQ5srapbqupB4FrgwvEGVfXRqrp/eHoTsGJSpwampH5MTTdvSdYk2TS2rRnr6URg29jz7cO+ubwE+NCk4bnoI6kj7ddhVtUMMLPPR0xeAJwGnD2prYEpqR+Ld1nRrcDKsecrhn0PPVxyLvDbwNlV9Z1JnRqYkrqRxfumz0ZgVZKTGQXlRcDzZx3rycDVwOqqurOlU89hSurI4iz6VNUOYC1wHfBF4L1VtTnJFUmeNTT7E+Bo4H1JPptk/aTRWWFK6sciftOnqjYAG2btu2zs8bkL7dPAlNQPvxopSY0MTElq5e3dJKmN98OUpEZOySWplRWmJLXJ9FKPYF4GpqR+eA5TkhoZmJLUykUfSWpjhSlJjbysSJJaWWFKUhun5JLUyim5JLWxwpSkVgamJLVxlVySGjkll6RWBqYktbHClKRWnsOUpDZWmJLUygpTkprEClOSWhmYktTGClOSWhmYktTGvxopSY2ckktSKwNTktpYYUpSKwNTktpYYUpSo85Xyfv+4qakw0wWsE3oKVmd5OYkW5Os28PrP5DkPcPrn0rymEl9GpiS+pG0b/N2k2ngKuB84BTg4iSnzGr2EuCeqvpJ4E3A6ycOr6rme33eFyVpzL6fgHzg7vbMWbZ8zuMleRpweVU9Y3h+KUBV/dFYm+uGNjcmOQK4A3hkzROKu1WYSdYk2TRs72JhNfIhuyV52VKPoZfNz8LPYo7PYg37atnytG6zsmrTrOOfCGwbe7592Mee2lTVDuA+YPl8w9stMKtqpqpOq6rTgMfvxVs+VO37/wyHDj+LXfwsdjmgn8V4Vg3bzP4+pucwJR2KbgVWjj1fMezbY5thSn4scPd8nRqYkg5FG4FVSU5OciRwEbB+Vpv1wIuGx88FPjLf+UuYfB3mfi9xDyJ+Frv4WeziZ7FLN59FVe1Isha4DpgGrqmqzUmuADZV1Xrgr4B3JtkKfJ1RqM5r0iq5JGnglFySGhmYktTIwJSkRgamJDUyMCWpkYEpSY0MTElq9P+7kcI4n3jwhwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[1][:,:,0],'Reward Right')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[1][:,:,1],'Reward Left')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,3,:],'Cue Mapping')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transition Dynamics\n", "\n", "We represent the dynamics of the environment (e.g. changes in the location of the agent and changes to the reward condition) as conditional probability distributions that encode the likelihood of transitions between the states of a given hidden state factor. These distributions are collected into the so-called `B` array, also known as _transition likelihoods_ or _transition distribution_ . As with the `A` array, we denote the true probabilities describing the environmental dynamics as `B_gp`. Each sub-matrix `B_gp[f]` of the larger array encodes the transition probabilities between state-values of a given hidden state factor with index `f`. These matrices encode dynamics as Markovian transition probabilities, such that the entry $i,j$ of a given matrix encodes the probability of transition to state $i$ at time $t+1$, given state $j$ at $t$. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "B_gp = env.get_transition_dist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, we can inspect the 'dynamics' of the `Reward Condition` factor by indexing into the appropriate sub-matrix of `B_gp`" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUwAAAD9CAYAAADXj047AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAASmklEQVR4nO3df7RlZV3H8ffn3hGnhGAJWjEDgjGapJnKQl2mUEEOLBNTKzB/UOrUWmEtTQvThSO1Iit/trAci0woQV3mGmtcqCmiBjmT+WvGyInEmSF+NAiKioB8+2Pvm4fDvec8l7nM7Oa+X2vtNfvXefazz7nnO9/nefbeJ1WFJGm6mX1dAUn6/8KAKUmNDJiS1MiAKUmNDJiS1MiAKUmNDJj7WJIzk3xyX9cDIMk7kvxBP//kJFdN2PfIJLcmmd17Ndw7kmxNcuKE7R9M8oK9VyMNxX4dMJN8Jcm3+y/2dX1AOHBf12sxkhyQZH2SLyf5Zn9OFyQ56r48blV9oqoePlKPryQ5aWT7V6vqwKr67lIdcyQIz03Vn/Pc8pOX6liTVNWPVdVlfZ3WJ7lobPspVfU3e6MuGpb9OmD2fq6qDgR+AngM8Mp9VZEkK+7Fy94LPB14DnAw8GjgX4GfWcKqDcJIED6w/8wAHj2y7hNz+97L91LaI8shYAJQVdcBl9IFTgCSPCHJPye5Ocnn5pphSX4qyRdG9vtwks0jy59I8ox+/uwk/5nkG0m2Jfn5kf3OTPKpJG9MshtYn+TQJBuTfD3Jp4EfWajOfUZ3MnBaVW2uqjur6paqOr+q/qrf5/C+vJuSbE/y4pHXr0/y7iTv7Ou3NclxI9sfk+Qz/bZLgJUj205MsrOfvxA4EvhAn+n9TpKj+gxwxZ7Wo8UC7+WPJPlokt1J/ifJ3yY5ZOQ1X0ny8iSfT3JLkkuSrOy3HZbkH/rP/qb+M50Zed1JSdYCvwf8Un/en+u3X5bkRf38TJJXJ7kmyQ39OR7cb5t7j16Q5Kt9HV81Ur/jk2zp/xauT/KGxbwn2geqar+dgK8AJ/Xzq4EvAG/ul1cBu4FT6f7jOLlffhDwfcBtwGHA/YDrgV3AQf22bwOH9uX8AnB4X8YvAd8EfrjfdiZwJ/ASYEX/2ouBdwMPAB7Zl/vJBer/R8DHp5zj5cBb6YLdTwA3Aj/db1vfn8epwCxwHnBlv+0A4Brgpf05Phu4A/iDfvuJwM753st++SiggBV7Uo8p51bAMRPey2P6z+3+/ed2OfCmsTp/uv98Hgh8Cfj1ftt5wF/0534/4MlA5vm7WQ9cNFavy4AX9fO/CmwHHgocCLwPuHDsPXp7X99HA98BHtFvvwJ4Xj9/IPCEff2dcZo8LYcM8/1JvgHsAG4AXtOvfy6wqao2VdVdVfVhYAtwalV9G9gMPAV4HPA54FPAk4AnAF+uqt0AVfWeqrq2L+MS4MvA8SPHv7aq/qyq7gRuB54FnFNV36yqLwKT+sIOBf57oY1Jjujr9LtVdVtVfRb4S+D5I7t9sj/H7wIX0n1p6c/jfnQB5o6qem9/zou2h/VYjP97L6vq21W1vao+XFXfqaobgTcAJ4y95i3953MT8AG+18K4A/hh4CH9+X+iqu7NgxV+GXhDVV1dVbfSdfmcPtZl8Nq+vp+j+1uaO/c7gGOSHFZVt1bVlffi+NqLlkPAfEZVHUSXMf0oXdYI8BDgF/om2c1JbgZ+ku5LBPDx/jVP6ecvo/syntAvA5Dk+Uk+O1LGI0eOAV2gnvMguuxodN01E+q+e6Q+8zkcuKmqvjFW3qqR5etG5r8FrOy/zIcDu8aCxKS6TLIn9ViM0feNJD+Y5OIku5J8HbiIu7/38x13rm/0T+gyww8luTrJ2Yusy5zDufv7dg3dZ/yDDXV4IfAw4N+TbE7ytHtZB+0lyyFgAlBVHwfeAfxpv2oHXdPpkJHpAVX1R/328YD5ccYCZpKH0DW3zqJroh8CfBHI6KFH5m+ka1YeMbLuyAnV/ghwfJLVC2y/FnhgkoPGyts1ocw5/w2sSjJa10l1mZR97Uk9FmO8Dn/Yr3tUVf0AXash93jVfAVVfaOqfruqHko3qPayJPMNpE3LOq+l+893zpF0n/H1DXX4clWdATwYeB3w3iQPaKm/9o1lEzB7bwJOTvJoumzk55I8NclskpX9QMdccPpn4OF0zetPV9VWui/G4+n6yqDrhyy6QEiSX6HLMOfVN0ffRzdg8f1JjgUWvJ6vqj4CfBj4+ySPS7IiyUFJfj3Jr1bVjr6e5/X1/3G6rOWihcoccQXdF/s3k9wvyTO5e1fCuOvp+unmq+ee1GNPHATcCtySZBXwitYXJnlakmP6/zBuAb4L3DXPrtcDR80NCM3jXcBLkxyd7pK1PwQu6btgptXhuUkeVFV3ATf3q+ergwZiWQXMvp/rnXR9iDuA0+hGQW+kyzhfQf+eVNU3gc8AW6vq9r6IK4BrquqGfp9twOv79dcDj6Lr65zkLLom2XV0Ge9fT9n/2cAm4BK6L/YXgePosk+AM+gGF64F/h54TR9oJ+rP6Zl0gyk30Q1YvW/CS84DXt13Pbx8nu33qh576LXAY+nel39kcv3HraF7D2+l+/zeWlUfm2e/9/T/7k7ymXm2X0DXJ3s58F90g1svaazDWmBrkluBNwOn9/3nGqi5UUFJ0hTLKsOUpD1hwJS0X0p3C/ENSb64wPYkeUu6Gy0+n+Sx08o0YEraX72Drp94IafQ9WWvAdYBfz6tQAOmpP1SVV1ON6C5kNOAd1bnSuCQJJOue+YeFw4nWUcXbXnb2972uHXr1u1BlSUtI03XwE6yPmkehX4t/Bp9rOptqKoNizjcKu5+M8TOft2Cd9fdI2D2B5w7qEPokvaaxTR5x2LVXtF0a9r67PF/HNpPrB+9DO223fuuIhqWlYcuSTF7OdLs4u533a1myt1p9mFKGoyZRUxLYCPw/H60/AnALVW1YHMcGjNMSdobljKDS/IuuudBHJbu2a6voXtCF1X1F3R30J1K9xCWbwG/Mq1MA6akwVjKH4jqH2wyaXsBv7GYMg2YkgZj6KMlBkxJgzH0QRUDpqTBMGBKUiOb5JLUyAxTkhot5Sj5fcGAKWkwzDAlqZF9mJLUyAxTkhoZMCWpkYM+ktTIDFOSGjnoI0mNzDAlqZEBU5Ia2SSXpEaOkktSI5vkktTIgClJjezDlKRGZpiS1MiAKUmNZmaG3Sg3YEoajMSAKUlNzDAlqZEZpiQ1ihmmJLWZmR32OLkBU9Jg2CSXpEY2ySWpkRmmJDXysiJJamSGKUmNHCWXpEZDH/QZdjiXtKwkaZ4aylqb5Kok25OcPc/2I5N8LMm/Jfl8klOnlWnAlDQYmUnzNLGcZBY4HzgFOBY4I8mxY7u9Gnh3VT0GOB1467T6GTAlDcYSZpjHA9ur6uqquh24GDhtbJ8CfqCfPxi4dlqh9mFKGozFXFaUZB2wbmTVhqra0M+vAnaMbNsJPH6siPXAh5K8BHgAcNK0YxowJQ3GYkbJ++C4YeqOCzsDeEdVvT7JE4ELkzyyqu5a6AUGTEmDsYTXYe4CjhhZXt2vG/VCYC1AVV2RZCVwGHDDQoXahylpMDLTPk2xGViT5OgkB9AN6mwc2+erwM8AJHkEsBK4cVKhZpiSBmOpMsyqujPJWcClwCxwQVVtTXIusKWqNgK/Dbw9yUvpBoDOrKqaVK4BU9JgLOWF61W1Cdg0tu6ckfltwJMWU6YBU9JgzHprpCS18eEbktRo6PeSGzAlDYYZpiQ1MsOUpEZmmJLUaGbF7L6uwkQGTEnDYYYpSW3sw5SkRpnxwnVJauKgjyS1skkuSW1mZh0ll6QmDvpIUisDpiS1ScOj1PclA6akwbBJLkmN4qCPJLUxw5SkRgZMSWrknT6S1Mp7ySWpjU1ySWrkrZGS1MgMU5JaOegjSW3MMCWpkU9cl6RGXocpSY3iz+xKUhszTElq5KCPJLUyw5SkNkPPMIc9hi9peZlJ+zRFkrVJrkqyPcnZC+zzi0m2Jdma5O+mlWmGKWkwlqpFnmQWOB84GdgJbE6ysaq2jeyzBngl8KSq+lqSB08r1wxT0nAsXYZ5PLC9qq6uqtuBi4HTxvZ5MXB+VX0NoKpumFq9e3FKknSfSBYzZV2SLSPTupGiVgE7RpZ39utGPQx4WJJPJbkyydpp9bNJLmk4FtEmr6oNwIY9ONoKYA1wIrAauDzJo6rq5oVeYIYpaThmFjFNtgs4YmR5db9u1E5gY1XdUVX/BfwHXQCdWD1JGoTMzDRPU2wG1iQ5OskBwOnAxrF93k+XXZLkMLom+tWTCrVJLmkwlmqUvKruTHIWcCkwC1xQVVuTnAtsqaqN/bafTbIN+C7wiqraPalcA6ak4VjCC9erahOwaWzdOSPzBbysn5oYMCUNx7Bv9DFgShoOn1YkSY0ya8CUpDbDjpcGTEkDYpNcktoMPF4aMCUNyMCfh2nAlDQYZpiS1GjoT1w3YEoaDgOmJDUaeJvcgClpMAYeLw2YkgZk4BHTgClpMDLwJ/QaMCUNx/4w6LO+6r6uh/4/Wnnovq6B9jNDf1rRPRLg0V9i27BhT35fSJIWael+Zvc+cY8Mc+yX2EwtJe09A88w2/owb5v4MxdaTkaa4esH/setvWfJuu32hz5MSdorZmb3dQ0mMmBKGg4zTElqNPALMQ2YkobDDFOSGg18INGAKWk4ZmySS1KbWUfJJamNTXJJamTAlKRG9mFKUiMzTElq469GSlIrR8klqZFNcklq5KCPJDUaeIY57HAuaXlJ2qepRWVtkquSbE9y9oT9npWkkhw3rUwzTEnDsUSDPklmgfOBk4GdwOYkG6tq29h+BwG/BfxLS7lmmJKGY+l+BO14YHtVXV1VtwMXA6fNs9/vA68Dbmuq3mLORZLuU5lpnkZ/4baf1o2UtArYMbK8s1/3vUMljwWOqKp/bK2eTXJJw7GIC9fHfuF2UZLMAG8AzlzM6wyYkoZj6UbJdwFHjCyv7tfNOQh4JHBZumP+ELAxydOrastChRowJQ3H0l2HuRlYk+RoukB5OvCcuY1VdQtw2NxyksuAl08KlmDAlDQkSxQwq+rOJGcBlwKzwAVVtTXJucCWqtp4b8o1YEoajiX81ciq2gRsGlt3zgL7nthSpgFT0nAM+0YfA6akARn4rZEGTEnDYcCUpEYGTElqZMCUpEYGTElqZMCUpEYGTElqZcCUpDb+zK4kNbJJLkmtDJiS1MYMU5IaGTAlqdGw46UBU9KALOHzMO8LBkxJw2GTXJIaGTAlqdGw46UBU9KAmGFKUiMHfSSpkRmmJDUaeMAcdv4rSQNihilpOAaeYRowJQ2HAVOSGjlKLkmNzDAlqZEZpiS1MsOUpDY2ySWpkU1ySWpkwJSkVsMOmMOunaTlJWmfphaVtUmuSrI9ydnzbH9Zkm1JPp/kn5I8ZFqZBkxJw7FEATPJLHA+cApwLHBGkmPHdvs34Liq+nHgvcAfT6ueAVPSgGQR00THA9ur6uqquh24GDhtdIeq+lhVfatfvBJYPa1QA6ak4ZiZbZ6SrEuyZWRaN1LSKmDHyPLOft1CXgh8cFr1HPSRNCDt12FW1QZgwx4fMXkucBxwwrR9DZiShmPpLivaBRwxsry6X3f3wyUnAa8CTqiq70wr1IApaTCydHf6bAbWJDmaLlCeDjxn7FiPAd4GrK2qG1oKtQ9T0oAszaBPVd0JnAVcCnwJeHdVbU1ybpKn97v9CXAg8J4kn02ycVrtzDAlDccS3ulTVZuATWPrzhmZP2mxZRowJQ2Ht0ZKUiMDpiS18vFuktTG52FKUiOb5JLUygxTktpkdl/XYCIDpqThsA9TkhoZMCWplYM+ktTGDFOSGnlZkSS1MsOUpDY2ySWplU1ySWpjhilJrQyYktTGUXJJamSTXJJaGTAlqY0ZpiS1sg9TktqYYUpSKzNMSWoSM0xJamXAlKQ2ZpiS1MqAKUlt/NVISWpkk1ySWhkwJamNGaYktTJgSlIbM0xJajTwUfJh37gpaZnJIqYpJSVrk1yVZHuSs+fZfv8kl/Tb/yXJUdPKNGBKGo6kfZpYTGaB84FTgGOBM5IcO7bbC4GvVdUxwBuB102tXlVN2j5xoySN2PMOyNt2t8eclYcueLwkTwTWV9VT++VXAlTVeSP7XNrvc0WSFcB1wINqQlC8Rx9mknXAun7xoqp6XvMJaFlIsq6qNuzremhYluTvYkIQnO94fC9WAWwYOf4qYMfItp3A48eK+L99qurOJLcAhwL/s9Ax79Ekr6oNVXVcVR0HPKK18lpW1k3fRcvQXv27GI1V/XSf/yduH6ak/dEu4IiR5dX9unn36ZvkBwO7JxVqwJS0P9oMrElydJIDgNOBjWP7bARe0M8/G/jopP5LmH4dpv1Umo9/F5rPYP4u+j7Js4BLgVnggqramuRcYEtVbQT+CrgwyXbgJrqgOtG0UXJJUs8muSQ1MmBKUiMDpiQ1MmBKUiMDpiQ1MmBKUiMDpiQ1+l/ZPXI+kCzJVgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[1][:,:,0],'Reward Condition Transitions')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above transition array is the 'trivial' identity matrix, meaning that the reward condition doesn't change over time (it's mapped from whatever it's current value is to the same value at the next timestep)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (Controllable-) Transition Dynamics\n", "\n", "Importantly, some hidden state factors are _controllable_ by the agent, meaning that the probability of being in state $i$ at $t+1$ isn't merely a function of the state at $t$, but also of actions (or from the agent's perspective, _control states_ ). So now each transition likelihood encodes conditional probability distributions over states at $t+1$, where the conditioning variables are both the states at $t-1$ _and_ the actions at $t-1$. This extra conditioning on actions is encoded via an optional third dimension to each factor-specific `B` matrix.\n", "\n", "For example, in our case the first hidden state factor (`Location`) is under the control of the agent, which means the corresponding transition likelihoods `B[0]` are index-able by both previous state and action." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,0],'Transition likelihood for \"Move to Center\"')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,1],'Transition likelihood for \"Move to Right Arm\"')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUwAAAD9CAYAAADXj047AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVIklEQVR4nO3df7RlZX3f8ffnXsBRQUyhjYFBIBGzmJguNQQxtpU0aAZTpCtiBEkEf2R0rZC41GowNTiiadWmSRpDIpMECRIFoq0ZkknRVCmNvzqTmLAEi5mMygyo4ChqFATk2z/2vrmHM3Pvec7MucNm5v1aa6+7z/7xnGc/55zv+T772fvcVBWSpMnmHuoKSNLDhQFTkhoZMCWpkQFTkhoZMCWpkQFTkho9LANmkr9Ict4y69+Z5FdX4HnXJ7myn398kn9MMt8/vj7Jy/agzH/aL8m5ST44sq6SPGFW9V+mDpcnecsy69+S5CtJvrTSdTnQJXlGkr/v31v//qGujx5s6oDZv5AL0wNJ7h55fO5KVHJcVZ1eVX/U1+f8JH81tv4VVfXmFa7DrVV1aFV9d4Zl/nFVPXtW5c1CkscDrwHWVNXjZlRm9X+vT3JqP7++/4J45di2r+yXr5/Fc09Rx2W/RBr236MvUOBi4Hf699YHWr80k5zab/vLe/Cck8q+vP+cnZ/k8lmX/3AydcDsX8hDq+pQ4FbgjJFlf7ywXZKDZllRPWQeD+ysqjum3XEP3gOfBV40tuy8fvmB4ljgpj3Y7zzgq+zafg/i53LvzKxL3n/D7Ujyy33X7V1JvifJnyW5M8nX+vnVI/tcn+TNST6a5JtJPpjkyH7dqiRXJtmZ5K4km5N878h+L0tyIvBO4Ol9hntXv/5B2UGSn0+yNclXk2xMctTIukryir4bdFeSS5Kk4XiP6/fd5Q2Y5PuS3Jjktf3jU5J8rC//7xayqt3st0u2DJy2u7olmUvyhiRfSHJHkiuSHD5S1nOT3NTvd33fVgvrnpLkb/o2vxpYtUR9TgM+BBzVt+/lDWV/vn8P3Ah8a8oP6GbgUUl+qC/rh/q6bR6r125fzyS/l+TXx7b90ySv7uePSvL+/v34uSS/tMRxrwPOBV7XH/e1/fIT++O9qz/+505xbKPlvyTJZ/rPxHVJju2X/wPw/cC1/fN+vN/l7/rHL1iivEcDZwG/AJyQ5KSRdQvv05cmuRX4cP8++2iS3+yPZVuSH+uXb+/fT0ue8jqgVdUeT8DngdP6+VOB+4G3AY8AHgkcATwPeBRwGPAnwAdG9r8e+Afgif321wNv7de9HLi233ce+BHgMSP7vayfPx/4q7F6XQ68pZ//t8BXgKf29XoHcMPItgX8GfBYumzqTmDtEse7Hriynz+u3/eg0ToBx9NlROv65UcDO4Hn0H1BPat//M8nHctydQNeAmyl+4AdCvx34N39uicC3+qf62Dgdf22h/TTF4BX9evOAu5baK/dHPOpwI6Rx0uWPfKe+FvgGOCRU7yX1gNXAr8CvK1f9nbg9f3y9ZNeT+DfANuB9I+/B7gbOKpv+78GLurb4PuBbcBPLlGfy0fbpD/WrX39Dunr8U3gB5fY/59e17HlZ/blnAgcBLwB+NjuPlMj74EnTGi7nwO+SPc5uRZ4x8i64/oyrgAeTfc5O5/us/rifp+30PUWL+nb9Nn9sR26N/Fhf5xmPejzAPDGqvpOVd1dVTur6v1V9e2q+ibwa8Azx/Z5V1V9tqruBq4Bntwvv48u4D6hqr5bVX9dVd/YgzqdC1xWVX9TVd+h+wA+PclxI9u8taruqqpbgY+M1GFaa/r931hVG/plPwtsqqpNVfVAVX0I2EIXQFssVbdzgd+oqm1V9Y/9cZ3dZ3QvAP68qj5UVfcBv073Qfkx4BS6D/9vVdV9VfU+xjK4CZYre8FvV9X2/jWd1pXAOUkOBs7uH49a7vX8P3TB4V/3254FfLyqbgd+lO5L6uKqureqtgG/3z9Hi1Povpje2u//Ybovs3OmPL5XAP+5qj5TVfcD/wl48kKWuYfOA66u7nz6e+jeBwePbbO+qr418pp8rqre1e9zNd0X3MX9Z/eDwL3Aig84PtzMOmDeWVX3LDxI8qgkl/bdxm8ANwCPTT+y3Bsdef023ZsS4N3AdcBVSW5P8vbdvAlaHEWXUQHQB5eddJnfpDpM61zgNuB9I8uOBZ7fd33uSnfa4F8B39dY5lJ1e9Bx9fMHAd87vq6qHqDLvI7u191Wffoxsm+r5cpesH2K8h6k/2LYShdI/r6qxsta8vXsj+kqFoPYC4GF8+rH0p1aGH0dfoWuvVocBWzvj3fBF3jwcbc4FvhvI3X4KpA9KAeAJMcAP87icf4p3WmMnxrbdLwdvzwyfzdAVY0v29PPwX5r1gFz/KePXgP8IPC0qnoMXZcJujfI8gV12c+bqmoNXfby79j9Ce1JP7d0O92btHvi7nzPEXSBbdbW03UX3zPypbCdrqv82JHp0VX11r18rgcdF12X/X66D8L4MYcug7iNrut29MK50JF99+h5x8pesLc/gXUF3XvniobnH3893wuc1WdsTwPe3y/fTpdVjb4Oh1XVUpn++DHcDhyTZPQz83imfx9tB14+Vo9HVtXHpixnwc/RfY6vTTd2sI0uYI6fg/RnyWZgpa/DPIzum+quJP8MeGPrjkl+PMkP94HnG3Rd9Ad2s+mXgdVJDlmiqPcCL07y5CSPoMtcPllVn5/iOFrdBzyf7lzRFf2H60rgjCQ/mWQ+3WDWqRkZ/NpD7wVeleT4JIfSHdfVfTfvGuCnkvxEn5W/BvgO8DHg43SB9ZeSHJzkp4GTp3je5cqelavpzqNds5t1y76eVfUpui+tPwCuq6q7+v3+L/DNfkDqkf1r8aQkP7pEHb5Md55zwSfpMvzX9e12KnAGXUa7lIP613thOphukPL1IwNbhyd5/jJljNdj3HnAm+hO1SxMzwOek+SIZfbTHljpgPlbdOe3vgJ8AvifU+z7OLqu7TeAzwD/m66bPu7DdJdhfCnJV8ZXVtVfAr9Kl2l8EfgB2s9bTa2q7gV+mq6rdxldBnImXffvTroM47XsfdtfRtceNwCfA+4BfrGvwy10507fQdf2Z9Bd/nXvSP3Op+sOvoBuwKj1+JYsey+PZ/Q57q6qv9zdOdDG1/M9wGn934X9vkvXS3kyXXstBNXD2b0/BNb0XecP9Md3BnB6v+/vAi+qqv+3zKH8Hl3CsDC9q6r+B93A6FX9aapP92UuZT3wR309fmZ0RZJT6LLtS6rqSyPTRrrTGtOeX9UEC6OJkqQJHpa3RkrSQ8GAKWm/lOSy/iL8Ty+xPkl+O91NEDcmeeqkMg2YkvZXlwNrl1l/OnBCP62jO+e8LAOmpP1SVd1AN7C5lDOBK6rzCbprxJe9Pnp390Gvo4u2XHrppT+ybt26vaiypAPIxOurJ1nf/5JVizd1t0+PBqgNI3fYtTiaB1/Qv6Nf9sWldtglYPZPuPCkDqFL2mem6fKOxap9ou2XZO7ZucLVGLhVI9f/2haL87bF4rxtMZNi9jpFnc5tdHepLVjNhDu3PIcpaTDmpphmYCPwon60/BTg61W1ZHccWjNMSdoHZpnBJXkv3c8THplkB92t2QcDVNU7gU10vxq2le621xdPKtOAKWkw5idv0qyqlr01tP91q1+YpkwDpqTB2MfnMKdmwJQ0GEMfVDFgShoMA6YkNbJLLkmNzDAlqdEsR8lXggFT0mCYYUpSI89hSlIjM0xJamTAlKRGDvpIUiMzTElq5KCPJDUyw5SkRgZMSWpkl1ySGjlKLkmN7JJLUiMDpiQ18hymJDUyw5SkRgZMSWo0NzfsTrkBU9JgJAZMSWpihilJjcwwJalRzDAlqc3c/LDHyQ2YkgbDLrkkNbJLLkmNzDAlqZGXFUlSIzNMSWrkKLkkNRr6oM+ww7mkA0qS5qmhrLVJbkmyNcmFu1n/+CQfSfKpJDcmec6kMg2YkgYjc2meli0nmQcuAU4H1gDnJFkzttkbgGuq6inA2cDvTqqfAVPSYMwwwzwZ2FpV26rqXuAq4MyxbQp4TD9/OHD7pEI9hylpMKa5rCjJOmDdyKINVbWhnz8a2D6ybgfwtLEi1gMfTPKLwKOB0yY9pwFT0mBMM0reB8cNEzdc2jnA5VX1X5M8HXh3kidV1QNL7WDAlDQYM7wO8zbgmJHHq/tlo14KrAWoqo8nWQUcCdyxVKGew5Q0GJlrnybYDJyQ5Pgkh9AN6mwc2+ZW4CcAkpwIrALuXK5QM0xJgzGrDLOq7k9yAXAdMA9cVlU3JbkY2FJVG4HXAL+f5FV0A0DnV1UtV64BU9JgzPLC9araBGwaW3bRyPzNwDOmKdOAKWkw5r01UpLa+OMbktRo6PeSGzAlDcb+kWGuOmKFq/EwYlsssi0W2RYzMfQMc5czrEnWJdmSZMuGDXtzEb0kTWeWv1a0EnbJMMduN1r2miRJmqW5g+Yf6iosq61Lfs/OFa7GwI12t2yLxXnbYnHetphNOfvFOUxJ2geGfg7TgClpMDLnheuS1GT/uKxIkvYFu+SS1GZufn8YJZekfcBBH0lqZcCUpDZp+Cn1h5IBU9Jg2CWXpEZx0EeS2phhSlIjA6YkNfJOH0lq5b3kktTGLrkkNfLWSElqZIYpSa0c9JGkNmaYktTIX1yXpEZehylJjbJf/JtdSdoHzDAlqZGDPpLUygxTktoMPcMc9hi+pAPLXNqnCZKsTXJLkq1JLlxim59JcnOSm5K8Z1KZZpiSBmNWPfIk88AlwLOAHcDmJBur6uaRbU4AXg88o6q+luRfTCrXDFPScMwuwzwZ2FpV26rqXuAq4MyxbX4euKSqvgZQVXdMrN4eHJIkrYhkminrkmwZmdaNFHU0sH3k8Y5+2agnAk9M8tEkn0iydlL97JJLGo4p+uRVtQHYsBfPdhBwAnAqsBq4IckPV9VdS+1ghilpOOammJZ3G3DMyOPV/bJRO4CNVXVfVX0O+CxdAF22epI0CJmba54m2AyckOT4JIcAZwMbx7b5AF12SZIj6bro25Yr1C65pMGY1Sh5Vd2f5ALgOmAeuKyqbkpyMbClqjb2656d5Gbgu8Brq2rncuUaMCUNxwwvXK+qTcCmsWUXjcwX8Op+amLAlDQcw77Rx4ApaTj8tSJJapR5A6YktRl2vDRgShoQu+SS1Gbg8dKAKWlABv57mAZMSYNhhilJjYb+i+sGTEnDYcCUpEYD75MbMCUNxsDjpQFT0oAMPGIaMCUNRgb+C70GTEnDsV8M+qw6YoWr8TBiWyyyLRbZFjMx9F8r2iUBHv1PbBs27M3/F5KkKc3u3+yuiF0yzLH/xFb7tjqSDmgDzzCbuuTrB34QK219LX5v2Ba2xQLbYtFoW+yV/eIcpiTtC3PzD3UNlmXAlDQcZpiS1GjgF2IaMCUNhxmmJDUa+OCZAVPScMzZJZekNvOOkktSG7vkktTIgClJjTyHKUmNzDAlqY3/NVKSWjlKLkmN7JJLUiMHfSSp0cAzzGGHc0kHlqR9mlhU1ia5JcnWJBcus93zklSSkyaVaYYpaThmNOiTZB64BHgWsAPYnGRjVd08tt1hwCuBT7aUa4YpaThm90/QTga2VtW2qroXuAo4czfbvRl4G3BPU/WmORZJWlGZa55G/8NtP60bKeloYPvI4x39ssWnSp4KHFNVf95aPbvkkoZjigvXx/7D7VSSzAG/AZw/zX4GTEnDMbtR8tuAY0Yer+6XLTgMeBJwfbrnfBywMclzq2rLUoUaMCUNx+yuw9wMnJDkeLpAeTbwwoWVVfV14MiFx0muB/7DcsESDJiShmRGAbOq7k9yAXAdMA9cVlU3JbkY2FJVG/ekXAOmpOGY4X+NrKpNwKaxZRctse2pLWUaMCUNx7Bv9DFgShqQgd8aacCUNBwGTElqZMCUpEYGTElqZMCUpEYGTElqZMCUpFYGTElq47/ZlaRGdsklqZUBU5LamGFKUiMDpiQ1Gna8NGBKGpAZ/h7mSjBgShoOu+SS1MiAKUmNhh0vDZiSBsQMU5IaOegjSY3MMCWp0cAD5rDzX0kaEDNMScMx8AwzVbXc+mVXStKIvY52D3z6suaYM/ekl+zz6LpLlzzJuiRbkmzZsGHDvq6PpANZ5tqnh8AuXfKq2gAsREozTEn7zsC75G3nMO/ZucLVGLhVRyzO2xaL87bF4rxtMZtyvA5TklrtDxmmJO0L+0WXXJL2BbvkktTIgClJrYYdMIddO0kHlqR9mlhU1ia5JcnWJBfuZv2rk9yc5MYk/yvJsZPKNGBKGo4ZBcwk88AlwOnAGuCcJGvGNvsUcFJV/UvgfcDbJ1XPgClpQDLFtKyTga1Vta2q7gWuAs4c3aCqPlJV3+4ffgJYPalQA6ak4Zibb55Gb+Pup3UjJR0NbB95vKNftpSXAn8xqXoO+kgakPbrMMdu497zZ0x+FjgJeOakbQ2YkoZjdpcV3QYcM/J4db/swU+XnAb8R+CZVfWdSYUaMCUNRmZ3p89m4IQkx9MFyrOBF44911OAS4G1VXVHS6Gew5Q0ILMZ9Kmq+4ELgOuAzwDXVNVNSS5O8tx+s/8CHAr8SZK/TbJxUu3MMCUNxwzv9KmqTcCmsWUXjcyfNm2ZBkxJw+GtkZLUyIApSa38eTdJauPvYUpSI7vkktTKDFOS2mT+oa7BsgyYkobDc5iS1MiAKUmtHPSRpDZmmJLUyMuKJKmVGaYktbFLLkmt7JJLUhszTElqZcCUpDaOkktSI7vkktTKgClJbcwwJamV5zAlqY0ZpiS1MsOUpCYxw5SkVgZMSWpjhilJrQyYktTG/xopSY3skktSKwOmJLUxw5SkVgZMSWpjhilJjQY+Sj7sGzclHWAyxTShpGRtkluSbE1y4W7WPyLJ1f36TyY5blKZBkxJw5G0T8sWk3ngEuB0YA1wTpI1Y5u9FPhaVT0B+E3gbZOq19YlX3VE02YHBNtikW2xyLaYkZmdwzwZ2FpV2wCSXAWcCdw8ss2ZwPp+/n3A7yRJVdVShe6SYSZZl2RLP13JdDnyfjsleflDXYehTLaFbbFEW6xjb606Iq3TWKzaMvb8RwPbRx7v6Jexu22q6n7g68Cy33y7BMyq2lBVJ1XVScCJe3DI+6u9fzPsP2yLRbbFon3aFqOxqp82rPRzeg5T0v7oNuCYkcer+2W73SbJQcDhwM7lCjVgStofbQZOSHJ8kkOAs4GNY9tsBM7r588CPrzc+UuYPOiz4inuw4htsci2WGRbLBpMW1TV/UkuAK4D5oHLquqmJBcDW6pqI/CHwLuTbAW+ShdUl5UJAVWS1LNLLkmNDJiS1MiAKUmNDJiS1MiAKUmNDJiS1MiAKUmN/j+DksBkhu4D0wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,2],'Transition likelihood for \"Move to Left Arm\"')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(B_gp[0][:,:,3],'Transition likelihood for \"Move to Cue Location\"')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The generative model\n", "Now we can move onto setting up the generative model of the agent - namely, the agent's beliefs about how hidden states give rise to observations, and how hidden states transition among eachother.\n", "\n", "In almost all MDPs, the critical building blocks of this generative model are the agent's representation of the observation likelihood, which we'll refer to as `A_gm`, and its representation of the transition likelihood, or `B_gm`. \n", "\n", "Here, we assume the agent has a veridical representation of the rules of the T-maze (namely, how hidden states cause observations) as well as its ability to control its own movements with certain consequences (i.e. 'noiseless' transitions)." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "A_gm = copy.deepcopy(A_gp) # make a copy of the true observation likelihood to initialize the observation model\n", "B_gm = copy.deepcopy(B_gp) # make a copy of the true transition likelihood to initialize the transition model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note !\n", "It is not necessary, or even in many cases _important_ , that the generative model is a veridical representation of the generative process. This distinction between generative model (essentially, beliefs entertained by the agent and its interaction with the world) and the generative process (the actual dynamical system 'out there' generating sensations) is of crucial importance to the active inference formalism and (in our experience) often overlooked in code.\n", "\n", "It is for notational and computational convenience that we encode the generative process using `A` and `B` matrices. By doing so, it simply puts the rules of the environment in a data structure that can easily be converted into the Markovian-style conditional distributions useful for encoding the agent's generative model.\n", "\n", "Strictly speaking, however, all the generative process needs to do is generate observations and be 'perturbable' by actions. The way in which it does so can be arbitrarily complex, non-linear, and unaccessible by the agent." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing the `Agent()` class\n", "\n", "In `pymdp`, we have abstracted much of the computations required for active inference into the `Agent()` class, a flexible object that can be used to store necessary aspects of the generative model, the agent's instantaneous observations and actions, and perform action / perception using functions like `Agent.infer_states` and `Agent.infer_policies`. \n", "\n", "An instance of `Agent` is straightforwardly initialized with a call to `Agent()` with a list of optional arguments.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our call to `Agent()`, we need to constrain the default behavior with some of our T-Maze-specific needs. For example, we want to make sure that the agent's beliefs about transitions are constrained by the fact that it can only control the `Location` factor - _not_ the `Reward Condition` (which we assumed stationary across an epoch of time). Therefore we specify this using a list of indices that will be passed as the `control_fac_idx` argument of the `Agent()` constructor. \n", "\n", "Each element in the list specifies a hidden state factor (in terms of its index) that is controllable by the agent. Hidden state factors whose indices are _not_ in this list are assumed to be uncontrollable." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "controllable_indices = [0] # this is a list of the indices of the hidden state factors that are controllable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can construct our agent..." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "agent = Agent(A=A_gm, B=B_gm, control_fac_idx=controllable_indices)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can inspect properties (and change) of the agent as we see fit. Let's look at the initial beliefs the agent has about its starting location and reward condition, encoded in the prior over hidden states $P(s)$, known in SPM-lingo as the `D` array." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[1],\"Beliefs about reward condition\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make it so that agent starts with precise and accurate prior beliefs about its starting location." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "agent.D[0] = utils.onehot(0, agent.num_states[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now confirm that our agent knows (i.e. has accurate beliefs about) its initial state by visualizing its priors again." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another thing we want to do in this case is make sure the agent has a 'sense' of reward / loss and thus a motivation to be in the 'correct' arm (the arm that maximizes the probability of getting the reward outcome).\n", "\n", "We can do this by changing the prior beliefs about observations, the `C` array (also known as the _prior preferences_ ). This is represented as a collection of distributions over observations for each modality. It is initialized by default to be all 0s. This means agent has no preference for particular outcomes. Since the second modality (index `1` of the `C` array) is the `Reward` modality, with the index of the `Reward` outcome being `1`, and that of the `Loss` outcome being `2`, we populate the corresponding entries with values whose relative magnitudes encode the preference for one outcome over another (technically, this is encoded directly in terms of relative log-probabilities). \n", "\n", "Our ability to make the agent's prior beliefs that it tends to observe the outcome with index `1` in the `Reward` modality, more often than the outcome with index `2`, is what makes this modality a Reward modality in the first place -- otherwise, it would just be an arbitrary observation with no extrinsic value _per se_. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "agent.C[1][1] = 3.0\n", "agent.C[1][2] = -3.0" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEICAYAAABCnX+uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAATpUlEQVR4nO3dfbBtdX3f8fcHLgbLvYQazOHpwk0EiZRYLUdNaxMPBBtkkhppjNKODGq9NqkG2xCrxUYy0ZjGSTrTqqk0EoJa0MQwGCSj0LAlpoqey6DlSUNQwgUMTyocksYg3/6x1qWb7Tmcfe7e5+77u+f9mtkza6+H3/qutfb+7HV+a+19UlVIktq136wLkCRNxiCXpMYZ5JLUOINckhpnkEtS4wxySWqcQb6PSLKU5Aen1Nb5ST406bJJju7r2n/MZd+R5P4kX9+dda/Q5tlJPjOt9qYpSSU5dtZ1rEWSH03y5VnXoScyyPdSSb6W5G/6IPyrJBcl2bzS/FW1uapu35M1rqaq/rKv6zurzZvkaOAXgROq6rD1r25y/TE6ddZ1rKfRD5uq+tOqOn6WNem7GeR7t5+qqs3APwLmgbeNzpBk0yQrmHT5KToaeKCq7p11IfuScf8aUtsM8gZU1V3AHwMnwuNnSf82yZ8Dfz407th++HuTXJzkviR3JHlbkv36aWcn+bMk/yXJA8D5K6z2wCQfSfJwkuuT/MNdE5IckeRjfftfTfILyzWQZFtf16ahuj6Q5J4kd/VdKfv3Z7VXAUf0f4FclOTAJB9K8kCSbyb5QpK5FdbzliR/0dd6c5KXffcseU+SbyW5NcmPj2zLx5M8mOS2JK8bmnZRkncMPV9IsrMf/iDdh88f9TW/eYXaXte3+2C/niNGZjk9ye19l9K7h47TsUk+3dd8f5KPDLX5Q0mu6tv8cpKfHan5t5NcmeQR4NwkXx8O9CQvS/Klfvj5ST7b7+N7+v30lH7atf0iX+y38RXD+6Cf51lJBv3yNyX55yO1vDfJJ/pjc12SZ+w6IP1r8N4kDyX5P0lOXG4fagxV5WMvfABfA07th7cCNwG/2j8vuuB7GvDUoXHH9sMXA5cDW4BtwFeA1/bTzgYeBd4IbNq1/Mi6zwf+DvgZ4ADgXOCr/fB+wA7gl4GnAD8I3A78xNCyH+qHt/V1beqfXwa8HzgI+H7g88Dr+2kLwM6hGl4P/BHw94D9gZOAg1fYVy8HjuhrewXwCHD4yPb+u77+VwDfAp7WT78WeB9wIPAc4D7glH7aRcA7htYzWuPjx2iFuk4B7qf7i+p7gP8GXDs0vYBr+uN4dH+c/nU/7RLgvH6bDgT+aT/+IOBO4NX98Xtuv44Thmr+FvDCoWX/Anjx0Hp/H3hLP3wS8CN9W9uAW4A3jdR47HL7oN+ftwH/sX8tnAI8DBw/VMsDwPP79j8MXNpP+wm619EhQIBn7TpmPnYjL2ZdgI8VDkwXEkvAN4E7+rAZDu1TRuYv4Fi60Pv2rjd2P+31wKAfPhv4y1XWfT7wuaHn+wH3AD8KvGB0eeCtwO8OLftdQQ7MAX/L0AcHcCZwTT/8eED0z18D/G/g2bux724AXjq0vXcDGZr+eeBVdB+Q3wG2DE17F3BRP3wRkwX5B4DfGHq+me4DctvQMTttaPrPA/+rH74YuAA4aqTNVwB/OjLu/cDbh2q+eGT6O4AL++EtdB90x6xQ85uAy0ZfV8vtg/718HVgv6HplwDnD9XyO0PTTgdu7YdPofvg+pHh5X3s3sOulb3bT1fVIVV1TFX9fFX9zdC0O1dY5lC6M6U7hsbdARw5xrLDHp+nqh4DdtKd9R5D1wXyzV0PujOyZbs9hhzT13XP0HLvpzszX84HgU8Clya5O8lvJDlguRmTnJXkhqF2T6TbD7vcVX169O7ot+UI4MGqenhk2vC+msQRDB2HqlqiO0Nd6VjsqgvgzXRnqp/vuyxe048/BnjByP7/V8DwBeLR4/s/gTOSfA9wBnB9Vd0BkOSZSa7ou18eAn6NJ+671bbvzv71MbwNw9s3fAfSX9N9mFFVfwK8B3gvcG+SC5IcPOZ6NcIgb9dKP1t5P91Z3zFD444G7hpj2WFbdw30/bZH0Z3Z3gl8tf+A2fXYUlWnr9LenXRn5IcOLXdwVf2D5Wauqr+rql+pqhOAfwL8JHDW6HxJjgH+B/AG4Puq6hDgRroQ3OXIJMPPj+635W7gaUm2jEzbta8eoeva2WX0bprV9uPdDB2HJAcB38cTj8XWoeFddVFVX6+q11XVEXR/Ub0v3TWQO4FPj+z/zVX1cyvVVVU30wXsS4B/SRfsu/w2cCtwXFUdTPehPLyvVtu+rbv69Ye24a4V5n+CqvqvVXUScALwTOCXxlyvRhjk+5jqbvX7KPDOJFv6oPv3wFrvCz8pyRnpLlS+iS6EP0fXLfFwkv+Q5KnpLlaemOR5q9R1D/Ap4DeTHJxkvyTPSPKi5eZPcnKSH+4v0j1E9+H02DKzHkQXXPf1y72a/qLwkO8HfiHJAUleTtcfe2VV3UnXffOudBdXnw28lv+/r26guxj5tCSH9fth2F/RXSNYySXAq5M8pz8b/jXguqr62tA8v5Tk7yfZCpwDfKTfjpcnOaqf5xv9Nj4GXAE8M8mr+u05IMnzkjzrSeqALrzPAX6Mro98ly10+3cpyQ8BPzey3JNt43V0Z9lv7utYAH4KuHSVWuhrfkH/V9YjwP9l+eOrMRjk+6Y30r05bgc+Q/cmvnCNbVxO1x/7Dbr+5DP6s+Tv0J0dP4fuAuj9wO8A3ztGm2fRXRS7uW/3D4DDV5j3sH76Q3QX4D5N193yBP3Z5m8Cn6ULnR8G/mxktuuA4/pa3wn8TFU90E87k64v/266i7Fvr6qr+2kfBL5I1xf+KfqQHfIu4G19F8e5y9R2NfCfgI/RXWN4BvDKkdkup7vodwPwCbp+dYDnAdclWQI+DpxTVbf33UD/rG/nbrqui/9MdzH1yVwCvAj4k6q6f2j8uXRn6Q/T/WUzuo3nA7/Xb+PPDk+oqm/TBfdL6Pbt+4CzqurWVWoBOLhf3zfo/lp4AHj3GMtpGXli16EkqTWekUtS4wxySWqcQS5JjTPIJalxM/nBpEMPPbS2bds2i1XvcY888ggHHXTQrMvQmDxe7dlIx2zHjh33V9XTR8fPJMi3bdvG4uLiLFa9xw0GAxYWFmZdhsbk8WrPRjpmSe5YbrxdK5LUOINckhpnkEtS4wxySWqcQS5JjZs4yPtfjft8ki/2v5v8K9MoTJI0nmncfvi3dP+tZqn/ScrPJPnjqvrcFNqWJK1i4iDv//PKUv/0gP7hTypK0h4ylS8E9T/+v4Puf0a+t6quW2ae7cB2gLm5OQaDwTRWvddbWlraMNu6koWTT551CWNbmHUBazS45ppZlzBzvsem/HvkSQ6h+3H+N1bVjSvNNz8/X36zcwPJuP85TGvm/xPYUO+xJDuqan50/FTvWqmqbwLXAKdNs11J0sqmcdfK0/szcZI8FXgx3T9zlSTtAdPoIz+c7n/67U/3wfDRqrpiCu1KksYwjbtWvgQ8dwq1SJJ2g9/slKTGGeSS1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNW7iIE+yNck1SW5OclOSc6ZRmCRpPJum0MajwC9W1fVJtgA7klxVVTdPoW1J0iomPiOvqnuq6vp++GHgFuDISduVJI1nGmfkj0uyDXgucN0y07YD2wHm5uYYDAbTXPVea2lpacNs60oWZl3APmyjv7bA9xhAqmo6DSWbgU8D76yqP3yyeefn52txcXEq693bDQYDFhYWZl3GbCWzrmDfNaX3b8s20nssyY6qmh8dP5W7VpIcAHwM+PBqIS5Jmq5p3LUS4APALVX1W5OXJElai2mckb8QeBVwSpIb+sfpU2hXkjSGiS92VtVnADtBJWlG/GanJDXOIJekxhnkktQ4g1ySGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TGGeSS1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcVMJ8iQXJrk3yY3TaE+SNL5pnZFfBJw2pbYkSWswlSCvqmuBB6fRliRpbTbtqRUl2Q5sB5ibm2MwGOypVc/U0tLShtnWlSzMuoB92EZ/bYHvMYBU1XQaSrYBV1TViavNOz8/X4uLi1NZ795uMBiwsLAw6zJmK5l1BfuuKb1/W7aR3mNJdlTV/Oh471qRpMYZ5JLUuGndfngJ8Fng+CQ7k7x2Gu1KklY3lYudVXXmNNqRJK2dXSuS1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TGTSXIk5yW5MtJbkvylmm0KUkaz8RBnmR/4L3AS4ATgDOTnDBpu5Kk8UzjjPz5wG1VdXtVfRu4FHjpFNqVJI1h0xTaOBK4c+j5TuAFozMl2Q5sB5ibm2MwGExh1Xu/paWlDbOtK7rmmllXMLalpSU2b9486zLGt06vrYWTT16XdtfDwqwLWKPBOrwfphHkY6mqC4ALAObn52thYWFPrXqmBoMBG2Vb9wUeL6239Xh9TaNr5S5g69Dzo/pxkqQ9YBpB/gXguCQ/kOQpwCuBj0+hXUnSGCbuWqmqR5O8AfgksD9wYVXdNHFlkqSxTKWPvKquBK6cRluSpLXxm52S1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TGTRTkSV6e5KYkjyWZn1ZRkqTxTXpGfiNwBnDtFGqRJO2GTZMsXFW3ACSZTjWSpDWbKMjXIsl2YDvA3Nwcg8FgT616ppaWljbMtu4LPF6dhVkXsA9bj9dXqurJZ0iuBg5bZtJ5VXV5P88AOLeqFsdZ6fz8fC0ujjVr8waDAQsLC7MuQ2PyePX8K3v9rJK5TybJjqr6ruuRq56RV9Wpu71WSdK68/ZDSWrcpLcfvizJTuAfA59I8snplCVJGtekd61cBlw2pVokSbvBrhVJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TGGeSS1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1LjJgryJO9OcmuSLyW5LMkhU6pLkjSmSc/IrwJOrKpnA18B3jp5SZKktZgoyKvqU1X1aP/0c8BRk5ckSVqLTVNs6zXAR1aamGQ7sB1gbm6OwWAwxVXvvZaWljbMtu4LPF6dhVkXsA9bj9dXqurJZ0iuBg5bZtJ5VXV5P895wDxwRq3WIDA/P1+Li4u7UW57BoMBCwsLsy5DY/J49ZJZV7DvWj0iV5RkR1XNj45f9Yy8qk5dpeGzgZ8EfnycEJckTddEXStJTgPeDLyoqv56OiVJktZi0rtW3gNsAa5KckOS/z6FmiRJazDRGXlVHTutQiRJu8dvdkpS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TGGeSS1DiDXJIaZ5BLUuMMcklqnEEuSY0zyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMYZ5JLUOINckho3UZAn+dUkX0pyQ5JPJTliWoVJksYz6Rn5u6vq2VX1HOAK4JcnL0mStBYTBXlVPTT09CCgJitHkrRWqZose5O8EzgL+BZwclXdt8J824HtAHNzcyddeumlE623FUtLS2zevHnWZWhMHq/2bKRjdvLJJ++oqvnR8asGeZKrgcOWmXReVV0+NN9bgQOr6u2rFTM/P1+Li4urV70PGAwGLCwszLoMjcnj1Z6NdMySLBvkm1ZbsKpOHXMdHwauBFYNcknS9Ex618pxQ09fCtw6WTmSpLVa9Yx8Fb+e5HjgMeAO4N9MXpIkaS0mCvKq+hfTKkSStHv8ZqckNc4gl6TGGeSS1DiDXJIaN/E3O3drpcl9dHe5bASHAvfPugiNzePVno10zI6pqqePjpxJkG8kSRaX+yaW9k4er/Z4zOxakaTmGeSS1DiDfP1dMOsCtCYer/Zs+GNmH7kkNc4zcklqnEEuSY0zyNdJktOSfDnJbUneMut69OSSXJjk3iQ3zroWjSfJ1iTXJLk5yU1Jzpl1TbNiH/k6SLI/8BXgxcBO4AvAmVV180wL04qS/BiwBFxcVSfOuh6tLsnhwOFVdX2SLcAO4Kc34vvMM/L18Xzgtqq6vaq+DVxK9483tJeqqmuBB2ddh8ZXVfdU1fX98MPALcCRs61qNgzy9XEkcOfQ851s0BeYtCck2QY8F7huxqXMhEEuqWlJNgMfA95UVQ/Nup5ZMMjXx13A1qHnR/XjJE1RkgPoQvzDVfWHs65nVgzy9fEF4LgkP5DkKcArgY/PuCZpn5IkwAeAW6rqt2ZdzywZ5Ougqh4F3gB8ku4CzEer6qbZVqUnk+QS4LPA8Ul2JnntrGvSql4IvAo4JckN/eP0WRc1C95+KEmN84xckhpnkEtS4wxySWqcQS5JjTPIJalxBrkkNc4gl6TG/T9rPdkpWKXk+wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(agent.C[1],\"Prior beliefs about observations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Active Inference\n", "Now we can start off the T-maze with an initial observation and run active inference via a loop over a desired time interval." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " === Starting experiment === \n", " Reward condition: Left, Observation: [CENTER, No reward, Cue Left]\n", "[Step 0] Action: [Move to CUE LOCATION]\n", "[Step 0] Observation: [CUE LOCATION, No reward, Cue Left]\n", "[Step 1] Action: [Move to LEFT ARM]\n", "[Step 1] Observation: [LEFT ARM, Reward!, Cue Left]\n", "[Step 2] Action: [Move to LEFT ARM]\n", "[Step 2] Observation: [LEFT ARM, Reward!, Cue Right]\n", "[Step 3] Action: [Move to LEFT ARM]\n", "[Step 3] Observation: [LEFT ARM, Reward!, Cue Right]\n", "[Step 4] Action: [Move to LEFT ARM]\n", "[Step 4] Observation: [LEFT ARM, Reward!, Cue Right]\n" ] } ], "source": [ "T = 5 # number of timesteps\n", "\n", "obs = env.reset() # reset the environment and get an initial observation\n", "\n", "# these are useful for displaying read-outs during the loop over time\n", "reward_conditions = [\"Right\", \"Left\"]\n", "location_observations = ['CENTER','RIGHT ARM','LEFT ARM','CUE LOCATION']\n", "reward_observations = ['No reward','Reward!','Loss!']\n", "cue_observations = ['Cue Right','Cue Left']\n", "msg = \"\"\" === Starting experiment === \\n Reward condition: {}, Observation: [{}, {}, {}]\"\"\"\n", "print(msg.format(reward_conditions[env.reward_condition], location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))\n", "\n", "for t in range(T):\n", " qx = agent.infer_states(obs)\n", "\n", " q_pi, efe = agent.infer_policies()\n", "\n", " action = agent.sample_action()\n", "\n", " msg = \"\"\"[Step {}] Action: [Move to {}]\"\"\"\n", " print(msg.format(t, location_observations[int(action[0])]))\n", "\n", " obs = env.step(action)\n", "\n", " msg = \"\"\"[Step {}] Observation: [{}, {}, {}]\"\"\"\n", " print(msg.format(t, location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent begins by moving to the `CUE LOCATION` to resolve its uncertainty about the reward condition - this is because it knows it will get an informative cue in this location, which will signal the true reward condition unambiguously. At the beginning of the next timestep, the agent then uses this observaiton to update its posterior beliefs about states `qx[1]` to reflect the true reward condition. Having resolved its uncertainty about the reward condition, the agent then moves to `RIGHT ARM` to maximize utility and continues to do so, given its (correct) beliefs about the reward condition and the mapping between hidden states and reward observations. \n", "\n", "Notice, perhaps confusingly, that the agent continues to receive observations in the 3rd modality (i.e. samples from `A_gp[2]`). These are observations of the form `Cue Right` or `Cue Left`. However, these 'cue' observations are random and totally umambiguous unless the agent is in the `CUE LOCATION` - this is reflected by totally entropic distributions in the corresponding columns of `A_gp[2]` (and the agents beliefs about this ambiguity, reflected in `A_gm[2]`. See below." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,:,0],'Cue Observations when condition is Reward on Right, for Different Locations')" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gp[2][:,:,1],'Cue Observations when condition is Reward on Left, for Different Locations')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final column on the right side of these matrices represents the distribution over cue observations, conditioned on the agent being in `CUE LOCATION` and the appropriate Reward Condition. This demonstrates that cue observations are uninformative / lacking epistemic value for the agent, _unless_ they are in `CUE LOCATION.`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can inspect the agent's final beliefs about the reward condition characterizing the 'trial,' having undergone 10 timesteps of active inference." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_beliefs(qx[1],\"Final posterior beliefs about reward condition\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.8 ('base')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "70b7ceca5df5387258d861d4588082cea9500e731be001548c95afd8cd8c3af8" } } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/legacy/tmaze_learning_demo.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo: T-Maze Environment + Learning\n", "This notebook gives a step-by-step demonstration of active inference and learning using the `Agent()` class of `pymdp` and the `TMazeEnv` environment.\n", "\n", "For a thorough introduction to the basic `TMazeEnv` used here and active inference _without learning_ in that environment, please see the main `tmaze_demo.ipynb` notebook.\n", "\n", "In this particular case, we assume that the contingencies describing the 'rules' of the T-Maze are unknown to the agent, and must be learned. This demo therefore requires understanding the distinction between the agent's _generative model_ and the _generative process_ (the actual rules governing world dynamics).\n", "\n", "'Learning' under active inference corresponds to updating posterior beliefs about the sufficient statistics of distributions that parameterize the so-called 'structure' of the generative model. In the case of the Categorical distributions used to represent beliefs about states and outcomes in the discrete space-and-time MDPs used in `pymdp`, these structural parameters correspond to prior beliefs about the sensory and transition likelihoods and priors (the `A`, `B`, `C`, and `D` arrays) of the generative model. \n", "\n", "In the following exercise, we consider the case when an active inference agent needs to learn how sensory cues (the equivalent of a 'conditioned stimulus' or CS in learning theory) indicate the probability of receiving a reward in the two arms of a T-Maze." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports|\n", "\n", "First, import `pymdp` and the modules we'll need." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pathlib\n", "import numpy as np\n", "import copy\n", "\n", "path = pathlib.Path(os.getcwd())\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)\n", "\n", "from pymdp.agent import Agent\n", "from pymdp.utils import plot_likelihood\n", "from pymdp import utils\n", "from pymdp.envs import TMazeEnvNullOutcome" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "reward_probabilities = [0.85, 0.15] # the 'true' reward probabilities \n", "env = TMazeEnvNullOutcome(reward_probs = reward_probabilities)\n", "A_gp = env.get_likelihood_dist()\n", "B_gp = env.get_transition_dist()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "pA = utils.dirichlet_like(A_gp, scale = 1e16)\n", "\n", "pA[1][1:,1:3,:] = 1.0\n", "\n", "A_gm = utils.norm_dist_obj_arr(pA) " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gm[1][:,:,0],'Initial beliefs about reward mapping')\n", "plot_likelihood(A_gp[1][:,:,0],'True reward mapping in RIGHT ARM (Condition 0)')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(A_gm[2][:,:,0],'Initial beliefs about cue mapping')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "B_gm = copy.deepcopy(B_gp)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "controllable_indices = [0] # this is a list of the indices of the hidden state factors that are controllable\n", "learnable_modalities = [1] # this is a list of the modalities that you want to be learn-able " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "agent = Agent(A=A_gm,pA=pA,B=B_gm,\n", " control_fac_idx=controllable_indices,\n", " modalities_to_learn=learnable_modalities,\n", " lr_pA = 0.25,\n", " use_param_info_gain=True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "agent.D[0] = utils.onehot(0, agent.num_states[0])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "agent.C[1][1] = 2.0\n", "agent.C[1][2] = -2.0" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " === Starting experiment === \n", " Reward condition: Left arm Better, Observation: [CENTER, No reward, Null]\n", "[Step 0] Action: [Move to CUE LOCATION]\n", "[Step 0] Observation: [CUE LOCATION, No reward, Cue Left]\n", "[Step 1] Action: [Move to RIGHT ARM]\n", "[Step 1] Observation: [RIGHT ARM, Loss!, Null]\n", "[Step 2] Action: [Move to RIGHT ARM]\n", "[Step 2] Observation: [RIGHT ARM, Loss!, Null]\n", "[Step 3] Action: [Move to LEFT ARM]\n", "[Step 3] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 4] Action: [Move to LEFT ARM]\n", "[Step 4] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 5] Action: [Move to LEFT ARM]\n", "[Step 5] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 6] Action: [Move to LEFT ARM]\n", "[Step 6] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 7] Action: [Move to LEFT ARM]\n", "[Step 7] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 8] Action: [Move to LEFT ARM]\n", "[Step 8] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 9] Action: [Move to LEFT ARM]\n", "[Step 9] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 10] Action: [Move to LEFT ARM]\n", "[Step 10] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 11] Action: [Move to LEFT ARM]\n", "[Step 11] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 12] Action: [Move to LEFT ARM]\n", "[Step 12] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 13] Action: [Move to LEFT ARM]\n", "[Step 13] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 14] Action: [Move to LEFT ARM]\n", "[Step 14] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 15] Action: [Move to LEFT ARM]\n", "[Step 15] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 16] Action: [Move to LEFT ARM]\n", "[Step 16] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 17] Action: [Move to LEFT ARM]\n", "[Step 17] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 18] Action: [Move to LEFT ARM]\n", "[Step 18] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 19] Action: [Move to LEFT ARM]\n", "[Step 19] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 20] Action: [Move to LEFT ARM]\n", "[Step 20] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 21] Action: [Move to LEFT ARM]\n", "[Step 21] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 22] Action: [Move to LEFT ARM]\n", "[Step 22] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 23] Action: [Move to LEFT ARM]\n", "[Step 23] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 24] Action: [Move to LEFT ARM]\n", "[Step 24] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 25] Action: [Move to LEFT ARM]\n", "[Step 25] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 26] Action: [Move to LEFT ARM]\n", "[Step 26] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 27] Action: [Move to LEFT ARM]\n", "[Step 27] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 28] Action: [Move to LEFT ARM]\n", "[Step 28] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 29] Action: [Move to LEFT ARM]\n", "[Step 29] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 30] Action: [Move to LEFT ARM]\n", "[Step 30] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 31] Action: [Move to LEFT ARM]\n", "[Step 31] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 32] Action: [Move to LEFT ARM]\n", "[Step 32] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 33] Action: [Move to LEFT ARM]\n", "[Step 33] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 34] Action: [Move to LEFT ARM]\n", "[Step 34] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 35] Action: [Move to LEFT ARM]\n", "[Step 35] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 36] Action: [Move to LEFT ARM]\n", "[Step 36] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 37] Action: [Move to LEFT ARM]\n", "[Step 37] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 38] Action: [Move to LEFT ARM]\n", "[Step 38] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 39] Action: [Move to LEFT ARM]\n", "[Step 39] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 40] Action: [Move to LEFT ARM]\n", "[Step 40] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 41] Action: [Move to LEFT ARM]\n", "[Step 41] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 42] Action: [Move to LEFT ARM]\n", "[Step 42] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 43] Action: [Move to LEFT ARM]\n", "[Step 43] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 44] Action: [Move to LEFT ARM]\n", "[Step 44] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 45] Action: [Move to LEFT ARM]\n", "[Step 45] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 46] Action: [Move to LEFT ARM]\n", "[Step 46] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 47] Action: [Move to LEFT ARM]\n", "[Step 47] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 48] Action: [Move to LEFT ARM]\n", "[Step 48] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 49] Action: [Move to LEFT ARM]\n", "[Step 49] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 50] Action: [Move to LEFT ARM]\n", "[Step 50] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 51] Action: [Move to LEFT ARM]\n", "[Step 51] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 52] Action: [Move to LEFT ARM]\n", "[Step 52] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 53] Action: [Move to LEFT ARM]\n", "[Step 53] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 54] Action: [Move to LEFT ARM]\n", "[Step 54] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 55] Action: [Move to LEFT ARM]\n", "[Step 55] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 56] Action: [Move to LEFT ARM]\n", "[Step 56] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 57] Action: [Move to LEFT ARM]\n", "[Step 57] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 58] Action: [Move to LEFT ARM]\n", "[Step 58] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 59] Action: [Move to LEFT ARM]\n", "[Step 59] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 60] Action: [Move to LEFT ARM]\n", "[Step 60] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 61] Action: [Move to LEFT ARM]\n", "[Step 61] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 62] Action: [Move to LEFT ARM]\n", "[Step 62] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 63] Action: [Move to LEFT ARM]\n", "[Step 63] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 64] Action: [Move to LEFT ARM]\n", "[Step 64] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 65] Action: [Move to LEFT ARM]\n", "[Step 65] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 66] Action: [Move to LEFT ARM]\n", "[Step 66] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 67] Action: [Move to LEFT ARM]\n", "[Step 67] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 68] Action: [Move to LEFT ARM]\n", "[Step 68] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 69] Action: [Move to LEFT ARM]\n", "[Step 69] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 70] Action: [Move to LEFT ARM]\n", "[Step 70] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 71] Action: [Move to LEFT ARM]\n", "[Step 71] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 72] Action: [Move to LEFT ARM]\n", "[Step 72] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 73] Action: [Move to LEFT ARM]\n", "[Step 73] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 74] Action: [Move to LEFT ARM]\n", "[Step 74] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 75] Action: [Move to LEFT ARM]\n", "[Step 75] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 76] Action: [Move to LEFT ARM]\n", "[Step 76] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 77] Action: [Move to LEFT ARM]\n", "[Step 77] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 78] Action: [Move to LEFT ARM]\n", "[Step 78] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 79] Action: [Move to LEFT ARM]\n", "[Step 79] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 80] Action: [Move to LEFT ARM]\n", "[Step 80] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 81] Action: [Move to LEFT ARM]\n", "[Step 81] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 82] Action: [Move to LEFT ARM]\n", "[Step 82] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 83] Action: [Move to LEFT ARM]\n", "[Step 83] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 84] Action: [Move to LEFT ARM]\n", "[Step 84] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 85] Action: [Move to LEFT ARM]\n", "[Step 85] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 86] Action: [Move to LEFT ARM]\n", "[Step 86] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 87] Action: [Move to LEFT ARM]\n", "[Step 87] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 88] Action: [Move to LEFT ARM]\n", "[Step 88] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 89] Action: [Move to LEFT ARM]\n", "[Step 89] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 90] Action: [Move to LEFT ARM]\n", "[Step 90] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 91] Action: [Move to LEFT ARM]\n", "[Step 91] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 92] Action: [Move to LEFT ARM]\n", "[Step 92] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 93] Action: [Move to LEFT ARM]\n", "[Step 93] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 94] Action: [Move to LEFT ARM]\n", "[Step 94] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 95] Action: [Move to LEFT ARM]\n", "[Step 95] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 96] Action: [Move to LEFT ARM]\n", "[Step 96] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 97] Action: [Move to LEFT ARM]\n", "[Step 97] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 98] Action: [Move to LEFT ARM]\n", "[Step 98] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 99] Action: [Move to LEFT ARM]\n", "[Step 99] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 100] Action: [Move to LEFT ARM]\n", "[Step 100] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 101] Action: [Move to LEFT ARM]\n", "[Step 101] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 102] Action: [Move to LEFT ARM]\n", "[Step 102] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 103] Action: [Move to LEFT ARM]\n", "[Step 103] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 104] Action: [Move to LEFT ARM]\n", "[Step 104] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 105] Action: [Move to LEFT ARM]\n", "[Step 105] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 106] Action: [Move to LEFT ARM]\n", "[Step 106] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 107] Action: [Move to LEFT ARM]\n", "[Step 107] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 108] Action: [Move to LEFT ARM]\n", "[Step 108] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 109] Action: [Move to LEFT ARM]\n", "[Step 109] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 110] Action: [Move to LEFT ARM]\n", "[Step 110] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 111] Action: [Move to LEFT ARM]\n", "[Step 111] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 112] Action: [Move to LEFT ARM]\n", "[Step 112] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 113] Action: [Move to LEFT ARM]\n", "[Step 113] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 114] Action: [Move to LEFT ARM]\n", "[Step 114] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 115] Action: [Move to LEFT ARM]\n", "[Step 115] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 116] Action: [Move to LEFT ARM]\n", "[Step 116] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 117] Action: [Move to LEFT ARM]\n", "[Step 117] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 118] Action: [Move to LEFT ARM]\n", "[Step 118] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 119] Action: [Move to LEFT ARM]\n", "[Step 119] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 120] Action: [Move to LEFT ARM]\n", "[Step 120] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 121] Action: [Move to LEFT ARM]\n", "[Step 121] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 122] Action: [Move to LEFT ARM]\n", "[Step 122] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 123] Action: [Move to LEFT ARM]\n", "[Step 123] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 124] Action: [Move to LEFT ARM]\n", "[Step 124] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 125] Action: [Move to LEFT ARM]\n", "[Step 125] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 126] Action: [Move to LEFT ARM]\n", "[Step 126] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 127] Action: [Move to LEFT ARM]\n", "[Step 127] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 128] Action: [Move to LEFT ARM]\n", "[Step 128] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 129] Action: [Move to LEFT ARM]\n", "[Step 129] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 130] Action: [Move to LEFT ARM]\n", "[Step 130] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 131] Action: [Move to LEFT ARM]\n", "[Step 131] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 132] Action: [Move to LEFT ARM]\n", "[Step 132] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 133] Action: [Move to LEFT ARM]\n", "[Step 133] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 134] Action: [Move to LEFT ARM]\n", "[Step 134] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 135] Action: [Move to LEFT ARM]\n", "[Step 135] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 136] Action: [Move to LEFT ARM]\n", "[Step 136] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 137] Action: [Move to LEFT ARM]\n", "[Step 137] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 138] Action: [Move to LEFT ARM]\n", "[Step 138] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 139] Action: [Move to LEFT ARM]\n", "[Step 139] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 140] Action: [Move to LEFT ARM]\n", "[Step 140] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 141] Action: [Move to LEFT ARM]\n", "[Step 141] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 142] Action: [Move to LEFT ARM]\n", "[Step 142] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 143] Action: [Move to LEFT ARM]\n", "[Step 143] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 144] Action: [Move to LEFT ARM]\n", "[Step 144] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 145] Action: [Move to LEFT ARM]\n", "[Step 145] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 146] Action: [Move to LEFT ARM]\n", "[Step 146] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 147] Action: [Move to LEFT ARM]\n", "[Step 147] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 148] Action: [Move to LEFT ARM]\n", "[Step 148] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 149] Action: [Move to LEFT ARM]\n", "[Step 149] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 150] Action: [Move to LEFT ARM]\n", "[Step 150] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 151] Action: [Move to LEFT ARM]\n", "[Step 151] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 152] Action: [Move to LEFT ARM]\n", "[Step 152] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 153] Action: [Move to LEFT ARM]\n", "[Step 153] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 154] Action: [Move to LEFT ARM]\n", "[Step 154] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 155] Action: [Move to LEFT ARM]\n", "[Step 155] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 156] Action: [Move to LEFT ARM]\n", "[Step 156] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 157] Action: [Move to LEFT ARM]\n", "[Step 157] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 158] Action: [Move to LEFT ARM]\n", "[Step 158] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 159] Action: [Move to LEFT ARM]\n", "[Step 159] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 160] Action: [Move to LEFT ARM]\n", "[Step 160] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 161] Action: [Move to LEFT ARM]\n", "[Step 161] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 162] Action: [Move to LEFT ARM]\n", "[Step 162] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 163] Action: [Move to LEFT ARM]\n", "[Step 163] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 164] Action: [Move to LEFT ARM]\n", "[Step 164] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 165] Action: [Move to LEFT ARM]\n", "[Step 165] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 166] Action: [Move to LEFT ARM]\n", "[Step 166] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 167] Action: [Move to LEFT ARM]\n", "[Step 167] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 168] Action: [Move to LEFT ARM]\n", "[Step 168] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 169] Action: [Move to LEFT ARM]\n", "[Step 169] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 170] Action: [Move to LEFT ARM]\n", "[Step 170] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 171] Action: [Move to LEFT ARM]\n", "[Step 171] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 172] Action: [Move to LEFT ARM]\n", "[Step 172] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 173] Action: [Move to LEFT ARM]\n", "[Step 173] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 174] Action: [Move to LEFT ARM]\n", "[Step 174] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 175] Action: [Move to LEFT ARM]\n", "[Step 175] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 176] Action: [Move to LEFT ARM]\n", "[Step 176] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 177] Action: [Move to LEFT ARM]\n", "[Step 177] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 178] Action: [Move to LEFT ARM]\n", "[Step 178] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 179] Action: [Move to LEFT ARM]\n", "[Step 179] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 180] Action: [Move to LEFT ARM]\n", "[Step 180] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 181] Action: [Move to LEFT ARM]\n", "[Step 181] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 182] Action: [Move to LEFT ARM]\n", "[Step 182] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 183] Action: [Move to LEFT ARM]\n", "[Step 183] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 184] Action: [Move to LEFT ARM]\n", "[Step 184] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 185] Action: [Move to LEFT ARM]\n", "[Step 185] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 186] Action: [Move to LEFT ARM]\n", "[Step 186] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 187] Action: [Move to LEFT ARM]\n", "[Step 187] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 188] Action: [Move to LEFT ARM]\n", "[Step 188] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 189] Action: [Move to LEFT ARM]\n", "[Step 189] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 190] Action: [Move to LEFT ARM]\n", "[Step 190] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 191] Action: [Move to LEFT ARM]\n", "[Step 191] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 192] Action: [Move to LEFT ARM]\n", "[Step 192] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 193] Action: [Move to LEFT ARM]\n", "[Step 193] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 194] Action: [Move to LEFT ARM]\n", "[Step 194] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 195] Action: [Move to LEFT ARM]\n", "[Step 195] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 196] Action: [Move to LEFT ARM]\n", "[Step 196] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 197] Action: [Move to LEFT ARM]\n", "[Step 197] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 198] Action: [Move to LEFT ARM]\n", "[Step 198] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 199] Action: [Move to LEFT ARM]\n", "[Step 199] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 200] Action: [Move to LEFT ARM]\n", "[Step 200] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 201] Action: [Move to LEFT ARM]\n", "[Step 201] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 202] Action: [Move to LEFT ARM]\n", "[Step 202] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 203] Action: [Move to LEFT ARM]\n", "[Step 203] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 204] Action: [Move to LEFT ARM]\n", "[Step 204] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 205] Action: [Move to LEFT ARM]\n", "[Step 205] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 206] Action: [Move to LEFT ARM]\n", "[Step 206] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 207] Action: [Move to LEFT ARM]\n", "[Step 207] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 208] Action: [Move to LEFT ARM]\n", "[Step 208] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 209] Action: [Move to LEFT ARM]\n", "[Step 209] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 210] Action: [Move to LEFT ARM]\n", "[Step 210] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 211] Action: [Move to LEFT ARM]\n", "[Step 211] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 212] Action: [Move to LEFT ARM]\n", "[Step 212] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 213] Action: [Move to LEFT ARM]\n", "[Step 213] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 214] Action: [Move to LEFT ARM]\n", "[Step 214] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 215] Action: [Move to LEFT ARM]\n", "[Step 215] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 216] Action: [Move to LEFT ARM]\n", "[Step 216] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 217] Action: [Move to LEFT ARM]\n", "[Step 217] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 218] Action: [Move to LEFT ARM]\n", "[Step 218] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 219] Action: [Move to LEFT ARM]\n", "[Step 219] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 220] Action: [Move to LEFT ARM]\n", "[Step 220] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 221] Action: [Move to LEFT ARM]\n", "[Step 221] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 222] Action: [Move to LEFT ARM]\n", "[Step 222] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 223] Action: [Move to LEFT ARM]\n", "[Step 223] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 224] Action: [Move to LEFT ARM]\n", "[Step 224] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 225] Action: [Move to LEFT ARM]\n", "[Step 225] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 226] Action: [Move to LEFT ARM]\n", "[Step 226] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 227] Action: [Move to LEFT ARM]\n", "[Step 227] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 228] Action: [Move to LEFT ARM]\n", "[Step 228] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 229] Action: [Move to LEFT ARM]\n", "[Step 229] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 230] Action: [Move to LEFT ARM]\n", "[Step 230] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 231] Action: [Move to LEFT ARM]\n", "[Step 231] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 232] Action: [Move to LEFT ARM]\n", "[Step 232] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 233] Action: [Move to LEFT ARM]\n", "[Step 233] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 234] Action: [Move to LEFT ARM]\n", "[Step 234] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 235] Action: [Move to LEFT ARM]\n", "[Step 235] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 236] Action: [Move to LEFT ARM]\n", "[Step 236] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 237] Action: [Move to LEFT ARM]\n", "[Step 237] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 238] Action: [Move to LEFT ARM]\n", "[Step 238] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 239] Action: [Move to LEFT ARM]\n", "[Step 239] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 240] Action: [Move to LEFT ARM]\n", "[Step 240] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 241] Action: [Move to LEFT ARM]\n", "[Step 241] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 242] Action: [Move to LEFT ARM]\n", "[Step 242] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 243] Action: [Move to LEFT ARM]\n", "[Step 243] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 244] Action: [Move to LEFT ARM]\n", "[Step 244] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 245] Action: [Move to LEFT ARM]\n", "[Step 245] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 246] Action: [Move to LEFT ARM]\n", "[Step 246] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 247] Action: [Move to LEFT ARM]\n", "[Step 247] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 248] Action: [Move to LEFT ARM]\n", "[Step 248] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 249] Action: [Move to LEFT ARM]\n", "[Step 249] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 250] Action: [Move to LEFT ARM]\n", "[Step 250] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 251] Action: [Move to LEFT ARM]\n", "[Step 251] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 252] Action: [Move to LEFT ARM]\n", "[Step 252] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 253] Action: [Move to LEFT ARM]\n", "[Step 253] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 254] Action: [Move to LEFT ARM]\n", "[Step 254] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 255] Action: [Move to LEFT ARM]\n", "[Step 255] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 256] Action: [Move to LEFT ARM]\n", "[Step 256] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 257] Action: [Move to LEFT ARM]\n", "[Step 257] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 258] Action: [Move to LEFT ARM]\n", "[Step 258] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 259] Action: [Move to LEFT ARM]\n", "[Step 259] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 260] Action: [Move to LEFT ARM]\n", "[Step 260] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 261] Action: [Move to LEFT ARM]\n", "[Step 261] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 262] Action: [Move to LEFT ARM]\n", "[Step 262] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 263] Action: [Move to LEFT ARM]\n", "[Step 263] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 264] Action: [Move to LEFT ARM]\n", "[Step 264] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 265] Action: [Move to LEFT ARM]\n", "[Step 265] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 266] Action: [Move to LEFT ARM]\n", "[Step 266] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 267] Action: [Move to LEFT ARM]\n", "[Step 267] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 268] Action: [Move to LEFT ARM]\n", "[Step 268] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 269] Action: [Move to LEFT ARM]\n", "[Step 269] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 270] Action: [Move to LEFT ARM]\n", "[Step 270] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 271] Action: [Move to LEFT ARM]\n", "[Step 271] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 272] Action: [Move to LEFT ARM]\n", "[Step 272] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 273] Action: [Move to LEFT ARM]\n", "[Step 273] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 274] Action: [Move to LEFT ARM]\n", "[Step 274] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 275] Action: [Move to LEFT ARM]\n", "[Step 275] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 276] Action: [Move to LEFT ARM]\n", "[Step 276] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 277] Action: [Move to LEFT ARM]\n", "[Step 277] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 278] Action: [Move to LEFT ARM]\n", "[Step 278] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 279] Action: [Move to LEFT ARM]\n", "[Step 279] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 280] Action: [Move to LEFT ARM]\n", "[Step 280] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 281] Action: [Move to LEFT ARM]\n", "[Step 281] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 282] Action: [Move to LEFT ARM]\n", "[Step 282] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 283] Action: [Move to LEFT ARM]\n", "[Step 283] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 284] Action: [Move to LEFT ARM]\n", "[Step 284] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 285] Action: [Move to LEFT ARM]\n", "[Step 285] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 286] Action: [Move to LEFT ARM]\n", "[Step 286] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 287] Action: [Move to LEFT ARM]\n", "[Step 287] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 288] Action: [Move to LEFT ARM]\n", "[Step 288] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 289] Action: [Move to LEFT ARM]\n", "[Step 289] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 290] Action: [Move to LEFT ARM]\n", "[Step 290] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 291] Action: [Move to LEFT ARM]\n", "[Step 291] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 292] Action: [Move to LEFT ARM]\n", "[Step 292] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 293] Action: [Move to LEFT ARM]\n", "[Step 293] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 294] Action: [Move to LEFT ARM]\n", "[Step 294] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 295] Action: [Move to LEFT ARM]\n", "[Step 295] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 296] Action: [Move to LEFT ARM]\n", "[Step 296] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 297] Action: [Move to LEFT ARM]\n", "[Step 297] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 298] Action: [Move to LEFT ARM]\n", "[Step 298] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 299] Action: [Move to LEFT ARM]\n", "[Step 299] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 300] Action: [Move to LEFT ARM]\n", "[Step 300] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 301] Action: [Move to LEFT ARM]\n", "[Step 301] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 302] Action: [Move to LEFT ARM]\n", "[Step 302] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 303] Action: [Move to LEFT ARM]\n", "[Step 303] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 304] Action: [Move to LEFT ARM]\n", "[Step 304] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 305] Action: [Move to LEFT ARM]\n", "[Step 305] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 306] Action: [Move to LEFT ARM]\n", "[Step 306] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 307] Action: [Move to LEFT ARM]\n", "[Step 307] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 308] Action: [Move to LEFT ARM]\n", "[Step 308] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 309] Action: [Move to LEFT ARM]\n", "[Step 309] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 310] Action: [Move to LEFT ARM]\n", "[Step 310] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 311] Action: [Move to LEFT ARM]\n", "[Step 311] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 312] Action: [Move to LEFT ARM]\n", "[Step 312] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 313] Action: [Move to LEFT ARM]\n", "[Step 313] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 314] Action: [Move to LEFT ARM]\n", "[Step 314] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 315] Action: [Move to LEFT ARM]\n", "[Step 315] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 316] Action: [Move to LEFT ARM]\n", "[Step 316] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 317] Action: [Move to LEFT ARM]\n", "[Step 317] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 318] Action: [Move to LEFT ARM]\n", "[Step 318] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 319] Action: [Move to LEFT ARM]\n", "[Step 319] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 320] Action: [Move to LEFT ARM]\n", "[Step 320] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 321] Action: [Move to LEFT ARM]\n", "[Step 321] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 322] Action: [Move to LEFT ARM]\n", "[Step 322] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 323] Action: [Move to LEFT ARM]\n", "[Step 323] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 324] Action: [Move to LEFT ARM]\n", "[Step 324] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 325] Action: [Move to LEFT ARM]\n", "[Step 325] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 326] Action: [Move to LEFT ARM]\n", "[Step 326] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 327] Action: [Move to LEFT ARM]\n", "[Step 327] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 328] Action: [Move to LEFT ARM]\n", "[Step 328] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 329] Action: [Move to LEFT ARM]\n", "[Step 329] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 330] Action: [Move to LEFT ARM]\n", "[Step 330] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 331] Action: [Move to LEFT ARM]\n", "[Step 331] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 332] Action: [Move to LEFT ARM]\n", "[Step 332] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 333] Action: [Move to LEFT ARM]\n", "[Step 333] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 334] Action: [Move to LEFT ARM]\n", "[Step 334] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 335] Action: [Move to LEFT ARM]\n", "[Step 335] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 336] Action: [Move to LEFT ARM]\n", "[Step 336] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 337] Action: [Move to LEFT ARM]\n", "[Step 337] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 338] Action: [Move to LEFT ARM]\n", "[Step 338] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 339] Action: [Move to LEFT ARM]\n", "[Step 339] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 340] Action: [Move to LEFT ARM]\n", "[Step 340] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 341] Action: [Move to LEFT ARM]\n", "[Step 341] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 342] Action: [Move to LEFT ARM]\n", "[Step 342] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 343] Action: [Move to LEFT ARM]\n", "[Step 343] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 344] Action: [Move to LEFT ARM]\n", "[Step 344] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 345] Action: [Move to LEFT ARM]\n", "[Step 345] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 346] Action: [Move to LEFT ARM]\n", "[Step 346] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 347] Action: [Move to LEFT ARM]\n", "[Step 347] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 348] Action: [Move to LEFT ARM]\n", "[Step 348] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 349] Action: [Move to LEFT ARM]\n", "[Step 349] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 350] Action: [Move to LEFT ARM]\n", "[Step 350] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 351] Action: [Move to LEFT ARM]\n", "[Step 351] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 352] Action: [Move to LEFT ARM]\n", "[Step 352] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 353] Action: [Move to LEFT ARM]\n", "[Step 353] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 354] Action: [Move to LEFT ARM]\n", "[Step 354] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 355] Action: [Move to LEFT ARM]\n", "[Step 355] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 356] Action: [Move to LEFT ARM]\n", "[Step 356] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 357] Action: [Move to LEFT ARM]\n", "[Step 357] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 358] Action: [Move to LEFT ARM]\n", "[Step 358] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 359] Action: [Move to LEFT ARM]\n", "[Step 359] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 360] Action: [Move to LEFT ARM]\n", "[Step 360] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 361] Action: [Move to LEFT ARM]\n", "[Step 361] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 362] Action: [Move to LEFT ARM]\n", "[Step 362] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 363] Action: [Move to LEFT ARM]\n", "[Step 363] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 364] Action: [Move to LEFT ARM]\n", "[Step 364] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 365] Action: [Move to LEFT ARM]\n", "[Step 365] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 366] Action: [Move to LEFT ARM]\n", "[Step 366] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 367] Action: [Move to LEFT ARM]\n", "[Step 367] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 368] Action: [Move to LEFT ARM]\n", "[Step 368] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 369] Action: [Move to LEFT ARM]\n", "[Step 369] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 370] Action: [Move to LEFT ARM]\n", "[Step 370] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 371] Action: [Move to LEFT ARM]\n", "[Step 371] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 372] Action: [Move to LEFT ARM]\n", "[Step 372] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 373] Action: [Move to LEFT ARM]\n", "[Step 373] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 374] Action: [Move to LEFT ARM]\n", "[Step 374] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 375] Action: [Move to LEFT ARM]\n", "[Step 375] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 376] Action: [Move to LEFT ARM]\n", "[Step 376] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 377] Action: [Move to LEFT ARM]\n", "[Step 377] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 378] Action: [Move to LEFT ARM]\n", "[Step 378] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 379] Action: [Move to LEFT ARM]\n", "[Step 379] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 380] Action: [Move to LEFT ARM]\n", "[Step 380] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 381] Action: [Move to LEFT ARM]\n", "[Step 381] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 382] Action: [Move to LEFT ARM]\n", "[Step 382] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 383] Action: [Move to LEFT ARM]\n", "[Step 383] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 384] Action: [Move to LEFT ARM]\n", "[Step 384] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 385] Action: [Move to LEFT ARM]\n", "[Step 385] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 386] Action: [Move to LEFT ARM]\n", "[Step 386] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 387] Action: [Move to LEFT ARM]\n", "[Step 387] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 388] Action: [Move to LEFT ARM]\n", "[Step 388] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 389] Action: [Move to LEFT ARM]\n", "[Step 389] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 390] Action: [Move to LEFT ARM]\n", "[Step 390] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 391] Action: [Move to LEFT ARM]\n", "[Step 391] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 392] Action: [Move to LEFT ARM]\n", "[Step 392] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 393] Action: [Move to LEFT ARM]\n", "[Step 393] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 394] Action: [Move to LEFT ARM]\n", "[Step 394] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 395] Action: [Move to LEFT ARM]\n", "[Step 395] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 396] Action: [Move to LEFT ARM]\n", "[Step 396] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 397] Action: [Move to LEFT ARM]\n", "[Step 397] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 398] Action: [Move to LEFT ARM]\n", "[Step 398] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 399] Action: [Move to LEFT ARM]\n", "[Step 399] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 400] Action: [Move to LEFT ARM]\n", "[Step 400] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 401] Action: [Move to LEFT ARM]\n", "[Step 401] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 402] Action: [Move to LEFT ARM]\n", "[Step 402] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 403] Action: [Move to LEFT ARM]\n", "[Step 403] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 404] Action: [Move to LEFT ARM]\n", "[Step 404] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 405] Action: [Move to LEFT ARM]\n", "[Step 405] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 406] Action: [Move to LEFT ARM]\n", "[Step 406] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 407] Action: [Move to LEFT ARM]\n", "[Step 407] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 408] Action: [Move to LEFT ARM]\n", "[Step 408] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 409] Action: [Move to LEFT ARM]\n", "[Step 409] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 410] Action: [Move to LEFT ARM]\n", "[Step 410] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 411] Action: [Move to LEFT ARM]\n", "[Step 411] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 412] Action: [Move to LEFT ARM]\n", "[Step 412] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 413] Action: [Move to LEFT ARM]\n", "[Step 413] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 414] Action: [Move to LEFT ARM]\n", "[Step 414] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 415] Action: [Move to LEFT ARM]\n", "[Step 415] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 416] Action: [Move to LEFT ARM]\n", "[Step 416] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 417] Action: [Move to LEFT ARM]\n", "[Step 417] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 418] Action: [Move to LEFT ARM]\n", "[Step 418] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 419] Action: [Move to LEFT ARM]\n", "[Step 419] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 420] Action: [Move to LEFT ARM]\n", "[Step 420] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 421] Action: [Move to LEFT ARM]\n", "[Step 421] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 422] Action: [Move to LEFT ARM]\n", "[Step 422] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 423] Action: [Move to LEFT ARM]\n", "[Step 423] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 424] Action: [Move to LEFT ARM]\n", "[Step 424] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 425] Action: [Move to LEFT ARM]\n", "[Step 425] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 426] Action: [Move to LEFT ARM]\n", "[Step 426] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 427] Action: [Move to LEFT ARM]\n", "[Step 427] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 428] Action: [Move to LEFT ARM]\n", "[Step 428] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 429] Action: [Move to LEFT ARM]\n", "[Step 429] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 430] Action: [Move to LEFT ARM]\n", "[Step 430] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 431] Action: [Move to LEFT ARM]\n", "[Step 431] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 432] Action: [Move to LEFT ARM]\n", "[Step 432] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 433] Action: [Move to LEFT ARM]\n", "[Step 433] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 434] Action: [Move to LEFT ARM]\n", "[Step 434] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 435] Action: [Move to LEFT ARM]\n", "[Step 435] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 436] Action: [Move to LEFT ARM]\n", "[Step 436] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 437] Action: [Move to LEFT ARM]\n", "[Step 437] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 438] Action: [Move to LEFT ARM]\n", "[Step 438] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 439] Action: [Move to LEFT ARM]\n", "[Step 439] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 440] Action: [Move to LEFT ARM]\n", "[Step 440] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 441] Action: [Move to LEFT ARM]\n", "[Step 441] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 442] Action: [Move to LEFT ARM]\n", "[Step 442] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 443] Action: [Move to LEFT ARM]\n", "[Step 443] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 444] Action: [Move to LEFT ARM]\n", "[Step 444] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 445] Action: [Move to LEFT ARM]\n", "[Step 445] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 446] Action: [Move to LEFT ARM]\n", "[Step 446] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 447] Action: [Move to LEFT ARM]\n", "[Step 447] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 448] Action: [Move to LEFT ARM]\n", "[Step 448] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 449] Action: [Move to LEFT ARM]\n", "[Step 449] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 450] Action: [Move to LEFT ARM]\n", "[Step 450] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 451] Action: [Move to LEFT ARM]\n", "[Step 451] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 452] Action: [Move to LEFT ARM]\n", "[Step 452] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 453] Action: [Move to LEFT ARM]\n", "[Step 453] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 454] Action: [Move to LEFT ARM]\n", "[Step 454] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 455] Action: [Move to LEFT ARM]\n", "[Step 455] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 456] Action: [Move to LEFT ARM]\n", "[Step 456] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 457] Action: [Move to LEFT ARM]\n", "[Step 457] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 458] Action: [Move to LEFT ARM]\n", "[Step 458] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 459] Action: [Move to LEFT ARM]\n", "[Step 459] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 460] Action: [Move to LEFT ARM]\n", "[Step 460] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 461] Action: [Move to LEFT ARM]\n", "[Step 461] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 462] Action: [Move to LEFT ARM]\n", "[Step 462] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 463] Action: [Move to LEFT ARM]\n", "[Step 463] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 464] Action: [Move to LEFT ARM]\n", "[Step 464] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 465] Action: [Move to LEFT ARM]\n", "[Step 465] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 466] Action: [Move to LEFT ARM]\n", "[Step 466] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 467] Action: [Move to LEFT ARM]\n", "[Step 467] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 468] Action: [Move to LEFT ARM]\n", "[Step 468] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 469] Action: [Move to LEFT ARM]\n", "[Step 469] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 470] Action: [Move to LEFT ARM]\n", "[Step 470] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 471] Action: [Move to LEFT ARM]\n", "[Step 471] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 472] Action: [Move to LEFT ARM]\n", "[Step 472] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 473] Action: [Move to LEFT ARM]\n", "[Step 473] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 474] Action: [Move to LEFT ARM]\n", "[Step 474] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 475] Action: [Move to LEFT ARM]\n", "[Step 475] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 476] Action: [Move to LEFT ARM]\n", "[Step 476] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 477] Action: [Move to LEFT ARM]\n", "[Step 477] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 478] Action: [Move to LEFT ARM]\n", "[Step 478] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 479] Action: [Move to LEFT ARM]\n", "[Step 479] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 480] Action: [Move to LEFT ARM]\n", "[Step 480] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 481] Action: [Move to LEFT ARM]\n", "[Step 481] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 482] Action: [Move to LEFT ARM]\n", "[Step 482] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 483] Action: [Move to LEFT ARM]\n", "[Step 483] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 484] Action: [Move to LEFT ARM]\n", "[Step 484] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 485] Action: [Move to LEFT ARM]\n", "[Step 485] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 486] Action: [Move to LEFT ARM]\n", "[Step 486] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 487] Action: [Move to LEFT ARM]\n", "[Step 487] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 488] Action: [Move to LEFT ARM]\n", "[Step 488] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 489] Action: [Move to LEFT ARM]\n", "[Step 489] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 490] Action: [Move to LEFT ARM]\n", "[Step 490] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 491] Action: [Move to LEFT ARM]\n", "[Step 491] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 492] Action: [Move to LEFT ARM]\n", "[Step 492] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 493] Action: [Move to LEFT ARM]\n", "[Step 493] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 494] Action: [Move to LEFT ARM]\n", "[Step 494] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 495] Action: [Move to LEFT ARM]\n", "[Step 495] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 496] Action: [Move to LEFT ARM]\n", "[Step 496] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 497] Action: [Move to LEFT ARM]\n", "[Step 497] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 498] Action: [Move to LEFT ARM]\n", "[Step 498] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 499] Action: [Move to LEFT ARM]\n", "[Step 499] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 500] Action: [Move to LEFT ARM]\n", "[Step 500] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 501] Action: [Move to LEFT ARM]\n", "[Step 501] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 502] Action: [Move to LEFT ARM]\n", "[Step 502] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 503] Action: [Move to LEFT ARM]\n", "[Step 503] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 504] Action: [Move to LEFT ARM]\n", "[Step 504] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 505] Action: [Move to LEFT ARM]\n", "[Step 505] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 506] Action: [Move to LEFT ARM]\n", "[Step 506] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 507] Action: [Move to LEFT ARM]\n", "[Step 507] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 508] Action: [Move to LEFT ARM]\n", "[Step 508] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 509] Action: [Move to LEFT ARM]\n", "[Step 509] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 510] Action: [Move to LEFT ARM]\n", "[Step 510] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 511] Action: [Move to LEFT ARM]\n", "[Step 511] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 512] Action: [Move to LEFT ARM]\n", "[Step 512] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 513] Action: [Move to LEFT ARM]\n", "[Step 513] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 514] Action: [Move to LEFT ARM]\n", "[Step 514] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 515] Action: [Move to LEFT ARM]\n", "[Step 515] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 516] Action: [Move to LEFT ARM]\n", "[Step 516] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 517] Action: [Move to LEFT ARM]\n", "[Step 517] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 518] Action: [Move to LEFT ARM]\n", "[Step 518] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 519] Action: [Move to LEFT ARM]\n", "[Step 519] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 520] Action: [Move to LEFT ARM]\n", "[Step 520] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 521] Action: [Move to LEFT ARM]\n", "[Step 521] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 522] Action: [Move to LEFT ARM]\n", "[Step 522] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 523] Action: [Move to LEFT ARM]\n", "[Step 523] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 524] Action: [Move to LEFT ARM]\n", "[Step 524] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 525] Action: [Move to LEFT ARM]\n", "[Step 525] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 526] Action: [Move to LEFT ARM]\n", "[Step 526] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 527] Action: [Move to LEFT ARM]\n", "[Step 527] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 528] Action: [Move to LEFT ARM]\n", "[Step 528] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 529] Action: [Move to LEFT ARM]\n", "[Step 529] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 530] Action: [Move to LEFT ARM]\n", "[Step 530] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 531] Action: [Move to LEFT ARM]\n", "[Step 531] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 532] Action: [Move to LEFT ARM]\n", "[Step 532] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 533] Action: [Move to LEFT ARM]\n", "[Step 533] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 534] Action: [Move to LEFT ARM]\n", "[Step 534] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 535] Action: [Move to LEFT ARM]\n", "[Step 535] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 536] Action: [Move to LEFT ARM]\n", "[Step 536] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 537] Action: [Move to LEFT ARM]\n", "[Step 537] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 538] Action: [Move to LEFT ARM]\n", "[Step 538] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 539] Action: [Move to LEFT ARM]\n", "[Step 539] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 540] Action: [Move to LEFT ARM]\n", "[Step 540] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 541] Action: [Move to LEFT ARM]\n", "[Step 541] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 542] Action: [Move to LEFT ARM]\n", "[Step 542] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 543] Action: [Move to LEFT ARM]\n", "[Step 543] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 544] Action: [Move to LEFT ARM]\n", "[Step 544] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 545] Action: [Move to LEFT ARM]\n", "[Step 545] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 546] Action: [Move to LEFT ARM]\n", "[Step 546] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 547] Action: [Move to LEFT ARM]\n", "[Step 547] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 548] Action: [Move to LEFT ARM]\n", "[Step 548] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 549] Action: [Move to LEFT ARM]\n", "[Step 549] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 550] Action: [Move to LEFT ARM]\n", "[Step 550] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 551] Action: [Move to LEFT ARM]\n", "[Step 551] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 552] Action: [Move to LEFT ARM]\n", "[Step 552] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 553] Action: [Move to LEFT ARM]\n", "[Step 553] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 554] Action: [Move to LEFT ARM]\n", "[Step 554] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 555] Action: [Move to LEFT ARM]\n", "[Step 555] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 556] Action: [Move to LEFT ARM]\n", "[Step 556] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 557] Action: [Move to LEFT ARM]\n", "[Step 557] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 558] Action: [Move to LEFT ARM]\n", "[Step 558] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 559] Action: [Move to LEFT ARM]\n", "[Step 559] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 560] Action: [Move to LEFT ARM]\n", "[Step 560] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 561] Action: [Move to LEFT ARM]\n", "[Step 561] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 562] Action: [Move to LEFT ARM]\n", "[Step 562] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 563] Action: [Move to LEFT ARM]\n", "[Step 563] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 564] Action: [Move to LEFT ARM]\n", "[Step 564] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 565] Action: [Move to LEFT ARM]\n", "[Step 565] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 566] Action: [Move to LEFT ARM]\n", "[Step 566] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 567] Action: [Move to LEFT ARM]\n", "[Step 567] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 568] Action: [Move to LEFT ARM]\n", "[Step 568] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 569] Action: [Move to LEFT ARM]\n", "[Step 569] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 570] Action: [Move to LEFT ARM]\n", "[Step 570] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 571] Action: [Move to LEFT ARM]\n", "[Step 571] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 572] Action: [Move to LEFT ARM]\n", "[Step 572] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 573] Action: [Move to LEFT ARM]\n", "[Step 573] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 574] Action: [Move to LEFT ARM]\n", "[Step 574] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 575] Action: [Move to LEFT ARM]\n", "[Step 575] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 576] Action: [Move to LEFT ARM]\n", "[Step 576] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 577] Action: [Move to LEFT ARM]\n", "[Step 577] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 578] Action: [Move to LEFT ARM]\n", "[Step 578] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 579] Action: [Move to LEFT ARM]\n", "[Step 579] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 580] Action: [Move to LEFT ARM]\n", "[Step 580] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 581] Action: [Move to LEFT ARM]\n", "[Step 581] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 582] Action: [Move to LEFT ARM]\n", "[Step 582] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 583] Action: [Move to LEFT ARM]\n", "[Step 583] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 584] Action: [Move to LEFT ARM]\n", "[Step 584] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 585] Action: [Move to LEFT ARM]\n", "[Step 585] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 586] Action: [Move to LEFT ARM]\n", "[Step 586] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 587] Action: [Move to LEFT ARM]\n", "[Step 587] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 588] Action: [Move to LEFT ARM]\n", "[Step 588] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 589] Action: [Move to LEFT ARM]\n", "[Step 589] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 590] Action: [Move to LEFT ARM]\n", "[Step 590] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 591] Action: [Move to LEFT ARM]\n", "[Step 591] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 592] Action: [Move to LEFT ARM]\n", "[Step 592] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 593] Action: [Move to LEFT ARM]\n", "[Step 593] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 594] Action: [Move to LEFT ARM]\n", "[Step 594] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 595] Action: [Move to LEFT ARM]\n", "[Step 595] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 596] Action: [Move to LEFT ARM]\n", "[Step 596] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 597] Action: [Move to LEFT ARM]\n", "[Step 597] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 598] Action: [Move to LEFT ARM]\n", "[Step 598] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 599] Action: [Move to LEFT ARM]\n", "[Step 599] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 600] Action: [Move to LEFT ARM]\n", "[Step 600] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 601] Action: [Move to LEFT ARM]\n", "[Step 601] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 602] Action: [Move to LEFT ARM]\n", "[Step 602] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 603] Action: [Move to LEFT ARM]\n", "[Step 603] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 604] Action: [Move to LEFT ARM]\n", "[Step 604] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 605] Action: [Move to LEFT ARM]\n", "[Step 605] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 606] Action: [Move to LEFT ARM]\n", "[Step 606] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 607] Action: [Move to LEFT ARM]\n", "[Step 607] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 608] Action: [Move to LEFT ARM]\n", "[Step 608] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 609] Action: [Move to LEFT ARM]\n", "[Step 609] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 610] Action: [Move to LEFT ARM]\n", "[Step 610] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 611] Action: [Move to LEFT ARM]\n", "[Step 611] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 612] Action: [Move to LEFT ARM]\n", "[Step 612] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 613] Action: [Move to LEFT ARM]\n", "[Step 613] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 614] Action: [Move to LEFT ARM]\n", "[Step 614] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 615] Action: [Move to LEFT ARM]\n", "[Step 615] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 616] Action: [Move to LEFT ARM]\n", "[Step 616] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 617] Action: [Move to LEFT ARM]\n", "[Step 617] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 618] Action: [Move to LEFT ARM]\n", "[Step 618] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 619] Action: [Move to LEFT ARM]\n", "[Step 619] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 620] Action: [Move to LEFT ARM]\n", "[Step 620] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 621] Action: [Move to LEFT ARM]\n", "[Step 621] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 622] Action: [Move to LEFT ARM]\n", "[Step 622] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 623] Action: [Move to LEFT ARM]\n", "[Step 623] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 624] Action: [Move to LEFT ARM]\n", "[Step 624] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 625] Action: [Move to LEFT ARM]\n", "[Step 625] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 626] Action: [Move to LEFT ARM]\n", "[Step 626] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 627] Action: [Move to LEFT ARM]\n", "[Step 627] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 628] Action: [Move to LEFT ARM]\n", "[Step 628] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 629] Action: [Move to LEFT ARM]\n", "[Step 629] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 630] Action: [Move to LEFT ARM]\n", "[Step 630] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 631] Action: [Move to LEFT ARM]\n", "[Step 631] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 632] Action: [Move to LEFT ARM]\n", "[Step 632] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 633] Action: [Move to LEFT ARM]\n", "[Step 633] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 634] Action: [Move to LEFT ARM]\n", "[Step 634] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 635] Action: [Move to LEFT ARM]\n", "[Step 635] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 636] Action: [Move to LEFT ARM]\n", "[Step 636] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 637] Action: [Move to LEFT ARM]\n", "[Step 637] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 638] Action: [Move to LEFT ARM]\n", "[Step 638] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 639] Action: [Move to LEFT ARM]\n", "[Step 639] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 640] Action: [Move to LEFT ARM]\n", "[Step 640] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 641] Action: [Move to LEFT ARM]\n", "[Step 641] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 642] Action: [Move to LEFT ARM]\n", "[Step 642] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 643] Action: [Move to LEFT ARM]\n", "[Step 643] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 644] Action: [Move to LEFT ARM]\n", "[Step 644] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 645] Action: [Move to LEFT ARM]\n", "[Step 645] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 646] Action: [Move to LEFT ARM]\n", "[Step 646] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 647] Action: [Move to LEFT ARM]\n", "[Step 647] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 648] Action: [Move to LEFT ARM]\n", "[Step 648] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 649] Action: [Move to LEFT ARM]\n", "[Step 649] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 650] Action: [Move to LEFT ARM]\n", "[Step 650] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 651] Action: [Move to LEFT ARM]\n", "[Step 651] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 652] Action: [Move to LEFT ARM]\n", "[Step 652] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 653] Action: [Move to LEFT ARM]\n", "[Step 653] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 654] Action: [Move to LEFT ARM]\n", "[Step 654] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 655] Action: [Move to LEFT ARM]\n", "[Step 655] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 656] Action: [Move to LEFT ARM]\n", "[Step 656] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 657] Action: [Move to LEFT ARM]\n", "[Step 657] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 658] Action: [Move to LEFT ARM]\n", "[Step 658] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 659] Action: [Move to LEFT ARM]\n", "[Step 659] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 660] Action: [Move to LEFT ARM]\n", "[Step 660] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 661] Action: [Move to LEFT ARM]\n", "[Step 661] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 662] Action: [Move to LEFT ARM]\n", "[Step 662] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 663] Action: [Move to LEFT ARM]\n", "[Step 663] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 664] Action: [Move to LEFT ARM]\n", "[Step 664] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 665] Action: [Move to LEFT ARM]\n", "[Step 665] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 666] Action: [Move to LEFT ARM]\n", "[Step 666] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 667] Action: [Move to LEFT ARM]\n", "[Step 667] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 668] Action: [Move to LEFT ARM]\n", "[Step 668] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 669] Action: [Move to LEFT ARM]\n", "[Step 669] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 670] Action: [Move to LEFT ARM]\n", "[Step 670] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 671] Action: [Move to LEFT ARM]\n", "[Step 671] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 672] Action: [Move to LEFT ARM]\n", "[Step 672] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 673] Action: [Move to LEFT ARM]\n", "[Step 673] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 674] Action: [Move to LEFT ARM]\n", "[Step 674] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 675] Action: [Move to LEFT ARM]\n", "[Step 675] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 676] Action: [Move to LEFT ARM]\n", "[Step 676] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 677] Action: [Move to LEFT ARM]\n", "[Step 677] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 678] Action: [Move to LEFT ARM]\n", "[Step 678] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 679] Action: [Move to LEFT ARM]\n", "[Step 679] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 680] Action: [Move to LEFT ARM]\n", "[Step 680] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 681] Action: [Move to LEFT ARM]\n", "[Step 681] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 682] Action: [Move to LEFT ARM]\n", "[Step 682] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 683] Action: [Move to LEFT ARM]\n", "[Step 683] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 684] Action: [Move to LEFT ARM]\n", "[Step 684] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 685] Action: [Move to LEFT ARM]\n", "[Step 685] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 686] Action: [Move to LEFT ARM]\n", "[Step 686] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 687] Action: [Move to LEFT ARM]\n", "[Step 687] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 688] Action: [Move to LEFT ARM]\n", "[Step 688] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 689] Action: [Move to LEFT ARM]\n", "[Step 689] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 690] Action: [Move to LEFT ARM]\n", "[Step 690] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 691] Action: [Move to LEFT ARM]\n", "[Step 691] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 692] Action: [Move to LEFT ARM]\n", "[Step 692] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 693] Action: [Move to LEFT ARM]\n", "[Step 693] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 694] Action: [Move to LEFT ARM]\n", "[Step 694] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 695] Action: [Move to LEFT ARM]\n", "[Step 695] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 696] Action: [Move to LEFT ARM]\n", "[Step 696] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 697] Action: [Move to LEFT ARM]\n", "[Step 697] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 698] Action: [Move to LEFT ARM]\n", "[Step 698] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 699] Action: [Move to LEFT ARM]\n", "[Step 699] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 700] Action: [Move to LEFT ARM]\n", "[Step 700] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 701] Action: [Move to LEFT ARM]\n", "[Step 701] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 702] Action: [Move to LEFT ARM]\n", "[Step 702] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 703] Action: [Move to LEFT ARM]\n", "[Step 703] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 704] Action: [Move to LEFT ARM]\n", "[Step 704] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 705] Action: [Move to LEFT ARM]\n", "[Step 705] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 706] Action: [Move to LEFT ARM]\n", "[Step 706] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 707] Action: [Move to LEFT ARM]\n", "[Step 707] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 708] Action: [Move to LEFT ARM]\n", "[Step 708] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 709] Action: [Move to LEFT ARM]\n", "[Step 709] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 710] Action: [Move to LEFT ARM]\n", "[Step 710] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 711] Action: [Move to LEFT ARM]\n", "[Step 711] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 712] Action: [Move to LEFT ARM]\n", "[Step 712] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 713] Action: [Move to LEFT ARM]\n", "[Step 713] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 714] Action: [Move to LEFT ARM]\n", "[Step 714] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 715] Action: [Move to LEFT ARM]\n", "[Step 715] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 716] Action: [Move to LEFT ARM]\n", "[Step 716] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 717] Action: [Move to LEFT ARM]\n", "[Step 717] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 718] Action: [Move to LEFT ARM]\n", "[Step 718] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 719] Action: [Move to LEFT ARM]\n", "[Step 719] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 720] Action: [Move to LEFT ARM]\n", "[Step 720] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 721] Action: [Move to LEFT ARM]\n", "[Step 721] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 722] Action: [Move to LEFT ARM]\n", "[Step 722] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 723] Action: [Move to LEFT ARM]\n", "[Step 723] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 724] Action: [Move to LEFT ARM]\n", "[Step 724] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 725] Action: [Move to LEFT ARM]\n", "[Step 725] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 726] Action: [Move to LEFT ARM]\n", "[Step 726] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 727] Action: [Move to LEFT ARM]\n", "[Step 727] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 728] Action: [Move to LEFT ARM]\n", "[Step 728] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 729] Action: [Move to LEFT ARM]\n", "[Step 729] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 730] Action: [Move to LEFT ARM]\n", "[Step 730] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 731] Action: [Move to LEFT ARM]\n", "[Step 731] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 732] Action: [Move to LEFT ARM]\n", "[Step 732] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 733] Action: [Move to LEFT ARM]\n", "[Step 733] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 734] Action: [Move to LEFT ARM]\n", "[Step 734] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 735] Action: [Move to LEFT ARM]\n", "[Step 735] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 736] Action: [Move to LEFT ARM]\n", "[Step 736] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 737] Action: [Move to LEFT ARM]\n", "[Step 737] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 738] Action: [Move to LEFT ARM]\n", "[Step 738] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 739] Action: [Move to LEFT ARM]\n", "[Step 739] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 740] Action: [Move to LEFT ARM]\n", "[Step 740] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 741] Action: [Move to LEFT ARM]\n", "[Step 741] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 742] Action: [Move to LEFT ARM]\n", "[Step 742] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 743] Action: [Move to LEFT ARM]\n", "[Step 743] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 744] Action: [Move to LEFT ARM]\n", "[Step 744] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 745] Action: [Move to LEFT ARM]\n", "[Step 745] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 746] Action: [Move to LEFT ARM]\n", "[Step 746] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 747] Action: [Move to LEFT ARM]\n", "[Step 747] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 748] Action: [Move to LEFT ARM]\n", "[Step 748] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 749] Action: [Move to LEFT ARM]\n", "[Step 749] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 750] Action: [Move to LEFT ARM]\n", "[Step 750] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 751] Action: [Move to LEFT ARM]\n", "[Step 751] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 752] Action: [Move to LEFT ARM]\n", "[Step 752] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 753] Action: [Move to LEFT ARM]\n", "[Step 753] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 754] Action: [Move to LEFT ARM]\n", "[Step 754] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 755] Action: [Move to LEFT ARM]\n", "[Step 755] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 756] Action: [Move to LEFT ARM]\n", "[Step 756] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 757] Action: [Move to LEFT ARM]\n", "[Step 757] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 758] Action: [Move to LEFT ARM]\n", "[Step 758] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 759] Action: [Move to LEFT ARM]\n", "[Step 759] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 760] Action: [Move to LEFT ARM]\n", "[Step 760] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 761] Action: [Move to LEFT ARM]\n", "[Step 761] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 762] Action: [Move to LEFT ARM]\n", "[Step 762] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 763] Action: [Move to LEFT ARM]\n", "[Step 763] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 764] Action: [Move to LEFT ARM]\n", "[Step 764] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 765] Action: [Move to LEFT ARM]\n", "[Step 765] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 766] Action: [Move to LEFT ARM]\n", "[Step 766] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 767] Action: [Move to LEFT ARM]\n", "[Step 767] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 768] Action: [Move to LEFT ARM]\n", "[Step 768] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 769] Action: [Move to LEFT ARM]\n", "[Step 769] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 770] Action: [Move to LEFT ARM]\n", "[Step 770] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 771] Action: [Move to LEFT ARM]\n", "[Step 771] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 772] Action: [Move to LEFT ARM]\n", "[Step 772] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 773] Action: [Move to LEFT ARM]\n", "[Step 773] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 774] Action: [Move to LEFT ARM]\n", "[Step 774] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 775] Action: [Move to LEFT ARM]\n", "[Step 775] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 776] Action: [Move to LEFT ARM]\n", "[Step 776] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 777] Action: [Move to LEFT ARM]\n", "[Step 777] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 778] Action: [Move to LEFT ARM]\n", "[Step 778] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 779] Action: [Move to LEFT ARM]\n", "[Step 779] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 780] Action: [Move to LEFT ARM]\n", "[Step 780] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 781] Action: [Move to LEFT ARM]\n", "[Step 781] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 782] Action: [Move to LEFT ARM]\n", "[Step 782] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 783] Action: [Move to LEFT ARM]\n", "[Step 783] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 784] Action: [Move to LEFT ARM]\n", "[Step 784] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 785] Action: [Move to LEFT ARM]\n", "[Step 785] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 786] Action: [Move to LEFT ARM]\n", "[Step 786] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 787] Action: [Move to LEFT ARM]\n", "[Step 787] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 788] Action: [Move to LEFT ARM]\n", "[Step 788] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 789] Action: [Move to LEFT ARM]\n", "[Step 789] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 790] Action: [Move to LEFT ARM]\n", "[Step 790] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 791] Action: [Move to LEFT ARM]\n", "[Step 791] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 792] Action: [Move to LEFT ARM]\n", "[Step 792] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 793] Action: [Move to LEFT ARM]\n", "[Step 793] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 794] Action: [Move to LEFT ARM]\n", "[Step 794] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 795] Action: [Move to LEFT ARM]\n", "[Step 795] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 796] Action: [Move to LEFT ARM]\n", "[Step 796] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 797] Action: [Move to LEFT ARM]\n", "[Step 797] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 798] Action: [Move to LEFT ARM]\n", "[Step 798] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 799] Action: [Move to LEFT ARM]\n", "[Step 799] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 800] Action: [Move to LEFT ARM]\n", "[Step 800] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 801] Action: [Move to LEFT ARM]\n", "[Step 801] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 802] Action: [Move to LEFT ARM]\n", "[Step 802] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 803] Action: [Move to LEFT ARM]\n", "[Step 803] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 804] Action: [Move to LEFT ARM]\n", "[Step 804] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 805] Action: [Move to LEFT ARM]\n", "[Step 805] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 806] Action: [Move to LEFT ARM]\n", "[Step 806] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 807] Action: [Move to LEFT ARM]\n", "[Step 807] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 808] Action: [Move to LEFT ARM]\n", "[Step 808] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 809] Action: [Move to LEFT ARM]\n", "[Step 809] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 810] Action: [Move to LEFT ARM]\n", "[Step 810] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 811] Action: [Move to LEFT ARM]\n", "[Step 811] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 812] Action: [Move to LEFT ARM]\n", "[Step 812] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 813] Action: [Move to LEFT ARM]\n", "[Step 813] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 814] Action: [Move to LEFT ARM]\n", "[Step 814] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 815] Action: [Move to LEFT ARM]\n", "[Step 815] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 816] Action: [Move to LEFT ARM]\n", "[Step 816] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 817] Action: [Move to LEFT ARM]\n", "[Step 817] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 818] Action: [Move to LEFT ARM]\n", "[Step 818] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 819] Action: [Move to LEFT ARM]\n", "[Step 819] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 820] Action: [Move to LEFT ARM]\n", "[Step 820] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 821] Action: [Move to LEFT ARM]\n", "[Step 821] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 822] Action: [Move to LEFT ARM]\n", "[Step 822] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 823] Action: [Move to LEFT ARM]\n", "[Step 823] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 824] Action: [Move to LEFT ARM]\n", "[Step 824] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 825] Action: [Move to LEFT ARM]\n", "[Step 825] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 826] Action: [Move to LEFT ARM]\n", "[Step 826] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 827] Action: [Move to LEFT ARM]\n", "[Step 827] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 828] Action: [Move to LEFT ARM]\n", "[Step 828] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 829] Action: [Move to LEFT ARM]\n", "[Step 829] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 830] Action: [Move to LEFT ARM]\n", "[Step 830] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 831] Action: [Move to LEFT ARM]\n", "[Step 831] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 832] Action: [Move to LEFT ARM]\n", "[Step 832] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 833] Action: [Move to LEFT ARM]\n", "[Step 833] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 834] Action: [Move to LEFT ARM]\n", "[Step 834] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 835] Action: [Move to LEFT ARM]\n", "[Step 835] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 836] Action: [Move to LEFT ARM]\n", "[Step 836] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 837] Action: [Move to LEFT ARM]\n", "[Step 837] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 838] Action: [Move to LEFT ARM]\n", "[Step 838] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 839] Action: [Move to LEFT ARM]\n", "[Step 839] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 840] Action: [Move to LEFT ARM]\n", "[Step 840] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 841] Action: [Move to LEFT ARM]\n", "[Step 841] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 842] Action: [Move to LEFT ARM]\n", "[Step 842] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 843] Action: [Move to LEFT ARM]\n", "[Step 843] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 844] Action: [Move to LEFT ARM]\n", "[Step 844] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 845] Action: [Move to LEFT ARM]\n", "[Step 845] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 846] Action: [Move to LEFT ARM]\n", "[Step 846] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 847] Action: [Move to LEFT ARM]\n", "[Step 847] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 848] Action: [Move to LEFT ARM]\n", "[Step 848] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 849] Action: [Move to LEFT ARM]\n", "[Step 849] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 850] Action: [Move to LEFT ARM]\n", "[Step 850] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 851] Action: [Move to LEFT ARM]\n", "[Step 851] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 852] Action: [Move to LEFT ARM]\n", "[Step 852] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 853] Action: [Move to LEFT ARM]\n", "[Step 853] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 854] Action: [Move to LEFT ARM]\n", "[Step 854] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 855] Action: [Move to LEFT ARM]\n", "[Step 855] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 856] Action: [Move to LEFT ARM]\n", "[Step 856] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 857] Action: [Move to LEFT ARM]\n", "[Step 857] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 858] Action: [Move to LEFT ARM]\n", "[Step 858] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 859] Action: [Move to LEFT ARM]\n", "[Step 859] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 860] Action: [Move to LEFT ARM]\n", "[Step 860] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 861] Action: [Move to LEFT ARM]\n", "[Step 861] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 862] Action: [Move to LEFT ARM]\n", "[Step 862] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 863] Action: [Move to LEFT ARM]\n", "[Step 863] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 864] Action: [Move to LEFT ARM]\n", "[Step 864] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 865] Action: [Move to LEFT ARM]\n", "[Step 865] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 866] Action: [Move to LEFT ARM]\n", "[Step 866] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 867] Action: [Move to LEFT ARM]\n", "[Step 867] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 868] Action: [Move to LEFT ARM]\n", "[Step 868] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 869] Action: [Move to LEFT ARM]\n", "[Step 869] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 870] Action: [Move to LEFT ARM]\n", "[Step 870] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 871] Action: [Move to LEFT ARM]\n", "[Step 871] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 872] Action: [Move to LEFT ARM]\n", "[Step 872] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 873] Action: [Move to LEFT ARM]\n", "[Step 873] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 874] Action: [Move to LEFT ARM]\n", "[Step 874] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 875] Action: [Move to LEFT ARM]\n", "[Step 875] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 876] Action: [Move to LEFT ARM]\n", "[Step 876] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 877] Action: [Move to LEFT ARM]\n", "[Step 877] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 878] Action: [Move to LEFT ARM]\n", "[Step 878] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 879] Action: [Move to LEFT ARM]\n", "[Step 879] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 880] Action: [Move to LEFT ARM]\n", "[Step 880] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 881] Action: [Move to LEFT ARM]\n", "[Step 881] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 882] Action: [Move to LEFT ARM]\n", "[Step 882] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 883] Action: [Move to LEFT ARM]\n", "[Step 883] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 884] Action: [Move to LEFT ARM]\n", "[Step 884] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 885] Action: [Move to LEFT ARM]\n", "[Step 885] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 886] Action: [Move to LEFT ARM]\n", "[Step 886] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 887] Action: [Move to LEFT ARM]\n", "[Step 887] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 888] Action: [Move to LEFT ARM]\n", "[Step 888] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 889] Action: [Move to LEFT ARM]\n", "[Step 889] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 890] Action: [Move to LEFT ARM]\n", "[Step 890] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 891] Action: [Move to LEFT ARM]\n", "[Step 891] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 892] Action: [Move to LEFT ARM]\n", "[Step 892] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 893] Action: [Move to LEFT ARM]\n", "[Step 893] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 894] Action: [Move to LEFT ARM]\n", "[Step 894] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 895] Action: [Move to LEFT ARM]\n", "[Step 895] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 896] Action: [Move to LEFT ARM]\n", "[Step 896] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 897] Action: [Move to LEFT ARM]\n", "[Step 897] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 898] Action: [Move to LEFT ARM]\n", "[Step 898] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 899] Action: [Move to LEFT ARM]\n", "[Step 899] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 900] Action: [Move to LEFT ARM]\n", "[Step 900] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 901] Action: [Move to LEFT ARM]\n", "[Step 901] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 902] Action: [Move to LEFT ARM]\n", "[Step 902] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 903] Action: [Move to LEFT ARM]\n", "[Step 903] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 904] Action: [Move to LEFT ARM]\n", "[Step 904] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 905] Action: [Move to LEFT ARM]\n", "[Step 905] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 906] Action: [Move to LEFT ARM]\n", "[Step 906] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 907] Action: [Move to LEFT ARM]\n", "[Step 907] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 908] Action: [Move to LEFT ARM]\n", "[Step 908] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 909] Action: [Move to LEFT ARM]\n", "[Step 909] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 910] Action: [Move to LEFT ARM]\n", "[Step 910] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 911] Action: [Move to LEFT ARM]\n", "[Step 911] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 912] Action: [Move to LEFT ARM]\n", "[Step 912] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 913] Action: [Move to LEFT ARM]\n", "[Step 913] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 914] Action: [Move to LEFT ARM]\n", "[Step 914] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 915] Action: [Move to LEFT ARM]\n", "[Step 915] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 916] Action: [Move to LEFT ARM]\n", "[Step 916] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 917] Action: [Move to LEFT ARM]\n", "[Step 917] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 918] Action: [Move to LEFT ARM]\n", "[Step 918] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 919] Action: [Move to LEFT ARM]\n", "[Step 919] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 920] Action: [Move to LEFT ARM]\n", "[Step 920] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 921] Action: [Move to LEFT ARM]\n", "[Step 921] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 922] Action: [Move to LEFT ARM]\n", "[Step 922] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 923] Action: [Move to LEFT ARM]\n", "[Step 923] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 924] Action: [Move to LEFT ARM]\n", "[Step 924] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 925] Action: [Move to LEFT ARM]\n", "[Step 925] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 926] Action: [Move to LEFT ARM]\n", "[Step 926] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 927] Action: [Move to LEFT ARM]\n", "[Step 927] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 928] Action: [Move to LEFT ARM]\n", "[Step 928] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 929] Action: [Move to LEFT ARM]\n", "[Step 929] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 930] Action: [Move to LEFT ARM]\n", "[Step 930] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 931] Action: [Move to LEFT ARM]\n", "[Step 931] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 932] Action: [Move to LEFT ARM]\n", "[Step 932] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 933] Action: [Move to LEFT ARM]\n", "[Step 933] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 934] Action: [Move to LEFT ARM]\n", "[Step 934] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 935] Action: [Move to LEFT ARM]\n", "[Step 935] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 936] Action: [Move to LEFT ARM]\n", "[Step 936] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 937] Action: [Move to LEFT ARM]\n", "[Step 937] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 938] Action: [Move to LEFT ARM]\n", "[Step 938] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 939] Action: [Move to LEFT ARM]\n", "[Step 939] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 940] Action: [Move to LEFT ARM]\n", "[Step 940] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 941] Action: [Move to LEFT ARM]\n", "[Step 941] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 942] Action: [Move to LEFT ARM]\n", "[Step 942] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 943] Action: [Move to LEFT ARM]\n", "[Step 943] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 944] Action: [Move to LEFT ARM]\n", "[Step 944] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 945] Action: [Move to LEFT ARM]\n", "[Step 945] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 946] Action: [Move to LEFT ARM]\n", "[Step 946] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 947] Action: [Move to LEFT ARM]\n", "[Step 947] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 948] Action: [Move to LEFT ARM]\n", "[Step 948] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 949] Action: [Move to LEFT ARM]\n", "[Step 949] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 950] Action: [Move to LEFT ARM]\n", "[Step 950] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 951] Action: [Move to LEFT ARM]\n", "[Step 951] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 952] Action: [Move to LEFT ARM]\n", "[Step 952] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 953] Action: [Move to LEFT ARM]\n", "[Step 953] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 954] Action: [Move to LEFT ARM]\n", "[Step 954] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 955] Action: [Move to LEFT ARM]\n", "[Step 955] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 956] Action: [Move to LEFT ARM]\n", "[Step 956] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 957] Action: [Move to LEFT ARM]\n", "[Step 957] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 958] Action: [Move to LEFT ARM]\n", "[Step 958] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 959] Action: [Move to LEFT ARM]\n", "[Step 959] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 960] Action: [Move to LEFT ARM]\n", "[Step 960] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 961] Action: [Move to LEFT ARM]\n", "[Step 961] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 962] Action: [Move to LEFT ARM]\n", "[Step 962] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 963] Action: [Move to LEFT ARM]\n", "[Step 963] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 964] Action: [Move to LEFT ARM]\n", "[Step 964] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 965] Action: [Move to LEFT ARM]\n", "[Step 965] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 966] Action: [Move to LEFT ARM]\n", "[Step 966] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 967] Action: [Move to LEFT ARM]\n", "[Step 967] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 968] Action: [Move to LEFT ARM]\n", "[Step 968] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 969] Action: [Move to LEFT ARM]\n", "[Step 969] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 970] Action: [Move to LEFT ARM]\n", "[Step 970] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 971] Action: [Move to LEFT ARM]\n", "[Step 971] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 972] Action: [Move to LEFT ARM]\n", "[Step 972] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 973] Action: [Move to LEFT ARM]\n", "[Step 973] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 974] Action: [Move to LEFT ARM]\n", "[Step 974] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 975] Action: [Move to LEFT ARM]\n", "[Step 975] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 976] Action: [Move to LEFT ARM]\n", "[Step 976] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 977] Action: [Move to LEFT ARM]\n", "[Step 977] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 978] Action: [Move to LEFT ARM]\n", "[Step 978] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 979] Action: [Move to LEFT ARM]\n", "[Step 979] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 980] Action: [Move to LEFT ARM]\n", "[Step 980] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 981] Action: [Move to LEFT ARM]\n", "[Step 981] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 982] Action: [Move to LEFT ARM]\n", "[Step 982] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 983] Action: [Move to LEFT ARM]\n", "[Step 983] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 984] Action: [Move to LEFT ARM]\n", "[Step 984] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 985] Action: [Move to LEFT ARM]\n", "[Step 985] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 986] Action: [Move to LEFT ARM]\n", "[Step 986] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 987] Action: [Move to LEFT ARM]\n", "[Step 987] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 988] Action: [Move to LEFT ARM]\n", "[Step 988] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 989] Action: [Move to LEFT ARM]\n", "[Step 989] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 990] Action: [Move to LEFT ARM]\n", "[Step 990] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 991] Action: [Move to LEFT ARM]\n", "[Step 991] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 992] Action: [Move to LEFT ARM]\n", "[Step 992] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 993] Action: [Move to LEFT ARM]\n", "[Step 993] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 994] Action: [Move to LEFT ARM]\n", "[Step 994] Observation: [LEFT ARM, Loss!, Null]\n", "[Step 995] Action: [Move to LEFT ARM]\n", "[Step 995] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 996] Action: [Move to LEFT ARM]\n", "[Step 996] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 997] Action: [Move to LEFT ARM]\n", "[Step 997] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 998] Action: [Move to LEFT ARM]\n", "[Step 998] Observation: [LEFT ARM, Reward!, Null]\n", "[Step 999] Action: [Move to LEFT ARM]\n", "[Step 999] Observation: [LEFT ARM, Loss!, Null]\n" ] } ], "source": [ "T = 1000 # number of timesteps\n", "\n", "obs = env.reset() # reset the environment and get an initial observation\n", "\n", "# these are useful for displaying read-outs during the loop over time\n", "reward_conditions = [\"Right Arm Better\", \"Left arm Better\"]\n", "location_observations = ['CENTER','RIGHT ARM','LEFT ARM','CUE LOCATION']\n", "reward_observations = ['No reward','Reward!','Loss!']\n", "cue_observations = ['Null','Cue Right','Cue Left']\n", "msg = \"\"\" === Starting experiment === \\n Reward condition: {}, Observation: [{}, {}, {}]\"\"\"\n", "print(msg.format(reward_conditions[env.reward_condition], location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))\n", "\n", "pA_history = []\n", "\n", "all_actions = np.zeros((T, 2))\n", "for t in range(T):\n", " \n", " qx = agent.infer_states(obs)\n", "\n", " q_pi, efe = agent.infer_policies()\n", "\n", " action = agent.sample_action()\n", "\n", " pA_t = agent.update_A(obs)\n", " pA_history.append(pA_t)\n", " \n", " msg = \"\"\"[Step {}] Action: [Move to {}]\"\"\"\n", " print(msg.format(t, location_observations[int(action[0])]))\n", "\n", " obs = env.step(action)\n", "\n", " all_actions[t,:] = action\n", "\n", " msg = \"\"\"[Step {}] Observation: [{}, {}, {}]\"\"\"\n", " print(msg.format(t, location_observations[int(obs[0])], reward_observations[int(obs[1])], cue_observations[int(obs[2])]))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(agent.A[1][1:,:,0],'Final beliefs about reward contingencies under the condition that the reward condition is RIGHT ARM BETTER')\n", "plot_likelihood(A_gp[1][1:,:,0],'True reward contingencies under the condition that the reward condition is RIGHT ARM BETTER')\n", "\n", "plot_likelihood(agent.A[1][1:,:,1],'Final beliefs about reward contingencies under the condition that the reward condition is LEFT ARM BETTER')\n", "plot_likelihood(A_gp[1][1:,:,1],'True reward contingencies under the condition that the reward condition is LEFT ARM BETTER')\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVYAAAD9CAYAAADnA18aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAV30lEQVR4nO3df9QmZX3f8ffneRDWiEEFTMLuggSIijapSFAbo5yKcaFVTtOYgHoUY1xNi6FJ/EGixQ1qPSY11KQkuColahQxrWateLDEH1QjyEaRBghmRXB3BVFE4g+QoN/+MfOws7fPj/vZvZbdWd6vc+ac+XHd18xcM/f3/s41c993qgpJUjszu3sDJGlvY2CVpMYMrJLUmIFVkhozsEpSYwZWSWrsfh1Yk/xikut393YsJMmhSb6TZHZ3b8tCklyQ5PU78fobk5wwRbnnJvnojq5nmdv0iCSVZJ/7Yn17k/vyOO3JFg2s/Zt6bvhhkjsH08+9rzaylf7NcuTcdFX936p65O7cpsVU1Veqav+q+sHu3pbdrar+sqp+aVfUPW1w19J25XEak0U/katq/7nxJDcCv1FVl06WS7JPVd3TfvO0t/Kc0d5sh7oCkhyfZEuSVyW5BfgfSU5L8qmJcvdmiEn2S/Jfk3wlydeSnJfkgYus48VJrkvy7STXJjmmn//oJJ9I8q0k1yR51uA1FyQ5N8mH+9ddkeSIftllfbEv9Bn3r83tx+D1NyZ5eZKrk9yR5H1JVgyWvzLJzUm+muQ3pt2/QXv9bpJb+zpeOKj3gUnenOSmfr2f6udtd0ma5IAk7+hfvzXJ6+e6CZIcmeST/eu/keR9ix27iXn3ZmxJ1iW5KMk7+za8Jsmxg7KPS/K5ftn7gBUTdf3bJFf1x+dvk/zsxHpeleRq4LvDS+0kP5nke0kOHMw7JsnXkzxg8vzq2+WlSf6xX9e5SdIvm+3b8xtJvpzk9CxwaZ/kXcChwIf68+KVg8XP7Y/nN5K8evCamSRnJvlSktv69nrYfO3dlz+5b5N/6l+zZrLdB23/7sH0E/s2/FaSLyQ5fpF13JjkFf25+93+PPmJJB/pj9WlSR46KP/+JLf058tlSR4zWHZBf/7+n/61n0xy2ETb/1aSG/q2+aMkM/2yXXKcRqeqphqAG4ET+vHjgXuANwH7AQ8ETgM+NfGaAo7sx88BNgAPAx4MfAh44wLrejawFfh5IMCRwGHAA4BNwO8D+wL/Gvg28Mj+dRcAtwHH0WXjfwlcON/2DPZjy8Q+fhY4pN/O64CX9svWALcAjwF+DHj3tPs3aK+z+304Cfge8NB++bnAJ4CVwCzwr/p2fUS/jn36ch8A3go8CHh4v60v6Ze9F3g13YflCuDJC7Ttdvs8z7FdB9zVb+Ms8Ebg8n7ZvsBNwG/3+/ErwD8Dr++XPw64FXhC/9oX9HXvN1jPVcBq4IHzrPti4DcH23UO8Kf9+GkMzq++Xf438BC6wPh1YE2/7KXAtcAq4KHApcN2XOzc7qfn2v1tdOf2zwHfBx7dLz8DuLyvf7/+mLx3gbqPA+4Ant4fm5XAoxZY7zrg3f34Srpz+aT+dU/vpw9eZB8uB36if+2twOf6Y7IC+Bjw2kH5X6c7T/cD/htw1WDZBXTvq6f0y98yT9t/nO5cPxT4It3V7C49TmMadiaw3g2sGCzfrkGHgYwuOH4XOGKw7EnAlxdY1yXAGfPM/0W64DYzmPdeYN3ghHj7YNlJwD9Mbs9g+nh+NLA+bzD9h8B5/fj5DD4I+v2aav/69dw5PGH6E/+JdG+aO4Gfm2d/HzF3otG9Yb5PH5D65acCH+/H3wmsB1YtcRy32+d5ju064NLBsqOBO/vxpwBfBTJY/rdsC6x/Drxuou7rgacO1vPri6z714BP9+Oz/bE+br7zq2+XJw+mLwLO7Mc/Rv+B00+fwI4F1lWDeZ8FTunHrwOeNlj2U3QfMD9SP13QPWfK9a5jW2B9FfCued4XL1ikrucOpv8n8OeD6ZcBH1zgtQ/p9/eAwftomJDsD/wAWD1o+zWD5f8B+JtdfZzGNOxMyv31qrpryrIH02V5f9dfBUAXjBa6270a+NI88w8BNlfVDwfzbqL7hJ5zy2D8e3QnxXJMvv6Qwbo3DpZtHoxPs3+31fZ9inPbdhBdRjHf/g7NZew3D9YxM9iOVwKvAz6b5HbgzVV1/hJ1LmSyDVb0l2eHAFurfxf0bprYxhckedlg3r5sa0PYvt0m/TVwXpLDgUcCd1TVZ5exnXPH+pCJ9Sy2zsUsVP9hwAeSDM/DH9B9+G2dqGM1XSa+XIcBz07yzMG8B9Bligv52mD8znmm94fuEhx4A92V4cHA3H4cRJddw6DNquo7Sb7J9u06bNOb2P4YT9rVx2mPszOBtSamv0sXXICuz2yw7Bt0B/YxVTV54s1nM3DEPPO/CqxOMjMIrnOXIrvazXSXLHNWD8aXu39D36C79D4C+MIi5TbTZawH1Tw3farqFuDFAEmeDFya5LKq2jRRdPI4zdK9uaZxM7AySQbB9VC2fShsBt5QVW9YpI7J82a4D3cluQh4HvAo4F1Tbtd827nQsVrWNi1gM13m/ekpy853LsPEsQCG75nNdBnri5e5bdN4DnAyXYZ4I3AAcDtdMjDn3jZLsj/dZf9XJ5Zf048fOrFsWss9TqPR8jnWLwCPSfIv093wWTe3oA+CbwPOSfJwgCQrkzxjgbreDrw8yePTObLvPL+C7hPvlf0NjeOBZwIXTrmNXwN+evm7BnSXMC9Md/Psx4D/PLdgB/bvXv1rzwf+OMkhfYf+k5LsN1HuZuCjwJuT/Hh/A+WIJE/t1/fsJHMn6e10wWKYUc35Il0G+m+SPAB4DV0/2jQ+Q9dX/Ft9+/8yXR/inLcBL03yhP64Pahfz4OnrB+6Lo3TgGex44H1IuCM/hg8hO6yejHLPS/OA94wd0MnycFJTl6g7Dvozpun9cdsZZJH9cuuAk7p2/JYuj7rOe8GnpnkGf05sSLdjcdV7LwH031I30YX2P/LPGVOSvLkJPvSXQldXlXDjPIVSR6aZDVdn/O8N0uXsNzjNBrNAmtVfZHu5sylwD8Cn5oo8iq6G0+XJ/mnvty8z5BW1fvpLlXeQ9eJ/kHgYVV1N10gPZEu0/sz4PlV9Q9TbuY64C/6u5O/OvXOddv0EeBP6C7FNtHdKIDuBF3W/s3j5cD/A64Evkl3U3C+Y/N8ukvra+mC51/R9e9Bd6PviiTfobuJdkZV3TDPftxB1yf2drrL1u8CWybLzadv/1+mC3zfpOsT/V+D5Rvpsub/3m/fpr7s1Pos8IfA56rqpqXKL+BtdB9CVwOfp7sUv4fucn0+bwRe058XL5+i/rfQtfFHk3yb7lx4wnwF+66MF9LdiLsD+CTdZT50H85H0LXVH9Cd73Ov20yXVf4+3Q2fzcAraPOefSfd5ftWunPp8nnKvAd4Ld1xfjzdVcTQXwN/R/fh8GG6D5DlWu5xGo1s312maSV5NPD3dHe8fR6zoSQfA95TVW9vVN+JdDchD1uysEhyAd0NztcssLyAo+bpZtrZ9e41x+l+/ZXW5Ury79I9r/pQuqzyQwbVtpL8PHAMO3ZpOVfHA5OclGSfJCvpMq8PtNpGtbE3HycD6/K8hO4xqS/RXa785u7dnL1Lkr+g60L5T1X17Z2piu7S+na6S8zrgLN2fgvV2G4/TknOT/elnb9fYHmS/EmSTem+fHHMVPXaFSDp/irJU4DvAO+sqsfOs/wkumeAT6LrR39LVc3bnz5kxirpfquqLqO7QbeQk+mCblXV5cBDkvzUIuWBnXiONclaYC3AW9/61sevXbt2R6uSdP+SpYssbF1382wqf9B13w2D0/qqWr+M1a1k+y8ubOnn3bzYi3Y4sPYbN7eB9idIuk8s5zJ7Ik7dZ9r+isxdtzWtbnRWHLht3LbYNm5bbBu3LXa6ip1Kd5dvK9t/I2wVP/q15R9hH6ukUZlZxtDABuD5/dMBT6T7/YpFuwGgdcYqSbtYy2wwyXvpfvHtoHS/U/xauh+7oarOo/s22El03yL8Ht236JZkYJU0Ki3/AK6qTl1ieQH/cbn1Glgljcp93Me6QwyskkZlDDeGDKySRsXAKkmN2RUgSY2ZsUpSYy2fCthVDKySRsWMVZIas49VkhozY5WkxgysktSYN68kqTEzVklqzJtXktSYGaskNWZglaTG7AqQpMZ8KkCSGrMrQJIaM7BKUmP2sUpSY2asktSYgVWSGpuZ2fM7AwyskkYlMbBKUlNmrJLUmBmrJDUWM1ZJamtmds9/LsDAKmlU7AqQpMbsCpCkxsxYJakxH7eSpMbMWCWpMZ8KkKTGxnDzas8P/ZI0kGTqYcr61iS5PsmmJGfOs/zQJB9P8vkkVyc5aak6DaySRiUzmXpYsq5kFjgXOBE4Gjg1ydETxV4DXFRVjwNOAf5sqXoNrJJGpXHGehywqapuqKq7gQuBkyfKFPDj/fgBwFeXqtQ+VkmjspzHrZKsBdYOZq2vqvWD6ZXA5sH0FuAJE9WsAz6a5GXAg4ATllqvgVXSqCznqYA+iK5fsuDiTgUuqKo3J3kS8K4kj62qHy70AgOrpFFp/BzrVmD1YHpVP2/oRcAagKr6TJIVwEHArQtVah+rpFHJzPTDFK4EjkpyeJJ96W5ObZgo8xXgaQBJHg2sAL6+WKVmrJJGpWXGWlX3JDkduASYBc6vqmuSnA1srKoNwO8Cb0vy23Q3sk6rqlqsXgOrpFFp/QWBqroYuHhi3lmD8WuBX1hOnQZWSaMy61daJaktf4RFkhobw28FGFgljYoZqyQ1ZsYqSY2ZsUpSYzP7zO7uTViSgVXSuJixSlJb9rFKUmOZ8QsCktSUN68kqTW7AiSprZlZnwqQpKa8eSVJrRlYJamtTPnXALuTgVXSqNgVIEmNxZtXktSWGaskNWZglaTG/OaVJLXmbwVIUlt2BUhSY36lVZIaM2OVpNa8eSVJbZmxSlJj/oOAJDXmc6yS1Fj8+2tJasuMVZIa8+aVJLVmxipJbY0hY93zn1uQpKGZTD9MIcmaJNcn2ZTkzAXK/GqSa5Nck+Q9S9VpxippVFr2BCSZBc4Fng5sAa5MsqGqrh2UOQr4PeAXqur2JA9fql4zVknj0jZjPQ7YVFU3VNXdwIXAyRNlXgycW1W3A1TVrUtu4jJ3SZJ2q2Q5Q9Ym2TgY1k5UtxLYPJje0s8b+hngZ5J8OsnlSdYstY12BUgal2X0BVTVemD9Tq5xH+Ao4HhgFXBZkn9RVd9a6AVmrJLGZWYZw9K2AqsH06v6eUNbgA1V9c9V9WXgi3SBdtFNlKTRyMzM1MMUrgSOSnJ4kn2BU4ANE2U+SJetkuQguq6BGxar1K4ASaPS8qmAqronyenAJcAscH5VXZPkbGBjVW3ol/1SkmuBHwCvqKrbFqvXwCppXBp/QaCqLgYunph31mC8gN/ph6kYWCWNy57/xSsDq6Rx8detJKmxzBpYJamtPT+uGlgljYxdAZLU1gjiqoFV0siM4PdYDaySRsWMVZIaG8M/CBhYJY2LgVWSGhtBX4CBVdKojCCuGlgljcwIIquBVdKoZAS/Im1glTQu97ubVysObFrdqNkW29gW29gWO20Mv261w0n18N8P16/f2f/qkqQptf37611ihzPWiX8/rDabI0lLGEHG2rYr4K5F/wZm7ze8zLMtto3bFveOrhtBUNiV1lWDHOx+18cqSbvazOzu3oIlGVgljYsZqyQ1NoIHWQ2sksbFjFWSGhvBDUADq6RxmbErQJLamvWpAElqy64ASWrMwCpJjdnHKkmNmbFKUlv+S6skteZTAZLUmF0BktSYN68kqbERZKx7fuiXpKFk+mGq6rImyfVJNiU5c5Fy/z5JJTl2qTrNWCWNS8ObV0lmgXOBpwNbgCuTbKiqayfKPRg4A7himnrNWCWNS9s/EzwO2FRVN1TV3cCFwMnzlHsd8Cbgrqk2cdp9kaQ9QmamHob/Jt0PaydqWwlsHkxv6edtW11yDLC6qj487SbaFSBpXJbxBYGJf5NetiQzwB8Dpy3ndQZWSePS9qmArcDqwfSqft6cBwOPBT6Rbr0/CWxI8qyq2rhQpQZWSePS9jnWK4GjkhxOF1BPAZ4zt7Cq7gAOmptO8gng5YsFVTCwShqbhoG1qu5JcjpwCTALnF9V1yQ5G9hYVRt2pF4Dq6RxafwvrVV1MXDxxLyzFih7/DR1Glgljcue/8UrA6ukkRnBV1oNrJLGxcAqSY0ZWCWpMQOrJDVmYJWkxgysktSYgVWSWjOwSlJb/v21JDVmV4AktWZglaS2zFglqTEDqyQ1tufHVQOrpJFp/Husu4KBVdK42BUgSY0ZWCWpsT0/rhpYJY2MGaskNebNK0lqzIxVkhobQWDd83NqSRoZM1ZJ4zKCjNXAKmlcDKyS1JhPBUhSY2asktSYGasktWbGKklt2RUgSY3ZFSBJjRlYJam1PT+w7vlbKElDyfTDVNVlTZLrk2xKcuY8y38nybVJrk7yN0kOW6pOA6ukcWkYWJPMAucCJwJHA6cmOXqi2OeBY6vqZ4G/Av5wqXoNrJJGJssYlnQcsKmqbqiqu4ELgZOHBarq41X1vX7ycmDVUpUaWCWNy8zs1EOStUk2Doa1E7WtBDYPprf08xbyIuAjS22iN68kjcz0z7FW1XpgfZO1Js8DjgWeulRZA6ukcWn7uNVWYPVgelU/b/tVJicArwaeWlXfX6pSA6ukUUnbb15dCRyV5HC6gHoK8JyJ9T0OeCuwpqpunaZS+1gljUy7m1dVdQ9wOnAJcB1wUVVdk+TsJM/qi/0RsD/w/iRXJdmwVL1mrJLGpfE3r6rqYuDiiXlnDcZPWG6dBlZJ4+JXWiWpMQOrJLXmzwZKUlv+HqskNWZXgCS1ZsYqSW1ldndvwZIMrJLGxT5WSWrMwCpJrXnzSpLaMmOVpMZ83EqSWjNjlaS27AqQpNbsCpCktsxYJak1A6skteVTAZLUmF0BktSagVWS2jJjlaTW7GOVpLbMWCWpNTNWSWoqZqyS1JqBVZLaMmOVpNYMrJLUlv/SKkmN2RUgSa0ZWCWpLTNWSWrNwCpJbZmxSlJjI3gqYM//0q0kbSfLGKaoLVmT5Pokm5KcOc/y/ZK8r19+RZJHLFWngVXSuCTTD0tWlVngXOBE4Gjg1CRHTxR7EXB7VR0JnAO8acl6q2rZ+zWPJpVIul/YuU7Su26bPt6sOHDRdSV5ErCuqp7RT/8eQFW9cVDmkr7MZ5LsA9wCHFyLBM8dzliTrE2ysR/ezfLy8712SPKS3b0Ne8pgW9gWC7TFWnbGigMz7TARpzbOs+6VwObB9JZ+3rxlquoe4A7gwMU2cYcDa1Wtr6pjq+pY4NE7Ws9eaOdOmr2LbbGNbbHNfdYWwzjVD+vvi/Xaxyrp/mwrsHowvaqfN2+ZvivgAOC2xSo1sEq6P7sSOCrJ4Un2BU4BNkyU2QC8oB//FeBji/WvQrvnWO+T9HokbIttbIttbItt9pi2qKp7kpwOXALMAudX1TVJzgY2VtUG4B3Au5JsAr5JF3wX1eqpAElSz64ASWrMwCpJjRlYJakxA6skNWZglaTGDKyS1JiBVZIa+/9priQnfj45dgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_likelihood(agent.A[2][1:,:,1],'Final beliefs about cue mapping')\n", "plot_likelihood(A_gp[2][1:,:,1],'True contingencies underlying the cue mapping')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.8 ('base')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "vscode": { "interpreter": { "hash": "70b7ceca5df5387258d861d4588082cea9500e731be001548c95afd8cd8c3af8" } } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: examples/model_fitting/fitting_with_pybefit.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": 1, "id": "0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n" ] }, { "cell_type": "code", "execution_count": null, "id": "1", "metadata": {}, "outputs": [], "source": [ "from jax import numpy as jnp, random as jr\n", "from jax import tree_util as jtu\n", "from jax import vmap, nn, lax\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from pymdp.agent import Agent\n", "from pymdp.envs import TMaze\n", "\n", "from pybefit.inference import (\n", " run_nuts,\n", " run_svi,\n", " default_dict_nuts,\n", " default_dict_numpyro_svi,\n", ")\n", "\n", "from pybefit.inference import NumpyroModel, NumpyroGuide\n", "from pybefit.inference import Normal, NormalPosterior\n", "from pybefit.inference.numpyro.likelihoods import pymdp_likelihood as likelihood\n", "from numpyro.infer import Predictive\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "2", "metadata": {}, "source": [ "## Fitting the parameters of active inference agents performing in the `T-Maze` environment\n", "\n", "We set up a TMaze instance with a fully reliable cue-to-reward mapping, so the cue unambiguously reveals the rewarding arm. We also set the rewarded-arm outcome mapping to be probabilistic at 80%. This means that in the rewarded arm, reward is observed with probability 0.8 and punishment with probability 0.2, while these probabilities are inverted in the punished arm (`dependent_outcomes=True`).\n", "\n", "We also parameterize 10 different agent-environment pairs (`batch_size=10`), 100 experimental blocks (episodes) per agent, and 5 timesteps per block.\n" ] }, { "cell_type": "markdown", "id": "3", "metadata": {}, "source": [ "
\n", "Explanatory note on batch_size, subject, block, timestep, and trial terminology\n", "\n", "Experimental data collected from individual participants or subjects in psychological and psychiatric studies often follows a multi-level temporal structure. Typically, each subject participates in a task independently from other participants, and each subject performs multiple episodes or blocks sequentially (for example, 20 blocks of 100 trials per block).\n", "\n", "Depending on the experimental design, blocks may be independent or may include between-block correlations (for example, regular changes in initial task state across blocks). Within each block, individual \"trials\" or \"timesteps\" occur sequentially. There can also be within-block, between-trial correlation structure, and this is an assumption we make in `pymdp`: a single active inference process unfolds across these timesteps.\n", "\n", "Because the word \"trial\" often refers to events that have their own internal temporal structure, this notebook uses `timesteps` to reduce ambiguity. This aligns with reinforcement learning and active inference workflows, where these are naturally treated as timesteps and blocks are naturally treated as episodes.\n", "\n", "
\n" ] }, { "cell_type": "code", "execution_count": null, "id": "4", "metadata": {}, "outputs": [], "source": [ "seed_key = jr.PRNGKey(101)\n", "\n", "# setting the parameters for the environment\n", "num_blocks = 100 # number of blocks (number of multi-timestep episodes that are run sequentially, per agent)\n", "num_timesteps = 5 # number of timesteps (or \"trials\") per block\n", "\n", "reward_condition = None # 0 is reward in left arm, 1 is reward in right arm, None is random allocation\n", "reward_probability = 0.8 # 80% chance of reward in the correct arm\n", "punishment_probability = 0.0 # only used when dependent_outcomes=False\n", "cue_validity = 1.0 # 100% valid cues\n", "dependent_outcomes = True # if True, reward and punishment probabilities are coupled across arms via reward_probability. If False, punishment occurs with the fixed punishment_probability.\n", "\n", "# initialising the environment. see tmaze.py in pymdp/envs for the implementation details.\n", "task = TMaze( \n", " reward_probability=reward_probability, \n", " punishment_probability=punishment_probability, \n", " cue_validity=cue_validity, \n", " reward_condition=reward_condition,\n", " dependent_outcomes=dependent_outcomes\n", ")\n", "\n", "batch_size = 10 # batch_size, which in this case corresponds to the number of agents to fit in parallel\n", "key, _key = jr.split(seed_key)\n", "init_obs, init_states = vmap(task.reset)(jr.split(_key, batch_size))\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "5", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_95807/2592818604.py:42: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n" ] } ], "source": [ "# Constrained recoverable setup: infer only reward-probability beliefs.\n", "# Keep preference strength (lambda) and initial reward-state prior fixed.\n", "num_params = 1\n", "num_agents = batch_size\n", "prior = Normal(num_params, num_agents, backend=\"numpyro\")\n", "\n", "\n", "def transform(z):\n", " na, _ = z.shape\n", "\n", " reward_prob = 0.5 + 0.5 * nn.sigmoid(z[..., 0]) # constrain reward probability to be between 0.5 and 1\n", " lam = jnp.full((na,), 1.2)\n", "\n", " A = lax.stop_gradient(task.A)\n", " A = jtu.tree_map(lambda x: jnp.broadcast_to(x, (na,) + x.shape), A)\n", " B = lax.stop_gradient(task.B)\n", " B = jtu.tree_map(lambda x: jnp.broadcast_to(x, (na,) + x.shape), B)\n", "\n", " one_minus = 1.0 - reward_prob\n", "\n", " reward_left = jnp.stack([reward_prob, one_minus], -1)\n", " punish_left = jnp.stack([one_minus, reward_prob], -1)\n", " reward_right = jnp.stack([one_minus, reward_prob], -1)\n", " punish_right = jnp.stack([reward_prob, one_minus], -1)\n", " zeros = jnp.zeros_like(reward_left)\n", "\n", " side = jnp.broadcast_to(jnp.array([[1., 1.], [0., 0.], [0., 0.]]), (na, 3, 2))\n", " left_col = jnp.stack([zeros, reward_left, punish_left], axis=-2)\n", " right_col = jnp.stack([zeros, reward_right, punish_right], axis=-2)\n", " A[1] = jnp.stack([side, left_col, right_col, side, side], axis=-2)\n", "\n", " C = [\n", " jnp.zeros((na, A[0].shape[1])),\n", " jnp.expand_dims(lam, -1) * jnp.array([0., 1., -1.]),\n", " jnp.zeros((na, A[2].shape[1])),\n", " ]\n", " D = [\n", " jnp.zeros((na, B[0].shape[1])).at[:, 0].set(1.0),\n", " jnp.full((na, 2), 0.5),\n", " ]\n", "\n", " return Agent(\n", " A,\n", " B,\n", " C=C,\n", " D=D,\n", " policy_len=2,\n", " A_dependencies=task.A_dependencies,\n", " B_dependencies=task.B_dependencies,\n", " batch_size=na,\n", " action_selection=\"stochastic\",\n", " )\n", "\n", "\n", "key, _key = jr.split(seed_key)\n", "# Use a broad, deterministic latent grid so recoverability is visible across agents.\n", "z = jnp.linspace(-2.5, 2.5, num_agents).reshape(num_agents, num_params)\n", "\n", "agents = transform(z)\n" ] }, { "cell_type": "markdown", "id": "6", "metadata": {}, "source": [ "### Sample from the TMaze environment and visualize the results from one block, showing the expected behavior (visit the cue, then choose an arm)" ] }, { "cell_type": "code", "execution_count": 3, "id": "7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_95807/2592818604.py:42: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n" ] } ], "source": [ "opts_task = {\n", " \"task\": task,\n", " \"num_blocks\": num_blocks,\n", " \"num_trials\": num_timesteps,\n", " \"num_agents\": num_agents,\n", "}\n", "opts_model = {\"prior\": {}, \"transform\": {}, \"likelihood\": opts_task}\n", "\n", "model = NumpyroModel(prior, transform, likelihood, opts=opts_model)\n", "\n", "pred = Predictive(model, num_samples=1)\n", "key, _key = jr.split(key)\n", "samples = pred(_key)\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "8", "metadata": {}, "outputs": [ { "data": { "image/png": "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3RnV4SRzQE0utKnbWyzHrXH5NxDP1OLk8L1oCg8iVjO2WAdLDAG1/pOqDmY7mqpN4Rzy9GIbui40Av9i/ZVerIP1L/tLMdyj2tB1ITkPXlsH6x8DVXXHk2kaCAbkiXBL3aIuxPPdiM92LT+W0bILQ4R96zpHPR49Cq3LJTGsHjC29RjcLj1iINq+HA5gPrsPC9N715R/uRXA6wO8q/JmcZ5fDXNYYujFwnTPNWMI+FxbmkSRqJLydy7Ti/lsD1xGYbJxOVGVJ+h4vZWTv3OZPnUculYMzF+qzhyuwVTqEGbSB9REv0tPUZZbc3yrBkroncNBzGT2Yy7bC1MeM+8UnmbNOpiqzUbnwVL/LmSlDb1Yfy3mb+W0oSWGfViQdsQ1YmD+7m6Gs1Lqb5pszsbs3NaehLVeKOhSP+WWztiYXygthnCNCwF/+WMguuk5bACxqBset1mxOSwVZl2tR1W6RJWI+cv8pcrGHGYOU+Vi/jJ/d6uydDwREREREREREVH1K3+XKRERERERERERVSV2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBERERERERER0Y5gxxMREREREREREe0IdjwREREREREREdGOYMcTERERERERERHtCHY8ERERERERERHRjmDHExERERERERER7Qh2PBEREREREREREXbC/w/j+A64M+lvcgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "frames = []\n", "for t in range(num_timesteps): # iterate over timesteps\n", " # get observations for this timestep\n", " observations_t = [\n", " samples[\"outcomes\"][0][0,0,:, t], # subset by predictive sample (first leading dimension) and block (second leading dimension)\n", " samples[\"outcomes\"][1][0,0,:, t], \n", " samples[\"outcomes\"][2][0,0,:, t] \n", " ]\n", " observations_t = jtu.tree_map(lambda x: jnp.expand_dims(x, -1), observations_t) # add lagging dimension as is done before returning in task.step()\n", " \n", " frame = task.render(mode=\"rgb_array\", observations=observations_t).astype(jnp.uint8) # render the environment using the observations for this timestep\n", " plt.close() # close the figure to prevent memory leak\n", " frames.append(frame)\n", "\n", "frames = jnp.array(frames, dtype=jnp.uint8)\n", "\n", "## Make a panel of subplots showing the frames at different timesteps of the video sequence (don't assume mediapy dependency)\n", "fig, axes = plt.subplots(1, num_timesteps, figsize=(15, 5))\n", "for i in range(num_timesteps):\n", " axes[i].imshow(frames[i])\n", " axes[i].axis('off')\n", " axes[i].set_title(f'Timestep {i+1}')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "9", "metadata": {}, "source": [ "### Inference Method 1: HMC with NUTS\n", "\n", "Use the No U-Turn Sampler (NUTS) for Hamiltonian Monte Carlo sampling-based inference to sample from the parameter posterior. `pybefit` provides useful wrappers for setting up an NUTS-HMC run.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "10", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'seed': 0, 'num_samples': 100, 'num_warmup': 400, 'sampler_kwargs': {'kernel': {}, 'mcmc': {'progress_bar': True}}}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_95807/2592818604.py:42: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n", "sample: 100%|██████████| 500/500 [05:56<00:00, 1.40it/s, 7 steps of size 7.24e-01. acc. prob=0.82] \n" ] } ], "source": [ "# perform inference on parameters using no-u-turn sampler (NUTS)\n", "# opts_sampling dictionary can be used to specify various parameters\n", "# either for the NUTS kernel or MCMC sampler\n", "measurements = {\n", " \"outcomes\": [outcomes[0] for outcomes in samples[\"outcomes\"]],\n", " \"multiactions\": samples[\"multiactions\"][0],\n", "}\n", "\n", "opts_sampling = default_dict_nuts\n", "opts_sampling[\"num_warmup\"] = 400\n", "opts_sampling[\"num_samples\"] = 100\n", "opts_sampling[\"sampler_kwargs\"] = {\"kernel\": {}, \"mcmc\": {\"progress_bar\": True}}\n", "print(opts_sampling)\n", "\n", "mcmc_samples, mcmc = run_nuts(model, measurements, opts=opts_sampling)\n" ] }, { "cell_type": "markdown", "id": "11", "metadata": {}, "source": [ "### Plot each ground truth parameter alongside their posterior means (mean taken over parallel HMC samples/chains)" ] }, { "cell_type": "code", "execution_count": 6, "id": "12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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hm7n1qNnz55SokQJt5cLAAAAoKhVVPobKioBAMgf+pJj7dq11m9SD+09qfT5dd++fVK8eHEnwKxWrVqWXRwAAAAAvFeBVVSqRYsWybvvvmtDdb766iupXr26/Otf/7IBO507d76QdQMAAB/0+uuvy2uvvWavHTy0ZYz2mdSqSe1L6Qkqa9So4eJKAQAAALgl16UK//73vyU6OlpKliwpq1atkpMnT9p5TUSfeeaZglgjAADwIsePH7ehN5n7TOrrBA0pdQv3gAED5IMPPpCEhARZvHix/OMf/7A+lAAAAAD8W663frdq1UoeeOABGTJkiISGhsqvv/4q9erVk19++cUa3CcmJoovYes3AAB/TbduT5061QLK2bNny4kTJ2Ty5Mly9dVX2/X4+Hh7rdCnTx9CSQAAAMDPHCmord8bN26Url27nnVef7HDhw/nfqUAAMArHThwQD755BPrN7lkyRJJT093rtWpU8fZdaG0PYweAAAAAJBvQWV4eLhs2bLFfgDJTLduaWUlAADwTRpE6puSFSpUsNtHjx6VkSNHOtdbt25t/SYHDRokzZo1sx6UAAAAAFBgQeXtt98u9913n3z00Uf2A8ju3btl6dKl9oPK6NGjc/vtAABAEaZDbubPn29Vk1OmTJGWLVvaFm9Vu3Zt+dvf/iZNmzaVgQMHSq1atdxeLgAAAAAvluugctSoUVZRcemll1qzfN0Gro3xNai85557CmaVAACg0GjfmO+//976TepH7Sfjodu5M0/ofuedd1xcKQAAAAC/HqbjoT+k6BZw3fYVGRnps43xGaYDAPA3+mbkvHnzsrR90YpJ3dLdo0cPCQkJcXV9AAAAAHwzXwvM7TceNmyYJCcnWyWFBpTt27e3kPLYsWN2DQAAFH36PuXatWvl6aeflg4dOsjevXuda7GxsdKoUSPbRaHtXXbt2iXvvvuu9O3bl5ASAAAAQNGpqAwKCpKEhASpUqVKlvP79++3iovTp09LQTh48KBtLY+Li5PAwEC58sor5bXXXjtvJWf37t1l4cKFWc5pL63cbFOjohIA4CvS0tLkxx9/tC3d2nNy69atzrUPP/zQecNR76fP9wAAAACQH3KarxXLzTfUTFMPrajMXFGhP9BMnz79rPAyP914440WkM6ePVtOnTolQ4cOlTvuuEO++OKLvxz+88QTTzi3S5UqVWBr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(16, 5))\n", "ground_truth_z = samples['z'][0]\n", "for i in range(num_params):\n", " plt.scatter(ground_truth_z[:, i], mcmc_samples[\"z\"].mean(0)[:, i], label=i)\n", "\n", "plt.plot((ground_truth_z.min(), ground_truth_z.max()), (ground_truth_z.min(), ground_truth_z.max()), \"k--\")\n", "plt.ylabel(\"posterior mean (MCMC)\")\n", "plt.xlabel(\"true value\")\n", "plt.legend(title=\"parameter id\")\n" ] }, { "cell_type": "markdown", "id": "13", "metadata": {}, "source": [ "### Transform the latent parameter corresponding to the reward probability into probability space and investigate overlap between ground-truth and inferred parameter" ] }, { "cell_type": "code", "execution_count": 7, "id": "14", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "reward-probability Pearson r: 0.906\n", "reward-probability bimodality score: 0.100\n" ] }, { "data": { "image/png": "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rw0bNkijRo0kMjLS2Zc7d27p1KmTZUx27NjR1fUBcLnEOzo6WlauXClt27Z19gUGBtr20qVLE/0czZrUz/GWge/YsUNmzpxpP1ji27p1qxQrVsz6Rdx1112ye/fuq95NOXXqVIIHAAAAAADIPPbs2WNt5DT5yatSpUqSLVs2CQsLkwcffFBmzZolR44csYpOTXjKmzevq2sG4HIGpf5AiI2NlSJFiiTYr9ubNm1K9HM0c1I/r1mzZuLxeOTChQvy0EMPWe8ILy0V16a22qdS07aHDRsmzZs3l3Xr1klISEii1x0+fLidBwAAAAAAMgeNC+h7fS3d1seqVatsf6lSpSwYqe3gtMLyjz/+sApMTYoCkDFlquaMCxculNdee00++ugjC0Rqw9r+/ftbA9vBgwfbOfHTs2vWrGnnlS5dWr777ju57777Er3us88+a70wvTSDUgfwAAAAAACAjOf111+X0aNHy86dO519GpBs3LixlW7HxMRIUFCQ7dfqSgAZm2sByoIFC0qWLFnk4MGDCfbr9uX6R2oQ8u6775b777/ftmvUqCFnzpyRBx54QJ5//vlE74ZouramdGsw83KyZ89uDwAAAAAAkLHo+/5ffvlFunTp4gzB3b9/vwUn9b18u3btLCipxy+u0gSQObiW36x3MurVqyfz5s1z9sXFxdm23vFIzNmzZy8JQmqQ05vanZjTp0/L9u3brd8EAAAAAADI+A4fPmwDdHWqtiY43XzzzbJ48WLnuCYq/fDDD9YGbtq0aVYxSXASyLxcLfHWsupevXpJ/fr1JTw8XEaOHGl3RrxTvXv27CnFixe3HpGqa9euNvm7Tp06Tom3ZlXqfm+g8sknn7RtLevWOypDhw61Y9r8FgAAAAAAZExaUfn111/LTz/9JL///rslMXlpD8njx48729WrV7cHAN/gaoCye/fudldkyJAhcuDAAaldu7bMnj3bueuh07fjZ0y+8MIL1lNC/9y3b58UKlTIgpGvvvqqc87evXstGHn06FE7rgN1li1bZh8DAAAAAICMQQOQWvWYJ08eZwq3Jh151a1b1zIotXxbW7xpPACAbwrwXK422o/pkJzQ0FA5efKk84MSAAAAAABcm+joaFmwYIFlSU6dOtX6R44dO9aOaXhCE4400ahbt242jRuAf8TXMtUUbwAAAAAAkLlocGLWrFny448/2p8atPBauHChBSY1O1IfEyZMcHWtANxBgBIAAAAAAKSZli1byurVq53tokWLWoaklm63atWK0m0ABCgBAAAAAMC10SzI9evXW+m2zpb4+eefJUeOHHasU6dOEhUVZQFJ7SmpQ3Ljz5sAAHpQJoIelAAAAAAAXFlsbKxN29agpD62b9/uHNP+kjrUVsXExEi2bNlcXCkAN9CDEgAAAAAApJmZM2dKr1695MiRI86+7Nmz29AbzZJs3Lixs5/gJICrIUAJAAAAAAAu6/DhwzJ9+nQpV66ctGjRwvaVL1/egpP58uWTLl26WPn2DTfcILlz53Z7uQAyIQKUAAAAAAAgAS3X1rJtnbytZdxxcXFy2223OQHKypUry+LFi6Vhw4aSNSuhBQDXhp8iAAAAAADABt0MHTpUpkyZIuvWrUtwrE6dOhaMjK9p06bpvEIAvooAJQAAAAAAfig6OlrWrFkjDRo0sO2AgACbvq3BySxZskjLli2tn2S3bt2kdOnSbi8XgA8jQAkAAAAAgJ/QabqzZs2y8m0ddHP27FnrMZk3b147PmjQIDlz5ox06tTJ+ksCQHogQAkAAAAAgA+LiIiwXpL6WLBggcTExDjHihQpIlu2bJHw8HDb1mE3AJDeCFACAAAAAOBjvSRjY2Od4TXaU7Jfv37OcR1wo4FIfWhgMjAw0MXVAgABSgAAAAAAMj0NSC5ZssSZvP3EE09I37597Zj2kPz666+tn6Q+qlSp4vZyASCBAI/eWkECp06dktDQUOvNkSdPHreXAwAAAADAJbR/5Ny5cy0gOW3aNDly5IhzTHtIzpgxw9X1AfBvp5IRXyODEgAAAACATCYqKkqKFStmb/y9dNBNly5dLEuyffv2rq4PqSc2ziMrdh6TQ5FRUjgkWMLL5pcsgQFuLwtIVQQoAQAAAADIwHbs2GGl21u3bpWPPvrI9gUHB0uDBg1swI0GJLWfZPPmzSVbtmxuLxepaPa6CBk2bYNEnIxy9oWFBsvQrtWkQ/UwV9cGpCZKvBNBiTcAAAAAwC36Nn3VqlVWuq2Byb///ts5tm/fPsucVMePH7esyYAAsul8NTjZ9+tVcnHQxvt/++MedQlSIkOjxBsAAAAAgExozJgxMnToUNm7d6+zL0uWLHL99ddbpmSOHDmc/fny5XNplUiPsm7NnEwso8zz/0FKPd6uWlHKveETCFACAAAAAOBSdtHs2bOlUaNGUqpUKdunJdoanMyVK5d06NDBgpKdO3eW/Pnzu71cpCPtORm/rDuxIKUe1/Maly+QrmsD0gIBSgAAAAAA0klERIRMnTrVyrfnz58v0dHRMmLECHn66afteNeuXWX69OnSpk0b6zMJ/6QDcVLzPMCnApQbN26UCRMmyKJFi2TXrl1y9uxZKVSokNSpU8cmhN16662SPXv2tFstAAAAAACZMFPyww8/tH6Sy5cvT3CsUqVK1qPNS3tKasYk/JtO607N8wCfGJKjzXn1bs7ixYuladOmEh4ebk15tffFsWPHZN26dRa01B+6et7jjz+eqQOVDMkBAAAAAKRUbGysZUqWKFHCts+dOycFCxa0JB+lJd3eydtVqlRxebXIqD0om42YLwdORiXah1K7ThYNDZbFz7SmByX8Z0iOZkY+9dRT8v3339vdnMtZunSpvPvuu/LWW2/Jc889l/yVAwAAAACQCWkQcu7cuZYlqSXcWm24fv16O6bJPc8//7wFKbWEOyyMycu4Mg06Du1azaZ4a/gxfpDSG47U4wQn4VcZlDExMdaoN6mSe35GQwYlAAAAAOBqjh49KjNmzLB+knPmzHEyJJUm92zZssUClUBKzV4XYdO64w/MCQsNtuBkh+oEuuE78bUkBSj9DQFKAAAAAMDV9O7dW8aNG+dslyxZ0sq2tXz7+uuvz9SJO8hY5d46rVsH4mjPyfCy+cmchM/F1wKTelGdLlatWjW7+MX0C1133XXWhxIAAAAAAF+hOT06l2HIkCFSq1Yt+fPPP51jGojUfXpMz9Fhsu+9955N4CY4idSiwcjG5QvIjbWL258EJ+HXU7xHjhwpffr0STTiqdHQBx98UN5++21p3rx5aq8RAAAAAIB0o23Lfv31V+snqY89e/Y4x3S7fv369rF30A0AIJ0ClGvWrJERI0Zc9vgNN9wg//nPf65xOQAAAAAAuGfjxo3SpEkTOXHihLMvZ86c0qFDBwtIdu7c2dkfEEAmGwCka4Dy4MGDV0xRz5o1qxw+fDhVFgUAAAAAQFqLiIiwidtKqwJVxYoVLfBYuHBh6datmwUltWRbJ3EDAFwOUBYvXlzWrVsnFSpUSPT42rVrJSyMCVIAAAAAgIzbT3LTpk02dVtLtZcvX+4Mt3nggQcsMKnJNytWrJCyZctKlixZ3F4yAPiFJAcoO3XqJIMHD7a09uDg4ATHzp07J0OHDpUuXbqkxRoBAAAAALgm2pJs9OjRsnXr1gT7GzZsaH0ko6OjJXv27Lbvcok5AACXA5QvvPCCTJ48WSpVqiSPPPKIVK5c2fbr3acPP/xQYmNj5fnnn0+jZQIAAAAAkDSaRDN//nxp3769ZUSq3bt3W3AyKChIWrdubUHJrl27SrFixdxeLgD4vQCP5rgn0a5du6Rv374yZ84cS423CwQE2A99DVJqCrwvOHXqlE0mP3nyZKJTywEAAAAAGcvRo0dlxowZVro9e/ZsOXv2rCxYsEBatmzptCXTBButCuR9HgBkrPhakjMoVenSpWXmzJly/Phx2bZtmwUptYFwvnz5rnXNAAAAAAAky6FDh2T8+PHWU3LRokVW2edVokQJC1p61axZ0x4AgIwnWQFKLw1INmjQIPVXAwAAAADAZWiSzJkzZyR37txO2fbjjz/uHK9Ro4aVbuvk7bp161rFHwDAhwKU9957b5LOGzNmzLWsBwAAAAAAR0xMjPz222/O5O02bdrI2LFj7Vi9evXktttukyZNmlhQsly5cm4vFwCQlgHKcePGWYl3nTp1nP6TAAAAAACktsjISJt9oEFJ7St54sQJ55gOv9H3pJodqY9Jkya5ulYAQDoGKHU4jvb22Llzp/Tu3Vt69Ogh+fPnT4UlAAAAAADwPy1atJC//vrL2S5YsKB069bNsiTbtm1L6TYA+JjApJ6oU7ojIiLk6aeflmnTpknJkiXl3//+d4KJ3gAAAAAAJJVO1R4xYoS0atVKzp075+zXSdsVKlSQJ5980obfHDhwQD7//HMLUubMmdPVNQMAUl+AJ4XRxV27dlnZ95dffikXLlyQ9evXO42K/WkMOgAAAAAgaeLi4mT58uVOP8nNmzc7x6ZOnSpdu3a1j6OjoyVbtmxkSgKAn8TXUjTFWwUGBtovC41vxsbGpvQyAAAAAAA/MHv2bLnnnnvk4MGDzj4NQrZu3dombzds2NDZHxQU5NIqAQBuSFaA8vz58zJ58mSb1L148WLp0qWLfPDBB5Z+rwFLAAAAAACOHz9uw21KlSol119/ve0rW7asBSc1m6ZTp04WlNT3klStAQCSHKB8+OGHZcKECdZ78t5777WBOdqoGAAAAAAAbQOmZdv6+PXXX63S7rbbbnMClJUrV7b9jRo1IkMSAJCyAOWoUaPs7le5cuXsl4o+EqMZlgAAAAAA36ctv15++WWZMmWKrF69OsGxGjVqSL169RLs8wYrAQBIUYCyZ8+eNCgGAAAAAD8WExMj69atkzp16ti2vkecOXOmBSe17VezZs2sdPvGG2+05BYAANJ0ircvY4o3AAAAAPzX6dOnZc6cOTZ5W/tKRkZGyuHDhyVv3rxOFZ2+h9IZBbQBAwCk6xRvAAAAAIBvOnTokNNPcu7cuTYw1UuDkJs2bbJekuqWW25xcaUAAF+Q5ABlUn/p0IMSAAAAADKfuLg4K9NW33//vfTr1885Vr58ead0u0mTJpIlSxYXVwoA8DX//e2TBJqSGf+hqf36y+vi/cn14YcfSpkyZSQ4OFgaNmwoK1asuOL5I0eOtOlvOXLksIniAwYMkKioqGu6JgAAAAD4Y0By6dKlMmjQIKlSpYp88sknzrFu3bpJgwYN5NVXX7Wek1u3bpX//Oc/0rx5c4KTAICM04MyJCRE1qxZc02NjydOnGjDd3RCuAYSNfg4adIk2bx5sxQuXPiS87/99lu59957ZcyYMXbXbsuWLXLPPffI7bffLm+//XaKrpkYelACAAAA8EWa3DF//nzrJzlt2jQ5cOCAc6xjx4428AYAgNSQnPiaqwFKDSDqXbkPPvjAuYOnWZGPPvqo3cW72COPPCIbN26UefPmOfueeOIJWb58uSxevDhF10wMAUoAAAAAvhicLFasmBw/ftzZp+93OnXqZOXbHTp0SFFVHAAA1xpfS3KJd2qLjo6WlStXStu2bf+3mMBA29Yyg8Ro1qR+jrdke8eOHXaHT3+hpvSaShs+619a/AcAAAAAZFa7d++W999/3xI1vLQFVr169SxI2bdvX5vMrdO4x48fL927dyc4CQBwjWtTvI8cOSKxsbFSpEiRBPt1WyfCJebOO++0z2vWrJlo4ueFCxfkoYcekueeey7F11TDhw+XYcOGpcr3BQAAAADpTd8frV271kq3dfL2X3/95RzT90thYWH28YQJEyRfvnzOMBwAADJVgHLq1KkJtrV0WkuttWFyfNpMOa0sXLhQXnvtNfnoo4+slHvbtm3Sv39/efnll2Xw4MEpvu6zzz4rAwcOdLY1g1LLwgEAAAAgoxs3bpy8+OKLsmvXLmefBiCbNm1qU7ezZ8/u7C9QoIBLqwQAIBUClNqT5GIPPvhggu2AgADLYEyKggUL2vS3gwcPJtiv20WLFk30czQIeffdd8v9999v2zVq1JAzZ87IAw88IM8//3yKrqn0F3b8X9oAAAAAkBGdPn1afv75Z6lfv76UKlXK9ul7IA1Oagn3DTfcYO/dunTpIoUKFXJ7uQAAJEmS8/o1Y/Jqj6QGJ1VQUJD1P4k/8Mabldm4ceNEP+fs2bOXlCLoL2NvSUNKrgkAAAAAGZkmXHz22WfStWtXS8q49dZbrVTbS4ORU6ZMsZZXWt7du3dvgpMAgEzFtR6USsuqe/XqZXf/wsPDZeTIkZYRqb9QVc+ePaV48eLWI1LpL+S3335b6tSp45R4a1al7vcGKq92TQAAAADI6CIjI2XUqFEWcFyyZIklZHiVK1dOcuXK5WxrT8nEKt4AAPCLAKWOCF+9erX9gkwJnRSnU+OGDBkiBw4ckNq1a8vs2bOdITc6eS5+xuQLL7xgZeT65759++yuoAYnX3311SRfEwAAAAAyGq380vcvOmFbZc2a1fpKahWZ0gQM7SepgcjrrrvO3hcBAOArAjzxb8UlU0hIiKxZsybFAcqMSofkhIaGysmTJy0ICwAAAACp7fz587JgwQKbvK1DSTUTcv369c5xHQaqQ210EGmJEiVcXSsAAGkZX3O1xBsAAAAA/MmJEydk5syZFpTUSi8t5Y4/AOfQoUNSuHBh29Z2VgAA+INrClD26NGDDEMAAAAASCLtmT927FhnW0u6NUNSS7dbtmwp2bNnd3V9AABkugDlxx9/nHorAQAAAAAfoF20/v77bxtwo5mSo0ePlnr16tkxDUauWLHC6Sep++P33QcAwB8lOUC5dOlSOXr0qHTp0sXZ9+WXX8rQoUNtSrb+cn3//fe54wcAAADA71y4cEF+//13C0hqYHLnzp3OMd32Bii9gUkAAJCCAOVLL71kJQfeAKXeEbzvvvvknnvukapVq8qbb75p5Qk6aQ4AAAAA/MXmzZulSZMmcuzYMWdfcHCw3HDDDRaQjJ/kwfRtAMj8YuM8smLnMTkUGSWFQ4IlvGx+yRLIz/d0CVCuXr3apsh5TZgwQRo2bCiffvqpbZcsWdKyKQlQAgAAAPBVOsRm+vTpEhcXJ/fff7/tK1++vP2pE7c1GKkZku3atZNcuXK5vFoAQGqbvS5Chk3bIBEno5x9YaHBMrRrNelQPczVtflFgPL48eNSpEgRZ/vXX3+Vjh07OtsNGjSQPXv2pP4KAQAAAMBFW7dudfpJLlmyxHpMaoKGVpRpRmTWrFltvwYq9WMAgO8GJ/t+vUo8F+0/cDLK9n/coy5ByhRKcjdmDU56+6hER0fLqlWrpFGjRs7xyMhIyZYtW0rXAQAAAAAZysiRI+W6666TSpUqyVNPPWU9JjU4qf0k+/TpY++LvCpXrkxwEgB8vKxbMycvDk4q7z49ruch+ZL8G7RTp04yaNAgGTFihN05zJkzpzRv3tw5vnbtWqe0AQAAAAAyk/Pnz8vChQulTZs2TqBxx44dsmHDBttu1aqV9ZPUKdyaPQkA8C/aczJ+WffFNCypx/W8xuULpOva/CpAqf0nb7nlFmnRooXkzp1bvvjiCwkKCnKOjxkzxppAAwAAAEBmcOLECZk5c6aVb8+aNcuqwhYsWGDDQZX2mGzcuLG1tsqbN6/bywUAuEgH4qTmeUhhgLJgwYLy22+/ycmTJy1AmSVLlgTHJ02aZPsBAAAAIKM6cuSITJw40arCNGPywoULzrGwsDA5fPiws12zZk17AACg07pT8zykMECpAcmIiAgpXLhwosfz58+f1EsBAAAAQLrQnpHnzp2zFlXqn3/+kUceecQ5XrVqVZu6rY/69etLYGCS2/QDAPxIeNn8Nq1bB+Ik1mUyQESKhgbbeUjDAKX+YgcAAACAjE6zInWgjXfytpZsa0sqpQNuNBjZpEkT6ympA3AAALiaLIEBMrRrNZvWrcHI+FEy3VZ6XM9D8jFmDgAAAECmd+bMGfn5558tKDl9+nQ5evSocywmJsYSLgICAuwxZcoUV9cKAMicOlQPk4971LVp3fEH5mjmpAYn9TjSIUD52WefXbXP5GOPPZbCpQAAAABAyugwz5UrVzrb+fLlk65du1qWpA7z1MAkAADXSoOQ7aoVtWndOhBHe05qWTeZk+kYoBw1atQlw3Hi01/6BCgBAAAApJVt27Y5U7enTZsmOXLksP0ahNSsSQ1Iagl3s2bNJGtWCsYAAKlPg5GNyxdwexk+JcCTxOaS2iz6wIEDlx2S40tOnToloaGhNrE8T548bi8HAAAA8FtxcXGWGam9JDUwuX79eufY1KlTLUtSRUVFSfbs2cmUBAAgE8bXknxLkV/0AAAAANKT9pS89957Zd++fc4+zYrUcm7NlGzQoIGzPzg42KVVAgCAa8UUbwAAAACu0+wKLdsuUaKElWer0qVLW3BS++B37NjRgpKdOnWy/pIAAMAPA5RDhw696oAcAAAAAEiqvXv3Wpm2lm4vWLDApm3fdtttToCycuXKMm/ePGnatKmVbwMAAD8PUNapU0fmzp17yX6tJa9UqZKEhTFKHQAAAMDVK7OGDx8uU6ZMkT///DPBsSpVqkjNmjUT7GvdunU6rxAAAGTYAKVOwrtSf8rbb79dPv30U8mZM2dqrQ0AAABAJhcbGysbNmyQGjVqOO8dNGtSg5P6cePGja10Wx+aMQkAAPxP1uRMz7tcrxidqtevXz955ZVX5LXXXkvN9QEAAADIZM6ePSu//PKLlW5PmzZNTpw4IYcPH5a8efPa8SeffNL26QTuIkWKuL1cAADgsgBPKk2/mT17tjz++OOyadMm8acx6AAAAABEjhw5ItOnT5cff/zRpm+fO3fOOaZDbfRYkyZNXF0jAADImPG1JGdQXo32i9Em1wAAAAD8g1ZZBQYG2sffffedVVV56QRubROlpdvNmzeXrFlT7a0HAADwMan2KmHHjh1SrFix1LocAAAAgAxGi6+0vZNmSWr59sMPPyx9+/a1Y926dZPPPvvMApIamNRhN9pjEgAAIF0ClKtXr7Y+Mp07d06NywEAAADIIKKjo2XhwoUWkNTHvn37nGM67MYboCxRooSsWrXKxZUCAACfD1Bq35jE7oCeOXNGLly4IO3atZNhw4al9voAAAAAuOT8+fMWeNT+kl65c+eWDh06WJZkp06dXF0fAADwswDlyJEjE92vTS4rV64s1apVS811AQAAAEhHmhmpGZFbtmyRd955x/Zlz55dateuLX///beVbuujdevWEhwc7PZyAQCAD0m1Kd6+hCneAAAA8HX6NmDDhg1OP8k//vjDObZ//34JCwuzjw8fPiwFChRwhuEAAABk2CneAAAAADKHr776ytozbd++3dmn7ZwaNWpkpdtBQUHO/kKFCrm0SgAA4C+SHKDUO6ZXm8Knx7UfJQAAAICM4ezZszJ37lypU6eOlCxZ0tmvwUkt4W7Tpo0FJbt27SpFixZ1da0AAMA/JTlAOWXKlMseW7p0qbz33nsSFxeXWusCAAAAkEI61Gb69OlWuj1nzhw5d+6cvPHGG/LUU0/Z8S5dusikSZOkffv2EhIS4vZyAQCAn0tygFIbYl9s8+bNMmjQIJk2bZrcdddd8tJLL6X2+gAA8DmxcR5ZsfOYHIqMksIhwRJeNr9kCbxylQIAXM3p06fl008/tZ6SixcvTpA8UKpUKcuW9MqXL5/cdtttLq0UAAAgFXpQatPsoUOHyhdffGF3XVevXi3Vq1dPyaUAAPArs9dFyLBpGyTiZJSzLyw0WIZ2rSYdqv93IAUAJHXIzcGDB52y7CxZssgLL7xgJd2qVq1aVrqtiQY6iftq7ZoAAAAyRYBSp+689tpr8v7779uLnHnz5knz5s3TbnUAAPhYcLLv16vEc9H+AyejbP/HPeoSpARwRdHR0fLrr79a6bY+dCLm+vXr7ViOHDmshFuzIzUoWaZMGbeXCwAAkLoBSu1ZM2LECLtDO378+ERLvgEAwOXLujVz8uLgpNJ9mtekx9tVK0q5N4AETp06JbNnz7bS7ZkzZ1rSgFeuXLksi7JIkSK2/eKLL7q4UgAAgJQJ8GhtSBKneOtd2bZt21r5yOVMnjxZfOFFYGhoqL3407vSAABcq6Xbj8odny676nnj+zSSxuULpMuaAGQO9957r4wdO9bZLly4sHTr1s3Kt3UCd3BwsKvrAwAAuNb4WpIzKHv27EnfGgAAUkgH4qTmeQB8i+YMbNq0ybIktXT7o48+krp169oxDUb+/vvvTj/Jhg0bXjFhAAAAILNJcoBy3LhxabsSAAB8mE7rTs3zAGR+sbGxsmzZMicouXXrVueY7vMGKDUoqcFJAAAAX5WiKd4AACB5wsvmt2ndOhAnsd4qWqNQNDTYzgPg+7Zs2WLDJg8dOuTsCwoKspJtDUZq1qQXVUwAAMDXBSblpIceekj27t2bpAtOnDhRvvnmm2tdFwAAPkUH3wztWs0+vjjU4N3W4wzIAXzP0aNH5csvv5QxY8Y4+8qVKycXLlywvkx33XWXfPfdd3LkyBEbgvPAAw/YYEoAAAB/kaQMykKFCsl1110nTZs2la5du0r9+vWlWLFi1pD7+PHjsmHDBlm8eLFMmDDB9o8ePTrtVw4AQCbToXqYfNyjrk3rjjj5v16TmjmpwUk9DsA37Ny508q29bFo0SIr5y5ZsqT07t3bMiKzZs1q+ytWrCjZsmVze7kAAACZY4r3wYMH5bPPPrMgpAYk4wsJCbHp3vfff7906NBBMjumeAMA0lJsnEdW7DxmA3G056SWdZM5CfiG999/314zr127NsH+WrVqWS/JZ599lqnbAADAL5xKRnwtyQHK+DRrcvfu3XLu3DkpWLCglC9f3qd64xCgBAAAwNXExMTIb7/9Ji1atLCMSPXoo4/KBx98YFO2tcekt59k2bJl3V4uAABAho2vpWhITr58+ewBAAAA+JPIyEiZPXu2TdnWfpEnTpyQBQsWSMuWLe34fffdJw0aNJDOnTtLgQIF3F4uAABApsAUbwAAAOAKjh07JpMmTbJ+kvPmzZPo6GjnWOHCheXAgQPOdu3ate0BAACApCNACQAAAMSjHZCioqIkR44ctr1jxw556KGHnOM62EZLt/XRsGFDK+cGAABAygVKBvDhhx9KmTJlrGG4vshbsWLFZc/V8hntd3nxQ8tovO65555LjvvC8B4AAACkDZ2yvWTJEnn66aelSpUq8vDDDzvH6tWrJ127dpXhw4fbsMjNmzfLG2+8IU2aNCE4CQAA4AsZlBMnTpSBAwfKqFGjLDg5cuRIad++vb3w05KZi02ePDlBWc3Ro0dtKuK//vWvBOdpQHLs2LHOdvbs2dP4OwEAAEBmogMftWRb+0lOmzZNDh065Bw7ffq0ZVJ6b3ZPnTrV1bUCAAD4MtcDlG+//bb06dNHevfubdsaqJwxY4aMGTNGBg0adMn5+fPnT7A9YcIEyZkz5yUBSg1IFi1aNI1XDwAAgMzq+uuvlz///NPZ1imTWpWjpdt6s1sDkwAAAMiAJd4HDx6Uu+++W4oVKyZZs2a1spb4j+TQTMiVK1dK27Zt/7egwEDbXrp0aZKu8fnnn8vtt98uuXLlSrB/4cKFloFZuXJl6du3r2VaXs758+dt9Hn8BwAAAHzDP//8I++++64FHTVr0qtdu3ZSokQJ6devn/zyyy+WQfnNN9/Yje+QkBBX1wwAAOBPkp1Bqf0dd+/eLYMHD5awsLBrurN85MgR6/dTpEiRBPt1e9OmTVf9fO1VuW7dOgtSxqcvPm+55RYpW7asbN++XZ577jnp2LGjBT0TC6JqP6Fhw4al+PsAAABAxqGl2atXr7bSbZ28vWbNGufY3LlzrZ+k0tezr776KpmSAAAAmS1AuXjxYlm0aJHUrl1b3KaByRo1akh4eHiC/ZpR6aXHa9asKeXLl7esyjZt2lxynWeffdb6YHppBmXJkiXTePUAAABIbRqAvO++++yGevwKnebNm8uNN95oA2+8vFO6AQAAkMkClBq407vSqaFgwYKW0ahl4/Hp9tX6R545c8b6T7700ktX/TrlypWzr7Vt27ZEA5Tar5IhOgAAAJlLZGSkzJ4921oPNW3a1HmtqsFJDT7q4EXtJ6l9JfW1IAAAAHykB6VO2dbhNdrL51oFBQXZXWydnugVFxdn240bN77i506aNMl6R/bo0eOqX2fv3r3Wg1JL0gEAAJB5HThwQEaPHu0EHf/973/b61Mv7T8+Z84cayU0ZcoU6dWrF8FJAAAAX8ug7N69u5w9e9ZKpnV6drZs2RIcP3bsWLKup6XV+sKxfv36VqqtLzA1O9I71btnz55SvHhx6xN5cXm33hEvUKBAgv2nT5+2fpK33nqrZWFqD8qnn35aKlSoYHfRAQAAkLlo9c5//vMfCzguW7YsQTWPviatVq1agvNvuOEGF1YJAACAdAtQxr9DnRo04Hn48GEZMmSI3RHX3pZaquMdnKMlOto3KL7NmzdbL8yff/75kutpyfjatWvliy++kBMnTljJj75IffnllynjBgAAyAS0okYHJnoDjzrE5ocffpDly5fbtt7U1n6S+tBzGHIDAACQuQV4UquhpA/RITmhoaFy8uRJyZMnj9vLAQAA8HlRUVHW5kenbk+dOtXa8+hN7Lx58zrtfXSfTuDW6hoAAAD4Tnwt2RmUF7+QjI6OTrCPgB4AAACS4vjx4zJjxgz58ccfrYJG2/zEf025fv16Z/jNv/71LxdXCgAAgLSU7AClvnB85pln5LvvvrO72BeLjY1NrbUBAADAx2jxjrcke/z48dKvXz/nmGZGao9xLd1u0aKFDVQEAACA70v2FG8dODN//nz5+OOPrafjZ599ZkNptNfjl19+mTarBAAAQKYNSK5evdpeL9apU0c++eQT51i3bt2kRo0a8sILL8iff/4pe/bskQ8++EDatWtHcBIAAMCPJLsHZalSpSwQ2bJlSyu9WbVqlU3I/uqrr+wu+MyZMyWzowclAABAyl24cEEWLVpkpdvaU3LXrl3OsQ4dOsisWbNcXR8AAAAyeQ/KY8eOSbly5exjvbhuq2bNmknfvn1TumYAAAD4gPPnz9sN7UOHDjn7cuTIIe3bt7fS7S5duri6PgAAAGQ8yQ5QanBy586d9sKzSpUq1osyPDxcpk2b5kxZBAAAgO87cOCAvQbcvHmz/Oc//7F92gKoZs2aVtatE7e1p2Tbtm0lZ86cbi8XAAAAvlLi/c4770iWLFnksccek7lz59oLT71ETEyMvP3229K/f3/J7CjxBgAASJwGI7VsW8u3ly1bZq8D1f79+yUsLMw+PnjwoBQsWNBeMwIAAMA/nUrLEu8BAwY4H+vd8E2bNsnKlSutD6XeLQcAAIDv+fbbb+Xll1+2137xNWjQwEq3s2b938vKIkWKuLBCAAAAZFbJDlDGFxUVJaVLl7YHAAAAfIO+xps/f77dfC5RooTti42NteBktmzZpHXr1haU1CncxYsXd3u5AAAAyOQCk/sJ+uJU757ri9HcuXPLjh07bP/gwYPl888/T4s1AgAAII0dP35cvv76a/nXv/4lhQoVks6dO8v48eOd4zrcZsKECXL48GGZPXu2DUckOAkAAABXApSvvvqqjBs3Tt544w0JCgpy9levXl0+++yzVFkUAAAA0t6ZM2fk/ffflzZt2lhQ8u6775bvv/9eTp8+bcFHzZb0ypcvn3Tv3t36CAEAAACuDsnRXpOffPKJvZANCQmRNWvW2GRvLflp3Lix3X3P7BiSAwAAfJG+7Dty5IgFI9W5c+dsmM3Zs2dt+7rrrrOp2/qoV6+eBAQEuLxiAAAAZFZpOiRn3759FqS8WFxcnE3yBgAAQMZx4cIFWbRokTN5O1euXLJ+/Xo7liNHDhk4cKDkzZvXekom9hoPAAAASGvJDlBWq1bNXuRePBhHy4Hq1KmTmmsDAABACmiJ9s8//2wByenTpyeocAkODpYDBw5I0aJFbVt7iwMAAACZKkA5ZMgQ6dWrl2VSatbk5MmTZfPmzfLll1/aC2AAAAC467HHHpOxY8c62wUKFJCuXbtalmS7du0sixIAAADItENy9IXttGnTZO7cufbiVgOWGzdutH36ghcAAADpY8uWLfLmm29K06ZNZdWqVc7+bt26WY/wAQMGyK+//moZkxqw1N6SBCcBAACQ6Yfk+AOG5AAAgIxIq1f++OMPp5+k3iT2Gjx4sLz00kvOeTrghiE3AAAA8MkhORf3N9IXwPER0AMAAEh9W7dulRYtWkhERISzL2vWrNKqVSurcNGHV2BgsotkAAAAANckO0C5c+dOeeSRR2ThwoUSFRXl7NdETL1LHxsbm9prBAAA8CsnTpyQmTNnSkxMjPX+VmXLlrXXXiEhIdKpUycLSHbs2NEmcANui43zyIqdx+RQZJQUDgmW8LL5JUsgGbwAACCNApQ9evSwYOSYMWOkSJEilA4BAACkgj179ljptj70RvCFCxekVKlS0rNnT3u9pdmS2k+yUqVKkj17dreXCzhmr4uQYdM2SMTJ/yUvhIUGy9Cu1aRD9TBX1wYAAHw0QLlmzRpZuXKlVK5cOW1WBAAA4Ec+/vhj+eyzzxIMuVHVqlWzoTbnz5+X4OBg21ejRg2XVglcPjjZ9+tVcnFT+wMno2z/xz3qEqQEAABXlewGRQ0aNLA7/AAAAEgezYrULEj902vDhg0WnNQsyWbNmtlUbp3OvX79enn11Ved4CSQEcu6NXMysYmb3n16XM8DAABI1QxKvcP/0EMPyb59+6R69eqSLVu2BMdr1qyZ3EsCAAD4rDNnzsjPP/9spdvTpk2TY8eOyYIFC6Rly5Z2/N5775U6depIly5dpHDhwm4vF0gy7TkZv6z7YhqW1ON6XuPyBdJ1bQAAwMcDlIcPH5bt27dL7969nX16x58hOQAAAP91/PhxmTJlivz444/yyy+/JBgsWKBAAdm/f7+zrcFJfQCZjQ7ESc3zAACA/0p2gNJ7l3/8+PEMyQEAAPh/2ivSO7xGb+bed999zjGdwK39JHXydtOmTW3gDZDZ6bTu1DwPAAD4r2S/Ot61a5dMnTpVKlSokDYrAgAAyATi4uLkzz//tCxJLd8ODw+XsWPH2rF69epJp06dpFGjRhaY1LY43NSFrwkvm9+mdetAnMS6TOozvmhosJ0HAACQqgHK1q1b2yRvApQAAMAfsyS1f6QGJPURERGRoKzb2/JGHzNmzHB1rUBayxIYIEO7VrNp3RqMjB+k9Ibj9bieBwAAkKoByq5du8qAAQPk77//lho1alwyJKdbt27JvSQAAECm0KJFC1m+fLmzHRISIh07drQsSf2TLEn4mw7Vw+TjHnVtWnf8gTmaOanBST0OAABwNQEevdWfDIGBgZe/mI8MyTl16pSEhobKyZMnJU+ePG4vBwAApLM9e/ZYS5tZs2bJpEmTJEeOHLb/ueeek3HjxlkvSX20atXK6TsJ+LPYOI9N69aBONpzUsu6yZwEAMC/nUpGfC3ZAUp/QIASAAD/oi+H1q1b5/STXLlypXNMA5VaQaLOnj0rwcHBV7xhCwAAAECSFV9jhCQAAPBr8+fPl/vvv1927tyZoCqkSZMmVrpdp04dZ3/OnDldWiUAAADguwhQAoAfoPQO+K8zZ87IL7/8IoULF7YApCpevLgFJ7VUu127dhaU7NKlixQpUsTt5QIAAAB+gQAlAPi42esiLhleEMbwAviRw4cPy7Rp06x8W4OTUVFRcttttzkBysqVK9vE7euvv15y587t9nIBAAAAv0OAEgB8PDjZ9+tVcnGz4QMno2y/Tl4lSAlf7Sn5zjvvyJQpU2TJkiUSFxfnHCtdurRUqlQpwfmdOnVyYZUAAAAAVLI6vF+4cEG+/PJLOXjwIH97AJAJyro1czKxSWjefXpczwMyOw1Abtq0KUEPyYkTJ8rixYvtmPaRHDZsmKxevdrKuV999VVX1wsAAAAghRmUWbNmlYceekg2btyYnE8DALhAe07GL+u+mIYl9bie17h8gXRdG5AaoqOjZcGCBVa6rZO2Dx06ZOXcefPmteMDBw60fd26dbOsSQAAAAA+UuIdHh5u2Qe80AeAjE0H4qTmeUBGcPLkSZk5c6b89NNP9mdkZKRzTPtH/v3339K8eXPb7t69u4srBQAAAJBmAcqHH37YMhL27Nkj9erVk1y5ciU4XrNmzeReEgCQBnRad2qeB7jZT1JLttU333wj/fr1c44VLVrUMiR18narVq0kOJjnMwAAAJDZBHj0VX8yBAZe2rZS3zR43zzExsZKZnfq1CkJDQ21LI08efK4vRwASBHtLdlsxHwbiJPYD3oN9xQNDZbFz7SWLIH/Df4AGYG+pli/fr1lSWr59v333y8PPvigHdu7d6/ccMMNcuONN9pDKzsSe20CAAAAIPPE15KdQamN5QEAGZ8GHYd2rWbTujX8GD9I6Q1H6nGCk8gI9AanTtvWgKQGJrdv3+4cK1CggBOgLFGihGzYsMHFlQIAAABIbckOUNJ7EgAyjw7Vw+TjHnVtWnf8gTmaOanBST0OZIRhN2XKlJGIiAhnX/bs2aVt27ZWut21a1dX1wcAAAAggwUolWY1jBw50pnmXa1aNenfv7+UL18+tdcHALhGGoRsV62oTevWgTjaczK8bH4yJ+GKI0eOyPTp0+01xIgRI2xfUFCQvZaIioqSLl26WOl2+/btbegNAAAAAN+X7B6Uc+bMsWb0tWvXlqZNm9q+33//XdasWSPTpk2Tdu3aSWZHD0oAAFKP3tjUsm19LF68WOLi4mz//v37JSzsv1m8mj1ZsGBByZYtm8urBQAAAJDhe1AOGjRIBgwYIK+//vol+5955hmfCFACAIBrN2HCBHn11Vdl3bp1CfbXqVPHsiSzZMni7PMGKgEAAAD4n2QHKLUk67vvvrtk/7333mtl3wAAwD/7SC5cuFCuu+46KV68uO2LiYmx4KQGIlu0aGH9JLUKg37WAAAAAOILlGQqVKiQrF69+pL9uq9w4cLJvRwAAMjEJRsTJ06UO+64w14faN/Ib7/91jmu/SS/+uorOXTokMybN08effRRgpMAAAAArj2Dsk+fPvLAAw/Ijh07pEmTJk4PSm10P3DgwOReDgAAZCJnzpyRL7/80vpJzp8/37IkvYoUKSIBAf8bvpQvXz7p0aOHSysFAAAA4LNDcvR0LeV+6623rLm9KlasmDz11FPy2GOPJXhjklkxJAcAgP/93j927JgUKFDAts+dO2fDbM6ePWvbVapUsX6SWr4dHh4ugYHJLs4AAAAA4IOSE19L9rsIDUDqkJy9e/faF9CHfty/f/8UByc//PBDKVOmjAQHB0vDhg1lxYoVlz23ZcuW9nUufnTu3DnBm6khQ4ZYw/0cOXJI27ZtZevWrSlaGwAA/iY2NlYWLVokTz75pFSsWNH6R3rp71V9HaCVE5s2bbLe1Do4r1GjRgQnAQAAAKRPiXd8ISEhcq20d5WWho8aNcqCk5qdqT2sNm/enGhPy8mTJ1sjfq+jR49KrVq15F//+pez74033pD33ntPvvjiCylbtqwMHjzYrrlhwwYLggIAgIQ0I3Lu3Lny448/yvTp0+Xw4cPOsezZs8uBAwekaNGitv3KK6+4uFIAAAAAflniXbduXWtur72k6tSpc8VMyVWrViVrARqUbNCggXzwwQe2HRcXJyVLlrRG+oMGDbrq52tAU7MlIyIiJFeuXJY9qSXnTzzxhGV+KM3y1L5Y48aNk9tvv/2q16TEGwDgb+677z4ZM2aMs62/87U6QUu39SZf7ty5XV0fAAAAgMwlOfG1JGVQam8pzZ5Q+kYltWgm5MqVK+XZZ5919ml5mJZkL126NEnX+Pzzzy3oqMFJtXPnTsvy0Gt46V+GBkL1mkkJUAIA4Kt0yJ0OuNFMyXfeecduQqquXbvazUj9na+P5s2bS7Zs2dxeLgAAAAA/kKQA5dChQ52eVK1atZKaNWtK3rx5r/mLHzlyxK6p2Y3x6bb2tboa7VW5bt06C1J6aXDSe42Lr+k9drHz58/bI36EFwAAX6CVBVrdoAFJDUz+/fffzjHdFz9AqYFJXxh2BwAAAMCHe1BmyZJFbrjhBmuInxoBymulgckaNWrY1NBrMXz4cBk2bFiqrQsAgIxg27ZtdmNRh9nF/11+/fXXWzDy5ptvTrAfAAAAANyQ7HGb1atXt/Kw1FCwYEF7Q3Tw4MEE+3Xb24j/cs6cOSMTJkywnlnxeT8vOdfUEnPvRHJ97NmzJ4XfEQAA7tDsfx089+WXXzr7ypQpY78vtQ3KLbfcYscOHTok8+fPl/79+0upUqVcXTMAAAAApGiKt07u1OEzL7/8stSrV8/p/eiVnKEyQUFBdg3teeXtbalDcnT7kUceueLnTpo0ycqye/TokWC/Tu3WQKReo3bt2s6btuXLl0vfvn0TvZb21/T22AQAILPYv3+/TJ061Uq1NegYExNjQce7777bSrWzZs1q+ytXriw5cuRwe7kAAAAAkDoByk6dOtmf3bp1S9CnSntc6bb2lEyOgQMHSq9evaR+/fpWqq1TuTXbo3fv3na8Z8+eUrx4cSvDvri8W4OaBQoUSLBf1/D4449bILVixYoWsBw8eLBN9k7NAT8AALhl9OjR9ntQezHHV6lSJSvdjoqKcgKS3pt1AAAAAOAzAcoFCxak6gK6d+8uhw8fliFDhtgQG30jNXv2bGfIze7du22yd3ybN2+WxYsXy88//5zoNZ9++mkLcj7wwANy4sQJadasmV0zODg4VdcOAEBa0xt/y5Ytk4YNG1pGpNJBN97gZKNGjSwoqTfhqlSp4vJqAQAAACD5Ajya+ogEtCQ8NDTU+lEmp2QdAIDUcO7cOZk7d65N3dYSbr2Rt3DhQmnRooUd16ncf/75p03eDgsLc3u5AAAAAHBN8bVkZ1CqRYsWySeffGLDcrQXpJZgf/XVV1ZOrdmKAAAgefSXtgYk9aFZ/2fPnnWO6S91rSjwqlu3rj0AAAAAwC+neP/www/Svn17622lGRw6qMb7xuq1115LizUCAOCTdKiN19atW60n8+TJky04WbJkSRsYp5mUmkGpg28AAAAAwBclu8S7Tp06MmDAABteExISImvWrJFy5crJX3/9JR07drQ+kpkdJd4AgLSgv3L196VmSerkbc2CHDt2rHOsQ4cO1lNS+0lqT+b4w+gAAAAAIDNJ0xJvHVBz/fXXX7Jfv6AOpAEAAAmzJH/77TcLSGpgcs+ePc6xgwcPSlxcnA2D02DknDlzXF0rAAAAALgh2QHKokWLyrZt26RMmTIJ9utUbc2kBAAA/6M39XQKt1fOnDktU1Inb3fu3NmCkwAAAADgz5IdoOzTp4/0799fxowZY9ke+/fvl6VLl8qTTz4pgwcPTptVAgCQwUVERNjE7VmzZsn48eOtV7Nq1aqVDZXTidtaut2mTRvnGAAAAAAgBT0o9XQdhjN8+HBnwmj27NktQPnyyy+LL6AHJQAgKb8PN23a5PSTXL58uXNs2rRp0qVLF/v49OnTFpDMkiWLi6sFAAAAgIwbX0t2gNIrOjraSr31jVe1atUkd+7c4isIUAIArmThwoXy4IMPypYtWxLsb9iwoZVu33XXXVKqVCnX1gcAAAAAPj0k595775V3333XJnhrYNLrzJkz8uijj1rpNwAAvuLcuXMyb948KVCggDRu3Nj2hYWFWXAyKCjISrY1KKkl3MWKFXN7uQAAAACQ6SQ7g1JL1LTPVuHChRPsP3LkiA3QuXDhgmR2ZFACgH87evSozJgxw8q3dbK23oS79dZb5fvvv09Qxt2iRQt+TwAAAABAemVQ6kU1lqmPyMhICQ4Odo7FxsbKzJkzLwlaAgCQWejvt/fff1+mTJkiixYtst9tXiVKlJAKFSokOF8zJgEAAAAA1y7JAcq8efPa1G59VKpU6ZLjun/YsGGpsCQAANInILl9+3Yn8Ki/x7755htZsWKFbdesWdOmbmv5dp06dew4AAAAAMDFAOWCBQvszVzr1q3lhx9+kPz58zvHtAdX6dKl6b0FAMjQYmJi5LfffrPSbX3s379fDh8+bDfh1OOPPy4HDx60oGTZsmXdXi4AAAAA+IVk96DctWuXTSb15UwSelACgO/QtiSzZ8+2gKT2lTxx4oRzLEeOHHbs+uuvd3WNAAAAAODP8bXA5F5848aN8vvvvzvbH374odSuXVvuvPNOOX78eMpWDABAKop/7+2rr76Sf//731a+rcHJggULyr333msBSx3wRnASAAAAANyV7ADlU089ZRFQ9ffff8vAgQOlU6dOsnPnTvsYAAA3bNq0SV5//XVp3LixjB492tnfrVs3qVixojzxxBM2/ObAgQPy+eef2/6cOXO6umYAAAAAQDJ6UHppILJatWr2sfai1Cmmr732mqxatcoClcjYYuM8smLnMTkUGSWFQ4IlvGx+yRLou+X6AHxXXFycLFu2zDIhf/zxR9myZYtzTMsHHnzwQWcCd/xjAAAAAIBMHqDUgThnz561j+fOnSs9e/a0j3VojjezEhnT7HURMmzaBok4GeXsCwsNlqFdq0mH6mGurg0AkiM6OlrKly8ve/fudfZly5bNBrnpgBvNjgQAAAAA+GiAslmzZlbK3bRpU1mxYoVMnDjR9mt2imapIOMGJ/t+vUounoh04GSU7f+4R12ClAAypGPHjtlwmw0bNsjw4cOdm2WVK1e2G2OdO3e2oGSHDh2sATMAAAAAwMeneO/evVsefvhh2bNnjzz22GNy33332f4BAwZIbGysvPfee5LZ+doUby3rbjZifoLMyfi0wLtoaLAsfqY15d4AMoRdu3Y5pdu//fab/X5R+/fvl7Cw/95M0ezJwoULW7ASAAAAAJB542vJzqAsVaqUTJ8+/ZL977zzTnIvhXSiPScvF5xUGqHW43pe4/IF0nVtABDfpEmTrK/x6tWrE+yvXr263HTTTRIY+L/ZbmTtAwAAAIBvSHaAUmkmi2a1bNy40bavu+466/eVJUuW1F4fUoEOxEnN8wAgNVy4cMGmaleqVEmKFy9u+86dO2fBSQ1EaksRDUpq+Xa5cuXcXi4AAAAAIKMEKLdt22bTuvft22f9v5T2BCtZsqT1CNOhBchYdFp3ap4HACl1+vRpmTNnjpVvazb+8ePH5Y033pCnnnrKjnfp0kXGjh1rfxYsWNDt5QIAAAAAMmKAUvtOahBy2bJlNrlbHT16VHr06GHHNEiJjCW8bH6b1q0DcTxX6EGp5wFAajt79qx8++23lnk/d+5cOX/+vHNMg5BxcXHOtv5eueeee1xaKQAAAAAgUwzJyZUrlwUna9SokWD/mjVrbLK3Zsdkdr42JCf+FG8V/3+4dyQOU7wBpKYTJ05I3rx5nbJtDURqoFLpTS5v6XaTJk1oDwIAAAAAPihNh+Rkz55dIiMjL9mvgUkmqWZcGnzUIOSwaRsSDMzRzMmhXasRnARwTTQLcsWKFZYlqeXbGnRct26dHcuRI4dl2OfOndsCk9WqVZOAAO/tEQAAAACAv0t2BmXPnj1l1apV8vnnn0t4eLjtW758ufTp00fq1asn48aNk8zOFzMovWLjPDatWwfiaM9JLevOEkigAEDyRUVFyfz58y0gOXXqVDlw4IBzLFu2bLJr1y4JC+PmBwAAAAD4o1PJiK8lO0CpZXu9evWSadOm2RtQ7yRWneKtwUn9wpmdLwcoASC16I2pzz77zNnWn5c6RE2zJDt06OATvw8AAAAAABmwxFt7imm2zNatW2Xjxo1Wple1alWpUKFCCpcLAMjIdu/ebT/39fHmm29KnTp1bL8GI2fNmmW9JPXRsmVLWn0AAAAAAJIt2QFKr4oVKzpBSXqJAYDv0MT6tWvXOv0k//rrL+fYlClTnAClZs5rtiS/AwAAAAAA6R6g1P6T77zzjmVReoOVjz/+uNx///3XtBgAgLu2b98ubdu2lX/++cfZFxgYKM2aNbMsyZtvvtnZz/RtAAAAAIArAcohQ4bI22+/LY8++qg0btzY9i1dulQGDBhgZYAvvfRSqiwMAJC2Tp8+LT///LOcPXtWevToYftKly5t/UF08vYNN9xgGZKdO3eWQoUKub1cAAAAAICPSvaQHH2T+t5778kdd9yRYP/48eMtaHnkyBHJ7BiSA8BXHTx40Iacafn23Llz5fz581KqVCnLmPSWaq9atUqqVKkiOXPmdHu5AAAAAIBMKk2H5MTExEj9+vUv2V+vXj2b5g0AyHi0NceYMWMs4z3+faly5cpZlmRUVJRlTaq6deu6uFIAAAAAgL8JTO4n3H333fLxxx9fsn/06NFy1113pda6AAApFBcXJ8uWLUtw02j16tWyZMkSC07qTaaXX35Z/v77b9m2bZu89dZbTnASAAAAAIBMMyRH+5Y1atTItpcvX279J3v27CkDBw50ztNelQCAtKel2vPnz7fS7alTp8qBAwdk4cKF0qJFCzt+zz33SNWqVW3ydokSJdxeLgAAAAAAKQ9Qrlu3zin/02mvqmDBgvbQY17eXmYAgLTr56H9JH/66SeZNWuWDb3xCgkJsb6S3gCltuHQBwAAAAAAmT5AuWDBgrRZCQDgqrRsO2vW//7o3rJlizN9WxUrVswyJLWnZMuWLSV79uwurhQAAAAAgDQs8QYApA/tGam9IrV0WzMla9WqZcNulGZEtmnTRho2bCg33nij9ZYMDEx2a2EAAAAAAFxFgBLXLDbOIyt2HpNDkVFSOCRYwsvmlyyBlPgD15Il+fvvvztByZ07dzrH9u7da0NwNBCprTTmzp3r6loBAAAAALhWBChxTWavi5Bh0zZIxMkoZ19YaLAM7VpNOlQPc3VtQGal5dkaoPQKDg6Wdu3aWel2ly5dyJIEAAAAAPgUApS4puBk369Xieei/QdORtn+j3vUJUgJXMGhQ4dk+vTpMnPmTPnqq68kR44ctv/666+XTZs2WTBSg5IanMyVK5fbywUAAAAAIE0EeLTBGS6ZjBsaGionT56UPHnyuL2cDFvW3WzE/ASZk/FpgXfR0GBZ/Exryr2BeLZu3Wpl2/rQLEnvj2Cdxq0BSRUZGWnBSu8wHAAAAAAAfDm+xrtfpIj2nLxccFJpyEWP63mNyxdI17UBGdFvv/0mffv2lQ0bNiTYr4NudMBN9erVnX0hISEurBAAAAAAAHcQoESK6ECc1DwP8CXnz5+XBQsWSL58+WzCtipSpIgFJzUrUntMaul2t27dpGTJkm4vFwAAAAAAVxGgRIrotO7UPA/I7E6cOCGzZs2yydv6p5Zp33bbbTJp0iQ7XrlyZZk8ebK0atVK8ubN6/ZyAQAAAADIMAhQIkXCy+a3ad06EMdzhR6Ueh7gq7R/5KhRo2TKlCmWMXnhwgXnWFhYmJQuXTrB+TfffLMLqwQAAAAAIGMjQIkU0cE3Q7tWs2ndGoyMH6T0jsTR42k1IEeH9Gh/Sy0h1yxNDYQyjAfpEZD8559/pGzZsrYdEBAg48aNkxUrVth2tWrVrJ+klm/Xr19fAgMDXV4xAAAAAAAZHwFKpFiH6mHycY+6MmzahgQDczRzUoOTejwtzF4XccnXDEvjrwn/pVmROm1bp25r+faePXvk8OHDTpn2Y489JhERERaYrFixotvLBQAAAAAg0wnwaEqQiz788EN588035cCBA1KrVi15//33JTw8/Ip93p5//nnr5Xbs2DEroRw5cqR06tTJjr/44osybNiwBJ+jvd82bdqUJmPQkb7ZjBqc1KzNi5+03q+mAVOClLhWZ8+elZ9//tkCktOnT5ejR486x4KDg63HpA66AQAAAAAA1x5fczWDcuLEiTJw4EDr4aaTbjXQ2L59e9m8ebMULlz4kvOjo6OlXbt2duz777+X4sWLy65duy4ZOHHdddfJ3LlznW2dmou0o8HIxuULpEsgVDMnE4uoe/4/SKnH21UrSrk3romWbffr18/Zzp8/v3Tp0sVKt2+44QbJlSuXq+sDAAAAAMCXuBq5e/vtt6VPnz7Su3dv29ZA5YwZM2TMmDEyaNCgS87X/Zo1uWTJEsmWLZvtK1OmzCXnaUCyaNGi6fAdID1plmb8su7EgpR6XM9Lj4ApMr9t27ZZlqSWb999993ywAMP2P5u3brJW2+9ZX9qULJp06bc6AAAAAAAII249o5bsyFXrlwpzz77rLNPB0q0bdtWli5dmujnTJ06VRo3bmyZTRpQKFSokNx5553yzDPPSJYsWZzztm7dKsWKFbNSTD1/+PDhUqpUqcuu5fz58/aIn4KKjEdLyFPzPPifuLg4+fPPP51+khs2bHCO5cyZ0wlQlihRwoKXOgQHAAAAAAD4aIDyyJEjEhsbK0WKFEmwX7cv1y9yx44dMn/+fLnrrrtk5syZFkB4+OGHJSYmRoYOHWrnaKm4lmdq30kdXKH9KJs3by7r1q2TkJCQRK+rAcyL+1Yi49H+lql5HvyL3hSpVKmStYXw0qzIFi1aWJakZkvGR3ASAAAAAID0kTWzZT9p/8nRo0dbxmS9evVk3759NmTHG6Ds2LGjc37NmjUtYKmDdL777ju57777Er2uZnFqL8z4GZQlS5ZMh+8IyaHDd3Ra94GTUYn2oQz4/wnieh78mzbg1ZsY69evl1deecX2BQUFSYUKFWzgjf6c0KnbOlwrX758bi8XAAAAAAC/5lqAsmDBghZkPHjwYIL9un25/pFhYWHWezJ+OXfVqlVtArhmR2kA4mI6QEezpjTb8nKyZ89uD2RsOvhmaNdqNsVbg5Hxg5TeXDc9zoAc/7R3715rA6Gl2wsXLrTMaqUtIfRnh7ePrd7k0PYPAAAAAAAgYwh06wtrMFEzIOfNm5cgQ1K3tW9kYnRQhQYa9TyvLVu2WPAhseCkOn36tGzfvt0JUCBz61A9TD7uUdcyJePTbd2vx+FfJk+eLA0aNLCsZw1G/vLLLxacrFKlivWnjU970RKcBAAAAAAgY3G1xFvLqnv16iX169eX8PBwGTlypJw5c8aZ6t2zZ08pXry49YhUffv2lQ8++ED69+8vjz76qA3Dee211+Sxxx5zrvnkk09K165drax7//79VvqtGZd33HGHa98nUpcGIdtVK2rTunUgjvac1LJuMid9n/at/f33361UWwdheW9C6OAb7RmpNze0dFsf2ocWAAAAAABkfK4GKLt37y6HDx+WIUOGWJl27dq1Zfbs2c7gnN27d9tkby/NkJozZ44MGDDA+ktq8FKDlfGzpLTMU4OR2mdOp3w3a9ZMli1bZh/Dd2gwsnH5Am4vA+ng7NmzlhWppdvTp0+3AVtvvPGGPPXUU3a8S5cu8umnn9qNiYuHbgEAAAAAgIwvwOPxJDZvxK/pkJzQ0FAbtJEnTx63lwP4nXPnzsnEiRMtKPnzzz/btpcOtXniiSfk+eefd3WNAAAAAAAgdeJrmWqKNwDfFRkZKSEhIfax3jd5+OGHncCktmzQsu2bbrrJsqJ1WBYAAAAAAPANBCgBuEKDkCtXrpSffvrJMiV1e926dXYsZ86c8sgjj0iuXLksMFmrVi3rMQkAAAAAAHwPAUoA6SY6OloWLlxoQUl97Nu3zzmmw6x0sJV3+I32mQQAAAAAAL6PACWAdKNZkTrQxkszJDt27GhZkp06dZL8+fO7uj4AAAAAAJD+CFACSHWaGTl16lTLkhw+fLjUqVPH9mswUvd369bN+km2bt1agoOD3V4uAAAAAABwEQFKANdM+0du2LDB6Sf5xx9/OMfCw8OdAGXXrl0tWzIwMNDF1QIAAAAAgIyEACWAa7Jjxw5p3769bNu2zdmnA20aNWpkWZK33nqrsz9rVn7kAAAAAACAhIgWAEiyc+fOyS+//CJnzpyRO+64w/aVKlVKjh49KtmzZ5e2bdtahqRmShYtWtTt5QIAAAAAgEyAACWAKzpy5IhMnz7dyrfnzJljQUoNSt5+++2WKalZkbq/atWqkjt3breXCwAAAAAAMhkClAASNW7cOBk7dqwsXrxY4uLinP0anNTSbQ1U5syZ0/Y1aNDAxZUCAAAAAIDMjAAlABtys2rVKqlVq5bTJ3LlypXy22+/2ce1a9e20m0NTOo5mjkJAAAAAACQGghQAn4qOjpafv31Vyvd1sfevXtl4cKF0qJFCzt+zz33SMWKFaVbt25SpkwZt5cLAAAAAAB8FAFKwI+cPn1aZs6cKT/++KP9efLkSedYrly5bCK3N0BZr149ewAAAAAAAKQlApSAj4uNjZUsWbLYx5s2bZLu3bs7xwoXLmwZklq63aZNGwkODnZxpQAAAAAAwB8RoAR8sJ/kxo0bLUtSS7erV68un3/+uR3TjMiWLVvaUBsNSjZs2NAJXgIAAAAAALiBACXgI1mSS5cutYCkBia3bdvmHNu5c6dN4Q4MDLThNgsWLHB1rQAAAAAAAPERoAR8QKtWrWTRokXOdlBQkJVsa5Zk165dLTgJAAAAAACQERGgBDKRo0ePyvTp023Azbhx4yRHjhy2v2nTprJ27Vrp0qWL3HjjjdKhQwcJCQlxe7kAAAAAAABXFeDRhnVI4NSpUxIaGmoTjvPkyeP2cuDntETbW7qtWZJarq2mTZtmAUnvc1aDldmyZXN5tQAAAAAAAJKs+BoZlEAGtXjxYunXr59lRsZXs2ZNK92uVq2as49AOgAAAAAAyKwIUAIZQExMjPz2229Wlh0eHm77ChUqZMFJnbLdvHlzC0p269ZNypYt6/ZyAQAAAAAAUg0BSsAlkZGRMnv2bCvfnjFjhpw4cUJuu+02mTRpkh2vXLmyfawDcAoUKOD2cgEAAAAAANIEAUogHWnL188++0ymTJki8+bNk+joaOdY4cKFpXjx4gnO14AlAAAAAACALyNACaRxQHLv3r1SsmRJ2w4ICLAA5YoVK2y7YsWKVrqtk7cbNWpk5dwAAAAAAAD+hAAlkMpiY2Nl+fLlNnVby7d37Nghhw8flrx589rxRx99VPbs2WOBySpVqljQEgAAAAAAwF8RoARSwblz56xkWwOSU6dOlUOHDjnHgoKC5K+//rJekqpHjx4urhQAAAAAACBjIUAJpIKxY8dKv379nO3Q0FDp3LmzZUm2b99e8uTJ4+r6AAAAAAAAMioClEAy/PPPP5YlqY877rhD+vTpY/u7desmI0aMsD+1n2SLFi0kW7Zsbi8XAAAAAAAgwyNACVxlyM3q1audfpJr1qxJULrtDVCWKFHCgpf0kwQAAAAAAEgeApTAZcTExEjVqlVl+/btzr7AwEBp3ry5M3k7PoKTAAAAAAAAyUeAEhCRyMhImTNnjqxbt05efPFF26cl2mXKlJGIiAjrI6lBSe0rWaBAAbeXCwAAAAAA4DMCPFrDigROnTplQ05OnjzJcBMfduDAAZu4raXbc+fOlejoaMuC3Ldvn4SFhdk5u3btksKFC0uOHDncXi4AAAAAAIBPxtfIoITf0X6SOtBm+fLl1mPSq0KFCpYlGX9f6dKlXVolAAAAAACAfyBACZ8WFxcny5Ytk7JlyzpZkVrOrftUeHi49ZLUwKT2m6SPJAAAAAAAQPoiQAmfExUVJfPmzbNMyWnTpsnBgwfljTfekKeeesqOax/Jjz76SLp16ybFixd3e7kAAAAAAAB+jQAlfCYoOWnSJOsnOXv2bDlz5oxzTPscnDt3ztnOnz+/9O3b16WVAgAAAAAAID4ClMi0Tp8+Lblz53ZKuR988EEnEKmZkVq6rY+WLVtKUFCQy6sFAAAAAABAYghQItPQ4TVr1qyx0m3NlLxw4YL8/fffdixnzpyWFal/alCyXr169JMEAAAAAADIBAhQIkPTIOSiRYucoOSuXbucY4GBgbJv3z6nj+Rbb73l4koBAAAAAACQEgQokaH169dPRo8e7WznyJFD2rdvb1mSXbp0kYIFC7q6PgAAAAAAAFwbApRwTWycR1bsPCaHIqMk6/lTsm/NYpk69Sd55ZVXpHbt2nZOhw4dZPLkydK1a1e56aabpG3btlbGDQAAAAAAAN9AgBKumL0uQgaNmSO7/vpVzm1ZJuf3b9Yuk3ZM+0d6A5QamDxw4IBkyZLF5RUDAAAAAAAgLRCgRLobN3u5PHDXbRJzbG+C/UFhFSVnhUZSsn5bZ1/WrDxFAQAAAAAAfBnRH6SpqKgomT9/vkRGRkr37t2trHvUnycl9uwJkcCsElyqhuSs1FhyVAiXrCEFReduf74uWnp39kiWQKZwAwAAAAAA+DoClEh1x48fl5kzZ9rk7dmzZ8vp06elVKlS8u9//9t6Th44HSOFb3tRshUsKYHZcyX4XC3yjjgZZec1Ll/Ate8BAAAAAAAA6YMAJVLN119/LePGjZNff/1VLly44OwvXry4dO7cWc6dO2cDcVT24lWueC3veQAAAAAAAPBtBCiRIh6PR9auXSvXXXed0ydy2bJlMm/ePPu4evXqcuONN9rkbR16ExDw33LtwiHnknT9wiHBabh6AAAAAAAAZBQEKJFkmhW5aNEi+emnn+zxzz//yMKFC6VFixZ2vFevXlKuXDkLTJYvXz7Ra4SXzS9hocFy4GTU/8/sTkjDmEVDg+08AAAAAAAA+L5Atxfw4YcfSpkyZSQ4OFgaNmwoK1asuOL5J06ckH79+klYWJhkz55dKlWqZP0Or+WauLyzZ8/K5MmTpWfPnlKkSBFp3bq1vPvuuxaczJEjh2zbts05t0GDBjJw4MDLBieVDr4Z2rWafXzxCBzvth5nQA4AAAAAAIB/cDWDcuLEiRbQGjVqlAUSR44cKe3bt5fNmzdL4cKFLzk/Ojpa2rVrZ8e+//576224a9cuyZs3b4qviUvFxcVJYOB/Y9cbNmyQW2+91TlWoEAB6datm2VJ6v+LnDlzJvv6HaqHycc96sqwaRtsII6XZk5qcFKPAwAAAAAAwD8EeLSZoEs0gKhZdx988IETGCtZsqQ8+uijMmjQoEvO16Djm2++KZs2bZJs2bKlyjUTc+rUKQkNDZWTJ09Knjx5xB9s2bLFyrZ18nbVqlXls88+s/369NASbv071aBkkyZNnJ6T1yo2zmPTunUgjvac1LJuMicBAAAAAAAyv+TE11zLoNRsyJUrV8qzzz7r7NOsvbZt28rSpUsT/ZypU6dK48aNrcRbg2mFChWSO++8U5555hnJkiVLiq6pzp8/b4/4f4G+TgO3WvruDUpq0Ndr69atThalDrf57bff0mQNGoxsXL5AmlwbAAAAAAAAmYNrAcojR45IbGys9TWMT7fjB8vi27Fjh8yfP1/uuusu6zup/Q8ffvhhiYmJkaFDh6bommr48OEybNgw8Sdt2rSxATdemhXZqlUrm7qtJdzeEm8AAAAAAAAgLWWqKd6a1ad9JEePHm0Zk/Xq1ZN9+/ZZ2bcGKFNKMy61b2X8DEotC/dljRo1smzTTp06Wel2x44dE/TyBAAAAAAAAHw6QFmwYEELMh48eDDBft0uWrRoop+jk7u196R+npf2Szxw4ICVd6fkmkqngevDn2hZ/Isvvuh33zcAAAAAAAAyFtfqeIOCgiwDct68eQkyJHVb+0wmpmnTplbWrefFH+6igUu9Xkqu6a80W5LgJAAAAAAAANzmaqNBLav+9NNP5YsvvpCNGzdK37595cyZM9K7d2873rNnzwQDb/T4sWPHpH///haYnDFjhrz22ms2NCep1wQAAAAAAACQcbjag7J79+5y+PBhGTJkiJVp165dW2bPnu0Mudm9e3eCYS3aF3LOnDkyYMAAqVmzphQvXtyClVqunNRrAgAAAAAAAMg4Ajwej8ftRWQ0OiQnNDRUTp48KXny5HF7OQAAAAAAAIDPxtdcLfEGAAAAAAAA4N8IUAIAAAAAAABwDQFKAAAAAAAAAK4hQAkAAAAAAADANQQoAQAAAAAAALiGACUAAAAAAAAA1xCgBAAAAAAAAOAaApQAAAAAAAAAXEOAEgAAAAAAAIBrCFACAAAAAAAAcA0BSgAAAAAAAACuyerel864PB6P/Xnq1Cm3lwIAAAAAAABkOt64mjfOdiUEKBMRGRlpf5YsWdLtpQAAAAAAAACZOs4WGhp6xXMCPEkJY/qZuLg42b9/v4SEhEhAQID4ejRbA7F79uyRPHnyuL0cIN3w3Ie/4rkPf8VzH/6K5z78Fc99+KtTGei5ryFHDU4WK1ZMAgOv3GWSDMpE6F9aiRIl3F5GutInrdtPXMANPPfhr3juw1/x3Ie/4rkPf8VzH/4qTwZ57l8tc9KLITkAAAAAAAAAXEOAEgAAAAAAAIBrCFD6uezZs8vQoUPtT8Cf8NyHv+K5D3/Fcx/+iuc+/BXPffir7Jn0uc+QHAAAAAAAAACuIYMSAAAAAAAAgGsIUAIAAAAAAABwDQFKAAAAAAAAAK4hQAkAAAAAAADANQQofdCHH34oZcqUkeDgYGnYsKGsWLHiiuefOHFC+vXrJ2FhYTblqVKlSjJz5sxruibgC8/9F198UQICAhI8qlSpkg7fCZB2z/2WLVte8rzWR+fOnZ1zdH7ekCFD7N9Gjhw5pG3btrJ169Z0+m4A957799xzzyXHO3TokE7fDZB2r3lGjhwplStXtp/pJUuWlAEDBkhUVNQ1XRPwhec+r/fhi8/9mJgYeemll6R8+fJ2fq1atWT27NnXdM10oVO84TsmTJjgCQoK8owZM8azfv16T58+fTx58+b1HDx4MNHzz58/76lfv76nU6dOnsWLF3t27tzpWbhwoWf16tUpvibgK8/9oUOHeq677jpPRESE8zh8+HA6fldA6j/3jx49muA5vW7dOk+WLFk8Y8eOdc55/fXXPaGhoZ4ff/zRs2bNGk+3bt08ZcuW9Zw7dy4dvzMg/Z/7vXr18nTo0CHBeceOHUvH7wpI/ef+N99848mePbv9qa935syZ4wkLC/MMGDAgxdcEfOW5z+t9+OJz/+mnn/YUK1bMM2PGDM/27ds9H330kSc4ONizatWqFF8zPRCg9DHh4eGefv36OduxsbH2xBw+fHii53/88ceecuXKeaKjo1PtmoCvPPf1BUutWrXSZL1AarnWn9HvvPOOJyQkxHP69GnbjouL8xQtWtTz5ptvOuecOHHCXuCPHz8+Db4DIGM8970ByhtvvDFN1gu49dzXc1u3bp1g38CBAz1NmzZN8TUBX3nu83ofvvjcDwsL83zwwQcJ9t1yyy2eu+66K8XXTA+UePuQ6OhoWblypZXieQUGBtr20qVLE/2cqVOnSuPGja3MtUiRIlK9enV57bXXJDY2NsXXBHzhue+lZa3FihWTcuXKyV133SW7d+9O8+8HSKrU+Bn9+eefy+233y65cuWy7Z07d8qBAwcSXDM0NNTKPvi5D19+7nstXLhQChcubCWBffv2laNHj6b6+oH0fO43adLEPsdburdjxw5radOpU6cUXxPwhee+F6/34WvP/fPnz1vZdnza5mDx4sUpvmZ6yOraV0aqO3LkiAVXNNgSn25v2rQp0c/RH9Lz58+3H8T6w3rbtm3y8MMPW8+CoUOHpuiagC8895UGZMaNG2dvUiMiImTYsGHSvHlzWbdunYSEhKTL9wZcybX+jNYX7Pp81kCNlwYnvde4+JreY4AvPveV9pu85ZZbpGzZsrJ9+3Z57rnnpGPHjvZiPUuWLKn+fQDp8dy/88477fOaNWtmPYYvXLggDz30kD2/U3pNwBee+4rX+/DF53779u3l7bffluuvv976UM6bN08mT57sJONk1J/7BCj9XFxcnGUJjB492l5416tXT/bt2ydvvvmmE6QB/PW5r29KvWrWrGkvYEqXLi3fffed3HfffS6uHkgdGpypUaOGhIeHu70UIEM89zWj0kuP689+fWGvWZVt2rRxYaXAtdPnr1aJfPTRR/ZaRm/K9u/fX15++WUZPHiw28sDXH3u83ofvujdd9+VPn362MAnHfykr2V69+4tY8aMkYyMEm8fUrBgQQu0HDx4MMF+3S5atGiin6MTWnVycfysgKpVq1qWjKb9puSagC889xOTN29e+xx9cQNkBNfyM/rMmTMyYcKES158ez+Pn/vwt+d+YrTcT78WP/eRmZ/7Goi5++675f7777fA+80332xBm+HDh9sNW17vw1+f+4nh9T584blfqFAh+fHHH+01z65duywrMnfu3Pa6JqXXTA8EKH1IUFCQZYFp+q6X/uDVbe21l5imTZvaD9/4P6C3bNliwRu9XkquCfjCcz8xp0+ftpI/PQfICK7lZ/SkSZOsP02PHj0S7NfSVn1hEv+ap06dkuXLl/NzHz793E/M3r17rQclP/eRmZ/7Z8+etd5i8Xlv0GrZK6/34a/P/cTweh8ZTdA1/IzWPpTFixe39gY/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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inferred_reward_probabilities = 0.5 + 0.5 * nn.sigmoid(mcmc_samples[\"z\"].mean(0)[:, 0])\n", "ground_truth_reward_probabilities = 0.5 + 0.5 * nn.sigmoid(ground_truth_z[:, 0])\n", "\n", "plt.figure(figsize=(16, 5))\n", "plt.scatter(ground_truth_reward_probabilities, inferred_reward_probabilities, label=\"reward probability\")\n", "\n", "plt.plot((ground_truth_reward_probabilities.min(), ground_truth_reward_probabilities.max()), (ground_truth_reward_probabilities.min(), ground_truth_reward_probabilities.max()), \"k--\")\n", "plt.ylabel(\"posterior mean (NUTS-HMC)\")\n", "plt.xlabel(\"true value\")\n", "plt.legend(title=\"parameter id\")\n", "\n", "corr = np.corrcoef(\n", " np.array(ground_truth_reward_probabilities),\n", " np.array(inferred_reward_probabilities),\n", ")[0, 1]\n", "\n", "bimodality_score = np.clip(\n", " np.mean((np.array(inferred_reward_probabilities) < 0.2) | (np.array(inferred_reward_probabilities) > 0.8))\n", " - np.mean((np.array(inferred_reward_probabilities) >= 0.35) & (np.array(inferred_reward_probabilities) <= 0.65)),\n", " 0.0,\n", " 1.0,\n", ")\n", "\n", "print(f\"reward-probability Pearson r: {corr:.3f}\")\n", "print(f\"reward-probability bimodality score: {bimodality_score:.3f}\")\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "15", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABkcAAAPzCAYAAAANttuiAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QecY2X18PEzM5ney872Sq8LgiCIFEXBAqKglD+iqKgI0qWosC+ggvQugqAooiggYgMUAUHBld7b9jI7s9N7yiTv59w1s5nZzEzK7ff39RPZZFKe3NzcJM95zjkFiUQiIQAAAAAAAAAAAAFR6PQAAAAAAAAAAAAA7ERwBAAAAAAAAAAABArBEQAAAAAAAAAAECgERwAAAAAAAAAAQKAQHAEAAAAAAAAAAIFCcAQAAAAAAAAAAAQKwREAAAAAAAAAABAoBEcAAAAAAAAAAECgEBwBAAAAAAAAAACBQnAEAAAggL70pS/JggULHB2DPr6OI+mJJ56QgoIC479W+3//7/8Zj5VKz5966qlih5///OfG461cudKWx/Mz3Y8+9alPTXk9O/evbHzzm9+Uj370o1nfLp/nk27/H/9+RHoHHnigcUp64403JBQKyWuvvebouAAAAJA9giMAAMDSyd+ysjJZt27dFn/XyaWdd94548np++67b3QiMDkpmMkp6dVXX5WjjjpK5s+fb4xp9uzZxoTkjTfeKG6kE246gcnk+dR++MMfyoMPPihu5Oaxwfn37IoVK+SnP/2pfOc737F0bEHz73//23gturu7LX+sHXfcUT75yU/KRRddZPljAQAAwFwhk+8PAABgjHA4LJdffrmpQYgddthBfvnLX4657IILLpCqqir57ne/m3ai7KCDDpJ58+bJSSedJDNmzJA1a9bIs88+K9dff71861vfEjdOtF588cVGEMmKDI/bb79d4vG4uMn+++8vQ0NDUlJSknUAQgNfRxxxRMa3+d73vifnn3++WG2isX3hC1+QY445RkpLSy0fA/Lbv6x8z+rxZ+HChcbxyenn8/bbb0thoT/WzukxX18LzYSpq6uz/PG+8Y1vyCc+8QlZtmyZbLXVVpY/HgAAAMxBcAQAAFhqt912MybiNXgxa9YsU+5z+vTpcvzxx4+5TAMwTU1NW1yufvCDH0htba3897//3WKirK2tTYJkYGBAKisrpbi42LT71CBLJBIxMnLyoROz+d5Hps9fy+DoySlFRUXGya+Gh4eNSXs3TbbbsX9lIxqNyq9+9StjYt0Nz8cPgbrk+9tuBx98sNTX18tdd90ll1xyie2PDwAAgNy459cKAADwJS0XMzIyYgQvnKKreXfaaae0K4ibm5unvH2yBNjzzz8v++67r5SXlxurvW+99dYtrqvBlq985StGAEcnLhcvXmxMmI33m9/8RvbYYw+prq6Wmpoa2WWXXYxV5MmSZJ/73OeMf+uK8mSJsNTeAn/961/lQx/6kDERqPehZV1ef/31MY+hq6Y1m0afv65q1uv93//93+jfxq9u14nFs88+W+bOnWtMlG633XZy1VVXSSKRSFv+TCd2dbvqdR9++OEJt5/e/vvf/77MmTNHKioqjOc0fqwT9VB499135cgjjzSyfXR76n1oxkVPT8/oWHTcuo2T2ynZNyHZV0FX9B933HHG5OV+++035m/p6PPS566Pp6/RP//5zy22a7rMgPH3OdnYJuo5csstt4xuUw0mnnLKKVuUBkruj/q8dFvqNtUycVdccYVkIvX1m+x5Ki2J9+Uvf9nYn3VMOrY777wz7eum+7Rm5OhYdEy9vb0TjmGy/T/dtsykV8ujjz5qBGP1+WipowceeCCjHh3/+c9/5NBDDzUCqDruAw44QP71r3+l3Rb63tbXRbeFHgNOPvlkIzCYyXt2vKefflra29uNifWk1tZWI2inWQ/pMjv0Pm+66aZJn8/vfvc7Y9vqcSoZME5X2nC88T1Hkttat8VZZ50l06ZNM443n/nMZ2Tjxo2SK80i1P1It7W+J/fcc0+55557xlznxRdflI9//OPGvqHHsI985CNGpl+q5PiefPJJo2+LHsv1+KD7zre//W3jOvoaJV+L1H3m7rvvHt1GDQ0NxjFFswnHu+2224xMEL3eXnvtJU899VTa56TBZn1f/uEPf8h5uwAAAMB+ZI4AAABL6eTUCSecYGSPaBkjs7JHsqF9Rp555hmjYe74PieZ6urqMgIMn//85+XYY4+V3/72t8bEqK6O18ljpSVudILsvffeMyaf9bnrRKVOOOoE9+mnn25c729/+5txHzrh96Mf/ci47M033zQmIfU6Wi7ntNNOkxtuuMEILmkZMZX8r5YU++IXvyiHHHKIcfvBwUH58Y9/bEz866Ri6sR9LBYzrqd/00CHTkhOFMA4/PDD5fHHHzcmgHWS+ZFHHjEmGXVi9dprrx1z/X/84x/GNtDnqROwk5UR0lr8GhzR7aenF154QT72sY8Zk8qT0b/r2LU0m5Y+0wCJjuVPf/qTsT11Mlu3xVe/+lVj4vJrX/uacbvxZW100nqbbbYxSlyND/SMpxOt9957r7H9dQJcgxU6cb506dKs951MxpZKJ3V1Ulwny3Xf0slwfV0140n3jdRsH90fdVyf/exnjX1Se/Kcd955RpBBJ5Wnksnz1In6D3zgA6PBFJ0c16Cc7h8a+DjjjDPG3Oell15qvB/OOecc4zWbqNzTVPt/LjSIdvTRRxtZGPre+NnPfma87hq0m6zZue7Hur10onzJkiVGNobe9sMf/rAxEa6vnVq/fr3xb93v9LXcfvvtjX1Rt7u+/6Z6z05U+km37e677z56mQahNDij7y0dTyp9vTTbKBmESUcDBieeeKK8//3vl8suu8x4DTXopNtWjw25lJjS954GMXQ8GmC47rrrjP1Bx5Mt/RzQ7aSl5vS11gyjV155xQhQaQBTaeBUA78aGDn33HON/f4nP/mJcWzV/Xbvvfcec58aGNF9U48zGozU1/Odd96RX//618ZxS49PSq+TzCS88MILjfeNvj810KMBG30NU7fRHXfcIV//+teNgLju68uXLzeOkRpM0QDyeLoPaXBE3xs6dgAAAHhAAgAAwAI/+9nPdBY68d///jexbNmyRCgUSpx22mmjfz/ggAMSO+2005jb6PVPOeWUtPf3u9/9zvj7448/nvbvel96n+k8+uijiaKiIuO0zz77JM4999zEI488kohEIhk9F71ffeyrr7569LJwOJzYbbfdEs3NzaP3c9111xnXu/vuu0evp3/Tx6yqqkr09vYal51++umJmpqaRCwWm/AxJ3q+fX19ibq6usRJJ5005vINGzYkamtrx1z+xS9+0biP888/f4v717/Nnz9/9PyDDz5oXPf73//+mOsdddRRiYKCgsR77703epler7CwMPH6669PseUSiba2tkRJSUnik5/8ZCIej49e/p3vfMe4Hx1Hkj7X1Of84osvGud1W0ymsrJyzP0kLVmyxLj9scceO+HfUul5PT333HOjl61atSpRVlaW+MxnPjPhtpvsPicaW/L9sWLFijHb6WMf+1hiZGRk9Ho33XSTcb0777xz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rKLHaH1c3d56/JuIvq4arNLjlL5OGrTR45UGbpLHR80I+9vf/mZsH80o0lKBelzVgM8VV1yR0XiSAWs9nun7VbeNHuP0OKb3r+81Pc5pwEkfV7M+NLimr60er/T6ej39HNLXRl8LvY4+v3Q9RzSw8+STTxrjBQAAgIckAAAALPCzn/1Ml+Um/vvf/27xty9+8YvG33baaact/rZ27drEV7/61cTs2bMToVAo0dDQkPjUpz6VePbZZyd9PL2vAw44IO3f/vrXvya+/OUvJ7bffvtEVVVVoqSkJLH11lsnvvWtbyVaW1unfC56v3r/zz33XGKfffZJlJWVJebPn5+46aabtriu3t+JJ56YaGpqMh5nl112MbZFqvvuuy/xsY99LNHc3GxcZ968eYmvf/3riZaWljHXu/322xOLFi1KFBUVGdvr8ccfH/2b/vuQQw5J1NbWGuPZaqutEl/60peMMaZu58rKyrTPSf+mzyFVX19f4swzz0zMmjUrUVxcnNhmm20SV155ZSIej4+5no7llFNOSWRqZGQkcfHFFydmzpyZKC8vTxx44IGJ1157zXh8HUfqc0p9nsuXLzdeN31u+hx1XzjooIMSf//738fc/1tvvZXYf//9jfvW2yfvc8mSJcb5jRs3bjGm5N/SPa+7777beO6lpaWJ3Xfffcx2T3r00UcTO++8s/H6bbfddsZt0t3nRGNLvj9WrFgx5vq6T+l+qtt/+vTpiZNPPjnR1dWVdn/M5DVNJ5vnqfuzXnfu3LnGmGbMmJH4yEc+krjtttu2eN1+97vfJTKR6f7//PPPJ/bee+/R61xzzTVpt5s+509+8pOJRx55JLHrrrsaz0e34fjxjN+/kl588cXEZz/72URjY6NxW72/z3/+84nHHntszPVWrVqVOOGEExLTpk0zrqfvTd024XA4o/dsOqeddppxLEqnt7d3dL/R12q8iZ7Pvffea7yeOkZ9z/zf//2fcVxNlW5fHf9+nOgYnu5xb7zxRuOyhx9+eNLn+5Of/MR4PyS3tb63v/3tbyd6enrGXO+FF14wjm96vK6oqDDe9//+978z/oxRl156qfE5UlhYuMU+c//99yf2228/4/ioJ91f9LV8++23x9zHLbfckli4cKEx1j333DPxz3/+03j/jf+s0c8YfYx333130ucPAAAAdynQ/3M6QAMAAOBmBx54oLS3t0/ZcwDwAi2Tdsopp+SUYeRljz32mFG+7KmnnjKyEtxg+fLlRjabZlJpw3Wv+vznP29kYixdulSCSDNQ9H2VrrQeAAAA3IuyWgAAAAB8T8tgqanKudlJSzRpOTAtYebV4IiutXviiSfk7rvvliDS0mB/+tOfjDKLAAAA8BaCIwAAAAB8Sxu5/+pXvzJ6b2iPE+1P4ibar8bLNGOira1Ngkr7z2g/JAAAAHhPodMDAAAAAACrbNy4Ub71rW9JeXm53H///UYjdgAAAABw9JfBP//5TznssMNk1qxZxoqjBx98cMrbaMr2+973PiktLZWtt95afv7zn9syVgAAEFz6/YN+I/ALLYMUpH4jCxYskHA4LM8995zstddeTg8HAAAAgEsUOp3ivnjxYrn55pszuv6KFSvkk5/8pBx00EFGTdczzjhDvvrVr8ojjzxi+VgBAAAAAAAAAIA/FCR06ZgLaObI73//ezniiCMmvM55550nf/7zn8es3DzmmGOku7tbHn74YZtGCgAAAAAAAAAAvMxTDdmfeeYZOfjgg8dcdsghhxgZJBPRFHo9JcXjcens7JTGxkYjIAMAAAAAAAAAcD9d59/X12e0aaCXHAIVHNmwYYNMnz59zGV6vre3V4aGhowmi+NddtllcvHFF9s4SgAAAAAAAACAVdasWSNz5sxxehjwOE8FR3JxwQUXyFlnnTV6vqenR+bNm2e8gWpqahwdGwAAAAAAAAAgM7pIfu7cuVJdXe30UOADngqOzJgxQ1pbW8dcpuc1yJEua0SVlpYap/H0NgRHAAAAAAAAAMBbaJcAM3iqMNs+++wjjz322JjL/va3vxmXAwAAAAAAAAAAuD440t/fLy+99JJxUitWrDD+vXr16tGSWCeccMLo9b/xjW/I8uXL5dxzz5W33npLbrnlFvntb38rZ555pmPPAQAAAAAAAAAAeIujwZHnnntOdt99d+OktDeI/vuiiy4yzre0tIwGStTChQvlz3/+s5EtsnjxYrn66qvlpz/9qRxyyCGOPQcAAAAAAAAAAOAtBYlEIiEBa9pTW1trNGafqOeIbpJYLCYjIyO2jw9Ip6ioSEKhEPUUAQAAAAAAEFiZzO0CvmzIbodIJGJkrAwODjo9FGCMiooKmTlzppSUlDg9FAAAAAAAAADwNIIjKeLxuNH3RFfpz5o1y5iEZqU+nKaZTBq027hxo7F/brPNNlJY6GhFPAAAAAAAAADwNIIjKXQCWgMkc+fONVbpA25RXl4uxcXFsmrVKmM/LSsrc3pIAAAAAAAAAOBZLD9Pg1X5cCP2SwAAAAAAAAAwB7OtAAAAAAAAAAAgUAiOAAAAAAAAAACAQCE4YpJYa4fE1rVmdt11rcb14ayf//znUldX58hjP/HEE1JQUCDd3d2OPD4AAAAAAAAABBnBERNooGP9Z0+XdUecNmWARP+u19PrmxkgOfDAA+WMM84w7f4AAAAAAAAAAPArgiNmiMUkEYlKbOX6SQMkycCIXk+vr7ezUyKRkJiNjxmJRMQN7ByH3dsYAAAAAAAAAJA9giMmCM2eLrMfvEFCC2ZNGCBJDYzo9Yzrz55uyuN/6UtfkieffFKuv/56o1STnlauXDlauumvf/2r7LHHHlJaWipPP/20cf0jjjhizH1o1olmnyTF43G57LLLZOHChVJeXi6LFy+W++67b9JxLFiwQC699FI54YQTpKamRr72ta8Zl+tjfuhDHzLuZ+7cuXLaaafJwMCA8bebbrpJdt5559H7ePDBB40x33rrraOXHXzwwfK9733P+PeyZcvk05/+tEyfPl2qqqrk/e9/v/z973/PaBxaRmvevHlSUVEhn/nMZ6SjY/LMHd2GOpbf/OY3su+++0pZWZkxVt3WSRNt43A4bDzP5uZm43b77bef/Pe//93iMf71r3/JrrvualznAx/4gLz22muTjgkAAAAAAAAAkD+CIzYESKwMjCgNiuyzzz5y0kknSUtLi3HSIETS+eefL5dffrm8+eabxkR8JjQw8otf/MIIUrz++uty5plnyvHHHz8mMJDOVVddZQRSXnzxRbnwwguNYMahhx4qRx55pLzyyity7733GsGDU0891bj+AQccIG+88YZs3LjROK/339TUZAQdVDQalWeeeWY0cNPf3y+f+MQn5LHHHjMeQ+/7sMMOk9WrV086jv/85z/yla98xXjcl156SQ466CD5/ve/n9G2+Pa3vy1nn322cV+6nfXxxgdWxm/jc889V+6//36566675IUXXpCtt95aDjnkEOns7Nzivq+++mojcDJt2jTjvvU5AwAAAAAAAACsQ3DE4gDJ8NJXLQ2MqNraWikpKTEyImbMmGGcioqKRv9+ySWXyEc/+lHZaqutpKGhYcr706yH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UVZL7+eSSy6ROXPmGNfRvz388MOjf9cx6P3ce++9csABB0hZWZn86le/Srst9Ho/+clP5FOf+pTxPHfYYQd55pln5L333jO2kz63fffdV5YtWzbmdn/4wx/kfe97n3HfixYtkosvvtgI5CRdc801sssuuxi3nzt3rnzzm9+U/v7NH5w///nPpa6uTh555BHjMTUApK97S0tLzq8rAAAAAAAArDUUGZG1XUOm3FdkJC4rc2zqDsBeBEcscNxxx8nf//73MZfp+WOPPdbSx73rrrskFArJ0qVL5frrrzcm83/605+O/l0DGs8995w89NBDRrBAAycavElmYJxyyikSDofln//8p7z66qvyox/9yJjg10DA/fffb1zn7bffNib79f6VBkZ+8YtfyK233iqvv/66nHnmmXL88cfLk08+OWZs559/vlx++eXy5ptvyq677rrF2PX+rr76arnqqqvklVdekUMOOUQOP/zwLbJu9H5OP/104370OhO59NJLjUDQSy+9JNtvv73xmnz961+XCy64wNgG+tw1kJT01FNPGdfX+37jjTeM4IoGO37wgx+MXqewsFBuuOEG43nqtv7HP/4h55577pjHHRwcNJ7DL3/5S2M7rl692ighBgAAAAAAAHd6t63PKIllZhbKSNy8+wNgjYJEampBAPT29hqZFT09PVJTUzPmb8PDw7JixQojC0KzB3ItpaUZI5P9fZttthGzaUZEW1ubMXGvmRPJQIIGQnSyX4MMmsHyr3/9y8iaUB0dHUbgQyf6P/e5zxlBiyOPPFKWLFmyxf1rBohmj2j2iWZHKA2kNDQ0GIGfffbZZ/S6X/3qV40gwT333DN6uwcffFA+/elPj15HM0f0Mg1eqNmzZxvBme985zuj19lrr73k/e9/v9x8881G5oi+Ltddd50RwJiMPv/vfe97RoBEPfvss8b47rjjDvnyl79sXPab3/xGTjzxRBka2rQq4OCDD5aPfOQjRvAk6e677zaCH+vXr0/7OJoh841vfEPa29uN8xpM0fvUDJWtttrKuOyWW24xMmI2bNgg+TJj/wQAAAAAAMDYrJG/v9lqanBE7Ty7VraaVmXqfWLyuV0gW6Gsb4FJjS/VNJ5OnFsRHFEf+MAHRgMjSgMCmo0xMjJiZFpoVsnee+89+nft+aGBHP2bOu200+Tkk0+WRx991AgWaKAk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pCKio6Ola9eusmzZslIfj42NNUthqampBzFqBIr+R4T/kKA4zguUhvMCpeG8QGk4L1Ac5wRKw3mB0nBeoDScFygN54W9yBhBWDRkj4mJkW7dusk333xTJLND7xfODimPluX6448/JD09vRJHCgAAAAAAAAAAwoXtZbW05NWwYcPk0EMPle7du8ukSZMkKytLhg8fbh4fOnSo1K9f3/QOUXfeeaccfvjh0qJFC9m5c6c8+OCDsmrVKrnkkktsficAAAAAAAAAACAU2B4cGTx4sGzZskXGjRsnGzdulC5dusgXX3zha9K+evVqcTr/S3DZsWOHjBgxwmyblpZmMk9mzpwp7dq1s/FdwB9a5mz8+PElyp0hsnFeoDScFygN5wVKw3mB4jgnUBrOC5SG8wKl4bxAaTgvgPDisLSLDQAAAAAAAAAAQISwtecIAAAAAAAAAABAVSM4AgAAAAAAAAAAIgrBEQAAAAAAAAAAEFEIjgAAAAAAAAAAgIhCcAS2ue+++8ThcMi1115r91BgI7fbLbfddps0bdpU4uPjpXnz5jJhwgSxLMvuocFGt99+u/n3ofDSpk0bu4eFIPDkk09KkyZNJC4uTnr06CFz5syxe0iw0b333iuHHXaYJCUlSe3atWXQoEGyePFiu4cFm+m/EcX/G6LLlVdeaffQYLOMjAzzt0fjxo3N7529evWSX3/91e5hwUZPP/20dOrUSZKTk83Ss2dP+fzzz+0eFmy2bt06Of/886VGjRrm34qOHTvK3Llz7R4WbPbDDz/IgAEDpF69eub3ig8++MDuIQEIAIIjsIX+EfLMM8+YX0QR2e6//37zR8kTTzwhf//9t7n/wAMPyOOPP2730GCz9u3by4YNG3zLTz/9ZPeQYLO33npLRo8eLePHj5f58+dL586dpV+/frJ582a7hwabfP/992bCe9asWfLVV19JXl6enHDCCZKVlWX30GDz75mF//uh54Y666yz7B4abHbJJZeY8+HVV1+VP/74w/x70bdvXzMRisjUoEEDc9HevHnzzOT3scceKwMHDpQ///zT7qHBJjt27JAjjjhCoqOjTaDsr7/+kocffljS0tLsHhpspr9f6t8ferEWgPDhsLg8G1UsMzNTDjnkEHnqqafkrrvuki5dusikSZPsHhZscsopp0idOnXkhRde8K0744wzzBU6r732mq1j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XmrXrl3m4ykpKUUySw7UeeedJz/99JP8+eefB70vAAAAwC4ERwAAAKrAu+++Kx07djSTlzVq1JC+fftKVlZWmVdva+mb4oECLTc1ZMgQSUxMlPr168uTTz5ZbqaHZhZccsklJmiSnJwsxx57rPz2229FnvPxxx/LYYcdJnFxcVKzZk057bTTfGNatWqVjBo1ymQp6FLRTIw5c+ZI165dzT4PPfRQWbBgwX6Pz9tvvy2dO3c278tLX3/AgAGSlpZm3nP79u3ls88+8z3+/fffS/fu3U1gJj09XcaMGSP5+fm+x/U9XHXVVebY6nvr16+fOUZK36eO23tfffjhh3LIIYeYcTdr1kzuuOOOIvtbunSpHH300ebxdu3ayVdffSUVofvQcejEtI7jtttuE8uyzGN33nmndOjQocRztBSSbldaibJjjjnG3Nbjou/Be56U9n5LK2mm54Wu0wwUr0WLFpnsn2rVqkmdOnXkggsukK1bt+63fNNHH31kjoV+BhrgysnJMVkF+jnqZ9ajRw/f6+h71nNRvwuF36d+dl464a772rNnj7k/ceJE873RfTVs2FCuuOIKyczM3O84Nm/ebM4d/b41bdpUXn/99f1+Tt6SU/q5e78zl19+eZEASGnHuCLn4v7OA/Xqq6+a74tmTmnA8dxzzzXvo7iff/5ZOnXqZM7Dww8/3Hx2xY/H/t6j97aOW7NJvN/xlStXSosWLeShhx4q8jw9f/TxZcuW+c69I444QqZOnbrf4woAAAAEK4IjAAAAlUzLTmlQ46KLLpK///7bTBaffvrpRSZGK+LBBx80AQQNNujk6zXXXFPuBP1ZZ51lJlc///xzmTdvnpn4P+6442T79u3m8U8//dQECU4++WSzz2+++cZM8Kpp06ZJgwYNzOS9jl+XitCJ61NOOcVMVOtras8DnSzfnx9//NFMDBd25ZVXmsn2H374Qf744w+5//77zeS9WrdunRm3BnY04PP000/LCy+8IHfddVeRfbz88sumDJBOKE+ePNmUHlNTpkwx78l7X19/6NCh5pj+9ddf8swzz5iJ5rvvvts8rtkI+pnpvmbPnm32VdGyQjqGqKgoEzTSiWid8H/++efNY95zwjsOpZ/F77//LsOHDy+xLw0QvPfee74eLfoedJ9lvd+K0GCJBs40oKV9JL744gvZtGmTnH322eU+TwMY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OlW6desmSUlJkpycLB07djRZLEonOM866yxzWzNevCXCtJyY1+effy5HHXWUCXToPvr37y9//vlnqT0u9P2ffPLJZrvzzjvP91jxK9o1cHLddddJw4YNJTY2Vlq3bi0PPfSQWJZVavmz119/3RxX3faLL74o8/jp8++66y5p0KCBJCQkmPdUfKxeO3fulGuvvdY3hhYtWpjSSIWzXLz9LXRszz77rDRv3txse9hhh5kAWGEbN26U4cOHm9fWbdLT02XgwIFFyh0V7jmix1j3o/R53mOvn8n48eNNUGnLli0lxn3ppZea80snx/dnxYoV0q9fP/PZacDwzjvv9B1j/amfi46xON23Bvkuu+yycvf/1VdfyZFHHmnGo5+/fo76PSxe8q54ySdvubrC55nX/s79snqO/PPPP6acXfXq1c334dBDD5WPPvqo1M991KhR5r3r56Sf19ChQ2Xr1q3lfiZlWblypfz+++/St29fv757hT8j/Q7quPWcPfzww+XTTz8t9Xjp/m699VZTqk+31QyOQHx/1QcffGD+7dFjpz/ff//9Mt+zlgn8+OOPS3xfAQAAgMpC5ggAAEA5dCJVJzk1e2TMmDEByx7xt+TPL7/8IosWLapQc+nS7NixwwQYzj77bFOm5+2335b//e9/5irxiy66yGyjZYV0kn3ZsmUmeKDv/Z133jGBCJ38veaaa3yT17qP4447zkz8q7///lt+/vlns83RRx8tI0eONJOsOqmtV4Ur708tKTZs2DAzwa7P37Nnjzz99NNmQnzBggVFgh5aVki308c0mKCTt6XRCVW9yn7GjBkmuKMZP9OnT5cbbrjB9Ix55JFHimyv5Xv0GOj71Iyd8koHjRs3zgRH9PjpMn/+fDnhhBNMtklh+j569+5tXk8DAFoGTUuiadbRhg0bZNKkSUW2f+ONNyQjI8Nsq5PP2nz79NNPNxPb3syYM844w0w6a+k0HaMGr/T4r169utQx6zHWYIWOWQMeOoGtNDCgx1Afe+utt4r0xtH3oT1x9LX2l6WggcITTzzRTLbreDWopEEX/Zx03/o+NPtJH9u+fbuZnPfSiW/to1FadpSXvtdTTjlFOnXqZPangQY9H/XcOlAVOffLGssRRxxhggb63ddAgD530KBB8t5778lpp51mtsvMzDTHWb8Dur9DDjnEBEU0iLJ27dpyP5Oy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LuMIt3MqOTlZcnNzW3w8MzOzUWbJkZo+fbosWrRI1qxZc9T7AgAAAOxCcAQAAOA4eOWVV2To0KFm8jI7O1umTJki5eXlLV69raVvmgYKtNzUxRdfLKmpqdKlSxd57LHHWs300MyCK664wgRNMjIy5LTTTpOvv/660XP+9a9/ydixYyUpKUlycnLkxz/+sX9MW7duleuvv95kKegSbCbG0qVLZeTIkWafY8aMka+++uqw789LL70kw4cPN8flo6//wx/+ULKysswxDx48WN555x3/45988omMGzfOBGby8vLk5ptvlrq6Ov/jegzXXnuteW/12M4880zzHik9Th23776aP3++jBo1yoy7V69ecscddzTa33fffScnn3yyeXzQoEHy/vvvSzB0HzoOnZjWcdx2221iWZZ57M4775QhQ4Yc8hwthaTbNVei7NRTTzW39X3RY/CdJ80db3MlzfS80HWageKzevVqk/2TlpYmHTt2lEsvvVT27t172PJNb775pnkv9DPQAFd1dbXJKtDPUT+z8ePH+19Hj1nPRf1ZCDxO/ex8dMJd91VRUWHuP/TQQ+bnRveVn58vV199tZSVlR12HLt37zbnjv689ezZU/7xj38c9nPylZzSz933M/Nf//VfjQIgzb3HwZyLhzsP1HPPPWd+XjRzSgOOl1xyiTmOphYvXizDhg0z5+EJJ5xgPrum78fhjtF3W8et2SS+n/EtW7ZInz595MEHH2z0PD1/9PGNGzf6z71JkybJCy+8cNj3FQAAAAhXBEcAAACOMS07pUGNn//857J27VozWfwf//EfjSZGg/HAAw+YAIIGG3Ty9brrrmt1gv7CCy80k6vvvvuuLF++3Ez8n3766bJ//37z+Ntvv22CBD/4wQ/MPj/44AMzwatee+016dq1q5m81/HrEgyduD733HPNRLW+pvY80Mnyw/n000/NxHCga665xky2L1y4UFatWiX333+/mbxXO3bsMOPWwI4GfJ544gn561//KnfffXejffztb38zZYB0QvnJJ580pcfUs88+a47Jd19f/7LLLjPv6bfffitz5841E82///3vzeOajaCfme7riy++MPsKtqyQjiEuLs4EjXQiWif8/+d//sc85jsnfONQ+ll88803MmPGjEP2pQGCV1991d+jRY9B99nS8QZDgyUaONOAlvaReO+996So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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inspect full NUTS posterior shape per subject (not just posterior means)\n", "z_samples = np.array(mcmc_samples[\"z\"])\n", "\n", "# Handle optional chain dimension: [chains, draws, agents, params] -> [draws_total, agents, params]\n", "if z_samples.ndim == 4:\n", " z_samples = z_samples.reshape(-1, z_samples.shape[-2], z_samples.shape[-1])\n", "elif z_samples.ndim != 3:\n", " raise ValueError(f\"Unexpected mcmc_samples['z'] shape: {z_samples.shape}\")\n", "\n", "reward_prob_samples = 0.5 + 0.5 / (1.0 + np.exp(-z_samples[..., 0])) # [draws, agents]\n", "true_reward_prob = np.array(0.5 + 0.5 * nn.sigmoid(ground_truth_z[:, 0]))\n", "posterior_mean = reward_prob_samples.mean(axis=0)\n", "\n", "subject_ids = np.arange(num_agents)\n", "sort_idx = np.argsort(true_reward_prob)\n", "subject_ids_sorted = subject_ids[sort_idx]\n", "true_reward_prob_sorted = true_reward_prob[sort_idx]\n", "posterior_mean_sorted = posterior_mean[sort_idx]\n", "reward_prob_samples_sorted = reward_prob_samples[:, sort_idx]\n", "\n", "plot_positions = np.arange(num_agents)\n", "\n", "fig, axes = plt.subplots(2, 1, figsize=(16, 10), constrained_layout=True)\n", "\n", "# 1) Violin plot: per-subject posterior distributions + true values (sorted by true reward prob)\n", "parts = axes[0].violinplot(\n", " [reward_prob_samples_sorted[:, i] for i in range(num_agents)],\n", " positions=plot_positions,\n", " showmeans=False,\n", " showmedians=True,\n", " showextrema=False,\n", ")\n", "for pc in parts['bodies']:\n", " pc.set_alpha(0.35)\n", "\n", "axes[0].scatter(plot_positions, true_reward_prob_sorted, color='crimson', marker='x', s=80, label='true reward prob')\n", "axes[0].scatter(plot_positions, posterior_mean_sorted, color='black', s=20, label='posterior mean')\n", "axes[0].set_ylabel('reward probability')\n", "axes[0].set_xlabel('subject id (sorted by true reward probability)')\n", "axes[0].set_ylim(0.5, 1.0)\n", "axes[0].set_xticks(plot_positions)\n", "axes[0].set_xticklabels(subject_ids_sorted)\n", "axes[0].set_title('NUTS posterior distribution per subject (violin, sorted)')\n", "axes[0].legend(loc='upper left')\n", "\n", "# 2) Density heatmap: posterior mass over probability bins by subject (same sorted order)\n", "bins = np.linspace(0.0, 1.0, 60)\n", "density = np.stack([\n", " np.histogram(reward_prob_samples_sorted[:, i], bins=bins, density=True)[0]\n", " for i in range(num_agents)\n", "], axis=1) # [num_bins-1, num_agents]\n", "\n", "im = axes[1].imshow(\n", " density,\n", " aspect='auto',\n", " origin='lower',\n", " extent=[-0.5, num_agents - 0.5, bins[0], bins[-1]],\n", " cmap='viridis',\n", ")\n", "axes[1].plot(plot_positions, true_reward_prob_sorted, color='crimson', linestyle='--', marker='x', label='true reward prob')\n", "axes[1].set_ylabel('reward probability')\n", "axes[1].set_xlabel('subject id (sorted by true reward probability)')\n", "axes[1].set_ylim(0.5, 1.0)\n", "axes[1].set_xticks(plot_positions)\n", "axes[1].set_xticklabels(subject_ids_sorted)\n", "axes[1].set_title('NUTS posterior density by subject (sorted)')\n", "axes[1].legend(loc='upper left')\n", "fig.colorbar(im, ax=axes[1], label='density')\n", "\n", "plt.show()\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "16", "metadata": {}, "source": [ "### Inference Method 2: Black-Box Stochastic Variational Inference\n", "\n", "Use NumPyro's `SVI` functionality to run variational inference with a `MultivariateNormal` variational posterior (that is, a Normal guide). SVI runs a black-box variational inference procedure where ELBO gradients are estimated using samples from the guide. This allows less constrained likelihood modeling than traditional mean-field variational Bayesian treatments, where likelihoods are often limited to conjugate-exponential forms.\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "17", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'seed': 0, 'enumerate': False, 'iter_steps': 1000, 'optim': None, 'optim_kwargs': {'learning_rate': 0.001}, 'elbo_kwargs': {'num_particles': 10, 'max_plate_nesting': 1}, 'svi_kwargs': {'progress_bar': True, 'stable_update': True}, 'sample_kwargs': {'num_samples': 100}}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_95807/2592818604.py:42: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " return Agent(\n", " 76%|███████▌ | 757/1000 [09:16<02:59, 1.35it/s, init loss: 7789.5132, avg. loss [701-750]: 7768.9961]" ] } ], "source": [ "# perform inference on parameters using black-box stochastic variational inference (SVI in numpyro)\n", "# opts_svi dictionary can be used to specify various parameters\n", "# for the SVI optimization algorithm\n", "measurements = {\n", " \"outcomes\": [outcomes[0] for outcomes in samples[\"outcomes\"]],\n", " \"multiactions\": samples[\"multiactions\"][0],\n", "}\n", "\n", "posterior = NumpyroGuide(NormalPosterior(num_params, num_agents, backend=\"numpyro\"))\n", "\n", "# perform inference using stochastic variational inference\n", "opts_svi = default_dict_numpyro_svi | {\"iter_steps\": 1_000}\n", "print(opts_svi)\n", "\n", "svi_samples, svi, results = run_svi(model, posterior, measurements, opts=opts_svi)\n" ] }, { "cell_type": "markdown", "id": "18", "metadata": {}, "source": [ "### Plot the variational free energy over time (negative ELBO)" ] }, { "cell_type": "code", "execution_count": 10, "id": "19", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(results.losses)\n" ] }, { "cell_type": "markdown", "id": "20", "metadata": {}, "source": [ "### Plot each ground truth parameter alongside their posterior means (mean taken over posterior samples from the guide)" ] }, { "cell_type": "code", "execution_count": 11, "id": "21", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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AHgBDUAuWrTI+k1qgFInc6s2bdo4gcoyZcrYNO8qVaowDMeHEKhEjho3bpwMHTpUxo4da1cyxowZI926dZP169dbCjYAAAAAAEBG7r//fost7Nu3z1krWLCglXL3798/3X2rVq3qwg6RmwJz9avDVckpqbJw80H5deUu+6i3c9trr70md911lwwePFiioqIsYFmkSBH55JNPcv17AwAAAAAA73Hw4EHLmExr69atFqQMCwuTm266ScaPHy8HDhywYTl33nmna3tF3iCj0kdNXhMvT8f+LfFHE521CmEhMqp3lETXq5Ar3zMpKUmWLVsmjz/+uLMWGBgonTt3loULF+bK9wQAAAAAAN4jLi7OSrr1mDt3rpV5awl3RESEndeYwgMPPCBt27aV4OBgt7eLPEag0keDlPd8tVzOzZ/cczTR1t8b2DhXgpV6hUP/gSlfvny6db2tjW8BAAAAAID/2bx5s3zxxReWPfnnn3+mO9egQQObceEJVLZs2dKlXSI/IFDpY7S8WzMpz1fkrWvaXlbPd4kKl6BAms0CAAAAAICcdebMGUlMTJTQ0FC7vWLFCnnmmWecykvNluzbt68dngAloOhR6WOWxB1KV+59vmClntf75TSduBUUFCR79+5Nt663w8PDc/z7AQAAAACA/CEhIUG+//57GThwoA3T1RkWHjpk99prr5XPP//c+k/OmjVLHnzwQYKU+AcyKn3MvoTEHL1fVugUriZNmsiMGTOkX79+tpaSkmK377333hz/fgAAAAAAwD3x8fESGxtrJd363l9nV3ho/0kPzazUICZwMQQqfUy50JAcvV9WDR06VG699VZp2rSpNGvWTMaMGSMnTpywKeAAAAAAAMA36IyKunXryuHDh521WrVqWeKSlnS3aNHC1f3BOxGo9DHNIkrZdG8dnHO+PpXalTI8LMTulxuuv/562b9/v4wcOdKa4TZs2FAmT578jwE7AAAAAADAOwKSixcvtqzJlStXypQpUyQgIMBav/Xs2VM2btxogUkNUEZGRto5ILsCUlNTzxfPwv8cO3ZMwsLC5OjRo1K8ePF057QxbFxcnPVUCAnJnQzFS5n6rdL+5Xr+qcitqd/5RX79ewEAAAAAwBucOnXKSrl//fVXiYmJsb6SHjq1u379+vb52bNnpUABcuBwafG1tPi/yQdpEFKDkTrdO+1gHc2k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5/V3j/a4/OKLL6wUSS+YAQBwqVq2bCmDBg2yVgnt2rWzC2Fly5aV999/3+2tAQC8ABmVF6A98LSP5IVUr149x76ffi0txdu0aZN06tQpx74u4EvPnfDwcPu4d+9em/rtobf1BTHgL88ffS6cO8jg7NmzNgnc8zzJDG2boPR3T40aNbK5ayD/0tdWWqmivyfS0tsZPVd0PSv3B3xVdp4/5woODpZGjRrZ7xkAGcvod48OpyKbEv6EQOUF6JU/PfKKDj/QHpVpgy+AN8rN5462StBf4jNmzHACk1oOoT35sjI5HPD2549mrGhzde0d1qRJE1ubOXOmDTnwBB8zQ6dKKn73wFcVLFjQniP6e8MzxECfJ3r73nvvzfD5ped1IIjHtGnTbB3wJ9l5/pxLS8dXr15tw94AZEx/x0yaNCndGr974I8o/c4h27dvtzd7+lF/GevnemgjaY/IyEgrr1O6/sgjj8iiRYtk69at9steG03XrFnTSvIAf5HV546Wveobx+eee05iYmLsha+WF2m/vQtN0QN8TZ06dazX8V133SVLliyR+fPn25tGbSvimfi9a9cue/7oeaXl3c8++6wFN/V3jz6H9PnTtm1b6yUG+KqhQ4fKhx9+KJ9//rmsXbvWLmzpVO/BgwfbeX0e6GApjwceeMAmrL766qvWauGpp56SpUuXZjowA/jz8+eZZ56RqVOnypYtW2T58uUycOBA2bZtm9x5550u/hRA3tP3M573Np6hoJ73PUqfN/r88RgyZIg9bx599FH73fPuu+/K+PHj5aGHHnLtZwBckYocceutt6bqH+e5x6xZs5z76O1PP/3UPj958mRq165dU8uWLZsaHBycWrVq1dS77rordc+ePS7+FED+f+6olJSU1BEjRqSWL18+tVChQqmdOnVKXb9+vUs/AeCegwcPpt54442pxYoVSy1evHjq4MGDUxMSEpzzcXFx6Z5P27dvT23btm1qqVKl7LlTs2bN1EceeST16NGjLv4UQN546623UqtUqZJasGDB1GbNmqUuWrTIOdeuXTv7fZTW+PHjUy+//HK7f926dVMnTpzowq4B73v+PPjgg8599bVajx49UpcvX+7SzgH36Ouv873P8Txf9KM+f859TMOGDe35U7169XTvgQB/EaD/cSdECgAAAAAAAAD/Rek3AAAAAAAAANcRqAQAAAAAAADgOgKVAAAAAAAAAFxHoBIAAAAAAACA6whUAgAAAAAAAHAdgUoAAAAAAAAAriNQCQAAAAAAAMB1BCoBAADg1wICAuSXX35xexsAAAB+j0AlAAAAsqV9+/by4IMPur0NAAAA+AgClQAAAMg1qampcvbsWbe3AQAAAC9AoBIAAABZdtttt8mcOXPkjTfesNJpPbZu3SqzZ8+2z3/77Tdp0qSJFCpUSObNm2f379evX7qvodmYmpXpkZKSIi+++KJERERI4cKF5YorrpAffvghwz088cQT0rx583+s6+OeeeYZ+/yPP/6QLl26SJkyZSQsLEzatWsny5cvz/BrevZ/5MgRZ23lypXOz+ehP1ObNm1sn5UrV5b7779fTpw4kYU/QQAAAJyLQCUAAACyTAOULVu2lLvuukvi4+Pt0ICdx/Dhw+Wll16StWvXSoMGDTL1NTVI+cUXX8jYsWPlr7/+koceekgGDhxoAdHzufnmm2XJkiWyefNmZ00f9+eff8pNN91ktxMSEuTWW2+1wOKiRYukVq1a0qNHD1vPLv1+0dHRcs0119j3GjdunH39e++9N9tfEwAAACIF3N4AAAAAvI9mJxYsWFCKFCki4eHh/zivGY2ayZhZp0+flhdeeEGmT59uAVBVvXp1CwC+//77lgl5rrp161r25DfffCMjRoywta+//tqyLGvWrGm3O3bsmO4xH3zwgZQoUcKCn7169ZLs0ICqBkk9/Tk1+Pnmm2/aHt977z0JCQnJ1tcFAADwd2RUAgAAIMc1bdo0S/fftGmTnDx50oKbxYoVcw7NsEybMXkuDRhqoNLTD/Pbb7+1NY+9e/da1qcGEzW4Wrx4cTl+/Lhs37492z/bqlWr5LPPPku3z27dulnpelxcXLa/LgAAgL8joxIAAAA5rmjRouluBwYGWiAxrTNnzjifa/BQTZw4US677LJ099M+lxm58cYb5bHHHrO+k6dOnZIdO3bI9ddf75zXsu+DBw9aqXrVqlXta2nGZlJS0nm/nu5Tpd1r2n169vqvf/3L+lKeq0qVKhnuFQAAABdGoBIAAADZoqXfycnJmbpv2bJlZc2aNenWdEhNcHCwfR4VFWVBRM10PF+Zd0YqVapk99eSbw1UakZmuXLlnPPz58+Xd9991/pSKg1kHjhw4IL7VNpzs2TJks4+02rcuLH8/fffTnk5AAAAcgal3wAAAMiWatWqyeLFi20atgb/tPQ5I9orcunSpVbKvXHjRhk1alS6wGVoaKgMGzbMBuh8/vnnVu6tWZJvvfWW3b4QLfX+7rvv5Pvvv09X9q205PvLL7+0oT66Vz2vk7ozosFHHQr01FNP2T41w/PVV19Ndx/N4FywYIENz9Egpt7v119/ZZgOAADAJSJQCQAAgGzRwGJQUJBlQ2om4oX6PmoPRx148+ijj8qVV15pU7cHDRqU7j7PPvus3UeH1dSpU8cma2ugMCIi4oL7uPbaa628W3tc9uvXL925jz/+WA4fPmxZkLfccouVa6fNuDyXZnhqn8t169bZtPKXX35ZnnvuuXT30XUdxrNhwwZp06aNNGrUSEaOHCkVK1a8yJ8YAAAALiQg9dxmQQAAAAAAAACQx8ioBAAAAAAAAOA6ApUAAAAAAAAAXEegEgAAAAAAAIDrCFQCAAAAAAAAcB2BSgAAAAAAAACuI1AJAAAAAAAAwHUEKgEAAAAAAAC4jkAlAAAAAAAAANcRqAQAAAAAAADgOgKVAAAAAAAAAFxHoBIAAAAAAACA6whUAgAAAAAAABC3/X9pa91opIEB+AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(16, 5))\n", "ground_truth_z = samples['z'][0]\n", "for i in range(num_params):\n", " plt.scatter(ground_truth_z[:, i], svi_samples[\"z\"].mean(0)[:, i], label=i)\n", "\n", "plt.plot((ground_truth_z.min(), ground_truth_z.max()), (ground_truth_z.min(), ground_truth_z.max()), \"k--\")\n", "plt.ylabel(\"posterior mean (SVI)\")\n", "plt.xlabel(\"true value\")\n", "plt.legend(title=\"parameter id\")\n" ] }, { "cell_type": "markdown", "id": "22", "metadata": {}, "source": [ "### Transform the latent parameter corresponding to the reward probability into probability space and investigate overlap between ground-truth and inferred parameter" ] }, { "cell_type": "code", "execution_count": 12, "id": "23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "reward-probability Pearson r: 0.905\n", "reward-probability bimodality score: 0.300\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inferred_reward_probabilities = 0.5 + 0.5 * nn.sigmoid(svi_samples[\"z\"].mean(0)[:, 0])\n", "ground_truth_reward_probabilities = 0.5 + 0.5 * nn.sigmoid(ground_truth_z[:, 0])\n", "\n", "plt.figure(figsize=(16, 5))\n", "plt.scatter(ground_truth_reward_probabilities, inferred_reward_probabilities, label=\"reward probability\")\n", "\n", "plt.plot((ground_truth_reward_probabilities.min(), ground_truth_reward_probabilities.max()), (ground_truth_reward_probabilities.min(), ground_truth_reward_probabilities.max()), \"k--\")\n", "plt.ylabel(\"posterior mean (SVI)\")\n", "plt.xlabel(\"true value\")\n", "plt.legend(title=\"parameter id\")\n", "\n", "corr = np.corrcoef(\n", " np.array(ground_truth_reward_probabilities),\n", " np.array(inferred_reward_probabilities),\n", ")[0, 1]\n", "\n", "bimodality_score = np.clip(\n", " np.mean((np.array(inferred_reward_probabilities) < 0.2) | (np.array(inferred_reward_probabilities) > 0.8))\n", " - np.mean((np.array(inferred_reward_probabilities) >= 0.35) & (np.array(inferred_reward_probabilities) <= 0.65)),\n", " 0.0,\n", " 1.0,\n", ")\n", "\n", "print(f\"reward-probability Pearson r: {corr:.3f}\")\n", "print(f\"reward-probability bimodality score: {bimodality_score:.3f}\")\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "24", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABkcAAAPzCAYAAAANttuiAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Qd45FXZ9/GTZDLpZTe72cZWpAosiIIgTUGxoSg8ijyKIqIiTRdFkLIPoAIKSBFEmmJFRVR8VRARERRFqtLLdrZvep1Mkve6zzrZJJsy5V9O+X6uK7BJJpP/TKae37nvu2hwcHBQAQAAAAAAAAAAeKI47gMAAAAAAAAAAACIEuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAAAAAAAAAADwCuEIAACAQ77//e+roqIitWLFitiO4ROf+IRasGDBiK/JMf3f//1f6L/7L3/5i/5d8v+Mww47TO2xxx4qCnK9y++XvwMKvx1VV1dnddqobl+5+PnPf66mTp2qOjo6cv7ZfC/PWLf/se6P2J5c33LdZfT19am5c+eqG264IdbjAgAAQHgIRwAAQKz+85//qGOPPVbNnz9flZeXqzlz5qi3v/3t6rrrrtPff+KJJ/SC1fnnnz/uebz88sv6NEuWLBmxyLV582Zlmq6uLn18wxcvMbaf/OQn6uqrr1YmMvnYEP99tr+/Xy1dulSdfvrpWQc8mNzatWv13+Kpp54K/XeVlpbq55Svfe1rqqenJ/TfBwAAgOglYvidAAAA2t///nf11re+Vc2bN0+dfPLJaubMmWr16tXqH//4h7rmmmv0wuIb3vAGteuuu6qf/vSn6qtf/eq4C9Xiox/9qLJhofWiiy4aqmgI2sc+9jF13HHHqbKyMmWS7u5ulUjk9tJT/q7PPPOM+vznP5/1zxxyyCH6dyWTyTyOsvBjk5BPfr8srMLs21eY99nf/va36sUXX1Sf/vSnY788N998sxoYGFCuhCPyt5BKmL333jv033fiiSeqc845R9/fP/nJT4b++wAAABAtwhEAABAb2ZFbV1en/vWvf6n6+voR39u4cePQv//3f/9XXXDBBTo0efOb37zd+UhwIgGKBCm+6uzsVFVVVaqkpER/BLkwXFlZWfD5SFVQmGRntwQixcXFof+uiUjFUpy/P2yyyJ5KpYy7jKYdz/e+9z31lre8RVfCxX15XAjq0ul0LAGPPC+94x3v0G3yCEcAAADcQ1stAAAQm1dffVW9/vWv3y4YEY2NjSPCkeEVIsM9/vjjeod25jS5yLTfeuGFF9SHPvQhVVtbqxoaGtSZZ565XRsVWZy75JJL1I477qirMmTn8le+8hXV29s74nSPPfaYOvLII9W0adNURUWFWrhw4dCimsyjmD59uv637H6W3z16toAci7QZk1kFskD6xje+Ud19991jzhV58MEH1ec+9zl9Xe2www4TzhyRvvlyXcuxz549W5166qmqpaVlxGkysznkOpUKDAlF5DJO5Ne//rX+GTlW+f+vfvWrMU83+nK2t7frqgu5HuWY5DJIOzVpo5Y5lt/97ndq5cqVQ9dTZm5CZq7CHXfcodutyQK0HGtbW9uYMxcy5HIdeOCBQ3+XG2+8cczrdfR1N/o8Jzq28WaO/PnPf1YHH3ywDrDk9v7+979fPf/882PeHl955RU9J0JOJ+Gh7F6XkGoyw/9+E11OIbdbafv0ute9Tl//Mlvh7LPP3u72LMdz2mmnqR//+MdDt5977rln3GOY6PY/1nWZzayWZcuW6fOU605uuxdffLEaHBycdEbHa6+9pn/3jBkz9HHL8d92223bnb/c1+Vnd955Z307njVrlvrgBz+oH5+yuc+OdX5yHR1xxBEjvi5/G6mUG00W/eU2LPf7iS7Pk08+qd71rnfpxylp1XX44YfrwHgyo2eOZK7rK664Qt10001Dj2lvetObdFCdr/vuu08ddNBB+nYrx7fLLrts9/ghofdJJ52k/yZyXS9evFjdfvvtI04z/PikdV3m+OQxTI5RyH0i87cYfpv55z//qd75znfq+408Jhx66KHqb3/723bH+vDDD+vzkmOQ8//ud7877uWSxyU5fVNTU97XDQAAAMxE5QgAAIiNtCB65JFHdHuiiQZmywKrLPbKgONvfetbIyojMoHJ8ccfn/dxSDAii4eXXnqpXmy89tprVXNzs/rBD34wdJpPfepTehFPFjDPOussvQgnp5cF7kwgIAt/sstYFlOlFYssEspC31133aW/L1//zne+o0455RT1gQ98QC/Air322kv//9lnnx3abS4/L4vBcpmPPvpo9ctf/lL/zHASjMh5XnjhhbpyZDyyyCoLu7JYK79bwiQ5DlkIlYXD4TvLt2zZohdgpTWXtCmTRczx/PGPf1THHHOM2n333fV1IT8ri5aZoGYin/3sZ9Wdd96pF97l5+VnZQFSrk+pADrvvPNUa2urWrNmjf6bi9GzGySskmqRL37xi3pRf6JWWvL3fPe7363/1h/5yEf09SrXhfxMrjvCszm24f70pz/p63TRokX6byEtk2SmjvytJQwaPSxbjlFu83KdyvdvueUWHR5dfvnlkx5bNpdTFuPf97736etb2j7ttttuevaPXJaXXnpJB16jgx05H/lbSegx3nDvyW7/+ZDZHbLYLRVj3/jGN3ToIKGOhJUSkoxnw4YN+mcy4Y4c0x/+8Ae9MC8hWqYdmpz/e9/7XnX//ffr27wEoxLcyUK/PC7JfWai++xYJJyS6prRlWwf/vCH9d9//fr1uoVghvwdpF2U/P7xyGODhGsSjEiIJfdZWdCXQExC0v3331/lSh475bJ+5jOf0deTXL9y+SSMyrXaRI5Prke5XuTvImGGhHzDgwm53cvxytflbyK38V/84hc6vJGgVq770dU3EjTJbVTOT65/OV55vJOvyfUh5LkhczuV+9m+++6rbyNSRSbn8ba3vU099NBDar/99tOnk9t65nYqfw+5Lcnpx3usk/OTME7aQMplBAAAgEMGAQAAYvLHP/5xsKSkRH8ccMABg2efffbgvffeO5hKpbY77fXXXy9bxfX3M/r7+wfnzJmjf3a4pUuX6tNu2rRpwt+fOd373ve+EV//3Oc+p7/+9NNP68+feuop/fmnPvWpEaf74he/qL/+5z//WX/+q1/9Sn/+r3/9a9zfKcckp5HfPdrhhx8+uOeeew729PQMfW1gYGDwwAMPHNxpp52Gvva9731Pn8dBBx00mE6nR5xH5nvLly/Xn2/cuHEwmUwOvuMd79DXV8a3v/1tfbrbbrtt6GuHHnqo/tqNN944mI299957cNasWYMtLS0j/qZyHvPnzx9x2tGXua6ubvDUU0+d8Pzf8573bHc+4oEHHtDnt2jRosGurq4xvyf/H325rrzyyqGv9fb26uNvbGwcur2Nvu4mOs/xjk1+Vk4r5zX8epLfs2XLlqGvyW2ruLh48IQTTtju9vjJT35yxHl+4AMfGGxoaJjwusrlcv7whz/Uv/uhhx4a8fPyd5ef/9vf/jb0NflcTvvss89O+vuzuf2PdV2Od719/OMf1187/fTTR9wf5LqX2/Tw+/fo29dJJ52kb5ubN28e8XuOO+44fdvL3G7k9i8/e9VVV213rPK7JrvPjuWWW27Rp//Pf/4z4usvvvii/vp111233eNNdXX1iNvy6N939NFH68v86quvDn1t7dq1gzU1NYOHHHLIhNevXI/Db6uZ61puU01NTUNf/81vfqO//tvf/nYwV9/61rcmfcy9+uqr9Wl+9KMfDX1NbpPy+C2Xv62tbcTx1dbW6sev4eS2Nfp2kvlbyWPkkUceOfR3E3KdLly4cPDtb3/7iOuyvLx8cOXKlUNfe+655/Tz0Fhvj+V6lq9ffvnlOV8vAAAAMBtttQAAQGykXYlUjsgu9qefflrvXJb2OVI5MbqVlOy6lt3Mw1tryY5paZ2TT0ut4aTF1HAyCF78/ve/H/H/JUuWjDidVJAIabEkMu3B/t//+3+qr68vp2OQli2y81l2/Mvu6M2bN+sPqaiQ6+Tll1/Wl3U4GWI/2XwRqVqQXeyyU152Ug//WdmFnjn2DNmhLdUfk1m3bp166qmn1Mc//nHdwmb431QqQSYj15VU38iO+XzJ75bWTdmQ4dayQz5DKinkc6l2kJ3+YclcT7I7XlqlZcgOe7muMret0VU1w8kOebkdSMVDEJdTdutLtYjM6cnczuRDdtiLBx54YMR5SmuibP+m+d7+JyJVBhmZShC5TctteyySLUil1VFHHaX/Pfwyyn1Jqn4y7dvkdFINk7nPDye/Kx/ytxJTpkwZ8XVp2yVDxH/2s58NfU0qV6SCSo51vNuynEaqtKSCTKqPMqT9l1TMSeVJNreN0eQxdfgxZioxpHIkV5m//W9+85txZ4PIbV0qZqSiKUMe08844wzV0dGhH8+Hk6q0TEuzych9TB4j5fqQ6z/z95aKOmk/9te//lUfl1yX9957r74u582bN/Tzcn+Q28ZYMteRnB8AAADcQjgCAABiJX3fpe2OtAN69NFH1bnnnqvDAWlf9dxzzw2dTmaByOKVtLDKzAORoEQWgyVQKMROO+004nPpQS9BQmb2hMyWkM9lPsNwstAni4Ly/cwisizoSQsrWXCVuRLS1mX0HIexSKsZWciVwfOyIDj8Q1q+jB5SL6QtzWQyxyb9/4eTRXNZaM18P0OCqYnaU40+39HX3Vi/aywShEnbIpl1Ie1upL1Nrouy2Vz+DJlVIW3KRi9Wi9EzRoI03vWfWZDNLOAON3zRdvjirNxHgricsogsbZBG384yp8vndlbo7X88cr8bHgiMdXlG27Rpk27TJPM0Rl/GTPCXuYwyV0T+NvI4ErTRc1EygYS0msoEnTJ7RY5Fvj4euTwyc2a825As+q9evTrn4yvkdjaaHL+0iZP2g9KeSlqESSu24UGJ3Bfk8WJ4SJu5DJnv53v/ltt0JjAd/TeXtnRyG5RQTK5Lae+Vy+NW5u+Yb1gGAAAAczFzBAAAGEEW5CUokQ9Z/JRFTNnhngkGhMzAkF3p8iHVJrLrO9M7PkjjLYJNtjgm35dd4DK35Le//a3eoSxzHq688kr9tYnmUmQWEWV+xng7mEeHM9lWTeQijPMciwRaslNdwi7ZFf/Nb35Tz9SQoEzmBsRxrOP9fWW3eZTGqwYaa7E9H3Jb23PPPdVVV1015vclsMrnes7m9h/FdZy5L8njhSyWj2WimSGFkiA3EzKMnr8jIYIEwPLYJtVcEiBI5ZXMVYlakLczuY1IdYZUHUk1msyGkQoZqUaS+/dkFW7jnWeuf3N5HJHqnLHI7S+foC4TFkngBwAAALcQjgAAAOO88Y1vHGpJNJwEIjU1NbpiRNqxyKJVoS21MruOh+9SlioOWWzLDJ6WwfHyuZwus8s5M/RZdqjL94eTQdDy8bWvfU0fqxzjHXfcoXdVj7c4nNkdL5dLhkAHJXNsMoR9+A58aUu0fPnyvH9X5nwzO7aHk9+VDWkLJEPl5UN2z8sAa7nOMuFIkDu1pX2XVGgMr6qQ4eMi83fO7JyXv+lwo3e053Jsw6//0V544QW94Dq60iPsyymVUdLGTtoNhbEbfqLbfy7XsZD7nVQUZapFxro8o0lYKo8TErhMdvuW60Lau0kbsPGGkOd6HUm7MiH3LwmhhpPHGamUkuBA2oNJGCgtnqSd3Xjk8lRWVo57G5JKjNGBVhzkOOQ2JR8SvH39619X5513ng5M5O8g94V///vf+m86vHpELoMY/Tiay99C/o5CWgVO9DeX61JCl1wet+TvKIY/9gMAAMANtNUCAACxkUWzsXYpZ+YwjG5zIotaH/jAB/T3v/Od7+gFYGndU6jrr79+xOfXXXed/n9mkf7d7363/v/VV1894nSZnffvec979P8lrBl9eTK7mDM7lmWRc6zF4cbGRnXYYYep7373u9uFQkLaweRDFgqlKufaa68dcWy33nqrbjOTOfZcSbAhl+3222/X55Nx3333jWiHNhZZtB7+M5nLLy2hhu/slr/v6NPlK51O6+t2eDgkn8ti6b777jtigVV2wA8/VmnPNFq2xzb8ehr+N5eWYrKjPnPbCko2l1OqdqSt080337zdz0vLodFtvrKVze1fFsClimD4dSxuuOGGcc/329/+9tC/5fzlcwkyZBF+LHL+0t5LKsvkep7oviSnk9Zmw3/H8N810X12PHI9y33uscceG/P7Uj0ilTS33Xab/t0TtdTKXB6pkJN5HsNbiUk4K+HTQQcdpEOBOMnMpNFG/+3ltr5+/foRM1fk9iqPt1LVIW3ZJpMJ/Ub/LeQ6l/vvFVdcoeeXjPc3l+tSKvN+/etfq1WrVg19//nnn9eVTmORWT0SyhxwwAGTHh8AAADsQuUIAACIjQxBll76EnjIbmtZyP373/+uF89kV/hYg8GlVc4PfvADvZAlO9KD2HUvO4OlKkVa28iA+B/96Ed6sO/ixYv19+X/0p5HFsllUU4W8WQ+iix4y67vt771rfp08rks8srlkYU6mZ0iC9CycJlZBJeAR4Zby2WU3fAypHuPPfbQHxLSyEKn7DaXgelS6SELoHJMa9as0bv9cyWL4tLGR+ZAyOWTyyk7pOU4pYWZXJ/5uvTSS3W4Iscs7ZNkgVQWOl//+tePuUCZIdeLtBuSuTJy3crCqAzX/te//qVbMA1f8JTracmSJfpY5XQyuDofErxI2y5ZXJbrXc5XhjjL3zRTMSDHLRUPcn3JZZG/jVQ8yALuaLkcm7T6kaBNFldPOukkHUDI9STtlGTWSpCyuZwf+9jHdDsnGfwuAaXMipAQSHbwy9flvpWp3spFNrd/ucz/8z//oy+/LDjL6aRN3ug5Jxnl5eW6RZPc//bff3/1hz/8Qbdt+spXvjJhO73LLrtMXzb5GbkvyX1O/qYyiF1ua5nF/BNOOEE/nsjfUe7T0upNwiE5jVQ0Sfg60X12vGOWMEPO4+KLL97u+xJOSfs8+ZDzyqZ666tf/aoOHuW+JsclM1Ik9JLgQeb3hEVuR1LtItf/97///XFPJ5dTAi95PJAATP6ecluQ+7kcs/j0pz+tj/kTn/iEDhzkMV7asMkMFgmepdpnMnJ7kTlPN954oz69PP7L31iOUWaLyP1M7sfy3CHzkyQElNuB3Aal1ZuQx0K5TcnfWq7LTEAjPyeVLaPJ9S73kUy7NAAAADhkEAAAICZ/+MMfBj/5yU8O7rrrroPV1dWDyWRy8HWve93g6aefPrhhw4YxfyadTg/OmjVLtnQP/v73vx/zNEuXLtXf37Rp04S/P3O65557bvDYY48drKmpGZwyZcrgaaedNtjd3T3itH19fYMXXXTR4MKFCwdLS0sH586dO3juuecO9vT0DJ3miSeeGPzIRz4yOG/evMGysrLBxsbGwfe+972Djz322Ijz+vvf/z6477776ssrv1+OI+PVV18dPOGEEwZnzpypf8+cOXP0edx5551Dp/ne976nf+5f//rXdpcp873ly5eP+Pq3v/1tfT3Lec6YMWPwlFNOGWxubh5xmkMPPXTw9a9//WAufvnLXw7utttu+vLuvvvug3fdddfgxz/+8cH58+ePON3wy9nb2zv4pS99aXDx4sX6Oq+qqtL/vuGGG0b8TEdHx+Dxxx8/WF9fr38+c54PPPCA/vwXv/jFdseT+Z78f/Tlkr/DAQccMFheXq7PS66T0eT6P+KII/TlkevpK1/5yuB999233XmOd2xyvcvn8ncY7k9/+tPgW97ylsGKiorB2trawaOOOkrf7rK53Y73Nx0tl8uZSqUGL7/8cn16uaxyu5fbpNzGW1tbh04nv/fUU08dzEa2t3+5fMccc8xgZWWl/r2f+cxnBp955pntrje5HcltQ/4m73jHO/Tp5W8i11N/f/+I8xx9PxLyGCLHLvdVud3Lferwww8fvOmmm0acrqura/C8884bum/L6eTxQH5vNvfZscj9oKioaHDVqlVjfl9uC3I+n/rUp8b8/li/Q67fI488Uj9WynXx1re+VR/XZLf/0ffHzG30m9/85qS/9z//+Y/+2jnnnDPh5b3//vsH3//+9w/Onj1bX0fyf7ktvPTSS9v9TU488cTBadOm6dPtueee291XJjo+8Zvf/EY/1iQSie1uM08++eTgBz/4wcGGhgZ9G5TL/aEPfUgf33APPvjg0N9z0aJFgzfeeOPQ/W+4lpYWfZpbbrllwssPAAAAOxXJf+IOaAAAAOIgu/ZlF7G0XGHYLmwnbdmkTdNYraRcJlUvUklxySWXqPPPP1+ZckxSbSJVInJctpLqj7PPPlu9+uqrasaMGco3UtEilTly+XMZEA8AAAA7MHMEAAAAgLUyM3pMCjhltoW0mpJWeRO1mDOdtKQ644wzvAxG+vr69FwpCdwIRgAAANzEzBEAAAAAVpKZFTIzROaXZGb/mEIGrU82bN10v/jFL5SvZEbP8KHtAAAAcA/hCAAAAAArScsnCUZuvfVWtcsuu8R9OAAAAAAsEuvMkb/+9a/qm9/8pnr88cd1OfyvfvUrdfTRR0/4M3/5y1/UkiVL1LPPPqvmzp2ry5w/8YlPRHbMAAAAAAAAAADAbrHOHOns7FSLFy/WvXizsXz5cvWe97xHl8w/9dRT6vOf/7z61Kc+pe69997QjxUAAAAAAAAAALgh1sqR4aQcfrLKkS9/+cvqd7/7nXrmmWeGvnbccceplpYWdc8990R0pAAAAAAAAAAAwGZWzRx55JFH1BFHHDHia0ceeaSuIBlPb2+v/sgYGBhQTU1NqqGhQQcyAAAAAAAAAADzyT7/9vZ2NXv2bFVcHGtTJDjAqnBk/fr1asaMGSO+Jp+3tbWp7u5uVVFRsd3PXHrppeqiiy6K8CgBAAAAAAAAAGFZvXq12mGHHeI+DFjOqnAkH+eee64e4J7R2tqq5s2bp+9AtbW1sR4bAAAAAAAAACA7skl+7ty5qqamJu5DgQOsCkdmzpypNmzYMOJr8rmEHGNVjYiysjL9MZr8DOEIAAAAAAAAANiFcQkIglWN2Q444AB1//33j/jafffdp78OAAAAAAAAAABgfDjS0dGhnnrqKf0hli9frv+9atWqoZZYJ5xwwtDpP/vZz6ply5aps88+W73wwgvqhhtuUD//+c/VF77whdguAwAAAAAAAAAAsEus4chjjz2m9tlnH/0hZDaI/PvCCy/Un69bt24oKBELFy5Uv/vd73S1yOLFi9WVV16pbrnlFnXkkUfGdhkAAAAAAAAAAIBdigYHBweVZ0N76urq9GD28WaOyFWSTqdVf39/5McHjKWkpEQlEgn6KQIAAAAAAMBb2aztAk4OZI9CKpXSFStdXV1xHwowQmVlpZo1a5ZKJpNxHwoAAAAAAAAAWI1wZJiBgQE990R26c+ePVsvQrNTH3GTSiYJ7TZt2qRvnzvttJMqLo61Ix4AAAAAAAAAWI1wZBhZgJaAZO7cuXqXPmCKiooKVVpaqlauXKlvp+Xl5XEfEgAAAAAAAABYi+3nY2BXPkzE7RIAAAAAAAAAgsFqKwAAAAAAAAAA8ArhCAAAAAAAAAAA8ArhSEDSG7ao9Gsbsjvtaxv06RGv73//+6q+vj6W3/2Xv/xFFRUVqZaWllh+PwAAAAAAAAD4jHAkABJ0rP3gmeq1o8+YNCCR78vp5PRBBiSHHXaY+vznPx/Y+QEAAAAAAAAA4CrCkSCk02ow1afSK9ZOGJBkghE5nZxefi5Kg4ODKh3h70ylUsoEUR5H1NcxAAAAAAAAACB3hCMBSMyZoeb8+lqVWDB73IBkeDAip9OnnzMjkN//iU98Qj344IPqmmuu0a2a5GPFihVDrZv+8Ic/qH333VeVlZWphx9+WJ/+6KOPHnEeUnUi1ScZAwMD6tJLL1ULFy5UFRUVavHixerOO++c8DgWLFigLrnkEnXCCSeo2tpa9elPf1p/XX7nwQcfrM9n7ty56owzzlCdnZ36e9/+9rfVHnvsMXQev/71r/Ux33jjjUNfO+KII9T555+v//3qq6+q97///WrGjBmqurpavelNb1J/+tOfsjoOaaM1b948VVlZqT7wgQ+oLVsmrtyR61CO5Y477lAHHnigKi8v18cq13XGeNdxb2+vvpyNjY365w466CD1r3/9a7vf8be//U3ttdde+jRvfvOb1TPPPDPhMQEAAAAAAAAACkc4EkFAEmYwIiQUOeCAA9TJJ5+s1q1bpz8khMg455xz1GWXXaaef/55vRCfDQlGfvCDH+iQ4tlnn1Vf+MIX1Ec/+tERwcBYrrjiCh2kPPnkk+qCCy7QYcY73/lOdcwxx6h///vf6mc/+5kOD0477TR9+kMPPVQ999xzatOmTfpzOf9p06bp0EH09fWpRx55ZCi46ejoUO9+97vV/fffr3+HnPdRRx2lVq1aNeFx/POf/1QnnXSS/r1PPfWUeutb36q++tWvZnVdfOlLX1JnnXWWPi+5nuX3jQ5WRl/HZ599tvrlL3+pbr/9dvXEE0+o173uderII49UTU1N2533lVdeqYOT6dOn6/OWywwAAAAAAAAACA/hSMgBSc+j/wk1GBF1dXUqmUzqioiZM2fqj5KSkqHvX3zxxertb3+72nHHHdXUqVMnPT+pevj617+ubrvtNr2gv2jRIl1tIuHId7/73Ql/9m1ve5sOEuR3yYeELP/7v/+rK1N22mknXYFx7bXX6uClp6dHV2LIMWVCFwlF5Ocznz/66KM6LJCfExJ4fOYzn9E/J+cnFSLye+6+++4Jj0MCJAlSJLTYeeeddVWHXLZsSKAi4c5uu+2mvvOd7+jr+9Zbbx1xmuHXsVSPyOm++c1vqne9611q9913VzfffLOunBn9c0uXLtU/t+eee+ogZcOGDepXv/pVVscFAAAAAAAAAMgP4UjYAcl7PhdqMJKNN77xjTmd/pVXXlFdXV160V5aV2U+JNCQSpBcftfTTz+t21kNPx8JJaRt1/Lly3VLqkMOOUSHIi0tLbqK5HOf+5wOaF544QUdkkjrLAl+MpUjX/ziF3VQUV9fr89PqjVGV46MPg45zf777z/ia1IFko3hp0skEvq85fzG+31yHUmg85a3vGXoa6WlpWq//fbb7ueGn7eERLvssst2pwEAAAAAAAAABCsR8PnhvwHJjOvP18FIhnweRzAiqqqqRnxeXFysB4cPN7yVkwQQ4ne/+52aM2fOiNNJVUQuv0vOSyo9pFJjNJn/IaRl1k033aQeeughtc8+++g5IZnARMIRab2VIcHIfffdp9tmSasqqcY49thjtxu6Pvo4whb17wMAAAAAAAAA5I/KkRDIjJENp46cZyGfjx7SHiRpq9Xf35/VaWW2hcwlGU7mcGRIGygJQaQaQwKI4R/DZ5lk4w1veIOuBhl9PvIhxzx87sgvfvGLodki8n8ZtC4Dy4cPipfPpcWXDFSXVlTSQkwGp09GKk1k7shw//jHP7K6DMNPl06n1eOPP67PbzzSWksumxzr8PBJ5orIdTveeTc3N6uXXnppwvMGAAAAAAAAABSOcCRg2w1f/90NYw5pD9qCBQv04r8EBZs3b9Ztq8Yj8zgee+wx3Sbr5Zdf1nMvnnnmmaHv19TU6AoNGcIuczCkTZQMFb/uuuv057n48pe/rP7+978PDUKX3/eb3/xmaCC7kAHmU6ZMUT/5yU9GhCO//vWvdXut4e2pZM7IXXfdpc9LWnYdf/zxE17WDKlcueeee3TFiRzDt7/9bf15Nq6//no9B0TafJ166qk6xPjkJz85YRXJKaecooety++Q4Ofkk0/WrcpkKPzoWSUyXF6ufwl9ZBj90UcfndVxAQAAAAAAAADyQzgSZjDy62tV+X57bjekPYyARMIMGcIulQlSGTJ6BsdwMvPjggsu0MPJZZ5He3u7OuGEE0acRgady2lkoLpUMsgwc2mztXDhwpyOS4IPaY0lFREHH3ywbpt14YUXqtmzZw+dRuaOyPfk/wcddNDQz0l7LZnlMbxl1VVXXaWDFBnQftRRR+nLItUpk3nzm9+sh6LLYHYZ6v7HP/5RnX/++Vldhssuu0x/yM89/PDDevi7hBiT/YwMcf/Yxz6mj0/muNx777362Eef7swzz1T77ruvWr9+vfrtb387VFEDAAAAAAAAAAhH0eDo4ROOa2trU3V1daq1tVUvvg/X09Ojh4RLAFBeXl5wMDJ8xshk34d5pApHbgtPPvmk2nvvveM+nIJunwAAAAAAAIDLa7tArqgcCUA2wYd8HkUFCQAAAAAAAAAAmBjhSBASCVWULJ20ImR4QCKnl58DAAAAAAAAAADRYnU+AIkZDWr2XdcolU5P2iorE5BIMCI/B3PJkHvPus4BAAAAAAAAgBcIRwKSS9DBrBEAAAAAAAAAAOJDWy0AAAAAAAAAAOAVwhEAAAAAAAAAAOAVwhEAAAAAAAAAAOAVwhEAAAAAAAAAAOAVwhEAAAAAAAAAAOCVRNwHAD/93//9n/r1r3+tnnrqqbgPBQAAAAAAAB4bHBxUz65tU/0Dg4Gc34JpVaquojSQ8wIQHsIRZOUvf/mLeutb36qam5tVfX19wef3xS9+UZ1++umBHBsAAAAAAACQr/VtPerVTR2BnV9vekDtt3BqYOcHIBy01QrRSy+9pP7whz+ol19+Oe5DMSqJT6fTqrq6WjU0NBR0Xn19fYEdFwAAAAAAAPz08obgghGxrrVbtfewbgWYjnAkBE1NTeqd73yn2mWXXdS73/1utfPOO+vPpeoiLIcddpg67bTT9EddXZ2aNm2auuCCC3QYkSG//4QTTlBTpkxRlZWV6l3veteI4GblypXqqKOO0t+vqqpSr3/969Xvf/97tWLFCl01IuR7RUVF6hOf+IT+fGBgQF166aVq4cKFqqKiQi1evFjdeeedIypO5PQSEu27776qrKxMPfzww7qt1t577z10Ojmfiy++WO2www76NPK9e+65Z+j7cgxyPj/72c/UoYceqsrLy9WPf/zjMa8LOd13v/td9d73vldfzt1220098sgj6pVXXtHXk1y2Aw88UL366qsjfu43v/mNesMb3qDPe9GiReqiiy7SQU7GVVddpfbcc0/983PnzlWf+9znVEfHtifP73//+7qq5t5779W/UwIg+buvW7cu778rAAAAAAAAwrOpvVc1d6UCP99XNgYbuAAIHuFICI4//nj1pz/9acTX5POPfOQjof7e22+/XSUSCfXoo4+qa665Ri/m33LLLUPfl0DjscceU3fffbcOCyQ4kfAmU4Fx6qmnqt7eXvXXv/5V/ec//1GXX365XuCXIOCXv/ylPs2LL76oF/vl/IUEIz/4wQ/UjTfeqJ599ln1hS98QX30ox9VDz744IhjO+ecc9Rll12mnn/+ebXXXnttd+xyfldeeaW64oor1L///W915JFHqve9733bVd3I+Zx55pn6fOQ047nkkkt0ECQzTXbddVf9N/nMZz6jzj33XH0dyGWXICnjoYce0qeX837uued0uCJhx9e+9rWh0xQXF6trr71WX065rv/85z+rs88+e8Tv7erq0pfhhz/8ob4eV61apVuIAQAAAAAAwDwvb2gP5XxXN3errtS2TbcAzFM0OLy0wANtbW26sqK1tVXV1taO+F5PT49avny5roKQ6oF8W2lJxchE399pp51U0KQiYuPGjXrhXionMkGCBCGy2C8hg1Sw/O1vf9NVE2LLli06+JCF/v/5n//RocUxxxyjli5dmtXMEQlSpk6dqoOfAw44YOi0n/rUp3RI8JOf/GTo52T4+vvf//5xB7LPmTNHhzNf+cpXhk6z3377qTe96U3q+uuv15Uj8ne5+uqrdYAxEbn8559/vg5IxD/+8Q99fLfeeqv65Cc/qb92xx13qBNPPFF1d3frz4844gh1+OGH6/Ak40c/+pEOP9auXTvm75EKmc9+9rNq8+bN+nMJU+Q8pUJlxx131F+74YYbdEXM+vXrVaGCuH0CAAAAAABgq6bOlHro5U2hnf+Chiq1eG7hs3uR3doukCsGsgdsdKum0WThPIxwRLz5zW8eCkaEBAJSjdHf368rLaSqZP/99x/6vsz8kCBHvifOOOMMdcopp6g//vGPOiyQoGSsKo/hl0VCkLe//e0jvp5KpdQ+++wz4mtvfOMbJ3xQkwDiLW95y4ivy+dPP/101ucz3PDjnjFjhv6/tMQa/jUJG+R3ywOp/B4JjoZXisj1JqeRyyjtuSQEkkqZF154Qf+ctNwa/n0h/88EI2LWrFk6tAIAAAAAAIBZXlwfTtVIxqqmLrXL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uMB0rn733Xcyc+ZM0/F/0kknyY4dO8z6b775xgQJTjvtNLPPn376yXTwqgkTJkjdunVN5722X6ey0I7rM844w3RU62tqzQPtLD+Y33//3XQMF3bjjTeazvbffvtN5s2bJ0899ZTpvFfr16837dbAjgZ8Xn31VXnrrbfk0Ucf9dnHu+++a4YB0g7lMWPGmKHH1NixY80xeeb19QcOHGjO6X///Sevvfaa6Wh+7LHHzHrNRtD3TPc1bdo0s6+yDiukbYiMjDRBI+2I1g7/N99806zzXBOedih9L/79918ZPHhwsX1pgODzzz/31mjRY9B9lna8ZaHBEg2caUBL60hMmjRJNm/eLBdeeOEBn6cBDH1P9Fg0g0AzFrTz/6+//jKd5noMeg2eeuqpJrCknesaXPIES3bu3GmOPSsrSxYtWmSWaWe9vqeeDCin0ykvvvii2b8e288//yx33333QduhHf9r166VX375xQRjXnnllRIDDUXpZ8DzGf3oo4/M50CDJYUVPcf+XIulXQcqLy9PRowYYfahwUYNbJWUSXXXXXfJs88+a64ZDeJoEEif6y9tQ/fu3eXqq6/2fsbr1atnrkn9fBSm8/reaeDEQ39X6OcGAAAACFkWAAAAytXMmTM1CmKtWrWqxPU9e/a0br31Vp9lZ599tjVo0CDvfP369a1TTz3VZ5v+/ftbffv29dnm+eefN49///13KykpycrOzvZ5TuPGja3XXnvNPO7evbt1ySWXlNruwvs7ED22L774wjzWfVetWtXKysryrn/11VfNNrNnzy51H+3bt7ceeeQRn2Vt27a1Hn744RK3v++++6zmzZtbbrfbu2z06NFWpUqVLJfL5T2vHTt2PGB7PU466STr8ccf91n2/vvvW7Vr1zaPv//+eysyMtJav369d/13331X4r4K0za0bNnSp5333HOPWeah7+H111/vnb/55putXr16lbrPX375xbzuzp07i71W0eNduXJlsXOvz9Nluh81YsQI65RTTvF53tq1a802ixcvLrENY8eONevnzJnjXbZ69WorIiLC5xx5zu3QoUPN4xdffNFq3bq1efzll19a3bp1M9e6XiOqd+/e5r0tzaeffmqurwO1Q9usy6ZPn+5dtnDhQrPsQNezft6qVKliZWZmepdpuw52TZX1WjzYdVDUP//8Y9qckZHh876PHz/eu8327dutuLg46+OPP/aej+TkZO/6YcOGmc9W4WPU832g3z36/un7OG3aNDOfm5trVatWzXrnnXd8tnvhhResBg0alNp+AAAAINiROQIAAFDONNtDMzZ0eCC9k/6NN94wd837S+/yLjqvd7mXRO8+1ywOHcJLsy08kw6bs3z5cu9QOdquQNL2eIb8Ka3dJdHsgcLPUbfccou5+16H7xk2bJjJRCj8OrrfwsN96XZ6zOvWrfMu69y5c5naredLs2QKnyvPHfWamaCvp1kbderU8eu4lA59VLid+jzNpND6GEpfR7MUsrOzzRBO48aNM3fvH4qyHm/RY9cMi8LH3qJFC7POc62URLMn9L320OwePaZmzZr57EuzQTz76dmzp8nM2bp1q1muw1TppJkamv0wdepUM+/x448/mmtUh+nS4aZ0uK/t27d7h90qqR36XmmGRuFzocdTllob+lktXLdH3yu9pjQLpbRzXNZr8WDXgWZaaRaIZm/oseq5UjpMWGGFr7sqVapI8+bNS/09cCj0Gj/99NPl7bff9g69pxlc+rurMB2yrPD7AAAAAISaSLsbAAAAUNFFRESY4a+04/eHH36Ql156Se6//34zPJPWQ9Chg4oOsXUow+QUph2zWvugcF0JD08nsXZuBgutwVA0YKT1UrSmgw7/peftiSeeMMMJ3XzzzWXer9aqKOv50uGTdOisoooGbQJNO8S1VsUXX3xhOvr1vT///PMPaV9Fj1evLVX4+ip6bemxaxt0aKqiCtcDKUqvn8Kd/bofvda1k19/FuYZDk0DhNqhr4ERnXTYMq2voa+tw0Rp23r06GG21WGldIi266+/3mynz9OaJFdeeaUJInmCGEXbUd7Kek35Q+sP6bWuk9ZH0eGyNCii83YUfdfPngainn/+eTOkVv/+/X2CRkqH59N2AgAAAKGK4AgAAMARoJ23eje5Tg899JDUr1/fdIYPGTLEdDAWrumhd5JrkWVP4W2Pv//+u9h8y5YtS3w9rS+yadMmcwd94aLjhend9lpjoaTaFko76j13tZeVtkcLS2sWhCeoULTdJdF6F5pRUJRma2hRbJ2GDh1qsm40OKKvo7U3tNPf0zGuNSD0jnutlXIgUVFRxY5Lz5fW8ChcU6HocWn2gL5PnoBBWY5LaRCsMH1e06ZNvQEEfY8GDRpkOqH1nF900UUHDFzp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nVS0z29RZ599tiQlJckrr7xyRF4PAAAA8EekX1sDAADA67HHHpPk5GT5559/JCUlxWfdli1bvI8vueQSefDBB+Xvv/82w8wUpYETDaBoICVcZWZmSkJCgkRERJgpkJ3B8fHxEooiIyPNhMMTExMjwWTs2LFSr169En8XlBe32y25ublypGmgWDPr3nvvPROUORLDxAEAAABlReYIAADAIVq+fLm0bt26WGBE1ahRwyc4UjhDpLCZM2eaO9s92/jDM/zWokWL5MILLzR3aFetWlVuvfVWyc7O9tk2Pz9fRowYIY0bNzadxVqH4b777pOcnByf7bTuRJ8+faRatWoSFxcnDRs2lCuuuMKs01oC1atXN489HZ06aTs8tC3aGVqlShUzzJhm1kycOLHE2gRTpkyRG264wZyrunXrHrDmiN55ruda216nTh258cYbZdeuXT7b9OrVS9q0aWPO6fHHH2+CInqMB6J3/OtztK3684svvii1c3nUqFGmDbptzZo15dprr5WdO3f6bKfn9YwzzpA//vhDunbtarZt1KiR6RwuLC8vz5zDpk2bmm30fTv22GNl8uTJpdYc0ccaRHr33Xe9515rafzyyy/mcUlt12tO1/31119SlkCSHpO2Ra+lgQMH+hzfoEGDzHWhbS/qlFNOkebNmx9w/zp83HnnnSe1atUyx6zv+UUXXSS7d+826/U917bqNVBU0evMQ4eeO9i1X1LNEb12brvtNklLSzPXVJMmTeSpp54y73NhOq9ZYG3btjVt1uv/1FNP9dZnKe09Odg1d+KJJxYLFBzos+ehr3XHHXd4263n/JlnnhHLsoqdr5tuukk+/PBD7+dmzJgxAfn8qgULFphj0Hbq+/joo48WO3ceOsyg1lbRjBkAAAAgmHArGgAAwCHSoZ+003n+/PmmY7002snZo0cP+eSTT+T555/3yYzwBEwuvvjiQ26Hdg5rB/ATTzxhslNefPFF06lduENeh/vSDlzt+NTO1WnTppntFy5c6O1U12wX7eTWDtR7773XBH20w3rChAlmvS5/9dVX5frrr5dzzjlHzj33XLO8Xbt23g7TY445xtRd0edrJogec79+/eTzzz83zylMAyO6z4ceesh0+pZGO2+1M7d3797mtTWYpO3QjJ0///xToqKivNtu375d+vbtazrddZgyDWKU5ocffjCd9a1a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1s0nq8PTlpKCOQei1+9JJ51kggeec6znRs950fdE3ws9dq1ZU5YAlRb71mO74IILzHWjAYj333/fDEGmQQgPzZB48sknzU/NwNJAyZIlSw752i+J1nfRovJnnHGGGeZLz2lmZqbMmzfPvAdar0SDNPq50FoqGpjT91pfQ7NSfv/9d7PO814d7D0pSgOiWrOlcB2Osnz2zjzzTPO6999/v2mjHqMOT6bDlN12223meQcTiM+vDkem752eDw2Q6e8w/d2iGSUl1c3RgKPW4enYseNB2wcAAAAcURYAAAAOyXfffWddccUVVosWLaxKlSpZ0dHRVpMmTaybb77Z2rx5c4nPyc/Pt2rXrq23iFvffvttidsMGzbMrN+6desBX9+z3X///Wedf/75VmJiolW5cmXrpptusrKysny2zcvLs4YPH241bNjQioqKstLS0qyhQ4da2dnZ3m1mzZplDRgwwKpXr54VExNj1ahRwzrjjDOsGTNm+Oxr6tSpVufOnc3x6utrOzyWL19uDRw40KpVq5Z5ndTUVLOPzz77zLvN2LFjzfP++eefYsfkWbdy5Uqf5S+//LI5z7rPmjVrWtdff721c+dOn2169uxptW7d2vLH559/brVs2dIcb6tWrawJEyZYgwYNsurXr19s29dff90cd1xcnDnXbdu2te6++25rw4YN3m30eaeffnqx52rbdPJ49NFHra5du1opKSlmf3psjz32mJWbm1vs/S1s0aJF1vHHH2+eo+u0rYXl5OSYayA5ObnYNVAazzmfMmWKdc0115jn6/V8ySWXWNu3by/xOZ988ol5jm5fFitWrDCflcaNG1uxsbFWlSpVrBNOOMH68ccffbbbu3evdeWVV5r26zm+8MILrS1bthS7zvy59vU9KXqeMjIyzPWvn1e9jqtVq2b16NHDeuaZZ3zeA/28Pv300+b90e2qV69u9e3b15o5c2aZ35Oi9HOm2/3+++9+f/a03bfffrtVp04d81lo2rSpaZ/b7fbZTvd/4403lvj6h/v5Vf/++6+5nvW91G1GjBhhvfXWW8U+uy6Xy/y+e+CBBw54TgAAAAA7OPR/RzYcAwAAgEDQ+hSaUaFD2lDsGEozMjR7QbMMdOix8qLZCpp1pJkdxx13nAQzHcZKi4xr0ftgoRk6+j5pBkZF9uWXX5pMnuXLl5uh7AAAAIBgQs0R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q2XhwoXy8ssvmwUIdGGhb8WFTZs2mQuYGzZsaH7nAIgc/joAELLnn39eHnnkEbn99ttNOTat2X3rrbfKo48+6vTQEIW2b99uAiF79+6Vxo0by1lnnSULFiwwtwF/WrIkPz/f/D7Rye5evXrJrFmzjmvSDmgzUzV48OBKj+vkN422EYiW09q6dSsXcyAk2jtCJ731e4xOQv385z83FwelpqY6PTREGf176Prrr5edO3eaAL322NPAyIUXXuj00BCF+vXrZ7Je9ffL448/bjJf9WIgrdoB+Pv+++/lvPPOq3QhmdILPSZPnuzgyID447L0shgAAAAAAAAAAIAEQc8RAAAAAAAAAACQUAiOAAAAAAAAAACAhEJwBAAAAAAAAAAAJBSCIwAAAAAAAAAAIKEQHAEAAAAAAAAAAAmF4AgAAAAAAAAAAEgoBEcAAAAAAAAAAEBCITgCAAAAAAAAAAASCsERAACAGNC6dWuZMGHCCa9zMrhcLpk2bVrQ5zdv3mzWWbJkSZXbWbNmjWRnZ8vhw4clVlS374MHD5bRo0ef0jEhuj4fkToPvvzyS3O+HThwIOg6kydPlvr163vvjxs3Tnr16uW9f8MNN8iVV155QuMoKSkxx/L7778/oe0AAAAATiM4AgAAECe+++47+fWvf33KJ5N37twpw4YNO+GfN2bMGLnrrrukbt264mRAI9qFMkmOxDR8+HBZu3Zt0Oefe+45E0A5kaBNWlqa3H///fLAAw+c0FgBAAAApxEcAQAAiBONGzeW2rVrn/Kfq9keNWrUOKFtbN26VWbOnGmubD9Z9Ir3RHIq97esrEzcbvcp+3nRMo5oO6dq1aolTZo0Cfp8vXr1KmWW/FgjRoyQuXPnyooVK054WwAAAIBTCI4AAACcAu+//750797dTF42atRIhgwZIgUFBUGv3tbSN/6BAi03de2110qdOnUkJydHJk6cWGWmh2YW3HzzzSZokpGRIeeff74sXbq00mv+7//+T/r16yc1a9aUzMxM+elPf+od05YtW+Tee+81WQq6hJqJsXDhQundu7fZZt++fWXx4sXVHp93331XevbsafbLpj//8ssvlwYNGph97tq1q3z88cfe57/66ivp37+/Ccw0bdpUHnzwQSktLfU+r/tw5513mmOr+3bRRReZY6R0P3Xc9n01ffp0Of300824TzvtNHns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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inspect full SVI posterior shape per subject (not just posterior means)\n", "z_samples = np.array(svi_samples[\"z\"])\n", "\n", "reward_prob_samples = 0.5 + 0.5 / (1.0 + np.exp(-z_samples[..., 0])) # [draws, agents]\n", "true_reward_prob = np.array(0.5 + 0.5 * nn.sigmoid(ground_truth_z[:, 0]))\n", "posterior_mean = reward_prob_samples.mean(axis=0)\n", "\n", "subject_ids = np.arange(num_agents)\n", "sort_idx = np.argsort(true_reward_prob)\n", "subject_ids_sorted = subject_ids[sort_idx]\n", "true_reward_prob_sorted = true_reward_prob[sort_idx]\n", "posterior_mean_sorted = posterior_mean[sort_idx]\n", "reward_prob_samples_sorted = reward_prob_samples[:, sort_idx]\n", "\n", "plot_positions = np.arange(num_agents)\n", "\n", "fig, axes = plt.subplots(2, 1, figsize=(16, 10), constrained_layout=True)\n", "\n", "# 1) Violin plot: per-subject posterior distributions + true values (sorted by true reward prob)\n", "parts = axes[0].violinplot(\n", " [reward_prob_samples_sorted[:, i] for i in range(num_agents)],\n", " positions=plot_positions,\n", " showmeans=False,\n", " showmedians=True,\n", " showextrema=False,\n", ")\n", "for pc in parts['bodies']:\n", " pc.set_alpha(0.35)\n", "\n", "axes[0].scatter(plot_positions, true_reward_prob_sorted, color='crimson', marker='x', s=80, label='true reward prob')\n", "axes[0].scatter(plot_positions, posterior_mean_sorted, color='black', s=20, label='posterior mean')\n", "axes[0].set_ylabel('reward probability')\n", "axes[0].set_xlabel('subject id (sorted by true reward probability)')\n", "axes[0].set_ylim(0.5, 1.0)\n", "axes[0].set_xticks(plot_positions)\n", "axes[0].set_xticklabels(subject_ids_sorted)\n", "axes[0].set_title('SVI posterior distribution per subject (violin, sorted)')\n", "axes[0].legend(loc='upper left')\n", "\n", "# 2) Density heatmap: posterior mass over probability bins by subject (same sorted order)\n", "bins = np.linspace(0.0, 1.0, 60)\n", "density = np.stack([\n", " np.histogram(reward_prob_samples_sorted[:, i], bins=bins, density=True)[0]\n", " for i in range(num_agents)\n", "], axis=1) # [num_bins-1, num_agents]\n", "\n", "im = axes[1].imshow(\n", " density,\n", " aspect='auto',\n", " origin='lower',\n", " extent=[-0.5, num_agents - 0.5, bins[0], bins[-1]],\n", " cmap='viridis',\n", ")\n", "axes[1].plot(plot_positions, true_reward_prob_sorted, color='crimson', linestyle='--', marker='x', label='true reward prob')\n", "axes[1].set_ylabel('reward probability')\n", "axes[1].set_xlabel('subject id (sorted by true reward probability)')\n", "axes[1].set_ylim(0.5, 1.0)\n", "axes[1].set_xticks(plot_positions)\n", "axes[1].set_xticklabels(subject_ids_sorted)\n", "axes[1].set_title('SVI posterior density by subject (sorted)')\n", "axes[1].legend(loc='upper left')\n", "fig.colorbar(im, ax=axes[1], label='density')\n", "\n", "plt.show()\n", "\n", "\n" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } ================================================ FILE: examples/model_fitting/tmaze_recoverability.py ================================================ """Fast recoverability diagnostics for pybefit + pymdp TMaze fitting. This module provides a lightweight alternative to running the full `fitting_with_pybefit.ipynb` notebook when evaluating identifiability. It focuses on synthetic recovery sweeps with fixed per-agent latent grids, then reports parameter correlation and a simple bimodality diagnostic. """ from __future__ import annotations import argparse import json from dataclasses import asdict, dataclass from pathlib import Path from typing import Any import jax.numpy as jnp import jax.tree_util as jtu import matplotlib.pyplot as plt import numpy as np from jax import lax, nn from jax import random as jr from numpyro.infer import Predictive from pybefit.inference import ( NumpyroGuide, NumpyroModel, Normal, NormalPosterior, default_dict_numpyro_svi, run_svi, ) from pybefit.inference.numpyro.likelihoods import pymdp_likelihood as likelihood from pymdp.agent import Agent from pymdp.envs import TMaze @dataclass(frozen=True) class RecoverabilityConfig: """Configuration for synthetic TMaze recoverability diagnostics.""" parameterization: str = "three_param" seed: int = 0 num_agents: int = 9 num_blocks: int = 80 num_trials: int = 5 svi_steps: int = 300 num_particles: int = 5 num_samples: int = 80 reward_probability: float = 0.98 punishment_probability: float = 0.0 cue_validity: float = 1.0 dependent_outcomes: bool = True save_plot: str | None = None save_json: str | None = None def _assert_parameterization(parameterization: str) -> None: valid = {"three_param", "reward_only"} if parameterization not in valid: raise ValueError(f"parameterization must be one of {sorted(valid)}, got {parameterization!r}") def _build_task(cfg: RecoverabilityConfig) -> TMaze: return TMaze( reward_probability=cfg.reward_probability, punishment_probability=cfg.punishment_probability, cue_validity=cfg.cue_validity, reward_condition=None, dependent_outcomes=cfg.dependent_outcomes, ) def _latent_grid(cfg: RecoverabilityConfig, num_params: int) -> jnp.ndarray: """Construct deterministic per-agent latent values for reproducible recovery checks.""" base = jnp.linspace(-2.5, 2.5, cfg.num_agents) if num_params == 1: return base[:, None] key = jr.PRNGKey(cfg.seed + 13) key_1, key_2 = jr.split(key) z_1 = 0.8 * jr.normal(key_1, (cfg.num_agents,)) z_2 = 0.8 * jr.normal(key_2, (cfg.num_agents,)) return jnp.stack([base, z_1, z_2], axis=-1) def _build_three_param_transform(task: TMaze): """Notebook-aligned transform with free reward probability, lambda, and initial reward-state prior.""" def transform(z: jnp.ndarray) -> Agent: num_agents, _ = z.shape reward_prob = nn.sigmoid(z[..., 0]) lam = nn.softplus(z[..., 1]) d = nn.sigmoid(z[..., 2]) A = lax.stop_gradient(task.A) A = jtu.tree_map(lambda x: jnp.broadcast_to(x, (num_agents,) + x.shape), A) B = lax.stop_gradient(task.B) B = jtu.tree_map(lambda x: jnp.broadcast_to(x, (num_agents,) + x.shape), B) one_minus = 1.0 - reward_prob reward_left = jnp.stack([reward_prob, one_minus], -1) punish_left = jnp.stack([one_minus, reward_prob], -1) reward_right = jnp.stack([one_minus, reward_prob], -1) punish_right = jnp.stack([reward_prob, one_minus], -1) zeros = jnp.zeros_like(reward_left) side = jnp.broadcast_to(jnp.array([[1.0, 1.0], [0.0, 0.0], [0.0, 0.0]]), (num_agents, 3, 2)) left_col = jnp.stack([zeros, reward_left, punish_left], axis=-2) right_col = jnp.stack([zeros, reward_right, punish_right], axis=-2) A[1] = jnp.stack([side, left_col, right_col, side, side], axis=-2) C = [ jnp.zeros((num_agents, A[0].shape[1])), jnp.expand_dims(lam, -1) * jnp.array([0.0, 1.0, -1.0]), jnp.zeros((num_agents, A[2].shape[1])), ] D = [ jnp.zeros((num_agents, B[0].shape[1])).at[:, 0].set(1.0), jnp.stack([d, 1.0 - d], -1), ] return Agent( A, B, C=C, D=D, policy_len=2, A_dependencies=task.A_dependencies, B_dependencies=task.B_dependencies, batch_size=num_agents, ) return transform def _build_reward_only_transform(task: TMaze): """Constrained transform with only reward probability free (lambda and D fixed). This removes the strongest confounds in the 3-parameter notebook setup and provides a cleaner recoverability baseline. """ def transform(z: jnp.ndarray) -> Agent: num_agents, _ = z.shape reward_prob = nn.sigmoid(z[..., 0]) lam = jnp.full((num_agents,), 1.2) A = lax.stop_gradient(task.A) A = jtu.tree_map(lambda x: jnp.broadcast_to(x, (num_agents,) + x.shape), A) B = lax.stop_gradient(task.B) B = jtu.tree_map(lambda x: jnp.broadcast_to(x, (num_agents,) + x.shape), B) one_minus = 1.0 - reward_prob reward_left = jnp.stack([reward_prob, one_minus], -1) punish_left = jnp.stack([one_minus, reward_prob], -1) reward_right = jnp.stack([one_minus, reward_prob], -1) punish_right = jnp.stack([reward_prob, one_minus], -1) zeros = jnp.zeros_like(reward_left) side = jnp.broadcast_to(jnp.array([[1.0, 1.0], [0.0, 0.0], [0.0, 0.0]]), (num_agents, 3, 2)) left_col = jnp.stack([zeros, reward_left, punish_left], axis=-2) right_col = jnp.stack([zeros, reward_right, punish_right], axis=-2) A[1] = jnp.stack([side, left_col, right_col, side, side], axis=-2) C = [ jnp.zeros((num_agents, A[0].shape[1])), jnp.expand_dims(lam, -1) * jnp.array([0.0, 1.0, -1.0]), jnp.zeros((num_agents, A[2].shape[1])), ] D = [ jnp.zeros((num_agents, B[0].shape[1])).at[:, 0].set(1.0), jnp.full((num_agents, 2), 0.5), ] return Agent( A, B, C=C, D=D, policy_len=2, A_dependencies=task.A_dependencies, B_dependencies=task.B_dependencies, batch_size=num_agents, ) return transform def _build_model_and_truth(cfg: RecoverabilityConfig) -> tuple[NumpyroModel, jnp.ndarray, int]: _assert_parameterization(cfg.parameterization) task = _build_task(cfg) if cfg.parameterization == "three_param": num_params = 3 transform = _build_three_param_transform(task) else: num_params = 1 transform = _build_reward_only_transform(task) prior = Normal(num_params, cfg.num_agents, backend="numpyro") opts_task = { "task": task, "num_blocks": cfg.num_blocks, "num_trials": cfg.num_trials, "num_agents": cfg.num_agents, } model = NumpyroModel(prior, transform, likelihood, opts={"prior": {}, "transform": {}, "likelihood": opts_task}) z_true = _latent_grid(cfg, num_params) return model, z_true, num_params def _simulate_measurements(model: NumpyroModel, z_true: jnp.ndarray, seed: int) -> dict[str, Any]: pred = Predictive(model, posterior_samples={"z": z_true[None, ...]}, return_sites=["z", "outcomes", "multiactions"]) samples = pred(jr.PRNGKey(seed)) observations = samples["outcomes"] return { "samples": samples, "measurements": { "outcomes": [obs[0] for obs in observations], "multiactions": samples["multiactions"][0], }, } def _fit_svi( model: NumpyroModel, measurements: dict[str, Any], num_params: int, cfg: RecoverabilityConfig, ) -> dict[str, Any]: posterior = NumpyroGuide(NormalPosterior(num_params, cfg.num_agents, backend="numpyro")) opts_svi = default_dict_numpyro_svi | { "seed": cfg.seed, "iter_steps": cfg.svi_steps, "elbo_kwargs": {"num_particles": cfg.num_particles, "max_plate_nesting": 1}, "svi_kwargs": {"progress_bar": False, "stable_update": True}, "sample_kwargs": {"num_samples": cfg.num_samples}, } svi_samples, _, _ = run_svi(model, posterior, measurements, opts=opts_svi) return svi_samples def _pearson(x: np.ndarray, y: np.ndarray) -> float: if np.std(x) < 1e-12 or np.std(y) < 1e-12: return float("nan") return float(np.corrcoef(x, y)[0, 1]) def _bimodality_score(probabilities: np.ndarray) -> float: """Simple threshold-bimodality score in [0, 1], higher means more mass near extremes.""" low_or_high = np.mean((probabilities < 0.2) | (probabilities > 0.8)) middle = np.mean((probabilities >= 0.35) & (probabilities <= 0.65)) score = low_or_high - middle return float(np.clip(score, 0.0, 1.0)) def run_recoverability(cfg: RecoverabilityConfig) -> dict[str, Any]: """Run one synthetic recoverability sweep and return diagnostics.""" model, z_true, num_params = _build_model_and_truth(cfg) simulation = _simulate_measurements(model, z_true, cfg.seed + 1) svi_samples = _fit_svi(model, simulation["measurements"], num_params, cfg) true_z = np.array(z_true) inferred_z = np.array(svi_samples["z"].mean(0)) latent_corr = [_pearson(true_z[:, idx], inferred_z[:, idx]) for idx in range(num_params)] true_reward_prob = 1.0 / (1.0 + np.exp(-true_z[:, 0])) inferred_reward_prob = 1.0 / (1.0 + np.exp(-inferred_z[:, 0])) results = { "config": asdict(cfg), "num_params": num_params, "corr_latent": latent_corr, "corr_reward_probability": _pearson(true_reward_prob, inferred_reward_prob), "bimodality_score_reward_probability": _bimodality_score(inferred_reward_prob), "true_z": true_z.tolist(), "inferred_z": inferred_z.tolist(), "true_reward_probability": true_reward_prob.tolist(), "inferred_reward_probability": inferred_reward_prob.tolist(), } return results def _save_scatter(results: dict[str, Any], path: Path) -> None: true_prob = np.array(results["true_reward_probability"]) inferred_prob = np.array(results["inferred_reward_probability"]) plt.figure(figsize=(7, 5)) plt.scatter(true_prob, inferred_prob, label="reward probability") lower = float(min(true_prob.min(), inferred_prob.min())) upper = float(max(true_prob.max(), inferred_prob.max())) plt.plot((lower, upper), (lower, upper), "k--", linewidth=1.0) plt.xlabel("true value") plt.ylabel("posterior mean (SVI)") plt.title("TMaze Recoverability") plt.legend(loc="best") plt.tight_layout() path.parent.mkdir(parents=True, exist_ok=True) plt.savefig(path, dpi=150) plt.close() def _to_jsonable(results: dict[str, Any]) -> str: return json.dumps(results, indent=2, sort_keys=True) def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--parameterization", choices=["three_param", "reward_only"], default="three_param") parser.add_argument("--seed", type=int, default=0) parser.add_argument("--num-agents", type=int, default=9) parser.add_argument("--num-blocks", type=int, default=80) parser.add_argument("--num-trials", type=int, default=5) parser.add_argument("--svi-steps", type=int, default=300) parser.add_argument("--num-particles", type=int, default=5) parser.add_argument("--num-samples", type=int, default=80) parser.add_argument("--save-plot", type=str, default=None) parser.add_argument("--save-json", type=str, default=None) return parser.parse_args() def main() -> None: args = parse_args() cfg = RecoverabilityConfig( parameterization=args.parameterization, seed=args.seed, num_agents=args.num_agents, num_blocks=args.num_blocks, num_trials=args.num_trials, svi_steps=args.svi_steps, num_particles=args.num_particles, num_samples=args.num_samples, save_plot=args.save_plot, save_json=args.save_json, ) results = run_recoverability(cfg) print(f"parameterization={cfg.parameterization}") print(f"corr_reward_probability={results['corr_reward_probability']:.3f}") print(f"bimodality_score_reward_probability={results['bimodality_score_reward_probability']:.3f}") for idx, corr in enumerate(results["corr_latent"]): print(f"corr_latent_{idx}={corr:.3f}") if cfg.save_plot: _save_scatter(results, Path(cfg.save_plot)) print(f"saved_plot={cfg.save_plot}") if cfg.save_json: out_path = Path(cfg.save_json) out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text(_to_jsonable(results)) print(f"saved_json={cfg.save_json}") if __name__ == "__main__": main() ================================================ FILE: examples/sparse/sparse_benchmark.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sparse Array Benchmarking" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import jax.numpy as jnp\n", "from jax import tree_util as jtu\n", "from jax.experimental import sparse\n", "from pymdp.agent import Agent\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import time\n", "\n", "from pymdp.inference import smoothing_ovf\n", "import numpy as np\n", "\n", "import tracemalloc" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def sizeof(x):\n", " return np.prod(x.shape)\n", "\n", "\n", "def sizeof_sparse(x):\n", " return np.prod(x.data.shape) + np.prod(x.indices.shape)\n", "\n", "\n", "def get_matrices(n_batch, num_obs, n_states):\n", "\n", " A_1 = jnp.ones((num_obs[0], n_states[0]))\n", " A_1 = A_1.at[-1, :-1].set(0)\n", " A_2 = jnp.ones((num_obs[0], n_states[1]))\n", " A_2 = A_2.at[-1, 1:].set(0)\n", "\n", " A_tensor = A_1[..., None] * A_2[:, None]\n", " A_tensor /= A_tensor.sum(0)\n", "\n", " A = [jnp.broadcast_to(A_tensor, (n_batch, *A_tensor.shape))]\n", "\n", " # create two transition matrices, one for each state factor\n", " B_1 = jnp.eye(n_states[0])\n", " B_1 = B_1.at[:, 1:].set(B_1[:, :-1])\n", " B_1 = B_1.at[:, 0].set(0)\n", " B_1 = B_1.at[-1, 0].set(1)\n", " B_1 = jnp.broadcast_to(B_1, (n_batch, n_states[0], n_states[0]))\n", "\n", " B_2 = jnp.eye(n_states[1])\n", " B_2 = B_2.at[:, 1:].set(B_2[:, :-1])\n", " B_2 = B_2.at[:, 0].set(0)\n", " B_2 = B_2.at[-1, 0].set(1)\n", " B_2 = jnp.broadcast_to(B_2, (n_batch, n_states[1], n_states[1]))\n", "\n", " B = [B_1[..., None], B_2[..., None]]\n", " C = [jnp.zeros((n_batch, num_obs[0]))] # flat preferences\n", " D = [jnp.ones((n_batch, n_states[0])) / n_states[0], jnp.ones((n_batch, n_states[1])) / n_states[1]] # flat prior\n", " E = jnp.ones((n_batch, 1))\n", "\n", " return A, B, C, D, E" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def profile(fun, *args): \n", " tracemalloc.start()\n", " tracemalloc.reset_peak()\n", " bt = time.time()\n", " res = fun(*args)\n", " et = time.time()\n", " size, peak = tracemalloc.get_traced_memory()\n", "\n", " stats = {'time': et - bt}\n", " return res, stats\n", "\n", "def experiment(n_states):\n", " results = {}\n", "\n", " n_batch = 1\n", " num_obs = [2]\n", "\n", " A, B, C, D, E = get_matrices(n_batch=n_batch, num_obs=num_obs, n_states=n_states)\n", "\n", " # for the single modality, a sequence over time of observations (one hot vectors)\n", " obs = [\n", " jnp.broadcast_to(\n", " jnp.array(\n", " [\n", " [1.0, 0.0], # observation 0 is ambiguous with respect state factors\n", " [1.0, 0], # observation 0 is ambiguous with respect state factors\n", " [1.0, 0], # observation 0 is ambiguous with respect state factors\n", " [0.0, 1.0],\n", " ]\n", " )[:, None],\n", " (4, n_batch, num_obs[0]),\n", " )\n", " ] # observation 1 provides information about exact state of both factors\n", "\n", " agents = Agent(\n", " A=A,\n", " B=B,\n", " C=C,\n", " D=D,\n", " E=E,\n", " pA=None,\n", " pB=None,\n", " policy_len=3,\n", " control_fac_idx=None,\n", " policies=None,\n", " gamma=16.0,\n", " alpha=16.0,\n", " use_utility=True,\n", " categorical_obs=True,\n", " action_selection=\"deterministic\",\n", " sampling_mode=\"full\",\n", " inference_algo=\"ovf\",\n", " num_iter=16,\n", " learn_A=False,\n", " learn_B=False,\n", " batch_size=1,\n", " )\n", "\n", " jtu.tree_map(lambda b: sparse.BCOO.fromdense(b, n_batch=n_batch), agents.B)\n", "\n", "\n", " prior = agents.D\n", " qs_hist = None\n", " action_hist = []\n", " for t in range(len(obs[0])):\n", " first_obs = jtu.tree_map(lambda x: jnp.moveaxis(x[:t+1], 0, 1), obs)\n", " beliefs = agents.infer_states(first_obs, past_actions=None, empirical_prior=prior, qs_hist=qs_hist)\n", " actions = jnp.broadcast_to(agents.policies[0, 0], (n_batch, 2))\n", " prior = agents.update_empirical_prior(actions, beliefs)\n", " qs_hist = beliefs\n", " action_hist.append(actions)\n", "\n", " beliefs = jtu.tree_map(lambda x, y: jnp.concatenate([x[:, None], y], 1), agents.D, beliefs)\n", "\n", " take_first = lambda pytree: jtu.tree_map(lambda leaf: leaf[0], pytree)\n", " beliefs_single = take_first(beliefs)\n", "\n", " # ======\n", " # Dense implementation\n", " smoothed_beliefs_dense, run_stats = profile(\n", " smoothing_ovf, *(beliefs_single, take_first(agents.B), jnp.stack(action_hist, 1)[0])\n", " )\n", " results.update({k+'_dense': v for k, v in run_stats.items()})\n", " results[\"size_dense\"] = sum([sizeof(sB) for sB in agents.B])\n", " # ======\n", "\n", " sparse_B_single = jtu.tree_map(lambda b: sparse.BCOO.fromdense(b[0]), agents.B)\n", " actions_single = jnp.stack(action_hist, 1)[0]\n", "\n", " # ======\n", " # Sparse implementation\n", " smoothed_beliefs_sparse, run_stats = profile(\n", " smoothing_ovf, *(beliefs_single, sparse_B_single, actions_single)\n", " )\n", " results.update({k+'_sparse': v for k, v in run_stats.items()})\n", " results[\"size_sparse\"] = sum([sizeof_sparse(sB) for sB in sparse_B_single])\n", " # ======\n", "\n", " return results, [beliefs_single, smoothed_beliefs_dense, smoothed_beliefs_sparse]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the experiment and visualizing the results" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_3558/2542277956.py:35: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agents = Agent(\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'smoothed beliefs sparse')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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uefMlClTzKBBg8yf/vQn/zql93PLli3NnXfeaWbMmGE6d+5sIiMjzaJFi0xKSop58MEHzdNPP22aN29uPB6P2b9/v//6n3/+uYmPjzepqanmkUceMY899php27atcbvdZu3atf71du7caZo1a2YSExPN73//e/PUU0+Z7t27m4iICLN48WL/Og8//LCRZMaOHevPz7fffltm1ltvvdXMmjXL9O/f30gy77zzjv+2QnlMXnvttUaSGT58uJk5c6b57W9/68/I5MmTKz2+pY/frl27mm7dupmnnnrK3HPPPSYmJsZ06NDBHDp0yL9usLkt/Rm0devWgPsoMzMzpP07ePCgWbhwoenYsaNp0aKF/1ju3LnTLF++3EgyWVlZ5tlnnzXPPvusufnmm83QoUMr3V+fz2cyMjJMRESEGT9+vJkxY4bp37+//3gd+3Px888/Nx6Px3Tu3NlMmTLFzJw502RkZBiXy+W/v4/d3zPPPNP079/fzJgxw9x+++0mMjLSDBs2zL9eQUGBadSokenQoYOZOnWqmT9/vvn9739vOnXqFDDj9ddfb6KioswNN9xg5syZY+6++24THx9vzjnnHHP06NFK9686yBgZC2fGgrle6fxdu3Y1/fr1M9OnTzc5OTkmIiLCZGRkGJ/P51938ODBZtiwYWbq1Klm9uzZZujQoUaSueOOOwJuNzMz06SkpJimTZuaCRMmmLlz55qlS5fWeu4ooua/d3B5X8YEV0SNMSY+Pj6gcJX6n//5H5Oammp2794dsPx3v/ud8Xg8/lCVhu/UU08NCJrP5zOnnXaayc7ODniwHTp0yLRt29ZcdNFF/mWDBw82MTExZtu2bf5lX375pYmMjAy6iEoyTz75pH+Z1+s1PXr0MMnJyf4H18KFC01ERIT5+9//HnD9OXPmGEnmo48+8i+rqoiGsn+l133ttdf8y37++WcjyUydOrXK/TsZeDwek5OTU+k6pffzyy+/7F+2efNmI8lEREQEPNEtW7aszON/8ODBJjo62v9EZowxO3bsMImJiSYjI8O/bOLEiUZSwOPkwIEDpm3btqZNmzampKTEGGPM+vXry9zG8bO+9NJL/mVer9ekpKSYK6+80r8s2Mdkfn6+kWTGjx8fsN7w4cNDepJs3rx5QHF49dVXjSTzzDPPGGNCe1wH8yQZSuYyMzNNly5dAta79dZbTVJSkikuLq50/463dOlSI8k8/vjj/mXFxcWmX79+Ze6zrKws07VrV3PkyBH/Mp/PZ/r06WNOO+20Mvt74YUXBhyb2267zURGRpp9+/YZY4xZsmSJkWTWr19f4Xx///vfjSTz5z//OWD53/72t3KXhwMZI2PhzFgw1yudPz09PaDkPf7440aSefPNN/3Lju0PpcaNG2fi4uICsll6v8+ZMydg3drOHW/NH+PZZ5/VihUrAr5OlDFGb7zxhgYNGiRjjHbv3u3/ys7OVmFhYcDbOZI0cuRIxcbG+r/Pz8/Xli1bNHz4cO3Zs8d//aKiImVlZemDDz6Qz+dTSUmJli1bpsGDB6tVq1b+63fq1EnZ2dlBzxwVFaVx48b5v4+Ojta4ceO0a9cubdy4UZL02muvqVOnTurYsWPAPvXv31+SlJeXF/TtBbt/FYmNjVV0dLTef//9Gnsrri5p2LChPv74Y+3YsaPS9RISEvS73/3O//3pp5+uhg0bqlOnTurVq5d/eem/v/vuO0m/vl22fPlyDR48WKeeeqp/vdTUVA0fPlwffvih/3SSd955Rz179lTfvn0Dbnfs2LH6/vvv9eWXXwa1TwkJCbr22mv930dHR6tnz57+maTgH5PvvPOOJOmWW24JuI2JEycGNUupESNGKDEx0f/9kCFDlJqa6t/+iT6uj3eimWvYsKGKiopC/rn2zjvvKCoqSjfddJN/WWRkpCZMmBCw3t69e/Xee+9p2LBhOnDggH++PXv2KDs7W1u2bNEPP/wQcJ2xY8cGfKxcv379VFJSom3btvlnlqS3335bv/zyS7nzvfbaa/J4PLrooosCjkt6eroSEhJC+lkULDJGxspT3YyFcr2xY8cG/OH0TTfdpKioKP8xkRTQH0qz2K9fPx06dEibN28O2J7b7dbo0aPLzCPVXu74Y6Vj9OzZs8I/Vqqun376Sfv27dO8efM0b968ctcp/QOcUsf/5f6WLVsk/VpQK1JYWCiv16vDhw/rtNNOK3P56aefHvBArUxaWpri4+MDlnXo0EHSr+fH9O7dW1u2bNG//vUvNW3atNxtHL9PlQl2/xo1alTuZW63W1OmTNHtt9+uZs2aqXfv3rr00ks1YsQIpaSkBD1HffH4449r5MiRatmypdLT03XxxRdrxIgRAU9oktSiRYsyny3r8XjUsmXLMssk+Uv+Tz/9pEOHDun0008vc9udOnWSz+fT9u3b1aVLF23bti3gCffY9SRp27ZtQX1+YXmzNmrUSJ999pn/+2Afk9u2bVNERITatWsXcHl5+1OZ43PmcrnUvn17/3nJJ/q4Pt6JZm78+PF69dVXNXDgQDVv3lwDBgzQsGHD9Jvf/KbS623btk2pqalKSEgIWH788frmm29kjNEDDzygBx54oMIZmzdv7v/+2F+YJfmPReljLTMzU1deeaUeeughTZs2Teeff74GDx6s4cOHy+12S/r1uBQWFio5ObnC2ww3MkbGylPdjIVyveOPSUJCglJTUwP+HuKLL77Q/fffr/fee8//C0upwsLCgO+bN29e5o+2ajt3FNEaVvrb2LXXXlthWLp16xbw/bG/zRy7jalTp1b4sRsJCQlV/pFQOPl8PnXt2lVPPfVUuZcf/4O2qm1JVe9fZSZOnKhBgwZp6dKlWrZsmR544AHl5ubqvffe05lnnhn0LPXBsGHD1K9fPy1ZskTLly/X1KlTNWXKFC1evFgDBw70rxcZGVnu9StaboypkXmDEcxM4XxMhkM4HtfHb+9E9i85OVn5+flatmyZ3n33Xb377rt64YUXNGLECC1YsCDoOSqbT5LuuOOOCt+Bad++fcD3Vd2vpR9qvnbtWv31r3/VsmXLNGbMGD355JNau3atEhIS5PP5lJycrD//+c/lbquiUnEiyBgZK091MxbObO7bt0+ZmZlKSkrSww8/rHbt2ikmJkabNm3S3XffXeYV4uP7hlT7uaOIhlF5/3NR6V8MlpSU6MILL6zWdkt/q0xKSqp0G02bNlVsbKz/t8RjffXVV0Hf3o4dO1RUVBTwqujXX38t6df/Jal0pk8//VRZWVkn/D9MBbt/wWzn9ttv1+23364tW7aoR48eevLJJ/WnP/3phOari1JTUzV+/HiNHz9eu3bt0llnnaU//vGPAU+S1dW0aVPFxcWV+5javHmzIiIi/D+wW7duXeF6pZdL5WcnVME+Jlu3bi2fz6dvv/024BWaUDIiqUzOjDH65ptv/L9YhutxXSocmYuOjtagQYM0aNAg+Xw+jR8/XnPnztUDDzxQpiSWat26tVatWqWDBw8GPKkff7xKXw1s0KBBWPb3WL1791bv3r31xz/+US+//LKuueYaLVq0SNdff73atWunlStX6rzzziv3SbWmkDEyVp7qZCyU623ZskUXXHCB//uDBw/qxx9/1MUXXyzp109I2LNnjxYvXqyMjAz/elu3bg15X2ord5wjGkbx8fFlPtIkMjJSV155pd544w19/vnnZa5z/EeVlCc9PV3t2rXTE088oYMHD1a4jcjISGVnZ2vp0qX697//7b/8X//6l5YtWxb0fhQXFwd85NPRo0c1d+5cNW3aVOnp6ZJ+fUXghx9+0Pz588tc//DhwyoqKgr69oLdv4ocOnRIR44cCVjWrl07JSYm1uqrxE5QUlJS5q2X5ORkpaWlhe1YREZGasCAAXrzzTcD3g4qKCjQyy+/rL59+yopKUmSdPHFF2vdunVas2aNf72ioiLNmzdPbdq0UefOnSXJ/0tPRR8JFIxgH5OlRWH69OkB6zz99NMh3d5LL72kAwcO+L9//fXX9eOPP/q3f6KP6+OdaOb27NkT8H1ERIT/Cb2yx8bFF1+s4uJizZ4927+spKREM2bMCFgvOTlZ559/vubOnasff/yxzHZC3V/p17eqj3+VsPSVr9KZhw0bppKSEj3yyCNlrl9cXHxCj6nykDEyVpHqZiyU682bNy/gvM3Zs2eruLjYf0xKX9k+NjdHjx7VrFmzKp39WLWdO14RDaP09HStXLlSTz31lNLS0tS2bVv16tVLjz32mPLy8tSrVy/dcMMN6ty5s/bu3atNmzZp5cqV2rt3b6XbjYiI0HPPPaeBAweqS5cuGj16tJo3b64ffvhBeXl5SkpK0l//+ldJ0kMPPaS//e1v6tevn8aPH6/i4mLNmDFDXbp0CTjXpzJpaWmaMmWKvv/+e3Xo0EF/+ctflJ+fr3nz5vlPkr7uuuv06quv6sYbb1ReXp7OO+88lZSUaPPmzXr11Ve1bNmyoM+3DWX/yvP1118rKytLw4YNU+fOnRUVFaUlS5aooKAg4A8FTgYHDhxQixYtNGTIEHXv3l0JCQlauXKl1q9fryeffDJst/OHP/xBK1asUN++fTV+/HhFRUVp7ty58nq9AZ89eM899+iVV17RwIEDdcstt6hx48ZasGCBtm7dqjfeeMP/HzW0a9dODRs21Jw5c5SYmKj4+Hj16tWrzPnSlQn2MdmjRw9dffXVmjVrlgoLC9WnTx+tWrVK33zzTUjHoHHjxurbt69Gjx6tgoICPf3002rfvr1uuOEGSSf+uK7u/lXk+uuv1969e9W/f3+1aNFC27Zt04wZM9SjRw//+YTlGTRokM477zzdc889+v7779W5c2ctXry4TBmTfv2Dz759+6pr16664YYbdOqpp6qgoEBr1qzRf/7zH3366adB768kLViwQLNmzdIVV1yhdu3a6cCBA5o/f76SkpL8rwBlZmZq3Lhxys3NVX5+vgYMGKAGDRpoy5Yteu211/TMM89oyJAhId1uZcgYGatIdTMWyvWOHj3qf7776quvNGvWLPXt21eXXXaZJKlPnz5q1KiRRo4cqVtuuUUul0sLFy4M6bSPWs9d0H9fX4+VfixCRR9VEOzHN23evNlkZGSY2NhYIyngI4sKCgpMTk6OadmypWnQoIFJSUkxWVlZZt68ef51yvtoomN98skn5re//a055ZRTjNvtNq1btzbDhg0zq1atClhv9erVJj093URHR5tTTz3VzJkzp9x5y1P6kRQbNmww5557romJiTGtW7c2M2fOLLPu0aNHzZQpU0yXLl2M2+02jRo1Munp6eahhx4yhYWF/vWC+RzRYPevvGO0e/duk5OTYzp27Gji4+ONx+MxvXr1Mq+++mqV+1vfeL1ec+edd5ru3bubxMREEx8fb7p3725mzZoVsF55Hz1izK/31SWXXFJmuaQyH1ezadMmk52dbRISEkxcXJy54IIL/J+de6xvv/3WDBkyxDRs2NDExMSYnj17mrfffrvMem+++abp3LmziYqKCshbRbOOHDnStG7dOmBZsI/Jw4cPm1tuucWccsopJj4+3gwaNMhs3749pI+WeeWVV8y9995rkpOTTWxsrLnkkksCPjatVDCP62A+WiaU/SvvmL3++utmwIABJjk52URHR5tWrVqZcePGmR9//LHS/TXGmD179pjrrrvOJCUlGY/HY6677jrzySeflPtxQN9++60ZMWKESUlJMQ0aNDDNmzc3l156qXn99dfL7O/xP3OP/9mwadMmc/XVV5tWrVoZt9ttkpOTzaWXXmo2bNhQZsZ58+aZ9PR0ExsbaxITE03Xrl3NXXfdZXbs2FHl/oWCjJGxio5ZdTMWzPVK51+9erUZO3asadSokUlISDDXXHON2bNnT8D2PvroI9O7d28TGxtr0tLSzF133eX/iLBjn3crut9rO3cuYyyeHQ0AAIBKvfjiixo9erTWr18f9k/3sY1zRAEAAGAFRRQAAABWUEQBAABg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zpzJaZx2jJw2j+S8mZw2j+TMmZzGacfIafNIzpuJeULDW/MAAACwgiIKAAAAKyiiAAAAsKJeFVG3263JkyfL7XbbHkWS8+aRnDeT0+aRnDmT0zjtGDltHsl5MzltHsmZMzmN046R0+aRnDcT84SmXv2xEgAAAOqOevWKKAAAAOoOiigAAACsoIgCAADACoooAAAArKg3RfTZZ59VmzZtFBMTo169emndunVW5/nggw80aNAgpaWlyeVyaenSpVbnyc3N1TnnnKPExEQlJydr8ODB+uqrr6zNM3v2bHXr1k1JSUlKSkrSueeeq3fffdfaPMd77LHH5HK5NHHiRNujOI6TskbOqkbW6i6yVjGyFjqnZq1eFNG//OUvmjRpkiZPnqxNmzape/fuys7O1q5du6zNVFRUpO7du+vZZ5+1NsOxVq9erZycHK1du1YrVqzQL7/8ogEDBqioqMjKPC1atNBjjz2mjRs3asOGDerfv78uv/xyffHFF1bmOdb69es1d+5cdevWzfYojuO0rJGzqpG1uomsVY6shcbRWbP7X92HR8+ePU1OTo7/+5KSEpOWlmZyc3MtTvVfksySJUtsjxFg165dRpJZvXq17VH8GjVqZJ577jmrMxw4cMCcdtppZsWKFSYzM9PceuutVudxGidnjZwFj6w5H1kLDVmrmNOzVudfET169Kg2btyoCy+80L8sIiJCF154odasWWNxMmcrLCyUJDVu3NjyJFJJSYkWLVqkoqIinXvuuVZnycnJ0SWXXBLweMKvyFronJQziazVFWQtdGStYk7PWpTtAU7U7t27VVJSombNmgUsb9asmTZv3mxpKmfz+XyaOHGizjvvPJ1xxhnW5vjnP/+pc889V0eOHFFCQoKWLFmizp07W5tn0aJF2rRpk9avX29tBicja6FxSs4kslbXkLXQkLWK1YWs1fkiitDl5OTo888/14cffmh1jtNPP135+fkqLCzU66+/rpEjR2r16tVWQrt9+3bdeuutWrFihWJiYmr99lH/OCVnEllD/UbWyldXslbni2iTJk0UGRmpgoKCgOUFBQVKSUmxNJVz3XzzzXr77bf1wQcfqEWLFlZniY6OVvv27SVJ6enpWr9+vZ555hnNnTu31mfZuHGjdu3apbPOOsu/rKSkRB988IFmzpwpr9eryMjIWp/LScha8JyUM4ms1TVkLXhkrWJ1JWt1/hzR6Ohopaena9WqVf5lPp9Pq1atsn5ehpMYY3TzzTdryZIleu+999S2bVvbI5Xh8/nk9Xqt3HZWVpb++c9/Kj8/3/919tln65prrlF+fr4jwmobWataXciZRNacjqxVjaxVra5krc6/IipJkyZN0siRI3X22WerZ8+eevrpp1VUVKTRo0dbm+ngwYP65ptv/N9v3bpV+fn5aty4sVq1alXr8+Tk5Ojll1/Wm2++qcTERO3cuVOS5PF4FBsbW+vz3HvvvRo4cKBatWqlAwcO6OWXX9b777+vZcuW1foskpSYmFjm3KL4+Hidcsop1s85chKnZY2cVY2s1U1krXJkrWp1JmuW/2o/bGbMmGFatWploqOjTc+ePc3atWutzpOXl2cklfkaOXKklXnKm0WSeeGFF6zMM2bMGNO6dWsTHR1tmjZtarKysszy5cutzFIRJ37MhRM4KWvkrGpkre4iaxUja9XjxKy5jDGmxtsuAAAAcJw6f44oAAAA6iaKKAAAAKygiAIAAMAKiigAAACsoIgCAADACoooAAAArKCIAgAAwAqKKAAAAKygiAIAAMAKiigAAACsoIgCAADACoooAAAArPj/yogXKQPSSWIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res, (beliefs, smoothed_dense, smoothed_sparse) = experiment([2, 3])\n", "\n", "fig, axes = plt.subplots(2, 3, figsize=(8, 4), sharex=True)\n", "\n", "sns.heatmap(beliefs[0].mT, ax=axes[0, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(beliefs[1].mT, ax=axes[1, 0], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "sns.heatmap(smoothed_dense[0][0].mT, ax=axes[0, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(smoothed_dense[0][1].mT, ax=axes[1, 1], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "sns.heatmap(smoothed_sparse[0][0].mT, ax=axes[0, 2], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "sns.heatmap(smoothed_sparse[0][1].mT, ax=axes[1, 2], cbar=False, vmax=1., vmin=0., cmap='viridis')\n", "\n", "axes[0, 0].set_title('Filtered beliefs')\n", "axes[0, 1].set_title('smoothed beliefs dense')\n", "axes[0, 2].set_title('smoothed beliefs sparse')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Benchmarking runtime and memory performance" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step 1\n", "\t [100, 300]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/_f/1qqqnkyd5k5g2b1pgfwzzrqm0000gn/T/ipykernel_3558/2542277956.py:35: UserWarning: A JAX array is being set as static! This can result in unexpected behavior and is usually a mistake to do.\n", " agents = Agent(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\t {'time_dense': 0.4508378505706787, 'size_dense': 100000, 'time_sparse': 0.5985698699951172, 'size_sparse': 1600}\n", "Step 2\n", "\t [200, 600]\n", "\t {'time_dense': 0.5454308986663818, 'size_dense': 400000, 'time_sparse': 0.5894217491149902, 'size_sparse': 3200}\n", "Step 3\n", "\t [300, 900]\n", "\t {'time_dense': 0.36173391342163086, 'size_dense': 900000, 'time_sparse': 0.5830059051513672, 'size_sparse': 4800}\n", "Step 4\n", "\t [400, 1200]\n", "\t {'time_dense': 0.44315290451049805, 'size_dense': 1600000, 'time_sparse': 0.7388842105865479, 'size_sparse': 6400}\n", "Step 5\n", "\t [500, 1500]\n", "\t {'time_dense': 0.418179988861084, 'size_dense': 2500000, 'time_sparse': 0.5743489265441895, 'size_sparse': 8000}\n", "Step 6\n", "\t [600, 1800]\n", "\t {'time_dense': 0.3202641010284424, 'size_dense': 3600000, 'time_sparse': 0.5391190052032471, 'size_sparse': 9600}\n", "Step 7\n", "\t [700, 2100]\n", "\t {'time_dense': 0.44112205505371094, 'size_dense': 4900000, 'time_sparse': 0.6291599273681641, 'size_sparse': 11200}\n", "Step 8\n", "\t [800, 2400]\n", "\t {'time_dense': 0.44248127937316895, 'size_dense': 6400000, 'time_sparse': 0.6097638607025146, 'size_sparse': 12800}\n", "Step 9\n", "\t [900, 2700]\n", "\t {'time_dense': 0.3552210330963135, 'size_dense': 8100000, 'time_sparse': 0.639538049697876, 'size_sparse': 14400}\n" ] } ], "source": [ "n_steps = 10\n", "\n", "res = []\n", "for i in range(1, n_steps):\n", " print(f\"Step {i}\")\n", " num_states = [100 * i, 300 * i]\n", " print('\\t', num_states)\n", " results, bel = experiment(num_states)\n", " res += [results]\n", " print('\\t', res[-1])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "keys = list(set(r.replace(\"_dense\", \"\").replace(\"_sparse\", \"\") for r in res[0].keys())) \n", "n_plots = len(keys)\n", "\n", "fig, ax = plt.subplots(n_plots, 1, figsize=(6, 3 * n_plots))\n", "for i, a in enumerate(ax.flatten()):\n", " k = keys[i]\n", " a.plot([r[k + \"_dense\"] for r in res], label=f\"{k.replace('_', ' ').capitalize()} dense\")\n", " a.plot([r[k + \"_sparse\"] for r in res], label=f\"{k} sparse\")\n", " a.set_xticks(list(range(0, len(res))))\n", " a.set_xticklabels([f\"[{1000*i}, {3000*i}]\" for i in range(1, n_steps)], rotation=45)\n", " m = max([r[k + \"_dense\"] for r in res] + [r[k + \"_sparse\"] for r in res]) * 1.05\n", " a.set_ylim([0, m])\n", "\n", "plt.tight_layout()\n", "[a.legend() for a in ax.flatten()]\n", "plt.show()" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: mkdocs.yml ================================================ site_name: pymdp site_description: JAX-first Active Inference in discrete state spaces site_url: https://pymdp-rtd.readthedocs.io/en/latest/ repo_url: https://github.com/infer-actively/pymdp repo_name: infer-actively/pymdp docs_dir: docs-mkdocs exclude_docs: | overrides/** site_dir: !ENV [MKDOCS_SITE_DIR, site] strict: true validation: omitted_files: ignore theme: name: dracula custom_dir: docs-mkdocs/overrides logo: assets/pymdp-logo.png favicon: assets/pymdp-favicon.png markdown_extensions: - admonition - attr_list - footnotes - pymdownx.arithmatex: generic: true - toc: permalink: true extra_css: - styles/crisp-api.css extra_javascript: - javascripts/mathjax.js - javascripts/sidebar-accessibility.js - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js plugins: - search - mkdocs-jupyter: execute: false include_source: true ignore_h1_titles: true theme: dark - mkdocstrings: handlers: python: options: show_source: false show_signature_annotations: true show_root_heading: true docstring_style: numpy heading_level: 2 nav: - Home: index.md - Getting Started: - Installation: getting-started/installation.md - Quickstart (JAX): getting-started/quickstart-jax.md - Guides: - Using rollout() for compiled active inference loops: guides/rollout-active-inference-loop.md - PymdpEnv and Custom Environments: guides/pymdp-env.md - Generative Model Structure: guides/generative-model-structure.md - Migration: - NumPy/legacy to JAX: migration/numpy-to-jax.md - Tutorials: - Overview: tutorials/index.md - Notebook Gallery: tutorials/notebooks/index.md - API Reference: - Overview: api/index.md - Agent: api/agent.md - Inference: api/inference.md - Control: api/control.md - Learning: api/learning.md - Algorithms: api/algos.md - Utils: api/utils.md - Maths: api/maths.md - Environment: api/envs-env.md - Env Rollout: api/envs-rollout.md - Sophisticated Inference Planning: api/planning-si.md - MCTS Planning: api/planning-mcts.md - Legacy: - Legacy/NumPy Archive: legacy/index.md - Development: - Viewing Docs Locally: development/viewing-docs.md - Release Notes: development/release-notes.md ================================================ FILE: nbval_sanitize.cfg ================================================ # nbval sanitization configuration # This file contains regex patterns to sanitize notebook outputs before comparison # Format: regex to match [replacement] # Sanitize file paths with line numbers *.py:[0-9]+ *.py:LINE # Sanitize temporary paths /tmp/.* /tmp/... /var/.* /var/... # Sanitize memory addresses 0x[0-9a-fA-F]+ 0x... # Sanitize timestamps [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} TIMESTAMP ================================================ FILE: paper/paper.bib ================================================ @article{friston_reinforcement_2009, title = {Reinforcement learning or active inference?}, author = {Friston, Karl J. and Daunizeau, Jean and Kiebel, Stefan J.}, journal = {PLoS ONE}, year = {2009}, volume = {4}, number = {7}, pages = {e6421}, doi = {10.1371/journal.pone.0006421} } @article{vanderbroeck2019active, title={Active inference for robot control: A factor graph approach}, author={Vanderbroeck, Mees and Baioumy, Mohamed and van der Lans, Daan and de Rooij, Rens and van der Werf, Tiis}, journal={Student Undergraduate Research E-journal!}, volume={5}, pages={1--5}, year={2019} } @inproceedings{ergul2020learning, title={Learning Where to Park}, author={Ergul, Burak and van de Laar, Thijs and Koudahl, Magnus and Roa-Villescas, Martin and de Vries, Bert}, booktitle={International Workshop on Active Inference}, pages={125--132}, year={2020}, organization={Springer} } @article{10.1162/neco_a_01427, author={van de Laar, Thijs and Senoz, Ismail and {\"O}z{\c{c}}elikkale, Ay{\c{c}}a and Wymeersch, Henk}, title = {Chance-Constrained Active Inference}, journal = {Neural Computation}, volume = {33}, number = {10}, pages = {2710-2735}, year = {2021}, month = {09}, issn = {0899-7667}, doi = {10.1162/neco_a_01427}, url = {https://doi.org/10.1162/neco\_a\_01427}, eprint = {https://direct.mit.edu/neco/article-pdf/33/10/2710/1963501/neco\_a\_01427.pdf}, } @misc{heins2022pymdp_arxiv, title={pymdp: A Python library for active inference in discrete state spaces}, author={Heins, Conor and Millidge, Beren and Demekas, Daphne and Klein, Brennan and Friston, Karl and Couzin, Iain and Tschantz, Alexander}, eprint={2201.03904v1}, archivePrefix={arXiv}, primaryClass={cs.AI}, year={2022} } @article{millidge2021whence, title = {Whence the expected free energy?}, author = {Millidge, Beren and Tschantz, Alexander and Buckley, Christopher L.}, journal = {Neural Computation}, year = {2021}, volume = {33}, number = {2}, pages = {447--482}, doi = {10.1162/neco_a_01354} } @article{friston2015active, title = {Active inference and epistemic value}, author = {Friston, Karl J. and Rigoli, Francesco and Ognibene, Dimitri and Mathys, Christoph and Fitzgerald, Thomas and Pezzulo, Giovanni}, journal = {Cognitive Neuroscience}, year = {2015}, volume = {6}, number = {4}, pages = {187--214}, doi = {10.1080/17588928.2015.1020053} } @article{parr2019neuronal, title = {Neuronal message passing using Mean-field, Bethe, and Marginal approximations}, author = {Parr, Thomas and Markovic, Dimitrije and Kiebel, Stefan J. and Friston, Karl J.}, journal = {Scientific Reports}, year = {2019}, volume = {9}, number = {1}, pages = {1--18}, doi = {10.1038/s41598-018-38246-3} } @article{penny2004modelling, title = {Modelling functional integration: A comparison of structural equation and dynamic causal models}, author = {Penny, Will D. and Stephan, Klaas E. and Mechelli, Andrea and Friston, Karl J.}, journal = {NeuroImage}, year = {2004}, volume = {23}, pages = {S264--S274}, doi = {10.1016/j.neuroimage.2004.07.041} } @article{friston_active_2012, title = {Active inference and agency: Optimal control without cost functions}, author = {Friston, Karl J. and Samothrakis, Spyridon and Montague, Read}, journal = {Biological Cybernetics}, year = {2012}, volume = {106}, number = {8-9}, pages = {523--541}, doi = {10.1007/s00422-012-0512-8} } @article{montague2012computational, title = {Computational psychiatry}, author = {Montague, P. Read and Dolan, Raymond J. and Friston, Karl J. and Dayan, Peter}, journal = {Trends in Cognitive Sciences}, year = {2012}, volume = {16}, number = {1}, pages = {72--80}, doi = {10.1016/j.tics.2011.11.018} } @inproceedings{tschantz2020reinforcement, title = {Reinforcement learning through active inference}, author = {Tschantz, Alexander and Millidge, Beren and Seth, Anil K. and Buckley, Christopher L.}, booktitle = {Bridging AI and Cognitive Science at the International Conference on Learning Representations}, year = {2020}, url = {https://baicsworkshop.github.io/pdf/BAICS_37.pdf} } @article{sajid2021active, title = {Active inference: Demystified and compared}, author = {Sajid, Noor and Ball, Philip J. and Parr, Thomas and Friston, Karl J.}, journal = {Neural Computation}, year = {2021}, volume = {33}, number = {3}, pages = {674--712}, doi = {10.1162/neco_a_01357} } @inproceedings{tschantz2020scaling, title = {Scaling active inference}, author = {Tschantz, Alexander and Baltieri, Manuel and Seth, Anil K. and Buckley, Christopher L.}, booktitle = {2020 International Joint Conference on Neural Networks (IJCNN)}, year = {2020}, pages = {1--8}, organization = {IEEE}, doi = {10.1109/IJCNN48605.2020.9207382} } @article{friston2017process, title = {Active inference: A process theory}, author = {Friston, Karl J. and FitzGerald, Thomas and Rigoli, Francesco and Schwartenbeck, Philipp and Pezzulo, Giovanni}, journal = {Neural Computation}, year = {2017}, volume = {29}, number = {1}, pages = {1--49}, doi = {10.1162/NECO_a_00912} } @article{baltieri2019pid, title = {PID control as a process of active inference with linear generative models}, author = {Baltieri, Manuel and Buckley, Christopher L.}, journal = {Entropy}, year = {2019}, volume = {21}, number = {3}, pages = {257}, doi = {10.3390/e21030257} } @inproceedings{fountas2020deep, title = {Deep active inference agents using Monte-Carlo methods}, author = {Fountas, Zafeirios and Sajid, Noor and Mediano, Pedro A.M. and Friston, Karl J.}, booktitle = {Advances in Neural Information Processing Systems}, year = {2020}, url = {https://proceedings.neurips.cc/paper/2020/hash/865dfbde8a344b44095495f3591f7407-Abstract.html} } @article{van2019simulating, title = {Simulating active inference processes by message passing}, author = {van de Laar, Thijs W. and de Vries, Bert}, journal = {Frontiers in Robotics and AI}, year = {2019}, volume = {6}, pages = {20}, doi = {10.3389/frobt.2019.00020} } @article{ueltzhoffer2018deep, title = {Deep active inference}, author = {Ueltzh{\"o}ffer, Kai}, journal = {Biological Cybernetics}, year = {2018}, volume = {112}, number = {6}, pages = {547--573}, doi = {10.1007/s00422-018-0785-7} } @article{tschantz2020learning, title = {Learning action-oriented models through active inference}, author = {Tschantz, Alexander and Seth, Anil K. and Buckley, Christopher L.}, journal = {PLoS Computational Biology}, year = {2020}, volume = {16}, number = {4}, pages = {e1007805}, doi = {10.1371/journal.pcbi.1007805} } @inproceedings{ccatal2020learning, title = {Learning perception and planning with deep active inference}, author = {{\c{C}}atal, Ozan and Verbelen, Tim and Nauta, Johannes and De Boom, Cedric and Dhoedt, Bart}, booktitle = {IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)}, year = {2020}, pages = {3952--3956}, organization = {IEEE}, doi = {10.1109/ICASSP40776.2020.9054364} } @book{penny2011statistical, title = {Statistical parametric mapping: The analysis of functional brain images}, author = {Penny, William D. and Friston, Karl J. and Ashburner, John T. and Kiebel, Stefan J. and Nichols, Thomas E.}, year = {2007}, isbn = {978-0-12-372560-8}, doi = {10.1016/B978-0-12-372560-8.X5000-1} } @article{friston2010free, title = {The free-energy principle: A unified brain theory?}, author = {Friston, Karl J.}, journal = {Nature Reviews Neuroscience}, year = {2010}, volume = {11}, number = {2}, pages = {127--138}, doi = {10.1038/nrn2787} } @article{da2020active, title = {Active inference on discrete state-spaces: A synthesis}, author = {Da Costa, Lancelot and Parr, Thomas and Sajid, Noor and Veselic, Sebastijan and Neacsu, Victorita and Friston, Karl J.}, journal = {Journal of Mathematical Psychology}, year = {2020}, volume = {99}, pages = {102447}, doi = {10.1016/j.jmp.2020.102447} } @article{kaelbling1998planning, title = {Planning and acting in partially observable stochastic domains}, author = {Kaelbling, Leslie Pack and Littman, Michael L. and Cassandra, Anthony R.}, journal = {Artificial Intelligence}, year = {1998}, volume = {101}, number = {1-2}, pages = {99--134}, doi = {10.1016/S0004-3702(98)00023-X} } @article{friston2021sophisticated, title = {Sophisticated inference}, author = {Friston, Karl J. and Da Costa, Lancelot and Hafner, Danijar and Hesp, Casper and Parr, Thomas}, journal = {Neural Computation}, year = {2021}, volume = {33}, number = {3}, pages = {713--763}, doi = {10.1162/neco_a_01351} } @article{schwartenbeck2015dopaminergic, title = {The dopaminergic midbrain encodes the expected certainty about desired outcomes}, author = {Schwartenbeck, Philipp and FitzGerald, Thomas and Mathys, Christoph and Dolan, Ray and Friston, Karl J.}, journal = {Cerebral Cortex}, year = {2015}, volume = {25}, number = {10}, pages = {3434--3445}, doi = {10.1093/cercor/bhu159} } @article{smith2020imprecise, title = {Imprecise action selection in substance use disorder: Evidence for active learning impairments when solving the explore-exploit dilemma}, author = {Smith, Ryan and Schwartenbeck, Philipp and Stewart, Jennifer L. and Kuplicki, Rayus and Ekhtiari, Hamed and Paulus, Martin P. and {Tulsa 1000 Investigators}}, journal = {Drug and Alcohol Dependence}, year = {2020}, volume = {215}, pages = {108208}, doi = {10.1016/j.drugalcdep.2020.108208} } @article{smith2021greater, title = {Greater decision uncertainty characterizes a transdiagnostic patient sample during approach-avoidance conflict: A computational modelling approach}, author = {Smith, Ryan and Kirlic, Namik and Stewart, Jennifer L. and Touthang, James and Kuplicki, Rayus and Khalsa, Sahib S. and Feinstein, Justin and Paulus, Martin P. and Aupperle, Robin L.}, journal = {Journal of Psychiatry \& Neuroscience}, year = {2021}, volume = {46}, number = {1}, pages = {E74}, doi = {10.1503/jpn.200032} } @article{smith2022step, title={A step-by-step tutorial on active inference and its application to empirical data}, author={Smith, Ryan and Friston, Karl J and Whyte, Christopher J}, journal={Journal of Mathematical Psychology}, volume={107}, pages={102632}, year={2022}, publisher={Elsevier}, doi={10.1016/j.jmp.2021.102632} } @article{friston2008variational, title = {DEM: A variational treatment of dynamic systems}, author = {Friston, Karl J. and Trujillo-Barreto, N. and Daunizeau, Jean}, journal = {NeuroImage}, volume = {41}, number = {3}, pages = {849--885}, year = {2008}, doi = {10.1016/j.neuroimage.2008.02.054} } @misc{friston2019free, title={A free energy principle for a particular physics}, author={Friston, Karl}, eprint={1906.10184v1}, archivePrefix={arXiv}, primaryClass={q-bio.NC}, year={2019} } @article{millidge2020deep, title = {Deep active inference as variational policy gradients}, author = {Millidge, Beren}, journal = {Journal of Mathematical Psychology}, year = {2020}, volume = {96}, pages = {102348}, doi = {10.1016/j.jmp.2020.102348} } @inproceedings{millidge2020relationship, title = {On the relationship between active inference and control as inference}, author = {Millidge, Beren and Tschantz, Alexander and Seth, Anil K. and Buckley, Christopher L.}, booktitle = {International Workshop on Active Inference}, year = {2020}, pages = {3--11}, organization = {Springer}, doi = {10.1007/978-3-030-64919-7_1} } @article{ForneyLab2019, title = {A factor graph approach to automated design of {Bayesian} signal processing algorithms}, volume = {104}, issn = {0888-613X}, url = {http://www.sciencedirect.com/science/article/pii/S0888613X18304298}, doi = {10.1016/j.ijar.2018.11.002}, abstract = {The benefits of automating design cycles for Bayesian inference-based algorithms are becoming increasingly recognized by the machine learning community. As a result, interest in probabilistic programming frameworks has much increased over the past few years. This paper explores a specific probabilistic programming paradigm, namely message passing in Forney-style factor graphs (FFGs), in the context of automated design of efficient Bayesian signal processing algorithms. To this end, we developed “ForneyLab”2 as a Julia toolbox for message passing-based inference in FFGs. We show by example how ForneyLab enables automatic derivation of Bayesian signal processing algorithms, including algorithms for parameter estimation and model comparison. Crucially, due to the modular makeup of the FFG framework, both the model specification and inference methods are readily extensible in ForneyLab. In order to test this framework, we compared variational message passing as implemented by ForneyLab with automatic differentiation variational inference (ADVI) and Monte Carlo methods as implemented by state-of-the-art tools “Edward” and “Stan”. In terms of performance, extensibility and stability issues, ForneyLab appears to enjoy an edge relative to its competitors for automated inference in state-space models.}, urldate = {2018-11-16}, journal = {International Journal of Approximate Reasoning}, author = {Cox, Marco and van de Laar, Thijs and de Vries, Bert}, month = jan, year = {2019}, keywords = {Bayesian inference, Message passing, Factor graphs, Julia, Probabilistic programming}, pages = {185--204} } @article{gregory1980perceptions, title={Perceptions as hypotheses}, author={Gregory, Richard Langton}, journal={Philosophical Transactions of the Royal Society of London. B, Biological Sciences}, volume={290}, number={1038}, pages={181--197}, year={1980}, publisher={The Royal Society London}, doi={10.1098/rstb.1980.0090} } @misc{brockman2016openai, title={Openai gym}, author={Brockman, Greg and Cheung, Vicki and Pettersson, Ludwig and Schneider, Jonas and Schulman, John and Tang, Jie and Zaremba, Wojciech}, eprint={1606.01540v1}, archivePrefix={arXiv}, primaryClass={cs.LG}, year={2016} } @article{friston2016active, title = {Active inference and learning}, author = {Friston, Karl J. and FitzGerald, Thomas and Rigoli, Francesco and Schwartenbeck, Philipp and O'Doherty, John and Pezzulo, Giovanni}, journal = {Neuroscience \& Biobehavioral Reviews}, year = {2016}, volume = {68}, pages = {862--879}, doi = {10.1016/j.neubiorev.2016.06.022} } @article{dayan1995helmholtz, title = {The Helmholtz Machine}, author = {Dayan, Peter and Hinton, Geoffrey E. and Neal, Radford M. and Zemel, Richard S.}, journal = {Neural Computation}, year = {1995}, volume = {7}, number = {5}, pages = {889--904}, doi = {10.1162/neco.1995.7.5.889} } @misc{von1910treatise, title = {Treatise on physiological optics (Vol. 3)}, author = {Von Helmholtz, Herman and Southall, JPC}, year = {1910}, publisher = {Dover, New York}, doi = {10.1037/13536-000} } @inproceedings{hinton1983optimal, title = {Optimal perceptual inference}, author = {Hinton, Geoffrey E. and Sejnowski, Terrence J.}, booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition}, volume = {448}, year = {1983}, organization = {Citeseer}, url = {http://www.cs.toronto.edu/~hinton/absps/optimal.pdf} } @inproceedings{baioumy2021towards, title={Towards Stochastic Fault-Tolerant Control Using Precision Learning and Active Inference}, author={Baioumy, Mohamed and Pezzato, Corrado and Corbato, Carlos Hernandez and Hawes, Nick and Ferrari, Riccardo}, booktitle={Machine Learning and Principles and Practice of Knowledge Discovery in Databases}, year={2022}, publisher={Springer International Publishing}, pages={681--691}, isbn={978-3-030-93736-2}, doi = {10.1007/978-3-030-93736-2_48} } @article{ccatal2021robot, title = {Robot navigation as hierarchical active inference}, author = {{\c{C}}atal, Ozan and Verbelen, Tim and Van de Maele, Toon and Dhoedt, Bart and Safron, Adam}, journal = {Neural Networks}, year = {2021}, volume = {142}, pages = {192--204}, doi = {10.1016/j.neunet.2021.05.010} } @article{wirkuttis2021leading, title = {Leading or following? Dyadic robot imitative interaction using the active inference framework}, author = {Wirkuttis, Nadine and Tani, Jun}, journal = {IEEE Robotics and Automation Letters}, year = {2021}, volume = {6}, number = {3}, pages = {6024--6031}, doi = {10.1109/LRA.2021.3090015} } @article{martinez2021probabilistic, title = {Probabilistic modeling for optimization of bioreactors using reinforcement learning with active inference}, author = {Mart{\'i}nez, Ernesto C. and Kim, Jong Woo and Barz, Tilman and Bournazou, Mariano N. Cruz}, journal = {Computer Aided Chemical Engineering}, year = {2021}, volume = {50}, pages = {419--424}, doi = {10.1016/B978-0-323-88506-5.50066-8} } @misc{moreno2021pid, title = {PID control as a process of active inference applied to a refrigeration system}, author = {Moreno, Adri{\'a}n Rocandio}, year = {2021}, url = {https://projekter.aau.dk/projekter/files/415131289/1034_PID_Control_as_Active_Inference.pdf} } @article{parr2019generalised, title = {Generalised free energy and active inference}, author = {Parr, Thomas and Friston, Karl J.}, journal = {Biological Cybernetics}, year = {2019}, volume = {113}, number = {5}, pages = {495--513}, doi = {10.1007/s00422-019-00805-w} } @article{fox2021active, title = {Active inference: Applicability to different types of social organization explained through reference to industrial engineering and quality management}, author = {Fox, Stephen}, journal = {Entropy}, year = {2021}, volume = {23}, number = {2}, pages = {198}, doi = {10.3390/e23020198} } @article{tison2021communication, title = {Communication as socially extended active inference: An ecological approach to communicative behavior}, author = {Tison, Remi and Poirier, Pierre}, journal = {Ecological Psychology}, year = {2021}, volume = {33}, pages = {197--235}, doi = {10.1080/10407413.2021.1965480} } @article{friston2013life, title = {Life as we know it}, author = {Friston, Karl J.}, journal = {Journal of the Royal Society Interface}, year = {2013}, volume = {10}, number = {86}, pages = {20130475}, doi = {10.1098/rsif.2013.0475} } @article{schwartenbeck2019computational, title = {Computational mechanisms of curiosity and goal-directed exploration}, author = {Schwartenbeck, Philipp and Passecker, Johannes and Hauser, Tobias U. and FitzGerald, Thomas and Kronbichler, Martin and Friston, Karl J.}, journal = {Elife}, year = {2019}, volume = {8}, pages = {e41703}, doi = {10.7554/eLife.41703} } @article{friston2017active, title = {Active inference, curiosity and insight}, author = {Friston, Karl J. and Lin, Marco and Frith, Christopher D. and Pezzulo, Giovanni and Hobson, J. Allan and Ondobaka, Sasha}, journal = {Neural Computation}, year = {2017}, volume = {29}, number = {10}, pages = {2633--2683}, doi = {10.1162/neco_a_00999} } @misc{lance_lnA, author = "Da Costa, Lancelot", date = "2021", howpublished = "Personal communication" } @article{holmes2021active, title={Active inference, selective attention, and the cocktail party problem}, author={Holmes, Emma and Parr, Thomas and Griffiths, Timothy D and Friston, Karl J}, journal={Neuroscience \& Biobehavioral Reviews}, volume={131}, pages={1288--1304}, year={2021}, publisher={Elsevier}, doi={10.1016/j.neubiorev.2021.09.038} } @article{adams2021everything, title={Everything is connected: Inference and attractors in delusions}, author={Adams, Rick A and Vincent, Peter and Benrimoh, David and Friston, Karl J and Parr, Thomas}, journal={Schizophrenia research}, year={2021}, publisher={Elsevier}, doi={10.1016/j.schres.2021.07.032} } @article{parr2020prefrontal, title={Prefrontal computation as active inference}, author={Parr, Thomas and Rikhye, Rajeev Vijay and Halassa, Michael M and Friston, Karl J}, journal={Cerebral Cortex}, volume={30}, number={2}, pages={682--695}, year={2020}, publisher={Oxford University Press}, doi={10.1093/cercor/bhz118} } @article{smith2021long, title={Long-term stability of computational parameters during approach-avoidance conflict in a transdiagnostic psychiatric patient sample}, author={Smith, Ryan and Kirlic, Namik and Stewart, Jennifer L and Touthang, James and Kuplicki, Rayus and McDermott, Timothy J and Taylor, Samuel and Khalsa, Sahib S and Paulus, Martin P and Aupperle, Robin L}, journal={Scientific reports}, volume={11}, number={1}, pages={1--13}, year={2021}, publisher={Nature Publishing Group}, doi={10.1038/s41598-021-91308-x} } ================================================ FILE: paper/paper.md ================================================ --- title: 'pymdp: A Python library for active inference in discrete state spaces' tags: - Python - active inference - Markov Decision Process - POMDP - MDP - Reinforcement Learning - Artificial Intelligence - Bayesian inference - free energy principle authors: - name: Conor Heins^[corresponding author] affiliation: "1, 2, 3, 4" - name: Beren Millidge affiliation: "4, 5" - name: Daphne Demekas affiliation: "6" - name: Brennan Klein orcid: 0000-0001-8326-5044 affiliation: "4, 7, 8" - name: Karl Friston affiliation: "9" - name: Iain D. Couzin affiliation: "1, 2, 3" - name: Alexander Tschantz^[corresponding author] affiliation: "4, 10, 11" affiliations: - name: Department of Collective Behaviour, Max Planck Institute of Animal Behavior, 78457 Konstanz, Germany index: 1 - name: Centre for the Advanced Study of Collective Behaviour, 78457 Konstanz, Germany index: 2 - name: Department of Biology, University of Konstanz, 78457 Konstanz, Germany index: 3 - name: VERSES Research Lab, Los Angeles, California, USA index: 4 - name: MRC Brain Networks Dynamics Unit, University of Oxford, Oxford, UK index: 5 - name: Department of Computing, Imperial College London, London, UK index: 6 - name: Network Science Institute, Northeastern University, Boston, MA, USA index: 7 - name: Laboratory for the Modeling of Biological and Socio-Technical Systems, Northeastern University, Boston, USA index: 8 - name: Wellcome Centre for Human Neuroimaging, Queen Square Institute of Neurology, University College London, London WC1N 3AR, UK index: 9 - name: Sussex AI Group, Department of Informatics, University of Sussex, Brighton, UK index: 10 - name: Sackler Centre for Consciousness Science, University of Sussex, Brighton, UK index: 11 date: 14 January 2022 bibliography: paper.bib --- # Statement of Need Active inference is an account of cognition and behavior in complex systems which brings together action, perception, and learning under the theoretical mantle of Bayesian inference [@friston_reinforcement_2009; @friston_active_2012; @friston2015active; @friston2017process]. Active inference has seen growing applications in academic research, especially in fields that seek to model human or animal behavior [@parr2020prefrontal; @holmes2021active; @adams2021everything]. The majority of applications have focused on cognitive neuroscience, with a particular focus on modelling decision-making under uncertainty [@schwartenbeck2015dopaminergic; @smith2020imprecise; @smith2021greater]. Nonetheless, the framework has broad applicability and has recently been applied to diverse disciplines, ranging from computational models of psychopathology [@montague2012computational; @smith2021greater], control theory [@baltieri2019pid; @millidge2020relationship; @baioumy2021towards] and reinforcement learning [@tschantz2020reinforcement; @tschantz2020scaling; @sajid2021active; @fountas2020deep; @millidge2020deep], through to social cognition [@adams2021everything; @wirkuttis2021leading; @tison2021communication] and even real-world engineering problems [@martinez2021probabilistic; @moreno2021pid; @fox2021active]. While in recent years, some of the code arising from the active inference literature has been written in open source languages like Python and Julia [@ueltzhoffer2018deep; @van2019simulating; @tschantz2020learning; @ccatal2020learning; @millidge2020deep], to-date, the most popular software for simulating active inference agents is the `DEM` toolbox of `SPM` [@friston2008variational; @smith2022step], a MATLAB library originally developed for the statistical analysis and modelling of neuroimaging data [@penny2011statistical]. `DEM` contains a reliable, reproducible set of functions for studying active inference, but the use of the toolbox can be restrictive for researchers in settings where purchasing a MATLAB license is financially costly. And although active inference researchers have relied heavily on `DEM` for simulating and fitting models of behavior, most of its functionality is restricted to single MATLAB scripts or functions, particularly one called `spm_MDP_VB_X.m`, that lack modularity and often must be customized for applications on a domain-specific basis. Increasing interest in active inference, manifested both in terms of sheer number of cited research papers as well as diversifying applications across disciplines, has thus created a need for generic, widely-available, and user-friendly code for simulating active inference in open-source scientific computing languages like Python. The software we present here, [`pymdp`](https://github.com/infer-actively/pymdp), represents a significant step in this direction: namely, we provide the first open-source package for simulating active inference with discrete state-space generative models. The name `pymdp` derives from the fact that the package is written in the **Py**thon programming language and concerns discrete, Markovian generative models of decision-making, which take the form of Markov Decision Processes or **MDP**s. `pymdp` is a Python package that is directly inspired by the active inference routines contained in `DEM`. However, `pymdp` is has a modular, flexible structure that allows researchers to build and simulate active inference agents quickly and with a high degree of customization. We developed `pymdp` in the hopes that it will increase the accessibility and exposure of the active inference framework to researchers, engineers, and developers with diverse disciplinary backgrounds. In the spirit of open-source software, we also hope that it spurs new innovation, development, and collaboration in the growing active inference and wider Bayesian modelling communities. For additional pedagogical and technical resources on `pymdp`, we refer the reader to the package's github repository. We also encourage more technically-interested readers to consult a companion preprint article that includes technical material covering the mathematics of active inference in discrete state spaces [@heins2022pymdp_arxiv]. # Summary `pymdp` offers a suite of robust, tested, and modular routines for simulating active inference agents equipped with *partially-observable Markov Decision Process* (POMDP) generative models. Mathematically, a POMDP comprises a joint distribution over observations $o$, hidden states $s$, control states $u$ and hyperparameters $\phi$: $P(o, s, u, \phi)$. This joint distribution further factorizes into a set of categorical and Dirichlet distributions: the likelihoods and priors of the generative model. With `pymdp`, one can build a generative model using a set of prior and likelihood distributions, initialize an agent, and then link it to an external environment to run active inference processes - all in a few lines of code. The `Agent` and `Env` (environment) APIs of `pymdp` are built according to the standardized framework of OpenAIGym commonly used in reinforcement learning, where an agent and environment object recursively exchange observations and actions over time [@brockman2016openai]. # Introduction Simulations of active inference are commonly performed in discrete time and space [@friston2015active; @da2020active]. This is partially motivated by the mathematical tractability of performing inference with discrete probability distributions, but also by the intuition of modelling choice behavior as a sequence of discrete, mutually-exclusive choices in, e.g., psychophysics or decision-making experiments. The most popular generative models -- used to realize active inference in this context -- are partially-observable Markov Decision Processes or *POMDPs* [@kaelbling1998planning]. POMDPs are state-space models that model the environment in terms of hidden states that stochastically change over time, as a function of both the current state of the environment as well as the behavioral output of an agent (control states or actions). Crucially, the environment is *partially-observable*, i.e. the hidden states are not directly observed by the agent, but can only be inferred through observations that relate to hidden states in a probabilistic manner, such that observations are modelled as being generated stochastically from the current hidden state. This necessitates both "perceptual" inference of hidden states as well as control. As such, in most POMDP problems, an agent is tasked with inferring the hidden state of its environment and then choosing a sequence of control states or actions to change hidden states in a way that leads to desired outcomes (maximizing reward, or occupancy within some preferred set of states). # Usage In order to enhance the user-friendliness of `pymdp` without sacrificing flexibility, we have built the library to be highly modular and customizable, such that agents in `pymdp` can be specified at a variety of levels of abstraction with desired parameterisations. The methods of the `Agent` class can thus be called in any particular order, depending on the application, and furthermore they can be specified with various keyword arguments that entail choices of implementation details at lower levels. By retaining a modular structure throughout the package's dependency hierarchy, `pymdp` also affords the ability to flexibly compose different low level functions. This allows users to customize and integrate their active inference loops with desired inference algorithms and policy selection routines. For instance, one could sub-class the `Agent` class and write a customized `step()` function, that combines whichever components of active inference one is interested in. # Related software packages The `DEM` toolbox within `SPM` in MATLAB is the current gold-standard in active inference modelling. In particular, simulating an active inference process in `DEM` consists of defining the generative model in terms of a fixed set of matrices and vectors, and then calling the `spm_MDP_VB_X.m` function to simulate a sequence of trials. `pymdp`, by contrast, provides a user-friendly and modular development experience, with core functionality split up into different libraries that separately perform the computations of active inference in a standalone fashion. Moreover, `pymdp` provides the user the ability to write an active inference process at different levels of abstraction depending on the user's level of expertise or skill with the package -- ranging from the high level `Agent` functionality, which allows the user to define and simulate an active inference agent in just a few lines of code, all the way to specifying a particular variational inference algorithm (e.g., marginal-message passing [@parr2019neuronal]) for the agent to use during state estimation. In the `DEM` toolbox of `SPM`, this would require setting undocumented flags or else manually editing the routines in `spm_MDP_VB_X.m` to enable or disable bespoke functionality. There has been one recent attempt at creating a comprehensive user-guide for building active inference agents in `DEM` [@smith2022step], though to our knowledge there has not been a package devoted to the open source development of these powerful software tools. A recent related, but largely non-overlapping project is [ForneyLab](https://github.com/biaslab/ForneyLab.jl), which provides a set of Julia libraries for performing approximate Bayesian inference via message passing on Forney Factor Graphs [@ForneyLab2019]. Notably, this package has also seen several applications in simulating active inference processes, using ForneyLab as the backend for the inference algorithms employed by an active inference agent [@van2019simulating; @vanderbroeck2019active; @ergul2020learning; @10.1162/neco_a_01427]. While ForneyLab focuses on including a rigorous set of message passing routines that can be used to simulate active inference agents, `pymdp` is specifically designed to help users quickly build agents (regardless of their underlying inference routines) and plug them into arbitrary environments to run active inference in a few easy steps. # Funding Statement CH and IDC acknowledge support from the Office of Naval Research grant (ONR, N00014- 64019-1-2556), with IDC further acknowledging support from the European Union’s Horizon 2020 research and innovation programme under the Marie Skłodowska-Curie grant agreement (ID: 860949), the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany’s Excellence Strategy-EXC 2117- 422037984, and the Max Planck Society. KF is supported by funding for the Wellcome Centre for Human Neuroimaging (Ref: 205103/Z/16/Z) and the Canada-UK Artificial Intelligence Initiative (Ref: ES/T01279X/1). CH, DD, and BK acknowledge the support of a grant from the John Templeton Foundation (61780). The opinions expressed in this publication are those of the author(s) and do not necessarily reflect the views of the John Templeton Foundation. # Acknowledgements The authors would like to thank Dimitrije Markovic, Arun Niranjan, Sivan Altinakar, Mahault Albarracin, Alex Kiefer, Magnus Koudahl, Ryan Smith, Casper Hesp, and Maxwell Ramstead for discussions and feedback that contributed to development of `pymdp`. We would also like to thank Thomas Parr for pointing out a technical error in an earlier version of the arXiv preprint for this work. Finally, we are grateful to the many users of `pymdp` whose feedback and usage of the package have contributed to its continued improvement and development. # References ================================================ FILE: pymdp/__init__.py ================================================ ================================================ FILE: pymdp/agent.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """Agent API for Active Inference with the modern JAX backend.""" import math as pymath import warnings import jax.numpy as jnp import jax.tree_util as jtu from jax import nn, vmap from pymdp import inference, control, learning, utils from pymdp.distribution import Distribution, get_dependencies from equinox import Module, field, tree_at from typing import Any, Callable, Optional, Sequence, Union from jaxtyping import Array from functools import partial from jax import lax class Agent(Module): """ The Agent class, the highest-level API that wraps together processes for action, perception, and learning under active inference. Examples -------- A single timestep of active inference: from jax import random as jr my_agent = Agent(A=A, B=B, C=C, ) observation = env.step(initial_action) qs = my_agent.infer_states(observation, empirical_prior=my_agent.D) q_pi, neg_efe = my_agent.infer_policies(qs) keys = jr.split(rng_key, my_agent.batch_size + 1) next_action = my_agent.sample_action(q_pi, rng_key=keys[1:]) next_observation = env.step(next_action) This represents one timestep of an active inference process. Wrapping this step in a loop with an `Env()` class that returns observations and takes actions as inputs, would entail a dynamic agent-environment interaction. Observation Formats ------------------- Observations can be provided in two formats: 1. **Discrete observations** (default, categorical_obs=False): Each `observations[m]` is an integer observation index for modality `m`. These are converted to one-hot vectors internally. 2. **Categorical observations** (categorical_obs=True): Each `observations[m]` is a probability vector over observations for modality `m`. Advanced preprocessing ---------------------- You can override default preprocessing with `preprocess_fn` (set on the agent or per `infer_states` call). If provided, this function should return categorical observations and takes precedence over default discrete/categorical handling. """ A: list[Array] B: list[Array] C: list[Array] D: list[Array] E: Array pA: list[Array] pB: list[Array] gamma: Array alpha: Array # matrix of all possible policies (each row is a policy of shape (num_controls[0], num_controls[1], ..., num_controls[num_control_factors-1]) policies: control.Policies = field(static=True) # threshold for inductive inference (the threshold for pruning transitions that are below a certain probability) inductive_threshold: Array # epsilon for inductive inference (trade-off/weight for how much inductive value contributes to EFE of policies) inductive_epsilon: Array # H vectors (one per hidden state factor) used for inductive inference -- these encode goal states or constraints H: list[Array] # I matrices (one per hidden state factor) used for inductive inference -- these encode the 'reachability' matrices of goal states encoded in `self.H` I: list[Array] # static parameters not leaves of the PyTree A_dependencies: Optional[list[list[int]]] = field(static=True) B_dependencies: Optional[list[list[int]]] = field(static=True) B_action_dependencies: Optional[list[list[int]]] = field(static=True) # mapping from multi action dependencies to flat action dependencies for each B action_maps: list[dict] = field(static=True) batch_size: int = field(static=True) num_iter: int = field(static=True) num_obs: list[int] = field(static=True) num_modalities: int = field(static=True) num_states: list[int] = field(static=True) num_factors: int = field(static=True) num_controls: list[int] = field(static=True) # Used to store original action dimensions in case there are multiple action dependencies per state num_controls_multi: list[int] = field(static=True) control_fac_idx: Optional[list[int]] = field(static=True) # depth of planning during roll-outs (i.e. number of timesteps to look ahead when computing expected free energy of policies) policy_len: int = field(static=True) # number of past timesteps (including current) to use for sequence inference (mmp, vmp, exact) inference_horizon: Optional[int] = field(static=True) # depth of inductive inference (i.e. number of future timesteps to use when computing inductive `I` matrix) inductive_depth: int = field(static=True) # flag for whether to use expected utility ("reward" or "preference satisfaction") when computing expected free energy use_utility: bool = field(static=True) # flag for whether to use state information gain ("salience") when computing expected free energy use_states_info_gain: bool = field(static=True) # flag for whether to use parameter information gain ("novelty") when computing expected free energy use_param_info_gain: bool = field(static=True) # flag for whether to use inductive inference ("intentional inference") when computing expected free energy use_inductive: bool = field(static=True) categorical_obs: bool = field(static=True) preprocess_fn: Optional[Callable] = field(static=True) # determinstic or stochastic action selection action_selection: str = field(static=True) # whether to sample from full posterior over policies ("full") or from marginal posterior over actions ("marginal") sampling_mode: str = field(static=True) # fpi, vmp, mmp, ovf, exact inference_algo: str = field(static=True) # whether to perform learning online or offline (options: "online", "offline") learning_mode: str = field(static=True, default="online") learn_A: bool = field(static=True) learn_B: bool = field(static=True) learn_C: bool = field(static=True) learn_D: bool = field(static=True) learn_E: bool = field(static=True) def __init__( self, A: Union[list[Array], list[Distribution]], B: Union[list[Array], list[Distribution]], C: Optional[list[Array]] = None, D: Optional[list[Array]] = None, E: Optional[Array] = None, pA: Optional[list[Array]] = None, pB: Optional[list[Array]] = None, H: Optional[list[Array]] = None, I: Optional[list[Array]] = None, A_dependencies: Optional[list[list[int]]] = None, B_dependencies: Optional[list[list[int]]] = None, B_action_dependencies: Optional[list[list[int]]] = None, num_controls: Optional[list[int]] = None, control_fac_idx: Optional[list[int]] = None, policy_len: int = 1, policies: Optional[Union[Array, control.Policies]] = None, gamma: float | Array = 1.0, alpha: float | Array = 1.0, inductive_depth: int = 1, inductive_threshold: float | Array = 0.1, inductive_epsilon: float | Array = 1e-3, use_utility: bool = True, use_states_info_gain: bool = True, use_param_info_gain: bool = False, use_inductive: bool = False, categorical_obs: bool = False, preprocess_fn: Optional[Callable] = None, action_selection: str = "deterministic", sampling_mode: str = "full", inference_algo: str = "fpi", inference_horizon: Optional[int] = None, num_iter: int = 16, batch_size: int = 1, learning_mode: str = "online", # TODO: or should this be an argument to `self.infer_parameters()` or even `env/rollout.py:rollout()` learn_A: bool = False, learn_B: bool = False, learn_C: bool = False, learn_D: bool = False, learn_E: bool = False, ) -> None: if B_action_dependencies is not None: assert num_controls is not None, "Please specify num_controls if you're also using complex action dependencies" if learn_A: assert pA is not None, "pA is required for A learning" # extract high level variables self.num_modalities = len(A) self.num_factors = len(B) self.num_controls = num_controls self.num_controls_multi = num_controls # extract dependencies for A and B matrices ( self.A_dependencies, self.B_dependencies, self.B_action_dependencies, ) = self._construct_dependencies(A_dependencies, B_dependencies, B_action_dependencies, A, B) # extract A, B, C and D tensors from optional Distributions A = [jnp.array(a.data) if isinstance(a, Distribution) else a for a in A] B = [jnp.array(b.data) if isinstance(b, Distribution) else b for b in B] if C is not None: C = [jnp.array(c.data) if isinstance(c, Distribution) else c for c in C] if D is not None: D = [jnp.array(d.data) if isinstance(d, Distribution) else d for d in D] if E is not None: E = jnp.array(E.data) if isinstance(E, Distribution) else E if H is not None: H = [jnp.array(h.data) if isinstance(h, Distribution) else h for h in H] if pA is not None: pA = [jnp.array(pa) for pa in pA] if pB is not None: pB = [jnp.array(pb) for pb in pB] self.batch_size = batch_size # flatten B action dims for multiple action dependencies self.action_maps = None if ( policies is None and B_action_dependencies is not None ): # note, this only works when B_action_dependencies is not the trivial case of [[0], [1], ...., [num_factors-1]] policies_multi = control.construct_policies( self.num_controls_multi, self.num_controls_multi, policy_len, control_fac_idx, ) B, pB, self.action_maps = self._flatten_B_action_dims(B, pB, self.B_action_dependencies) policies = self._construct_flattend_policies(policies_multi, self.action_maps) self.sampling_mode = "full" # extract shapes from A and B self.num_states = self._get_num_states_from_B(B, self.B_dependencies) self.num_controls = [b_f.shape[-1] for b_f in B] # dimensions of control states for each hidden state factor # check that batch_size is consistent with shapes of given A and B for m, a_m in enumerate(A): a_m_state_factors = tuple([self.num_states[f] for f in self.A_dependencies[m]]) if a_m.ndim > (len(a_m_state_factors) + 1): # this indicates there's a leading batch dimension if a_m.shape[0] == 1 and batch_size > 1: A[m] = jnp.broadcast_to(a_m, (batch_size,) + a_m.shape[1:]) if pA is not None: pA[m] = jnp.broadcast_to(pA[m], (batch_size,) + a_m.shape[1:]) if C is not None: C[m] = jnp.broadcast_to(C[m], (batch_size,) + C[m].shape[1:]) elif a_m.shape[0] != batch_size: raise ValueError( f"Batch size {batch_size} does not match the first dimension of A[{m}] with shape {a_m.shape}" ) elif a_m.ndim == (len(a_m_state_factors) + 1): # this indicates no leading batch dimension A[m] = jnp.broadcast_to(a_m, (batch_size,) + a_m.shape) if pA is not None: pA[m] = jnp.broadcast_to(pA[m], (batch_size,) + a_m.shape) if C is not None: C[m] = jnp.broadcast_to(C[m], (batch_size,) + C[m].shape) for f, b_f in enumerate(B): b_f_state_factors = tuple([self.num_states[f] for f in self.B_dependencies[f]]) if b_f.ndim > (len(b_f_state_factors) + 2): # this indicates there's a leading batch dimension if b_f.shape[0] == 1 and batch_size > 1: B[f] = jnp.broadcast_to(b_f, (batch_size,) + b_f.shape[1:]) if pB is not None: pB[f] = jnp.broadcast_to(pB[f], (batch_size,) + b_f.shape[1:]) if D is not None: D[f] = jnp.broadcast_to(D[f], (batch_size,) + D[f].shape[1:]) elif b_f.shape[0] != batch_size: raise ValueError( f"Batch size {batch_size} does not match the first dimension of B[{f}] with shape {b_f.shape}" ) elif b_f.ndim == (len(b_f_state_factors) + 2): # this indicates no leading batch dimension B[f] = jnp.broadcast_to(b_f, (batch_size,) + b_f.shape) if pB is not None: pB[f] = jnp.broadcast_to(pB[f], (batch_size,) + b_f.shape) if D is not None: D[f] = jnp.broadcast_to(D[f], (batch_size,) + D[f].shape) # now that shapes of A/B have been made consistent and have (batch_size,)-sized leading dimension applied, we can infer num_obs from the first dimension of A self.num_obs = [a_m.shape[1] for a_m in A] # dimensions of observations for each modality # static parameters self.num_iter = num_iter self.inference_algo = inference_algo.lower() if isinstance(inference_algo, str) else inference_algo self.inference_horizon = inference_horizon self.inductive_depth = inductive_depth if self.inference_horizon is not None and self.inference_horizon < 1: raise ValueError("`inference_horizon` must be >= 1 when provided") if use_inductive and self.inductive_depth < 1: raise ValueError("`inductive_depth` must be >= 1 when `use_inductive` is True") # policy parameters self.policy_len = policy_len self.action_selection = action_selection self.sampling_mode = sampling_mode self.use_utility = use_utility self.use_states_info_gain = use_states_info_gain self.use_param_info_gain = use_param_info_gain self.use_inductive = use_inductive # learning parameters self.learning_mode = learning_mode self.learn_A = learn_A self.learn_B = learn_B self.learn_C = learn_C self.learn_D = learn_D self.learn_E = learn_E # construct control factor indices if control_fac_idx is None: self.control_fac_idx = [f for f in range(self.num_factors) if self.num_controls[f] > 1] else: msg = "Check control_fac_idx - must be consistent with `num_states` and `num_factors`..." assert max(control_fac_idx) <= (self.num_factors - 1), msg self.control_fac_idx = control_fac_idx # construct policies if policies is None: policies_array = control.construct_policies( self.num_states, self.num_controls, self.policy_len, self.control_fac_idx, ) self.policies = control.Policies(policies_array) else: if not isinstance(policies, control.Policies): self.policies = control.Policies(jnp.array(policies)) else: self.policies = policies if C is None: C = [jnp.ones((self.batch_size, self.num_obs[m])) / self.num_obs[m] for m in range(self.num_modalities)] if D is None: D = [jnp.ones((self.batch_size, self.num_states[f])) / self.num_states[f] for f in range(self.num_factors)] if E is None: E = jnp.ones((self.batch_size, self.policies.num_policies)) / self.policies.num_policies else: if E.ndim > 1: if E.shape[0] == 1 and batch_size > 1: E = jnp.broadcast_to(E, (batch_size,) + E.shape[1:]) elif E.shape[0] != batch_size: raise ValueError( f"Batch size {batch_size} does not match the first dimension of E with shape {E.shape}" ) elif E.ndim == 1: E = jnp.broadcast_to(E, (self.batch_size,) + E.shape) if H is not None: for f, h_f in enumerate(H): if h_f.ndim > 1: if h_f.shape[0] == 1 and batch_size > 1: H[f] = jnp.broadcast_to(h_f, (batch_size,) + h_f.shape[1:]) elif h_f.shape[0] != batch_size: raise ValueError( f"Batch size {batch_size} does not match the first dimension of H[{f}] with shape {h_f.shape}" ) elif h_f.ndim == 1: H[f] = jnp.broadcast_to(h_f, (self.batch_size,) + h_f.shape) self.A = A self.B = B self.C = C self.D = D self.E = E self.H = H self.pA = pA self.pB = pB self.gamma = jnp.broadcast_to(gamma, (self.batch_size,)) self.alpha = jnp.broadcast_to(alpha, (self.batch_size,)) self.inductive_threshold = jnp.broadcast_to(inductive_threshold, (self.batch_size,)) self.inductive_epsilon = jnp.broadcast_to(inductive_epsilon, (self.batch_size,)) if self.use_inductive and H is not None: I = vmap( partial( control.generate_I_matrix, depth=self.inductive_depth, ) )(H, B, self.inductive_threshold) elif self.use_inductive and I is not None: I = I else: I = jtu.tree_map(lambda x: jnp.expand_dims(jnp.zeros_like(x), 1), D) self.I = I self.categorical_obs = categorical_obs self.preprocess_fn = preprocess_fn if (self.preprocess_fn is not None) and (self.categorical_obs is False): warnings.warn( "preprocess_fn is set while categorical_obs=False. If your preprocess_fn returns " "categorical distributions, set categorical_obs=True so that learning/planning can " "interpret observations correctly.", UserWarning, stacklevel=2, ) # validate model self._validate() @property def unique_multiactions(self) -> Array: size = pymath.prod(self.num_controls) return jnp.unique(self.policies.policy_arr[:, 0], axis=0, size=size, fill_value=-1) def _get_num_states_from_B(self, B: list[Array], B_dependencies: list[list[int]]) -> list[int]: """ Use the shapes of B and the B_dependencies to determine the number of states for each factor.""" num_states = [] for (f, B_deps_f) in enumerate(B_dependencies): if f in B_deps_f: self_factor_index = B_deps_f.index(f) else: raise ValueError(f"num_states cannot be inferred from B, B_dependencies if the dynamics of hidden state {f} is not conditioned on itself") num_states_f = B[f].shape[-(len(B_deps_f) + 1 - self_factor_index)] num_states.append(num_states_f) return num_states def infer_parameters( self, beliefs_A: list[Array], observations: list[Array], actions: Array | None, beliefs_B: list[Array] | None = None, lr_pA: float = 1.0, lr_pB: float = 1.0, **kwargs: Any, ) -> "Agent": """Update Dirichlet parameters for `A` and/or `B` models from data. Parameters ---------- beliefs_A: list[Array] Marginal state beliefs used when updating the observation model parameters. observations: list[Array] Observation histories for each modality. actions: Array or None Action history aligned to time. For multi-action agents this should be shaped `(batch, T, num_factors)`. beliefs_B: list[Array] | None, optional Optional sequence of beliefs used for transition updates. If `None`, transition updates are skipped. lr_pA: float, default=1.0 Learning-rate multiplier for `A` updates. lr_pB: float, default=1.0 Learning-rate multiplier for `B` updates. **kwargs: Any Reserved for future arguments. Returns ------- Agent Agent instance with updated `pA`, `A`, `pB`, and `B` where learning is enabled. """ agent = self # ------------------------------------------------------------------ # Prepare the sequences we'll use for A- and B- learning # ------------------------------------------------------------------ # For updating A we use 'marginal_beliefs' (possibly smoothed under OVF). # For updating B we need a *time* sequence to construct joints or run smoothing. seq_beliefs = beliefs_A if beliefs_B is None else beliefs_B # (list over factors) each (B, T, Ns_f) # Normalize action shape to include time if needed if actions is not None and actions.ndim == 2: # (B, Nu) -> (B, 1, Nu) so we can slice to T-1 below actions = jnp.expand_dims(actions, 1) # Infer sequence length (T) from beliefs provided for B learning # If learn_B is False we don't need a time sequence, but computing T is cheap and safe T = seq_beliefs[0].shape[1] # each factor has (B, T, Ns_f) # Make actions time-conformant: always slice to T-1 along time if actions is not None and actions.ndim == 3: actions_Tm1 = actions[:, :max(T - 1, 0), :] # (B, max(T-1, 0), Nu) else: actions_Tm1 = actions # None or already time-matched if actions_Tm1 is not None: valid_transition_mask = jnp.all(actions_Tm1 >= 0, axis=-1) else: valid_transition_mask = None # A handy predicate: can we (meaningfully) apply sequence-based smoothing or # B-joint construction for this update window? # We need at least one valid transition. can_update_Beliefs = ( actions_Tm1 is not None and (T > 1) and (actions_Tm1.shape[1] == (T - 1)) and jnp.any(valid_transition_mask) ) # Full B-parameter update additionally requires `self.learn_B`. can_update_B = ( self.learn_B and can_update_Beliefs ) def _apply_transition_mask(joint_beliefs: list[Array] | None) -> list[Array] | None: if valid_transition_mask is None: return joint_beliefs def _mask_joint(x: Array) -> Array: mask = valid_transition_mask.astype(x.dtype).reshape( valid_transition_mask.shape + (1,) * (x.ndim - 2) ) return x * mask return jtu.tree_map(_mask_joint, joint_beliefs) def _empty_joint_beliefs() -> list[Array]: return [ jnp.zeros( ( self.batch_size, seq_beliefs[0].shape[1] - 1, self.num_states[f], *[self.num_states[dep] for dep in self.B_dependencies[f]], ) ) for f in range(self.num_factors) ] def _build_outer_product_joints() -> list[list[Array]]: return [ [seq_beliefs[f][:, 1:]] + [seq_beliefs[f_idx][:, :-1] for f_idx in self.B_dependencies[f]] for f in range(self.num_factors) ] def _smooth_or_fallback(smoothing_fn: Callable[..., Any]) -> tuple[list[Array], list[Array]]: def update_with_smoothing(_: Any) -> tuple[list[Array], list[Array]]: # Use the *sequence* of filtered beliefs (seq_beliefs) for smoothing # vmap runs over batch: each call sees (T, Ns_f) and (T-1, Nu) smoothed_marginals_and_joints = vmap(smoothing_fn)( seq_beliefs, self.B, actions_Tm1 ) marginal_beliefs = smoothed_marginals_and_joints[0] # list[f] -> (B, T, Ns_f) joint_beliefs = _apply_transition_mask(smoothed_marginals_and_joints[1]) # list[f] -> (B, T-1, ...) return marginal_beliefs, joint_beliefs def use_filtered_beliefs(_: Any) -> tuple[list[Array], list[Array]]: # No valid transition yet (or sentinel action found): # - Use filtered beliefs for A-learning, # - and either skip B-learning or fall back to the two-frame outer-product joint. marginal_beliefs = seq_beliefs # Create empty joint_beliefs with same structure as the true branch would return joint_beliefs = _apply_transition_mask(_empty_joint_beliefs()) return marginal_beliefs, joint_beliefs return lax.cond( can_update_Beliefs, update_with_smoothing, use_filtered_beliefs, operand=None ) if self.inference_algo in inference.SMOOTHING_METHODS: smoothing_fn = inference.smoothing_ovf if self.inference_algo == inference.EXACT_METHOD: # Exact backward smoothing from online filtering history for single-factor HMMs. smoothing_fn = inference.smoothing_exact marginal_beliefs, joint_beliefs = _smooth_or_fallback(smoothing_fn) else: # Non-OVF: keep existing behavior (use filtered marginals and build joints from t and t-1) marginal_beliefs = beliefs_A joint_beliefs = _apply_transition_mask(_build_outer_product_joints()) if self.learn_B else None if self.learn_A: update_A = partial( learning.update_obs_likelihood_dirichlet, A_dependencies=self.A_dependencies, num_obs=self.num_obs, categorical_obs=self.categorical_obs, ) lr = jnp.broadcast_to(lr_pA, (self.batch_size,)) qA, E_qA = vmap(update_A)( self.pA, self.A, observations, marginal_beliefs, lr=lr, ) agent = tree_at(lambda x: (x.A, x.pA), agent, (E_qA, qA)) if self.learn_B: update_B = partial(learning.update_state_transition_dirichlet, num_controls=self.num_controls) lrB = jnp.broadcast_to(lr_pB, (self.batch_size,)) def update_B_step(_: Any) -> tuple[list[Array], list[Array]]: qB, E_qB = vmap(update_B)( self.pB, self.B, joint_beliefs, actions_Tm1, # time-aligned actions lr=lrB ) return qB, E_qB def skip_B_step(_: Any) -> tuple[list[Array], list[Array]]: return self.pB, self.B qB, E_qB = lax.cond(can_update_B, update_B_step, skip_B_step, operand=None) if self.use_inductive and self.H is not None: I_updated = lax.cond( can_update_B, lambda _: vmap(partial(control.generate_I_matrix, depth=self.inductive_depth))( self.H, E_qB, self.inductive_threshold ), lambda _: self.I, operand=None, ) agent = tree_at(lambda x: (x.B, x.pB, x.I), agent, (E_qB, qB, I_updated)) else: agent = tree_at(lambda x: (x.B, x.pB), agent, (E_qB, qB)) return agent def process_obs(self, observations: list[Array] | list[int]) -> list[Array]: """ Preprocess observations into the distributional format expected by the inference routines. Parameters ---------- observations: list[Array] or list[int] The observation input. Format depends on the default preprocessing: - If `self.categorical_obs=False` (default): Each entry `observations[m]` is an integer index representing the discrete observation for modality `m`. - If `self.categorical_obs=True`: Each entry `observations[m]` is a 1D array representing a probability distribution over observations for modality `m`. Returns ------- o_vec: list[Array] Observations in distributional form (one-hot vectors or categorical distributions). Notes ----- If `self.preprocess_fn` is set on the agent, it takes precedence over the default categorical/discrete handling and will be used instead of the logic based on `self.categorical_obs`. This override only affects preprocessing; `self.categorical_obs` is still used by learning and planning code paths that consume raw observations. Ensure `self.categorical_obs` matches the output format of your preprocessing (or per-call `preprocess_fn`) to keep those paths consistent. """ if self.preprocess_fn is not None: return self.preprocess_fn(observations) if self.categorical_obs: return observations return self.make_categorical(observations) def make_categorical(self, observations: list[Array] | list[int]) -> list[Array]: """ Convert discrete index observations into one-hot categorical distributions. Parameters ---------- observations: list[Array] or list[int] Each entry `observations[m]` is an integer index for modality `m`. Returns ------- o_vec: list One-hot categorical distributions for each modality. """ return [nn.one_hot(o, self.num_obs[m]) for m, o in enumerate(observations)] def infer_states( self, observations: list[Array] | list[int], empirical_prior: list[Array], *, past_actions: Array | None = None, qs_hist: list[Array] | None = None, valid_steps: int | Array | None = None, mask: list[Array] | None = None, preprocess_fn: Callable | None = None, return_info: bool = False, ) -> list[Array] | tuple[list[Array], dict[str, Any]]: """ Update approximate posterior over hidden states by solving variational inference problem, given an observation. Parameters ---------- observations: list[Array] | list[int] Observation input in one of two formats: - Discrete observations (default): each `observations[m]` is an integer index for modality `m`. - Categorical observations: each `observations[m]` is a probability vector over observations for modality `m`. If `preprocess_fn` is provided, it should map the raw input to categorical observations and takes precedence over default handling. empirical_prior: list[Array] or tuple[Array] Empirical prior beliefs over hidden states. Depending on the inference algorithm chosen, the resulting `empirical_prior` variable may be a matrix (or list[Array]). of additional dimensions to encode extra conditioning variables like timepoint and policy. past_actions: Array, optional Action history aligned to time. For single-batch sequence inference this should be shaped `(T-1, num_factors)`. For batched calls it should be shaped `(batch, T-1, num_factors)`. qs_hist: list[Array] or tuple[Array], optional History of posterior beliefs over hidden states. valid_steps: Array or int, optional Number of valid (unpadded) timesteps when using fixed-size sequence windows. If provided, sequence inference methods (`mmp`, `vmp`) ignore padded prefix timesteps and transitions. mask: list[Array] or tuple[Array], optional Mask for observations. preprocess_fn: callable, optional Optional preprocessing function to convert observations into distributional form. If None, defaults to `self.process_obs`. The callable should accept `observations` and return distributional observations. return_info: bool, default=False If `True`, also return canonical VFE diagnostics for the inferred posterior (`vfe_t`, `vfe`, and component terms). For `ovf` / `exact` this remains a forward-filtering diagnostic; to score the full smoothed sequence, call `pymdp.inference.smoothing_ovf(...)` or `pymdp.inference.smoothing_exact(...)` explicitly and then pass the resulting pairwise joints into `pymdp.maths.calc_vfe(..., joint_qs=...)`. Notes ----- `categorical_obs` is no longer an argument to `infer_states`. Set it when constructing the agent or supply a `preprocess_fn`. If you provide a custom preprocessing function, ensure `self.categorical_obs` matches the output format, since it is still used by learning and planning code paths that consume raw observations. Returns ------- qs: list[Array] or tuple[list[Array], dict[str, Any]] Posterior beliefs over hidden states. Depending on the inference algorithm chosen, the resulting `qs` variable will have additional sub-structure to reflect whether beliefs are additionally conditioned on timepoint and policy. For example, in case the `self.inference_algo == 'MMP'` indexing structure is policy->timepoint->factor, so that `qs[p_idx][t_idx][f_idx]` refers to beliefs about marginal factor `f_idx` expected under policy `p_idx` at timepoint `t_idx`. If `return_info=True`, a second return value contains VFE diagnostics. Examples -------- Discrete observations: >>> obs = [0, 1] # Modality 0 observed observation 0, modality 1 observed observation 1 >>> qs = agent.infer_states(obs, prior) Categorical observations: >>> obs = [ ... jnp.array([0.7, 0.2, 0.1]), # Peaked belief distribution for observation 0 ... jnp.array([0.5, 0.5]) # Flat belief distribution for observation 1 ... ] >>> agent_cat = Agent(..., categorical_obs=True) >>> qs = agent_cat.infer_states(obs, prior) """ if preprocess_fn is None: o_vec = self.process_obs(observations) else: o_vec = preprocess_fn(observations) if not isinstance(empirical_prior, (list, tuple)): raise ValueError( "`empirical_prior` must be a list/tuple with one entry per hidden-state factor." ) if len(empirical_prior) != self.num_factors: raise ValueError( f"`empirical_prior` has {len(empirical_prior)} factor(s), expected {self.num_factors}" ) A = self.A if mask is not None: for i, m in enumerate(mask): o_vec[i] = m * o_vec[i] + (1 - m) * jnp.ones_like(o_vec[i]) / self.num_obs[i] A[i] = m * A[i] + (1 - m) * jnp.ones_like(A[i]) / self.num_obs[i] infer_states = partial( inference.update_posterior_states, A_dependencies=self.A_dependencies, B_dependencies=self.B_dependencies, num_iter=self.num_iter, method=self.inference_algo, distr_obs=True, # Always True because o_vec is expected to be distributional inference_horizon=self.inference_horizon, return_info=return_info, ) if valid_steps is not None: valid_steps = jnp.asarray(valid_steps, dtype=jnp.int32) if valid_steps.ndim == 0: valid_steps = jnp.broadcast_to(valid_steps, (self.batch_size,)) elif valid_steps.ndim != 1 or valid_steps.shape[0] != self.batch_size: raise ValueError( "`valid_steps` must be a scalar or have shape `(batch_size,)`" ) output = vmap(infer_states)( A, self.B, o_vec, past_actions, prior=empirical_prior, qs_hist=qs_hist, valid_steps=valid_steps, ) return output def update_empirical_prior(self, action: Array, qs: list[Array]) -> list[Array]: """ Compute the empirical prior used for the next state-inference step. Parameters ---------- action: Array Action sampled at the current timestep for each control factor. qs: list[Array] Posterior beliefs over hidden states for the current timestep/history. Returns ------- pred: list[Array] Predicted prior over hidden states for the next inference step. For sequence methods (`mmp`, `vmp`), this returns `self.D` to preserve sequence-inference semantics. """ # this computation of the predictive prior is correct only for fully factorised Bs. if self.inference_algo in inference.SEQUENCE_METHODS: # in the case of the 'mmp' or 'vmp' we have to use D as prior parameter for infer states pred = self.D else: qs_last = jtu.tree_map( lambda x: x[:, -1], qs) propagate_beliefs = partial(control.compute_expected_state, B_dependencies=self.B_dependencies) pred = vmap(propagate_beliefs)(qs_last, self.B, action) return pred def infer_policies(self, qs: list[Array]) -> tuple[Array, Array]: """ Perform policy inference by optimizing a posterior (categorical) distribution over policies. This distribution is computed as the softmax of `neg_efe * gamma + lnE` where `neg_efe` is the negative expected free energy of policies, `gamma` is a policy precision and `lnE` is the (log) prior probability of policies. In SPM-style notation this same quantity is often written as `G`, with `G = neg_efe = -EFE`. This function returns the posterior over policies as well as the negative expected free energy of each policy. Parameters ---------- qs: list[Array] Posterior beliefs over hidden states (typically output of `infer_states`), including the most recent timestep. Returns ---------- q_pi: Array Posterior beliefs over policies with shape `(batch_size, num_policies)`. neg_efe: Array Negative expected free energies of policies with shape `(batch_size, num_policies)`. """ latest_belief = jtu.tree_map(lambda x: x[:, -1], qs) # only get the posterior belief held at the current timepoint infer_policies = partial( control.update_posterior_policies_inductive, self.policies.policy_arr, A_dependencies=self.A_dependencies, B_dependencies=self.B_dependencies, use_utility=self.use_utility, use_states_info_gain=self.use_states_info_gain, use_param_info_gain=self.use_param_info_gain, use_inductive=self.use_inductive ) q_pi, neg_efe = vmap(infer_policies)( latest_belief, self.A, self.B, self.C, self.E, self.pA, self.pB, I = self.I, gamma=self.gamma, inductive_epsilon=self.inductive_epsilon ) return q_pi, neg_efe def multiaction_probabilities(self, q_pi: Array) -> Array: """ Compute probabilities of unique multi-actions from the posterior over policies. Parameters ---------- q_pi: Array Posterior beliefs over policies for one batch element. Returns ---------- Array Probability vector over unique multi-actions. """ if self.sampling_mode == "marginal": get_marginals = partial(control.get_marginals, policies=self.policies.policy_arr, num_controls=self.num_controls) marginals = get_marginals(q_pi) outer = lambda a, b: jnp.outer(a, b).reshape(-1) marginals = jtu.tree_reduce(outer, marginals) elif self.sampling_mode == "full": locs = jnp.all( self.policies.policy_arr[:, 0] == jnp.expand_dims(self.unique_multiactions, -2), -1, ) get_marginals = lambda x: jnp.where(locs, x, 0.).sum(-1) marginals = vmap(get_marginals)(q_pi) return marginals def sample_action(self, q_pi: Array, rng_key: Array | None = None) -> Array: """ Sample or select a discrete action from the posterior over control states. Parameters ---------- q_pi: Array Posterior over policies for each batch element (usually from `infer_policies`). rng_key: Array or sequence of keys, optional Required for stochastic action selection. For batched agents, pass a key array with one key per batch element. Returns ---------- action: Array Action indices per batch element and control factor. """ if (rng_key is None) and (self.action_selection == "stochastic"): raise ValueError("Please provide a random number generator key to sample actions stochastically") if self.sampling_mode == "marginal": sample_action = partial(control.sample_action, self.policies.policy_arr, self.num_controls, action_selection=self.action_selection) action = vmap(sample_action)(q_pi, alpha=self.alpha, rng_key=rng_key) elif self.sampling_mode == "full": sample_policy = partial(control.sample_policy, self.policies.policy_arr, action_selection=self.action_selection) action = vmap(sample_policy)(q_pi, alpha=self.alpha, rng_key=rng_key) return action def decode_multi_actions(self, action: Array) -> Array: """Decode flattened multi-actions back to factor-wise actions. Parameters ---------- action: Array Flattened multi-action indices. Returns ------- Array Array of shape `(batch_size, num_controls_multi)` containing decoded actions per control factor. """ if self.action_maps is None: return action action_multi = jnp.zeros((self.batch_size, len(self.num_controls_multi))).astype(action.dtype) for f, action_map in enumerate(self.action_maps): if action_map["multi_dependency"] == []: continue action_multi_f = utils.index_to_combination(action[..., f], action_map["multi_dims"]) action_multi = action_multi.at[..., action_map["multi_dependency"]].set(action_multi_f) return action_multi def encode_multi_actions(self, action_multi: Array) -> Array: """Encode factor-wise multi-actions into flattened actions. Parameters ---------- action_multi: Array Array of actions per control factor. Returns ------- Array Flattened action indices with shape `(batch_size, num_controls)`. """ if self.action_maps is None: return action_multi action = jnp.zeros((self.batch_size, len(self.num_controls))).astype(action_multi.dtype) for f, action_map in enumerate(self.action_maps): if action_map["multi_dependency"] == []: action = action.at[..., f].set(jnp.zeros_like(action_multi[..., 0])) continue action_f = utils.get_combination_index( action_multi[..., action_map["multi_dependency"]], action_map["multi_dims"], ) action = action.at[..., f].set(action_f) return action def get_model_dimensions(self) -> dict[str, Any]: """ Collect key model dimensions in a single object. Returns ------- dict[str, Any] Dictionary containing model shape metadata. Includes: - `num_obs`: list[int] - `num_states`: list[int] - `num_controls`: list[int] - `num_modalities`: int - `num_factors`: int - `num_policies`: int - `policy_len`: int - `inference_horizon`: int | None - `A_dependencies`: list[list[int]] - `B_dependencies`: list[list[int]] """ return { "num_obs": self.num_obs, "num_states": self.num_states, "num_controls": self.num_controls, "num_modalities": self.num_modalities, "num_factors": self.num_factors, "num_policies": self.policies.num_policies, "policy_len": self.policy_len, "inference_horizon": self.inference_horizon, "A_dependencies": self.A_dependencies, "B_dependencies": self.B_dependencies, } def _construct_dependencies( self, A_dependencies: list[list[int]] | None, B_dependencies: list[list[int]] | None, B_action_dependencies: list[list[int]] | None, A: list[Array] | list[Distribution], B: list[Array] | list[Distribution], ) -> tuple[list[list[int]], list[list[int]], list[list[int]]]: if A_dependencies is not None: A_dependencies = A_dependencies elif isinstance(A[0], Distribution) and isinstance(B[0], Distribution): A_dependencies, _ = get_dependencies(A, B) else: A_dependencies = utils.resolve_a_dependencies( self.num_factors, self.num_modalities ) if B_dependencies is not None: B_dependencies = B_dependencies elif isinstance(A[0], Distribution) and isinstance(B[0], Distribution): _, B_dependencies = get_dependencies(A, B) else: B_dependencies = utils.resolve_b_dependencies(self.num_factors) """TODO: check B action shape""" if B_action_dependencies is not None: B_action_dependencies = B_action_dependencies else: B_action_dependencies = utils.resolve_b_action_dependencies(self.num_factors) return A_dependencies, B_dependencies, B_action_dependencies def _flatten_B_action_dims( self, B: list[Array], pB: list[Array] | None, B_action_dependencies: list[list[int]], ) -> tuple[list[Array], list[Array] | None, list[dict[str, Any]]]: assert hasattr(B[0], "shape"), "Elements of B must be tensors and have attribute shape" action_maps = [] # mapping from multi action dependencies to flat action dependencies for each B B_flat = [] pB_flat = [] for i, (B_f, action_dependency) in enumerate(zip(B, B_action_dependencies)): if action_dependency == []: B_flat.append(jnp.expand_dims(B_f, axis=-1)) if pB is not None: pB_flat.append(jnp.expand_dims(pB[i], axis=-1)) action_maps.append( {"multi_dependency": [], "multi_dims": [], "flat_dependency": [i], "flat_dims": [1]} ) continue dims = [self.num_controls_multi[d] for d in action_dependency] target_shape = list(B_f.shape)[: -len(action_dependency)] + [pymath.prod(dims)] B_flat.append(B_f.reshape(target_shape)) if pB is not None: pB_flat.append(pB[i].reshape(target_shape)) action_maps.append( { "multi_dependency": action_dependency, "multi_dims": dims, "flat_dependency": [i], "flat_dims": [pymath.prod(dims)], } ) if pB is None: pB_flat = None return B_flat, pB_flat, action_maps def _construct_flattend_policies(self, policies: Array, action_maps: list[dict[str, Any]]) -> Array: policies_flat = [] for action_map in action_maps: if action_map["multi_dependency"] == []: policies_flat.append(jnp.zeros_like(policies[..., 0])) continue policies_flat.append( utils.get_combination_index( policies[..., action_map["multi_dependency"]], action_map["multi_dims"], ) ) policies_flat = jnp.stack(policies_flat, axis=-1) return policies_flat def _get_default_params(self) -> dict[str, Any] | None: method = self.inference_algo default_params = None if method == "VANILLA": default_params = {"num_iter": 8, "dF": 1.0, "dF_tol": 0.001} elif method == "MMP": raise NotImplementedError("MMP is not implemented") elif method == "VMP": raise NotImplementedError("VMP is not implemented") elif method == "BP": raise NotImplementedError("BP is not implemented") elif method == "EP": raise NotImplementedError("EP is not implemented") elif method == "CV": raise NotImplementedError("CV is not implemented") return default_params def _validate(self) -> None: for m in range(self.num_modalities): factor_dims = tuple([self.num_states[f] for f in self.A_dependencies[m]]) assert ( self.A[m].shape[2:] == factor_dims ), f"Please input an `A_dependencies` whose {m}-th indices correspond to the hidden state factors that line up with lagging dimensions of A[{m}]..." # validate A tensor is normalised utils.validate_normalization(self.A[m], axis=1, tensor_name=f"A[{m}]") if self.pA is not None: assert ( self.pA[m].shape[2:] == factor_dims if self.pA[m] is not None else True ), f"Please input an `A_dependencies` whose {m}-th indices correspond to the hidden state factors that line up with lagging dimensions of pA[{m}]..." assert max(self.A_dependencies[m]) <= ( self.num_factors - 1 ), f"Check modality {m} of `A_dependencies` - must be consistent with `num_states` and `num_factors`..." for f in range(self.num_factors): factor_dims = tuple([self.num_states[f] for f in self.B_dependencies[f]]) assert ( self.B[f].shape[2:-1] == factor_dims ), f"Please input a `B_dependencies` whose {f}-th indices pick out the hidden state factors that line up with the all-but-final lagging dimensions of B[{f}]..." # validate B tensor is normalised utils.validate_normalization(self.B[f], axis=1, tensor_name=f"B[{f}]") if self.pB is not None: assert ( self.pB[f].shape[2:-1] == factor_dims ), f"Please input a `B_dependencies` whose {f}-th indices pick out the hidden state factors that line up with the all-but-final lagging dimensions of pB[{f}]..." assert max(self.B_dependencies[f]) <= ( self.num_factors - 1 ), f"Check factor {f} of `B_dependencies` - must be consistent with `num_states` and `num_factors`..." for factor_idx in self.control_fac_idx: assert ( self.num_controls[factor_idx] > 1 ), "Control factor (and B matrix) dimensions are not consistent with user-given control_fac_idx" if self.inference_algo == inference.EXACT_METHOD: if self.num_factors != 1: raise ValueError("`exact` inference currently supports only a single hidden-state factor") if len(self.B_dependencies) != 1 or list(self.B_dependencies[0]) != [0]: raise ValueError( "Exact inference requires single-factor self-dynamics only " "(i.e. B_dependencies == [[0]])" ) if any(list(deps) != [0] for deps in self.A_dependencies): raise ValueError( "Exact inference requires each observation modality to depend only on factor 0 " "(i.e. A_dependencies[m] == [0])" ) ================================================ FILE: pymdp/algos.py ================================================ """Core variational-inference and exact-HMM algorithm implementations. This module contains lower-level routines used by high-level inference/control APIs. Public entry points include fixed-point iteration, message-passing over sequences, and exact single-factor scan-based HMM smoothing. """ import jax.numpy as jnp import jax.tree_util as jtu from typing import Any, Callable, NamedTuple, Tuple from jax import jit, vmap, grad, lax, nn from jaxtyping import Array # from jax.config import config # config.update("jax_enable_x64", True) from pymdp.maths import compute_log_likelihood, compute_log_likelihood_per_modality, log_stable, factor_dot, factor_dot_flex, MINVAL def add(x: Array, y: Array) -> Array: return x + y def _matmul_high_precision(lhs: Array, rhs: Array) -> Array: """Use the highest available matmul precision on accelerator backends.""" return jnp.matmul(lhs, rhs, precision=lax.Precision.HIGHEST) def marginal_log_likelihood(qs: list[Array], log_likelihood: Array, i: int) -> Array: xs = [q for j, q in enumerate(qs) if j != i] return factor_dot(log_likelihood, xs, keep_dims=(i,)) def all_marginal_log_likelihood( qs: list[Array], log_likelihoods: list[Array], all_factor_lists: list[list[int]] ) -> list[Array]: qL_marginals = jtu.tree_map(lambda ll_m, factor_list_m: mll_factors(qs, ll_m, factor_list_m), log_likelihoods, all_factor_lists) num_factors = len(qs) # insted of a double loop we could have a list defining m to f mapping # which could be resolved with a single tree_map cast qL_all = [jnp.zeros(1)] * num_factors for m, factor_list_m in enumerate(all_factor_lists): for l, f in enumerate(factor_list_m): qL_all[f] += qL_marginals[m][l] return qL_all def mll_factors(qs: list[Array], ll_m: Array, factor_list_m: list[int]) -> list[Array]: relevant_factors = [qs[f] for f in factor_list_m] marginal_ll_f = jtu.Partial(marginal_log_likelihood, relevant_factors, ll_m) loc_nf = len(factor_list_m) loc_factors = list(range(loc_nf)) return jtu.tree_map(marginal_ll_f, loc_factors) def run_vanilla_fpi( A: list[Array], obs: list[Array], prior: list[Array], num_iter: int = 1, distr_obs: bool = True, ) -> list[Array]: """ Vanilla fixed point iteration (jaxified) """ nf = len(prior) factors = list(range(nf)) # Step 1: Compute log likelihoods for each factor ll = compute_log_likelihood(obs, A, distr_obs=distr_obs) # log_likelihoods = [ll] * nf # Step 2: Map prior to log space and create initial log-posterior log_prior = jtu.tree_map(log_stable, prior) log_q = jtu.tree_map(jnp.zeros_like, prior) # Step 3: Iterate until convergence def scan_fn(carry: list[Array], t: Array) -> tuple[list[Array], None]: log_q = carry q = jtu.tree_map(nn.softmax, log_q) mll = jtu.Partial(marginal_log_likelihood, q, ll) marginal_ll = jtu.tree_map(mll, factors) log_q = jtu.tree_map(add, marginal_ll, log_prior) return log_q, None res, _ = lax.scan(scan_fn, log_q, jnp.arange(num_iter)) # Step 4: Map result to factorised posterior qs = jtu.tree_map(nn.softmax, res) return qs def run_factorized_fpi( A: list[Array], obs: list[Array], prior: list[Array], A_dependencies: list[list[int]], num_iter: int = 1, distr_obs: bool = True, ) -> list[Array]: """ Run the fixed point iteration algorithm with sparse dependencies between factors and observations (stored in `A_dependencies`) """ # Exact one-pass update for single-factor models. if len(prior) == 1: log_likelihood = compute_log_likelihood(obs, A, distr_obs=distr_obs) log_q = log_likelihood + log_stable(prior[0]) return [nn.softmax(log_q, axis=-1)] # Step 1: Compute log likelihoods for each factor log_likelihoods = compute_log_likelihood_per_modality(obs, A, distr_obs=distr_obs) # Step 2: Map prior to log space and create initial log-posterior log_prior = jtu.tree_map(log_stable, prior) log_q = jtu.tree_map(jnp.zeros_like, prior) # Step 3: Iterate until convergence def scan_fn(carry: list[Array], t: Array) -> tuple[list[Array], None]: log_q = carry q = jtu.tree_map(nn.softmax, log_q) marginal_ll = all_marginal_log_likelihood(q, log_likelihoods, A_dependencies) log_q = jtu.tree_map(add, marginal_ll, log_prior) return log_q, None res, _ = lax.scan(scan_fn, log_q, jnp.arange(num_iter)) # Step 4: Map result to factorised posterior qs = jtu.tree_map(nn.softmax, res) return qs def mirror_gradient_descent_step( tau: float, ln_A: Array, lnB_past: Array, lnB_future: Array, ln_qs: Array ) -> Array: """ u_{k+1} = u_{k} - \nabla_p F_k p_k = softmax(u_k) """ err = ln_A - ln_qs + lnB_past + lnB_future ln_qs = ln_qs + tau * err qs = nn.softmax(ln_qs - ln_qs.mean(axis=-1, keepdims=True)) return qs def update_marginals( get_messages: Callable[..., tuple[list[Array], list[Array]]], obs: list[Array], A: list[Array], B: list[Array] | None, prior: list[Array], A_dependencies: list[list[int]], B_dependencies: list[list[int]], num_iter: int = 1, tau: float = 1.0, distr_obs: bool = True, obs_valid_mask: Array | None = None, transition_valid_mask: Array | None = None, ) -> list[Array]: """ Version of marginal update that uses a sparse dependency matrix for A """ T = obs[0].shape[0] ln_B = None if B is None else jtu.tree_map(log_stable, B) # log likelihoods -> $\ln(A)$ for all time steps # for $k > t$ we have $\ln(A) = 0$ def get_log_likelihood(obs_t: list[Array], A: list[Array]) -> list[Array]: # # mapping over batch dimension # return vmap(compute_log_likelihood_per_modality)(obs_t, A) return compute_log_likelihood_per_modality(obs_t, A, distr_obs=distr_obs) # mapping over time dimension of obs array log_likelihoods = vmap(get_log_likelihood, (0, None))(obs, A) # this gives a sequence of log-likelihoods (one for each `t`) if obs_valid_mask is not None: obs_valid_mask = obs_valid_mask.astype(log_likelihoods[0].dtype) log_likelihoods = jtu.tree_map( lambda ll: ll * obs_valid_mask.reshape((T,) + (1,) * (ll.ndim - 1)), log_likelihoods, ) # log marginals -> $\ln(q(s_t))$ for all time steps and factors ln_qs = jtu.tree_map( lambda p: jnp.broadcast_to(jnp.zeros_like(p), (T,) + p.shape), prior) # log prior -> $\ln(p(s_t))$ for all factors ln_prior = jtu.tree_map(log_stable, prior) qs = jtu.tree_map(nn.softmax, ln_qs) def scan_fn(carry: list[Array], iter: Array) -> tuple[list[Array], None]: qs = carry ln_qs = jtu.tree_map(log_stable, qs) # messages from future $m_+(s_t)$ and past $m_-(s_t)$ for all time steps and factors. For t = T we have that $m_+(s_T) = 0$ lnB_future, lnB_past = get_messages( ln_B, B, qs, ln_prior, B_dependencies, transition_valid_mask=transition_valid_mask, ) mgds = jtu.Partial(mirror_gradient_descent_step, tau) ln_As = vmap(all_marginal_log_likelihood, in_axes=(0, 0, None))(qs, log_likelihoods, A_dependencies) qs = jtu.tree_map(mgds, ln_As, lnB_past, lnB_future, ln_qs) return qs, None qs, _ = lax.scan(scan_fn, qs, jnp.arange(num_iter)) return qs def variational_filtering_step( prior: list[Array], Bs: list[Array], ln_As: list[Array], A_dependencies: list[list[int]] ) -> tuple[list[Array], list[Array], list[Array]]: ln_prior = jtu.tree_map(log_stable, prior) #TODO: put this inside scan #### marg_ln_As = all_marginal_log_likelihood(prior, ln_As, A_dependencies) # compute posterior q(z_t) -> n x 1 x d post = jtu.tree_map( lambda x, y: nn.softmax(x + y, -1), marg_ln_As, ln_prior ) #### # compute prediction p(z_{t+1}) = \int p(z_{t+1}|z_t) q(z_t) -> n x d x 1 pred = jtu.tree_map( lambda x, y: jnp.sum(x * jnp.expand_dims(y, -2), -1), Bs, post ) # compute reverse conditional distribution q(z_t|z_{t+1}) cond = jtu.tree_map( lambda x, y, z: x * jnp.expand_dims(y, -2) / jnp.expand_dims(z, -1), Bs, post, pred ) return post, pred, cond def update_variational_filtering( obs: list[Array], A: list[Array], B: list[Array], prior: list[Array], A_dependencies: list[list[int]], **kwargs: Any, ) -> tuple[list[Array], list[Array], list[Array]]: """Online variational filtering belief update that uses a sparse dependency matrix for A""" obs[0].shape[0] def pad(x: Array) -> Array: npad = [(0, 0)] * jnp.ndim(x) npad[0] = (0, 1) return jnp.pad(x, npad, constant_values=1.) B = jtu.tree_map(pad, B) def get_log_likelihood(obs_t: list[Array], A: list[Array]) -> list[Array]: # mapping over batch dimension return vmap(compute_log_likelihood_per_modality)(obs_t, A) # mapping over time dimension of obs array log_likelihoods = vmap(get_log_likelihood, (0, None))(obs, A) # this gives a sequence of log-likelihoods (one for each `t`) def scan_fn(carry: tuple[list[Array], list[Array]], iter: tuple[list[Array], list[Array]]) -> tuple[tuple[list[Array], list[Array]], list[Array]]: _, prior = carry Bs, ln_As = iter post, pred, cond = variational_filtering_step(prior, Bs, ln_As, A_dependencies) return (post, pred), cond init = (prior, prior) iterator = (B, log_likelihoods) # get q_T(s_t), p_T(s_{t+1}) and the history q_{T}(s_{t}|s_{t+1})q_{T-1}(s_{t-1}|s_{t}) ... (qs, ps), qss = lax.scan(scan_fn, init, iterator) return qs, ps, qss def get_vmp_messages( ln_B: list[Array] | None, B: list[Array] | None, qs: list[Array], ln_prior: list[Array], B_dependencies: list[list[int]], transition_valid_mask: Array | None = None, ) -> tuple[list[Array], list[Array]]: num_factors = len(qs) factors = list(range(num_factors)) get_deps_forw = lambda x, f_idx: [x[f][:-1] for f in f_idx] get_deps_back = lambda x, f_idx: [x[f][1:] for f in f_idx] T = qs[0].shape[0] if transition_valid_mask is None: transition_valid_mask = jnp.ones((max(T - 1, 0),), dtype=bool) transition_valid_mask = transition_valid_mask.astype(bool) start_mask = jnp.concatenate( [jnp.ones((1,), dtype=bool), jnp.logical_not(transition_valid_mask)], axis=0, ) def forward(ln_b: Array, ln_prior: Array, f: int) -> Array: dims = tuple((0, 2 + i) for i in range(len(B_dependencies[f]))) msg = factor_dot_flex(ln_b, get_deps_forw(qs, B_dependencies[f]), dims, keep_dims=(0, 1)) msg = jnp.where(transition_valid_mask[:, None], msg, 0.0) # Append the prior as the t=0 forward message so the result has length T. # With window masks, start_mask also resets masked boundary timesteps to the prior. msg = jnp.concatenate([jnp.expand_dims(ln_prior, 0), msg], axis=0) prior_msg = jnp.broadcast_to(jnp.expand_dims(ln_prior, 0), msg.shape) return jnp.where(start_mask[:, None], prior_msg, msg) def backward(ln_bs: list[Array], xs: list[Array]) -> Array: msg = 0.0 for ln_b, x in zip(ln_bs, xs): msg += vmap(lambda q, b: q @ b)(x, ln_b) msg = jnp.where(transition_valid_mask[:, None], msg, 0.0) return jnp.pad(msg, ((0, 1), (0, 0))) def marg(inv_deps: list[int], f: int) -> list[Array]: ln_B_marg = [] for i in inv_deps: idxs = [] dims = [] for j, d in enumerate(B_dependencies[i]): if d != f: idxs.append(d) dims.append((0, 2 + j)) if idxs: keep_dims = (0, 1, 2 + B_dependencies[i].index(f)) ln_B_marg.append( factor_dot_flex( ln_B[i], get_deps_forw(qs, idxs), tuple(dims), keep_dims=keep_dims, ) ) else: ln_B_marg.append(ln_B[i]) return ln_B_marg if ln_B is not None: inv_B_deps = [[i for i, deps in enumerate(B_dependencies) if f in deps] for f in factors] ln_B_marg = jtu.tree_map(lambda f: marg(inv_B_deps[f], f), factors) lnB_future = jtu.tree_map(forward, ln_B, ln_prior, factors) lnB_past = jtu.tree_map( lambda f: backward(ln_B_marg[f], get_deps_back(qs, inv_B_deps[f])), factors, ) else: lnB_future = jtu.tree_map(lambda x: 0., qs) lnB_past = jtu.tree_map(lambda x: 0., qs) return lnB_future, lnB_past def run_vmp( A: list[Array], B: list[Array] | None, obs: list[Array], prior: list[Array], A_dependencies: list[list[int]], B_dependencies: list[list[int]], num_iter: int = 1, tau: float = 1.0, distr_obs: bool = True, obs_valid_mask: Array | None = None, transition_valid_mask: Array | None = None, ) -> list[Array]: """Run variational message passing over a sequence window. Parameters are identical to :func:`run_mmp`. Returns ------- list[Array] Sequence posterior beliefs per hidden-state factor (same structure as :func:`run_mmp`). """ qs = update_marginals( get_vmp_messages, obs, A, B, prior, A_dependencies, B_dependencies, num_iter=num_iter, tau=tau, distr_obs=distr_obs, obs_valid_mask=obs_valid_mask, transition_valid_mask=transition_valid_mask, ) return qs def get_mmp_messages( ln_B: list[Array] | None, B: list[Array] | None, qs: list[Array], ln_prior: list[Array], B_deps: list[list[int]], transition_valid_mask: Array | None = None, ) -> tuple[list[Array], list[Array]]: num_factors = len(qs) factors = list(range(num_factors)) get_deps_forw = lambda x, f_idx: [x[f][:-1] for f in f_idx] get_deps_back = lambda x, f_idx: [x[f][1:] for f in f_idx] T = qs[0].shape[0] if transition_valid_mask is None: transition_valid_mask = jnp.ones((max(T - 1, 0),), dtype=bool) transition_valid_mask = transition_valid_mask.astype(bool) start_mask = jnp.concatenate( [jnp.ones((1,), dtype=bool), jnp.logical_not(transition_valid_mask)], axis=0, ) outgoing_valid = jnp.concatenate( [transition_valid_mask, jnp.zeros((1,), dtype=bool)], axis=0, ) def forward(b: Array, ln_prior: Array, f: int) -> Array: xs = get_deps_forw(qs, B_deps[f]) dims = tuple((0, 2 + i) for i in range(len(B_deps[f]))) msg = log_stable(factor_dot_flex(b, xs, dims, keep_dims=(0, 1) )) msg = jnp.where(transition_valid_mask[:, None], msg, 0.0) # Append the prior as the t=0 forward message so the result has length T. # With window masks, start_mask also resets masked boundary timesteps to the prior. msg = jnp.concatenate([jnp.expand_dims(ln_prior, 0), msg], axis=0) prior_msg = jnp.broadcast_to(jnp.expand_dims(ln_prior, 0), msg.shape) msg = jnp.where(start_mask[:, None], prior_msg, msg) # In MMP each valid transition contributes via both forward and backward terms. # We assign half-weight here (and half in backward below) so each edge is counted once. msg = msg * jnp.where(outgoing_valid[:, None], 0.5, 1.0) return msg def backward(Bs: list[Array], xs: list[Array]) -> Array: msg = 0. for i, b in enumerate(Bs): b_norm = b / jnp.clip(b.sum(-1, keepdims=True), min=MINVAL) # Complementary half-weight to the forward pass above. msg += log_stable(vmap(lambda x, y: y @ x)(b_norm, xs[i])) * .5 msg = jnp.where(transition_valid_mask[:, None], msg, 0.0) return jnp.pad(msg, ((0, 1), (0, 0))) def marg(inv_deps: list[int], f: int) -> list[Array]: B_marg = [] for i in inv_deps: b = B[i] keep_dims = (0, 1, 2 + B_deps[i].index(f)) dims = [] idxs = [] for j, d in enumerate(B_deps[i]): if f != d: dims.append((0, 2 + j)) idxs.append(d) xs = get_deps_forw(qs, idxs) B_marg.append( factor_dot_flex(b, xs, tuple(dims), keep_dims=keep_dims) ) return B_marg if B is not None: inv_B_deps = [[i for i, d in enumerate(B_deps) if f in d] for f in factors] B_marg = jtu.tree_map(lambda f: marg(inv_B_deps[f], f), factors) lnB_future = jtu.tree_map(forward, B, ln_prior, factors) lnB_past = jtu.tree_map(lambda f: backward(B_marg[f], get_deps_back(qs, inv_B_deps[f])), factors) else: lnB_future = jtu.tree_map(lambda x: jnp.expand_dims(x, 0), ln_prior) lnB_past = jtu.tree_map(lambda x: 0., qs) return lnB_future, lnB_past def run_mmp( A: list[Array], B: list[Array] | None, obs: list[Array], prior: list[Array], A_dependencies: list[list[int]], B_dependencies: list[list[int]], num_iter: int = 1, tau: float = 1.0, distr_obs: bool = True, obs_valid_mask: Array | None = None, transition_valid_mask: Array | None = None, ) -> list[Array]: """Run marginal message passing over a sequence window. Parameters ---------- A : list[Array] Model likelihood tensors. B : list[Array] | None Transition tensors (or `None` for static-state models). obs : list[Array] Observation sequence per modality. prior : list[Array] Sequence prior over hidden states. A_dependencies : list[list[int]] Sparse observation dependencies per modality. B_dependencies : list[list[int]] Sparse transition dependencies per factor. num_iter : int, default=1 Number of variational update iterations. tau : float, default=1.0 Mirror-descent step size. distr_obs : bool, default=True Whether observations are already distributional. obs_valid_mask : Array | None, optional Optional validity mask for padded observation windows. transition_valid_mask : Array | None, optional Optional validity mask for transitions in padded windows. Returns ------- list[Array] Sequence posterior beliefs per hidden-state factor. """ qs = update_marginals( get_mmp_messages, obs, A, B, prior, A_dependencies, B_dependencies, num_iter=num_iter, tau=tau, distr_obs=distr_obs, obs_valid_mask=obs_valid_mask, transition_valid_mask=transition_valid_mask, ) return qs def run_online_filtering( A: list[Array], B: list[Array], obs: list[Array], prior: list[Array], A_dependencies: list[list[int]], num_iter: int = 1, tau: float = 1.0, ) -> list[Array]: """Runs online filtering (HAVE TO REPLACE WITH OVF CODE)""" qs = update_marginals(get_mmp_messages, obs, A, B, prior, A_dependencies, num_iter=num_iter, tau=tau) return qs # Infer states hybrid & hybrid block def run_factorized_fpi_hybrid( log_likelihoods: list[Array], prior: list[Array], A_dependencies: list[list[int]], num_iter: int, ) -> list[Array]: log_prior = jtu.tree_map(log_stable, prior) log_q = jtu.tree_map(jnp.zeros_like, prior) def scan_fn(carry: list[Array], t: Array) -> tuple[list[Array], None]: log_q = carry q = jtu.tree_map(nn.softmax, log_q) marginal_ll = all_marginal_log_likelihood(q, log_likelihoods, A_dependencies) log_q = jtu.tree_map(add, marginal_ll, log_prior) return log_q, None res, _ = lax.scan(scan_fn, log_q, jnp.arange(num_iter)) qs = jtu.tree_map(nn.softmax, res) return jtu.tree_map(lambda x: jnp.expand_dims(x, 0), qs) # Infer states end2end padded def get_qs_padded(qs: list[Array], max_state_dim: int) -> list[Array]: qs_padded = [] for q in qs: qs_padded.append(jnp.zeros((q.shape[0], max_state_dim)).at[:, 0:q.shape[1]].set(q)) return qs_padded def compute_qL_marginals( lls_padded: Array, qs_padded: list[Array], A_dependencies: list[list[int]], max_state_dim: int ) -> list[list[Array]]: dp_dict = {} qL_marginals_padded = [[] for i in range(len(A_dependencies))] for i, A_dep in enumerate(A_dependencies): if len(A_dep) == 1: qL_marginals_padded[i].append(lls_padded[i]) else: for j in range(len(A_dep)): axes_factors = tuple((axis, factor) for axis, factor in enumerate(A_dep) if j != axis) existing_key = None for sublen in range(len(axes_factors), 0, -1): if axes_factors[:sublen] in dp_dict: existing_key = axes_factors[:sublen] break new_key = () if existing_key is None else existing_key offset = 0 if existing_key is None else len(existing_key) curr_prod = lls_padded if existing_key is None else dp_dict[existing_key] for axis, factor in axes_factors[offset:]: new_key = new_key + ((axis, factor),) q_reshaped = qs_padded[factor].reshape( [1, lls_padded.shape[1]] + [max_state_dim if k == axis else 1 for k in range(lls_padded.ndim - 2)] ) curr_prod = curr_prod * q_reshaped dp_dict[new_key] = curr_prod qL_marginals_padded[i].append( dp_dict[axes_factors][i].sum( axis=[axis + 1 for axis, _ in axes_factors] ) ) return qL_marginals_padded def qL_flatten(qL_marginals_padded: list[list[Array]]) -> list[list[Array]]: qL_marginals = [] for _qs in qL_marginals_padded: qL_marginals.append([]) for _q in _qs: idx = (slice(0, _q.shape[0]), slice(0, _q.shape[1])) + tuple(0 for _ in range(_q.ndim - 2)) qL_marginals[-1].append(_q[idx]) return qL_marginals def compute_qL_all( qL_marginals: list[list[Array]], A_dependencies: list[list[int]], num_factors: int ) -> list[Array]: qL_all = [jnp.zeros_like(qL_marginals[0][0])] * num_factors for m, factor_list_m in enumerate(A_dependencies): for l, f in enumerate(factor_list_m): qL_all[f] += qL_marginals[m][l] return qL_all def run_factorized_fpi_end2end_padded( lls_padded: Array, prior: list[Array], A_dependencies: list[list[int]], max_obs_dim: int, max_state_dim: int, num_iter: int, ) -> list[Array]: log_prior = jtu.tree_map(log_stable, prior) log_q = jtu.tree_map(jnp.zeros_like, prior) def scan_fn(carry: list[Array], t: Array) -> tuple[list[Array], None]: log_q = carry q = jtu.tree_map(nn.softmax, log_q) qs_padded = get_qs_padded(q, max_state_dim) qL_marginals_padded = compute_qL_marginals(lls_padded, qs_padded, A_dependencies, max_state_dim) qL_flat = qL_flatten(qL_marginals_padded) qL_all = compute_qL_all(qL_flat, A_dependencies, len(q)) log_q = jtu.tree_map(lambda q, lp: q[:, 0:lp.shape[1]] + lp, qL_all, log_prior) return log_q, None res, _ = lax.scan(scan_fn, log_q, jnp.arange(num_iter)) qs = jtu.tree_map(nn.softmax, res) return jtu.tree_map(lambda x: jnp.expand_dims(x, 1), qs) class FilterMessage(NamedTuple): # A: conditional transition-like matrix for the segment A: Array # (..., K, K) # log_b: log normalizer term (per left-boundary state) log_b: Array # (..., K) def _normalize_preserve_zeros(u: Array, axis: int = -1, eps: float = 1e-15) -> Tuple[Array, Array]: """ Normalize along `axis` while preserving exact structural zeros and flooring tiny positive values to improve gradient stability in near-degenerate regimes. Returns normalized tensor and the (safe) normalization factor with `axis` squeezed. """ eps = jnp.asarray(eps, dtype=u.dtype) u_safe = jnp.where(u == 0, 0, jnp.where(u < eps, eps, u)) c = jnp.sum(u_safe, axis=axis, keepdims=True) c_safe = jnp.where(c == 0, jnp.ones_like(c), c) return u_safe / c_safe, jnp.squeeze(c_safe, axis=axis) def _log_predictive_normalizer(predicted_probs: Array, log_likelihoods: Array) -> Array: """ Compute log c_t = log p(x_t | x_{1:t-1}) in a stable way for each timestep. """ ll_max = jnp.max(log_likelihoods, axis=-1, keepdims=True) stable_weights = jnp.exp(log_likelihoods - ll_max) return log_stable(jnp.sum(predicted_probs * stable_weights, axis=-1)) + ll_max.squeeze(-1) def _condition_on(A: Array, ll: Array, axis: int = -1) -> Tuple[Array, Array]: """ Condition a transition-like object A on log-likelihood ll in a numerically stable way. Works for: - A shape (K,) with ll shape (K,) (initial probs) - A shape (K,K) with ll shape (K,) (transition rows/cols) - and batched versions via broadcasting when ll is 1D. """ ll = jnp.asarray(ll) ll_max = jnp.max(ll, axis=-1) w = jnp.exp(ll - ll_max) if A.ndim == 1: A_cond, norm = _normalize_preserve_zeros(A * w, axis=0) return A_cond, log_stable(norm) + ll_max axis = axis if axis >= 0 else A.ndim + axis shape = [1] * A.ndim shape[axis] = w.shape[-1] w_b = w.reshape(shape) A_cond, norm = _normalize_preserve_zeros(A * w_b, axis=axis) return A_cond, log_stable(norm) + ll_max def _hmm_filter_scan_row_oriented( initial_probs: Array, transition_mats: Array, log_likelihoods: Array, ) -> tuple[Array, Array, Array]: """ Core row-oriented HMM filtering via associative scan. Parameters ---------- initial_probs: Initial state distribution `p(s_0)` with shape `(K,)`. transition_mats: Transition tensors with row orientation `p(s_{t+1}=j | s_t=i)`. Can be `(K, K)` or `(T-1, K, K)`. log_likelihoods: Log likelihoods `log p(o_t | s_t)` with shape `(T, K)`. Returns ------- marginal_loglik: Scalar `log p(o_{1:T})`. filtered_probs: `(T, K)` filtered beliefs `p(s_t | o_{1:t})`. predicted_probs: `(T, K)` one-step-ahead predictive prior `p(s_t | o_{1:t-1})` with `predicted_probs[0] = initial_probs`. """ T, K = log_likelihoods.shape if transition_mats.ndim == 2: # Use identical transition matrix for all timesteps when stationary. transition_mats = jnp.broadcast_to(transition_mats, (T - 1, K, K)) @vmap def _marginalize( m_ij: FilterMessage, m_jk: FilterMessage ) -> FilterMessage: # Combine segment i->j with segment j->k by summing out the intermediate state. A_ij_cond, lognorm = _condition_on(m_ij.A, m_jk.log_b) A_ik = _matmul_high_precision(A_ij_cond, m_jk.A) log_b_ik = m_ij.log_b + lognorm return FilterMessage(A=A_ik, log_b=log_b_ik) A0_vec, log_b0_scalar = _condition_on(initial_probs, log_likelihoods[0]) A0 = jnp.broadcast_to(A0_vec, (K, K)) log_b0 = jnp.broadcast_to(log_b0_scalar, (K,)) A1T, log_b1T = vmap(_condition_on, in_axes=(0, 0))(transition_mats, log_likelihoods[1:]) partial = lax.associative_scan( _marginalize, FilterMessage( A=jnp.concatenate([A0[None, :, :], A1T], axis=0), log_b=jnp.concatenate([log_b0[None, :], log_b1T], axis=0), ), ) marginal_loglik = partial.log_b[-1, 0] filtered_probs = partial.A[:, 0, :] if T == 1: predicted_probs = initial_probs[None, :] else: pred_next = vmap(_matmul_high_precision)(filtered_probs[:-1], transition_mats) predicted_probs = jnp.concatenate([initial_probs[None, :], pred_next], axis=0) return marginal_loglik, filtered_probs, predicted_probs def hmm_filter_scan_rowstoch( initial_probs: Array, transition_mats: Array, log_likelihoods: Array, ) -> tuple[Array, Array, Array]: """ Exact HMM filtering via `lax.associative_scan` for row-stochastic transitions. This variant uses the standard row-stochastic convention `transition_mats[t, i, j] = p(z_{t+1}=j | z_t=i)`. Parameters ------ initial_probs: Initial state distribution `p(s_0)`. transition_mats: Row-stochastic transitions, stationary `(K, K)` or time-varying `(T-1, K, K)`. log_likelihoods: Sequence log likelihoods with shape `(T, K)`. Returns ------- (marginal_loglik, filtered_probs, predicted_probs) """ return _hmm_filter_scan_row_oriented(initial_probs, transition_mats, log_likelihoods) def _hmm_smoother_scan_row_oriented( initial_probs: Array, transition_mats: Array, log_likelihoods: Array, ) -> tuple[Array, Array, Array, Array, Array, Array]: """ Core row-oriented HMM filtering + smoothing via associative scans. Computes: - filtered marginals using the forward scan - smoothed marginals with a suffix scan - pairwise transition posteriors `p(s_t, s_{t+1} | o_{1:T})` - `p(s_t | s_{t+1}, o_{1:T})` in pymdp-style conditional orientation """ T, K = log_likelihoods.shape marginal_loglik, filtered, predicted = _hmm_filter_scan_row_oriented( initial_probs, transition_mats, log_likelihoods ) # log-normaliser c_t = p(o_t | o_{1:t-1}), used to stabilize backward factors. log_c = _log_predictive_normalizer(predicted, log_likelihoods) if T == 1: beta = jnp.ones((1, K)) else: # Build backward matrices M_t = A_t * diag(exp(ll_{t+1} - c_{t+1})) # that propagate the vector beta_{t+1} -> beta_t. col_scale = jnp.exp(log_likelihoods[1:] - log_c[1:][:, None]) M = transition_mats * col_scale[:, None, :] def op(x: Array, y: Array) -> Array: # batched matmul works; associative_scan may call this with leading batch dims return _matmul_high_precision(y, x) # suffix-style associative scan via reverse + reverse-back beta = lax.associative_scan(op, M[::-1])[::-1] beta = vmap(lambda P_t: _matmul_high_precision(P_t, jnp.ones((K,))))(beta) beta = jnp.concatenate([beta, jnp.ones((1, K))], axis=0) # p(s_t | o_{1:T}) = p(s_t | o_{1:t}) * beta_t smoothed = filtered * beta smoothed = smoothed / jnp.clip(jnp.sum(smoothed, axis=-1, keepdims=True), min=MINVAL) if T == 1: trans_probs = jnp.zeros((0, K, K)) cond_probs = jnp.zeros((0, K, K)) else: xi = ( filtered[:-1, :, None] * transition_mats * col_scale[:, None, :] * beta[1:, None, :] ) xi = xi / jnp.clip(jnp.sum(xi, axis=(1, 2), keepdims=True), min=MINVAL) trans_probs = xi cond_probs = xi.transpose(0, 2, 1) / jnp.clip(smoothed[1:, :, None], min=MINVAL) return marginal_loglik, filtered, predicted, smoothed, trans_probs, cond_probs def hmm_smoother_scan_rowstoch( initial_probs: Array, transition_mats: Array, log_likelihoods: Array, ) -> tuple[Array, Array, Array, Array, Array, Array]: """ Exact HMM filtering + smoothing via associative scans for row-stochastic transitions. Parameters ------ initial_probs: Initial distribution `p(s_0)`. transition_mats: Row-stochastic transitions, stationary `(K, K)` or time-varying `(T-1, K, K)`. log_likelihoods: `(T, K)` log-likelihood matrix. Returns ------- (marginal_loglik, filtered_probs, predicted_probs, smoothed_probs, trans_probs, cond_probs) """ return _hmm_smoother_scan_row_oriented( initial_probs, transition_mats, log_likelihoods ) def hmm_filter_scan_colstoch( initial_probs: Array, B_mats: Array, log_likelihoods: Array, ) -> tuple[Array, Array, Array]: """ Exact HMM filtering via `lax.associative_scan` for column-stochastic transitions. This is the pymdp-native transition orientation: `B_mats[t, j, i] = p(z_{t+1}=j | z_t=i)`. Parameters ------ initial_probs: Initial distribution `p(s_0)`. B_mats: Column-stochastic transitions, stationary `(K, K)` or time-varying `(T-1, K, K)`. log_likelihoods: `(T, K)` log-likelihood matrix. Returns ------- (marginal_loglik, filtered_probs, predicted_probs) """ return _hmm_filter_scan_row_oriented( initial_probs, jnp.swapaxes(B_mats, -1, -2), log_likelihoods, ) def hmm_smoother_scan_colstoch( initial_probs: Array, B_mats: Array, log_likelihoods: Array, return_trans_probs: bool = False, ) -> tuple[Any, ...]: """ Exact HMM filtering + smoothing via associative scans for column-stochastic transitions. Parameters ------ initial_probs: Initial distribution `p(s_0)`. B_mats: Column-stochastic transitions, stationary `(K, K)` or time-varying `(T-1, K, K)`. In this orientation `B_mats[t, j, i] = p(s_{t+1}=j | s_t=i)`. log_likelihoods: `(T, K)` log-likelihood matrix. return_trans_probs: If `True`, includes pairwise transition posterior `p(s_t, s_{t+1} | o_{1:T})`. Returns ------- tuple If `return_trans_probs=False`, returns `(marginal_loglik, filtered_probs, predicted_probs, smoothed_probs, cond_probs)`. If `True`, returns `(marginal_loglik, filtered_probs, predicted_probs, smoothed_probs, trans_probs, cond_probs)`. """ marginal_loglik, filtered_probs, predicted_probs = hmm_filter_scan_colstoch( initial_probs, B_mats, log_likelihoods, ) smoothed_probs, _, cond_probs, trans_probs = hmm_smoother_from_filtered_colstoch( filtered_probs, B_mats, return_trans_probs=True, ) if return_trans_probs: return ( marginal_loglik, filtered_probs, predicted_probs, smoothed_probs, trans_probs, cond_probs, ) return ( marginal_loglik, filtered_probs, predicted_probs, smoothed_probs, cond_probs, ) def hmm_smoother_from_filtered_colstoch( filtered_probs: Array, B_mats: Array, return_trans_probs: bool = False, ) -> tuple[Any, ...]: """ Exact HMM smoothing from precomputed filtering marginals for column-stochastic transitions. This routine is intended for online agent loops where filtering is computed one step at a time during observe-infer-act cycles, and backward smoothing is only needed at learning time. Args ---- filtered_probs: `(T, K)` filtering marginals with `filtered_probs[t] = p(z_t | x_{1:t})`. B_mats: - `(K_next, K_curr)` stationary column-stochastic transitions, or - `(T-1, K_next, K_curr)` time-varying transitions. return_trans_probs: If `True`, also return pairwise posteriors in `(T-1, K_curr, K_next)` orientation. Returns ------- Always returned: smoothed_probs: `(T, K)` with `p(z_t | x_{1:T})`. joint_next_curr: `(T-1, K_next, K_curr)` with `joint_next_curr[t, j, i] = p(z_{t+1}=j, z_t=i | x_{1:T})`. cond_probs: `(T-1, K_next, K_curr)` with `cond_probs[t, j, i] = p(z_t=i | z_{t+1}=j, x_{1:T})`. Additionally returned when `return_trans_probs=True`: trans_probs: `(T-1, K_curr, K_next)` with `trans_probs[t, i, j] = p(z_t=i, z_{t+1}=j | x_{1:T})`. """ T, K = filtered_probs.shape if B_mats.ndim == 2: B_mats = jnp.broadcast_to(B_mats, (max(T - 1, 0), K, K)) elif B_mats.ndim == 3: expected_steps = max(T - 1, 0) if B_mats.shape[0] != expected_steps: raise ValueError( f"B_mats has leading dimension {B_mats.shape[0]}, expected {expected_steps} for T={T}" ) else: raise ValueError("B_mats must be 2D or 3D") if T == 1: smoothed = filtered_probs joint_next_curr = jnp.zeros((0, K, K)) cond_probs = jnp.zeros((0, K, K)) trans_probs = jnp.zeros((0, K, K)) if return_trans_probs: return smoothed, joint_next_curr, cond_probs, trans_probs return smoothed, joint_next_curr, cond_probs predicted_next = vmap(_matmul_high_precision)(B_mats, filtered_probs[:-1]) # (T-1, K_next) cond_probs = ( B_mats * filtered_probs[:-1][:, None, :] ) / jnp.clip(predicted_next[:, :, None], min=MINVAL) # (T-1, K_next, K_curr) # smoothed_t = cond_t^T @ smoothed_{t+1} M = cond_probs.transpose(0, 2, 1) # (T-1, K_curr, K_next) R = M[::-1] def op(x: Array, y: Array) -> Array: return _matmul_high_precision(y, x) P_rev = lax.associative_scan(op, R) # cumulative products from the end P = P_rev[::-1] q_last = filtered_probs[-1] smoothed_prefix = vmap(lambda P_t: _matmul_high_precision(P_t, q_last))(P) # (T-1, K) smoothed = jnp.concatenate([smoothed_prefix, q_last[None, :]], axis=0) smoothed = smoothed / jnp.clip(jnp.sum(smoothed, axis=-1, keepdims=True), min=MINVAL) joint_next_curr = cond_probs * smoothed[1:, :, None] # (T-1, K_next, K_curr) trans_probs = joint_next_curr.transpose(0, 2, 1) # (T-1, K_curr, K_next) if return_trans_probs: return smoothed, joint_next_curr, cond_probs, trans_probs return smoothed, joint_next_curr, cond_probs def run_exact_single_factor_hmm_scan( obs: list[Array], A: list[Array], B: list[Array], prior: list[Array], actions: Array | None = None, distr_obs: bool = True, ) -> tuple[Array, list[Array], list[Array], list[Array]]: """ pymdp-style single-factor wrapper around the column-stochastic scan smoother. Notes ----- - `A`, `B`, and `prior` are expected as singleton lists (one hidden-state factor). - `B[0]` must be in pymdp-native column-stochastic orientation: `(K_next, K_curr[, n_actions])` (no transpose required). - Returns `(mll, qs, ps, qss)` with `qss[0]` equal to `p(z_t | z_{t+1}, x_{1:T})` in `(T-1, K_next, K_curr)` orientation. """ if len(prior) != 1 or len(B) != 1: raise ValueError("run_exact_single_factor_hmm_scan expects singleton lists for prior and B") T = obs[0].shape[0] pi = prior[0] # (K,) B0 = B[0] # (K_next, K_curr[, n_actions]) or (T-1, K_next, K_curr) K = pi.shape[0] if B0.ndim == 2: B_seq = B0 elif B0.ndim == 3: looks_time_varying = B0.shape[0] == max(T - 1, 0) and B0.shape[1] == K and B0.shape[2] == K if actions is not None: actions = jnp.asarray(actions) if actions.ndim == 2: if actions.shape[-1] == 1: actions = actions[:, 0] else: raise ValueError("single-factor scan expects actions with shape (T-1,) or (T-1, 1)") if actions.ndim != 1: raise ValueError("single-factor scan expects actions with shape (T-1,) or (T-1, 1)") if actions.shape[0] != max(T - 1, 0): raise ValueError( f"actions has length {actions.shape[0]} but expected {max(T - 1, 0)} for T={T}" ) B_seq = vmap(lambda u: B0[:, :, u])(actions.astype(jnp.int32)) # (T-1, K_next, K_curr) elif looks_time_varying: B_seq = B0 elif T <= 1: # No transition is needed when there is only one observation. B_seq = B0[:, :, 0] else: raise ValueError( "actions must be provided when B has an action dimension and T > 1" ) else: raise ValueError("B[0] must be 2D or 3D") # log_likelihoods[t] = log p(o_t | z_t) => (T, K) # vmap over time dimension of obs pytree ll = vmap(lambda obs_t: compute_log_likelihood(obs_t, A, distr_obs=distr_obs))(obs) mll, q_filt, q_pred, q_smooth, q_t_given_next = hmm_smoother_scan_colstoch(pi, B_seq, ll) # Return in pymdp-ish packaging (list per factor) qs = [q_smooth] ps = [q_pred] qss = [q_t_given_next] # shape (T-1, K_next, K_curr) return mll, qs, ps, qss if __name__ == "__main__": prior = [jnp.ones(2)/2, jnp.ones(2)/2, nn.softmax(jnp.array([0, -80., -80., -80, -80.]))] obs = [nn.one_hot(0, 5), nn.one_hot(5, 10)] A = [jnp.ones((5, 2, 2, 5))/5, jnp.ones((10, 2, 2, 5))/10] qs = jit(run_vanilla_fpi)(A, obs, prior) # test if differentiable def sum_prod(prior: list[Array]) -> Array: qs = jnp.concatenate(run_vanilla_fpi(A, obs, prior)) return (qs * log_stable(qs)).sum() print(jit(grad(sum_prod))(prior)) # def sum_prod(precision): # # prior = [jnp.ones(2)/2, jnp.ones(2)/2, nn.softmax(log_prior)] # prior = [jnp.ones(2)/2, jnp.ones(2)/2, nn.softmax(precision*nn.one_hot(0, 5))] # qs = jnp.concatenate(run_vanilla_fpi(A, obs, prior)) # return (qs * log_stable(qs)).sum() # precis_to_test = 1. # print(jit(grad(sum_prod))(precis_to_test)) # log_prior = jnp.array([0, -80., -80., -80, -80.]) # print(jit(grad(sum_prod))(log_prior)) ================================================ FILE: pymdp/control.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member # pylint: disable=not-an-iterable """Policy construction, expected free energy, and action sampling utilities.""" import itertools import jax.numpy as jnp import jax.tree_util as jtu from typing import Sequence from functools import partial from jax import lax, vmap, nn from jax import random as jr from jaxtyping import Array import equinox as eqx from pymdp.maths import factor_dot, log_stable, stable_entropy, stable_xlogx, spm_wnorm from pymdp import utils class Policies(eqx.Module): """ A class for storing an array of policies and its properties """ policy_arr: Array horizon: int = eqx.field(static=True) num_policies: int = eqx.field(static=True) def __init__(self, policy_arr: Array) -> None: self.num_policies = policy_arr.shape[0] self.horizon = policy_arr.shape[1] self.policy_arr = policy_arr def __getitem__(self, idx: int) -> Array: return self.policy_arr[idx] def __len__(self) -> int: return self.num_policies def get_marginals(q_pi: Array, policies: Array, num_controls: Sequence[int]) -> list[Array]: """ Computes the marginal posterior(s) over actions by integrating their posterior probability under the policies that they appear within. Parameters ---------- q_pi: 1D Array Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: Array Policy matrix with shape `(num_policies, policy_len, num_factors)`. num_controls: Sequence[int] Dimensionalities of each control state factor. Returns ---------- action_marginals: list[Array] Marginal posterior over actions for each control factor. """ num_factors = len(num_controls) action_marginals = [] for factor_i in range(num_factors): actions = jnp.arange(num_controls[factor_i])[:, None] action_marginals.append(jnp.where(actions==policies[:, 0, factor_i], q_pi, 0).sum(-1)) return action_marginals def sample_action( policies: Array, num_controls: Sequence[int], q_pi: Array, action_selection: str = "deterministic", alpha: float = 16.0, rng_key: Array | None = None, ) -> Array: """ Samples an action from posterior marginals, one action per control factor. Parameters ---------- q_pi: 1D Array Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: Array Policy matrix with shape `(num_policies, policy_len, num_factors)`. num_controls: Sequence[int] Dimensionalities of each control state factor. action_selection: string, default "deterministic" String indicating whether whether the selected action is chosen as the maximum of the posterior over actions, or whether it's sampled from the posterior marginal over actions alpha: float, default 16.0 Action selection precision -- the inverse temperature of the softmax that is used to scale the action marginals before sampling. This is only used if `action_selection` is `"stochastic"`. rng_key: Array | None, optional PRNG key required when `action_selection='stochastic'`. Returns ---------- selected_policy: 1D Array Vector containing the indices of the actions for each control factor """ marginal = get_marginals(q_pi, policies, num_controls) if action_selection == 'deterministic': selected_policy = jtu.tree_map(lambda x: jnp.argmax(x, -1), marginal) elif action_selection == 'stochastic': logits = lambda x: alpha * log_stable(x) selected_policy = jtu.tree_map(lambda x: jr.categorical(rng_key, logits(x)), marginal) else: raise NotImplementedError return jnp.array(selected_policy) def sample_policy( policies: Array, q_pi: Array, action_selection: str = "deterministic", alpha: float = 16.0, rng_key: Array | None = None, ) -> Array: """Select or sample a policy, then return its first-step multi-action. Parameters ---------- policies : Array Policy matrix with shape `(num_policies, policy_len, num_factors)`. q_pi : Array Posterior over policies for one batch element. action_selection : {"deterministic", "stochastic"}, default="deterministic" Selection mode for choosing a policy. alpha : float, default=16.0 Precision (inverse temperature) used for stochastic sampling. rng_key : Array | None, optional PRNG key required for `action_selection='stochastic'`. Returns ------- Array First-step action vector for all control factors. """ if action_selection == "deterministic": policy_idx = jnp.argmax(q_pi) elif action_selection == "stochastic": log_p_policies = log_stable(q_pi) * alpha policy_idx = jr.categorical(rng_key, log_p_policies) selected_multiaction = policies[policy_idx, 0] return selected_multiaction def construct_policies( num_states: Sequence[int], num_controls: Sequence[int] | None = None, policy_len: int = 1, control_fac_idx: Sequence[int] | None = None, ) -> Array: """ Generate an exhaustive policy matrix for the specified planning horizon. Parameters ---------- num_states: Sequence[int] Dimensionalities of each hidden state factor. num_controls: Sequence[int], default None Dimensionalities of each control state factor. If `None`, this is computed from controllable state factors. policy_len: int, default 1 temporal depth ("planning horizon") of policies control_fac_idx: Sequence[int] Indices of controllable hidden state factors (factors `i` where `num_controls[i] > 1`). Returns ---------- policies: Array Policy matrix with shape `(num_policies, policy_len, num_factors)`. """ num_factors = len(num_states) if control_fac_idx is None: if num_controls is not None: control_fac_idx = [f for f, n_c in enumerate(num_controls) if n_c > 1] else: control_fac_idx = list(range(num_factors)) if num_controls is None: num_controls = [num_states[c_idx] if c_idx in control_fac_idx else 1 for c_idx in range(num_factors)] x = num_controls * policy_len policies = list(itertools.product(*[list(range(i)) for i in x])) for pol_i in range(len(policies)): policies[pol_i] = jnp.array(policies[pol_i]).reshape(policy_len, num_factors) return jnp.stack(policies) def update_posterior_policies( policy_matrix: Array, qs_init: list[Array], A: list[Array], B: list[Array], C: list[Array], E: Array, pA: list[Array] | None, pB: list[Array] | None, A_dependencies: list[list[int]], B_dependencies: list[list[int]], gamma: float = 16.0, use_utility: bool = True, use_states_info_gain: bool = True, use_param_info_gain: bool = False, ) -> tuple[Array, Array]: """Compute posterior over policies and policy-wise negative expected free energy. Notes ----- The returned policy score is `neg_efe = -EFE`. This same quantity is often denoted by `G`. Parameters ---------- policy_matrix: Array Policy tensor with shape `(num_policies, policy_len, num_factors)`. qs_init: list[Array] Current marginal beliefs over hidden states. A: list[Array] Observation likelihood tensors. B: list[Array] Transition tensors. C: list[Array] Prior preferences over observations. E: Array Prior over policies. pA: list[Array] | None Optional posterior Dirichlet parameters for `A`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. pB: list[Array] | None Optional posterior Dirichlet parameters for `B`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. A_dependencies: list[list[int]] Observation dependencies between modalities and hidden-state factors. B_dependencies: list[list[int]] Transition dependencies between hidden-state factors. gamma: float, default=16.0 Policy precision parameter. use_utility: bool, default=True Whether to include expected utility in EFE. use_states_info_gain: bool, default=True Whether to include state epistemic value. use_param_info_gain: bool, default=False Whether to include parameter epistemic value. Returns ------- tuple[Array, Array] `(q_pi, neg_efe_all_policies)` where `q_pi` is the posterior over policies. """ if use_param_info_gain and pA is None and pB is None: raise ValueError( "use_param_info_gain=True requires at least one of pA or pB." ) # policy --> n_levels_factor_f x 1 # factor --> n_levels_factor_f x n_policies ## vmap across policies compute_neg_efe_fixed_states = partial( compute_neg_efe_policy, qs_init, A, B, C, pA, pB, A_dependencies, B_dependencies, use_utility=use_utility, use_states_info_gain=use_states_info_gain, use_param_info_gain=use_param_info_gain, ) # only in the case of policy-dependent qs_inits # in_axes_list = (1,) * n_factors # all_neg_efe_of_policies = vmap(compute_neg_efe_policy, in_axes=(in_axes_list, 0))(qs_init_pi, policy_matrix) # policies needs to be an NDarray of shape (n_policies, n_timepoints, n_control_factors) neg_efe_all_policies = vmap(compute_neg_efe_fixed_states)(policy_matrix) return nn.softmax(gamma * neg_efe_all_policies + log_stable(E)), neg_efe_all_policies def compute_expected_state( qs_prior: list[Array], B: list[Array], u_t: Array | Sequence[int], B_dependencies: list[list[int]] | None = None, ) -> list[Array]: """ Compute posterior over next state, given belief about previous state, transition model and action... Parameters ---------- qs_prior: list[Array] Marginal beliefs over hidden states at time `t`. B: list[Array] Transition model tensors. u_t: Array | Sequence[int] Action indices for each control factor. B_dependencies: list[list[int]], optional Optional dependencies used to marginalize transition tensors. If `None`, defaults to factor-local transitions. Returns ------- list[Array] Marginal beliefs over next-time hidden states. """ #Note: this algorithm is only correct if each factor depends only on itself. For any interactions, # we will have empirical priors with codependent factors. assert len(u_t) == len(B) if B_dependencies is None: B_dependencies = utils.resolve_b_dependencies(len(B)) qs_next = [] for B_f, u_f, deps in zip(B, u_t, B_dependencies): relevant_factors = [qs_prior[idx] for idx in deps] qs_next_f = factor_dot(B_f[...,u_f], relevant_factors, keep_dims=(0,)) qs_next.append(qs_next_f) # P(s'|s, u) = \sum_{s, u} P(s'|s) P(s|u) P(u|pi)P(pi) because u pi return qs_next def compute_expected_state_and_Bs( qs_prior: list[Array], B: list[Array], u_t: Array | Sequence[int] ) -> tuple[list[Array], list[Array]]: """Compute one-step predictive states and selected transition matrices. Parameters ---------- qs_prior: list[Array] Marginal beliefs over hidden states at time `t`. B: list[Array] Transition model tensors for each hidden-state factor. u_t: Array | Sequence[int] Action indices for each control factor at time `t`. Returns ------- tuple[list[Array], list[Array]] `(qs_next, Bs)` where `qs_next` are next-state marginals and `Bs` are the action-conditioned transition slices used for each factor. """ assert len(u_t) == len(B) qs_next = [] Bs = [] for qs_f, B_f, u_f in zip(qs_prior, B, u_t): qs_next.append( B_f[..., u_f].dot(qs_f) ) Bs.append(B_f[..., u_f]) return qs_next, Bs def compute_expected_obs( qs: list[Array], A: list[Array], A_dependencies: list[list[int]] ) -> list[Array]: """ New version of expected observation (computation of Q(o|pi)) that takes into account sparse dependencies between observation modalities and hidden state factors Parameters ---------- qs: list[Array] Beliefs over hidden states. A: list[Array] Observation likelihood models. A_dependencies: list[list[int]] Observation dependencies between modalities and state factors. Returns ------- list[Array] Predictive beliefs over observations for each modality. """ def compute_expected_obs_modality(A_m: Array, m: int) -> Array: deps = A_dependencies[m] relevant_factors = [qs[idx] for idx in deps] return factor_dot(A_m, relevant_factors, keep_dims=(0,)) return jtu.tree_map(compute_expected_obs_modality, A, list(range(len(A)))) def compute_info_gain( qs: list[Array], qo: list[Array], A: list[Array], A_dependencies: list[list[int]] ) -> Array: """Compute expected state-information gain term of expected free energy. Parameters ---------- qs: list[Array] Predicted hidden-state beliefs. qo: list[Array] Predicted observation beliefs. A: list[Array] Observation likelihood tensors. A_dependencies: list[list[int]] Observation dependencies between modalities and hidden-state factors. Returns ------- Array Scalar epistemic value from expected information gain. """ def compute_info_gain_for_modality(qo_m: Array, A_m: Array, m: int) -> Array: H_qo = stable_entropy(qo_m) H_A_m = - stable_xlogx(A_m).sum(0) deps = A_dependencies[m] relevant_factors = [qs[idx] for idx in deps] qs_H_A_m = factor_dot(H_A_m, relevant_factors) return H_qo - qs_H_A_m info_gains_per_modality = jtu.tree_map(compute_info_gain_for_modality, qo, A, list(range(len(A)))) return jtu.tree_reduce(lambda x,y: x+y, info_gains_per_modality) def compute_expected_utility(qo: list[Array], C: list[Array], t: int = 0) -> Array: """Compute expected utility from predictive observations and preferences. Parameters ---------- qo: list[Array] Predicted observations for each modality. C: list[Array] Prior preferences per modality. Each modality can be static `(num_obs,)` or time-indexed `(policy_len, num_obs)`. t: int, default=0 Planning timestep used when `C[m]` is time-indexed. Returns ------- Array Scalar expected utility contribution. """ util = 0. for o_m, C_m in zip(qo, C): if C_m.ndim > 1: util += (o_m * C_m[t]).sum() else: util += (o_m * C_m).sum() return util def calc_negative_pA_info_gain( pA: list[Array], qo: list[Array], qs: list[Array], A_dependencies: list[list[int]] ) -> Array: """ Compute the negative expected Dirichlet information gain about `pA`. Notes ----- This helper returns the negative of the parameter epistemic-value term. Subtract its return value when adding parameter information gain to `neg_efe`. Parameters ---------- pA: list[Array] Dirichlet parameters over observation model (same shape as `A`). qo: list[Array] Predictive posterior beliefs over observations; stores the beliefs about observations expected under the policy at some arbitrary time `t`. qs: list[Array] Predictive posterior beliefs over hidden states, stores the beliefs about hidden states expected under the policy at some arbitrary time `t`. Returns ------- neg_infogain_pA: Array Negative expected information gain (scalar JAX array) for the pair of predictive distributions `qo` and `qs`. """ def infogain_per_modality(pa_m: Array, qo_m: Array, m: int) -> Array: wa_m = spm_wnorm(pa_m) * (pa_m > 0.) relevant_factors = [qs[idx] for idx in A_dependencies[m]] fd = factor_dot(wa_m, relevant_factors, keep_dims=(0,))[..., None] return qo_m.dot(fd) pA_neg_infogain_per_modality = jtu.tree_map( infogain_per_modality, pA, qo, list(range(len(qo))) ) neg_infogain_pA = jtu.tree_reduce(lambda x, y: x + y, pA_neg_infogain_per_modality) return neg_infogain_pA.squeeze(-1) def calc_negative_pB_info_gain( pB: list[Array], qs_t: list[Array], qs_t_minus_1: list[Array], B_dependencies: list[list[int]], u_t_minus_1: Array | Sequence[int], ) -> Array: """ Compute the negative expected Dirichlet information gain about `pB`. Notes ----- This helper returns the negative of the parameter epistemic-value term. Subtract its return value when adding parameter information gain to `neg_efe`. Parameters ---------- pB: list[Array] Dirichlet parameters over transition model (same shape as `B`). qs_t: list[Array] Predictive posterior beliefs over hidden states expected under the policy at time `t`. qs_t_minus_1: list[Array] Posterior over hidden states at time `t-1` (before receiving observations). B_dependencies: list[list[int]] For each state factor, indices of the state factors that its transition model depends on. u_t_minus_1: Array | Sequence[int] Actions in time step t-1 for each factor. Returns ------- neg_infogain_pB: Array Negative expected information gain (scalar JAX array) under the policy in question. """ wB = lambda pb: spm_wnorm(pb) * (pb > 0.) fd = lambda x, i: factor_dot( x, [qs_t_minus_1[idx] for idx in B_dependencies[i]], keep_dims=(0,), )[..., None] pB_neg_infogain_per_factor = jtu.tree_map(lambda pb, qs, f: qs.dot(fd(wB(pb[..., u_t_minus_1[f]]), f)), pB, qs_t, list(range(len(qs_t)))) neg_infogain_pB = jtu.tree_reduce(lambda x, y: x + y, pB_neg_infogain_per_factor)[0] return neg_infogain_pB def compute_neg_efe_policy( qs_init: list[Array], A: list[Array], B: list[Array], C: list[Array], pA: list[Array] | None, pB: list[Array] | None, A_dependencies: list[list[int]], B_dependencies: list[list[int]], policy_i: Array, use_utility: bool = True, use_states_info_gain: bool = True, use_param_info_gain: bool = False, ) -> Array: """Compute policy-wise negative expected free energy for one policy. Notes ----- This function computes `neg_efe = -EFE` for a single policy. This policy score (`neg_efe`) is commonly denoted `G`. Parameters ---------- qs_init: list[Array] Initial hidden-state marginals at current timestep. A: list[Array] Observation likelihood tensors. B: list[Array] Transition tensors. C: list[Array] Prior preferences over observations. pA: list[Array] | None Optional posterior Dirichlet parameters for `A`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. pB: list[Array] | None Optional posterior Dirichlet parameters for `B`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. A_dependencies: list[list[int]] Observation dependencies between modalities and hidden-state factors. B_dependencies: list[list[int]] Transition dependencies between hidden-state factors. policy_i: Array Single policy trajectory with shape `(policy_len, num_factors)`. use_utility: bool, default=True Include expected utility term. use_states_info_gain: bool, default=True Include state-information-gain term. use_param_info_gain: bool, default=False Include parameter-information-gain term. Returns ------- Array Scalar negative expected free energy for `policy_i`. """ if use_param_info_gain and pA is None and pB is None: raise ValueError( "use_param_info_gain=True requires at least one of pA or pB." ) def scan_body(carry: tuple[list[Array], Array], t: Array) -> tuple[tuple[list[Array], Array], None]: qs, neg_efe = carry qs_next = compute_expected_state(qs, B, policy_i[t], B_dependencies) qo = compute_expected_obs(qs_next, A, A_dependencies) info_gain = compute_info_gain(qs_next, qo, A, A_dependencies) if use_states_info_gain else 0. utility = compute_expected_utility(qo, C, t) if use_utility else 0. neg_param_info_gain = 0. if pA is not None: neg_param_info_gain += calc_negative_pA_info_gain(pA, qo, qs_next, A_dependencies) if use_param_info_gain else 0. if pB is not None: neg_param_info_gain += calc_negative_pB_info_gain(pB, qs_next, qs, B_dependencies, policy_i[t]) if use_param_info_gain else 0. neg_efe += info_gain + utility - neg_param_info_gain return (qs_next, neg_efe), None qs = qs_init neg_efe = 0. final_state, _ = lax.scan(scan_body, (qs, neg_efe), jnp.arange(policy_i.shape[0])) qs_final, neg_efe = final_state return neg_efe def compute_neg_efe_policy_inductive( qs_init: list[Array], A: list[Array], B: list[Array], C: list[Array], pA: list[Array] | None, pB: list[Array] | None, A_dependencies: list[list[int]], B_dependencies: list[list[int]], I: list[Array], policy_i: Array, inductive_epsilon: float = 1e-3, use_utility: bool = True, use_states_info_gain: bool = True, use_param_info_gain: bool = False, use_inductive: bool = False, ) -> Array: """ Compute policy-wise negative expected free energy with inductive planning. Notes ----- This function computes `neg_efe = -EFE` for a single policy with optional inductive-value terms. This score is commonly denoted `G`, so here `G = neg_efe = -EFE`. Parameters ---------- qs_init: list[Array] Initial hidden-state marginals at current timestep. A: list[Array] Observation likelihood tensors. B: list[Array] Transition tensors. C: list[Array] Prior preferences over observations. pA: list[Array] | None Optional posterior Dirichlet parameters for `A`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. pB: list[Array] | None Optional posterior Dirichlet parameters for `B`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. A_dependencies: list[list[int]] Observation dependencies between modalities and hidden-state factors. B_dependencies: list[list[int]] Transition dependencies between hidden-state factors. I: list[Array] Inductive reachability matrices. policy_i: Array Single policy trajectory with shape `(policy_len, num_factors)`. inductive_epsilon: float, default=1e-3 Scale of the inductive-value contribution. use_utility: bool, default=True Include expected utility term. use_states_info_gain: bool, default=True Include state-information-gain term. use_param_info_gain: bool, default=False Include parameter-information-gain term. use_inductive: bool, default=False Include inductive-value term. Returns ------- Array Scalar negative expected free energy for `policy_i`. """ if use_param_info_gain and pA is None and pB is None: raise ValueError( "use_param_info_gain=True requires at least one of pA or pB." ) def scan_body(carry: tuple[list[Array], Array], t: Array) -> tuple[tuple[list[Array], Array], None]: qs, neg_efe = carry qs_next = compute_expected_state(qs, B, policy_i[t], B_dependencies) qo = compute_expected_obs(qs_next, A, A_dependencies) info_gain = compute_info_gain(qs_next, qo, A, A_dependencies) if use_states_info_gain else 0. utility = compute_expected_utility(qo, C, t) if use_utility else 0. # Keep inductive admissibility anchored to the starting-state belief # across the rollout to preserve current policy-scoring semantics. inductive_value = calc_inductive_value_t(qs_init, qs_next, I, epsilon=inductive_epsilon) if use_inductive else 0. neg_param_info_gain = 0. if pA is not None: neg_param_info_gain += calc_negative_pA_info_gain(pA, qo, qs_next, A_dependencies) if use_param_info_gain else 0. if pB is not None: neg_param_info_gain += calc_negative_pB_info_gain(pB, qs_next, qs, B_dependencies, policy_i[t]) if use_param_info_gain else 0. neg_efe += info_gain + utility - neg_param_info_gain + inductive_value return (qs_next, neg_efe), None qs = qs_init neg_efe = 0. final_state, _ = lax.scan(scan_body, (qs, neg_efe), jnp.arange(policy_i.shape[0])) _, neg_efe = final_state return neg_efe def update_posterior_policies_inductive( policy_matrix: Array, qs_init: list[Array], A: list[Array], B: list[Array], C: list[Array], E: Array, pA: list[Array] | None, pB: list[Array] | None, A_dependencies: list[list[int]], B_dependencies: list[list[int]], I: list[Array], gamma: float = 16.0, inductive_epsilon: float = 1e-3, use_utility: bool = True, use_states_info_gain: bool = True, use_param_info_gain: bool = False, use_inductive: bool = True, ) -> tuple[Array, Array]: """ Compute policy posterior and negative expected free energy with optional inductive terms. Notes ----- The returned policy score is `neg_efe = -EFE`. This same quantity is often denoted by `G`. Parameters ---------- policy_matrix: Array Policy tensor with shape `(num_policies, policy_len, num_factors)`. qs_init: list[Array] Current marginal state beliefs. A: list[Array] Observation likelihood models. B: list[Array] Transition models. C: list[Array] Prior preference vectors. E: Array Policy prior over the policy space. pA: list[Array] | None Optional posterior Dirichlet parameters for `A`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. pB: list[Array] | None Optional posterior Dirichlet parameters for `B`. When `use_param_info_gain=True`, provide `pA`, `pB`, or both. A_dependencies: list[list[int]] Observation dependencies between modalities and state factors. B_dependencies: list[list[int]] Transition dependencies between hidden-state factors and control factors. I: list[Array] Inductive planning matrices. gamma: float = 16.0 Policy precision for softmax policy posterior. inductive_epsilon: float = 1e-3 Inductive value scale factor. use_utility: bool = True Include utility term in expected free energy. use_states_info_gain: bool = True Include epistemic state-information gain term. use_param_info_gain: bool = False Include epistemic parameter-information gain term. use_inductive: bool = True Include inductive value term. Returns ------- q_pi: Array Posterior over policies. neg_efe_all_policies: Array Policy-wise negative expected free energies. """ if use_param_info_gain and pA is None and pB is None: raise ValueError( "use_param_info_gain=True requires at least one of pA or pB." ) # policy --> n_levels_factor_f x 1 # factor --> n_levels_factor_f x n_policies ## vmap across policies compute_neg_efe_fixed_states = partial( compute_neg_efe_policy_inductive, qs_init, A, B, C, pA, pB, A_dependencies, B_dependencies, I, inductive_epsilon=inductive_epsilon, use_utility=use_utility, use_states_info_gain=use_states_info_gain, use_param_info_gain=use_param_info_gain, use_inductive=use_inductive, ) # only in the case of policy-dependent qs_inits # in_axes_list = (1,) * n_factors # all_neg_efe_of_policies = vmap(compute_neg_efe_policy, in_axes=(in_axes_list, 0))(qs_init_pi, policy_matrix) # policies needs to be an NDarray of shape (n_policies, n_timepoints, n_control_factors) neg_efe_all_policies = vmap(compute_neg_efe_fixed_states)(policy_matrix) return nn.softmax(gamma * neg_efe_all_policies + log_stable(E)), neg_efe_all_policies def generate_I_matrix(H: list[Array], B: list[Array], threshold: float, depth: int) -> list[Array]: """ Generate inductive reachability matrices using backward state reachability. These matrices store whether state `j` (columns) can still reach the intended state set after `i` backward steps (rows). Parameters ---------- H: list[Array] Constraints over desired states (1 if you want to reach that state, 0 otherwise) B: list[Array] Dynamics likelihood mapping or transition model, mapping from hidden states at `t` to hidden states at `t+1`, given some control state `u`. Each element `B[f]` stores a 3-D tensor for hidden state factor `f`, whose entries `B[f][s, v, u]` store the probability of hidden state level `s` at the current time, given hidden state level `v` and action `u` at the previous time. threshold: float The threshold for pruning transitions that are below a certain probability depth: int The temporal depth of the backward induction Returns ---------- I: list[Array] For each state factor, contains a 2D indicator array whose element `i, j` is `1` when state `j` can still reach the intended state set after `i` backward steps, and `0` otherwise. """ if depth < 1: raise ValueError("`depth` must be >= 1") num_factors = len(H) I = [] for f in range(num_factors): # Compute backward reachability separately for each hidden-state factor. # If there exists an action that allows transitioning from # previous_state to next_state with probability above threshold, # set reachable_next_prev[next_state, previous_state] to 1. reachable_next_prev = jnp.where(B[f] > threshold, 1.0, 0.0).sum(axis=-1) reachable_next_prev = jnp.where(reachable_next_prev > 0.0, 1.0, 0.0) predecessor_reachable = jnp.swapaxes(reachable_next_prev, 0, 1) def step_fn(carry: Array, _: Array) -> tuple[Array, Array]: I_prev = carry # Predecessor states are allowed if they can reach any currently # allowed successor state. I_next = jnp.dot(predecessor_reachable, I_prev) I_next = jnp.where(I_next > 0.0, 1.0, 0.0) return I_next, I_next _, I_f = lax.scan(step_fn, H[f], jnp.arange(depth-1)) I_f = jnp.concatenate([H[f][None,...], I_f], axis=0) I.append(I_f) return I def calc_inductive_value_t( qs: list[Array], qs_next: list[Array], I: list[Array], epsilon: float = 1e-3 ) -> Array: """ Computes the inductive value of a state at a particular time (translation of @tverbele's `numpy` implementation of inductive planning, formerly called `calc_inductive_cost`). Parameters ---------- qs: list[Array] Marginal posterior beliefs over hidden states at a given timepoint. qs_next: list[Array] Predictive posterior beliefs over hidden states expected under the policy. I: list[Array] For each state factor, contains a 2D array whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. epsilon: float Value that tunes the strength of the inductive value (how much it contributes to the expected free energy of policies) Returns ------- inductive_val: float Value (negative inductive cost) of visiting this state using backwards induction under the policy in question """ # initialise inductive value inductive_val = 0. log_eps = log_stable(epsilon) for f in range(len(qs)): # we also assume precise beliefs here?! idx = jnp.argmax(qs[f]) # m = arg max_n p_n < sup p # i.e. find first entry at which I_idx equals 1, and then m is the index before that m = jnp.maximum(jnp.argmax(I[f][:, idx])-1, 0) I_m = (1. - I[f][m, :]) * log_eps path_available = jnp.clip(I[f][:, idx].sum(0), min=0, max=1) # if there are any 1's at all in that column of I, then this == 1, otherwise 0 inductive_val += path_available * I_m.dot(qs_next[f]) # scaling by path_available will nullify the addition of inductive value in the case we find no path to goal (i.e. when no goal specified) return inductive_val # if __name__ == '__main__': # from jax import random as jr # key = jr.PRNGKey(1) # num_obs = [3, 4] # A = [jr.uniform(key, shape = (no, 2, 2)) for no in num_obs] # B = [jr.uniform(key, shape = (2, 2, 2)), jr.uniform(key, shape = (2, 2, 2))] # C = [log_stable(jnp.array([0.8, 0.1, 0.1])), log_stable(jnp.ones(4)/4)] # policy_1 = jnp.array([[0, 1], # [1, 1]]) # policy_2 = jnp.array([[1, 0], # [0, 0]]) # policy_matrix = jnp.stack([policy_1, policy_2]) # 2 x 2 x 2 tensor # qs_init = [jnp.ones(2)/2, jnp.ones(2)/2] # neg_efe_all_policies = jit(update_posterior_policies)(policy_matrix, qs_init, A, B, C) # print(neg_efe_all_policies) ================================================ FILE: pymdp/distribution.py ================================================ import numpy as np from pymdp.utils import norm_dist from typing import Any, Iterator, Optional class Distribution: def __init__(self, event: dict, batch: dict = {}, data: np.ndarray | None = None) -> None: self.event = event self.batch = batch self.event_indices = { key: {v: i for i, v in enumerate(values)} for key, values in event.items() } self.batch_indices = { key: {v: i for i, v in enumerate(values)} for key, values in batch.items() } if data is not None: self._data = data else: shape = [] for v in event.values(): shape.append(len(v)) for v in batch.values(): shape.append(len(v)) self._data = np.zeros(shape) @property def data(self) -> np.ndarray: return self._data @data.setter def data(self, value: np.ndarray) -> None: if hasattr(self, '_data') and self._data is not None: if self._data.shape != value.shape: raise ValueError(f"When setting the tensor directly, the new shape {value.shape} must match the existing tensor shape {self._data.shape}") self._data = value def get(self, batch: dict | None = None, event: dict | None = None) -> np.ndarray: event_slices = self._get_slices(event, self.event_indices, self.event) batch_slices = self._get_slices(batch, self.batch_indices, self.batch) slices = event_slices + batch_slices return self._data[tuple(slices)] def set( self, batch: dict | None = None, event: dict | None = None, values: np.ndarray | float | int | None = None ) -> None: event_slices = self._get_slices(event, self.event_indices, self.event) batch_slices = self._get_slices(batch, self.batch_indices, self.batch) slices = event_slices + batch_slices self._data[tuple(slices)] = values def _get_slices(self, keys: dict | None, indices: dict, full_indices: dict) -> list[Any]: slices = [] if keys is None: return [slice(None)] * len(full_indices) for key in full_indices: if key in keys: if isinstance(keys[key], list): slices.append( [self._get_index(v, indices[key]) for v in keys[key]] ) else: slices.append(self._get_index(keys[key], indices[key])) else: slices.append(slice(None)) return slices def _get_index(self, key: Any, index_map: dict) -> int: if isinstance(key, int): return key else: return index_map[key] def _get_index_from_axis(self, axis: int, element: Any) -> int | slice: if isinstance(element, slice): return slice(None) if axis < len(self.event): key = list(self.event.keys())[axis] index_map = self.event_indices[key] else: key = list(self.batch.keys())[axis - len(self.event)] index_map = self.batch_indices[key] return self._get_index(element, index_map) def __getitem__(self, indices: Any) -> np.ndarray: if not isinstance(indices, tuple): indices = (indices,) index_list = [ self._get_index_from_axis(i, idx) for i, idx in enumerate(indices) ] return self._data[tuple(index_list)] def __setitem__(self, indices: Any, value: Any) -> None: if not isinstance(indices, tuple): indices = (indices,) index_list = [ self._get_index_from_axis(i, idx) for i, idx in enumerate(indices) ] self._data[tuple(index_list)] = value def normalize(self) -> None: self.data = norm_dist(self.data) def __repr__(self) -> str: return f"Distribution({self.event}, {self.batch})\n {self.data}" class DistributionIndexer(dict): """ Helper class to allow for indexing of distributions by their event keys. Acts as a list otherwise ... """ def __init__(self, distributions: list[Distribution]) -> None: super().__init__() self.distributions = distributions for d in distributions: for key in d.event: self[key] = d def __getitem__(self, key: str | int) -> Distribution: if isinstance(key, int): return self.distributions[key] else: if key not in self.keys(): raise KeyError( f"Key {key} not found in " + str([k for k in self.keys()]) ) return super().__getitem__(key) def __iter__(self) -> Iterator[Distribution]: return iter(self.distributions) class Model(dict): def __init__( self, likelihoods: list[Distribution], transitions: list[Distribution], preferred_observations: list[Distribution], priors: list[Distribution], preferred_states: list[Distribution], B_action_dependencies: Optional[list[list[int]]]=None, num_controls: Optional[list[int]]=None, ) -> None: super().__init__() super().__setitem__("A", likelihoods) super().__setitem__("B", transitions) super().__setitem__("C", preferred_observations) super().__setitem__("D", priors) super().__setitem__("H", preferred_states) super().__setitem__("B_action_dependencies", B_action_dependencies) super().__setitem__("num_controls", num_controls) def __getattr__(self, key: str) -> Any: if key in ["A", "B", "C", "D", "H"]: return DistributionIndexer(self[key]) elif key == "B_action_dependencies": return self["B_action_dependencies"] elif key == "num_controls": return self["num_controls"] raise AttributeError("Model only supports attributes A,B,C,D,H, B_action_dependencies, and num_controls") def compile_model(config: dict[str, Any]) -> Model: """Compile a model from a config. Takes a model description dictionary and builds the corresponding Likelihood and Transition tensors. The tensors are filled with only zeros and need to be filled in later by the caller of this function. --- The config should consist of three top-level keys: * observations * controls * states where each entry consists of another dictionary with the name of the modality as key and the modality description. The modality description should consist out of either a `size` or `elements` field indicating the named elements or the size of the integer array. In the case of an observation the `depends_on` field needs to be present to indicate what state factor links to this observation. In the case of states the `depends_on` and `controlled_by` fields are needed. --- example config: { "observations": { "observation_1": {"size": 10, "depends_on": ["factor_1"]}, "observation_2": { "elements": ["A", "B"], "depends_on": ["factor_1"], }, }, "controls": { "control_1": {"size": 2}, "control_2": {"elements": ["X", "Y"]}, }, "states": { "factor_1": { "elements": ["II", "JJ", "KK"], "depends_on": ["factor_1", "factor_2"], "controlled_by": ["control_1", "control_2"], }, "factor_2": { "elements": ["foo", "bar"], "depends_on": ["factor_2"], "controlled_by": ["control_2"], }, }} """ # these are needed to get the ordering of the dimensions correct for pymdp state_dependencies = dict() control_dependencies = dict() likelihood_dependencies = dict() transition_events = dict() likelihood_events = dict() labels = dict() shape = dict() for mod in config: for k, v in config[mod].items(): for keyword in v: match keyword: case "elements": shape[k] = len(v[keyword]) labels[k] = [name for name in v[keyword]] case "size": shape[k] = v[keyword] labels[k] = list(range(v[keyword])) case "depends_on": if mod == "states": state_dependencies[k] = [ name for name in v[keyword] ] if k in v[keyword]: transition_events[k] = labels[k] else: likelihood_dependencies[k] = [ name for name in v[keyword] ] likelihood_events[k] = labels[k] case "controlled_by": control_dependencies[k] = [name for name in v[keyword]] transitions = [] for event, description in transition_events.items(): arr_shape = [len(description)] batch_descr = dict() event_descr = {event: description} for dep in state_dependencies[event]: arr_shape.append(shape[dep]) batch_descr[dep] = labels[dep] for dep in control_dependencies[event]: arr_shape.append(shape[dep]) batch_descr[dep] = labels[dep] arr = np.zeros(arr_shape) transitions.append(Distribution(event_descr, batch_descr, arr)) priors = [] for event, description in transition_events.items(): arr_shape = [len(description)] arr = np.ones(arr_shape) / len(description) event_descr = {event: description} priors.append(Distribution(event_descr, data=arr)) likelihoods = [] for event, description in likelihood_events.items(): arr_shape = [len(description)] batch_descr = dict() event_descr = {event: description} for dep in likelihood_dependencies[event]: arr_shape.append(shape[dep]) batch_descr[dep] = labels[dep] arr = np.zeros(arr_shape) likelihoods.append(Distribution(event_descr, batch_descr, arr)) preferred_observations = [] for event, description in likelihood_events.items(): arr_shape = [len(description)] arr = np.zeros(arr_shape) event_descr = {event: description} preferred_observations.append(Distribution(event_descr, data=arr)) preferred_states = [] for event, description in transition_events.items(): arr_shape = [len(description)] arr = np.ones(arr_shape) / len(description) event_descr = {event: description} preferred_states.append(Distribution(event_descr, data=arr)) B_action_dependencies = [ [list(config["controls"].keys()).index(i) for i in s["controlled_by"]] for s in config["states"].values() ] num_controls = [] for c in config["controls"].values(): if "elements" in c: num_controls.append(len(c["elements"])) elif "size" in c: num_controls.append(int(c["size"])) else: raise ValueError(f"Control {c} has no elements or size") return Model( likelihoods, transitions, preferred_observations, priors, preferred_states, B_action_dependencies, num_controls ) def get_dependencies( likelihoods: list[Distribution], transitions: list[Distribution] ) -> tuple[list[list[int]], list[list[int]]]: likelihood_dependencies = dict() transition_dependencies = dict() states = [list(trans.event.keys())[0] for trans in transitions] for like in likelihoods: likelihood_dependencies[list(like.event.keys())[0]] = [ states.index(name) for name in like.batch.keys() ] for trans in transitions: transition_dependencies[list(trans.event.keys())[0]] = [ states.index(name) for name in trans.batch.keys() if name in states ] return list(likelihood_dependencies.values()), list( transition_dependencies.values() ) if __name__ == "__main__": controls = ["up", "down"] locations = ["A", "B", "C", "D"] data = np.zeros((len(locations), len(locations), len(controls))) transition = Distribution( {"location": locations}, {"location": locations, "control": controls}, data, ) assert transition["A", "B", "up"] == 0.0 assert transition[:, "B", "up"].shape == (4,) assert transition["A", "B", :].shape == (2,) assert transition[:, "B", :].shape == (4, 2) assert transition[:, :, :].shape == (4, 4, 2) assert transition[0, "B", 0] == 0.0 assert transition[:, "B", 0].shape == (4,) transition["A", "B", "up"] = 0.5 assert transition["A", "B", "up"] == 0.5 transition[:, "B", "up"] = np.ones(4) assert np.all(transition[:, "B", "up"] == 1.0) assert transition.get({"location": "A"}, {"location": "B"}).shape == (2,) assert ( transition.get({"location": "A", "control": "up"}, {"location": "B"}) == 0.0 ) assert transition.get({"control": "up"}).shape == (4, 4) transition.set({"location": "A", "control": "up"}, {"location": "B"}, 0.5) assert ( transition.get({"location": "A", "control": "up"}, {"location": "B"}) == 0.5 ) transition.set({"location": 0, "control": "up"}, {"location": "B"}, 0.7) assert ( transition.get({"location": "A", "control": "up"}, {"location": "B"}) == 0.7 ) transition.set({"location": "A"}, {"location": "B"}, np.ones(2)) assert np.all(transition.get({"location": "A"}, {"location": "B"}) == 1.0) model_example = { "observations": { "observation_1": {"size": 10, "depends_on": ["factor_1"]}, "observation_2": { "elements": ["A", "B"], "depends_on": ["factor_2"], }, }, "controls": { "control_1": {"size": 2}, "control_2": {"elements": ["X", "Y"]}, }, "states": { "factor_1": { "elements": ["II", "JJ", "KK"], "depends_on": ["factor_1", "factor_2"], "controlled_by": ["control_1", "control_2"], }, "factor_2": { "elements": ["foo", "bar"], "depends_on": ["factor_2"], "controlled_by": ["control_2"], }, }, } model = compile_model(model_example) like = model.A trans = model.B assert len(trans) == 2 assert len(like) == 2 assert trans[0].data.shape == (3, 3, 2, 2, 2) assert trans[1].data.shape == (2, 2, 2) assert like[0].data.shape == (10, 3) assert like[1].data.shape == (2, 2) assert like["observation_1"][:, "II"] is not None assert like["observation_2"][1, :] is not None A_deps, B_deps = get_dependencies(like, trans) print(A_deps, B_deps) model_description = { "observations": { "o1": {"elements": ["A", "B", "C", "D"], "depends_on": ["s1"]}, }, "controls": {"c1": {"elements": ["up", "down"]}}, "states": { "s1": { "elements": ["A", "B", "C", "D"], "depends_on": ["s1"], "controlled_by": ["c1"], }, }, } model = compile_model(model_description) ================================================ FILE: pymdp/envs/__init__.py ================================================ from .tmaze import TMaze, SimplifiedTMaze from .rollout import rollout from .env import Env, PymdpEnv, make from .graph_worlds import GraphEnv from .grid_world import GridWorld from .cue_chaining import CueChainingEnv ================================================ FILE: pymdp/envs/cue_chaining.py ================================================ """Cue-chaining grid world implemented as a JAX-compatible ``PymdpEnv``. This module ports the legacy cue-chaining demo environment to the modern JAX-first environment API. The environment encodes a two-stage epistemic chain: 1. Visiting ``cue1_location`` reveals which second-level cue location is active. 2. Visiting that active second-level cue location reveals the reward condition. 3. Visiting one of the reward locations yields reward or punishment depending on the latent reward condition. """ from __future__ import annotations from typing import Sequence import jax.numpy as jnp from .env import PymdpEnv class CueChainingEnv(PymdpEnv): """Grid-world cue-chaining task using factorized categorical dynamics. Hidden state factors -------------------- - factor 0 (location): flattened grid position - factor 1 (cue-2 state): which second-level cue location is informative - factor 2 (reward condition): which reward location contains reward Observation modalities ---------------------- - modality 0 (location): identity observation over location - modality 1 (cue-1): null everywhere except at ``cue1_location``, where it reveals the active cue-2 state - modality 2 (cue-2): null everywhere except at the active cue-2 location, where it reveals reward condition - modality 3 (reward): null away from reward locations; at reward locations yields reward or punishment based on reward condition """ ACTION_LABELS = ("UP", "DOWN", "LEFT", "RIGHT", "STAY") def __init__( self, grid_shape: tuple[int, int] = (5, 7), start_location: tuple[int, int] = (0, 0), cue1_location: tuple[int, int] = (2, 0), cue2_locations: Sequence[tuple[int, int]] = ((0, 2), (1, 3), (3, 3), (4, 2)), reward_locations: Sequence[tuple[int, int]] = ((1, 5), (3, 5)), cue2_state: int | None = None, reward_condition: int | None = None, cue2_names: Sequence[str] | None = None, reward_condition_names: Sequence[str] | None = None, categorical_obs: bool = False, ) -> None: """Initialize the cue-chaining environment. Parameters ---------- grid_shape : tuple[int, int], optional Number of rows and columns in the grid. start_location : tuple[int, int], optional Initial agent location. cue1_location : tuple[int, int], optional Location of the first cue. cue2_locations : sequence[tuple[int, int]], optional Candidate locations of the second cue. The latent ``cue2_state`` selects which one is informative in an episode. reward_locations : sequence[tuple[int, int]], optional Candidate reward locations. Exactly two are supported, matching the ``Cheese``/``Shock`` reward observations. cue2_state : int | None, optional Fixed initial state for factor 1. If ``None``, use a uniform prior. reward_condition : int | None, optional Fixed initial state for factor 2. If ``None``, use a uniform prior. cue2_names : sequence[str] | None, optional Labels for cue-2 states. Defaults to ``("L1", "L2", ...)``. reward_condition_names : sequence[str] | None, optional Labels for reward conditions. Defaults to ``("TOP", "BOTTOM")``. categorical_obs : bool, default=False If ``True``, ``reset()`` and ``step()`` emit one-hot categorical observation vectors with shape ``(1, num_obs_m)`` for each modality. If ``False``, they emit discrete observation indices with shape ``(1,)``. """ rows, cols = grid_shape if rows <= 0 or cols <= 0: raise ValueError("`grid_shape` must contain strictly positive integers.") if len(cue2_locations) == 0: raise ValueError("`cue2_locations` must contain at least one location.") if len(reward_locations) != 2: raise ValueError("`reward_locations` must contain exactly two locations.") self.grid_shape = tuple(grid_shape) self.start_location = tuple(start_location) self.cue1_location = tuple(cue1_location) self.cue2_locations = tuple(tuple(c) for c in cue2_locations) self.reward_locations = tuple(tuple(r) for r in reward_locations) for coord in (self.start_location, self.cue1_location): self._validate_coord(coord) for coord in self.cue2_locations: self._validate_coord(coord) for coord in self.reward_locations: self._validate_coord(coord) self.num_location_states = rows * cols self.num_cue2_states = len(self.cue2_locations) self.num_reward_states = len(self.reward_locations) if cue2_state is not None and not (0 <= cue2_state < self.num_cue2_states): raise ValueError("`cue2_state` out of bounds for provided `cue2_locations`.") if reward_condition is not None and not (0 <= reward_condition < self.num_reward_states): raise ValueError("`reward_condition` out of bounds for provided `reward_locations`.") if cue2_names is None: cue2_names = tuple(f"L{i + 1}" for i in range(self.num_cue2_states)) if len(cue2_names) != self.num_cue2_states: raise ValueError("`cue2_names` length must match `cue2_locations`.") if reward_condition_names is None: reward_condition_names = ("TOP", "BOTTOM") if len(reward_condition_names) != self.num_reward_states: raise ValueError( "`reward_condition_names` length must match `reward_locations`." ) self.cue2_names = tuple(cue2_names) self.reward_condition_names = tuple(reward_condition_names) self.location_obs_names = tuple( f"({row}, {col})" for row in range(rows) for col in range(cols) ) self.cue1_obs_names = ("Null",) + self.cue2_names self.cue2_obs_names = ("Null",) + tuple( f"reward_on_{name.lower()}" for name in self.reward_condition_names ) self.reward_obs_names = ("Null", "Cheese", "Shock") self.start_index = self.coords_to_index(self.start_location) self.cue1_index = self.coords_to_index(self.cue1_location) self.cue2_indices = tuple(self.coords_to_index(coord) for coord in self.cue2_locations) self.reward_indices = tuple( self.coords_to_index(coord) for coord in self.reward_locations ) A, A_dependencies = self._generate_A() B, B_dependencies = self._generate_B() D = self._generate_D(cue2_state=cue2_state, reward_condition=reward_condition) super().__init__( A=A, B=B, D=D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, categorical_obs=categorical_obs, ) def coords_to_index(self, coord: tuple[int, int]) -> int: """Convert ``(row, col)`` coordinates to a flattened location index.""" self._validate_coord(coord) row, col = coord return int(row * self.grid_shape[1] + col) def index_to_coords(self, index: int) -> tuple[int, int]: """Convert a flattened location index to ``(row, col)`` coordinates.""" if not (0 <= index < self.num_location_states): raise ValueError("`index` out of bounds for location state space.") return (index // self.grid_shape[1], index % self.grid_shape[1]) def _validate_coord(self, coord: tuple[int, int]) -> None: row, col = coord rows, cols = self.grid_shape if not (0 <= row < rows and 0 <= col < cols): raise ValueError(f"Coordinate {coord} is outside grid bounds {self.grid_shape}.") def _generate_A(self) -> tuple[list[jnp.ndarray], list[list[int]]]: num_loc = self.num_location_states num_cue2 = self.num_cue2_states num_reward = self.num_reward_states # m0: location observation A_loc = jnp.eye(num_loc, dtype=jnp.float32) # m1: cue-1 observation (null + cue2 labels) A_cue1 = jnp.zeros((1 + num_cue2, num_loc, num_cue2), dtype=jnp.float32) A_cue1 = A_cue1.at[0, :, :].set(1.0) for cue_state in range(num_cue2): A_cue1 = A_cue1.at[0, self.cue1_index, cue_state].set(0.0) A_cue1 = A_cue1.at[1 + cue_state, self.cue1_index, cue_state].set(1.0) # m2: cue-2 observation (null + reward condition labels) A_cue2 = jnp.zeros((1 + num_reward, num_loc, num_cue2, num_reward), dtype=jnp.float32) A_cue2 = A_cue2.at[0, :, :, :].set(1.0) for cue_state, cue_loc_idx in enumerate(self.cue2_indices): A_cue2 = A_cue2.at[0, cue_loc_idx, cue_state, :].set(0.0) for reward_state in range(num_reward): A_cue2 = A_cue2.at[1 + reward_state, cue_loc_idx, cue_state, reward_state].set(1.0) # m3: reward observation (null, cheese, shock) A_reward = jnp.zeros((3, num_loc, num_reward), dtype=jnp.float32) A_reward = A_reward.at[0, :, :].set(1.0) for reward_loc_state, reward_loc_idx in enumerate(self.reward_indices): A_reward = A_reward.at[0, reward_loc_idx, :].set(0.0) for reward_state in range(num_reward): obs_idx = 1 if reward_loc_state == reward_state else 2 A_reward = A_reward.at[obs_idx, reward_loc_idx, reward_state].set(1.0) A = [A_loc, A_cue1, A_cue2, A_reward] A_dependencies = [[0], [0, 1], [0, 1, 2], [0, 2]] return A, A_dependencies def _generate_B(self) -> tuple[list[jnp.ndarray], list[list[int]]]: rows, cols = self.grid_shape num_loc = self.num_location_states num_actions = len(self.ACTION_LABELS) B_loc = jnp.zeros((num_loc, num_loc, num_actions), dtype=jnp.float32) for curr_idx in range(num_loc): row, col = self.index_to_coords(curr_idx) # UP up_idx = self.coords_to_index((max(row - 1, 0), col)) B_loc = B_loc.at[up_idx, curr_idx, 0].set(1.0) # DOWN down_idx = self.coords_to_index((min(row + 1, rows - 1), col)) B_loc = B_loc.at[down_idx, curr_idx, 1].set(1.0) # LEFT left_idx = self.coords_to_index((row, max(col - 1, 0))) B_loc = B_loc.at[left_idx, curr_idx, 2].set(1.0) # RIGHT right_idx = self.coords_to_index((row, min(col + 1, cols - 1))) B_loc = B_loc.at[right_idx, curr_idx, 3].set(1.0) # STAY B_loc = B_loc.at[curr_idx, curr_idx, 4].set(1.0) B_cue2 = jnp.eye(self.num_cue2_states, dtype=jnp.float32).reshape( self.num_cue2_states, self.num_cue2_states, 1 ) B_reward = jnp.eye(self.num_reward_states, dtype=jnp.float32).reshape( self.num_reward_states, self.num_reward_states, 1 ) B = [B_loc, B_cue2, B_reward] B_dependencies = [[0], [1], [2]] return B, B_dependencies def _generate_D( self, cue2_state: int | None, reward_condition: int | None, ) -> list[jnp.ndarray]: D_location = jnp.zeros((self.num_location_states,), dtype=jnp.float32) D_location = D_location.at[self.start_index].set(1.0) if cue2_state is None: D_cue2 = jnp.ones((self.num_cue2_states,), dtype=jnp.float32) / self.num_cue2_states else: D_cue2 = jnp.zeros((self.num_cue2_states,), dtype=jnp.float32) D_cue2 = D_cue2.at[cue2_state].set(1.0) if reward_condition is None: D_reward = ( jnp.ones((self.num_reward_states,), dtype=jnp.float32) / self.num_reward_states ) else: D_reward = jnp.zeros((self.num_reward_states,), dtype=jnp.float32) D_reward = D_reward.at[reward_condition].set(1.0) return [D_location, D_cue2, D_reward] ================================================ FILE: pymdp/envs/env.py ================================================ """Environment interfaces and POMDP-backed environment utilities. This module provides: - `Env`: an abstract JAX-compatible environment interface used by `rollout()`, - `PymdpEnv`: a concrete environment driven by categorical `A`, `B`, and `D`, - `make(...)`: a convenience constructor for `PymdpEnv` and optional params. """ from abc import ABC, abstractmethod from functools import partial from typing import Any, Sequence import jax.numpy as jnp from jax import jit, nn, random as jr, tree_util as jtu, vmap from jaxtyping import Array from pymdp.distribution import Distribution, get_dependencies def _float_to_int_index(x: Array) -> Array: """Cast index arrays to int32 for safe advanced indexing. Parameters ---------- x : Array Index leaf, potentially represented in floating type. Returns ------- Array Integer index array (`int32`) with the same structure as `x`. """ return jnp.asarray(x, jnp.int32) def select_probs( positions: Sequence[Array], matrix: Array, dependency_list: Sequence[int], actions: Array | None = None, ) -> Array: """Select conditional probabilities from a factorized tensor. Parameters ---------- positions : Sequence[Array] Current hidden-state indices for all factors. matrix : Array Likelihood or transition tensor to index. dependency_list : Sequence[int] Indices of factors used to index `matrix` lagging dimensions. actions : Array | None, optional Optional action index (or action indices) used to select the final action axis in transition tensors. Returns ------- Array Selected conditional probability vector(s). """ index_args = tuple(_float_to_int_index(positions[i]) for i in dependency_list) if actions is not None: index_args += (_float_to_int_index(actions),) return matrix[(..., *index_args)] def cat_sample(key: Array, p: Array) -> Array: """Sample from one or more categorical distributions. Parameters ---------- key : Array JAX PRNG key. p : Array Probability vector or batch of probability vectors on the last axis. Returns ------- Array Sampled category index/indices as floating values. """ a = jnp.arange(p.shape[-1], dtype=jnp.float32) if p.ndim > 1: choice = lambda key, p: jr.choice(key, a, p=p) keys = jr.split(key, len(p)) return vmap(choice)(keys, p) return jr.choice(key, a, p=p) def make( A: Sequence[Array] | Sequence[Distribution], B: Sequence[Array] | Sequence[Distribution], D: Sequence[Array] | Sequence[Distribution], A_dependencies: list[list[int]] | None = None, B_dependencies: list[list[int]] | None = None, make_env_params: bool = False, **kwargs: Any, ) -> tuple["PymdpEnv", dict[str, list[Array]] | None]: """Construct a `PymdpEnv` (and optionally environment parameters). Parameters ---------- A : sequence[Array] | sequence[Distribution] Observation likelihood tensors, one per observation modality. B : sequence[Array] | sequence[Distribution] Transition tensors, one per hidden-state factor. D : sequence[Array] | sequence[Distribution] Initial-state priors, one per hidden-state factor. A_dependencies : list[list[int]] | None, optional Explicit modality-to-state dependencies. If `None`, dependencies are inferred when possible. B_dependencies : list[list[int]] | None, optional Explicit state-transition dependencies. If `None`, dependencies are inferred when possible. make_env_params : bool, default=False If `True`, also return `env_params={"A": ..., "B": ..., "D": ...}` with `Distribution` entries converted to dense arrays. **kwargs : Any Additional keyword arguments forwarded to `PymdpEnv`. Returns ------- tuple[PymdpEnv, dict[str, list[Array]] | None] Constructed environment and optional unbatched environment parameters. To broadcast parameters to a larger batch, call `env.generate_env_params(batch_size=...)`. """ env = PymdpEnv( A=A, B=B, D=D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, **kwargs, ) if not make_env_params: return env, None def _to_arrays(params: Sequence[Array] | Sequence[Distribution] | None) -> list[Array] | None: if params is None: return None return [jnp.array(p.data) if isinstance(p, Distribution) else p for p in params] env_params = {"A": _to_arrays(A), "B": _to_arrays(B), "D": _to_arrays(D)} return env, env_params class Env(ABC): """Abstract JAX-compatible environment interface used by `rollout()`.""" @abstractmethod def reset( self, key: Array, state: list[Array] | None = None, env_params: dict[str, list[Array]] | None = None, ) -> tuple[list[Array], list[Array]]: """Reset environment state and return initial observation/state. Parameters ---------- key : Array JAX PRNG key. state : list[Array] | None, optional Optional explicit initial hidden state. env_params : dict[str, list[Array]] | None, optional Optional runtime override for environment parameters. Returns ------- tuple[list[Array], list[Array]] Initial observations and hidden state. """ raise NotImplementedError @abstractmethod def step( self, key: Array, state: list[Array], action: Array | None, env_params: dict[str, list[Array]] | None = None, ) -> tuple[list[Array], list[Array]]: """Advance one environment step and return new observation/state. Parameters ---------- key : Array JAX PRNG key. state : list[Array] Current hidden state. action : Array | None Action sampled by the agent. `None` can be used for no-op updates. env_params : dict[str, list[Array]] | None, optional Optional runtime override for environment parameters. Returns ------- tuple[list[Array], list[Array]] Next observations and hidden state. """ raise NotImplementedError def generate_env_params( self, key: Array | None = None, batch_size: int | None = None ) -> dict[str, list[Array]] | None: """Generate optional environment parameter pytrees. Parameters ---------- key : Array | None, optional Optional JAX PRNG key (unused by default implementation). batch_size : int | None, optional Optional batch size for parameter generation. Returns ------- dict[str, list[Array]] | None Environment parameters or `None` if not implemented. """ return None class PymdpEnv(Env): """Environment whose dynamics are defined by categorical `A`, `B`, and `D`. `PymdpEnv` is useful when the environment is isomorphic to a discrete POMDP generative process: - `A[m]`: observation likelihoods per modality, - `B[f]`: transitions per hidden-state factor, - `D[f]`: initial-state priors per hidden-state factor. """ def __init__( self, A: Sequence[Array] | Sequence[Distribution] | None = None, B: Sequence[Array] | Sequence[Distribution] | None = None, D: Sequence[Array] | Sequence[Distribution] | None = None, A_dependencies: list[list[int]] | None = None, B_dependencies: list[list[int]] | None = None, categorical_obs: bool = False, **kwargs: Any, ) -> None: """Initialize `PymdpEnv`. Parameters ---------- A : sequence[Array] | sequence[Distribution] | None, optional Observation likelihood tensors. B : sequence[Array] | sequence[Distribution] | None, optional Transition tensors. D : sequence[Array] | sequence[Distribution] | None, optional Initial-state priors. A_dependencies : list[list[int]] | None, optional Modality-to-state dependencies for `A`. B_dependencies : list[list[int]] | None, optional State-to-state dependencies for `B`. categorical_obs : bool, default=False If `True`, emit one-hot categorical observation vectors with shape `(1, num_obs)` per modality. Otherwise emit discrete indices with shape `(1,)`. **kwargs : Any Accepted for forward compatibility. """ del kwargs self.categorical_obs = categorical_obs if A_dependencies is not None: self.A_dependencies = A_dependencies elif A is not None and B is not None: if isinstance(A[0], Distribution) and isinstance(B[0], Distribution): self.A_dependencies, _ = get_dependencies(A, B) else: self.A_dependencies = [list(range(len(B))) for _ in range(len(A))] else: raise ValueError("Need to provide A and B or A_dependencies") if B_dependencies is not None: self.B_dependencies = B_dependencies elif A is not None and B is not None: if isinstance(A[0], Distribution) and isinstance(B[0], Distribution): _, self.B_dependencies = get_dependencies(A, B) else: self.B_dependencies = [[f] for f in range(len(B))] else: raise ValueError("Need to provide A and B or B_dependencies") if A is not None: self.A = [jnp.array(a.data) if isinstance(a, Distribution) else a for a in A] else: self.A = None if B is not None: self.B = [jnp.array(b.data) if isinstance(b, Distribution) else b for b in B] else: self.B = None if D is not None: self.D = [jnp.array(d.data) if isinstance(d, Distribution) else d for d in D] else: self.D = None def generate_env_params( self, key: Array | None = None, batch_size: int | None = None ) -> dict[str, list[Array]]: """Return default environment params, optionally broadcast to batch. Parameters ---------- key : Array | None, optional Optional JAX PRNG key (unused). batch_size : int | None, optional If provided, broadcast each parameter leaf with leading shape `(batch_size, ...)`. Returns ------- dict[str, list[Array]] Dictionary with keys `"A"`, `"B"`, and `"D"`. """ del key env_params = {"A": self.A, "B": self.B, "D": self.D} if batch_size is None: return env_params expand_to_batch = lambda x: jnp.broadcast_to(jnp.asarray(x), (batch_size,) + x.shape) return jtu.tree_map(expand_to_batch, {"A": self.A, "B": self.B, "D": self.D}) @partial(jit, static_argnums=(0,)) def reset( self, key: Array, state: list[Array] | None = None, env_params: dict[str, list[Array]] | None = None, ) -> tuple[list[Array], list[Array]]: """Reset state and emit an initial observation sample. If `state` is omitted, states are sampled from `D`. """ if state is None: probs = env_params["D"] if env_params is not None else self.D keys = list(jr.split(key, len(probs) + 1)) key = keys[0] state = jtu.tree_map(cat_sample, keys[1:], probs) obs = self._sample_obs(key, state, env_params) return obs, state @partial(jit, static_argnums=(0,)) def step( self, key: Array, state: list[Array], action: Array | None, env_params: dict[str, list[Array]] | None = None, ) -> tuple[list[Array], list[Array]]: """Advance the process by one timestep. If `action` is provided, next hidden states are sampled from `B`. Observations are then sampled from `A` conditioned on the new state. """ key_state, key_obs = jr.split(key) if action is not None: action = list(action) _select_probs = partial(select_probs, state) B = env_params["B"] if env_params is not None else self.B state_probs = jtu.tree_map(_select_probs, B, self.B_dependencies, action) keys = list(jr.split(key_state, len(state_probs))) new_state = jtu.tree_map(cat_sample, keys, state_probs) else: new_state = state new_obs = self._sample_obs(key_obs, new_state, env_params) return new_obs, new_state def _sample_obs( self, key: Array, state: list[Array], env_params: dict[str, list[Array]] | None ) -> list[Array]: """Sample all observation modalities conditioned on hidden state.""" _select_probs = partial(select_probs, state) A = env_params["A"] if env_params is not None else self.A obs_probs = jtu.tree_map(_select_probs, A, self.A_dependencies) keys = list(jr.split(key, len(obs_probs))) obs_idx = jtu.tree_map(cat_sample, keys, obs_probs) if self.categorical_obs: new_obs = [ jnp.expand_dims( nn.one_hot(jnp.asarray(obs_m, dtype=jnp.int32), probs_m.shape[-1]), axis=-2, ) for obs_m, probs_m in zip(obs_idx, obs_probs) ] return new_obs new_obs = jtu.tree_map(lambda x: jnp.expand_dims(x, -1), obs_idx) return new_obs ================================================ FILE: pymdp/envs/generalized_tmaze.py ================================================ from .env import PymdpEnv from typing import Any import numpy as np import math import jax.numpy as jnp import matplotlib.pyplot as plt from pymdp.utils import fig2img from jax import random as jr from jaxtyping import PRNGKeyArray from matplotlib.lines import Line2D def get_maze_matrix(small: bool = False) -> np.ndarray: """ We create a matrix representation of the T-maze environment Matrix values: 0: Grid cells the agent can move through 1: Initial position of the agent 2: Walls of the grid cells 3, 6, 9: Cue locations (multiples of 3, where 3 is cue for reward set 1, 6 for set 2, etc.) 4+: Potential reward locations: 4-5: Reward set 1 locations 7-8: Reward set 2 locations 10-11: Reward set 3 locations Args: small: If True, creates a 3x3 maze with 2 reward sets If False, creates a 5x5 maze with 3 reward sets """ if small: M = np.zeros((3, 3)) # 3x3 grid # Set the reward locations for sets 1 and 2 M[0,0] = 4 # First location of reward set 1 M[1,0] = 5 # Second location of reward set 1 M[1,2] = 7 # First location of reward set 2 M[0,2] = 8 # Second location of reward set 2 # Set the cue locations M[2,0] = 3 # Cue for reward set 1 (3 = 3*1) M[2,2] = 6 # Cue for reward set 2 (6 = 3*2) # Set the initial position M[2,1] = 1 else: M = np.zeros((5, 5)) # 5x5 grid # Set the reward locations for sets 1, 2, and 3 M[0,0] = 4 # First location of reward set 1 M[1,0] = 5 # Second location of reward set 1 M[1,4] = 7 # First location of reward set 2 M[0,4] = 8 # Second location of reward set 2 M[4,1] = 10 # First location of reward set 3 M[4,3] = 11 # Second location of reward set 3 # Set the cue locations M[2,1] = 3 # Cue for reward set 1 (3 = 3*1) M[2,3] = 6 # Cue for reward set 2 (6 = 3*2) M[3,2] = 9 # Cue for reward set 3 (9 = 3*3) # Set the initial position M[2,2] = 1 return M def parse_maze(maze: np.ndarray, rng_key: PRNGKeyArray) -> dict[str, Any]: """ Parses the maze matrix into a format needed for the environment and its visualization. Parameters ---------- maze : array A matrix representation of the environment where values represent: 0: Grid cells the agent can move through 1: Initial position of the agent 2: Walls of the grid cells 3, 6, 9: Cue locations (multiples of 3, where 3 is cue for reward set 1, 6 for set 2, etc.) 4+: Potential reward locations: 4-5: Reward set 1 locations 7-8: Reward set 2 locations 10-11: Reward set 3 locations rng_key : PRNGKeyArray Random key for determining which location in each set will be reward vs punishment Returns ---------- env_info : dict Dictionary containing: - maze: The original maze matrix - actions: Possible movements [(up), (down), (left), (right)] - num_cues: Number of cue-reward sets - cue_positions: Coordinates of each cue - reward_indices: Flattened indices of true reward locations - no_reward_indices: Flattened indices of punishment locations - initial_position: Starting coordinates of agent - reward_1_positions: Coordinates of first potential reward location in each set - reward_2_positions: Coordinates of second potential reward location in each set - reward_locations: Binary array indicating which position (1 or 2) contains reward for each set """ rows, cols = maze.shape # Calculate number of cue-reward sets based on highest value in maze # (max value - 2) // 3 gives us number of sets because: # Set 1: cue=3, rewards=4,5 # Set 2: cue=6, rewards=7,8 # Set 3: cue=9, rewards=10,11 num_cues = int((jnp.max(maze) - 2) // 3) # Store coordinates for each set's cue and potential reward locations cue_positions = [] reward_1_positions = [] reward_2_positions = [] for i in range(num_cues): # For set i: # Cue value = 3 + 3i (3,6,9) cue_positions.append(tuple(jnp.argwhere(maze == 3 + 3 * i)[0])) # First reward location value = 4 + 3i (4,7,10) reward_1_positions.append(tuple(jnp.argwhere(maze == 4 + 3 * i)[0])) # Second reward location value = 5 + 3i (5,8,11) reward_2_positions.append(tuple(jnp.argwhere(maze == 5 + 3 * i)[0])) # Get agent's starting position (value = 1 in maze) initial_position = tuple(jnp.argwhere(maze == 1)[0]) # Define possible movements in (row, col) format actions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # Randomly assign which location in each set will be reward vs punishment # reward_locations[i] = 0 means first location is reward, 1 means second location is reward # Using uniform random numbers key, subkey = jr.split(rng_key) reward_locations = (jr.uniform(subkey, shape=(num_cues,)) > 0.5).astype(jnp.int32) # reward_locations = jr.choice(rng_key, 2, shape=(num_cues,)) reward_indices = [] no_reward_indices = [] # Convert 2D coordinates to flattened indices for each set for i in range(num_cues): if reward_locations[i] == 0: # First location (4,7,10) is reward reward_indices += [jnp.ravel_multi_index(jnp.array(reward_1_positions[i]), maze.shape).item()] # Second location (5,8,11) is punishment no_reward_indices += [jnp.ravel_multi_index(jnp.array(reward_2_positions[i]), maze.shape).item()] else: # Second location is reward reward_indices += [jnp.ravel_multi_index(jnp.array(reward_2_positions[i]), maze.shape).item()] # First location is punishment no_reward_indices += [jnp.ravel_multi_index(jnp.array(reward_1_positions[i]), maze.shape).item()] return { "maze": maze, "actions": actions, "num_cues": num_cues, "cue_positions": cue_positions, "reward_indices": reward_indices, "no_reward_indices": no_reward_indices, "initial_position": initial_position, "reward_1_positions": reward_1_positions, "reward_2_positions": reward_2_positions, "reward_locations": reward_locations, } def generate_A(maze_info: dict[str, Any]) -> tuple[list[jnp.ndarray], list[list[int]]]: """ Parameters ---------- maze_info: info dict returned from `parse_maze` which contains the information about the reward locations, initial positions, etc. Returns ---------- A matrix: The likelihood mapping for the generalized T-maze. Maps the observations of (position, *cue_i, *reward_i) to states (position, reward) A dependencies: The state dependencies that generate observation for modality i """ # Positional observation likelihood maze = maze_info["maze"] rows, cols = maze.shape num_cues = maze_info["num_cues"] cue_positions = maze_info["cue_positions"] reward_1_positions = maze_info["reward_1_positions"] reward_2_positions = maze_info["reward_2_positions"] num_states = rows * cols position_likelihood = jnp.zeros((num_states, num_states)) for i in range(num_states): # Agent can be certain about its position regardless of reward state position_likelihood = position_likelihood.at[i, i].set(1) cue_likelihoods = [] for i in range(num_cues): # Cue observation likelihood, cue_position = (11, 5) # obs (nothing, left location, right location) # state: (current position, reward i position) cue_likelihood = jnp.zeros((3, num_states, 2)) cue_likelihood = cue_likelihood.at[0, :, :].set(1) # Default: no info about reward cue_state_idx = jnp.ravel_multi_index(jnp.array(cue_positions[i]), maze.shape) reward_1_state_idx = jnp.ravel_multi_index(jnp.array(reward_1_positions[i]), maze.shape) reward_2_state_idx = jnp.ravel_multi_index(jnp.array(reward_2_positions[i]), maze.shape) cue_likelihood = cue_likelihood.at[:, cue_state_idx, 0].set(jnp.array([0, 1, 0])) # Reward in r1 cue_likelihood = cue_likelihood.at[:, cue_state_idx, 1].set(jnp.array([0, 0, 1])) # Reward in r2 cue_likelihoods.append(cue_likelihood) # Reward observation likelihood, r1 = (4, 7), r2 = (8, 7) reward_likelihoods = [] for i in range(num_cues): # observation (nothing, no reward, reward) reward_likelihood = jnp.zeros((3, num_states, 2)) reward_likelihood = reward_likelihood.at[0, :, :].set(1) # Default: no reward reward_1_state_idx = jnp.ravel_multi_index(jnp.array(reward_1_positions[i]), maze.shape) reward_2_state_idx = jnp.ravel_multi_index(jnp.array(reward_2_positions[i]), maze.shape) # Reward in (8,4) if reward state is 0 reward_likelihood = reward_likelihood.at[:, reward_1_state_idx, 0].set(jnp.array([0, 1, 0])) # Reward in (8,8) if reward state is 0 reward_likelihood = reward_likelihood.at[:, reward_2_state_idx, 0].set(jnp.array([0, 0, 1])) # Reward in (8,4) if reward state is 0 reward_likelihood = reward_likelihood.at[:, reward_1_state_idx, 1].set(jnp.array([0, 0, 1])) # Reward in (8,8) if reward state is 0 reward_likelihood = reward_likelihood.at[:, reward_2_state_idx, 1].set(jnp.array([0, 1, 0])) reward_likelihoods.append(reward_likelihood) combined_likelihood = [] combined_likelihood.append(position_likelihood) for cue_likelihood in cue_likelihoods: combined_likelihood.append(cue_likelihood) for reward_likelihood in reward_likelihoods: combined_likelihood.append(reward_likelihood) likelihood_dependencies = ( [[0]] + [[0, 1 + i] for i in range(num_cues)] + [[0, 1 + i] for i in range(num_cues)] ) return combined_likelihood, likelihood_dependencies def generate_B(maze_info: dict[str, Any]) -> tuple[list[jnp.ndarray], list[list[int]]]: """ Parameters ---------- maze_info: info dict returned from `parse_maze` which contains the information about the reward locations, initial positions, etc. Returns ---------- B matrix: The transition matrix for the generalized T-maze. The position state is transitioned according to the maze layout, for the other states the transition matrix is the identity. B dependencies: The state dependencies that generate transition for state i """ maze = maze_info["maze"] actions = maze_info["actions"] num_cues = maze_info["num_cues"] rows, cols = maze.shape num_states = rows * cols num_actions = len(actions) P = jnp.zeros((num_states, num_actions), dtype=int) for s in range(num_states): row, col = divmod(s, cols) for a in range(num_actions): ns_row, ns_col = row + actions[a][0], col + actions[a][1] if ( ns_row < 0 or ns_row >= rows or ns_col < 0 or ns_col >= cols or maze[ns_row, ns_col] == 2 ): P = P.at[s, a].set(s) else: P = P.at[s, a].set(jnp.ravel_multi_index(jnp.array((ns_row, ns_col)), maze.shape)) B = jnp.zeros((num_states, num_states, num_actions)) for s in range(num_states): for a in range(num_actions): ns = P[s, a] B = B.at[ns, s, a].set(1) # add do nothing action B = jnp.concatenate([B, jnp.eye(num_states)[..., None]], -1) assert jnp.all(jnp.logical_or(B == 0, B == 1)) assert jnp.allclose(B.sum(axis=0), 1) reward_transitions = [] for i in range(num_cues): reward_transition = jnp.eye(2).reshape(2, 2, 1) reward_transitions.append(reward_transition) combined_transition = [] combined_transition.append(B) for reward_transition in reward_transitions: combined_transition.append(reward_transition) transition_dependencies = [[0]] + [[i + 1] for i in range(num_cues)] return combined_transition, transition_dependencies def generate_D(maze_info: dict[str, Any]) -> list[jnp.ndarray]: """ Parameters ---------- maze_info: info dict returned from `parse_maze` which contains the information about the reward locations, initial positions, etc. Returns ---------- D vector: The initial state for the environment, i.e. each state is a one hot based on the environment initial conditions. """ maze = maze_info["maze"] rows, cols = maze.shape num_cues = maze_info["num_cues"] reward_locations = maze_info["reward_locations"] initial_position = maze_info["initial_position"] D = [None for _ in range(1 + num_cues)] D[0] = jnp.zeros(cols * rows) # Position of the agent when starting the environment D[0] = D[0].at[jnp.ravel_multi_index(jnp.array(initial_position), maze.shape)].set(1) # Cue state i.e. where is the reward for i in range(num_cues): r1 = reward_locations[i] D[1 + i] = jnp.zeros(2) D[1 + i] = D[1 + i].at[r1].set(1) return D class GeneralizedTMazeEnv(PymdpEnv): """ Extended version of the T-Maze in which there are multiple cues and reward pairs similar to the original T-maze. """ def __init__(self, env_info: dict[str, Any], categorical_obs: bool = False) -> None: """Initialize the generalized T-maze environment. Parameters ---------- env_info : dict[str, Any] Environment specification used to construct the maze dynamics. categorical_obs : bool, default=False If ``True``, ``reset()`` and ``step()`` emit one-hot categorical observation vectors with shape ``(1, num_obs_m)`` for each modality. If ``False``, they emit discrete observation indices with shape ``(1,)``. """ A, A_dependencies = generate_A(env_info) B, B_dependencies = generate_B(env_info) D = generate_D(env_info) super().__init__( A, B, D, A_dependencies, B_dependencies, categorical_obs=categorical_obs, ) self.env_info = env_info def render(self, states: list[jnp.ndarray], mode: str = "human") -> jnp.ndarray | None: """ Renders the environment Parameters ---------- states: The environment states to render mode: str, optional The mode to render with ("human" or "rgb_array") Returns ---------- if mode == "human": returns None, renders the environment using matplotlib inside the function elif mode == "rgb_array": A (H, W, 3) jax.numpy array that can act as input to functions like plt.imshow, with values between 0 and 255 """ if (states[0].ndim == 0): states = [jnp.expand_dims(s,0) for s in states] # add batch dimension batch_size = states[0].shape[0] plt.clf() # Clear the current figure maze = self.env_info["maze"].copy() num_cues = self.env_info["num_cues"] cue_positions = self.env_info["cue_positions"] reward_1_positions = self.env_info["reward_1_positions"] reward_2_positions = self.env_info["reward_2_positions"] # Set all states not in [1] to be 0 (accessible state) mask = np.isin(maze, [2], invert=True) maze[mask] = 0 # create n x n subplots for the batch_size n = math.ceil(math.sqrt(batch_size)) # create the subplots fig, axes = plt.subplots(n, n, figsize=(8,8),squeeze=False) axes_flat = axes.ravel() cmap = plt.get_cmap("tab10") for (i, ax) in enumerate(axes_flat[:batch_size]): current_position = states[0][i] current_position = jnp.unravel_index(current_position, maze.shape) # (row, col) ax.imshow(maze, cmap="gray_r", origin="lower") # cues ax.scatter( [ci[1] for ci in cue_positions], [ci[0] for ci in cue_positions], color=[cmap(i) for i in range(len(cue_positions))], s=200, alpha=0.5, ) ax.scatter( [ci[1] for ci in cue_positions], [ci[0] for ci in cue_positions], color="black", s=50, label="Cue", marker="x", ) # reward candidates ax.scatter( [ri[1] for ri in reward_1_positions], [ri[0] for ri in reward_1_positions], color=[cmap(i) for i in range(len(cue_positions))], s=200, alpha=0.5, ) ax.scatter( [ri[1] for ri in reward_2_positions], [ri[0] for ri in reward_2_positions], color=[cmap(i) for i in range(len(cue_positions))], s=200, alpha=0.5, ) for j, (r1, r2) in enumerate(zip(reward_1_positions, reward_2_positions)): if j == self.env_info["num_cues"] - 1: # Only for the true reward set if self.env_info["reward_locations"][j] == 0: # First location is reward ax.scatter(r1[1], r1[0], color='red', s=100, marker='o', zorder=4, label = "Reward") # Red dot ax.scatter(r2[1], r2[0], color='blue', s=100, marker='o', zorder=4, label = "Punishment") # Blue dot else: # Second location is reward ax.scatter(r2[1], r2[0], color='red', s=100, marker='o', zorder=4, label = "Reward") # Red dot ax.scatter(r1[1], r1[0], color='blue', s=100, marker='o', zorder=4, label = "Punishment") # Blue dot ax.scatter( current_position[1], current_position[0], c="tab:green", marker="s", s=100, label="Agent", ) # hide unused axes for k in range(batch_size, n * n): axes_flat[k].axis("off") plt.suptitle("Generalized T-Maze Environment") base_ax = axes_flat[next(i for i in range(len(axes_flat)) if axes_flat[i].has_data())] # get handles, labels = base_ax.get_legend_handles_labels() for i in range(num_cues): if i == num_cues - 1: label = "True Reward Set" else: label = f"Distractor Set {i + 1}" patch = Line2D( [0], [0], marker="o", markersize=10, markerfacecolor=cmap(i), markeredgecolor=cmap(i), label=label, alpha=0.5, linestyle="", ) handles.append(patch) plt.legend( handles=handles, loc="upper left", bbox_to_anchor=(1, 1), fancybox=True ) plt.tight_layout() if mode == "human": plt.show() elif mode == "rgb_array": img = fig2img(fig) plt.close(fig) return img ================================================ FILE: pymdp/envs/graph_worlds.py ================================================ import networkx as nx from jax import numpy as jnp, random as jr, tree_util as jtu from typing import Any, Optional, List, Tuple from jaxtyping import PRNGKeyArray from .env import PymdpEnv import warnings def generate_connected_clusters( cluster_size: int = 2, connections: int = 2 ) -> tuple[nx.Graph, dict[str, list[str]]]: edges = [] connecting_node = 0 while connecting_node < connections * cluster_size: edges += [(connecting_node, a) for a in range(connecting_node + 1, connecting_node + cluster_size + 1)] connecting_node = len(edges) graph = nx.Graph() graph.add_edges_from(edges) return graph, { "locations": [ (f"hallway {i}" if len(list(graph.neighbors(loc))) > 1 else f"room {i}") for i, loc in enumerate(graph.nodes) ] } class GraphEnv(PymdpEnv): """ A simple environment where an agent can move around a graph and search an object. The agent observes its own location, as well as whether the object is at its location. """ def __init__( self, graph: nx.Graph, object_location: Optional[int] = None, agent_location: Optional[int] = None, key: Optional[PRNGKeyArray] = None, categorical_obs: bool = False, ) -> None: """Initialize the graph environment. Parameters ---------- graph : nx.Graph Connectivity graph for agent movement. object_location : int | None, optional Fixed initial object location. If ``None``, sampled randomly. agent_location : int | None, optional Fixed initial agent location. If ``None``, sampled randomly. key : PRNGKeyArray | None, optional Random key used when initial locations are sampled. categorical_obs : bool, default=False If ``True``, ``reset()`` and ``step()`` emit one-hot categorical observation vectors with shape ``(1, num_obs_m)`` for each modality. If ``False``, they emit discrete observation indices with shape ``(1,)``. """ A, A_dependencies = self.generate_A(graph) B, B_dependencies = self.generate_B(graph) if object_location is None: key = jr.PRNGKey(0) if key is None else key _, _key = jr.split(key) object_location = jr.randint(_key, shape=(), minval=0, maxval=len(graph.nodes) + 1) # +1 for "not here" if agent_location is None: key = jr.PRNGKey(1) if key is None else key _, _key = jr.split(key) agent_location = jr.randint(_key, shape=(), minval=0, maxval=len(graph.nodes)) D = self.generate_D(graph, object_location, agent_location) super().__init__( A=A, B=B, D=D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, categorical_obs=categorical_obs, ) def generate_A(self, graph: nx.Graph) -> tuple[list[jnp.ndarray], list[list[int]]]: A = [] A_dependencies = [] num_locations = len(graph.nodes) num_object_locations = num_locations + 1 # +1 for "not here" p = 1.0 # probability of seeing object if it is at the same location as the agent # agent location modality A.append(jnp.eye(num_locations)) A_dependencies.append([0]) # object visibility modality A.append(jnp.zeros((2, num_locations, num_object_locations))) for agent_loc in range(num_locations): for object_loc in range(num_locations): if agent_loc == object_loc: # object seen A[1] = A[1].at[0, agent_loc, object_loc].set(1 - p) A[1] = A[1].at[1, agent_loc, object_loc].set(p) else: A[1] = A[1].at[0, agent_loc, object_loc].set(p) A[1] = A[1].at[1, agent_loc, object_loc].set(1.0 - p) # object not here, we can't see it anywhere A[1] = A[1].at[0, :, -1].set(1.0) A[1] = A[1].at[1, :, -1].set(0.0) A_dependencies.append([0, 1]) return A, A_dependencies def generate_B(self, graph: nx.Graph) -> tuple[list[jnp.ndarray], list[list[int]]]: B = [] B_dependencies = [] num_locations = len(graph.nodes) num_object_locations = num_locations + 1 # agent location transitions, based on graph connectivity B.append(jnp.zeros((num_locations, num_locations, num_locations))) for action in range(num_locations): for from_loc in range(num_locations): for to_loc in range(num_locations): if action == to_loc: # we transition if connected in graph if graph.has_edge(from_loc, to_loc): B[0] = B[0].at[to_loc, from_loc, action].set(1.0) else: B[0] = B[0].at[from_loc, from_loc, action].set(1.0) B_dependencies.append([0]) # objects don't move B.append(jnp.zeros((num_object_locations, num_object_locations, 1))) B[1] = B[1].at[:, :, 0].set(jnp.eye(num_object_locations)) B_dependencies.append([1]) return B, B_dependencies def generate_D( self, graph: nx.Graph, object_location: int, agent_location: int ) -> list[jnp.ndarray]: num_locations = len(graph.nodes) num_object_locations = num_locations + 1 states = [num_locations, num_object_locations] D = [jnp.zeros(s) for s in states] # set the start locations D[0] = D[0].at[agent_location].set(1.0) D[1] = D[1].at[object_location].set(1.0) return D def generate_env_params( self, graph: nx.Graph, key: Optional[PRNGKeyArray] = None, object_locations: Optional[List[int]] = None, agent_locations: Optional[List[int]] = None, batch_size: Optional[int] = None, ) -> dict[str, Any]: """ Override of `generate_env_params` from `Env` class that returns batched environmental parameters, with the option to randomize initial object and agent locations (lists of integers) which, if provided, should be of length `batch_size` and are used to set the initial locations in the D vector for each batch element. If batch size is provided but object_locations and agent_locations are not, then random locations will be sampled for each batch element. args: graph: networkx Graph object representing the environment key: JAX random key (used to sample random initial locations if object_locations and agent_locations are not provided) object_locations: list of integers specifying initial object locations for each batch element agent_locations: list of integers specifying initial agent locations for each batch element batch_size: integer specifying the number of batch elements. If None but object_locations and agent_locations are provided, batch_size is inferred from their length. returns: env_params: dictionary containing batched environmental parameters """ if batch_size is None: if object_locations is not None and agent_locations is not None: batch_size = len(object_locations) else: warnings.warn("Neither `batch_size` nor `object_locations` nor `agent_locations` are provided, so just returning the unbatched env params") return super().generate_env_params(key=key, batch_size=batch_size) num_locations = len(graph.nodes) num_object_locations = num_locations + 1 if object_locations is None or agent_locations is None: if key is None: raise ValueError("A random key must be provided to sample random initial locations.") keys = jr.split(key, 2) if object_locations is None: object_locations = jr.randint(keys[0], shape=(batch_size,), minval=0, maxval=num_object_locations) if agent_locations is None: agent_locations = jr.randint(keys[1], shape=(batch_size,), minval=0, maxval=num_locations) D = [jnp.zeros((batch_size, s)) for s in [num_locations, num_object_locations]] D[0] = D[0].at[jnp.arange(batch_size), agent_locations].set(1.0) D[1] = D[1].at[jnp.arange(batch_size), object_locations].set(1.0) expand_to_batch = lambda x: jnp.broadcast_to(jnp.asarray(x), (batch_size,) + x.shape) env_params ={**jtu.tree_map(expand_to_batch, {"A": self.A, "B": self.B}), **{"D": D}} return env_params ================================================ FILE: pymdp/envs/grid_world.py ================================================ from __future__ import annotations from typing import Iterable, Optional, Tuple import jax.numpy as jnp import numpy as np import jax.tree_util as jtu from .env import PymdpEnv class GridWorld(PymdpEnv): """ Classic 2D grid world as a JAX-compatible PymdpEnv. Hidden state factors -------------------- - factor 0 (location): a single discrete factor with `rows * cols` states (linear index row*cols + col) Observations ------------ - modality 0 (location observation): identity over location (the agent observes its true grid index) Controls / Actions ------------------ - One control factor with 4 or 5 discrete actions: 0: UP 1: RIGHT 2: DOWN 3: LEFT 4: STAY (optional; controlled by include_stay=True) Parameters ---------- shape : tuple[int, int] Grid shape as (rows, cols). walls : Optional[Iterable[Tuple[int, int]]] Iterable of (row, col) coordinates that are *blocked* and cannot be entered. Invalid attempts to enter a wall result in staying put. initial_position : Optional[Tuple[int, int] | int] If provided, sets the initial position deterministically (one-hot D). Accepts (row, col) or linear index (0..rows*cols-1). If None, D is uniform over all *free* cells. include_stay : bool If True (default), include a "STAY" action as the 5th action. success_prob : float Probability (in [0, 1]) that a movement action succeeds and moves to its intended neighbor. The remaining probability (1 - success_prob) results in staying in place. Invalid moves (out-of-bounds or into walls) always result in staying put with probability 1. categorical_obs : bool If ``True``, ``reset()`` and ``step()`` emit one-hot categorical observation vectors with shape ``(1, num_obs)``. If ``False``, they emit discrete observation indices with shape ``(1,)``. Notes ----- - Shapes follow the JAX Env API: A[0].shape == (num_obs, num_states) B[0].shape == (num_states, num_states, num_actions) D[0].shape == (num_states,) A_dependencies == [[0]] B_dependencies == [[0]] - Works directly with `pymdp.envs.rollout.rollout` and the JAX `Agent`. """ # Action ids UP = 0 RIGHT = 1 DOWN = 2 LEFT = 3 STAY = 4 # only present if include_stay=True def __init__( self, shape: Tuple[int, int] = (3, 3), walls: Optional[Iterable[Tuple[int, int]]] = None, initial_position: Optional[Tuple[int, int] | int] = None, include_stay: bool = True, success_prob: float = 1.0, categorical_obs: bool = False, ) -> None: rows, cols = shape assert rows >= 1 and cols >= 1, "Grid shape must be positive." assert 0.0 <= success_prob <= 1.0, "`success_prob` must be in [0, 1]." # Precompute data we need walls_flat = _flatten_walls(shape, walls) n_states = rows * cols # --- Build A (likelihood), B (transitions), D (initial state) --- A, A_dependencies = _generate_A(n_states) B, B_dependencies = _generate_B(shape, walls_flat, include_stay, success_prob) D = _generate_D(shape, walls_flat, initial_position) # Wrap in single-element lists to align with the `PymdpEnv` API super().__init__( A=[A], B=[B], D=[D], A_dependencies=A_dependencies, B_dependencies=B_dependencies, categorical_obs=categorical_obs, ) # --------------------------------------------------------------------- # Optional convenience accessors (not required by the API) # --------------------------------------------------------------------- @staticmethod def coords_to_index(shape: Tuple[int, int], coord: Tuple[int, int]) -> int: """Convert (row, col) -> linear index in 0..rows*cols-1.""" return int(jnp.ravel_multi_index(jnp.array(coord), jnp.array(shape))) @staticmethod def index_to_coords(shape: Tuple[int, int], idx: int) -> Tuple[int, int]: """Convert linear index -> (row, col).""" return tuple(map(int, jnp.unravel_index(jnp.array(idx), jnp.array(shape)))) # ============================================================================= # Helpers to build A, B, D # ============================================================================= def _flatten_walls(shape: Tuple[int, int], walls: Optional[Iterable[Tuple[int, int]]]) -> set[int]: """Return a set of flattened indices that are blocked.""" if walls is None: return set() rows, cols = shape walls_flat = set() for (r, c) in walls: if 0 <= r < rows and 0 <= c < cols: walls_flat.add(int(jnp.ravel_multi_index(jnp.array((r, c)), jnp.array(shape)))) return walls_flat def _generate_A(n_states: int) -> tuple[jnp.ndarray, list[list[int]]]: """ Identity observation over location. Returns: A: (num_obs, num_states) where num_obs == n_states A_dependencies: [[0]] (depends only on location state factor) """ A = jnp.eye(n_states) # observe exact location A_dependencies = [[0]] return A, A_dependencies def _neighbors(shape: Tuple[int, int], s: int) -> Tuple[int, int, int, int]: """Return potential neighbor indices for UP, RIGHT, DOWN, LEFT (no validity checks).""" rows, cols = shape r, c = divmod(s, cols) up = r - 1, c right = r, c + 1 down = r + 1, c left = r, c - 1 # Convert to flattened, but keep invalid ones negative for now (we’ll validate after) to_idx = lambda rc: ( int(jnp.ravel_multi_index(jnp.array(rc), jnp.array(shape))) if (0 <= rc[0] < rows and 0 <= rc[1] < cols) else -1 ) return tuple(map(to_idx, (up, right, down, left))) def _generate_B( shape: Tuple[int, int], walls_flat: set[int], include_stay: bool, success_prob: float, ) -> tuple[jnp.ndarray, list[list[int]]]: """ Build transition tensor B with shape (num_states, num_states, num_actions): B[next_state, current_state, action] - Movement actions that target invalid cells or walls result in staying in place. - If success_prob < 1, the remainder (1 - success_prob) stays in place. """ rows, cols = shape n_states = rows * cols n_actions = 4 + int(include_stay) # Initialize B = np.zeros((n_states, n_states, n_actions), dtype=float) for s in range(n_states): # If current state is a wall (shouldn't happen if D avoids it), just reflect self stay_state = s up_idx, right_idx, down_idx, left_idx = _neighbors(shape, s) # Resolve invalid or walled neighbors to "stay" nb = [up_idx, right_idx, down_idx, left_idx] nb = [ni if (ni >= 0 and ni not in walls_flat) else stay_state for ni in nb] # Four movement actions: UP, RIGHT, DOWN, LEFT for a, target in enumerate(nb): if target == stay_state: # invalid move -> always stay B[stay_state, s, a] = 1.0 else: if success_prob >= 1.0: B[target, s, a] = 1.0 else: # move succeeds with prob p; otherwise stay B[target, s, a] = success_prob B[stay_state, s, a] = 1.0 - success_prob # Optional STAY action if include_stay: B[stay_state, s, 4] = 1.0 # Sanity: columns over next_state must be normalized per (s, a) # (they already are by construction above) B = jnp.array(B) B_dependencies = [[0]] # depends only on its own factor (location) return B, B_dependencies def _generate_D( shape: Tuple[int, int], walls_flat: set[int], initial_position: Optional[Tuple[int, int] | int], ) -> jnp.ndarray: """ Initial state distribution over location. - If initial_position is given (r,c) or linear index -> one-hot at that state. - Else -> uniform over free cells (not walls). """ rows, cols = shape n_states = rows * cols if initial_position is None: # Uniform over free cells mask = jnp.ones(n_states, dtype=float) if walls_flat: idx = jnp.array(sorted(list(walls_flat))) mask = mask.at[idx].set(0.0) mass = mask.sum() # Handle the (rare) degenerate case of all walls (avoid div by zero) D = jnp.where(mass > 0, mask / jnp.clip(mass, 1e-16), jnp.ones(n_states) / n_states) else: if isinstance(initial_position, tuple): start_idx = int(jnp.ravel_multi_index(jnp.array(initial_position), jnp.array(shape))) else: start_idx = int(initial_position) assert start_idx not in walls_flat, "initial_position cannot be a wall." D = jnp.zeros(n_states) D = D.at[start_idx].set(1.0) return D ================================================ FILE: pymdp/envs/rollout.py ================================================ """Utilities for running active-inference loops against environment dynamics. The two primary public entry points are: - :func:`infer_and_plan` for one-step inference/planning/action selection - :func:`rollout` for multi-step scanned execution with optional online learning """ import warnings from functools import partial from typing import Any, Callable from jax import lax, vmap import jax.numpy as jnp import jax.random as jr import jax.tree_util as jtu from jaxtyping import Array from pymdp import control from pymdp.agent import Agent from pymdp.envs.env import Env from pymdp.inference import SEQUENCE_METHODS, SMOOTHING_METHODS MAX_WINDOWED_HISTORY_WITHOUT_HORIZON = 32 def _append_to_window(window: Array, value: Array) -> Array: if window.shape[1] == 0: return window if value.ndim == window.ndim - 1: value = jnp.expand_dims(value, axis=1) value = value[:, -1:, ...] return jnp.concatenate([window[:, 1:, ...], value], axis=1) def _resolve_history_len(agent: Agent, num_timesteps: int, use_windowing: bool) -> int: if not use_windowing: return 1 if agent.inference_horizon is not None: return agent.inference_horizon uncapped_history_len = num_timesteps + 1 if uncapped_history_len > MAX_WINDOWED_HISTORY_WITHOUT_HORIZON: warnings.warn( "No `inference_horizon` provided for a windowed inference mode; " f"capping rollout history to {MAX_WINDOWED_HISTORY_WITHOUT_HORIZON} steps " "to keep fixed-size rollout buffers bounded. " "Set `inference_horizon` explicitly to override this cap.", UserWarning, stacklevel=2, ) return min(uncapped_history_len, MAX_WINDOWED_HISTORY_WITHOUT_HORIZON) def default_policy_search(agent: Agent, qs: list[Array], rng_key: Array) -> tuple[Array, dict[str, Array]]: qpi, neg_efe = agent.infer_policies( qs ) # infer_policies returns posterior over policies and neg_efe (= -EFE, SPM G) return qpi, {"neg_efe": neg_efe} def _resolve_empirical_prior( agent: Agent, qs_prev: list[Array], action_prev: Array | None, empirical_prior: list[Array] | None, ) -> list[Array]: if empirical_prior is not None: return empirical_prior if action_prev is None: return agent.D return lax.cond( jnp.any(action_prev < 0), lambda _: agent.D, # no valid previous action available lambda _: agent.update_empirical_prior(action_prev, qs_prev), operand=None, ) def update_parameters_online( agent: Agent, qs_prev: list[Array], qs: list[Array], observation: list[Array] | Array, action_prev: Array, *, learning_observations: list[Array] | Array | None = None, learning_actions: Array | None = None, learning_beliefs: list[Array] | None = None, ) -> Agent: # `qs_prev` must remain available here: we need it to construct temporal # belief pairs for transition learning and smoothing windows. if agent.inference_algo in SEQUENCE_METHODS: observations_for_learning = ( observation if learning_observations is None else learning_observations ) if agent.learn_B: if learning_actions is None: actions_for_learning = jnp.expand_dims(action_prev, 1) beliefs_B = jtu.tree_map( lambda x, y: jnp.concatenate([x, y], axis=1), qs_prev, qs ) else: actions_for_learning = learning_actions beliefs_B = qs else: actions_for_learning = action_prev beliefs_B = None return agent.infer_parameters( qs, observations_for_learning, actions_for_learning, beliefs_B=beliefs_B, ) if (agent.inference_algo in SMOOTHING_METHODS) and (learning_beliefs is not None): observations_for_learning = ( observation if learning_observations is None else learning_observations ) beliefs_for_learning = jtu.tree_map( _append_to_window, learning_beliefs, qs, ) if agent.learn_B: actions_for_learning = ( learning_actions if learning_actions is not None else jnp.expand_dims(action_prev, 1) ) beliefs_B = beliefs_for_learning else: actions_for_learning = ( learning_actions if learning_actions is not None else action_prev ) beliefs_B = None return agent.infer_parameters( beliefs_for_learning, observations_for_learning, actions_for_learning, beliefs_B=beliefs_B, ) if agent.learn_B: # Stack beliefs so B-learning can build t->t+1 transitions. beliefs_B = jtu.tree_map(lambda x, y: jnp.concatenate([x, y], axis=1), qs_prev, qs) action_B = jnp.expand_dims(action_prev, 1) else: beliefs_B = None action_B = action_prev return agent.infer_parameters( qs, observation, action_B if agent.learn_B else action_prev, beliefs_B=beliefs_B, ) def _compute_sequence_empirical_prior_next( updated_agent: Agent, qs_window: list[Array], action_hist: Array, empirical_prior: list[Array], valid_steps: Array, history_len: int, ) -> list[Array]: def _shift_empirical_prior(_: Any) -> list[Array]: qs_window_start = jtu.tree_map(lambda x: x[:, 0, ...], qs_window) action_window_start = action_hist[:, 0, :] propagate = partial( control.compute_expected_state, B_dependencies=updated_agent.B_dependencies, ) return vmap(propagate)(qs_window_start, updated_agent.B, action_window_start) return lax.cond( (valid_steps == history_len) & (history_len > 1), _shift_empirical_prior, lambda _: empirical_prior, operand=None, ) def _run_sequence_fixed_window_step( agent: Agent, qs_prev: list[Array], observation_hist: list[Array], action_hist: Array, action_prev: Array, empirical_prior: list[Array], valid_steps: Array, history_len: int, rng_key: Array, policy_search: Callable[[Agent, list[Array], Array], tuple[Array, dict[str, Array]]], ) -> tuple[Agent, Array, list[Array], dict[str, Any], list[Array], list[Array], list[Array]]: updated_agent, action_next, qs, xtra = infer_and_plan( agent, qs_prev, observation=observation_hist, action_prev=action_prev, rng_key=rng_key, policy_search=policy_search, past_actions=action_hist, empirical_prior=empirical_prior, learning_observations=observation_hist, learning_actions=action_hist, valid_steps=valid_steps, ) qs_carry = qs qs_latest = jtu.tree_map(lambda x: x[:, -1, ...], qs) empirical_prior_next = _compute_sequence_empirical_prior_next( updated_agent, qs, action_hist, empirical_prior, valid_steps, history_len, ) return updated_agent, action_next, qs, xtra, qs_carry, qs_latest, empirical_prior_next def _run_smoothing_fixed_window_step( agent: Agent, qs_prev: list[Array], observation: list[Array] | Array, observation_hist: list[Array], action_hist: Array, action_prev: Array, rng_key: Array, policy_search: Callable[[Agent, list[Array], Array], tuple[Array, dict[str, Array]]], ) -> tuple[Agent, Array, list[Array], dict[str, Any], list[Array], list[Array]]: updated_agent, action_next, qs, xtra = infer_and_plan( agent, qs_prev, observation, action_prev, rng_key, policy_search=policy_search, learning_observations=observation_hist, learning_actions=action_hist, learning_beliefs=qs_prev, ) qs_carry = jtu.tree_map(_append_to_window, qs_prev, qs) qs_latest = jtu.tree_map(lambda x: x[:, -1, ...], qs) return updated_agent, action_next, qs, xtra, qs_carry, qs_latest def _run_non_window_step( agent: Agent, qs_prev: list[Array], observation: list[Array] | Array, action_prev: Array, rng_key: Array, policy_search: Callable[[Agent, list[Array], Array], tuple[Array, dict[str, Array]]], ) -> tuple[Agent, Array, list[Array], dict[str, Any], list[Array], list[Array]]: updated_agent, action_next, qs, xtra = infer_and_plan( agent, qs_prev, observation, action_prev, rng_key, policy_search=policy_search, ) qs_latest = jtu.tree_map(lambda x: x[:, -1, ...], qs) qs_carry = jtu.tree_map(lambda x: x[:, -1:, ...], qs) return updated_agent, action_next, qs, xtra, qs_carry, qs_latest def _update_window_buffers( observation_hist: list[Array], action_hist: Array, valid_steps: Array, observation_next: list[Array], action_next: Array, history_len: int, ) -> tuple[list[Array], Array, Array]: observation_hist_next = jtu.tree_map(_append_to_window, observation_hist, observation_next) action_hist_next = _append_to_window(action_hist, action_next) valid_steps_next = jnp.minimum(valid_steps + 1, history_len) return observation_hist_next, action_hist_next, valid_steps_next def _init_observation_history(obs: Array, history_len: int, categorical_obs: bool) -> Array: if obs.ndim == 1: obs = jnp.expand_dims(obs, axis=1) history_shape = (obs.shape[0], history_len) + obs.shape[2:] if categorical_obs and obs.shape[-1] > 0: # Padded categorical timesteps should contribute no evidence. hist = jnp.zeros(history_shape, dtype=obs.dtype) else: hist = jnp.full(history_shape, -1, dtype=obs.dtype) start_idx = (0, history_len - 1) + (0,) * (hist.ndim - 2) return lax.dynamic_update_slice(hist, obs[:, :1, ...], start_idx) def _init_windowed_carry( agent: Agent, observation_0: list[Array], env_state: Any, rng_key: Array, history_len: int, action_history_len: int, is_sequence_method: bool, ) -> dict[str, Any]: action_0 = -jnp.ones((agent.batch_size, agent.policies.policy_arr.shape[-1]), dtype=jnp.int32) # Initialize windowed beliefs with D across all slots. Left padded slots are # intentionally prior-filled (not neutral-padded): sequence inference/learning # uses `valid_steps` and action-validity masks to ignore them until they become # part of the valid suffix, and the rolling window then overwrites them over time. qs_0 = jtu.tree_map( lambda x: jnp.broadcast_to( jnp.expand_dims(x, axis=1), (x.shape[0], history_len, x.shape[-1]), ), agent.D, ) observation_hist_0 = jtu.tree_map( lambda obs: _init_observation_history(obs, history_len, agent.categorical_obs), observation_0, ) action_hist_0 = -jnp.ones( (agent.batch_size, action_history_len, agent.policies.policy_arr.shape[-1]), dtype=jnp.int32, ) carry = { "qs": qs_0, "action": action_0, "observation": observation_0, "observation_hist": observation_hist_0, "action_hist": action_hist_0, "valid_steps": jnp.array(1, dtype=jnp.int32), "env_state": env_state, "agent": agent, "rng_key": rng_key, } if is_sequence_method: carry["empirical_prior"] = agent.D return carry def _init_non_windowed_carry( agent: Agent, observation_0: list[Array], env_state: Any, rng_key: Array ) -> dict[str, Any]: action_0 = -jnp.ones((agent.batch_size, agent.policies.policy_arr.shape[-1]), dtype=jnp.int32) qs_0 = jtu.tree_map(lambda x: jnp.expand_dims(x, -2), agent.D) return { "qs": qs_0, "action": action_0, "observation": observation_0, "env_state": env_state, "agent": agent, "rng_key": rng_key, } def infer_and_plan( agent: Agent, qs_prev: list[Array], observation: list[Array] | list[int], action_prev: Array | None = None, rng_key: Array | None = None, policy_search: Callable[[Agent, list[Array], Array], tuple[Array, dict[str, Array]]] | None = None, past_actions: Array | None = None, empirical_prior: list[Array] | None = None, learning_observations: list[Array] | Array | None = None, learning_actions: Array | None = None, learning_beliefs: list[Array] | None = None, valid_steps: int | Array | None = None, ) -> tuple[Agent, Array, list[Array], dict[str, Any]]: """Run one active-inference step (state update, policy inference, action sample). Parameters ---------- agent : Agent Active inference agent instance. qs_prev : list[Array] Previous posterior beliefs over hidden states. observation : list[Array] | list[int] Current environment observation. action_prev : Array | None, optional Previous action. If `None`, `agent.D` is used as empirical prior. rng_key : Array PRNG key used by policy search and action sampling. policy_search : callable | None, optional Optional custom policy-search function. Defaults to expected-free-energy policy inference. past_actions : Array | None, optional Optional action history for sequence inference methods. empirical_prior : list[Array] | None, optional Optional override for the empirical prior. learning_observations : optional Optional learning observation buffer; defaults to current observation. learning_actions : optional Optional learning action buffer. learning_beliefs : optional Optional learning belief buffer for smoothing-based updates. valid_steps : int | Array | None, optional Number of valid timesteps in padded fixed windows. Returns ------- tuple `(updated_agent, action, qs, info)` where `info` contains policy posterior and additional policy-search diagnostics. """ if policy_search is None: policy_search = default_policy_search empirical_prior = _resolve_empirical_prior( agent, qs_prev, action_prev, empirical_prior ) # infer states qs = agent.infer_states( observations=observation, empirical_prior=empirical_prior, past_actions=past_actions, valid_steps=valid_steps, ) # get posterior over policies rng_key, key = jr.split(rng_key) qpi, xtra = policy_search( agent, qs, key ) # compute policy posterior using EFE - uses C to consider preferred observations # for learning A and/or B if ( (action_prev is not None) and (agent.learning_mode == "online") and (agent.learn_A or agent.learn_B) ): agent = update_parameters_online( agent, qs_prev, qs, observation, action_prev, learning_observations=learning_observations, learning_actions=learning_actions, learning_beliefs=learning_beliefs, ) # sample action from policy distribution keys = jr.split(rng_key, agent.batch_size + 1) rng_key = keys[0] action = agent.sample_action(qpi, rng_key=keys[1:]) info = {"empirical_prior": empirical_prior, "qpi": qpi} info.update(xtra) # add extra information from policy search return agent, action, qs, info def rollout( agent: Agent, env: Env, num_timesteps: int, rng_key: Array, initial_carry: dict[str, Any] | None = None, policy_search: Callable[[Agent, list[Array], Array], tuple[Array, dict[str, Array]]] | None = None, env_params: Any = None, ) -> tuple[dict[str, Any], dict[str, Any]]: """Roll out an active-inference agent/environment loop for `num_timesteps`. Parameters ---------- agent : Agent Active inference agent. env : Env Environment implementing `reset` and `step`. num_timesteps : int Number of timesteps to simulate. rng_key : Array Root PRNG key; internally split per-step and per-batch. initial_carry : dict | None, optional Optional carry overrides for warm-starting from existing state. policy_search : callable | None, optional Optional custom policy-search routine. env_params : pytree | None, optional Optional batched environment parameters. Returns ---------- last : dict Final carry state after the final timestep. info : dict Time-indexed rollout traces (actions, observations, beliefs, etc.). """ # get the batch_size of the agent batch_size = agent.batch_size is_sequence_method = agent.inference_algo in SEQUENCE_METHODS use_smoothing_online_windows = ( (agent.inference_algo in SMOOTHING_METHODS) and (agent.learning_mode == "online") and (agent.learn_A or agent.learn_B) ) use_windowing = is_sequence_method or use_smoothing_online_windows history_len = _resolve_history_len(agent, num_timesteps, use_windowing) action_history_len = max(history_len - 1, 0) # default policy search just uses standard active inference policy selection if policy_search is None: policy_search = default_policy_search def step_fn(carry: dict[str, Any], t: Array) -> tuple[dict[str, Any], dict[str, Any]]: # Carry current action/observation/beliefs/state and RNG through scan. # We keep `qs_prev` explicitly because smoothing and transition learning # require temporal belief context beyond the empirical prior alone. action = carry["action"] observation = carry["observation"] qs_prev = carry["qs"] env_state = carry["env_state"] agent = carry["agent"] rng_key = carry["rng_key"] keys = jr.split(rng_key, batch_size + 2) rng_key = keys[0] # carry first key use_fixed_window = is_sequence_method or use_smoothing_online_windows if use_fixed_window: observation_hist = carry["observation_hist"] action_hist = carry["action_hist"] valid_steps = carry["valid_steps"] if is_sequence_method: empirical_prior = carry["empirical_prior"] ( updated_agent, action_next, qs, xtra, qs_carry, qs_latest, empirical_prior_next, ) = _run_sequence_fixed_window_step( agent, qs_prev, observation_hist, action_hist, action, empirical_prior, valid_steps, history_len, keys[1], policy_search, ) else: updated_agent, action_next, qs, xtra, qs_carry, qs_latest = _run_smoothing_fixed_window_step( agent, qs_prev, observation, observation_hist, action_hist, action, keys[1], policy_search, ) empirical_prior_next = None else: # infer next action and beliefs using the agent's inference and planning methods updated_agent, action_next, qs, xtra, qs_carry, qs_latest = _run_non_window_step( agent, qs_prev, observation, action, keys[1], policy_search, ) observation_next, env_state_next = vmap(env.step)( keys[2:], env_state, action_next, env_params=env_params ) if updated_agent.learn_A: xtra["A"] = updated_agent.A xtra["pA"] = updated_agent.pA if updated_agent.learn_B: xtra["B"] = updated_agent.B xtra["pB"] = updated_agent.pB if use_fixed_window: observation_hist = carry["observation_hist"] action_hist = carry["action_hist"] valid_steps = carry["valid_steps"] ( observation_hist_next, action_hist_next, valid_steps_next, ) = _update_window_buffers( observation_hist, action_hist, valid_steps, observation_next, action_next, history_len, ) carry = { "action": action_next, "observation": observation_next, "observation_hist": observation_hist_next, "action_hist": action_hist_next, "valid_steps": valid_steps_next, "qs": qs_carry, "env_state": env_state_next, "agent": updated_agent, "rng_key": rng_key, } if is_sequence_method: carry["empirical_prior"] = empirical_prior_next else: carry = { "action": action_next, "observation": observation_next, "qs": qs_carry, "env_state": env_state_next, "agent": updated_agent, "rng_key": rng_key, } info = { "qs": qs_latest, "env_state": env_state, "observation": observation, "action": action_next, } info.update(xtra) # add extra information from inference and planning return carry, info # initialise first observation from environment keys = jr.split(rng_key, batch_size + 1) rng_key = keys[0] observation_0, env_state = vmap(env.reset)(keys[1:], env_params=env_params) if is_sequence_method or use_smoothing_online_windows: built_carry = _init_windowed_carry( agent, observation_0, env_state, rng_key, history_len, action_history_len, is_sequence_method, ) else: built_carry = _init_non_windowed_carry( agent, observation_0, env_state, rng_key, ) if initial_carry is not None: built_carry = {**built_carry, **initial_carry} initial_carry = built_carry # run the active inference loop for num_timesteps using lax.scan last, info = lax.scan(step_fn, initial_carry, jnp.arange(num_timesteps + 1)) info = jtu.tree_map( lambda x: x.transpose((1, 0) + tuple(range(2, x.ndim))), info ) # transpose to have timesteps as first dimension if agent.learning_mode == "offline": def _format_offline_observations(x: Array) -> Array: # Handle env wrappers that emit either (B, T, 1, O) or (B, T, O) # for categorical observations, and either (B, T, 1) or (B, T) for # discrete observations. if agent.categorical_obs: if x.ndim >= 4 and x.shape[2] == 1: return x[:, :, 0, ...] return x if x.ndim >= 3 and x.shape[-1] == 1: return x[..., 0] return x observations_for_learning = jtu.tree_map(_format_offline_observations, info["observation"]) last["agent"] = last["agent"].infer_parameters( info["qs"], observations_for_learning, info["action"], ) return last, info ================================================ FILE: pymdp/envs/tmaze.py ================================================ import os import math from typing import Optional import jax.numpy as jnp import matplotlib.pyplot as plt import matplotlib.patches as patches from matplotlib.offsetbox import OffsetImage, AnnotationBbox import scipy.ndimage as ndimage from pymdp.utils import fig2img from equinox import field from .env import PymdpEnv # load assets assets_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "assets") mouse_img = plt.imread(os.path.join(assets_dir, "mouse.png")) right_mouse_img = jnp.clip(ndimage.rotate(mouse_img, 90, reshape=True), 0.0, 1.0) left_mouse_img = jnp.clip(ndimage.rotate(mouse_img, -90, reshape=True), 0.0, 1.0) up_mouse_img = jnp.clip(ndimage.rotate(mouse_img, 180, reshape=True), 0.0, 1.0) cheese_img = plt.imread(os.path.join(assets_dir, "cheese.png")) shock_img = plt.imread(os.path.join(assets_dir, "shock.png")) class BaseTMaze(PymdpEnv): """ Shared T-Maze implementation with configurable layout and observation structure. Description: A T-shaped maze where an agent must navigate to find a reward, with: - 4 (or 5) locations: centre, left arm, right arm, cue position (bottom), and optionally a middle location - 2 reward conditions: reward in left or right arm - 2 possible cues at the bottom arm that indicate which arm contains the reward """ reward_probability: float = field(static=True) punishment_probability: float = field(static=True) cue_validity: float = field(static=True) reward_condition: float = field(static=True) dependent_outcomes: bool = field(static=True) cue_mode: str = field(static=True) connectivity: str = field(static=True) has_middle: bool = field(static=True) num_locations: int = field(static=True) location_obs_size: int = field(static=True) def __init__( self, reward_probability: float = 1.0, punishment_probability: float = 1.0, cue_validity: float = 0.95, reward_condition: Optional[int] = None, dependent_outcomes: bool = False, categorical_obs: bool = False, *, num_locations: int, cue_mode: str, connectivity: str, has_middle: bool, location_obs_size: Optional[int] = None, ) -> None: """ Initialize a configurable T-Maze environment. Parameters ---------- reward_probability : float, optional Probability of receiving reward when choosing the correct arm. punishment_probability : float, optional Probability of receiving punishment when choosing the incorrect arm. cue_validity : float, optional Probability that the cue correctly indicates the reward location. reward_condition : int | None, optional If specified, fixes reward to left (0) or right (1) arm, otherwise random. dependent_outcomes : bool, optional If ``True``, punishment occurs as a function of reward probability. If ``False``, punishment occurs with the fixed ``punishment_probability``. categorical_obs : bool, default=False If ``True``, ``reset()`` and ``step()`` emit one-hot categorical observation vectors with shape ``(1, num_obs_m)`` for each modality. If ``False``, they emit discrete observation indices with shape ``(1,)``. num_locations : int Number of locations in the maze (4 or 5). cue_mode : str ``"separate"`` for a separate cue modality or ``"embedded"`` for cue information embedded in the location modality. connectivity : str ``"fully_connected"`` or ``"adjacent"`` transition structure. has_middle : bool If ``True``, includes a middle location between arms. location_obs_size : int | None, optional Size of the location observation modality. Required for embedded cue mode when overriding the default. """ self.reward_probability = reward_probability self.punishment_probability = punishment_probability self.cue_validity = cue_validity self.reward_condition = reward_condition self.dependent_outcomes = dependent_outcomes self.cue_mode = cue_mode self.connectivity = connectivity self.has_middle = has_middle self.num_locations = num_locations self._location_indices = {"centre": 0, "left": 1, "right": 2, "cue": 3} if self.has_middle: self._location_indices["middle"] = 4 if self.cue_mode == "embedded": self._loc_obs_cued_left = self._location_indices["cue"] self._loc_obs_cued_right = self._location_indices["cue"] + 1 if location_obs_size is None: location_obs_size = self._loc_obs_cued_right + 1 else: if location_obs_size is None: location_obs_size = self.num_locations self.location_obs_size = location_obs_size if self.cue_mode == "embedded": self._loc_obs_to_location = list(range(self._location_indices["cue"] + 1)) self._loc_obs_to_location.append(self._location_indices["cue"]) self._cue_obs_from_loc_obs = [0] * self.location_obs_size self._cue_obs_from_loc_obs[self._loc_obs_cued_left] = 1 self._cue_obs_from_loc_obs[self._loc_obs_cued_right] = 2 else: self._loc_obs_to_location = list(range(self.location_obs_size)) self._cue_obs_from_loc_obs = None A, A_dependencies = self.generate_A() B, B_dependencies = self.generate_B() D = self.generate_D() super().__init__( A=A, B=B, D=D, A_dependencies=A_dependencies, B_dependencies=B_dependencies, categorical_obs=categorical_obs, ) def _set_reward_outcome(self, A_reward: jnp.ndarray, loc: int, reward_condition: int) -> jnp.ndarray: if loc == (reward_condition + 1): A_reward = A_reward.at[1, loc, reward_condition].set(self.reward_probability) if self.dependent_outcomes: A_reward = A_reward.at[2, loc, reward_condition].set(1 - self.reward_probability) else: A_reward = A_reward.at[0, loc, reward_condition].set(1 - self.reward_probability) else: if self.dependent_outcomes: A_reward = A_reward.at[2, loc, reward_condition].set(self.reward_probability) A_reward = A_reward.at[1, loc, reward_condition].set(1 - self.reward_probability) else: A_reward = A_reward.at[2, loc, reward_condition].set(self.punishment_probability) A_reward = A_reward.at[0, loc, reward_condition].set(1 - self.punishment_probability) return A_reward def generate_A(self) -> tuple[list[jnp.ndarray], list[list[int]]]: if self.cue_mode == "separate": return self._generate_A_separate() if self.cue_mode == "embedded": return self._generate_A_embedded() raise ValueError(f"Unsupported cue_mode: {self.cue_mode}") def _generate_A_separate(self) -> tuple[list[jnp.ndarray], list[list[int]]]: """ Generate observation likelihood tensors. Returns three observation matrices: A[0]: Location observations (5x5 identity matrix) - Maps true location to observed location - [centre, left, right, cue, middle] x [centre, left, right, cue, middle] A[1]: Reward observations (3x5 x2 matrix) - [no outcome, reward, punishment] x [5 locations] x [2 reward conditions] A[2]: Cue observations (3x5x2 matrix) - [no cue, cued left arm, cued right arm] x [5 locations] x [2 reward conditions] """ A = [] A.append(jnp.eye(self.num_locations)) A.append(jnp.zeros([3, self.num_locations, 2])) A.append(jnp.zeros([3, self.num_locations, 2])) A_dependencies = [[0], [0, 1], [0, 1]] middle_idx = self._location_indices.get("middle") for loc in range(self.num_locations): for reward_condition in range(2): if loc == self._location_indices["centre"]: A[1] = A[1].at[0, loc, reward_condition].set(1.0) A[2] = A[2].at[0, loc, reward_condition].set(1.0) elif loc == self._location_indices["cue"]: A[1] = A[1].at[0, loc, reward_condition].set(1.0) A[2] = A[2].at[reward_condition + 1, loc, reward_condition].set(self.cue_validity) wrong_cue = (1 - reward_condition) + 1 A[2] = A[2].at[wrong_cue, loc, reward_condition].set(1 - self.cue_validity) elif middle_idx is not None and loc == middle_idx: A[1] = A[1].at[0, loc, reward_condition].set(1.0) A[2] = A[2].at[0, loc, reward_condition].set(1.0) else: A[1] = self._set_reward_outcome(A[1], loc, reward_condition) A[2] = A[2].at[0, loc, reward_condition].set(1.0) return A, A_dependencies def _generate_A_embedded(self) -> tuple[list[jnp.ndarray], list[list[int]]]: """ Generate observation likelihood tensors. Returns two observation matrices: A[0]: Location observations with embedded cues (location_obs_size x5x2 matrix) - Maps true location to observed location with embedded cue information - [centre, left, right, cued left, cued right] x [centre, left, right, cue, middle] x [2 reward conditions] A[1]: Reward observations (3x5x2 matrix) - [no outcome, reward, punishment] x [5 locations] x [2 reward conditions] """ A = [] A.append(jnp.zeros([self.location_obs_size, self.num_locations, 2])) A.append(jnp.zeros([3, self.num_locations, 2])) A_dependencies = [[0, 1], [0, 1]] for loc in range(self.num_locations): for reward_condition in range(2): if loc == self._location_indices["centre"]: A[0] = A[0].at[0, loc, reward_condition].set(1.0) A[1] = A[1].at[0, loc, reward_condition].set(1.0) elif loc == self._location_indices["cue"]: if reward_condition == 0: A[0] = A[0].at[self._loc_obs_cued_left, loc, reward_condition].set(self.cue_validity) A[0] = A[0].at[self._loc_obs_cued_right, loc, reward_condition].set(1 - self.cue_validity) else: A[0] = A[0].at[self._loc_obs_cued_right, loc, reward_condition].set(self.cue_validity) A[0] = A[0].at[self._loc_obs_cued_left, loc, reward_condition].set(1 - self.cue_validity) A[1] = A[1].at[0, loc, reward_condition].set(1.0) else: A[0] = A[0].at[loc, loc, reward_condition].set(1.0) A[1] = self._set_reward_outcome(A[1], loc, reward_condition) return A, A_dependencies def _valid_connections(self) -> list[tuple[int, int]]: centre = self._location_indices["centre"] left = self._location_indices["left"] right = self._location_indices["right"] cue = self._location_indices["cue"] if self.has_middle: middle = self._location_indices["middle"] return [ (centre, cue), (cue, centre), (centre, middle), (middle, centre), (middle, left), (left, middle), (middle, right), (right, middle), ] return [ (centre, cue), (cue, centre), (centre, left), (left, centre), (centre, right), (right, centre), ] def generate_B(self) -> tuple[list[jnp.ndarray], list[list[int]]]: """ Generate transition model matrices. Returns two transition matrices: B[0]: Location transitions (num_locations x num_locations x num_locations) - Agent can move between either all locations in the T-Maze (fully-connected) or adjacent locations, including a middle location between the two arms, in the T-Maze (adjacent) B[1]: Reward condition transitions (2x2x1) - Reward location stays fixed """ B = [] B_loc = jnp.zeros((self.num_locations, self.num_locations, self.num_locations)) if self.connectivity == "fully_connected": for action in range(self.num_locations): B_loc = B_loc.at[action, :, action].set(1.0) elif self.connectivity == "adjacent": valid_connections = set(self._valid_connections()) for _from in range(self.num_locations): for action in range(self.num_locations): _to = action if (_from, _to) in valid_connections: B_loc = B_loc.at[_to, _from, action].set(1.0) else: B_loc = B_loc.at[_from, _from, action].set(1.0) else: raise ValueError(f"Unsupported connectivity: {self.connectivity}") B.append(B_loc) B_reward = jnp.eye(2).reshape(2, 2, 1) B.append(B_reward) B_dependencies = [[0], [1]] return B, B_dependencies def generate_D(self) -> list[jnp.ndarray]: """ Generate initial state distribution. Returns two initial state vectors: D[0]: Initial location (5,) - Agent always starts in centre (index 0) D[1]: Initial reward condition (2,) - Either random (50/50) or fixed based on reward_condition Args: reward_condition: If specified, fixes reward to left (0) or right (1) arm, otherwise random """ D = [] D_loc = jnp.zeros([self.num_locations]) D_loc = D_loc.at[self._location_indices["centre"]].set(1.0) D.append(D_loc) if self.reward_condition is None: D_reward = jnp.ones(2) * 0.5 else: D_reward = jnp.zeros(2) D_reward = D_reward.at[self.reward_condition].set(1.0) D.append(D_reward) return D def render( self, observations: list[jnp.ndarray], mode: str = "human", title: Optional[str] = None ) -> jnp.ndarray | None: batch_size = observations[0].shape[0] plt.clf() def _decode_obs(modality: int, batch_idx: int) -> int: obs_value = observations[modality][batch_idx, 0] if obs_value.size > 1: return int(jnp.argmax(obs_value)) return int(jnp.squeeze(obs_value)) # create n x n subplots for the batch_size n = math.ceil(math.sqrt(batch_size)) fig, axes = plt.subplots(n, n, figsize=(6, 6)) if title: fig.suptitle(title, fontsize=9) # loop through the batch_size and plot on each subplot for i in range(batch_size): row = i // n col = i % n if batch_size == 1: ax = axes else: ax = axes[row, col] grid_dims = [3, 3] X, Y = jnp.meshgrid(jnp.arange(grid_dims[1] + 1), jnp.arange(grid_dims[0] + 1)) ax.pcolormesh( X, Y, jnp.ones(grid_dims), edgecolors="none", vmin=0, vmax=30, linewidth=5, cmap="coolwarm", snap=True ) ax.invert_yaxis() ax.axis("off") ax.set_aspect("equal") ax.add_patch( patches.Rectangle( (0, 1), 1.0, 2.0, linewidth=0, facecolor=[1.0, 1.0, 1.0], ) ) ax.add_patch( patches.Rectangle( (2, 1), 1.0, 2.0, linewidth=0, facecolor=[1.0, 1.0, 1.0], ) ) ax.add_patch( patches.Rectangle( (0, 0), 1.0, 1.0, linewidth=0, facecolor="tab:orange", ) ) ax.add_patch( patches.Rectangle( (2, 0), 1.0, 1.0, linewidth=0, facecolor="tab:purple", ) ) loc_obs = _decode_obs(0, i) reward_obs = _decode_obs(1, i) if self.cue_mode == "embedded": cue_obs = self._cue_obs_from_loc_obs[loc_obs] loc = self._loc_obs_to_location[loc_obs] else: cue_obs = _decode_obs(2, i) loc = loc_obs if cue_obs == 0: cue_color = "tab:gray" edge_color = "tab:gray" elif cue_obs == 1: cue_color = "tab:orange" edge_color = "tab:gray" else: cue_color = "tab:purple" edge_color = "tab:gray" ax.add_patch( patches.Circle( (1.5, 2.5), 0.3, linewidth=8, edgecolor=edge_color, facecolor=cue_color, ) ) coords = None if loc == 1: coords = (0.5, 0.5) elif loc == 2: coords = (2.5, 0.5) if coords is not None: if reward_obs == 1: cheese_im = OffsetImage(cheese_img, zoom=0.025 / n) ab_cheese = AnnotationBbox(cheese_im, coords, xycoords="data", frameon=False) an_cheese = ax.add_artist(ab_cheese) an_cheese.set_zorder(2) elif reward_obs == 2: shock_im = OffsetImage(shock_img, zoom=0.1 / n) ab_shock = AnnotationBbox(shock_im, coords, xycoords="data", frameon=False) ab_shock = ax.add_artist(ab_shock) ab_shock.set_zorder(2) if loc == 0: up_mouse_im = OffsetImage(up_mouse_img, zoom=0.04 / n) ab_mouse = AnnotationBbox(up_mouse_im, (1.5, 1.5), xycoords="data", frameon=False) ab_mouse = ax.add_artist(ab_mouse) ab_mouse.set_zorder(3) elif loc == 1: left_mouse_im = OffsetImage(left_mouse_img, zoom=0.04 / n) ab_mouse = AnnotationBbox(left_mouse_im, (0.75, 0.5), xycoords="data", frameon=False) ab_mouse = ax.add_artist(ab_mouse) ab_mouse.set_zorder(3) elif loc == 2: right_mouse_im = OffsetImage(right_mouse_img, zoom=0.04 / n) ab_mouse = AnnotationBbox(right_mouse_im, (2.25, 0.5), xycoords="data", frameon=False) ab_mouse = ax.add_artist(ab_mouse) ab_mouse.set_zorder(3) elif loc == 3: down_mouse_im = OffsetImage(mouse_img, zoom=0.04 / n) ab_mouse = AnnotationBbox(down_mouse_im, (1.5, 2.25), xycoords="data", frameon=False) ab_mouse = ax.add_artist(ab_mouse) ab_mouse.set_zorder(3) elif loc == 4: middle_mouse_im = OffsetImage(up_mouse_img, zoom=0.04 / n) ab_mouse = AnnotationBbox(middle_mouse_im, (1.5, 0.5), xycoords="data", frameon=False) ab_mouse = ax.add_artist(ab_mouse) ab_mouse.set_zorder(3) for i in range(batch_size, n * n): fig.delaxes(axes.flatten()[i]) if title: fig.tight_layout(rect=[0, 0, 1, 0.93]) else: plt.tight_layout() if mode == "human": plt.show() elif mode == "rgb_array": img = fig2img(fig) plt.close(fig) return img class TMaze(BaseTMaze): """ Classic T-Maze with a middle connector, adjacent transitions, and a separate cue modality. """ def __init__( self, reward_probability: float = 1.0, punishment_probability: float = 1.0, cue_validity: float = 0.95, reward_condition: Optional[int] = None, dependent_outcomes: bool = False, categorical_obs: bool = False, ) -> None: super().__init__( reward_probability=reward_probability, punishment_probability=punishment_probability, cue_validity=cue_validity, reward_condition=reward_condition, dependent_outcomes=dependent_outcomes, categorical_obs=categorical_obs, num_locations=5, cue_mode="separate", connectivity="adjacent", has_middle=True, ) class SimplifiedTMaze(BaseTMaze): """ Fully connected T-Maze with embedded cues and no middle connector. """ def __init__( self, reward_condition: Optional[int] = None, cue_validity: float = 0.95, reward_probability: float = 1.0, dependent_outcomes: bool = False, punishment_probability: float = 1.0, categorical_obs: bool = False, ) -> None: super().__init__( reward_probability=reward_probability, punishment_probability=punishment_probability, cue_validity=cue_validity, reward_condition=reward_condition, dependent_outcomes=dependent_outcomes, categorical_obs=categorical_obs, num_locations=4, cue_mode="embedded", connectivity="fully_connected", has_middle=False, location_obs_size=5, ) ================================================ FILE: pymdp/inference.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member """State inference and smoothing utilities for modern JAX-based pymdp agents. This module provides: - one-step posterior updates (`fpi`, `exact`, `ovf`), - sequence-based inference (`mmp`, `vmp`), - backward smoothing utilities for transition/posterior learning. All public functions operate on JAX arrays and pytrees and are designed to work with batched agent execution (`vmap`) and fixed-window sequence buffers. """ import jax.numpy as jnp from typing import Any, TypedDict from pymdp.algos import ( run_factorized_fpi, run_mmp, run_vmp, hmm_smoother_from_filtered_colstoch, ) from pymdp.maths import calc_vfe from jax import tree_util as jtu, lax from jax.experimental.sparse._base import JAXSparse from jax.experimental import sparse from jaxtyping import Array, ArrayLike eps = jnp.finfo('float').eps EXACT_METHOD = "exact" ONE_STEP_METHODS = {"fpi", "ovf", EXACT_METHOD} SEQUENCE_METHODS = {"mmp", "vmp"} SMOOTHING_METHODS = {"ovf", EXACT_METHOD} class VFEInfo(TypedDict): vfe_t: ArrayLike vfe: ArrayLike vfe_components: dict[str, ArrayLike] def _select_current_obs(obs: list[Array] | Array, distr_obs: bool) -> list[Array] | Array: def _select_leaf(x: Array) -> Array: if x.ndim == 0: return x if distr_obs: # Distributional observations use the last axis for observations, so # 1D leaves are already a single-time-step observation. return x if x.ndim == 1 else x[-1] return x[-1] return jtu.tree_map(_select_leaf, obs) def _truncate_for_horizon( obs: list[Array], past_actions: Array | None, inference_horizon: int | None ) -> tuple[list[Array], Array | None]: if inference_horizon is None: return obs, past_actions if inference_horizon < 1: raise ValueError("`inference_horizon` must be >= 1 when provided") obs = jtu.tree_map(lambda x: x[-inference_horizon:], obs) if past_actions is None: return obs, None action_horizon = max(inference_horizon - 1, 0) if action_horizon == 0: return obs, past_actions[:0] return obs, past_actions[-action_horizon:] def _ensure_action_history_shape(past_actions: Array | None, num_factors: int) -> Array | None: if past_actions is None: return None if past_actions.ndim == 1: if num_factors == 1: return jnp.expand_dims(past_actions, -1) raise ValueError( "1D `past_actions` is only supported for single-factor action " "histories; multi-factor action histories must have shape " "(T-1, num_factors). For a single timestep across factors, use " "`past_actions[None, :]`." ) if past_actions.ndim != 2: raise ValueError("`past_actions` must have shape (T-1, num_factors) per batch sample") if past_actions.shape[1] != num_factors: raise ValueError( f"`past_actions` has second dimension {past_actions.shape[1]}, expected {num_factors}" ) return past_actions def _build_sequence_validity_masks( obs: list[Array], past_actions: Array | None, valid_steps: int | Array | None ) -> tuple[Array, Array]: T = obs[0].shape[0] if valid_steps is None: obs_valid = jnp.ones((T,), dtype=bool) else: valid_steps = jnp.asarray(valid_steps, dtype=jnp.int32) k = jnp.clip(valid_steps, 1, T) obs_valid = jnp.arange(T) >= (T - k) if T <= 1: trans_valid = jnp.zeros((0,), dtype=bool) else: trans_valid = obs_valid[:-1] & obs_valid[1:] if past_actions is not None: action_valid = jnp.all(past_actions >= 0, axis=-1) trans_valid = trans_valid & action_valid return obs_valid, trans_valid def _condition_transitions_on_actions( B: list[ArrayLike], past_actions: Array, invalid_action_mode: str = "neutral", ) -> list[Array]: nf = len(B) past_actions = _ensure_action_history_shape(past_actions, nf) actions_tree = [past_actions[:, i] for i in range(nf)] def _select_transitions_for_actions(b: ArrayLike, action_idx: Array) -> Array: if isinstance(b, JAXSparse): b = sparse.todense(b) action_idx = action_idx.astype(jnp.int32) safe_idx = jnp.where(action_idx < 0, 0, action_idx) selected = jnp.moveaxis(jnp.take(b, safe_idx, axis=-1), -1, 0) if invalid_action_mode == "neutral": invalid_transition = jnp.ones_like(b[..., 0], dtype=b.dtype) invalid_transition = invalid_transition / jnp.clip( invalid_transition.sum(axis=0, keepdims=True), min=eps ) elif invalid_action_mode == "identity": transition = b[..., 0] if transition.ndim != 2 or transition.shape[0] != transition.shape[1]: raise ValueError( "`invalid_action_mode='identity'` requires square 2D transitions " "after action selection" ) invalid_transition = jnp.eye(transition.shape[0], dtype=transition.dtype) else: raise ValueError( f"Unsupported invalid_action_mode `{invalid_action_mode}`. " "Expected one of {'neutral', 'identity'}." ) invalid_transition = jnp.broadcast_to(invalid_transition, selected.shape) invalid = (action_idx < 0).reshape((action_idx.shape[0],) + (1,) * (selected.ndim - 1)) return jnp.where(invalid, invalid_transition, selected) return [ _select_transitions_for_actions(b, action_idx) for b, action_idx in zip(B, actions_tree) ] def _run_one_step_inference( A: list[Array], obs: list[Array], prior: list[Array] | None, A_dependencies: list[list[int]] | None, *, method: str, num_iter: int, distr_obs: bool, ) -> tuple[list[Array], list[Array] | Array]: curr_obs = _select_current_obs(obs, distr_obs) fpi_num_iter = 1 if method == EXACT_METHOD else num_iter qs = run_factorized_fpi( A, curr_obs, prior, A_dependencies, num_iter=fpi_num_iter, distr_obs=distr_obs, ) return qs, curr_obs def _run_sequence_inference( A: list[Array], B: list[Array] | None, obs: list[Array], past_actions: Array | None, prior: list[Array] | None, A_dependencies: list[list[int]] | None, B_dependencies: list[list[int]] | None, *, method: str, num_iter: int, distr_obs: bool, valid_steps: int | Array | None, ) -> tuple[list[Array], Array | None, Array | None]: if B is None: raise ValueError(f"Sequence inference method `{method}` requires `B`.") obs_valid_mask = None transition_valid_mask = None history_len = max(obs[0].shape[0] - 1, 0) if past_actions is not None: past_actions = _ensure_action_history_shape(past_actions, len(B)) if past_actions.shape[0] != history_len: raise ValueError( "`past_actions` has leading dimension " f"{past_actions.shape[0]}, expected {history_len}" ) if valid_steps is not None: obs_valid_mask, transition_valid_mask = _build_sequence_validity_masks( obs, past_actions, valid_steps ) conditioned_B = None if past_actions is not None: conditioned_B = _condition_transitions_on_actions(B, past_actions) elif history_len > 0: conditioned_B = [] for b_f in B: if b_f.shape[-1] != 1: raise ValueError( f"Sequence inference method `{method}` requires `past_actions` " "when transition tensors have more than one control state" ) single_transition = b_f[..., 0] conditioned_B.append( jnp.broadcast_to(single_transition, (history_len,) + single_transition.shape) ) if method == "vmp": qs = run_vmp( A, conditioned_B, obs, prior, A_dependencies, B_dependencies, num_iter=num_iter, distr_obs=distr_obs, obs_valid_mask=obs_valid_mask, transition_valid_mask=transition_valid_mask, ) else: qs = run_mmp( A, conditioned_B, obs, prior, A_dependencies, B_dependencies, num_iter=num_iter, distr_obs=distr_obs, obs_valid_mask=obs_valid_mask, transition_valid_mask=transition_valid_mask, ) return qs, obs_valid_mask, transition_valid_mask def _update_qs_history( qs_hist: list[Array] | None, qs: list[Array], *, method: str, inference_horizon: int | None, ) -> list[Array]: if qs_hist is not None: if method in ONE_STEP_METHODS: qs_hist = jtu.tree_map( lambda x, y: jnp.concatenate([x, jnp.expand_dims(y, 0)], 0), qs_hist, qs, ) if inference_horizon is not None: qs_hist = jtu.tree_map(lambda x: x[-inference_horizon:], qs_hist) return qs_hist return qs if method in ONE_STEP_METHODS: return jtu.tree_map(lambda x: jnp.expand_dims(x, 0), qs) return qs def _assemble_vfe_kwargs( *, method: str, qs: list[Array], prior: list[Array] | None, A: list[Array], B_for_vfe: list[Array] | None, curr_obs: list[Array] | Array | None, obs: list[Array], past_actions: Array | None, A_dependencies: list[list[int]] | None, B_dependencies: list[list[int]] | None, obs_valid_mask: Array | None, transition_valid_mask: Array | None, distr_obs: bool, ) -> dict[str, Any]: if method in ONE_STEP_METHODS: return { "qs": qs, "prior": prior, "obs": curr_obs, "A": A, "A_dependencies": A_dependencies, "distr_obs": distr_obs, } return { "qs": qs, "prior": prior, "obs": obs, "A": A, "B": B_for_vfe, "past_actions": past_actions, "A_dependencies": A_dependencies, "B_dependencies": B_dependencies, "obs_valid_mask": obs_valid_mask, "transition_valid_mask": transition_valid_mask, "distr_obs": distr_obs, } def update_posterior_states( A: list[Array], B: list[Array] | None, obs: list[Array], past_actions: Array | None, prior: list[Array] | None = None, qs_hist: list[Array] | None = None, A_dependencies: list[list[int]] | None = None, B_dependencies: list[list[int]] | None = None, num_iter: int = 16, method: str = "fpi", distr_obs: bool = True, inference_horizon: int | None = None, valid_steps: int | Array | None = None, return_info: bool = False, ) -> list[Array] | tuple[list[Array], VFEInfo]: """Infer posterior beliefs over hidden states from observations. Parameters ---------- A : list[Array] Observation likelihood tensors per modality. B : list[Array] | None Transition model tensors per hidden-state factor. For one-step methods, this can be provided unchanged. For sequence methods and non-`None` `past_actions`, transitions are conditioned per timestep. obs : pytree Observation sequence or single-step observation in distributional form (for example, one-hot vectors per modality). past_actions : Array | None Action history with shape `(T-1, num_factors)` for sequence methods. Can be `None` when no valid history is available. prior : list[Array], optional Prior beliefs over hidden states. Required when `return_info=True` so canonical VFE diagnostics can be computed. qs_hist : list[Array], optional Existing posterior history buffer. If provided, one-step updates append to this history. A_dependencies : list[list[int]], optional Sparse modality-to-factor dependency mapping. B_dependencies : list[list[int]], optional Sparse transition-factor dependency mapping. num_iter : int, default=16 Number of variational update iterations. method : {"fpi", "ovf", "mmp", "vmp", "exact"}, default="fpi" Inference routine to execute. distr_obs : bool, default=True Whether observations are already distributional. inference_horizon : int | None, optional Optional truncation horizon for sequence inference. valid_steps : int | Array | None, optional Number of valid (unpadded) timesteps for fixed-window sequence inputs. return_info : bool, default=False If `True`, also return an info dictionary containing canonical VFE diagnostics (`vfe_t`, `vfe`, and component terms). For forward-only methods (`fpi`, `ovf`, `exact`) this reports the current posterior / history returned by the inference call; if you need a full smoothed sequence VFE for `ovf` or `exact`, first run `smoothing_ovf(...)` or `smoothing_exact(...)` and then call `pymdp.maths.calc_vfe(..., joint_qs=...)`. Returns ------- list[Array] or tuple[list[Array], VFEInfo] Posterior state beliefs, with shape semantics depending on `method`: one-step methods return/append a time axis, sequence methods return full sequence posteriors. If `return_info=True`, a second return value contains canonical VFE diagnostics. """ B_for_vfe = B info = None curr_obs = None obs_valid_mask = None transition_valid_mask = None if return_info and prior is None: raise ValueError("`prior` must be provided when `return_info=True`") if method in SEQUENCE_METHODS: obs, past_actions = _truncate_for_horizon(obs, past_actions, inference_horizon) if method in ONE_STEP_METHODS: qs, curr_obs = _run_one_step_inference( A, obs, prior, A_dependencies, method=method, num_iter=num_iter, distr_obs=distr_obs, ) elif method in SEQUENCE_METHODS: qs, obs_valid_mask, transition_valid_mask = _run_sequence_inference( A, B, obs, past_actions, prior, A_dependencies, B_dependencies, method=method, num_iter=num_iter, distr_obs=distr_obs, valid_steps=valid_steps, ) else: raise ValueError( f"Unsupported inference method `{method}`. " "Expected one of {'fpi', 'ovf', 'mmp', 'vmp', 'exact'}." ) qs_hist = _update_qs_history( qs_hist, qs, method=method, inference_horizon=inference_horizon, ) if return_info: vfe_kwargs = _assemble_vfe_kwargs( method=method, qs=qs, prior=prior, A=A, B_for_vfe=B_for_vfe, curr_obs=curr_obs, obs=obs, past_actions=past_actions, A_dependencies=A_dependencies, B_dependencies=B_dependencies, obs_valid_mask=obs_valid_mask, transition_valid_mask=transition_valid_mask, distr_obs=distr_obs, ) vfe_t, vfe, decomposition = calc_vfe( **vfe_kwargs, return_decomposition=True, ) info = { "vfe_t": vfe_t, "vfe": vfe, "vfe_components": decomposition, } if return_info: return qs_hist, info return qs_hist def _joint_dist_factor( conditioned_transitions: ArrayLike, filtered_qs: list[Array] ) -> tuple[Array, Array]: qs_last = filtered_qs[-1] qs_filter = filtered_qs[:-1] n_transitions = conditioned_transitions.shape[0] def step_fn(qs_smooth: Array, xs: tuple[Array, Array]) -> tuple[Array, tuple[Array, Array]]: qs_f, time_b = xs qs_j = time_b * qs_f norm = qs_j.sum(-1, keepdims=True) if isinstance(norm, JAXSparse): norm = sparse.todense(norm) norm = jnp.where(norm == 0, eps, norm) qs_backward_cond = qs_j / norm qs_joint = qs_backward_cond * jnp.expand_dims(qs_smooth, -1) qs_smooth = qs_joint.sum(-2) if isinstance(qs_smooth, JAXSparse): qs_smooth = sparse.todense(qs_smooth) return qs_smooth, (qs_smooth, qs_joint) _, seq_qs = lax.scan( step_fn, qs_last, (qs_filter, conditioned_transitions), reverse=True, unroll=2 ) qs_smooth_all = jnp.concatenate([seq_qs[0], jnp.expand_dims(qs_last, 0)], 0) qs_joint_all = seq_qs[1] if isinstance(qs_joint_all, JAXSparse): qs_joint_all.shape = (n_transitions,) + qs_joint_all.shape return qs_smooth_all, qs_joint_all def joint_dist_factor( b: ArrayLike, filtered_qs: list[Array], actions: ArrayLike | None = None, ) -> tuple[Array, Array]: """Compute smoothed marginals and pairwise joints for one factor. Parameters ---------- b : Array Either an action-conditioned transition sequence `(T-1, K_next, K_curr)` or a transition tensor with action axis `(..., K_next, K_curr, n_actions)`. filtered_qs : list[Array] Filtered posterior sequence for this factor with leading time axis. actions : Array | None, optional Optional action sequence to select transitions from `b`. Returns ------- tuple[Array, Array] `(smoothed_marginals, pairwise_joints)` where: - smoothed marginals have shape `(T, K)` - joints have shape `(T-1, K_next, K_curr)` """ if actions is None: conditioned_transitions = b else: action_idx = jnp.asarray(actions).astype(jnp.int32) conditioned_transitions = jnp.moveaxis( jnp.take(b, action_idx, axis=-1), -1, 0 ) return _joint_dist_factor(conditioned_transitions, filtered_qs) def smoothing_ovf( filtered_post: list[Array], B: list[Array], past_actions: Array | None ) -> tuple[list[Array], list[Array]]: """Run backward smoothing for factorized online variational filtering history. Parameters ---------- filtered_post : list[Array] Filtering posteriors per factor, each with shape `(T, K_f)` (or equivalent leading-time layout for a batch element). B : list[Array] Transition tensors per factor. past_actions : Array Action history with shape `(T-1, num_factors)`. Returns ------- tuple[list[Array], list[Array]] `(marginals, joints)` per factor. """ assert len(filtered_post) == len(B) nf = len(B) # number of factors if past_actions is not None: past_actions = _ensure_action_history_shape(past_actions, nf) B_seq = _condition_transitions_on_actions(B, past_actions, invalid_action_mode="identity") marginals_and_joints = ([], []) for b_seq, qs in zip(B_seq, filtered_post): marginals, joints = joint_dist_factor(b_seq, qs, actions=None) marginals_and_joints[0].append(marginals) marginals_and_joints[1].append(joints) return marginals_and_joints def smoothing_exact( filtered_post: list[Array], B: list[Array], past_actions: Array | None ) -> tuple[list[Array], list[Array]]: """ Exact single-factor HMM backward smoothing from online filtering history. Parameters ---------- filtered_post: List containing one `(T, K)` array of filtering marginals. B: List containing one transition tensor in pymdp column-stochastic orientation. past_actions: `(T-1, 1)` or `(T-1,)` action history used to select transitions. Returns ------- (marginals, joints): marginals: list with one `(T, K)` smoothed marginal array. joints: list with one `(T-1, K_next, K_curr)` pairwise posterior array. """ if len(filtered_post) != 1 or len(B) != 1: raise ValueError("smoothing_exact currently supports only one hidden-state factor") filtered = filtered_post[0] B_seq = _condition_transitions_on_actions( B, past_actions, invalid_action_mode="identity", )[0] smoothed, joint_next_curr, _ = hmm_smoother_from_filtered_colstoch( filtered, B_seq, return_trans_probs=False, ) return [smoothed], [joint_next_curr] ================================================ FILE: pymdp/learning.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member """Dirichlet-parameter learning updates for modern JAX pymdp models.""" from pymdp.maths import multidimensional_outer, dirichlet_expected_value from jax.tree_util import tree_map from jaxtyping import Array from jax import vmap, nn, lax def update_obs_likelihood_dirichlet_m( pA_m: Array, obs_m: Array, qs: list[Array], dependencies_m: list[int], lr: float = 1.0 ) -> tuple[Array, Array]: """Update one modality's Dirichlet parameters for the observation model. Parameters ---------- pA_m : Array Current Dirichlet concentration parameters for modality `m`. obs_m : Array Observation sequence for modality `m` in categorical/distributional form with leading time axis. qs : list[Array] Posterior beliefs over hidden-state factors. dependencies_m : list[int] Hidden-state factors that modality `m` depends on. lr : float, default=1.0 Learning-rate multiplier for concentration updates. Returns ------- tuple[Array, Array] Updated concentration parameters and expected likelihood tensor for modality `m`. """ # pA_m - parameters of the dirichlet from the prior # pA_m.shape = (no_m x num_states[k] x num_states[j] x ... x num_states[n]) where (k, j, n) are indices of the hidden state factors that are parents of modality m # \alpha^{*} = \alpha_{0} + \kappa * \sum_{t=t_begin}^{t=T} o_{m,t} \otimes \mathbf{s}_{f \in parents(m), t} # \alpha^{*} is the VFE-minimizing solution for the parameters of q(A) # \alpha_{0} are the Dirichlet parameters of p(A) # o_{m,t} = observation (one-hot vector) of modality m at time t # \mathbf{s}_{f \in parents(m), t} = categorical parameters of marginal posteriors over hidden state factors that are parents of modality m, at time t # \otimes is a multidimensional outer product, not just a outer product of two vectors # \kappa is an optional learning rate relevant_factors = tree_map(lambda f_idx: qs[f_idx], dependencies_m) dfda = vmap(multidimensional_outer)([obs_m] + relevant_factors).sum(axis=0) new_pA_m = pA_m + lr * dfda A_m = dirichlet_expected_value(new_pA_m) return new_pA_m, A_m def update_obs_likelihood_dirichlet( pA: list[Array | None], A: list[Array], obs: list[Array], qs: list[Array], *, A_dependencies: list[list[int]], categorical_obs: bool, num_obs: list[int], lr: float, ) -> tuple[list[Array | None], list[Array]]: """ Update Dirichlet parameters of the observation likelihood (A matrix) given observations and beliefs. JAX version of `pymdp.learning.update_obs_likelihood_dirichlet` Parameters ---------- pA : List[Array] Prior Dirichlet parameters for A matrices A : List[Array] Current A matrices (observation likelihoods) obs : List[Array] Observations (either discrete indices or categorical distributions depending on categorical_obs) qs : List[Array] Posterior beliefs over hidden states A_dependencies : List[List[int]] Dependencies between observation modalities and state factors categorical_obs : bool If True, observations are probability distributions; if False, discrete indices num_obs : List[int] Number of observations for each modality lr : float Learning rate Returns ------- qA : List[Array] Updated Dirichlet parameters E_qA : List[Array] Expected values (updated A matrices) """ obs_m = lambda o, dim: nn.one_hot(o, dim) if not categorical_obs else o update_A_fn = ( lambda pA_m, o_m, dim, dependencies_m: None if pA_m is None else update_obs_likelihood_dirichlet_m(pA_m, obs_m(o_m, dim), qs, dependencies_m, lr=lr) ) result = tree_map(update_A_fn, pA, obs, num_obs, A_dependencies, is_leaf=lambda x: x is None) qA = [] E_qA = [] for i, r in enumerate(result): if r is None: qA.append(r) E_qA.append(A[i]) else: qA.append(r[0]) E_qA.append(r[1]) return qA, E_qA def update_state_transition_dirichlet_f( pB_f: Array, actions_f: Array, joint_qs_f: Array | list[Array], lr: float = 1.0 ) -> tuple[Array, Array]: """Update one factor's Dirichlet parameters for the transition model. Parameters ---------- pB_f : Array Current Dirichlet concentration parameters for hidden-state factor `f`. actions_f : Array One-hot action history for factor `f` with leading time axis. joint_qs_f : Array | list[Array] Pairwise state beliefs (for example, `q(s_t, s_{t-1})`) used for transition learning. lr : float, default=1.0 Learning-rate multiplier for concentration updates. Returns ------- tuple[Array, Array] Updated concentration parameters and expected transition tensor. """ # pB_f - parameters of the dirichlet from the prior # pB_f.shape = (num_states[f] x num_states[f] x num_actions[f]) where f is the index of the hidden state factor # \alpha^{*} = \alpha_{0} + \kappa * \sum_{t=t_begin}^{t=T} \mathbf{s}_{f, t} \otimes \mathbf{s}_{f, t-1} \otimes \mathbf{a}_{f, t-1} # \alpha^{*} is the VFE-minimizing solution for the parameters of q(B) # \alpha_{0} are the Dirichlet parameters of p(B) # \mathbf{s}_{f, t} = categorical parameters of marginal posteriors over hidden state factor f, at time t # \mathbf{a}_{f, t-1} = categorical parameters of marginal posteriors over control factor f, at time t-1 # \otimes is a multidimensional outer product, not just a outer product of two vectors # \kappa is an optional learning rate joint_qs_f = [joint_qs_f] if isinstance(joint_qs_f, Array) else joint_qs_f dfdb = vmap(multidimensional_outer)(joint_qs_f + [actions_f]).sum(axis=0) qB_f = pB_f + lr * dfdb return qB_f, dirichlet_expected_value(qB_f) def update_state_transition_dirichlet( pB: list[Array], B: list[Array], joint_beliefs: list[Array], actions: Array, *, num_controls: list[int], lr: float, factors_to_update: str | list[int] = 'all', ) -> tuple[list[Array], list[Array]]: """ Update posterior Diriichlet parameters of the state transition likelihood model (B) given the joint beliefs over hidden states and actions. Supports selective learning of only particular hidden-state factors via `factors_to_update` (either `"all"` or a `List[int]`). Parameters ---------- pB : list[Array] Dirichlet concentration parameters for transition model factors. B : list[Array] Current expected transition tensors. joint_beliefs : list[Array] Time-aligned joint beliefs per factor for transition learning. actions : Array Integer action history with shape `(batch, T-1, num_factors)`. num_controls : list[int] Number of control states per factor. lr : float Learning-rate multiplier for concentration updates. factors_to_update : "all" | List[int], default="all" Which hidden-state factors should be updated. Returns ------- tuple[List[Array], List[Array]] Updated concentration parameters and expected transition tensors. """ nf = len(pB) actions_onehot_fn = lambda f, dim: nn.one_hot(actions[..., f], dim, axis=-1) def update_B_f_fn(pB_f: Array, joint_qs_f: Array, f: int, na: int) -> tuple[Array, Array]: """ Conditionally-update the Dirichlet posterior over a given single factor's B parameters Updating is conditional upon the value of `f`: if the factor index (f) is greater than -1, then use the value of f as the factor index to create the appropriate one-hot representation of the action corresponding to the the f-th control factor and perform the update. Otherwise, do not perform the update """ qB_f, E_qB_f = lax.cond( f>-1, lambda: update_state_transition_dirichlet_f(pB_f, actions_onehot_fn(f, na), joint_qs_f, lr=lr), lambda: (pB_f, dirichlet_expected_value(pB_f)), ) return qB_f, E_qB_f if factors_to_update == 'all': factors_to_update_sorted = list(range(nf)) else: factors_to_update_sorted = [-1]*nf for f_i in sorted(factors_to_update): factors_to_update_sorted[f_i] = f_i result = tree_map( update_B_f_fn, pB, joint_beliefs, factors_to_update_sorted, num_controls, ) qB = [] E_qB = [] for r in result: qB.append(r[0]) E_qB.append(r[1]) return qB, E_qB # def update_state_prior_dirichlet( # pD, qs, lr=1.0, factors="all" # ): # """ # Update Dirichlet parameters of the initial hidden state distribution # (prior beliefs about hidden states at the beginning of the inference window). # Parameters # ----------- # pD: `numpy.ndarray` of dtype object # Prior Dirichlet parameters over initial hidden state prior (same shape as `qs`) # qs: 1D `numpy.ndarray` or `numpy.ndarray` of dtype object # Marginal posterior beliefs over hidden states at current timepoint # lr: float, default `1.0` # Learning rate, scale of the Dirichlet pseudo-count update. # factors: `list`, default "all" # Indices (ranging from 0 to `n_factors - 1`) of the hidden state factors to include # in learning. Defaults to "all", meaning that factor-specific sub-vectors of `pD` # are all updated using the corresponding hidden state distributions. # Returns # ----------- # qD: `numpy.ndarray` of dtype object # Posterior Dirichlet parameters over initial hidden state prior (same shape as `qs`), after having updated it with state beliefs. # """ # num_factors = len(pD) # qD = copy.deepcopy(pD) # if factors == "all": # factors = list(range(num_factors)) # for factor in factors: # idx = pD[factor] > 0 # only update those state level indices that have some prior probability # qD[factor][idx] += (lr * qs[factor][idx]) # return qD # def _prune_prior(prior, levels_to_remove, dirichlet = False): # """ # Function for pruning a prior Categorical distribution (e.g. C, D) # Parameters # ----------- # prior: 1D `numpy.ndarray` or `numpy.ndarray` of dtype object # The vector(s) containing the priors over hidden states of a generative model, e.g. the prior over hidden states (`D` vector). # levels_to_remove: `list` of `int`, `list` of `list` # A `list` of the levels (indices of the support) to remove. If the prior in question has multiple hidden state factors / multiple observation modalities, # then this will be a `list` of `list`, where each sub-list within `levels_to_remove` will contain the levels to prune for a particular hidden state factor or modality # dirichlet: `Bool`, default `False` # A Boolean flag indicating whether the input vector(s) is/are a Dirichlet distribution, and therefore should not be normalized at the end. # @TODO: Instead, the dirichlet parameters from the pruned levels should somehow be re-distributed among the remaining levels # Returns # ----------- # reduced_prior: 1D `numpy.ndarray` or `numpy.ndarray` of dtype object # The prior vector(s), after pruning, that lacks the hidden state or modality levels indexed by `levels_to_remove` # """ # if utils.is_obj_array(prior): # in case of multiple hidden state factors # assert all([type(levels) == list for levels in levels_to_remove]) # num_factors = len(prior) # reduced_prior = utils.obj_array(num_factors) # factors_to_remove = [] # for f, s_i in enumerate(prior): # loop over factors (or modalities) # ns = len(s_i) # levels_to_keep = list(set(range(ns)) - set(levels_to_remove[f])) # if len(levels_to_keep) == 0: # print(f'Warning... removing ALL levels of factor {f} - i.e. the whole hidden state factor is being removed\n') # factors_to_remove.append(f) # else: # if not dirichlet: # reduced_prior[f] = utils.norm_dist(s_i[levels_to_keep]) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned levels, across remaining levels")) # if len(factors_to_remove) > 0: # factors_to_keep = list(set(range(num_factors)) - set(factors_to_remove)) # reduced_prior = reduced_prior[factors_to_keep] # else: # in case of one hidden state factor # assert all([type(level_i) == int for level_i in levels_to_remove]) # ns = len(prior) # levels_to_keep = list(set(range(ns)) - set(levels_to_remove)) # if not dirichlet: # reduced_prior = utils.norm_dist(prior[levels_to_keep]) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned levels, across remaining levels")) # return reduced_prior # def _prune_A(A, obs_levels_to_prune, state_levels_to_prune, dirichlet = False): # """ # Function for pruning a observation likelihood model (with potentially multiple hidden state factors) # :meta private: # Parameters # ----------- # A: `numpy.ndarray` with `ndim >= 2`, or `numpy.ndarray` of dtype object # Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element `A[m]` of # stores an `numpy.ndarray` multidimensional array for observation modality `m`, whose entries `A[m][i, j, k, ...]` store # the probability of observation level `i` given hidden state levels `j, k, ...` # obs_levels_to_prune: `list` of int or `list` of `list`: # A `list` of the observation levels to remove. If the likelihood in question has multiple observation modalities, # then this will be a `list` of `list`, where each sub-list within `obs_levels_to_prune` will contain the observation levels # to remove for a particular observation modality # state_levels_to_prune: `list` of `int` # A `list` of the hidden state levels to remove (this will be the same across modalities) # dirichlet: `Bool`, default `False` # A Boolean flag indicating whether the input array(s) is/are a Dirichlet distribution, and therefore should not be normalized at the end. # @TODO: Instead, the dirichlet parameters from the pruned columns should somehow be re-distributed among the remaining columns # Returns # ----------- # reduced_A: `numpy.ndarray` with ndim >= 2, or `numpy.ndarray `of dtype object # The observation model, after pruning, which lacks the observation or hidden state levels given by the arguments `obs_levels_to_prune` and `state_levels_to_prune` # """ # columns_to_keep_list = [] # if utils.is_obj_array(A): # num_states = A[0].shape[1:] # for f, ns in enumerate(num_states): # indices_f = np.array( list(set(range(ns)) - set(state_levels_to_prune[f])), dtype = np.intp) # columns_to_keep_list.append(indices_f) # else: # num_states = A.shape[1] # indices = np.array( list(set(range(num_states)) - set(state_levels_to_prune)), dtype = np.intp ) # columns_to_keep_list.append(indices) # if utils.is_obj_array(A): # in case of multiple observation modality # assert all([type(o_m_levels) == list for o_m_levels in obs_levels_to_prune]) # num_modalities = len(A) # reduced_A = utils.obj_array(num_modalities) # for m, A_i in enumerate(A): # loop over modalities # no = A_i.shape[0] # rows_to_keep = np.array(list(set(range(no)) - set(obs_levels_to_prune[m])), dtype = np.intp) # reduced_A[m] = A_i[np.ix_(rows_to_keep, *columns_to_keep_list)] # if not dirichlet: # reduced_A = utils.norm_dist_obj_arr(reduced_A) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned rows/columns, across remaining rows/columns")) # else: # in case of one observation modality # assert all([type(o_levels_i) == int for o_levels_i in obs_levels_to_prune]) # no = A.shape[0] # rows_to_keep = np.array(list(set(range(no)) - set(obs_levels_to_prune)), dtype = np.intp) # reduced_A = A[np.ix_(rows_to_keep, *columns_to_keep_list)] # if not dirichlet: # reduced_A = utils.norm_dist(reduced_A) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned rows/columns, across remaining rows/columns")) # return reduced_A # def _prune_B(B, state_levels_to_prune, action_levels_to_prune, dirichlet = False): # """ # Function for pruning a transition likelihood model (with potentially multiple hidden state factors) # Parameters # ----------- # B: `numpy.ndarray` of `ndim == 3` or `numpy.ndarray` of dtype object # Dynamics likelihood mapping or 'transition model', mapping from hidden states at `t` to hidden states at `t+1`, given some control state `u`. # Each element B[f] of this object array stores a 3-D tensor for hidden state factor `f`, whose entries `B[f][s, v, u] store the probability # of hidden state level `s` at the current time, given hidden state level `v` and action `u` at the previous time. # state_levels_to_prune: `list` of `int` or `list` of `list` # A `list` of the state levels to remove. If the likelihood in question has multiple hidden state factors, # then this will be a `list` of `list`, where each sub-list within `state_levels_to_prune` will contain the state levels # to remove for a particular hidden state factor # action_levels_to_prune: `list` of `int` or `list` of `list` # A `list` of the control state or action levels to remove. If the likelihood in question has multiple control state factors, # then this will be a `list` of `list`, where each sub-list within `action_levels_to_prune` will contain the control state levels # to remove for a particular control state factor # dirichlet: `Bool`, default `False` # A Boolean flag indicating whether the input array(s) is/are a Dirichlet distribution, and therefore should not be normalized at the end. # @TODO: Instead, the dirichlet parameters from the pruned rows/columns should somehow be re-distributed among the remaining rows/columns # Returns # ----------- # reduced_B: `numpy.ndarray` of `ndim == 3` or `numpy.ndarray` of dtype object # The transition model, after pruning, which lacks the hidden state levels/action levels given by the arguments `state_levels_to_prune` and `action_levels_to_prune` # """ # slices_to_keep_list = [] # if utils.is_obj_array(B): # num_controls = [B_arr.shape[2] for _, B_arr in enumerate(B)] # for c, nc in enumerate(num_controls): # indices_c = np.array( list(set(range(nc)) - set(action_levels_to_prune[c])), dtype = np.intp) # slices_to_keep_list.append(indices_c) # else: # num_controls = B.shape[2] # slices_to_keep = np.array( list(set(range(num_controls)) - set(action_levels_to_prune)), dtype = np.intp ) # if utils.is_obj_array(B): # in case of multiple hidden state factors # assert all([type(ns_f_levels) == list for ns_f_levels in state_levels_to_prune]) # num_factors = len(B) # reduced_B = utils.obj_array(num_factors) # for f, B_f in enumerate(B): # loop over modalities # ns = B_f.shape[0] # states_to_keep = np.array(list(set(range(ns)) - set(state_levels_to_prune[f])), dtype = np.intp) # reduced_B[f] = B_f[np.ix_(states_to_keep, states_to_keep, slices_to_keep_list[f])] # if not dirichlet: # reduced_B = utils.norm_dist_obj_arr(reduced_B) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned rows/columns, across remaining rows/columns")) # else: # in case of one hidden state factor # assert all([type(state_level_i) == int for state_level_i in state_levels_to_prune]) # ns = B.shape[0] # states_to_keep = np.array(list(set(range(ns)) - set(state_levels_to_prune)), dtype = np.intp) # reduced_B = B[np.ix_(states_to_keep, states_to_keep, slices_to_keep)] # if not dirichlet: # reduced_B = utils.norm_dist(reduced_B) # else: # raise(NotImplementedError("Need to figure out how to re-distribute concentration parameters from pruned rows/columns, across remaining rows/columns")) # return reduced_B ================================================ FILE: pymdp/legacy/__init__.py ================================================ from . import agent from . import envs from . import utils from . import maths from . import control from . import inference from . import learning from . import algos from . import default_models ================================================ FILE: pymdp/legacy/agent.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ Agent Class __author__: Conor Heins, Alexander Tschantz, Daphne Demekas, Brennan Klein """ import warnings import numpy as np from pymdp.legacy import inference, control, learning from pymdp.legacy import utils import copy class Agent(object): """ The Agent class, the highest-level API that wraps together processes for action, perception, and learning under active inference. The basic usage is as follows: >>> my_agent = Agent(A = A, B = C, ) >>> observation = env.step(initial_action) >>> qs = my_agent.infer_states(observation) >>> q_pi, G = my_agent.infer_policies() >>> next_action = my_agent.sample_action() >>> next_observation = env.step(next_action) This represents one timestep of an active inference process. Wrapping this step in a loop with an ``Env()`` class that returns observations and takes actions as inputs, would entail a dynamic agent-environment interaction. """ def __init__( self, A, B, C=None, D=None, E=None, H=None, pA=None, pB=None, pD=None, num_controls=None, policy_len=1, inference_horizon=1, control_fac_idx=None, policies=None, gamma=16.0, alpha=16.0, use_utility=True, use_states_info_gain=True, use_param_info_gain=False, action_selection="deterministic", sampling_mode = "marginal", # whether to sample from full posterior over policies ("full") or from marginal posterior over actions ("marginal") inference_algo="VANILLA", inference_params=None, modalities_to_learn="all", lr_pA=1.0, factors_to_learn="all", lr_pB=1.0, lr_pD=1.0, use_BMA=True, policy_sep_prior=False, save_belief_hist=False, A_factor_list=None, B_factor_list=None, sophisticated=False, si_horizon=3, si_policy_prune_threshold=1/16, si_state_prune_threshold=1/16, si_prune_penalty=512, ii_depth=10, ii_threshold=1/16, ): ### Constant parameters ### # policy parameters self.policy_len = policy_len self.gamma = gamma self.alpha = alpha self.action_selection = action_selection self.sampling_mode = sampling_mode self.use_utility = use_utility self.use_states_info_gain = use_states_info_gain self.use_param_info_gain = use_param_info_gain # learning parameters self.modalities_to_learn = modalities_to_learn self.lr_pA = lr_pA self.factors_to_learn = factors_to_learn self.lr_pB = lr_pB self.lr_pD = lr_pD # sophisticated inference parameters self.sophisticated = sophisticated if self.sophisticated: assert self.policy_len == 1, "Sophisticated inference only works with policy_len = 1" self.si_horizon = si_horizon self.si_policy_prune_threshold = si_policy_prune_threshold self.si_state_prune_threshold = si_state_prune_threshold self.si_prune_penalty = si_prune_penalty # Initialise observation model (A matrices) if not isinstance(A, np.ndarray): raise TypeError( 'A matrix must be a numpy array' ) self.A = utils.to_obj_array(A) assert utils.is_normalized(self.A), "A matrix is not normalized (i.e. A[m].sum(axis = 0) must all equal 1.0 for all modalities)" # Determine number of observation modalities and their respective dimensions self.num_obs = [self.A[m].shape[0] for m in range(len(self.A))] self.num_modalities = len(self.num_obs) # Assigning prior parameters on observation model (pA matrices) self.pA = pA # Initialise transition model (B matrices) if not isinstance(B, np.ndarray): raise TypeError( 'B matrix must be a numpy array' ) self.B = utils.to_obj_array(B) assert utils.is_normalized(self.B), "B matrix is not normalized (i.e. B[f].sum(axis = 0) must all equal 1.0 for all factors)" # Determine number of hidden state factors and their dimensionalities self.num_states = [self.B[f].shape[0] for f in range(len(self.B))] self.num_factors = len(self.num_states) # Assigning prior parameters on transition model (pB matrices) self.pB = pB # If no `num_controls` are given, then this is inferred from the shapes of the input B matrices if num_controls is None: self.num_controls = [self.B[f].shape[-1] for f in range(self.num_factors)] else: inferred_num_controls = [self.B[f].shape[-1] for f in range(self.num_factors)] assert num_controls == inferred_num_controls, "num_controls must be consistent with the shapes of the input B matrices" self.num_controls = num_controls # checking that `A_factor_list` and `B_factor_list` are consistent with `num_factors`, `num_states`, and lagging dimensions of `A` and `B` tensors self.factorized = False if A_factor_list is None: self.A_factor_list = self.num_modalities * [list(range(self.num_factors))] # defaults to having all modalities depend on all factors for m in range(self.num_modalities): factor_dims = tuple([self.num_states[f] for f in self.A_factor_list[m]]) assert self.A[m].shape[1:] == factor_dims, f"Please input an `A_factor_list` whose {m}-th indices pick out the hidden state factors that line up with lagging dimensions of A{m}..." if self.pA is not None: assert self.pA[m].shape[1:] == factor_dims, f"Please input an `A_factor_list` whose {m}-th indices pick out the hidden state factors that line up with lagging dimensions of pA{m}..." else: self.factorized = True for m in range(self.num_modalities): assert max(A_factor_list[m]) <= (self.num_factors - 1), f"Check modality {m} of A_factor_list - must be consistent with `num_states` and `num_factors`..." factor_dims = tuple([self.num_states[f] for f in A_factor_list[m]]) assert self.A[m].shape[1:] == factor_dims, f"Check modality {m} of A_factor_list. It must coincide with lagging dimensions of A{m}..." if self.pA is not None: assert self.pA[m].shape[1:] == factor_dims, f"Check modality {m} of A_factor_list. It must coincide with lagging dimensions of pA{m}..." self.A_factor_list = A_factor_list # generate a list of the modalities that depend on each factor A_modality_list = [] for f in range(self.num_factors): A_modality_list.append( [m for m in range(self.num_modalities) if f in self.A_factor_list[m]] ) # Store thee `A_factor_list` and the `A_modality_list` in a Markov blanket dictionary self.mb_dict = { 'A_factor_list': self.A_factor_list, 'A_modality_list': A_modality_list } if B_factor_list is None: self.B_factor_list = [[f] for f in range(self.num_factors)] # defaults to having all factors depend only on themselves for f in range(self.num_factors): factor_dims = tuple([self.num_states[f] for f in self.B_factor_list[f]]) assert self.B[f].shape[1:-1] == factor_dims, f"Please input a `B_factor_list` whose {f}-th indices pick out the hidden state factors that line up with the all-but-final lagging dimensions of B{f}..." if self.pB is not None: assert self.pB[f].shape[1:-1] == factor_dims, f"Please input a `B_factor_list` whose {f}-th indices pick out the hidden state factors that line up with the all-but-final lagging dimensions of pB{f}..." else: self.factorized = True for f in range(self.num_factors): assert max(B_factor_list[f]) <= (self.num_factors - 1), f"Check factor {f} of B_factor_list - must be consistent with `num_states` and `num_factors`..." factor_dims = tuple([self.num_states[f] for f in B_factor_list[f]]) assert self.B[f].shape[1:-1] == factor_dims, f"Check factor {f} of B_factor_list. It must coincide with all-but-final lagging dimensions of B{f}..." if self.pB is not None: assert self.pB[f].shape[1:-1] == factor_dims, f"Check factor {f} of B_factor_list. It must coincide with all-but-final lagging dimensions of pB{f}..." self.B_factor_list = B_factor_list # Users have the option to make only certain factors controllable. # default behaviour is to make all hidden state factors controllable, i.e. `self.num_factors == len(self.num_controls)` if control_fac_idx is None: self.control_fac_idx = [f for f in range(self.num_factors) if self.num_controls[f] > 1] else: assert max(control_fac_idx) <= (self.num_factors - 1), "Check control_fac_idx - must be consistent with `num_states` and `num_factors`..." self.control_fac_idx = control_fac_idx for factor_idx in self.control_fac_idx: assert self.num_controls[factor_idx] > 1, "Control factor (and B matrix) dimensions are not consistent with user-given control_fac_idx" # Again, the use can specify a set of possible policies, or # all possible combinations of actions and timesteps will be considered if policies is None: policies = self._construct_policies() self.policies = policies assert all([len(self.num_controls) == policy.shape[1] for policy in self.policies]), "Number of control states is not consistent with policy dimensionalities" all_policies = np.vstack(self.policies) assert all([n_c >= max_action for (n_c, max_action) in zip(self.num_controls, list(np.max(all_policies, axis =0)+1))]), "Maximum number of actions is not consistent with `num_controls`" # Construct prior preferences (uniform if not specified) if C is not None: if not isinstance(C, np.ndarray): raise TypeError( 'C vector must be a numpy array' ) self.C = utils.to_obj_array(C) assert len(self.C) == self.num_modalities, f"Check C vector: number of sub-arrays must be equal to number of observation modalities: {self.num_modalities}" for modality, c_m in enumerate(self.C): assert c_m.shape[0] == self.num_obs[modality], f"Check C vector: number of rows of C vector for modality {modality} should be equal to {self.num_obs[modality]}" else: self.C = self._construct_C_prior() # Construct prior over hidden states (uniform if not specified) if D is not None: if not isinstance(D, np.ndarray): raise TypeError( 'D vector must be a numpy array' ) self.D = utils.to_obj_array(D) assert len(self.D) == self.num_factors, f"Check D vector: number of sub-arrays must be equal to number of hidden state factors: {self.num_factors}" for f, d_f in enumerate(self.D): assert d_f.shape[0] == self.num_states[f], f"Check D vector: number of entries of D vector for factor {f} should be equal to {self.num_states[f]}" else: if pD is not None: self.D = utils.norm_dist_obj_arr(pD) else: self.D = self._construct_D_prior() assert utils.is_normalized(self.D), "D vector is not normalized (i.e. D[f].sum() must all equal 1.0 for all factors)" # Assigning prior parameters on initial hidden states (pD vectors) self.pD = pD # Construct prior over policies (uniform if not specified) if E is not None: if not isinstance(E, np.ndarray): raise TypeError( 'E vector must be a numpy array' ) self.E = E assert len(self.E) == len(self.policies), f"Check E vector: length of E must be equal to number of policies: {len(self.policies)}" else: self.E = self._construct_E_prior() # Construct I for backwards induction (if H specified) if H is not None: self.H = H self.I = control.backwards_induction(H, B, B_factor_list, threshold=ii_threshold, depth=ii_depth) else: self.H = None self.I = None self.edge_handling_params = {} self.edge_handling_params['use_BMA'] = use_BMA # creates a 'D-like' moving prior self.edge_handling_params['policy_sep_prior'] = policy_sep_prior # carries forward last timesteps posterior, in a policy-conditioned way # use_BMA and policy_sep_prior can both be False, but both cannot be simultaneously be True. If one of them is True, the other must be False if policy_sep_prior: if use_BMA: warnings.warn( "Inconsistent choice of `policy_sep_prior` and `use_BMA`.\ You have set `policy_sep_prior` to True, so we are setting `use_BMA` to False" ) self.edge_handling_params['use_BMA'] = False if inference_algo is None: self.inference_algo = "VANILLA" self.inference_params = self._get_default_params() if inference_horizon > 1: warnings.warn( "If `inference_algo` is VANILLA, then inference_horizon must be 1\n. \ Setting inference_horizon to default value of 1...\n" ) self.inference_horizon = 1 else: self.inference_horizon = 1 else: self.inference_algo = inference_algo self.inference_params = self._get_default_params() self.inference_horizon = inference_horizon if save_belief_hist: self.qs_hist = [] self.q_pi_hist = [] self.prev_obs = [] self.reset() self.action = None self.prev_actions = None def _construct_C_prior(self): C = utils.obj_array_zeros(self.num_obs) return C def _construct_D_prior(self): D = utils.obj_array_uniform(self.num_states) return D def _construct_policies(self): policies = control.construct_policies( self.num_states, self.num_controls, self.policy_len, self.control_fac_idx ) return policies def _construct_num_controls(self): num_controls = control.get_num_controls_from_policies( self.policies ) return num_controls def _construct_E_prior(self): E = np.ones(len(self.policies)) / len(self.policies) return E def reset(self, init_qs=None): """ Resets the posterior beliefs about hidden states of the agent to a uniform distribution, and resets time to first timestep of the simulation's temporal horizon. Returns the posterior beliefs about hidden states. Returns --------- qs: ``numpy.ndarray`` of dtype object Initialized posterior over hidden states. Depending on the inference algorithm chosen and other parameters (such as the parameters stored within ``edge_handling_paramss), the resulting ``qs`` variable will have additional sub-structure to reflect whether beliefs are additionally conditioned on timepoint and policy. For example, in case the ``self.inference_algo == 'MMP' `, the indexing structure of ``qs`` is policy->timepoint-->factor, so that ``qs[p_idx][t_idx][f_idx]`` refers to beliefs about marginal factor ``f_idx`` expected under policy ``p_idx`` at timepoint ``t_idx``. In this case, the returned ``qs`` will only have entries filled out for the first timestep, i.e. for ``q[p_idx][0]``, for all policy-indices ``p_idx``. Subsequent entries ``q[:][1, 2, ...]`` will be initialized to empty ``numpy.ndarray`` objects. """ self.curr_timestep = 0 if init_qs is None: if self.inference_algo == 'VANILLA': self.qs = utils.obj_array_uniform(self.num_states) else: # in the case you're doing MMP (i.e. you have an inference_horizon > 1), we have to account for policy- and timestep-conditioned posterior beliefs self.qs = utils.obj_array(len(self.policies)) for p_i, _ in enumerate(self.policies): self.qs[p_i] = utils.obj_array(self.inference_horizon + self.policy_len + 1) # + 1 to include belief about current timestep self.qs[p_i][0] = utils.obj_array_uniform(self.num_states) first_belief = utils.obj_array(len(self.policies)) for p_i, _ in enumerate(self.policies): first_belief[p_i] = copy.deepcopy(self.D) if self.edge_handling_params['policy_sep_prior']: self.set_latest_beliefs(last_belief = first_belief) else: self.set_latest_beliefs(last_belief = self.D) else: self.qs = init_qs if self.pA is not None: self.A = utils.norm_dist_obj_arr(self.pA) if self.pB is not None: self.B = utils.norm_dist_obj_arr(self.pB) return self.qs def step_time(self): """ Advances time by one step. This involves updating the ``self.prev_actions``, and in the case of a moving inference horizon, this also shifts the history of post-dictive beliefs forward in time (using ``self.set_latest_beliefs()``), so that the penultimate belief before the beginning of the horizon is correctly indexed. Returns --------- curr_timestep: ``int`` The index in absolute simulation time of the current timestep. """ if self.prev_actions is None: self.prev_actions = [self.action] else: self.prev_actions.append(self.action) self.curr_timestep += 1 if self.inference_algo == "MMP" and (self.curr_timestep - self.inference_horizon) >= 0: self.set_latest_beliefs() return self.curr_timestep def set_latest_beliefs(self,last_belief=None): """ Both sets and returns the penultimate belief before the first timestep of the backwards inference horizon. In the case that the inference horizon includes the first timestep of the simulation, then the ``latest_belief`` is simply the first belief of the whole simulation, or the prior (``self.D``). The particular structure of the ``latest_belief`` depends on the value of ``self.edge_handling_params['use_BMA']``. Returns --------- latest_belief: ``numpy.ndarray`` of dtype object Penultimate posterior beliefs over hidden states at the timestep just before the first timestep of the inference horizon. Depending on the value of ``self.edge_handling_params['use_BMA']``, the shape of this output array will differ. If ``self.edge_handling_params['use_BMA'] == True``, then ``latest_belief`` will be a Bayesian model average of beliefs about hidden states, where the average is taken with respect to posterior beliefs about policies. Otherwise, `latest_belief`` will be the full, policy-conditioned belief about hidden states, and will have indexing structure policies->factors, such that ``latest_belief[p_idx][f_idx]`` refers to the penultimate belief about marginal factor ``f_idx`` under policy ``p_idx``. """ if last_belief is None: last_belief = utils.obj_array(len(self.policies)) for p_i, _ in enumerate(self.policies): last_belief[p_i] = copy.deepcopy(self.qs[p_i][0]) begin_horizon_step = self.curr_timestep - self.inference_horizon if self.edge_handling_params['use_BMA'] and (begin_horizon_step >= 0): if hasattr(self, "q_pi_hist"): self.latest_belief = inference.average_states_over_policies(last_belief, self.q_pi_hist[begin_horizon_step]) # average the earliest marginals together using contemporaneous posterior over policies (`self.q_pi_hist[0]`) else: self.latest_belief = inference.average_states_over_policies(last_belief, self.q_pi) # average the earliest marginals together using posterior over policies (`self.q_pi`) else: self.latest_belief = last_belief return self.latest_belief def get_future_qs(self): """ Returns the last ``self.policy_len`` timesteps of each policy-conditioned belief over hidden states. This is a step of pre-processing that needs to be done before computing the expected free energy of policies. We do this to avoid computing the expected free energy of policies using beliefs about hidden states in the past (so-called "post-dictive" beliefs). Returns --------- future_qs_seq: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states under a policy, in the future. This is a nested ``numpy.ndarray`` object array, with one sub-array ``future_qs_seq[p_idx]`` for each policy. The indexing structure is policy->timepoint-->factor, so that ``future_qs_seq[p_idx][t_idx][f_idx]`` refers to beliefs about marginal factor ``f_idx`` expected under policy ``p_idx`` at future timepoint ``t_idx``, relative to the current timestep. """ future_qs_seq = utils.obj_array(len(self.qs)) for p_idx in range(len(self.qs)): future_qs_seq[p_idx] = self.qs[p_idx][-(self.policy_len+1):] # this grabs only the last `policy_len`+1 beliefs about hidden states, under each policy return future_qs_seq def infer_states(self, observation, distr_obs=False): """ Update approximate posterior over hidden states by solving variational inference problem, given an observation. Parameters ---------- observation: ``list`` or ``tuple`` of ints The observation input. Each entry ``observation[m]`` stores the index of the discrete observation for modality ``m``. distr_obs: ``bool`` Whether the observation is a distribution over possible observations, rather than a single observation. Returns --------- qs: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states. Depending on the inference algorithm chosen, the resulting ``qs`` variable will have additional sub-structure to reflect whether beliefs are additionally conditioned on timepoint and policy. For example, in case the ``self.inference_algo == 'MMP' `` indexing structure is policy->timepoint-->factor, so that ``qs[p_idx][t_idx][f_idx]`` refers to beliefs about marginal factor ``f_idx`` expected under policy ``p_idx`` at timepoint ``t_idx``. """ observation = tuple(observation) if not distr_obs else observation if not hasattr(self, "qs"): self.reset() if self.inference_algo == "VANILLA": if self.action is not None: empirical_prior = control.get_expected_states_interactions( self.qs, self.B, self.B_factor_list, self.action.reshape(1, -1) )[0] else: empirical_prior = self.D qs = inference.update_posterior_states_factorized( self.A, observation, self.num_obs, self.num_states, self.mb_dict, empirical_prior, **self.inference_params ) elif self.inference_algo == "MMP": self.prev_obs.append(observation) if len(self.prev_obs) > self.inference_horizon: latest_obs = self.prev_obs[-self.inference_horizon:] latest_actions = self.prev_actions[-(self.inference_horizon-1):] else: latest_obs = self.prev_obs latest_actions = self.prev_actions qs, F = inference.update_posterior_states_full_factorized( self.A, self.mb_dict, self.B, self.B_factor_list, latest_obs, self.policies, latest_actions, prior = self.latest_belief, policy_sep_prior = self.edge_handling_params['policy_sep_prior'], **self.inference_params ) self.F = F # variational free energy of each policy if hasattr(self, "qs_hist"): self.qs_hist.append(qs) self.qs = qs return qs def _infer_states_test(self, observation, distr_obs=False): """ Test version of ``infer_states()`` that additionally returns intermediate variables of MMP, such as the prediction errors and intermediate beliefs from the optimization. Used for benchmarking against SPM outputs. """ observation = tuple(observation) if not distr_obs else observation if not hasattr(self, "qs"): self.reset() if self.inference_algo == "VANILLA": if self.action is not None: empirical_prior = control.get_expected_states( self.qs, self.B, self.action.reshape(1, -1) )[0] else: empirical_prior = self.D qs = inference.update_posterior_states( self.A, observation, empirical_prior, **self.inference_params ) elif self.inference_algo == "MMP": self.prev_obs.append(observation) if len(self.prev_obs) > self.inference_horizon: latest_obs = self.prev_obs[-self.inference_horizon:] latest_actions = self.prev_actions[-(self.inference_horizon-1):] else: latest_obs = self.prev_obs latest_actions = self.prev_actions qs, F, xn, vn = inference._update_posterior_states_full_test( self.A, self.B, latest_obs, self.policies, latest_actions, prior = self.latest_belief, policy_sep_prior = self.edge_handling_params['policy_sep_prior'], **self.inference_params ) self.F = F # variational free energy of each policy if hasattr(self, "qs_hist"): self.qs_hist.append(qs) self.qs = qs if self.inference_algo == "MMP": return qs, xn, vn else: return qs def infer_policies(self): """ Perform policy inference by optimizing a posterior (categorical) distribution over policies. This distribution is computed as the softmax of ``G * gamma + lnE`` where ``G`` is the negative expected free energy of policies, ``gamma`` is a policy precision and ``lnE`` is the (log) prior probability of policies. This function returns the posterior over policies as well as the negative expected free energy of each policy. In this version of the function, the expected free energy of policies is computed using known factorized structure in the model, which speeds up computation (particular the state information gain calculations). Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ if self.inference_algo == "VANILLA": if self.sophisticated: q_pi, G = control.sophisticated_inference_search( self.qs, self.policies, self.A, self.B, self.C, self.A_factor_list, self.B_factor_list, self.I, self.si_horizon, self.si_policy_prune_threshold, self.si_state_prune_threshold, self.si_prune_penalty, 1.0, self.inference_params, n=0 ) else: q_pi, G = control.update_posterior_policies_factorized( self.qs, self.A, self.B, self.C, self.A_factor_list, self.B_factor_list, self.policies, self.use_utility, self.use_states_info_gain, self.use_param_info_gain, self.pA, self.pB, E = self.E, I = self.I, gamma = self.gamma ) elif self.inference_algo == "MMP": future_qs_seq = self.get_future_qs() q_pi, G = control.update_posterior_policies_full_factorized( future_qs_seq, self.A, self.B, self.C, self.A_factor_list, self.B_factor_list, self.policies, self.use_utility, self.use_states_info_gain, self.use_param_info_gain, self.latest_belief, self.pA, self.pB, F=self.F, E=self.E, I=self.I, gamma=self.gamma ) if hasattr(self, "q_pi_hist"): self.q_pi_hist.append(q_pi) if len(self.q_pi_hist) > self.inference_horizon: self.q_pi_hist = self.q_pi_hist[-(self.inference_horizon-1):] self.q_pi = q_pi self.G = G return q_pi, G def sample_action(self): """ Sample or select a discrete action from the posterior over control states. This function both sets or cachés the action as an internal variable with the agent and returns it. This function also updates time variable (and thus manages consequences of updating the moving reference frame of beliefs) using ``self.step_time()``. Returns ---------- action: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor """ if self.sampling_mode == "marginal": action = control.sample_action( self.q_pi, self.policies, self.num_controls, action_selection = self.action_selection, alpha = self.alpha ) elif self.sampling_mode == "full": action = control.sample_policy(self.q_pi, self.policies, self.num_controls, action_selection=self.action_selection, alpha=self.alpha) self.action = action self.step_time() return action def _sample_action_test(self): """ Sample or select a discrete action from the posterior over control states. This function both sets or cachés the action as an internal variable with the agent and returns it. This function also updates time variable (and thus manages consequences of updating the moving reference frame of beliefs) using ``self.step_time()``. Returns ---------- action: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor """ if self.sampling_mode == "marginal": action, p_dist = control._sample_action_test(self.q_pi, self.policies, self.num_controls, action_selection=self.action_selection, alpha=self.alpha) elif self.sampling_mode == "full": action, p_dist = control._sample_policy_test(self.q_pi, self.policies, self.num_controls, action_selection=self.action_selection, alpha=self.alpha) self.action = action self.step_time() return action, p_dist def update_A(self, obs): """ Update approximate posterior beliefs about Dirichlet parameters that parameterise the observation likelihood or ``A`` array. Parameters ---------- observation: ``list`` or ``tuple`` of ints The observation input. Each entry ``observation[m]`` stores the index of the discrete observation for modality ``m``. Returns ----------- qA: ``numpy.ndarray`` of dtype object Posterior Dirichlet parameters over observation model (same shape as ``A``), after having updated it with observations. """ qA = learning.update_obs_likelihood_dirichlet_factorized( self.pA, self.A, obs, self.qs, self.A_factor_list, self.lr_pA, self.modalities_to_learn ) self.pA = qA # set new prior to posterior self.A = utils.norm_dist_obj_arr(qA) # take expected value of posterior Dirichlet parameters to calculate posterior over A array return qA def _update_A_old(self, obs): """ Update approximate posterior beliefs about Dirichlet parameters that parameterise the observation likelihood or ``A`` array. Parameters ---------- observation: ``list`` or ``tuple`` of ints The observation input. Each entry ``observation[m]`` stores the index of the discrete observation for modality ``m``. Returns ----------- qA: ``numpy.ndarray`` of dtype object Posterior Dirichlet parameters over observation model (same shape as ``A``), after having updated it with observations. """ qA = learning.update_obs_likelihood_dirichlet( self.pA, self.A, obs, self.qs, self.lr_pA, self.modalities_to_learn ) self.pA = qA # set new prior to posterior self.A = utils.norm_dist_obj_arr(qA) # take expected value of posterior Dirichlet parameters to calculate posterior over A array return qA def update_B(self, qs_prev): """ Update posterior beliefs about Dirichlet parameters that parameterise the transition likelihood Parameters ----------- qs_prev: 1D ``numpy.ndarray`` or ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at previous timepoint. Returns ----------- qB: ``numpy.ndarray`` of dtype object Posterior Dirichlet parameters over transition model (same shape as ``B``), after having updated it with state beliefs and actions. """ qB = learning.update_state_likelihood_dirichlet_interactions( self.pB, self.B, self.action, self.qs, qs_prev, self.B_factor_list, self.lr_pB, self.factors_to_learn ) self.pB = qB # set new prior to posterior self.B = utils.norm_dist_obj_arr(qB) # take expected value of posterior Dirichlet parameters to calculate posterior over B array return qB def _update_B_old(self, qs_prev): """ Update posterior beliefs about Dirichlet parameters that parameterise the transition likelihood Parameters ----------- qs_prev: 1D ``numpy.ndarray`` or ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at previous timepoint. Returns ----------- qB: ``numpy.ndarray`` of dtype object Posterior Dirichlet parameters over transition model (same shape as ``B``), after having updated it with state beliefs and actions. """ qB = learning.update_state_likelihood_dirichlet( self.pB, self.B, self.action, self.qs, qs_prev, self.lr_pB, self.factors_to_learn ) self.pB = qB # set new prior to posterior self.B = utils.norm_dist_obj_arr(qB) # take expected value of posterior Dirichlet parameters to calculate posterior over B array return qB def update_D(self, qs_t0 = None): """ Update Dirichlet parameters of the initial hidden state distribution (prior beliefs about hidden states at the beginning of the inference window). Parameters ----------- qs_t0: 1D ``numpy.ndarray``, ``numpy.ndarray`` of dtype object, or ``None`` Marginal posterior beliefs over hidden states at current timepoint. If ``None``, the value of ``qs_t0`` is set to ``self.qs_hist[0]`` (i.e. the initial hidden state beliefs at the first timepoint). If ``self.inference_algo == "MMP"``, then ``qs_t0`` is set to be the Bayesian model average of beliefs about hidden states at the first timestep of the backwards inference horizon, where the average is taken with respect to posterior beliefs about policies. Returns ----------- qD: ``numpy.ndarray`` of dtype object Posterior Dirichlet parameters over initial hidden state prior (same shape as ``qs_t0``), after having updated it with state beliefs. """ if self.inference_algo == "VANILLA": if qs_t0 is None: try: qs_t0 = self.qs_hist[0] except ValueError: print("qs_t0 must either be passed as argument to `update_D` or `save_belief_hist` must be set to True!") elif self.inference_algo == "MMP": if self.edge_handling_params['use_BMA']: qs_t0 = self.latest_belief elif self.edge_handling_params['policy_sep_prior']: qs_pi_t0 = self.latest_belief # get beliefs about policies at the time at the beginning of the inference horizon if hasattr(self, "q_pi_hist"): begin_horizon_step = max(0, self.curr_timestep - self.inference_horizon) q_pi_t0 = np.copy(self.q_pi_hist[begin_horizon_step]) else: q_pi_t0 = np.copy(self.q_pi) qs_t0 = inference.average_states_over_policies(qs_pi_t0,q_pi_t0) # beliefs about hidden states at the first timestep of the inference horizon qD = learning.update_state_prior_dirichlet(self.pD, qs_t0, self.lr_pD, factors = self.factors_to_learn) self.pD = qD # set new prior to posterior self.D = utils.norm_dist_obj_arr(qD) # take expected value of posterior Dirichlet parameters to calculate posterior over D array return qD def _get_default_params(self): method = self.inference_algo default_params = None if method == "VANILLA": default_params = {"num_iter": 10, "dF": 1.0, "dF_tol": 0.001, "compute_vfe": True} elif method == "MMP": default_params = {"num_iter": 10, "grad_descent": True, "tau": 0.25} elif method == "VMP": raise NotImplementedError("VMP is not implemented") elif method == "BP": raise NotImplementedError("BP is not implemented") elif method == "EP": raise NotImplementedError("EP is not implemented") elif method == "CV": raise NotImplementedError("CV is not implemented") return default_params ================================================ FILE: pymdp/legacy/algos/__init__.py ================================================ from .fpi import run_vanilla_fpi, run_vanilla_fpi_factorized from .mmp import run_mmp, run_mmp_factorized, _run_mmp_testing ================================================ FILE: pymdp/legacy/algos/fpi.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member import numpy as np from pymdp.legacy.maths import spm_dot, dot_likelihood, get_joint_likelihood, softmax, calc_free_energy, spm_log_single, spm_log_obj_array from pymdp.legacy.utils import to_obj_array, obj_array, obj_array_uniform from copy import deepcopy def run_vanilla_fpi(A, obs, num_obs, num_states, prior=None, num_iter=10, dF=1.0, dF_tol=0.001, compute_vfe=True): """ Update marginal posterior beliefs over hidden states using mean-field variational inference, via fixed point iteration. Parameters ---------- A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``np.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` obs: numpy 1D array or numpy ndarray of dtype object The observation (generated by the environment). If single modality, this should be a 1D ``np.ndarray`` (one-hot vector representation). If multi-modality, this should be ``np.ndarray`` of dtype object whose entries are 1D one-hot vectors. num_obs: list of ints List of dimensionalities of each observation modality num_states: list of ints List of dimensionalities of each hidden state factor prior: numpy ndarray of dtype object, default None Prior over hidden states. If absent, prior is set to be the log uniform distribution over hidden states (identical to the initialisation of the posterior) num_iter: int, default 10 Number of variational fixed-point iterations to run until convergence. dF: float, default 1.0 Initial free energy gradient (dF/dt) before updating in the course of gradient descent. dF_tol: float, default 0.001 Threshold value of the time derivative of the variational free energy (dF/dt), to be checked at each iteration. If dF <= dF_tol, the iterations are halted pre-emptively and the final marginal posterior belief(s) is(are) returned compute_vfe: bool, default True Whether to compute the variational free energy at each iteration. If False, the function runs through all variational iterations. Returns ---------- qs: numpy 1D array, numpy ndarray of dtype object, optional Marginal posterior beliefs over hidden states at current timepoint """ # get model dimensions len(num_obs) n_factors = len(num_states) """ =========== Step 1 =========== Loop over the observation modalities and use assumption of independence among observation modalitiesto multiply each modality-specific likelihood onto a single joint likelihood over hidden factors [size num_states] """ likelihood = get_joint_likelihood(A, obs, num_states) likelihood = spm_log_single(likelihood) """ =========== Step 2 =========== Create a flat posterior (and prior if necessary) """ qs = obj_array_uniform(num_states) """ If prior is not provided, initialise prior to be identical to posterior (namely, a flat categorical distribution). Take the logarithm of it (required for FPI algorithm below). """ if prior is None: prior = obj_array_uniform(num_states) prior = spm_log_obj_array(prior) # log the prior """ =========== Step 3 =========== Initialize initial free energy """ if compute_vfe: prev_vfe = calc_free_energy(qs, prior, n_factors) """ =========== Step 4 =========== If we have a single factor, we can just add prior and likelihood because there is a unique FE minimum that can reached instantaneously, otherwise we run fixed point iteration """ if n_factors == 1: qL = spm_dot(likelihood, qs, [0]) return to_obj_array(softmax(qL + prior[0])) else: """ =========== Step 5 =========== Run the FPI scheme """ # change stop condition for fixed point iterations based on whether we are computing the variational free energy or not condition_check_both = lambda curr_iter, dF: curr_iter < num_iter and dF >= dF_tol condition_check_just_numiter = lambda curr_iter, dF: curr_iter < num_iter check_stop_condition = condition_check_both if compute_vfe else condition_check_just_numiter curr_iter = 0 while check_stop_condition(curr_iter, dF): # Initialise variational free energy vfe = 0 # arg_list = [likelihood, list(range(n_factors))] # arg_list = arg_list + list(chain(*([qs_i,[i]] for i, qs_i in enumerate(qs)))) + [list(range(n_factors))] # LL_tensor = np.einsum(*arg_list) qs_all = qs[0] for factor in range(n_factors-1): qs_all = qs_all[...,None]*qs[factor+1] LL_tensor = likelihood * qs_all for factor, qs_i in enumerate(qs): # qL = np.einsum(LL_tensor, list(range(n_factors)), 1.0/qs_i, [factor], [factor]) qL = np.einsum(LL_tensor, list(range(n_factors)), [factor])/qs_i qs[factor] = softmax(qL + prior[factor]) # print(f'Posteriors at iteration {curr_iter}:\n') # print(qs[0]) # print(qs[1]) # List of orders in which marginal posteriors are sequentially multiplied into the joint likelihood: # First order loops over factors starting at index = 0, second order goes in reverse # factor_orders = [range(n_factors), range((n_factors - 1), -1, -1)] # iteratively marginalize out each posterior marginal from the joint log-likelihood # except for the one associated with a given factor # for factor_order in factor_orders: # for factor in factor_order: # qL = spm_dot(likelihood, qs, [factor]) # qs[factor] = softmax(qL + prior[factor]) if compute_vfe: # calculate new free energy vfe = calc_free_energy(qs, prior, n_factors, likelihood) # print(f'VFE at iteration {curr_iter}: {vfe}\n') # stopping condition - time derivative of free energy dF = np.abs(prev_vfe - vfe) prev_vfe = vfe curr_iter += 1 return qs def run_vanilla_fpi_factorized(A, obs, num_obs, num_states, mb_dict, prior=None, num_iter=10, dF=1.0, dF_tol=0.001, compute_vfe=True): """ Update marginal posterior beliefs over hidden states using mean-field variational inference, via fixed point iteration. Parameters ---------- A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``np.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` obs: numpy 1D array or numpy ndarray of dtype object The observation (generated by the environment). If single modality, this should be a 1D ``np.ndarray`` (one-hot vector representation). If multi-modality, this should be ``np.ndarray`` of dtype object whose entries are 1D one-hot vectors. num_obs: ``list`` of ints List of dimensionalities of each observation modality num_states: ``list`` of ints List of dimensionalities of each hidden state factor mb_dict: ``Dict`` Dictionary with two keys (``A_factor_list`` and ``A_modality_list``), that stores the factor indices that influence each modality (``A_factor_list``) and the modality indices influenced by each factor (``A_modality_list``). prior: numpy ndarray of dtype object, default None Prior over hidden states. If absent, prior is set to be the log uniform distribution over hidden states (identical to the initialisation of the posterior) num_iter: int, default 10 Number of variational fixed-point iterations to run until convergence. dF: float, default 1.0 Initial free energy gradient (dF/dt) before updating in the course of gradient descent. dF_tol: float, default 0.001 Threshold value of the time derivative of the variational free energy (dF/dt), to be checked at each iteration. If dF <= dF_tol, the iterations are halted pre-emptively and the final marginal posterior belief(s) is(are) returned compute_vfe: bool, default True Whether to compute the variational free energy at each iteration. If False, the function runs through all variational iterations. Returns ---------- qs: numpy 1D array, numpy ndarray of dtype object, optional Marginal posterior beliefs over hidden states at current timepoint """ # get model dimensions n_modalities = len(num_obs) n_factors = len(num_states) """ =========== Step 1 =========== Generate modality-specific log-likelihood tensors (will be tensors of different-shapes, where `likelihood[m].ndim` will be equal to `len(mb_dict['A_factor_list'][m])` """ likelihood = obj_array(n_modalities) obs = to_obj_array(obs) for (m, A_m) in enumerate(A): likelihood[m] = dot_likelihood(A_m, obs[m]) log_likelihood = spm_log_obj_array(likelihood) """ =========== Step 2 =========== Create a flat posterior (and prior if necessary) """ qs = obj_array_uniform(num_states) """ If prior is not provided, initialise prior to be identical to posterior (namely, a flat categorical distribution). Take the logarithm of it (required for FPI algorithm below). """ if prior is None: prior = obj_array_uniform(num_states) prior = spm_log_obj_array(prior) # log the prior """ =========== Step 3 =========== Initialize initial free energy """ prev_vfe = calc_free_energy(qs, prior, n_factors) """ =========== Step 4 =========== If we have a single factor, we can just add prior and likelihood because there is a unique FE minimum that can reached instantaneously, otherwise we run fixed point iteration """ if n_factors == 1: joint_loglikelihood = np.zeros(tuple(num_states)) for m in range(n_modalities): joint_loglikelihood += log_likelihood[m] # add up all the log-likelihoods, since we know they will all have the same dimension in the case of a single hidden state factor qL = spm_dot(joint_loglikelihood, qs, [0]) qs = to_obj_array(softmax(qL + prior[0])) else: """ =========== Step 5 =========== Run the factorized FPI scheme """ A_factor_list, A_modality_list = mb_dict['A_factor_list'], mb_dict['A_modality_list'] if compute_vfe: joint_loglikelihood = np.zeros(tuple(num_states)) for m in range(n_modalities): reshape_dims = n_factors*[1] for _f_id in A_factor_list[m]: reshape_dims[_f_id] = num_states[_f_id] joint_loglikelihood += log_likelihood[m].reshape(reshape_dims) # add up all the log-likelihoods after reshaping them to the global common dimensions of all hidden state factors curr_iter = 0 # change stop condition for fixed point iterations based on whether we are computing the variational free energy or not condition_check_both = lambda curr_iter, dF: curr_iter < num_iter and dF >= dF_tol condition_check_just_numiter = lambda curr_iter, dF: curr_iter < num_iter check_stop_condition = condition_check_both if compute_vfe else condition_check_just_numiter while check_stop_condition(curr_iter, dF): # vfe = 0 qs_new = obj_array(n_factors) for f in range(n_factors): ''' Sum the expected log likelihoods E_q(s_i/f)[ln P(o=obs[m]|s)] for independent modalities together, since they may have differing dimension. This obtains a marginal log-likelihood for the current factor index `factor`, which includes the evidence for that particular factor afforded by the different modalities. ''' qL = np.zeros(num_states[f]) for ii, m in enumerate(A_modality_list[f]): qL += spm_dot(log_likelihood[m], qs[A_factor_list[m]], [A_factor_list[m].index(f)]) qs_new[f] = softmax(qL + prior[f]) # vfe -= qL.sum() # accuracy part of vfe, sum of factor-level expected energies E_q(s_i/f)[ln P(o=obs|s)] qs = deepcopy(qs_new) # print(f'Posteriors at iteration {curr_iter}:\n') # print(qs[0]) # print(qs[1]) # calculate new free energy, leaving out the accuracy term # vfe += calc_free_energy(qs, prior, n_factors) if compute_vfe: vfe = calc_free_energy(qs, prior, n_factors, likelihood=joint_loglikelihood) # print(f'VFE at iteration {curr_iter}: {vfe}\n') # stopping condition - time derivative of free energy dF = np.abs(prev_vfe - vfe) prev_vfe = vfe curr_iter += 1 return qs def _run_vanilla_fpi_faster(A, obs, n_observations, n_states, prior=None, num_iter=10, dF=1.0, dF_tol=0.001): """ Update marginal posterior beliefs about hidden states using a new version of variational fixed point iteration (FPI). @NOTE (Conor, 26.02.2020): This method uses a faster algorithm than the traditional 'spm_dot' approach. Instead of separately computing a conditional joint log likelihood of an outcome, under the posterior probabilities of a certain marginal, instead all marginals are multiplied into one joint tensor that gives the joint likelihood of an observation under all hidden states, that is then sequentially (and *parallelizably*) marginalized out to get each marginal posterior. This method is less RAM-intensive, admits heavy parallelization, and runs (about 2x) faster. @NOTE (Conor, 28.02.2020): After further testing, discovered interesting differences between this version and the original version. It appears that the original version (simple 'run_vanilla_fpi') shows mean-field biases or 'explaining away' effects, whereas this version spreads probabilities more 'fairly' among possibilities. To summarize: it actually matters what order you do the summing across the joint likelihood tensor. In this verison, all marginals are multiplied into the likelihood tensor before summing out, whereas in the previous version, marginals are recursively multiplied and summed out. @NOTE (Conor, 24.04.2020): I would expect that the factor_order approach used above would help ameliorate the effects of the mean-field bias. I would also expect that the use of a factor_order below is unnnecessary, since the marginalisation w.r.t. each factor is done only after all marginals are multiplied into the larger tensor. Parameters ---------- - 'A' [numpy nd.array (matrix or tensor or array-of-arrays)]: Observation likelihood of the generative model, mapping from hidden states to observations. Used to invert generative model to obtain marginal likelihood over hidden states, given the observation - 'obs' [numpy 1D array or array of arrays (with 1D numpy array entries)]: The observation (generated by the environment). If single modality, this can be a 1D array (one-hot vector representation). If multi-modality, this can be an array of arrays (whose entries are 1D one-hot vectors). - 'n_observations' [int or list of ints] - 'n_states' [int or list of ints] - 'prior' [numpy 1D array, array of arrays (with 1D numpy array entries) or None]: Prior beliefs of the agent, to be integrated with the marginal likelihood to obtain posterior. If absent, prior is set to be a uniform distribution over hidden states (identical to the initialisation of the posterior) -'num_iter' [int]: Number of variational fixed-point iterations to run. -'dF' [float]: Starting free energy gradient (dF/dt) before updating in the course of gradient descent. -'dF_tol' [float]: Threshold value of the gradient of the variational free energy (dF/dt), to be checked at each iteration. If dF <= dF_tol, the iterations are halted pre-emptively and the final marginal posterior belief(s) is(are) returned Returns ---------- -'qs' [numpy 1D array or array of arrays (with 1D numpy array entries): Marginal posterior beliefs over hidden states (single- or multi-factor) achieved via variational fixed point iteration (mean-field) """ # get model dimensions len(n_observations) n_factors = len(n_states) """ =========== Step 1 =========== Loop over the observation modalities and use assumption of independence among observation modalities to multiply each modality-specific likelihood onto a single joint likelihood over hidden factors [size n_states] """ # likelihood = np.ones(tuple(n_states)) # if n_modalities is 1: # likelihood *= spm_dot(A, obs, obs_mode=True) # else: # for modality in range(n_modalities): # likelihood *= spm_dot(A[modality], obs[modality], obs_mode=True) likelihood = get_joint_likelihood(A, obs, n_states) likelihood = np.log(likelihood + 1e-16) """ =========== Step 2 =========== Create a flat posterior (and prior if necessary) """ qs = np.empty(n_factors, dtype=object) for factor in range(n_factors): qs[factor] = np.ones(n_states[factor]) / n_states[factor] """ If prior is not provided, initialise prior to be identical to posterior (namely, a flat categorical distribution). Take the logarithm of it (required for FPI algorithm below). """ if prior is None: prior = np.empty(n_factors, dtype=object) for factor in range(n_factors): prior[factor] = np.log(np.ones(n_states[factor]) / n_states[factor] + 1e-16) """ =========== Step 3 =========== Initialize initial free energy """ prev_vfe = calc_free_energy(qs, prior, n_factors) """ =========== Step 4 =========== If we have a single factor, we can just add prior and likelihood, otherwise we run FPI """ if n_factors == 1: qL = spm_dot(likelihood, qs, [0]) return softmax(qL + prior[0]) else: """ =========== Step 5 =========== Run the revised fixed-point iteration scheme """ curr_iter = 0 while curr_iter < num_iter and dF >= dF_tol: # Initialise variational free energy vfe = 0 # List of orders in which marginal posteriors are sequentially # multiplied into the joint likelihood: First order loops over # factors starting at index = 0, second order goes in reverse factor_orders = [range(n_factors), range((n_factors - 1), -1, -1)] for factor_order in factor_orders: # reset the log likelihood L = likelihood.copy() # multiply each marginal onto a growing single joint distribution for factor in factor_order: s = np.ones(np.ndim(L), dtype=int) s[factor] = len(qs[factor]) L *= qs[factor].reshape(tuple(s)) # now loop over factors again, and this time divide out the # appropriate marginal before summing out. # !!! KEY DIFFERENCE BETWEEN THIS AND 'VANILLA' FPI, # WHERE THE ORDER OF THE MARGINALIZATION MATTERS !!! for f in factor_order: s = np.ones(np.ndim(L), dtype=int) s[factor] = len(qs[factor]) # type: ignore # divide out the factor we multiplied into X already temp = L * (1.0 / qs[factor]).reshape(tuple(s)) # type: ignore dims2sum = tuple(np.where(np.arange(n_factors) != f)[0]) qL = np.sum(temp, dims2sum) temp = L * (1.0 / qs[factor]).reshape(tuple(s)) # type: ignore qs[factor] = softmax(qL + prior[factor]) # type: ignore # calculate new free energy vfe = calc_free_energy(qs, prior, n_factors, likelihood) # stopping condition - time derivative of free energy dF = np.abs(prev_vfe - vfe) prev_vfe = vfe curr_iter += 1 return qs ================================================ FILE: pymdp/legacy/algos/mmp.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np from pymdp.legacy.utils import get_model_dimensions, obj_array, obj_array_zeros, obj_array_uniform from pymdp.legacy.maths import spm_dot, spm_norm, softmax, calc_free_energy, spm_log_single, factor_dot_flex def run_mmp( lh_seq, B, policy, prev_actions=None, prior=None, num_iter=10, grad_descent=True, tau=0.25, last_timestep = False): """ Marginal message passing scheme for updating marginal posterior beliefs about hidden states over time, conditioned on a particular policy. Parameters ---------- lh_seq: ``numpy.ndarray`` of dtype object Log likelihoods of hidden states under a sequence of observations over time. This is assumed to already be log-transformed. Each ``lh_seq[t]`` contains the log likelihood of hidden states for a particular observation at time ``t`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. policy: 2D ``numpy.ndarray`` Matrix of shape ``(policy_len, num_control_factors)`` that indicates the indices of each action (control state index) upon timestep ``t`` and control_factor ``f` in the element ``policy[t,f]`` for a given policy. prev_actions: ``numpy.ndarray``, default None If provided, should be a matrix of previous actions of shape ``(infer_len, num_control_factors)`` that indicates the indices of each action (control state index) taken in the past (up until the current timestep). prior: ``numpy.ndarray`` of dtype object, default None If provided, the prior beliefs about initial states (at t = 0, relative to ``infer_len``). If ``None``, this defaults to a flat (uninformative) prior over hidden states. numiter: int, default 10 Number of variational iterations. grad_descent: Bool, default True Flag for whether to use gradient descent (free energy gradient updates) instead of fixed point solution to the posterior beliefs tau: float, default 0.25 Decay constant for use in ``grad_descent`` version. Tunes the size of the gradient descent updates to the posterior. last_timestep: Bool, default False Flag for whether we are at the last timestep of belief updating Returns --------- qs_seq: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states under the policy. Nesting structure is timepoints, factors, where e.g. ``qs_seq[t][f]`` stores the marginal belief about factor ``f`` at timepoint ``t`` under the policy in question. F: float Variational free energy of the policy. """ # window past_len = len(lh_seq) future_len = policy.shape[0] if last_timestep: infer_len = past_len + future_len - 1 else: infer_len = past_len + future_len future_cutoff = past_len + future_len - 2 # dimensions _, num_states, _, num_factors = get_model_dimensions(A=None, B=B) # beliefs qs_seq = obj_array(infer_len) for t in range(infer_len): qs_seq[t] = obj_array_uniform(num_states) # last message qs_T = obj_array_zeros(num_states) # prior if prior is None: prior = obj_array_uniform(num_states) # transposed transition trans_B = obj_array(num_factors) for f in range(num_factors): trans_B[f] = spm_norm(np.swapaxes(B[f],0,1)) if prev_actions is not None: policy = np.vstack((prev_actions, policy)) for itr in range(num_iter): F = 0.0 # reset variational free energy (accumulated over time and factors, but reset per iteration) for t in range(infer_len): for f in range(num_factors): # likelihood if t < past_len: lnA = spm_log_single(spm_dot(lh_seq[t], qs_seq[t], [f])) print(f'Enumerated version: lnA at time {t}: {lnA}') else: lnA = np.zeros(num_states[f]) # past message if t == 0: lnB_past = spm_log_single(prior[f]) else: past_msg = B[f][:, :, int(policy[t - 1, f])].dot(qs_seq[t - 1][f]) lnB_past = spm_log_single(past_msg) # future message if t >= future_cutoff: lnB_future = qs_T[f] else: future_msg = trans_B[f][:, :, int(policy[t, f])].dot(qs_seq[t + 1][f]) lnB_future = spm_log_single(future_msg) # inference if grad_descent: sx = qs_seq[t][f] # save this as a separate variable so that it can be used in VFE computation lnqs = spm_log_single(sx) coeff = 1 if (t >= future_cutoff) else 2 err = (coeff * lnA + lnB_past + lnB_future) - coeff * lnqs lnqs = lnqs + tau * (err - err.mean()) # for numerical stability, before passing into the softmax qs_seq[t][f] = softmax(lnqs) if (t == 0) or (t == (infer_len-1)): F += sx.dot(0.5*err) else: F += sx.dot(0.5*(err - (num_factors - 1)*lnA/num_factors)) # @NOTE: not sure why Karl does this in SPM_MDP_VB_X, we should look into this else: qs_seq[t][f] = softmax(lnA + lnB_past + lnB_future) if not grad_descent: if t < past_len: F += calc_free_energy(qs_seq[t], prior, num_factors, likelihood = spm_log_single(lh_seq[t]) ) else: F += calc_free_energy(qs_seq[t], prior, num_factors) return qs_seq, F def run_mmp_factorized( lh_seq, mb_dict, B, B_factor_list, policy, prev_actions=None, prior=None, num_iter=10, grad_descent=True, tau=0.25, last_timestep = False): """ Marginal message passing scheme for updating marginal posterior beliefs about hidden states over time, conditioned on a particular policy. Parameters ---------- lh_seq: ``numpy.ndarray`` of dtype object Log likelihoods of hidden states under a sequence of observations over time. This is assumed to already be log-transformed. Each ``lh_seq[t]`` contains the log likelihood of hidden states for a particular observation at time ``t`` mb_dict: ``Dict`` Dictionary with two keys (``A_factor_list`` and ``A_modality_list``), that stores the factor indices that influence each modality (``A_factor_list``) and the modality indices influenced by each factor (``A_modality_list``). B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. B_factor_list: ``list`` of ``list`` of ``int`` List of lists of hidden state factors each hidden state factor depends on. Each element ``B_factor_list[i]`` is a list of the factor indices that factor i's dynamics depend on. policy: 2D ``numpy.ndarray`` Matrix of shape ``(policy_len, num_control_factors)`` that indicates the indices of each action (control state index) upon timestep ``t`` and control_factor ``f` in the element ``policy[t,f]`` for a given policy. prev_actions: ``numpy.ndarray``, default None If provided, should be a matrix of previous actions of shape ``(infer_len, num_control_factors)`` that indicates the indices of each action (control state index) taken in the past (up until the current timestep). prior: ``numpy.ndarray`` of dtype object, default None If provided, the prior beliefs about initial states (at t = 0, relative to ``infer_len``). If ``None``, this defaults to a flat (uninformative) prior over hidden states. numiter: int, default 10 Number of variational iterations. grad_descent: Bool, default True Flag for whether to use gradient descent (free energy gradient updates) instead of fixed point solution to the posterior beliefs tau: float, default 0.25 Decay constant for use in ``grad_descent`` version. Tunes the size of the gradient descent updates to the posterior. last_timestep: Bool, default False Flag for whether we are at the last timestep of belief updating Returns --------- qs_seq: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states under the policy. Nesting structure is timepoints, factors, where e.g. ``qs_seq[t][f]`` stores the marginal belief about factor ``f`` at timepoint ``t`` under the policy in question. F: float Variational free energy of the policy. """ # window past_len = len(lh_seq) future_len = policy.shape[0] if last_timestep: infer_len = past_len + future_len - 1 else: infer_len = past_len + future_len future_cutoff = past_len + future_len - 2 # dimensions _, num_states, _, num_factors = get_model_dimensions(A=None, B=B) # beliefs qs_seq = obj_array(infer_len) for t in range(infer_len): qs_seq[t] = obj_array_uniform(num_states) # last message qs_T = obj_array_zeros(num_states) # prior if prior is None: prior = obj_array_uniform(num_states) # transposed transition trans_B = obj_array(num_factors) for f in range(num_factors): trans_B[f] = spm_norm(np.swapaxes(B[f],0,1)) if prev_actions is not None: policy = np.vstack((prev_actions, policy)) A_factor_list, A_modality_list = mb_dict['A_factor_list'], mb_dict['A_modality_list'] joint_lh_seq = obj_array(len(lh_seq)) num_modalities = len(A_factor_list) for t in range(len(lh_seq)): joint_loglikelihood = np.zeros(tuple(num_states)) for m in range(num_modalities): reshape_dims = num_factors*[1] for _f_id in A_factor_list[m]: reshape_dims[_f_id] = num_states[_f_id] joint_loglikelihood += lh_seq[t][m].reshape(reshape_dims) # add up all the log-likelihoods after reshaping them to the global common dimensions of all hidden state factors joint_lh_seq[t] = joint_loglikelihood # compute inverse B dependencies, which is a list that for each hidden state factor, lists the indices of the other hidden state factors that it 'drives' or is a parent of in the HMM graphical model inv_B_deps = [[i for i, d in enumerate(B_factor_list) if f in d] for f in range(num_factors)] for itr in range(num_iter): F = 0.0 # reset variational free energy (accumulated over time and factors, but reset per iteration) for t in range(infer_len): for f in range(num_factors): # likelihood lnA = np.zeros(num_states[f]) if t < past_len: for m in A_modality_list[f]: lnA += spm_log_single(spm_dot(lh_seq[t][m], qs_seq[t][A_factor_list[m]], [A_factor_list[m].index(f)])) print(f'Factorized version: lnA at time {t}: {lnA}') # past message if t == 0: lnB_past = spm_log_single(prior[f]) else: past_msg = spm_dot(B[f][...,int(policy[t - 1, f])], qs_seq[t-1][B_factor_list[f]]) lnB_past = spm_log_single(past_msg) # future message if t >= future_cutoff: lnB_future = qs_T[f] else: # list of future_msgs, one for each of the factors that factor f is driving B_marg_list = [] # list of the marginalized B matrices, that correspond to mapping between the factor of interest `f` and each of its children factors `i` for i in inv_B_deps[f]: #loop over all the hidden state factors that are driven by f b = B[i][...,int(policy[t,i])] keep_dims = (0,1+B_factor_list[i].index(f)) dims = [] idxs = [] for j, d in enumerate(B_factor_list[i]): # loop over the list of factors that drive each child `i` of factor-of-interest `f` (i.e. the co-parents of `f`, with respect to child `i`) if f != d: dims.append((1 + j,)) idxs.append(d) xs = [qs_seq[t+1][f_i] for f_i in idxs] B_marg_list.append( factor_dot_flex(b, xs, tuple(dims), keep_dims=keep_dims) ) # marginalize out all parents of `i` besides `f` lnB_future = np.zeros(num_states[f]) for i, b in enumerate(B_marg_list): b_norm_T = spm_norm(b.T) lnB_future += spm_log_single(b_norm_T.dot(qs_seq[t + 1][inv_B_deps[f][i]])) lnB_future *= 0.5 # inference if grad_descent: sx = qs_seq[t][f] # save this as a separate variable so that it can be used in VFE computation lnqs = spm_log_single(sx) coeff = 1 if (t >= future_cutoff) else 2 err = (coeff * lnA + lnB_past + lnB_future) - coeff * lnqs lnqs = lnqs + tau * (err - err.mean()) qs_seq[t][f] = softmax(lnqs) if (t == 0) or (t == (infer_len-1)): F += sx.dot(0.5*err) else: F += sx.dot(0.5*(err - (num_factors - 1)*lnA/num_factors)) # @NOTE: not sure why Karl does this in SPM_MDP_VB_X, we should look into this else: qs_seq[t][f] = softmax(lnA + lnB_past + lnB_future) if not grad_descent: if t < past_len: F += calc_free_energy(qs_seq[t], prior, num_factors, likelihood = spm_log_single(joint_lh_seq[t]) ) else: F += calc_free_energy(qs_seq[t], prior, num_factors) return qs_seq, F def _run_mmp_testing( lh_seq, B, policy, prev_actions=None, prior=None, num_iter=10, grad_descent=True, tau=0.25, last_timestep = False): """ Marginal message passing scheme for updating marginal posterior beliefs about hidden states over time, conditioned on a particular policy. Parameters ---------- lh_seq: ``numpy.ndarray`` of dtype object Log likelihoods of hidden states under a sequence of observations over time. This is assumed to already be log-transformed. Each ``lh_seq[t]`` contains the log likelihood of hidden states for a particular observation at time ``t`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. policy: 2D ``numpy.ndarray`` Matrix of shape ``(policy_len, num_control_factors)`` that indicates the indices of each action (control state index) upon timestep ``t`` and control_factor ``f` in the element ``policy[t,f]`` for a given policy. prev_actions: ``numpy.ndarray``, default None If provided, should be a matrix of previous actions of shape ``(infer_len, num_control_factors)`` that indicates the indices of each action (control state index) taken in the past (up until the current timestep). prior: ``numpy.ndarray`` of dtype object, default None If provided, the prior beliefs about initial states (at t = 0, relative to ``infer_len``). If ``None``, this defaults to a flat (uninformative) prior over hidden states. numiter: int, default 10 Number of variational iterations. grad_descent: Bool, default True Flag for whether to use gradient descent (free energy gradient updates) instead of fixed point solution to the posterior beliefs tau: float, default 0.25 Decay constant for use in ``grad_descent`` version. Tunes the size of the gradient descent updates to the posterior. last_timestep: Bool, default False Flag for whether we are at the last timestep of belief updating Returns --------- qs_seq: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states under the policy. Nesting structure is timepoints, factors, where e.g. ``qs_seq[t][f]`` stores the marginal belief about factor ``f`` at timepoint ``t`` under the policy in question. F: float Variational free energy of the policy. xn: list The sequence of beliefs as they're computed across iterations of marginal message passing (used for benchmarking). Nesting structure is iteration, factor, so ``xn[itr][f]`` stores the ``num_states x infer_len`` array of beliefs about hidden states at different time points of inference horizon. vn: list The sequence of prediction errors as they're computed across iterations of marginal message passing (used for benchmarking). Nesting structure is iteration, factor, so ``vn[itr][f]`` stores the ``num_states x infer_len`` array of prediction errors for hidden states at different time points of inference horizon. """ # window past_len = len(lh_seq) future_len = policy.shape[0] if last_timestep: infer_len = past_len + future_len - 1 else: infer_len = past_len + future_len future_cutoff = past_len + future_len - 2 # dimensions _, num_states, _, num_factors = get_model_dimensions(A=None, B=B) # beliefs qs_seq = obj_array(infer_len) for t in range(infer_len): qs_seq[t] = obj_array_uniform(num_states) # last message qs_T = obj_array_zeros(num_states) # prior if prior is None: prior = obj_array_uniform(num_states) # transposed transition trans_B = obj_array(num_factors) for f in range(num_factors): trans_B[f] = spm_norm(np.swapaxes(B[f],0,1)) if prev_actions is not None: policy = np.vstack((prev_actions, policy)) xn = [] # list for storing beliefs across iterations vn = [] # list for storing prediction errors across iterations shape_list = [ [num_states[f], infer_len] for f in range(num_factors) ] for itr in range(num_iter): xn_itr_all_factors = obj_array_zeros(shape_list) # temporary cache for storing beliefs across different hidden state factors, for a fixed iteration of the belief updating scheme vn_itr_all_factors = obj_array_zeros(shape_list) # temporary cache for storing prediction errors across different hidden state factors, for a fixed iteration of the belief updating scheme F = 0.0 # reset variational free energy (accumulated over time and factors, but reset per iteration) for t in range(infer_len): if t == (infer_len - 1): pass for f in range(num_factors): # likelihood if t < past_len: # if itr == 0: # print(f'obs from timestep {t}\n') lnA = spm_log_single(spm_dot(lh_seq[t], qs_seq[t], [f])) else: lnA = np.zeros(num_states[f]) # past message if t == 0: lnB_past = spm_log_single(prior[f]) else: past_msg = B[f][:, :, int(policy[t - 1, f])].dot(qs_seq[t - 1][f]) lnB_past = spm_log_single(past_msg) # future message if t >= future_cutoff: lnB_future = qs_T[f] else: future_msg = trans_B[f][:, :, int(policy[t, f])].dot(qs_seq[t + 1][f]) lnB_future = spm_log_single(future_msg) # inference if grad_descent: sx = qs_seq[t][f] # save this as a separate variable so that it can be used in VFE computation lnqs = spm_log_single(sx) coeff = 1 if (t >= future_cutoff) else 2 err = (coeff * lnA + lnB_past + lnB_future) - coeff * lnqs vn_tmp = err - err.mean() lnqs = lnqs + tau * vn_tmp qs_seq[t][f] = softmax(lnqs) if (t == 0) or (t == (infer_len-1)): F += sx.dot(0.5*err) else: F += sx.dot(0.5*(err - (num_factors - 1)*lnA/num_factors)) # @NOTE: not sure why Karl does this in SPM_MDP_VB_X, we should look into this xn_itr_all_factors[f][:,t] = np.copy(qs_seq[t][f]) vn_itr_all_factors[f][:,t] = np.copy(vn_tmp) else: qs_seq[t][f] = softmax(lnA + lnB_past + lnB_future) if not grad_descent: if t < past_len: F += calc_free_energy(qs_seq[t], prior, num_factors, likelihood = spm_log_single(lh_seq[t]) ) else: F += calc_free_energy(qs_seq[t], prior, num_factors) xn.append(xn_itr_all_factors) vn.append(vn_itr_all_factors) return qs_seq, F, xn, vn ================================================ FILE: pymdp/legacy/algos/mmp_old.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member import numpy as np from pymdp.legacy.maths import spm_dot, get_joint_likelihood, spm_norm, softmax from pymdp.legacy import utils def run_mmp_old( A, B, obs_t, policy, curr_t, t_horizon, T, qs_bma=None, prior=None, num_iter=10, dF=1.0, dF_tol=0.001, previous_actions=None, use_gradient_descent=False, tau=0.25, ): """ Optimise marginal posterior beliefs about hidden states using marginal message-passing scheme (MMP) developed by Thomas Parr and colleagues, see https://github.com/tejparr/nmpassing Parameters ---------- - 'A' [numpy nd.array (matrix or tensor or array-of-arrays)]: Observation likelihood of the generative model, mapping from hidden states to observations. Used in inference to get the likelihood of an observation, under different hidden state configurations. - 'B' [numpy.ndarray (tensor or array-of-arrays)]: Transition likelihood of the generative model, mapping from hidden states at t to hidden states at t+1. Used in inference to get expected future (or past) hidden states, given past (or future) hidden states (or expectations thereof). - 'obs_t' [list of length t_horizon of numpy 1D array or array of arrays (with 1D numpy array entries)]: Sequence of observations sampled from beginning of time horizon the current timestep t. The first observation (the start of the time horizon) is either the first timestep of the generative process or the first timestep of the policy horizon (whichever is closer to 'curr_t' in time). The observations over time are stored as a list of numpy arrays, where in case of multi-modalities each numpy array is an array-of-arrays, with one 1D numpy.ndarray for each modality. In the case of a single modality, each observation is a single 1D numpy.ndarray. - 'policy' [2D np.ndarray]: Array of actions constituting a single policy. Policy is a shape (n_steps, n_control_factors) numpy.ndarray, the values of which indicate actions along a given control factor (column index) at a given timestep (row index). - 'curr_t' [int]: Current timestep (relative to the 'absolute' time of the generative process). - 't_horizon'[int]: Temporal horizon of inference for states and policies. - 'T' [int]: Temporal horizon of the generative process (absolute time) - `qs_bma` [numpy 1D array, array of arrays (with 1D numpy array entries) or None]: - 'prior' [numpy 1D array, array of arrays (with 1D numpy array entries) or None]: Prior beliefs of the agent at the beginning of the time horizon, to be integrated with the marginal likelihood to obtain posterior at the first timestep. If absent, prior is set to be a uniform distribution over hidden states (identical to the initialisation of the posterior. -'num_iter' [int]: Number of variational iterations to run. (optional) -'dF' [float]: Starting free energy gradient (dF/dt) before updating in the course of gradient descent. (optional) -'dF_tol' [float]: Threshold value of the gradient of the variational free energy (dF/dt), to be checked at each iteration. If dF <= dF_tol, the iterations are halted pre-emptively and the final marginal posterior belief(s) is(are) returned. (optional) -'previous_actions' [numpy.ndarray with shape (num_steps, n_control_factors) or None]: Array of previous actions, which can be used to constrain the 'past' messages in inference to only consider states of affairs that were possible under actions that are known to have been taken. The first dimension of previous-arrays (previous_actions.shape[0]) encodes how far back in time the agent is considering. The first timestep of this either corresponds to either the first timestep of the generative process or the first timestep of the policy horizon (whichever is sooner in time). (optional) -'use_gradient_descent' [bool]: Flag to indicate whether to use gradient descent to optimise posterior beliefs. -'tau' [float]: Learning rate for gradient descent (only used if use_gradient_descent is True) Returns ---------- -'qs' [list of length T of numpy 1D arrays or array of arrays (with 1D numpy array entries): Marginal posterior beliefs over hidden states (single- or multi-factor) achieved via marginal message pasing -'qss' [list of lists of length T of numpy 1D arrays or array of arrays (with 1D numpy array entries): Marginal posterior beliefs about hidden states (single- or multi-factor) held at each timepoint, *about* each timepoint of the observation sequence -'F' [2D np.ndarray]: Variational free energy of beliefs about hidden states, indexed by time point and variational iteration -'F_pol' [float]: Total free energy of the policy under consideration. """ # get temporal window for inference min_time = max(0, curr_t - t_horizon) max_time = min(T, curr_t + t_horizon) window_idxs = np.array([t for t in range(min_time, max_time)]) window_len = len(window_idxs) # TODO: needs a better name - the point at which we ignore future messages future_cutoff = window_len - 1 inference_len = window_len + 1 len(obs_t) # get relevant observations, given our current time point if curr_t == 0: obs_range = [0] else: min_obs_idx = max(0, curr_t - t_horizon) max_obs_idx = curr_t + 1 obs_range = range(min_obs_idx, max_obs_idx) # get model dimensions # TODO: make a general function in `utils` for extracting model dimensions if utils.is_obj_array(obs_t[0]): num_obs = [obs.shape[0] for obs in obs_t[0]] else: num_obs = [obs_t[0].shape[0]] if utils.is_obj_array(B): num_states = [b.shape[0] for b in B] else: num_states = [B[0].shape[0]] B = utils.to_obj_array(B) len(num_obs) num_factors = len(num_states) """ =========== Step 1 =========== Calculate likelihood Loop over modalities and use assumption of independence among observation modalities to combine each modality-specific likelihood into a single joint likelihood over hidden states """ # likelihood of observations under configurations of hidden states (over time) likelihood = np.empty(len(obs_range), dtype=object) for t, obs in enumerate(obs_range): # likelihood_t = np.ones(tuple(num_states)) # if num_modalities == 1: # likelihood_t *= spm_dot(A[0], obs_t[obs], obs_mode=True) # else: # for modality in range(num_modalities): # likelihood_t *= spm_dot(A[modality], obs_t[obs][modality], obs_mode=True) likelihood_t = get_joint_likelihood(A, obs_t, num_states) # The Thomas Parr MMP version, you log the likelihood first # likelihood[t] = np.log(likelihood_t + 1e-16) # Karl SPM version, logging doesn't happen until *after* the dotting with the posterior likelihood[t] = likelihood_t """ =========== Step 2 =========== Initialise a flat posterior (and prior if necessary) If a prior is not provided, initialise a uniform prior """ qs = [np.empty(num_factors, dtype=object) for i in range(inference_len)] for t in range(inference_len): # if t == window_len: # # final message is zeros - has no effect on inference # # TODO: this may be redundant now that we skip last step # for f in range(num_factors): # qs[t][f] = np.zeros(num_states[f]) # else: # for f in range(num_factors): # qs[t][f] = np.ones(num_states[f]) / num_states[f] for f in range(num_factors): qs[t][f] = np.ones(num_states[f]) / num_states[f] if prior is None: prior = np.empty(num_factors, dtype=object) for f in range(num_factors): prior[f] = np.ones(num_states[f]) / num_states[f] """ =========== Step 3 =========== Create a normalized transpose of the transition distribution `B_transposed` Used for computing backwards messages 'from the future' """ B_transposed = np.empty(num_factors, dtype=object) for f in range(num_factors): B_transposed[f] = np.zeros_like(B[f]) for u in range(B[f].shape[2]): B_transposed[f][:, :, u] = spm_norm(B[f][:, :, u].T) # zero out final message # TODO: may be redundant now we skip final step last_message = np.empty(num_factors, dtype=object) for f in range(num_factors): last_message[f] = np.zeros(num_states[f]) # if previous actions not given, zero out to stop any influence on inference if previous_actions is None: previous_actions = np.zeros((1, policy.shape[1])) full_policy = np.vstack((previous_actions, policy)) # print(full_policy.shape) """ =========== Step 3 =========== Loop over time indices of time window, updating posterior as we go This includes past time steps and future time steps """ qss = [[] for i in range(num_iter)] free_energy = np.zeros((len(qs), num_iter)) free_energy_pol = 0.0 # print(obs_seq_len) print('Full policy history') print('------------------') print(full_policy) for n in range(num_iter): for t in range(inference_len): lnB_past_tensor = np.empty(num_factors, dtype=object) for f in range(num_factors): # if t == 0 and n == 0: # print(f"qs at time t = {t}, factor f = {f}, iteration i = {n}: {qs[t][f]}") """ =========== Step 3.a =========== Calculate likelihood """ if t < len(obs_range): # if t < len(obs_seq_len): # Thomas Parr MMP version # lnA = spm_dot(likelihood[t], qs[t], [f]) # Karl SPM version lnA = np.log(spm_dot(likelihood[t], qs[t], [f]) + 1e-16) else: lnA = np.zeros(num_states[f]) if t == 1 and n == 0: # pass print(f"lnA at time t = {t}, factor f = {f}, iteration i = {n}: {lnA}") # print(f"lnA at time t = {t}, factor f = {f}, iteration i = {n}: {lnA}") """ =========== Step 3.b =========== Calculate past message """ if t == 0 and window_idxs[0] == 0: lnB_past = np.log(prior[f] + 1e-16) else: # Thomas Parr MMP version # lnB_past = 0.5 * np.log(B[f][:, :, full_policy[t - 1, f]].dot(qs[t - 1][f]) + 1e-16) # Karl SPM version if t == 1 and n == 0 and f == 1: print('past action:') print('-------------') print(full_policy[t - 1, :]) print(B[f][:,:,0]) print(B[f][:,:,1]) print(qs[t - 1][f]) lnB_past = np.log(B[f][:, :, full_policy[t - 1, f]].dot(qs[t - 1][f]) + 1e-16) # if t == 0: # print( # f"qs_t_1 at time t = {t}, factor f = {f}, iteration i = {n}: {qs[t - 1][f]}" # ) if t == 1 and n == 0: print( f"lnB_past at time t = {t}, factor f = {f}, iteration i = {n}: {lnB_past}" ) """ =========== Step 3.c =========== Calculate future message """ if t >= future_cutoff: # TODO: this is redundant - not used in code lnB_future = last_message[f] else: # Thomas Parr MMP version # B_future = B_transposed[f][:, :, int(full_policy[t, f])].dot(qs[t + 1][f]) # lnB_future = 0.5 * np.log(B_future + 1e-16) # Karl Friston SPM version B_future = B_transposed[f][:, :, int(full_policy[t, f])].dot(qs[t + 1][f]) lnB_future = np.log(B_future + 1e-16) # Thomas Parr MMP version # lnB_past_tensor[f] = 2 * lnBpast # Karl SPM version lnB_past_tensor[f] = lnB_past """ =========== Step 3.d =========== Update posterior """ if use_gradient_descent: lns = np.log(qs[t][f] + 1e-16) # Thomas Parr MMP version # error = (lnA + lnBpast + lnBfuture) - lns # Karl SPM version if t >= future_cutoff: error = lnA + lnB_past - lns else: error = (2 * lnA + lnB_past + lnB_future) - 2 * lns # print(f"prediction error at time t = {t}, factor f = {f}, iteration i = {n}: {error}") # print(f"OG {t} {f} {error}") error -= error.mean() lns = lns + tau * error qs_t_f = softmax(lns) free_energy_pol += 0.5 * qs[t][f].dot(error) qs[t][f] = qs_t_f else: qs[t][f] = softmax(lnA + lnB_past + lnB_future) # TODO: probably works anyways # free_energy[t, n] = calc_free_energy(qs[t], lnB_past_tensor, num_factors, likelihood[t]) # free_energy_pol += F[t, n] qss[n].append(qs) return qs, qss, free_energy, free_energy_pol ================================================ FILE: pymdp/legacy/control.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- # pylint: disable=no-member # pylint: disable=not-an-iterable import itertools import numpy as np from pymdp.legacy.maths import softmax, softmax_obj_arr, spm_dot, spm_wnorm, spm_MDP_G, spm_log_single, entropy from pymdp.legacy.inference import update_posterior_states_factorized, average_states_over_policies from pymdp.legacy import utils import copy def update_posterior_policies_full( qs_seq_pi, A, B, C, policies, use_utility=True, use_states_info_gain=True, use_param_info_gain=False, prior=None, pA=None, pB=None, F=None, E=None, I=None, gamma=16.0 ): """ Update posterior beliefs about policies by computing expected free energy of each policy and integrating that with the variational free energy of policies ``F`` and prior over policies ``E``. This is intended to be used in conjunction with the ``update_posterior_states_full`` method of ``inference.py``, since the full posterior over future timesteps, under all policies, is assumed to be provided in the input array ``qs_seq_pi``. Parameters ---------- qs_seq_pi: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states for each policy. Nesting structure is policies, timepoints, factors, where e.g. ``qs_seq_pi[p][t][f]`` stores the marginal belief about factor ``f`` at timepoint ``t`` under policy ``p``. A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility term of the expected free energy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where `num_timesteps` is the temporal depth of the policy and ``num_factors`` is the number of control factors. use_utility: ``Bool``, default ``True`` Boolean flag that determines whether expected utility should be incorporated into computation of EFE. use_states_info_gain: ``Bool``, default ``True`` Boolean flag that determines whether state epistemic value (info gain about hidden states) should be incorporated into computation of EFE. use_param_info_gain: ``Bool``, default ``False`` Boolean flag that determines whether parameter epistemic value (info gain about generative model parameters) should be incorporated into computation of EFE. prior: ``numpy.ndarray`` of dtype object, default ``None`` If provided, this is a ``numpy`` object array with one sub-array per hidden state factor, that stores the prior beliefs about initial states. If ``None``, this defaults to a flat (uninformative) prior over hidden states. pA: ``numpy.ndarray`` of dtype object, default ``None`` Dirichlet parameters over observation model (same shape as ``A``) pB: ``numpy.ndarray`` of dtype object, default ``None`` Dirichlet parameters over transition model (same shape as ``B``) F: 1D ``numpy.ndarray``, default ``None`` Vector of variational free energies for each policy E: 1D ``numpy.ndarray``, default ``None`` Vector of prior probabilities of each policy (what's referred to in the active inference literature as "habits"). If ``None``, this defaults to a flat (uninformative) prior over policies. I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. gamma: ``float``, default 16.0 Prior precision over policies, scales the contribution of the expected free energy to the posterior over policies Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ num_obs, num_states, num_modalities, num_factors = utils.get_model_dimensions(A, B) horizon = len(qs_seq_pi[0]) num_policies = len(qs_seq_pi) qo_seq = utils.obj_array(horizon) for t in range(horizon): qo_seq[t] = utils.obj_array_zeros(num_obs) # initialise expected observations qo_seq_pi = utils.obj_array(num_policies) # initialize (negative) expected free energies for all policies G = np.zeros(num_policies) if F is None: F = spm_log_single(np.ones(num_policies) / num_policies) if E is None: lnE = spm_log_single(np.ones(num_policies) / num_policies) else: lnE = spm_log_single(E) if I is not None: init_qs_all_pi = [qs_seq_pi[p][0] for p in range(num_policies)] qs_bma = average_states_over_policies(init_qs_all_pi, softmax(E)) for p_idx, policy in enumerate(policies): qo_seq_pi[p_idx] = get_expected_obs(qs_seq_pi[p_idx], A) if use_utility: G[p_idx] += calc_expected_utility(qo_seq_pi[p_idx], C) if use_states_info_gain: G[p_idx] += calc_states_info_gain(A, qs_seq_pi[p_idx]) if use_param_info_gain: if pA is not None: G[p_idx] += calc_pA_info_gain(pA, qo_seq_pi[p_idx], qs_seq_pi[p_idx]) if pB is not None: G[p_idx] += calc_pB_info_gain(pB, qs_seq_pi[p_idx], prior, policy) if I is not None: G[p_idx] += calc_inductive_cost(qs_bma, qs_seq_pi[p_idx], I) q_pi = softmax(G * gamma - F + lnE) return q_pi, G def update_posterior_policies_full_factorized( qs_seq_pi, A, B, C, A_factor_list, B_factor_list, policies, use_utility=True, use_states_info_gain=True, use_param_info_gain=False, prior=None, pA=None, pB=None, F=None, E=None, I=None, gamma=16.0 ): """ Update posterior beliefs about policies by computing expected free energy of each policy and integrating that with the variational free energy of policies ``F`` and prior over policies ``E``. This is intended to be used in conjunction with the ``update_posterior_states_full`` method of ``inference.py``, since the full posterior over future timesteps, under all policies, is assumed to be provided in the input array ``qs_seq_pi``. Parameters ---------- qs_seq_pi: ``numpy.ndarray`` of dtype object Posterior beliefs over hidden states for each policy. Nesting structure is policies, timepoints, factors, where e.g. ``qs_seq_pi[p][t][f]`` stores the marginal belief about factor ``f`` at timepoint ``t`` under policy ``p``. A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility term of the expected free energy. A_factor_list: ``list`` of ``list``s of ``int`` ``list`` that stores the indices of the hidden state factor indices that each observation modality depends on. For example, if ``A_factor_list[m] = [0, 1]``, then observation modality ``m`` depends on hidden state factors 0 and 1. B_factor_list: ``list`` of ``list``s of ``int`` ``list`` that stores the indices of the hidden state factor indices that each hidden state factor depends on. For example, if ``B_factor_list[f] = [0, 1]``, then the transitions in hidden state factor ``f`` depend on hidden state factors 0 and 1. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where `num_timesteps` is the temporal depth of the policy and ``num_factors`` is the number of control factors. use_utility: ``Bool``, default ``True`` Boolean flag that determines whether expected utility should be incorporated into computation of EFE. use_states_info_gain: ``Bool``, default ``True`` Boolean flag that determines whether state epistemic value (info gain about hidden states) should be incorporated into computation of EFE. use_param_info_gain: ``Bool``, default ``False`` Boolean flag that determines whether parameter epistemic value (info gain about generative model parameters) should be incorporated into computation of EFE. prior: ``numpy.ndarray`` of dtype object, default ``None`` If provided, this is a ``numpy`` object array with one sub-array per hidden state factor, that stores the prior beliefs about initial states. If ``None``, this defaults to a flat (uninformative) prior over hidden states. pA: ``numpy.ndarray`` of dtype object, default ``None`` Dirichlet parameters over observation model (same shape as ``A``) pB: ``numpy.ndarray`` of dtype object, default ``None`` Dirichlet parameters over transition model (same shape as ``B``) F: 1D ``numpy.ndarray``, default ``None`` Vector of variational free energies for each policy E: 1D ``numpy.ndarray``, default ``None`` Vector of prior probabilities of each policy (what's referred to in the active inference literature as "habits"). If ``None``, this defaults to a flat (uninformative) prior over policies. I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. gamma: ``float``, default 16.0 Prior precision over policies, scales the contribution of the expected free energy to the posterior over policies Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ num_obs, num_states, num_modalities, num_factors = utils.get_model_dimensions(A, B) horizon = len(qs_seq_pi[0]) num_policies = len(qs_seq_pi) qo_seq = utils.obj_array(horizon) for t in range(horizon): qo_seq[t] = utils.obj_array_zeros(num_obs) # initialise expected observations qo_seq_pi = utils.obj_array(num_policies) # initialize (negative) expected free energies for all policies G = np.zeros(num_policies) if F is None: F = spm_log_single(np.ones(num_policies) / num_policies) if E is None: lnE = spm_log_single(np.ones(num_policies) / num_policies) else: lnE = spm_log_single(E) if I is not None: init_qs_all_pi = [qs_seq_pi[p][0] for p in range(num_policies)] qs_bma = average_states_over_policies(init_qs_all_pi, softmax(E)) for p_idx, policy in enumerate(policies): qo_seq_pi[p_idx] = get_expected_obs_factorized(qs_seq_pi[p_idx], A, A_factor_list) if use_utility: G[p_idx] += calc_expected_utility(qo_seq_pi[p_idx], C) if use_states_info_gain: G[p_idx] += calc_states_info_gain_factorized(A, qs_seq_pi[p_idx], A_factor_list) if use_param_info_gain: if pA is not None: G[p_idx] += calc_pA_info_gain_factorized(pA, qo_seq_pi[p_idx], qs_seq_pi[p_idx], A_factor_list) if pB is not None: G[p_idx] += calc_pB_info_gain_interactions(pB, qs_seq_pi[p_idx], qs_seq_pi[p_idx], B_factor_list, policy) if I is not None: G[p_idx] += calc_inductive_cost(qs_bma, qs_seq_pi[p_idx], I) q_pi = softmax(G * gamma - F + lnE) return q_pi, G def update_posterior_policies( qs, A, B, C, policies, use_utility=True, use_states_info_gain=True, use_param_info_gain=False, pA=None, pB=None, E=None, I=None, gamma=16.0 ): """ Update posterior beliefs about policies by computing expected free energy of each policy and integrating that with the prior over policies ``E``. This is intended to be used in conjunction with the ``update_posterior_states`` method of the ``inference`` module, since only the posterior about the hidden states at the current timestep ``qs`` is assumed to be provided, unconditional on policies. The predictive posterior over hidden states under all policies Q(s, pi) is computed using the starting posterior about states at the current timestep ``qs`` and the generative model (e.g. ``A``, ``B``, ``C``) Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at current timepoint (unconditioned on policies) A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility term of the expected free energy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where `num_timesteps` is the temporal depth of the policy and ``num_factors`` is the number of control factors. use_utility: ``Bool``, default ``True`` Boolean flag that determines whether expected utility should be incorporated into computation of EFE. use_states_info_gain: ``Bool``, default ``True`` Boolean flag that determines whether state epistemic value (info gain about hidden states) should be incorporated into computation of EFE. use_param_info_gain: ``Bool``, default ``False`` Boolean flag that determines whether parameter epistemic value (info gain about generative model parameters) should be incorporated into computation of EFE. pA: ``numpy.ndarray`` of dtype object, optional Dirichlet parameters over observation model (same shape as ``A``) pB: ``numpy.ndarray`` of dtype object, optional Dirichlet parameters over transition model (same shape as ``B``) E: 1D ``numpy.ndarray``, optional Vector of prior probabilities of each policy (what's referred to in the active inference literature as "habits") I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. gamma: float, default 16.0 Prior precision over policies, scales the contribution of the expected free energy to the posterior over policies Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ n_policies = len(policies) G = np.zeros(n_policies) q_pi = np.zeros((n_policies, 1)) if E is None: lnE = spm_log_single(np.ones(n_policies) / n_policies) else: lnE = spm_log_single(E) for idx, policy in enumerate(policies): qs_pi = get_expected_states(qs, B, policy) qo_pi = get_expected_obs(qs_pi, A) if use_utility: G[idx] += calc_expected_utility(qo_pi, C) if use_states_info_gain: G[idx] += calc_states_info_gain(A, qs_pi) if use_param_info_gain: if pA is not None: G[idx] += calc_pA_info_gain(pA, qo_pi, qs_pi).item() if pB is not None: G[idx] += calc_pB_info_gain(pB, qs_pi, qs, policy).item() if I is not None: G[idx] += calc_inductive_cost(qs, qs_pi, I) q_pi = softmax(G * gamma + lnE) return q_pi, G def update_posterior_policies_factorized( qs, A, B, C, A_factor_list, B_factor_list, policies, use_utility=True, use_states_info_gain=True, use_param_info_gain=False, pA=None, pB=None, E=None, I=None, gamma=16.0 ): """ Update posterior beliefs about policies by computing expected free energy of each policy and integrating that with the prior over policies ``E``. This is intended to be used in conjunction with the ``update_posterior_states`` method of the ``inference`` module, since only the posterior about the hidden states at the current timestep ``qs`` is assumed to be provided, unconditional on policies. The predictive posterior over hidden states under all policies Q(s, pi) is computed using the starting posterior about states at the current timestep ``qs`` and the generative model (e.g. ``A``, ``B``, ``C``) Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at current timepoint (unconditioned on policies) A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility term of the expected free energy. A_factor_list: ``list`` of ``list``s of ``int`` ``list`` that stores the indices of the hidden state factor indices that each observation modality depends on. For example, if ``A_factor_list[m] = [0, 1]``, then observation modality ``m`` depends on hidden state factors 0 and 1. B_factor_list: ``list`` of ``list``s of ``int`` ``list`` that stores the indices of the hidden state factor indices that each hidden state factor depends on. For example, if ``B_factor_list[f] = [0, 1]``, then the transitions in hidden state factor ``f`` depend on hidden state factors 0 and 1. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where `num_timesteps` is the temporal depth of the policy and ``num_factors`` is the number of control factors. use_utility: ``Bool``, default ``True`` Boolean flag that determines whether expected utility should be incorporated into computation of EFE. use_states_info_gain: ``Bool``, default ``True`` Boolean flag that determines whether state epistemic value (info gain about hidden states) should be incorporated into computation of EFE. use_param_info_gain: ``Bool``, default ``False`` Boolean flag that determines whether parameter epistemic value (info gain about generative model parameters) should be incorporated into computation of EFE. pA: ``numpy.ndarray`` of dtype object, optional Dirichlet parameters over observation model (same shape as ``A``) pB: ``numpy.ndarray`` of dtype object, optional Dirichlet parameters over transition model (same shape as ``B``) E: 1D ``numpy.ndarray``, optional Vector of prior probabilities of each policy (what's referred to in the active inference literature as "habits") I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. gamma: float, default 16.0 Prior precision over policies, scales the contribution of the expected free energy to the posterior over policies Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ n_policies = len(policies) G = np.zeros(n_policies) q_pi = np.zeros((n_policies, 1)) if E is None: lnE = spm_log_single(np.ones(n_policies) / n_policies) else: lnE = spm_log_single(E) for idx, policy in enumerate(policies): qs_pi = get_expected_states_interactions(qs, B, B_factor_list, policy) qo_pi = get_expected_obs_factorized(qs_pi, A, A_factor_list) if use_utility: G[idx] += calc_expected_utility(qo_pi, C) if use_states_info_gain: G[idx] += calc_states_info_gain_factorized(A, qs_pi, A_factor_list) if use_param_info_gain: if pA is not None: G[idx] += calc_pA_info_gain_factorized(pA, qo_pi, qs_pi, A_factor_list).item() if pB is not None: G[idx] += calc_pB_info_gain_interactions(pB, qs_pi, qs, B_factor_list, policy).item() if I is not None: G[idx] += calc_inductive_cost(qs, qs_pi, I) q_pi = softmax(G * gamma + lnE) return q_pi, G def get_expected_states(qs, B, policy): """ Compute the expected states under a policy, also known as the posterior predictive density over states Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at a given timepoint. B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. policy: 2D ``numpy.ndarray`` Array that stores actions entailed by a policy over time. Shape is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Returns ------- qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` """ n_steps = policy.shape[0] n_factors = policy.shape[1] # initialise posterior predictive density as a list of beliefs over time, including current posterior beliefs about hidden states as the first element qs_pi = [qs] + [utils.obj_array(n_factors) for t in range(n_steps)] # get expected states over time for t in range(n_steps): for control_factor, action in enumerate(policy[t,:]): qs_pi[t+1][control_factor] = B[control_factor][:,:,int(action)].dot(qs_pi[t][control_factor]) return qs_pi[1:] def get_expected_states_interactions(qs, B, B_factor_list, policy): """ Compute the expected states under a policy, also known as the posterior predictive density over states Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at a given timepoint. B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. B_factor_list: ``list`` of ``list`` of ``int`` List of lists of hidden state factors each hidden state factor depends on. Each element ``B_factor_list[i]`` is a list of the factor indices that factor i's dynamics depend on. policy: 2D ``numpy.ndarray`` Array that stores actions entailed by a policy over time. Shape is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Returns ------- qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` """ n_steps = policy.shape[0] n_factors = policy.shape[1] # initialise posterior predictive density as a list of beliefs over time, including current posterior beliefs about hidden states as the first element qs_pi = [qs] + [utils.obj_array(n_factors) for t in range(n_steps)] # get expected states over time for t in range(n_steps): for control_factor, action in enumerate(policy[t,:]): factor_idx = B_factor_list[control_factor] # list of the hidden state factor indices that the dynamics of `qs[control_factor]` depend on qs_pi[t+1][control_factor] = spm_dot(B[control_factor][...,int(action)], qs_pi[t][factor_idx]) return qs_pi[1:] def get_expected_obs(qs_pi, A): """ Compute the expected observations under a policy, also known as the posterior predictive density over observations Parameters ---------- qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` Returns ------- qo_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over observations expected under the policy, where ``qo_pi[t]`` stores the beliefs about observations expected under the policy at time ``t`` """ n_steps = len(qs_pi) # each element of the list is the PPD at a different timestep # initialise expected observations qo_pi = [] for t in range(n_steps): qo_pi_t = utils.obj_array(len(A)) qo_pi.append(qo_pi_t) # compute expected observations over time for t in range(n_steps): for modality, A_m in enumerate(A): qo_pi[t][modality] = spm_dot(A_m, qs_pi[t]) return qo_pi def get_expected_obs_factorized(qs_pi, A, A_factor_list): """ Compute the expected observations under a policy, also known as the posterior predictive density over observations Parameters ---------- qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` A_factor_list: ``list`` of ``list`` of ``int`` List of lists of hidden state factor indices that each observation modality depends on. Each element ``A_factor_list[i]`` is a list of the factor indices that modality i's observation model depends on. Returns ------- qo_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over observations expected under the policy, where ``qo_pi[t]`` stores the beliefs about observations expected under the policy at time ``t`` """ n_steps = len(qs_pi) # each element of the list is the PPD at a different timestep # initialise expected observations qo_pi = [] for t in range(n_steps): qo_pi_t = utils.obj_array(len(A)) qo_pi.append(qo_pi_t) # compute expected observations over time for t in range(n_steps): for modality, A_m in enumerate(A): factor_idx = A_factor_list[modality] # list of the hidden state factor indices that observation modality with the index `modality` depends on qo_pi[t][modality] = spm_dot(A_m, qs_pi[t][factor_idx]) return qo_pi def calc_expected_utility(qo_pi, C): """ Computes the expected utility of a policy, using the observation distribution expected under that policy and a prior preference vector. Parameters ---------- qo_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over observations expected under the policy, where ``qo_pi[t]`` stores the beliefs about observations expected under the policy at time ``t`` C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility. Returns ------- expected_util: float Utility (reward) expected under the policy in question """ n_steps = len(qo_pi) # initialise expected utility expected_util = 0 # loop over time points and modalities num_modalities = len(C) # reformat C to be tiled across timesteps, if it's not already modalities_to_tile = [modality_i for modality_i in range(num_modalities) if C[modality_i].ndim == 1] # make a deepcopy of C where it has been tiled across timesteps C_tiled = copy.deepcopy(C) for modality in modalities_to_tile: C_tiled[modality] = np.tile(C[modality][:,None], (1, n_steps) ) C_prob = softmax_obj_arr(C_tiled) # convert relative log probabilities into proper probability distribution for t in range(n_steps): for modality in range(num_modalities): lnC = spm_log_single(C_prob[modality][:, t]) expected_util += qo_pi[t][modality].dot(lnC) return expected_util def calc_states_info_gain(A, qs_pi): """ Computes the Bayesian surprise or information gain about states of a policy, using the observation model and the hidden state distribution expected under that policy. Parameters ---------- A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` Returns ------- states_surprise: float Bayesian surprise (about states) or salience expected under the policy in question """ n_steps = len(qs_pi) states_surprise = 0 for t in range(n_steps): states_surprise += spm_MDP_G(A, qs_pi[t]) return states_surprise def calc_states_info_gain_factorized(A, qs_pi, A_factor_list): """ Computes the Bayesian surprise or information gain about states of a policy, using the observation model and the hidden state distribution expected under that policy. Parameters ---------- A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` A_factor_list: ``list`` of ``list`` of ``int`` List of lists, where ``A_factor_list[m]`` is a list of the hidden state factor indices that observation modality with the index ``m`` depends on Returns ------- states_surprise: float Bayesian surprise (about states) or salience expected under the policy in question """ n_steps = len(qs_pi) states_surprise = 0 for t in range(n_steps): for m, A_m in enumerate(A): factor_idx = A_factor_list[m] # list of the hidden state factor indices that observation modality with the index `m` depends on states_surprise += spm_MDP_G(A_m, qs_pi[t][factor_idx]) return states_surprise def calc_pA_info_gain(pA, qo_pi, qs_pi): """ Compute expected Dirichlet information gain about parameters ``pA`` under a policy Parameters ---------- pA: ``numpy.ndarray`` of dtype object Dirichlet parameters over observation model (same shape as ``A``) qo_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over observations expected under the policy, where ``qo_pi[t]`` stores the beliefs about observations expected under the policy at time ``t`` qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` Returns ------- infogain_pA: float Surprise (about Dirichlet parameters) expected under the policy in question """ n_steps = len(qo_pi) num_modalities = len(pA) wA = utils.obj_array(num_modalities) for modality, pA_m in enumerate(pA): wA[modality] = spm_wnorm(pA[modality]) pA_infogain = 0 for modality in range(num_modalities): wA_modality = wA[modality] * (pA[modality] > 0).astype("float") for t in range(n_steps): pA_infogain -= qo_pi[t][modality].dot(spm_dot(wA_modality, qs_pi[t])[:, np.newaxis]) return pA_infogain def calc_pA_info_gain_factorized(pA, qo_pi, qs_pi, A_factor_list): """ Compute expected Dirichlet information gain about parameters ``pA`` under a policy. In this version of the function, we assume that the observation model is factorized, i.e. that each observation modality depends on a subset of the hidden state factors. Parameters ---------- pA: ``numpy.ndarray`` of dtype object Dirichlet parameters over observation model (same shape as ``A``) qo_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over observations expected under the policy, where ``qo_pi[t]`` stores the beliefs about observations expected under the policy at time ``t`` qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` A_factor_list: ``list`` of ``list`` of ``int`` List of lists, where ``A_factor_list[m]`` is a list of the hidden state factor indices that observation modality with the index ``m`` depends on Returns ------- infogain_pA: float Surprise (about Dirichlet parameters) expected under the policy in question """ n_steps = len(qo_pi) num_modalities = len(pA) wA = utils.obj_array(num_modalities) for modality, pA_m in enumerate(pA): wA[modality] = spm_wnorm(pA[modality]) pA_infogain = 0 for modality in range(num_modalities): wA_modality = wA[modality] * (pA[modality] > 0).astype("float") factor_idx = A_factor_list[modality] for t in range(n_steps): pA_infogain -= qo_pi[t][modality].dot(spm_dot(wA_modality, qs_pi[t][factor_idx])[:, np.newaxis]) return pA_infogain def calc_pB_info_gain(pB, qs_pi, qs_prev, policy): """ Compute expected Dirichlet information gain about parameters ``pB`` under a given policy Parameters ---------- pB: ``numpy.ndarray`` of dtype object Dirichlet parameters over transition model (same shape as ``B``) qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` qs_prev: ``numpy.ndarray`` of dtype object Posterior over hidden states at beginning of trajectory (before receiving observations) policy: 2D ``numpy.ndarray`` Array that stores actions entailed by a policy over time. Shape is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Returns ------- infogain_pB: float Surprise (about dirichlet parameters) expected under the policy in question """ n_steps = len(qs_pi) num_factors = len(pB) wB = utils.obj_array(num_factors) for factor, pB_f in enumerate(pB): wB[factor] = spm_wnorm(pB_f) pB_infogain = 0 for t in range(n_steps): # the 'past posterior' used for the information gain about pB here is the posterior # over expected states at the timestep previous to the one under consideration # if we're on the first timestep, we just use the latest posterior in the # entire action-perception cycle as the previous posterior if t == 0: previous_qs = qs_prev # otherwise, we use the expected states for the timestep previous to the timestep under consideration else: previous_qs = qs_pi[t - 1] # get the list of action-indices for the current timestep policy_t = policy[t, :] for factor, a_i in enumerate(policy_t): wB_factor_t = wB[factor][:, :, int(a_i)] * (pB[factor][:, :, int(a_i)] > 0).astype("float") pB_infogain -= qs_pi[t][factor].dot(wB_factor_t.dot(previous_qs[factor])) return pB_infogain def calc_pB_info_gain_interactions(pB, qs_pi, qs_prev, B_factor_list, policy): """ Compute expected Dirichlet information gain about parameters ``pB`` under a given policy Parameters ---------- pB: ``numpy.ndarray`` of dtype object Dirichlet parameters over transition model (same shape as ``B``) qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` qs_prev: ``numpy.ndarray`` of dtype object Posterior over hidden states at beginning of trajectory (before receiving observations) B_factor_list: ``list`` of ``list`` of ``int`` List of lists, where ``B_factor_list[f]`` is a list of the hidden state factor indices that hidden state factor with the index ``f`` depends on policy: 2D ``numpy.ndarray`` Array that stores actions entailed by a policy over time. Shape is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Returns ------- infogain_pB: float Surprise (about dirichlet parameters) expected under the policy in question """ n_steps = len(qs_pi) num_factors = len(pB) wB = utils.obj_array(num_factors) for factor, pB_f in enumerate(pB): wB[factor] = spm_wnorm(pB_f) pB_infogain = 0 for t in range(n_steps): # the 'past posterior' used for the information gain about pB here is the posterior # over expected states at the timestep previous to the one under consideration # if we're on the first timestep, we just use the latest posterior in the # entire action-perception cycle as the previous posterior if t == 0: previous_qs = qs_prev # otherwise, we use the expected states for the timestep previous to the timestep under consideration else: previous_qs = qs_pi[t - 1] # get the list of action-indices for the current timestep policy_t = policy[t, :] for factor, a_i in enumerate(policy_t): wB_factor_t = wB[factor][...,int(a_i)] * (pB[factor][...,int(a_i)] > 0).astype("float") f_idx = B_factor_list[factor] pB_infogain -= qs_pi[t][factor].dot(spm_dot(wB_factor_t, previous_qs[f_idx])) return pB_infogain def calc_inductive_cost(qs, qs_pi, I, epsilon=1e-3): """ Computes the inductive cost of a state. Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at a given timepoint. qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about states expected under the policy at time ``t`` I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. Returns ------- inductive_cost: float Cost of visited this state using backwards induction under the policy in question """ n_steps = len(qs_pi) # initialise inductive cost inductive_cost = 0 # loop over time points and modalities num_factors = len(I) for t in range(n_steps): for factor in range(num_factors): # we also assume precise beliefs here?! idx = np.argmax(qs[factor]) # m = arg max_n p_n < sup p # i.e. find first I idx equals 1 and m is the index before m = np.where(I[factor][:, idx] == 1)[0] # we might find no path to goal (i.e. when no goal specified) if len(m) > 0: m = max(m[0]-1, 0) I_m = (1-I[factor][m, :]) * np.log(epsilon) inductive_cost += I_m.dot(qs_pi[t][factor]) return inductive_cost def construct_policies(num_states, num_controls = None, policy_len=1, control_fac_idx=None): """ Generate a ``list`` of policies. The returned array ``policies`` is a ``list`` that stores one policy per entry. A particular policy (``policies[i]``) has shape ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Parameters ---------- num_states: ``list`` of ``int`` ``list`` of the dimensionalities of each hidden state factor num_controls: ``list`` of ``int``, default ``None`` ``list`` of the dimensionalities of each control state factor. If ``None``, then is automatically computed as the dimensionality of each hidden state factor that is controllable policy_len: ``int``, default 1 temporal depth ("planning horizon") of policies control_fac_idx: ``list`` of ``int`` ``list`` of indices of the hidden state factors that are controllable (i.e. those state factors ``i`` where ``num_controls[i] > 1``) Returns ---------- policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. """ num_factors = len(num_states) if control_fac_idx is None: if num_controls is not None: control_fac_idx = [f for f, n_c in enumerate(num_controls) if n_c > 1] else: control_fac_idx = list(range(num_factors)) if num_controls is None: num_controls = [num_states[c_idx] if c_idx in control_fac_idx else 1 for c_idx in range(num_factors)] x = num_controls * policy_len policies = list(itertools.product(*[list(range(i)) for i in x])) for pol_i in range(len(policies)): policies[pol_i] = np.array(policies[pol_i]).reshape(policy_len, num_factors) return policies def get_num_controls_from_policies(policies): """ Calculates the ``list`` of dimensionalities of control factors (``num_controls``) from the ``list`` or array of policies. This assumes a policy space such that for each control factor, there is at least one policy that entails taking the action with the maximum index along that control factor. Parameters ---------- policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. Returns ---------- num_controls: ``list`` of ``int`` ``list`` of the dimensionalities of each control state factor, computed here automatically from a ``list`` of policies. """ return list(np.max(np.vstack(policies), axis = 0) + 1) def sample_action(q_pi, policies, num_controls, action_selection="deterministic", alpha = 16.0): """ Computes the marginal posterior over actions and then samples an action from it, one action per control factor. Parameters ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. num_controls: ``list`` of ``int`` ``list`` of the dimensionalities of each control state factor. action_selection: ``str``, default "deterministic" String indicating whether whether the selected action is chosen as the maximum of the posterior over actions, or whether it's sampled from the posterior marginal over actions alpha: ``float``, default 16.0 Action selection precision -- the inverse temperature of the softmax that is used to scale the action marginals before sampling. This is only used if ``action_selection`` argument is "stochastic" Returns ---------- selected_policy: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor """ num_factors = len(num_controls) action_marginals = utils.obj_array_zeros(num_controls) # weight each action according to its integrated posterior probability under all policies at the current timestep for pol_idx, policy in enumerate(policies): for factor_i, action_i in enumerate(policy[0, :]): action_marginals[factor_i][action_i] += q_pi[pol_idx] action_marginals = utils.norm_dist_obj_arr(action_marginals) selected_policy = np.zeros(num_factors) for factor_i in range(num_factors): # Either you do this: if action_selection == 'deterministic': selected_policy[factor_i] = select_highest(action_marginals[factor_i]) elif action_selection == 'stochastic': log_marginal_f = spm_log_single(action_marginals[factor_i]) p_actions = softmax(log_marginal_f * alpha) selected_policy[factor_i] = utils.sample(p_actions) return selected_policy def _sample_action_test(q_pi, policies, num_controls, action_selection="deterministic", alpha = 16.0, seed=None): """ Computes the marginal posterior over actions and then samples an action from it, one action per control factor. Internal testing version that returns the marginal posterior over actions, and also has a seed argument for reproducibility. Parameters ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. num_controls: ``list`` of ``int`` ``list`` of the dimensionalities of each control state factor. action_selection: ``str``, default "deterministic" String indicating whether whether the selected action is chosen as the maximum of the posterior over actions, or whether it's sampled from the posterior marginal over actions alpha: float, default 16.0 Action selection precision -- the inverse temperature of the softmax that is used to scale the action marginals before sampling. This is only used if ``action_selection`` argument is "stochastic" seed: ``int``, default None The seed can be set to control the random sampling that occurs when ``action_selection`` is "deterministic" but there are more than one actions with the same maximum posterior probability. Returns ---------- selected_policy: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor p_actions: ``numpy.ndarray`` of dtype object Marginal posteriors over actions, after softmaxing and scaling with action precision. This distribution will be used to sample actions, if``action_selection`` argument is "stochastic" """ num_factors = len(num_controls) action_marginals = utils.obj_array_zeros(num_controls) # weight each action according to its integrated posterior probability under all policies at the current timestep for pol_idx, policy in enumerate(policies): for factor_i, action_i in enumerate(policy[0, :]): action_marginals[factor_i][action_i] += q_pi[pol_idx] action_marginals = utils.norm_dist_obj_arr(action_marginals) selected_policy = np.zeros(num_factors) p_actions = utils.obj_array_zeros(num_controls) for factor_i in range(num_factors): if action_selection == 'deterministic': p_actions[factor_i] = action_marginals[factor_i] selected_policy[factor_i] = _select_highest_test(p_actions[factor_i], seed=seed) elif action_selection == 'stochastic': log_marginal_f = spm_log_single(action_marginals[factor_i]) p_actions[factor_i] = softmax(log_marginal_f * alpha) selected_policy[factor_i] = utils.sample(p_actions[factor_i]) return selected_policy, p_actions def sample_policy(q_pi, policies, num_controls, action_selection="deterministic", alpha = 16.0): """ Samples a policy from the posterior over policies, taking the action (per control factor) entailed by the first timestep of the selected policy. Parameters ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. num_controls: ``list`` of ``int`` ``list`` of the dimensionalities of each control state factor. action_selection: string, default "deterministic" String indicating whether whether the selected policy is chosen as the maximum of the posterior over policies, or whether it's sampled from the posterior over policies. alpha: float, default 16.0 Action selection precision -- the inverse temperature of the softmax that is used to scale the policy posterior before sampling. This is only used if ``action_selection`` argument is "stochastic" Returns ---------- selected_policy: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor """ num_factors = len(num_controls) if action_selection == "deterministic": policy_idx = select_highest(q_pi) elif action_selection == "stochastic": log_qpi = spm_log_single(q_pi) p_policies = softmax(log_qpi * alpha) policy_idx = utils.sample(p_policies) selected_policy = np.zeros(num_factors) for factor_i in range(num_factors): selected_policy[factor_i] = policies[policy_idx][0, factor_i] return selected_policy def _sample_policy_test(q_pi, policies, num_controls, action_selection="deterministic", alpha = 16.0, seed=None): """ Test version of sampling a policy from the posterior over policies, taking the action (per control factor) entailed by the first timestep of the selected policy. This test version also returns the probability distribution over policies, and also has a seed argument for reproducibility. Parameters ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. policies: ``list`` of 2D ``numpy.ndarray`` ``list`` that stores each policy as a 2D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_timesteps, num_factors)`` where ``num_timesteps`` is the temporal depth of the policy and ``num_factors`` is the number of control factors. num_controls: ``list`` of ``int`` ``list`` of the dimensionalities of each control state factor. action_selection: string, default "deterministic" String indicating whether whether the selected policy is chosen as the maximum of the posterior over policies, or whether it's sampled from the posterior over policies. alpha: float, default 16.0 Action selection precision -- the inverse temperature of the softmax that is used to scale the policy posterior before sampling. This is only used if ``action_selection`` argument is "stochastic" seed: ``int``, default None The seed can be set to control the random sampling that occurs when ``action_selection`` is "deterministic" but there are more than one actions with the same maximum posterior probability. Returns ---------- selected_policy: 1D ``numpy.ndarray`` Vector containing the indices of the actions for each control factor """ num_factors = len(num_controls) if action_selection == "deterministic": p_policies = q_pi policy_idx = _select_highest_test(p_policies, seed=seed) elif action_selection == "stochastic": log_qpi = spm_log_single(q_pi) p_policies = softmax(log_qpi * alpha) policy_idx = utils.sample(p_policies) selected_policy = np.zeros(num_factors) for factor_i in range(num_factors): selected_policy[factor_i] = policies[policy_idx][0, factor_i] return selected_policy, p_policies def select_highest(options_array): """ Selects the highest value among the provided ones. If the higher value is more than once and they're closer than 1e-5, a random choice is made. Parameters ---------- options_array: ``numpy.ndarray`` The array to examine Returns ------- The highest value in the given list """ options_with_idx = np.array(list(enumerate(options_array))) same_prob = options_with_idx[ abs(options_with_idx[:, 1] - np.amax(options_with_idx[:, 1])) <= 1e-8][:, 0] if len(same_prob) > 1: # If some of the most likely actions have nearly equal probability, sample from this subset of actions, instead of using argmax return int(same_prob[np.random.choice(len(same_prob))]) return int(same_prob[0]) def _select_highest_test(options_array, seed=None): """ (Test version with seed argument for reproducibility) Selects the highest value among the provided ones. If the higher value is more than once and they're closer than 1e-8, a random choice is made. Parameters ---------- options_array: ``numpy.ndarray`` The array to examine Returns ------- The highest value in the given list """ options_with_idx = np.array(list(enumerate(options_array))) same_prob = options_with_idx[ abs(options_with_idx[:, 1] - np.amax(options_with_idx[:, 1])) <= 1e-8][:, 0] if len(same_prob) > 1: # If some of the most likely actions have nearly equal probability, sample from this subset of actions, instead of using argmax rng = np.random.default_rng(seed) return int(same_prob[rng.choice(len(same_prob))]) return int(same_prob[0]) def backwards_induction(H, B, B_factor_list, threshold, depth): """ Runs backwards induction of reaching a goal state H given a transition model B. Parameters ---------- H: ``numpy.ndarray`` of dtype object Prior over states B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. B_factor_list: ``list`` of ``list`` of ``int`` List of lists of hidden state factors each hidden state factor depends on. Each element ``B_factor_list[i]`` is a list of the factor indices that factor i's dynamics depend on. threshold: ``float`` The threshold for pruning transitions that are below a certain probability depth: ``int`` The temporal depth of the backward induction Returns ---------- I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. """ # TODO can this be done with arbitrary B_factor_list? num_factors = len(H) I = utils.obj_array(num_factors) for factor in range(num_factors): I[factor] = np.zeros((depth, H[factor].shape[0])) I[factor][0, :] = H[factor] bf = factor if B_factor_list is not None: if len(B_factor_list[factor]) > 1: raise ValueError("Backwards induction with factorized transition model not yet implemented") bf = B_factor_list[factor][0] num_states, _, _ = B[bf].shape b = np.zeros((num_states, num_states)) for state in range(num_states): for next_state in range(num_states): # If there exists an action that allows transitioning # from state to next_state, with probability larger than threshold # set b[state, next_state] to 1 if np.any(B[bf][next_state, state, :] > threshold): b[next_state, state] = 1 for i in range(1, depth): I[factor][i, :] = np.dot(b, I[factor][i-1, :]) I[factor][i, :] = np.where(I[factor][i, :] > 0.1, 1.0, 0.0) # TODO stop when all 1s? return I def calc_ambiguity_factorized(qs_pi, A, A_factor_list): """ Computes the Ambiguity term. Parameters ---------- qs_pi: ``list`` of ``numpy.ndarray`` of dtype object Predictive posterior beliefs over hidden states expected under the policy, where ``qs_pi[t]`` stores the beliefs about hidden states expected under the policy at time ``t`` A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` A_factor_list: ``list`` of ``list`` of ``int`` List of lists, where ``A_factor_list[m]`` is a list of the hidden state factor indices that observation modality with the index ``m`` depends on Returns ------- ambiguity: float """ n_steps = len(qs_pi) ambiguity = 0 # TODO check if we do this correctly! H = entropy(A) for t in range(n_steps): for m, H_m in enumerate(H): factor_idx = A_factor_list[m] # TODO why does spm_dot return an array here? # joint_x = maths.spm_cross(qs_pi[t][factor_idx]) # ambiguity += (H_m * joint_x).sum() ambiguity += np.sum(spm_dot(H_m, qs_pi[t][factor_idx])) return ambiguity def sophisticated_inference_search(qs, policies, A, B, C, A_factor_list, B_factor_list, I=None, horizon=1, policy_prune_threshold=1/16, state_prune_threshold=1/16, prune_penalty=512, gamma=16, inference_params = {"num_iter": 10, "dF": 1.0, "dF_tol": 0.001, "compute_vfe": False}, n=0): """ Performs sophisticated inference to find the optimal policy for a given generative model and prior preferences. Parameters ---------- qs: ``numpy.ndarray`` of dtype object Marginal posterior beliefs over hidden states at a given timepoint. policies: ``list`` of 1D ``numpy.ndarray`` inference_params = {"num_iter": 10, "dF": 1.0, "dF_tol": 0.001, "compute_vfe": False} ``list`` that stores each policy as a 1D array in ``policies[p_idx]``. Shape of ``policies[p_idx]`` is ``(num_factors)`` where ``num_factors`` is the number of control factors. A: ``numpy.ndarray`` of dtype object Sensory likelihood mapping or 'observation model', mapping from hidden states to observations. Each element ``A[m]`` of stores an ``numpy.ndarray`` multidimensional array for observation modality ``m``, whose entries ``A[m][i, j, k, ...]`` store the probability of observation level ``i`` given hidden state levels ``j, k, ...`` B: ``numpy.ndarray`` of dtype object Dynamics likelihood mapping or 'transition model', mapping from hidden states at ``t`` to hidden states at ``t+1``, given some control state ``u``. Each element ``B[f]`` of this object array stores a 3-D tensor for hidden state factor ``f``, whose entries ``B[f][s, v, u]`` store the probability of hidden state level ``s`` at the current time, given hidden state level ``v`` and action ``u`` at the previous time. C: ``numpy.ndarray`` of dtype object Prior over observations or 'prior preferences', storing the "value" of each outcome in terms of relative log probabilities. This is softmaxed to form a proper probability distribution before being used to compute the expected utility term of the expected free energy. A_factor_list: ``list`` of ``list`` of ``int`` List of lists, where ``A_factor_list[m]`` is a list of the hidden state factor indices that observation modality with the index ``m`` depends on B_factor_list: ``list`` of ``list`` of ``int`` List of lists of hidden state factors each hidden state factor depends on. Each element ``B_factor_list[i]`` is a list of the factor indices that factor i's dynamics depend on. I: ``numpy.ndarray`` of dtype object For each state factor, contains a 2D ``numpy.ndarray`` whose element i,j yields the probability of reaching the goal state backwards from state j after i steps. horizon: ``int`` The temporal depth of the policy policy_prune_threshold: ``float`` The threshold for pruning policies that are below a certain probability state_prune_threshold: ``float`` The threshold for pruning states in the expectation that are below a certain probability prune_penalty: ``float`` Penalty to add to the EFE when a policy is pruned gamma: ``float``, default 16.0 Prior precision over policies, scales the contribution of the expected free energy to the posterior over policies n: ``int`` timestep in the future we are calculating Returns ---------- q_pi: 1D ``numpy.ndarray`` Posterior beliefs over policies, i.e. a vector containing one posterior probability per policy. G: 1D ``numpy.ndarray`` Negative expected free energies of each policy, i.e. a vector containing one negative expected free energy per policy. """ n_policies = len(policies) G = np.zeros(n_policies) q_pi = np.zeros((n_policies, 1)) qs_pi = utils.obj_array(n_policies) qo_pi = utils.obj_array(n_policies) for idx, policy in enumerate(policies): qs_pi[idx] = get_expected_states_interactions(qs, B, B_factor_list, policy) qo_pi[idx] = get_expected_obs_factorized(qs_pi[idx], A, A_factor_list) G[idx] += calc_expected_utility(qo_pi[idx], C) G[idx] += calc_states_info_gain_factorized(A, qs_pi[idx], A_factor_list) if I is not None: G[idx] += calc_inductive_cost(qs, qs_pi[idx], I) q_pi = softmax(G * gamma) if n < horizon - 1: # ignore low probability actions in the search tree # TODO shouldnt we have to add extra penalty for branches no longer considered? # or assume these are already low EFE (high NEFE) anyway? policies_to_consider = list(np.where(q_pi >= policy_prune_threshold)[0]) for idx in range(n_policies): if idx not in policies_to_consider: G[idx] -= prune_penalty else : # average over outcomes qo_next = qo_pi[idx][0] for k in itertools.product(*[range(s.shape[0]) for s in qo_next]): prob = 1.0 for i in range(len(k)): prob *= qo_pi[idx][0][i][k[i]] # ignore low probability states in the search tree if prob < state_prune_threshold: continue qo_one_hot = utils.obj_array(len(qo_next)) for i in range(len(qo_one_hot)): qo_one_hot[i] = utils.onehot(k[i], qo_next[i].shape[0]) num_obs = [A[m].shape[0] for m in range(len(A))] num_states = [B[f].shape[0] for f in range(len(B))] A_modality_list = [] for f in range(len(B)): A_modality_list.append( [m for m in range(len(A)) if f in A_factor_list[m]] ) mb_dict = { 'A_factor_list': A_factor_list, 'A_modality_list': A_modality_list } qs_next = update_posterior_states_factorized(A, qo_one_hot, num_obs, num_states, mb_dict, qs_pi[idx][0], **inference_params) q_pi_next, G_next = sophisticated_inference_search(qs_next, policies, A, B, C, A_factor_list, B_factor_list, I, horizon, policy_prune_threshold, state_prune_threshold, prune_penalty, gamma, inference_params, n+1) G_weighted = np.dot(q_pi_next, G_next) * prob G[idx] += G_weighted q_pi = softmax(G * gamma) return q_pi, G ================================================ FILE: pymdp/legacy/default_models.py ================================================ import numpy as np from pymdp.legacy import utils, maths def generate_epistemic_MAB_model(): ''' Create the generative model matrices (A, B, C, D) for the 'epistemic multi-armed bandit', used in the `agent_demo.py` Python file and the `agent_demo.ipynb` notebook. ''' num_states = [2, 3] num_obs = [3, 3, 3] num_controls = [1, 3] A = utils.obj_array_zeros([[o] + num_states for _, o in enumerate(num_obs)]) """ MODALITY 0 -- INFORMATION-ABOUT-REWARD-STATE MODALITY """ A[0][:, :, 0] = np.ones( (num_obs[0], num_states[0]) ) / num_obs[0] A[0][:, :, 1] = np.ones( (num_obs[0], num_states[0]) ) / num_obs[0] A[0][:, :, 2] = np.array([[0.8, 0.2], [0.0, 0.0], [0.2, 0.8]]) """ MODALITY 1 -- REWARD MODALITY """ A[1][2, :, 0] = np.ones(num_states[0]) A[1][0:2, :, 1] = maths.softmax(np.eye(num_obs[1] - 1)) # bandit statistics (mapping between reward-state (first hidden state factor) and rewards (Good vs Bad)) A[1][2, :, 2] = np.ones(num_states[0]) """ MODALITY 2 -- LOCATION-OBSERVATION MODALITY """ A[2][0,:,0] = 1.0 A[2][1,:,1] = 1.0 A[2][2,:,2] = 1.0 control_fac_idx = [1] # this is the controllable control state factor, where there will be a >1-dimensional control state along this factor B = utils.obj_array_zeros([[n_s, n_s, num_controls[f]] for f, n_s in enumerate(num_states)]) """ FACTOR 0 -- REWARD STATE DYNAMICS """ p_stoch = 0.0 # we cannot influence factor zero, set up the 'default' stationary dynamics - # one state just maps to itself at the next timestep with very high probability, by default. So this means the reward state can # change from one to another with some low probability (p_stoch) B[0][0, 0, 0] = 1.0 - p_stoch B[0][1, 0, 0] = p_stoch B[0][1, 1, 0] = 1.0 - p_stoch B[0][0, 1, 0] = p_stoch """ FACTOR 1 -- CONTROLLABLE LOCATION DYNAMICS """ # setup our controllable factor. B[1] = utils.construct_controllable_B(num_states, num_controls)[1] C = utils.obj_array_zeros(num_obs) C[1][0] = 1.0 # make the observation we've a priori named `REWARD` actually desirable, by building a high prior expectation of encountering it C[1][1] = -1.0 # make the observation we've a prior named `PUN` actually aversive,by building a low prior expectation of encountering it control_fac_idx = [1] return A, B, C, control_fac_idx def generate_grid_world_transitions(action_labels, num_rows = 3, num_cols = 3): """ Wrapper code for creating the controllable transition matrix that an agent can use to navigate in a 2-dimensional grid world """ num_grid_locs = num_rows * num_cols transition_matrix = np.zeros( (num_grid_locs, num_grid_locs, len(action_labels)) ) grid = np.arange(num_grid_locs).reshape(num_rows, num_cols) it = np.nditer(grid, flags=["multi_index"]) loc_list = [] while not it.finished: loc_list.append(it.multi_index) it.iternext() for action_id, action_label in enumerate(action_labels): for curr_state, grid_location in enumerate(loc_list): curr_row, curr_col = grid_location if action_label == "LEFT": next_col = curr_col - 1 if curr_col > 0 else curr_col next_row = curr_row elif action_label == "DOWN": next_row = curr_row + 1 if curr_row < (num_rows-1) else curr_row next_col = curr_col elif action_label == "RIGHT": next_col = curr_col + 1 if curr_col < (num_cols-1) else curr_col next_row = curr_row elif action_label == "UP": next_row = curr_row - 1 if curr_row > 0 else curr_row next_col = curr_col elif action_label == "STAY": next_row, next_col = curr_row, curr_col new_location = (next_row, next_col) next_state = loc_list.index(new_location) transition_matrix[next_state, curr_state, action_id] = 1.0 return transition_matrix ================================================ FILE: pymdp/legacy/envs/__init__.py ================================================ from .env import Env from .grid_worlds import GridWorldEnv, DGridWorldEnv from .visual_foraging import SceneConstruction, RandomDotMotion, initialize_scene_construction_GM, initialize_RDM_GM from .tmaze import TMazeEnv, TMazeEnvNullOutcome ================================================ FILE: pymdp/legacy/envs/env.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ Environment Base Class __author__: Conor Heins, Alexander Tschantz, Brennan Klein """ class Env(object): """ The Env base class, loosely-inspired by the analogous ``env`` class of the OpenAIGym framework. A typical workflow is as follows: >>> my_env = MyCustomEnv() >>> initial_observation = my_env.reset(initial_state) >>> my_agent.infer_states(initial_observation) >>> my_agent.infer_policies() >>> next_action = my_agent.sample_action() >>> next_observation = my_env.step(next_action) This would be the first step of an active inference process, where a sub-class of ``Env``, ``MyCustomEnv`` is initialized, an initial observation is produced, and these observations are fed into an instance of ``Agent`` in order to produce an action, that can then be fed back into the the ``Env`` instance. """ def reset(self, state=None): """ Resets the initial state of the environment. Depending on case, it may be common to return an initial observation as well. """ raise NotImplementedError def step(self, action): """ Steps the environment forward using an action. Parameters ---------- action The action, the type/format of which depends on the implementation. Returns --------- observation Sensory observations for an agent, the type/format of which depends on the implementation of ``step`` and the observation space of the agent. """ raise NotImplementedError def render(self): """ Rendering function, that typically creates a visual representation of the state of the environment at the current timestep. """ pass def sample_action(self): pass def get_likelihood_dist(self): raise ValueError( "<{}> does not provide a model specification".format(type(self).__name__) ) def get_transition_dist(self): raise ValueError( "<{}> does not provide a model specification".format(type(self).__name__) ) def get_uniform_posterior(self): raise ValueError( "<{}> does not provide a model specification".format(type(self).__name__) ) def get_rand_likelihood_dist(self): raise ValueError( "<{}> does not provide a model specification".format(type(self).__name__) ) def get_rand_transition_dist(self): raise ValueError( "<{}> does not provide a model specification".format(type(self).__name__) ) def __str__(self): return "<{} instance>".format(type(self).__name__) ================================================ FILE: pymdp/legacy/envs/grid_worlds.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ Cube world environment __author__: Conor Heins, Alexander Tschantz, Brennan Klein """ import numpy as np import matplotlib.pyplot as plt import seaborn as sns from pymdp.legacy.envs import Env class GridWorldEnv(Env): """ 2-dimensional grid-world implementation with 5 actions (the 4 cardinal directions and staying put).""" UP = 0 RIGHT = 1 DOWN = 2 LEFT = 3 STAY = 4 CONTROL_NAMES = ["UP", "RIGHT", "DOWN", "LEFT", "STAY"] def __init__(self, shape=[2, 2], init_state=None): """ Initialization function for 2-D grid world Parameters ---------- shape: ``list`` of ``int``, where ``len(shape) == 2`` The dimensions of the grid world, stored as a list of integers, storing the discrete dimensions of the Y (vertical) and X (horizontal) spatial dimensions, respectively. init_state: ``int`` or ``None`` Initial state of the environment, i.e. the location of the agent in grid world. If not ``None``, must be a discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the initial location of the agent in grid world. If ``None``, then an initial location will be randomly sampled from the grid. """ self.shape = shape self.n_states = np.prod(shape) self.n_observations = self.n_states self.n_control = 5 self.max_y = shape[0] self.max_x = shape[1] self._build() self.set_init_state(init_state) self.last_action = None def reset(self, init_state=None): """ Reset the state of the 2-D grid world. In other words, resets the location of the agent, and wipes the current action. Parameters ---------- init_state: ``int`` or ``None`` Initial state of the environment, i.e. the location of the agent in grid world. If not ``None``, must be a discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the initial location of the agent in grid world. If ``None``, then an initial location will be randomly sampled from the grid. Returns ---------- self.state: ``int`` The current state of the environment, i.e. the location of the agent in grid world. Will be a discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the location of the agent in grid world. """ self.set_init_state(init_state) self.last_action = None return self.state def set_state(self, state): """ Sets the state of the 2-D grid world. Parameters ---------- state: ``int`` or ``None`` State of the environment, i.e. the location of the agent in grid world. If not ``None``, must be a discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the location of the agent in grid world. If ``None``, then a location will be randomly sampled from the grid. Returns ---------- self.state: ``int`` The current state of the environment, i.e. the location of the agent in grid world. Will be a discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the location of the agent in grid world. """ self.state = state return state def step(self, action): """ Updates the state of the environment, i.e. the location of the agent, using an action index that corresponds to one of the 5 possible moves. Parameters ---------- action: ``int`` Action index that refers to which of the 5 actions the agent will take. Actions are, in order: "UP", "RIGHT", "DOWN", "LEFT", "STAY". Returns ---------- state: ``int`` The new, updated state of the environment, i.e. the location of the agent in grid world after the action has been made. Will be discrete index in the range ``(0, (shape[0] * shape[1])-1)``. It is thus a "linear index" of the location of the agent in grid world. """ state = self.P[self.state][action] self.state = state self.last_action = action return state def render(self, title=None): """ Creates a heatmap showing the current position of the agent in the grid world. Parameters ---------- title: ``str`` or ``None`` Optional title for the heatmap. """ values = np.zeros(self.shape) values[self.position] = 1.0 _, ax = plt.subplots(figsize=(3, 3)) if self.shape[0] == 1 or self.shape[1] == 1: ax.imshow(values, cmap="OrRd") else: _ = sns.heatmap(values, cmap="OrRd", linewidth=2.5, cbar=False, ax=ax) plt.xticks(range(self.shape[1])) plt.yticks(range(self.shape[0])) if title is not None: plt.title(title) plt.show() def set_init_state(self, init_state=None): if init_state is not None: if init_state > (self.n_states - 1) or init_state < 0: raise ValueError("`init_state` is greater than number of states") if not isinstance(init_state, (int, float)): raise ValueError("`init_state` must be [int/float]") self.init_state = int(init_state) else: self.init_state = np.random.randint(0, self.n_states) self.state = self.init_state def _build(self): P = {} grid = np.arange(self.n_states).reshape(self.shape) it = np.nditer(grid, flags=["multi_index"]) while not it.finished: s = it.iterindex y, x = it.multi_index P[s] = {a: [] for a in range(self.n_control)} next_up = s if y == 0 else s - self.max_x next_right = s if x == (self.max_x - 1) else s + 1 next_down = s if y == (self.max_y - 1) else s + self.max_x next_left = s if x == 0 else s - 1 next_stay = s P[s][self.UP] = next_up P[s][self.RIGHT] = next_right P[s][self.DOWN] = next_down P[s][self.LEFT] = next_left P[s][self.STAY] = next_stay it.iternext() self.P = P def get_init_state_dist(self, init_state=None): init_state_dist = np.zeros(self.n_states) if init_state is None: init_state_dist[self.init_state] = 1.0 else: init_state_dist[init_state] = 1.0 def get_transition_dist(self): B = np.zeros([self.n_states, self.n_states, self.n_control]) for s in range(self.n_states): for a in range(self.n_control): ns = int(self.P[s][a]) B[ns, s, a] = 1 return B def get_likelihood_dist(self): A = np.eye(self.n_observations, self.n_states) return A def sample_action(self): return np.random.randint(self.n_control) @property def position(self): """ @TODO might be wrong w.r.t (x & y) """ return np.unravel_index(np.array(self.state), self.shape) class DGridWorldEnv(object): """ 1-dimensional grid-world implementation with 3 possible movement actions ("LEFT", "STAY", "RIGHT")""" LEFT = 0 STAY = 1 RIGHT = 2 CONTROL_NAMES = ["LEFT", "STAY", "RIGHT"] def __init__(self, shape=[2, 2], init_state=None): self.shape = shape self.n_states = np.prod(shape) self.n_observations = self.n_states self.n_control = 3 self.max_y = shape[0] self.max_x = shape[1] self._build() self.set_init_state(init_state) self.last_action = None def reset(self, init_state=None): self.set_init_state(init_state) self.last_action = None return self.state def set_state(self, state): self.state = state return state def step(self, action): state = self.P[self.state][action] self.state = state self.last_action = action return state def render(self, title=None): values = np.zeros(self.shape) values[self.position] = 1.0 _, ax = plt.subplots(figsize=(3, 3)) if self.shape[0] == 1 or self.shape[1] == 1: ax.imshow(values, cmap="OrRd") else: _ = sns.heatmap(values, cmap="OrRd", linewidth=2.5, cbar=False, ax=ax) plt.xticks(range(self.shape[1])) plt.yticks(range(self.shape[0])) if title is not None: plt.title(title) plt.show() def set_init_state(self, init_state=None): if init_state is not None: if init_state > (self.n_states - 1) or init_state < 0: raise ValueError("`init_state` is greater than number of states") if not isinstance(init_state, (int, float)): raise ValueError("`init_state` must be [int/float]") self.init_state = int(init_state) else: self.init_state = np.random.randint(0, self.n_states) self.state = self.init_state def _build(self): P = {} grid = np.arange(self.n_states).reshape(self.shape) it = np.nditer(grid, flags=["multi_index"]) while not it.finished: s = it.iterindex y, x = it.multi_index P[s] = {a: [] for a in range(self.n_control)} next_right = s if x == (self.max_x - 1) else s + 1 next_left = s if x == 0 else s - 1 next_stay = s P[s][self.LEFT] = next_left P[s][self.STAY] = next_stay P[s][self.RIGHT] = next_right it.iternext() self.P = P def get_init_state_dist(self, init_state=None): init_state_dist = np.zeros(self.n_states) if init_state is None: init_state_dist[self.init_state] = 1.0 else: init_state_dist[init_state] = 1.0 def get_transition_dist(self): B = np.zeros([self.n_states, self.n_states, self.n_control]) for s in range(self.n_states): for a in range(self.n_control): ns = int(self.P[s][a]) B[ns, s, a] = 1 return B def get_likelihood_dist(self): A = np.eye(self.n_observations, self.n_states) return A def sample_action(self): return np.random.randint(self.n_control) @property def position(self): return self.state ================================================ FILE: pymdp/legacy/envs/tmaze.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ T Maze Environment (Factorized) __author__: Conor Heins, Alexander Tschantz, Brennan Klein """ from pymdp.legacy.envs import Env from pymdp.legacy import utils, maths import numpy as np LOCATION_FACTOR_ID = 0 TRIAL_FACTOR_ID = 1 LOCATION_MODALITY_ID = 0 REWARD_MODALITY_ID = 1 CUE_MODALITY_ID = 2 REWARD_IDX = 1 LOSS_IDX = 2 class TMazeEnv(Env): """ Implementation of the 3-arm T-Maze environment """ def __init__(self, reward_probs=None): if reward_probs is None: a = 0.98 b = 1.0 - a self.reward_probs = [a, b] else: if sum(reward_probs) != 1: raise ValueError("Reward probabilities must sum to 1!") elif len(reward_probs) != 2: raise ValueError("Only two reward conditions currently supported...") else: self.reward_probs = reward_probs self.num_states = [4, 2] self.num_locations = self.num_states[LOCATION_FACTOR_ID] self.num_controls = [self.num_locations, 1] self.num_reward_conditions = self.num_states[TRIAL_FACTOR_ID] self.num_cues = self.num_reward_conditions self.num_obs = [self.num_locations, self.num_reward_conditions + 1, self.num_cues] self.num_factors = len(self.num_states) self.num_modalities = len(self.num_obs) self._transition_dist = self._construct_transition_dist() self._likelihood_dist = self._construct_likelihood_dist() self._reward_condition = None self._state = None def reset(self, state=None): if state is None: loc_state = utils.onehot(0, self.num_locations) self._reward_condition = np.random.randint(self.num_reward_conditions) # randomly select a reward condition reward_condition = utils.onehot(self._reward_condition, self.num_reward_conditions) full_state = utils.obj_array(self.num_factors) full_state[LOCATION_FACTOR_ID] = loc_state full_state[TRIAL_FACTOR_ID] = reward_condition self._state = full_state else: self._state = state return self._get_observation() def step(self, actions): prob_states = utils.obj_array(self.num_factors) for factor, state in enumerate(self._state): prob_states[factor] = self._transition_dist[factor][:, :, int(actions[factor])].dot(state) state = [utils.sample(ps_i) for ps_i in prob_states] self._state = self._construct_state(state) return self._get_observation() def render(self): pass def sample_action(self): return [np.random.randint(self.num_controls[i]) for i in range(self.num_factors)] def get_likelihood_dist(self): return self._likelihood_dist def get_transition_dist(self): return self._transition_dist def get_rand_likelihood_dist(self): pass def get_rand_transition_dist(self): pass def _get_observation(self): prob_obs = [maths.spm_dot(A_m, self._state) for A_m in self._likelihood_dist] obs = [utils.sample(po_i) for po_i in prob_obs] return obs def _construct_transition_dist(self): B_locs = np.eye(self.num_locations) B_locs = B_locs.reshape(self.num_locations, self.num_locations, 1) B_locs = np.tile(B_locs, (1, 1, self.num_locations)) B_locs = B_locs.transpose(1, 2, 0) B = utils.obj_array(self.num_factors) B[LOCATION_FACTOR_ID] = B_locs B[TRIAL_FACTOR_ID] = np.eye(self.num_reward_conditions).reshape( self.num_reward_conditions, self.num_reward_conditions, 1 ) return B def _construct_likelihood_dist(self): A = utils.obj_array_zeros([ [obs_dim] + self.num_states for obs_dim in self.num_obs] ) for loc in range(self.num_states[LOCATION_FACTOR_ID]): for reward_condition in range(self.num_states[TRIAL_FACTOR_ID]): # The case when the agent is in the centre location if loc == 0: # When in the centre location, reward observation is always 'no reward' # or the outcome with index 0 A[REWARD_MODALITY_ID][0, loc, reward_condition] = 1.0 # When in the centre location, cue is totally ambiguous with respect to the reward condition A[CUE_MODALITY_ID][:, loc, reward_condition] = 1.0 / self.num_obs[2] # The case when loc == 3, or the cue location ('bottom arm') elif loc == 3: # When in the cue location, reward observation is always 'no reward' # or the outcome with index 0 A[REWARD_MODALITY_ID][0, loc, reward_condition] = 1.0 # When in the cue location, the cue indicates the reward condition umambiguously # signals where the reward is located A[CUE_MODALITY_ID][reward_condition, loc, reward_condition] = 1.0 # The case when the agent is in one of the (potentially-) rewarding armS else: # When location is consistent with reward condition if loc == (reward_condition + 1): # Means highest probability is concentrated over reward outcome high_prob_idx = REWARD_IDX # Lower probability on loss outcome low_prob_idx = LOSS_IDX else: # Means highest probability is concentrated over loss outcome high_prob_idx = LOSS_IDX # Lower probability on reward outcome low_prob_idx = REWARD_IDX reward_probs = self.reward_probs[0] A[REWARD_MODALITY_ID][high_prob_idx, loc, reward_condition] = reward_probs reward_probs = self.reward_probs[1] A[REWARD_MODALITY_ID][low_prob_idx, loc, reward_condition] = reward_probs # Cue is ambiguous when in the reward location A[CUE_MODALITY_ID][:, loc, reward_condition] = 1.0 / self.num_obs[2] # The agent always observes its location, regardless of the reward condition A[LOCATION_MODALITY_ID][loc, loc, reward_condition] = 1.0 return A def _construct_state(self, state_tuple): state = utils.obj_array(self.num_factors) for f, ns in enumerate(self.num_states): state[f] = utils.onehot(state_tuple[f], ns) return state @property def state(self): return self._state @property def reward_condition(self): return self._reward_condition class TMazeEnvNullOutcome(Env): """ Implementation of the 3-arm T-Maze environment where there is an additional null outcome within the cue modality, so that the agent doesn't get a random cue observation, but a null one, when it visits non-cue locations""" def __init__(self, reward_probs=None): if reward_probs is None: a = 0.98 b = 1.0 - a self.reward_probs = [a, b] else: if sum(reward_probs) != 1: raise ValueError("Reward probabilities must sum to 1!") elif len(reward_probs) != 2: raise ValueError("Only two reward conditions currently supported...") else: self.reward_probs = reward_probs self.num_states = [4, 2] self.num_locations = self.num_states[LOCATION_FACTOR_ID] self.num_controls = [self.num_locations, 1] self.num_reward_conditions = self.num_states[TRIAL_FACTOR_ID] self.num_cues = self.num_reward_conditions self.num_obs = [self.num_locations, self.num_reward_conditions + 1, self.num_cues + 1] self.num_factors = len(self.num_states) self.num_modalities = len(self.num_obs) self._transition_dist = self._construct_transition_dist() self._likelihood_dist = self._construct_likelihood_dist() self._reward_condition = None self._state = None def reset(self, state=None): if state is None: loc_state = utils.onehot(0, self.num_locations) self._reward_condition = np.random.randint(self.num_reward_conditions) # randomly select a reward condition reward_condition = utils.onehot(self._reward_condition, self.num_reward_conditions) full_state = utils.obj_array(self.num_factors) full_state[LOCATION_FACTOR_ID] = loc_state full_state[TRIAL_FACTOR_ID] = reward_condition self._state = full_state else: self._state = state return self._get_observation() def step(self, actions): prob_states = utils.obj_array(self.num_factors) for factor, state in enumerate(self._state): prob_states[factor] = self._transition_dist[factor][:, :, int(actions[factor])].dot(state) state = [utils.sample(ps_i) for ps_i in prob_states] self._state = self._construct_state(state) return self._get_observation() def sample_action(self): return [np.random.randint(self.num_controls[i]) for i in range(self.num_factors)] def get_likelihood_dist(self): return self._likelihood_dist.copy() def get_transition_dist(self): return self._transition_dist.copy() def _get_observation(self): prob_obs = [maths.spm_dot(A_m, self._state) for A_m in self._likelihood_dist] obs = [utils.sample(po_i) for po_i in prob_obs] return obs def _construct_transition_dist(self): B_locs = np.eye(self.num_locations) B_locs = B_locs.reshape(self.num_locations, self.num_locations, 1) B_locs = np.tile(B_locs, (1, 1, self.num_locations)) B_locs = B_locs.transpose(1, 2, 0) B = utils.obj_array(self.num_factors) B[LOCATION_FACTOR_ID] = B_locs B[TRIAL_FACTOR_ID] = np.eye(self.num_reward_conditions).reshape( self.num_reward_conditions, self.num_reward_conditions, 1 ) return B def _construct_likelihood_dist(self): A = utils.obj_array_zeros([ [obs_dim] + self.num_states for _, obs_dim in enumerate(self.num_obs)] ) for loc in range(self.num_states[LOCATION_FACTOR_ID]): for reward_condition in range(self.num_states[TRIAL_FACTOR_ID]): if loc == 0: # the case when the agent is in the centre location # When in the centre location, reward observation is always 'no reward', or the outcome with index 0 A[REWARD_MODALITY_ID][0, loc, reward_condition] = 1.0 # When in the center location, cue observation is always 'no cue', or the outcome with index 0 A[CUE_MODALITY_ID][0, loc, reward_condition] = 1.0 # The case when loc == 3, or the cue location ('bottom arm') elif loc == 3: # When in the cue location, reward observation is always 'no reward', or the outcome with index 0 A[REWARD_MODALITY_ID][0, loc, reward_condition] = 1.0 # When in the cue location, the cue indicates the reward condition umambiguously # signals where the reward is located A[CUE_MODALITY_ID][reward_condition + 1, loc, reward_condition] = 1.0 # The case when the agent is in one of the (potentially-) rewarding arms else: # When location is consistent with reward condition if loc == (reward_condition + 1): # Means highest probability is concentrated over reward outcome high_prob_idx = REWARD_IDX # Lower probability on loss outcome low_prob_idx = LOSS_IDX # else: # Means highest probability is concentrated over loss outcome high_prob_idx = LOSS_IDX # Lower probability on reward outcome low_prob_idx = REWARD_IDX reward_probs = self.reward_probs[0] A[REWARD_MODALITY_ID][high_prob_idx, loc, reward_condition] = reward_probs reward_probs = self.reward_probs[1] A[REWARD_MODALITY_ID][low_prob_idx, loc, reward_condition] = reward_probs # When in the one of the rewarding arms, cue observation is always 'no cue', or the outcome with index 0 A[CUE_MODALITY_ID][0, loc, reward_condition] = 1.0 # The agent always observes its location, regardless of the reward condition A[LOCATION_MODALITY_ID][loc, loc, reward_condition] = 1.0 return A def _construct_state(self, state_tuple): state = utils.obj_array(self.num_factors) for f, ns in enumerate(self.num_states): state[f] = utils.onehot(state_tuple[f], ns) return state @property def state(self): return self._state @property def reward_condition(self): return self._reward_condition ================================================ FILE: pymdp/legacy/envs/visual_foraging.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ Visual Foraging Environment __author__: Conor Heins, Alexander Tschantz, Brennan Klein """ from pymdp.legacy.envs import Env from pymdp.legacy import utils, maths import numpy as np from itertools import permutations, product LOCATION_ID = 0 SCENE_ID = 1 scene_names = ["UP_RIGHT", "RIGHT_DOWN", "DOWN_LEFT", "LEFT_UP"] # possible scenes quadrant_names = ['1','2','3','4'] choice_names = ['choose_UP_RIGHT','choose_RIGHT_DOWN','choose_DOWN_LEFT', 'choose_LEFT_UP'] # possible choices config_names = list(permutations([1,2,3,4], 2)) all_scenes_all_configs = list(product(scene_names, config_names)) motion_dir = ['null','UP','RIGHT','DOWN','LEFT'] n_states = len(motion_dir) sampling_states = ['sample', 'break'] class SceneConstruction(Env): def __init__(self, starting_loc = 'start', scene_name = 'UP_RIGHT', config = "1_2"): pos1, pos2 = config.split("_") config_tuple = (int(pos1), int(pos2)) assert scene_name in scene_names, f"{scene_name} is not a possible scene! please choose from {scene_names[0]}, {scene_names[1]}, {scene_names[2]}, or {scene_names[3]}\n" assert config_tuple in config_names, f"{config} is not a possible spatial configuration! Please choose an appropriate 2x2 spatial configuration\n" self.current_location = starting_loc self.scene_name = scene_name self.config = config self._create_visual_array() print(f'Starting location is {self.current_location}, Scene is {self.scene_name}, Configuration is {self.config}\n') def step(self,action_label): if action_label == 'start': new_location = 'start' what_obs = 'null' elif action_label in quadrant_names: what_obs = self.vis_array_flattened[int(action_label)-1] new_location = action_label elif action_label in choice_names: new_location = action_label chosen_scene_name = new_location.split('_')[1] + '_' + new_location.split('_')[2] if chosen_scene_name== self.scene_name: what_obs = 'correct!' else: what_obs = 'incorrect!' self.current_location = new_location # store the new grid location return what_obs, self.current_location def reset(self): self.current_location = "start" print('Re-initialized location to Start location') what_obs = 'null' return what_obs, self.current_location def _create_visual_array(self): """ Create scene array """ vis_array_flattened = np.array(['null', 'null', 'null', 'null'],dtype="