Benchmark for PHYsical REasoning
Project description
PHYRE is a benchmark for physical reasoning.
It provides a set of physics puzzles in a simulated 2D world. Each puzzle has a goal state (e.g., make the green ball touch the blue wall) and an initial state in which the goal is not satisfied (see the figure below). A puzzle can be solved by placing one or more new bodies in the environment such that when the physical simulation is run the goal is satisfied. An agent playing this game must solve previously unseen puzzles in as few attempts as possible.
How to use the PHYRE
Phyre framework could be used for several tasks related to physical reasoning.
- As a benchmark: Phyre allows to evaluate different reasoning agents on a predefined set of tasks and complexity tiers. You can explore the tasks and try to solve them using the demo.
- As a task building platform: Phyre contains a framework to create new levels with goals and objects from a way richer set that one used in the standard tiers. This could be used to study specific types of generalization for reasoning agents, performance or forward modelling, or something else, e.g., enable reasoning about physics in natural language. See this doc for details.
- As an interface to a fast physical engine: Phyre uses Box2d engine under the hood. In the benchmark we hide all details of the simulation. See this doc for details on low level interface.
Getting started
Installation
The simplest way to install PHYRE is via pip. As PHYRE requires Python version 3.6, we recommend installing PHYRE inside a virtual environment, e.g. using Conda.
We provide PHYRE as a pip package for both Linux and Mac OS.
conda create -n phyre python=3.6 && conda activate phyre
pip install phyre
To check that the installation was successful, run python -m phyre.server
and open http://localhost:30303. That should start a local demo server.
For instructions on building PHYRE from source and installing in a Docker container, see INSTALLATION.
Notebooks
We provide jupyter notebooks that show how to use PHYRE API (open in Colab) to run simulations and evaluate a random agent and how to use simulation cache (open in Colab) to train agents faster.
Training an agent
We provide a set of baseline agents that are described in the paper.
In order to run them, you need to install additional python dependencies with pip install -r requirements.agents.txt
.
All the agents are located in agents/
folder. The entry point is train.py
that will train an agent on specified eval setup with a specified fold.
E.g., the following command will train a memoization agent:
python agents/train.py \
--output-dir=results/ball_cross_template/0 \
--eval-setup-name=ball_cross_template \
--fold-id=0 \
--mem-rerank-size 100 \
--agent-type=memoize
File run_experiment.py
contains groups of experiments, e.g, sweeping over number of update for DQN-O or training agents on all seeds and eval setups. And train_all_baseline.sh
starts experiments to train all baseline algorithms in the paper.
License
PHYRE is released under the Apache license. See LICENSE for additional details.
Citation
If you use PHYRE in your experiments, please cite it:
@article{bakhtin2019phyre,
title={PHYRE: A New Benchmark for Physical Reasoning},
author={Anton Bakhtin and Laurens van der Maaten and Justin Johnson and Laura Gustafson and Ross Girshick},
year={2019},
journal={arXiv:1908.05656}
}
Related projects
Virtual Tools is a similar project aiming to research the structure necessary to capture human-like reasoning in these sorts of physics puzzles.
ESPRIT is a framework based on PHYRE that connects physical reasoning and natural language explanations.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for phyre-0.2.2-cp39-none-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf865c34aa8252e4d9445ab6440439651c308fe12999217c5e16f048198dd56f |
|
MD5 | 490184321810b9e0cdcaf6f804d935c8 |
|
BLAKE2b-256 | 3f63132de8a84bd033ac863f8faf27cf5cede4e47b5f76cbc766bffa51e55ee0 |
Hashes for phyre-0.2.2-cp38-none-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b7eccef5d807b97ca428f2ebac3b7949f2fcddc2f002dba15f6f340e08ea747 |
|
MD5 | bcd4779de4d6a3c76283b9f7dd16ee1a |
|
BLAKE2b-256 | 8367f878f0e9293db59e3a7daeea995a5dbba5fea88d2e8596677eeffdc167b4 |
Hashes for phyre-0.2.2-cp37-none-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c4abb55db29e11b5ee6d62cba3c5043a192c8a279998781e8a12bb443e71be6 |
|
MD5 | f1398644ff192910cff43ffc12088c3e |
|
BLAKE2b-256 | 77b7a8f0e676dd89bf3a1d5ca1bd7d3bf99985e109c7f4a47bd34f8bb6fdd54c |
Hashes for phyre-0.2.2-cp36-none-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afd9596a77cf5aaf91f5bb1f4c7a00be0d3c5f2e50d2d3b4bb4031cc90d6638d |
|
MD5 | ae7fb69f490a97e8d9955fffaa0551e0 |
|
BLAKE2b-256 | 76ebb5770342caff8ca1a549684e1b0153072de37731c9e5a3a19985baa8dc6b |
Hashes for phyre-0.2.2-cp36-none-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 405ebe93e2791364307c9e06ab32e13bf9748743eae6d0aab082de5ae9408947 |
|
MD5 | 68d2ae6eb33e01928133241e34a121d1 |
|
BLAKE2b-256 | b8cd26c27e9fa519646b66a21d5f9377fac0528b1cfbeff003585c75b1e3fa29 |