Code Monkey home page Code Monkey logo

modular-rl's Introduction

One Policy to Control Them All:
Shared Modular Policies for Agent-Agnostic Control

ICML 2020

Wenlong Huang1, Igor Mordatch2, Deepak Pathak3 4

1University of California, Berkeley, 2Google Brain, 3Facebook AI Research, 4Carnegie Mellon University

This is a PyTorch-based implementation of our Shared Modular Policies. We take a step beyond the laborious training process of the conventional single-agent RL policy by tackling the possibility of learning general-purpose controllers for diverse robotic systems. Our approach trains a single policy for a wide variety of agents which can then generalize to unseen agent shapes at test-time without any further training.

If you find this work useful in your research, please cite using the following BibTeX:

@inproceedings{huang2020smp,
  Author = {Huang, Wenlong and
  Mordatch, Igor and Pathak, Deepak},
  Title = {One Policy to Control Them All:
  Shared Modular Policies for Agent-Agnostic Control},
  Booktitle = {ICML},
  Year = {2020}
  }

Setup

Requirements

  • Python-3.6
  • PyTorch-1.1.0
  • CUDA-9.0
  • CUDNN-7.6
  • MuJoCo-200: download binaries, put license file inside, and add path to .bashrc

Setting up repository

git clone https://github.com/huangwl18/modular-rl.git
cd modular-rl/
python3.6 -m venv mrEnv
source $PWD/mrEnv/bin/activate

Installing Dependencies

pip install --upgrade pip
pip install -r requirements.txt

Running Code

Flags and Parameters Description
--morphologies <List of STRING> Find existing environments matching each keyword for training (e.g. walker, hopper, humanoid, and cheetah; see examples below)
--custom_xml <PATH> Path to custom xml file for training the modular policy.
When <PATH> is a file, train with that xml morphology only.
When <PATH> is a directory, train on all xml morphologies found in the directory.
--td Enable top-down message passing (pass --td --bu for both-way message passing)
--bu Enable bottom-up message passing (pass --td --bu for both-way message passing)
--expID <INT> Experiment ID for creating saving directory
--seed <INT> (Optional) Seed for Gym, PyTorch and Numpy

Train with existing environment

  • Train both-way SMP on Walker++ (12 variants of walker):
python main.py --expID 001 --td --bu --morphologies walker
  • Train both-way SMP on Humanoid++ (8 variants of 2d humanoid):
python main.py --expID 002 --td --bu --morphologies humanoid
  • Train both-way SMP on Cheetah++ (15 variants of cheetah):
python main.py --expID 003 --td --bu --morphologies cheetah
  • Train both-way SMP on Hopper++ (3 variants of hopper):
python main.py --expID 004 --td --bu --morphologies hopper
  • To train both-way SMP for only one environment (e.g. walker_7_main), specify the full name of the environment without the .xml suffix:
python main.py --expID 005 --td --bu --morphologies walker_7_main

To run with one-way message passing, disable --td for bottom-up-only message passing or disable --bu for top-down-only message passing. To run without any message passing, disable both --td and --bu.

Train with custom environment

  • Train both-way SMP for only one environment:
python main.py --expID 006 --td --bu --custom_xml <PATH_TO_XML_FILE>
  • Train both-way SMP for multiple environments (xml files must be in the same directory):
python main.py --expID 007 --td --bu --custom_xml <PATH_TO_XML_DIR>

Note that the current implementation assumes all custom MuJoCo agents are 2D planar and contain only one body tag with name torso attached to worldbody.

Visualization

  • To visualize all walker environments with the both-way SMP model from experiment expID 001:
python visualize.py --expID 001 --td --bu --morphologies walker
  • To visualize only walker_7_main environment with the both-way SMP model from experiment expID 001:
python visualize.py --expID 001 --td --bu --morphologies walker_7_main

Provided Environments

Walker

walker_2_main

walker_3_main

walker_4_main

walker_5_main

walker_6_main

walker_7_main

walker_2_flipped

walker_3_flipped

walker_4_flipped

walker_5_flipped

walker_6_flipped

walker_7_flipped
2D Humanoid

humanoid_2d_7_left_arm

humanoid_2d_7_left_leg

humanoid_2d_7_lower_arms

humanoid_2d_7_right_arm

humanoid_2d_7_right_leg

humanoid_2d_8_left_knee

humanoid_2d_8_right_knee

humanoid_2d_9_full
Cheetah

cheetah_2_back

cheetah_2_front

cheetah_3_back

cheetah_3_balanced

cheetah_3_front

cheetah_4_allback

cheetah_4_allfront

cheetah_4_back

cheetah_4_front

cheetah_5_back

cheetah_5_balanced

cheetah_5_front

cheetah_6_back

cheetah_6_front

cheetah_7_full
Hopper

hopper_3

hopper_4

hopper_5

Note that each walker agent has an identical instance of itself called flipped, for which SMP always flips the torso message passed to both legs (e.g. the message that is passed to the left leg in the main instance is now passed the right leg).

For the results reported in the paper, the following agents are in the held-out set for the corresponding experiments:

  • Walker++: walker_5_main, walker_6_flipped
  • Humanoid++: humanoid_2d_7_right_arm, humanoid_2d_7_lower_arms
  • Cheetah++: cheetah_4_front, cheetah_5_balanced, cheetah_6_front
  • Walker-Hopper++: walker_5_main, walker_6_flipped, hopper_3
  • Walker-Hopper-Humanoid++: walker_5_main, walker_6_flipped, hopper_3, humanoid_2d_7_right_arm, humanoid_2d_7_lower_arms

All other agents in the corresponding experiments are used for training.

Acknowledgement

The TD3 code is based on this open-source implementation. The code for Dynamic Graph Neural Networks is adapted from Modular Assemblies (Pathak*, Lu* et al., NeurIPS 2019).

modular-rl's People

Contributors

huangwl18 avatar pathak22 avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.