{ "info": { "author": "Joshua Greaves, Max Robinson, Nick Walton, Jayden Milne", "author_email": "holodeck@cs.byu.edu", "bugtrack_url": null, "classifiers": [], "description": "# Holodeck\n\n[![Holodeck Video](docs/images/sunrise_Moment.jpg)](https://www.youtube.com/watch?v=_huewiGqfrs)\n\n[![Read the docs badge](https://readthedocs.org/projects/holodeck/badge/)](https://holodeck.readthedocs.io/en/develop/) ![Build Status](https://jenkins.holodeck.ml/buildStatus/icon?job=holodeck-engine%2Fdevelop)\n\nHolodeck is a high-fidelity simulator for reinforcement learning built on top of Unreal Engine 4.\n[Read the docs.](https://holodeck.readthedocs.io)\n\n## Installation\n`pip install holodeck`\n\n(requires Python 3)\n\nSee [Installation](https://holodeck.readthedocs.io/en/latest/usage/installation.html) for complete instructions (including Docker).\n\n## Features\n - 7+ rich worlds for training agents in, and many scenarios for those worlds\n - Easily extend and modify training scenarios\n - Train and control more than one agent at once\n - Simple, OpenAI Gym-like interface\n - High performance - simulation speeds of up to 2x real time are possible\n - Run headless or watch your agents learn\n\n## Usage\nHolodeck's interface is designed in the same vein as [OpenAI's Gym](https://gym.openai.com/).\nThe quickest way to get acquainted with Holodeck use is to view the example.py file.\nHere is a basic walkthrough of an example that runs a Holodeck world:\n```python\nimport holodeck\nimport numpy as np\nenv = holodeck.make(\"UrbanCity\") # Load the environment. This environment contains a UAV in a city.\nenv.reset() # You must call `.reset()` on a newly created environment before ticking/stepping it\ncommand = np.array([0, 0, 0, 100]) # The UAV takes 3 torques and a thrust as a command.\nfor i in range(30):\n state, reward, terminal, info = env.step(command) # Pass the command to the environment with step.\n # This returns the state, reward, terminal and info tuple.\n```\nThe state is a dictionary of sensor enum to sensor value.\nReward is the reward received from the previous action, and terminal indicates whether the current\nstate is a terminal state.\nInfo contains additional environment specific information.\n\nIf you want to access the data of a specific sensor, it is as simple as import Sensors and\nretrieving the correct value from the state dictionary:\n\n```python\nfrom holodeck.sensors import Sensors\nprint(state[Sensors.LOCATION_SENSOR])\n```\n\n## Control Schemes\nHolodeck supports different control schemes for different agents.\nCurrently the only agent with multiple control schemes is the UAV agent.\nThe control scheme can be switched as follows:\n```python\nfrom holodeck.agents import ControlSchemes\n\nenv.set_control_scheme('uav0', ControlSchemes.UAV_ROLL_PITCH_YAW_RATE_ALT)\n```\nFor more control schemes, check out the [docs](https://holodeck.readthedocs.io/en/latest/holodeck/agents.html)\n\n## Multi Agent-Environments\nHolodeck supports multi-agent environments. The interface is a little different, but still very easy to use.\nInstead of calling `step` which passes a command to the main agent and ticks the game, you should call `act`.\n`act` supplies a command to a specific agent, but doesn't tick the game.\nOnce all agents have received their actions, you can call `tick` to tick the game.\nAfter act, every time you call tick the same command will be supplied to the agent.\nTo change the command, just call act again.\n```python\nenv = holodeck.make('CyberPunkCity')\nenv.reset()\n\nenv.act('uav0', np.array([0, 0, 0, 100]))\nenv.act('nav0', np.array([0, 0, 0]))\nfor i in range(300):\n s = env.tick()\n```\nThe state returned from tick is also somewhat different.\nThe state is now a dictionary from agent name to sensor dictionary.\nYou can access the reward, terminal and location for the UAV as follows:\n```\ns['uav0'][Sensors.REWARD]\ns['uav0'][Sensors.TERMINAL]\ns['uav0'][Sensors.LOCATION_SENSOR]\n```\n\n\n## Documentation\n* [Agents](https://github.com/byu-pccl/holodeck/blob/master/docs/agents.md)\n* [Sensors](https://github.com/byu-pccl/holodeck/blob/master/docs/sensors.md)\n* [Environment configuration](https://github.com/byu-pccl/holodeck/blob/master/docs/worlds.md)\n* [Docs](https://holodeck.readthedocs.io/en/latest/)\n\n## Using OpenGL3 in Linux\nTo use OpenGL3 in linux, change the argument in Holodeck.make:\n```\nfrom Holodeck import Holodeck\nenv = Holodeck.make(\"MazeWorld\", Holodeck.GL_VERSION.OPENGL3)\n```\n\n## Running Holodeck on Headless Machines\nHolodeck can run on headless machines with GPU accelerated rendering. This requires no extra configuration. Holodeck will automatically detect that the machine is headless and configure it's rendering process accordingly. \n\n## Citation:\n```\n@misc{HolodeckPCCL,\n Author = {Joshua Greaves and Max Robinson and Nick Walton and Mitchell Mortensen and Robert Pottorff and Connor Christopherson and Derek Hancock and Jayden Milne David Wingate},\n Title = {Holodeck: A High Fidelity Simulator},\n Year = {2018},\n}\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/byu-pccl/holodeck", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "holodeck", "package_url": "https://pypi.org/project/holodeck/", "platform": "", "project_url": "https://pypi.org/project/holodeck/", "project_urls": { "Homepage": "https://github.com/byu-pccl/holodeck" }, "release_url": "https://pypi.org/project/holodeck/0.2.2/", "requires_dist": [ "numpy", "posix-ipc (>=1.0.0) ; platform_system == \"Linux\"", "pywin32 (>=1.0) ; platform_system == \"Windows\"" ], "requires_python": ">=3", "summary": "High fidelity simulated environments for reinforcement learning", "version": "0.2.2" }, "last_serial": 5432607, "releases": { "0.0.22": [ { "comment_text": "", "digests": { "md5": "78a621c6578b397790972b0eec6fba0b", "sha256": "a47faa6c523c26bfb2955ae18c150b834939a5a47f310d3ca33b82f2deff650f" }, "downloads": -1, "filename": "holodeck-0.0.22-py2-none-any.whl", "has_sig": false, "md5_digest": "78a621c6578b397790972b0eec6fba0b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 28884, "upload_time": "2018-10-04T21:56:14", "url": "https://files.pythonhosted.org/packages/36/06/9f8b81380c3c1313a446d7e33af2d80d480aa92470a1906158ffce70403a/holodeck-0.0.22-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a30693666b4a0719d1c0b1eb35ed4b9", "sha256": "e9d27a011da6b29cc9df2a431a3d7c346deb0a824fcdd4b6de6ffbcf0f80724d" }, "downloads": -1, "filename": "holodeck-0.0.22-py3-none-any.whl", "has_sig": false, "md5_digest": "3a30693666b4a0719d1c0b1eb35ed4b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 26614, "upload_time": "2018-10-01T19:06:45", "url": "https://files.pythonhosted.org/packages/83/ac/af4a12d83ed6a1841d6ed5895cc9b23cc7b98b699d6ab32721fb8b526752/holodeck-0.0.22-py3-none-any.whl" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "3cce2cd4fee7461ffe46ac030190b9e7", "sha256": "170fb8fb0128a44460b0295f8c1e52ab7ff543b58546766a1e1e434e4fc84a26" }, "downloads": -1, "filename": "holodeck-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3cce2cd4fee7461ffe46ac030190b9e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 28866, "upload_time": "2018-10-04T23:29:36", "url": "https://files.pythonhosted.org/packages/81/67/70e0458290e1d7ce16b5e22493752b253c3209020d31d4e77ad912cdb2e8/holodeck-0.1.0-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9971547b35d5c4476d32555a5b025465", "sha256": "0f9e381bc3f413bceff65fc7fbfd4c03cfd81297c28263d3594c07c04e2945fd" }, "downloads": -1, "filename": "holodeck-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9971547b35d5c4476d32555a5b025465", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 33157, "upload_time": "2019-05-20T17:33:08", "url": "https://files.pythonhosted.org/packages/de/16/de74d452851a5daa62dd87a193a11602af089f3665d71e34032f5c95e2e8/holodeck-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0040a33b860c5df8f840d4495276691", "sha256": "53770940678438f11737b64ccef902fa76a5c86244db3cbd0386fbb70233cbe0" }, "downloads": -1, "filename": "holodeck-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f0040a33b860c5df8f840d4495276691", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 30408, "upload_time": "2019-05-20T17:33:10", "url": "https://files.pythonhosted.org/packages/ac/4b/60de70b48358b2ccc6d2cca9f516eda08c519bacfffe0bdd106c63da315e/holodeck-0.2.1.tar.gz" } ], "0.2.1rc1": [ { "comment_text": "", "digests": { "md5": "8d422454ec48544ac7c55f2ea5bbe20e", "sha256": "69070affcd24def31b395ef77da7a7f7202b058af04c02a27fdf56e7eefec67f" }, "downloads": -1, "filename": "holodeck-0.2.1rc1-py3-none-any.whl", "has_sig": false, "md5_digest": "8d422454ec48544ac7c55f2ea5bbe20e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 32840, "upload_time": "2019-05-17T19:04:11", "url": "https://files.pythonhosted.org/packages/56/c7/907a2295965a7a7941494a1fe6015a4216ca448a540c644277963d2d4f54/holodeck-0.2.1rc1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "268d40ab95908ff898204d883ef1d3c5", "sha256": "b8992915c9e54d6f65bb2315208ab61824cd4d67df54f2d6b432e91c2140384c" }, "downloads": -1, "filename": "holodeck-0.2.1rc1.tar.gz", "has_sig": false, "md5_digest": "268d40ab95908ff898204d883ef1d3c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 30053, "upload_time": "2019-05-17T19:04:13", "url": "https://files.pythonhosted.org/packages/d1/08/bcbe986db3579aceb27558c78a8cfb320b709376ddb8cebd40064826af71/holodeck-0.2.1rc1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c4c80a5fc929be956d83c8df58191573", "sha256": "44d687211a08a27304a20f5a0e6c0c36a46f88ca7fc7006a89207e507bae0dbc" }, "downloads": -1, "filename": "holodeck-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c4c80a5fc929be956d83c8df58191573", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 33940, "upload_time": "2019-06-21T19:57:24", "url": "https://files.pythonhosted.org/packages/f6/36/eb74b3c2331e5b4398fe2f92e17674a0b7fa3c26fb7122f7fd6736d620ba/holodeck-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d59bc1bd5506914a598d63b3b17340d", "sha256": "602052639b97448fbe23688c1842dd76502d34b8345fc032e2b2b29a08939498" }, "downloads": -1, "filename": "holodeck-0.2.2.tar.gz", "has_sig": false, "md5_digest": "2d59bc1bd5506914a598d63b3b17340d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 30304, "upload_time": "2019-06-21T19:57:25", "url": "https://files.pythonhosted.org/packages/fa/17/91fef9411cf2ac9f31bd5c6ddde4d117844b75ff64740eeb4542f3413b05/holodeck-0.2.2.tar.gz" } ], "0.2.2.dev0": [ { "comment_text": "", "digests": { "md5": "4e242afa86b521cf711dec4184bc15c4", "sha256": "cc39853d4d1321ca02d86f7d567b61ec7b51d6c5817414cb54e1c3f15113c3f1" }, "downloads": -1, "filename": "holodeck-0.2.2.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "4e242afa86b521cf711dec4184bc15c4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 33996, "upload_time": "2019-06-20T19:32:32", "url": "https://files.pythonhosted.org/packages/a1/93/7baac75f384daeceadab0f3adb59e4126109c6ccad23b1cb4c4e2332c606/holodeck-0.2.2.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e17675bdb04608eeb2335c7ff790446d", "sha256": "7171b253e0a1e16d39a889b4f7e0d3871b0a1bca9afac6ffe7d21dfa794f15ea" }, "downloads": -1, "filename": "holodeck-0.2.2.dev0.tar.gz", "has_sig": false, "md5_digest": "e17675bdb04608eeb2335c7ff790446d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 30297, "upload_time": "2019-06-20T19:32:34", "url": "https://files.pythonhosted.org/packages/77/8c/9b4e1a0db1f460c1d3a115fa225d65e0bebdc71a5a12dac2b49c103be25c/holodeck-0.2.2.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c4c80a5fc929be956d83c8df58191573", "sha256": "44d687211a08a27304a20f5a0e6c0c36a46f88ca7fc7006a89207e507bae0dbc" }, "downloads": -1, "filename": "holodeck-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c4c80a5fc929be956d83c8df58191573", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 33940, "upload_time": "2019-06-21T19:57:24", "url": "https://files.pythonhosted.org/packages/f6/36/eb74b3c2331e5b4398fe2f92e17674a0b7fa3c26fb7122f7fd6736d620ba/holodeck-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d59bc1bd5506914a598d63b3b17340d", "sha256": "602052639b97448fbe23688c1842dd76502d34b8345fc032e2b2b29a08939498" }, "downloads": -1, "filename": "holodeck-0.2.2.tar.gz", "has_sig": false, "md5_digest": "2d59bc1bd5506914a598d63b3b17340d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 30304, "upload_time": "2019-06-21T19:57:25", "url": "https://files.pythonhosted.org/packages/fa/17/91fef9411cf2ac9f31bd5c6ddde4d117844b75ff64740eeb4542f3413b05/holodeck-0.2.2.tar.gz" } ] }