{"id":13840759,"url":"https://github.com/schroederdewitt/multiagent_mujoco","last_synced_at":"2025-07-11T09:33:06.374Z","repository":{"id":37815259,"uuid":"233064752","full_name":"schroederdewitt/multiagent_mujoco","owner":"schroederdewitt","description":"Benchmark for Continuous Multi-Agent Robotic Control, based on OpenAI's Mujoco Gym environments.","archived":false,"fork":false,"pushed_at":"2023-03-16T20:37:08.000Z","size":2137,"stargazers_count":320,"open_issues_count":6,"forks_count":34,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-08-05T17:25:41.497Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schroederdewitt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-01-10T14:32:01.000Z","updated_at":"2024-07-24T06:38:06.000Z","dependencies_parsed_at":"2024-04-12T17:38:25.593Z","dependency_job_id":"ab906382-adb5-49ef-aef0-c04c00573d83","html_url":"https://github.com/schroederdewitt/multiagent_mujoco","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schroederdewitt%2Fmultiagent_mujoco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schroederdewitt%2Fmultiagent_mujoco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schroederdewitt%2Fmultiagent_mujoco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schroederdewitt%2Fmultiagent_mujoco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schroederdewitt","download_url":"https://codeload.github.com/schroederdewitt/multiagent_mujoco/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225712701,"owners_count":17512461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T17:00:55.194Z","updated_at":"2024-11-21T10:30:44.193Z","avatar_url":"https://github.com/schroederdewitt.png","language":"Python","funding_links":[],"categories":["[MuJoCo](https://mujoco.org)"],"sub_categories":[],"readme":"# Maintained Fork\n\nThe maintained version of these environments, which include numerous fixes, comprehensive documentation, support for installation via pip, and support for current versions of Python are available in Gymnasium Robotics (https://github.com/Farama-Foundation/Gymnasium-Robotics, https://robotics.farama.org/)\n\n# Multi-Agent Mujoco\n\nBenchmark for Continuous Multi-Agent Robotic Control, based on OpenAI's Mujoco Gym environments.\n\n\u003cimg src=\"https://github.com/schroederdewitt/multiagent_mujoco/blob/master/docs/images/mamujoco.jpg\" width=\"900\" height=\"384\"\u003e\n\nDescribed in the paper [Deep Multi-Agent Reinforcement Learning for Decentralized Continuous Cooperative Control](https://arxiv.org/abs/2003.06709) by Christian Schroeder de Witt, Bei Peng, Pierre-Alexandre Kamienny, Philip Torr, Wendelin Böhmer and Shimon Whiteson, Torr Vision Group and Whiteson Research Lab, University of Oxford, 2020\n\n# Installation\n\n**Note: You require OpenAI Gym Version 0.10.8 and Mujoco 2.1**\n\nSimply clone this repository and put ./src on your PYTHONPATH.\nTo render, please also set the following environment variables:\n\n```\nLD_LIBRARY_PATH=${HOME}/.mujoco/mujoco210/bin;\nLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so\n```\n\n# Example\n\n```python\nfrom multiagent_mujoco.mujoco_multi import MujocoMulti\nimport numpy as np\nimport time\n\n\ndef main():\n    env_args = {\"scenario\": \"HalfCheetah-v2\",\n                  \"agent_conf\": \"2x3\",\n                  \"agent_obsk\": 0,\n                  \"episode_limit\": 1000}\n    env = MujocoMulti(env_args=env_args)\n    env_info = env.get_env_info()\n\n    n_actions = env_info[\"n_actions\"]\n    n_agents = env_info[\"n_agents\"]\n    n_episodes = 10\n\n    for e in range(n_episodes):\n        env.reset()\n        terminated = False\n        episode_reward = 0\n\n        while not terminated:\n            obs = env.get_obs()\n            state = env.get_state()\n\n            actions = []\n            for agent_id in range(n_agents):\n                avail_actions = env.get_avail_agent_actions(agent_id)\n                avail_actions_ind = np.nonzero(avail_actions)[0]\n                action = np.random.uniform(-1.0, 1.0, n_actions)\n                actions.append(action)\n\n            reward, terminated, _ = env.step(actions)\n            episode_reward += reward\n\n            time.sleep(0.1)\n            env.render()\n\n\n        print(\"Total reward in episode {} = {}\".format(e, episode_reward))\n\n    env.close()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n# Documentation\n\n## Environment config\n\n* *env_args.scenario*: Determines the underlying single-agent OpenAI Gym Mujoco environment\n* *env_args.agent_conf*: Determines the partitioning (see in Environment section below), fixed by n_agents x motors_per_agent\n* *env_args.agent_obsk*: Determines up to which connection distance k agents will be able to form observations (0: agents can only observe the state of their own joints and bodies, 1: agents can observe their immediate neighbour's joints and bodies).\n* *env_args.k_categories*: A string describing which properties are observable at which connection distance as comma-separated lists separated by vertical bars. For example, \"qpos,qvel,cfrc_ext,cvel,cinert,qfrc_actuator|qpos\" means k=0 can observe properties qpos,qvel,cfrc_ext,cvel,cinert,qfrc_actuator and k\u003e=1 (i.e. immediate and more distant neighbours) can be observed through property qpos. Note: If a property requested is not available for a given agent, it will be silently omitted.\n* *env_args.global_categories*: Same as env_args.k_categories, but concerns some global properties that are otherwise not observed by any of the agents. Switched off by default (i.e. agents have no non-local observations).\n\n# Extending Tasks\n\nTasks can be trivially extended by adding entries in src/multiagent_mujoco/obsk.py.\n\n## Task configuration\n\nUnless stated otherwise, all the parameters given below are to be used with ```.multiagent_mujoco.MujocoMulti```.\n\n### 2-Agent Ant\n\n```python\nenv_args.scenario=\"Ant-v2\"\nenv_args.agent_conf=\"2x4\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent Ant Diag\n\n```python\nenv_args.scenario=\"Ant-v2\"\nenv_args.agent_conf=\"2x4d\"\nenv_args.agent_obsk=1\n```\n\n### 4-Agent Ant\n\n```python\nenv_args.scenario=\"Ant-v2\"\nenv_args.agent_conf=\"4x2\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent HalfCheetah\n\n```python\nenv_args.scenario=\"HalfCheetah-v2\"\nenv_args.agent_conf=\"2x3\"\nenv_args.agent_obsk=1\n```\n\n### 6-Agent HalfCheetah\n\n```python\nenv_args.scenario=\"HalfCheetah-v2\"\nenv_args.agent_conf=\"6x1\"\nenv_args.agent_obsk=1\n```\n\n### 3-Agent Hopper\n\n```python\nenv_args.scenario=\"Hopper-v2\"\nenv_args.agent_conf=\"3x1\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent Humanoid\n\n```python\nenv_args.scenario=\"Humanoid-v2\"\nenv_args.agent_conf=\"9|8\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent HumanoidStandup\n\n```python\nenv_args.scenario=\"HumanoidStandup-v2\"\nenv_args.agent_conf=\"9|8\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent Reacher\n\n```python\nenv_args.scenario=\"Reacher-v2\"\nenv_args.agent_conf=\"2x1\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent Swimmer\n\n```python\nenv_args.scenario=\"Swimmer-v2\"\nenv_args.agent_conf=\"2x1\"\nenv_args.agent_obsk=1\n```\n\n### 2-Agent Walker\n\n```python\nenv_args.scenario=\"Walker2d-v2\"\nenv_args.agent_conf=\"2x3\"\nenv_args.agent_obsk=1\n```\n\n\n### Manyagent Swimmer\n\n```python\nenv_args.scenario=\"manyagent_swimmer\"\nenv_args.agent_conf=\"10x2\"\nenv_args.agent_obsk=1\n```\n\n\n### Manyagent Ant\n\n```python\nenv_args.scenario=\"manyagent_ant\"\nenv_args.agent_conf=\"2x3\"\nenv_args.agent_obsk=1\n```\n\n### Coupled HalfCheetah (NEW!)\n\n```python\nenv_args.scenario=\"coupled_half_cheetah\"\nenv_args.agent_conf=\"1p1\"\nenv_args.agent_obsk=1\n```\n\n```CoupledHalfCheetah``` features two separate HalfCheetah agents coupled by an elastic tendon. You can add more tendons or novel coupled scenarios by\n\n1. Creating a new Gym environment to define the reward function of the coupled scenario (consult ```coupled_half_cheetah.py```)\n2. Create a new Mujoco environment XML file to insert agents and tendons (see ```assets/coupled_half_cheetah.xml```)\n3. Register your env as a scenario in the MujocoMulti environment (only if you need special default observability params)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschroederdewitt%2Fmultiagent_mujoco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschroederdewitt%2Fmultiagent_mujoco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschroederdewitt%2Fmultiagent_mujoco/lists"}