# ML-Agents ## Installation https://github.com/Unity-Technologies/ml-agents/blob/develop/docs/Installation.md ``` conda create -n mlagents python=3.8 conda activate mlagents pip install mlagents==0.30.0 pip install protobuf==3.20.0 ``` test if installation success: ``` mlagents-learn --help ``` ## Run Train https://github.com/Unity-Technologies/ml-agents/blob/develop/docs/Getting-Started.md Install Unity version 2021.3.11f1 first. ``` git clone --branch release_20 https://github.com/Unity-Technologies/ml-agents.git cd ml-agents (open scene at ml-agents/Project/Assets/ML-Agents/Examples/3DBall/Scenes in Unity) mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun mlagents-learn config/ppo/FoodCollector.yaml --run-id=firstFoodCollector ``` ## Install Environment Executable https://github.com/Unity-Technologies/ml-agents/blob/develop/docs/Learning-Environment-Executable.md ![](https://hackmd.io/_uploads/rkvjv5j6n.png) Click build. And save to folder named "ball_exe". ![](https://hackmd.io/_uploads/HJv5O9j6n.png) Then you can run train: ``` mlagents-learn config/ppo/3DBall.yaml --env=ball_exe --run-id=firstRunExe ``` ## Python Gym Interface https://github.com/Unity-Technologies/ml-agents/blob/develop/docs/Python-Gym-API.md Unity ML-Agents Gym Wrapper only support an environment with a **single agent**. Use 3DBall as example, there are 12 agents by default. You have to delete other 11 agents, and build it to executable following above procedure. I build it and save to folder named “single_ball_exe”. * For Windows: * Have to provide folder name in UnityEnvironment. ``` import gym from mlagents_envs.environment import UnityEnvironment from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper def main(): unity_env = UnityEnvironment("single_ball_exe") env = UnityToGymWrapper(unity_env) obs = env.reset() print(obs) print(env.action_space) if __name__ == '__main__': main() ``` ![](https://hackmd.io/_uploads/Skk3osiTn.png) * For Ubuntu: * Have to provide file name without .x86_64 in UnityEnvironment. * Dedicated Server Build: * ![](https://hackmd.io/_uploads/rJRk3O262.png) ``` import gym from mlagents_envs.environment import UnityEnvironment from mlagents_envs.envs.unity_gym_env import UnityToGymWrapper def main(): unity_env = UnityEnvironment("3dball_single_server/3dball") env = UnityToGymWrapper(unity_env) obs = env.reset() print(obs) print(env.action_space) if __name__ == '__main__': main() ``` ![](https://hackmd.io/_uploads/Bk6RDunan.png) ## Create Container ``` podman run -d -v $PWD:/root -w /root --name mlagents -it ct3_release tmux podman exec -it mlagents tmux a (Install Anaconda:) wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh chmod 777 Anaconda3-2022.05-Linux-x86_64.sh ./Anaconda3-2022.05-Linux-x86_64.sh (Install mlagents:) conda create -n mlagents python=3.8 conda activate mlagents pip install mlagents==0.30.0 pip install protobuf==3.20.0 (Run test:) python test_env.py ``` ## Ubuntu Troubleshoot Problem: * no usable version of libssl was found. Solve: https://forum.unity.com/threads/workaround-for-libssl-issue-on-ubuntu-22-04.1271405/ ``` sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb ```