Reinforcement Learning
ml-agents
TensorBoard
ONNX
Pyramids
deep-reinforcement-learning
ML-Agents-Pyramids
Instructions to use AnnaMats/ppo-Pyramids-Training with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ml-agents
How to use AnnaMats/ppo-Pyramids-Training with ml-agents:
mlagents-load-from-hf --repo-id="AnnaMats/ppo-Pyramids-Training" --local-dir="./download: string[]s"
- Notebooks
- Google Colab
- Kaggle
| using System.Collections.Generic; | |
| using UnityEngine; | |
| using System.Linq; | |
| using Unity.MLAgents; | |
| using UnityEngine.Serialization; | |
| public class GridArea : MonoBehaviour | |
| { | |
| [] | |
| public List<GameObject> actorObjs; | |
| [] | |
| public int[] players; | |
| public GameObject trueAgent; | |
| Camera m_AgentCam; | |
| [] public GameObject GreenPlusPrefab; | |
| [] public GameObject RedExPrefab; | |
| GameObject[] m_Objects; | |
| public int numberOfPlus = 1; | |
| public int numberOfEx = 1; | |
| GameObject m_Plane; | |
| GameObject m_Sn; | |
| GameObject m_Ss; | |
| GameObject m_Se; | |
| GameObject m_Sw; | |
| Vector3 m_InitialPosition; | |
| EnvironmentParameters m_ResetParams; | |
| public void Start() | |
| { | |
| m_ResetParams = Academy.Instance.EnvironmentParameters; | |
| m_Objects = new[] { GreenPlusPrefab, RedExPrefab }; | |
| m_AgentCam = transform.Find("agentCam").GetComponent<Camera>(); | |
| actorObjs = new List<GameObject>(); | |
| var sceneTransform = transform.Find("scene"); | |
| m_Plane = sceneTransform.Find("Plane").gameObject; | |
| m_Sn = sceneTransform.Find("sN").gameObject; | |
| m_Ss = sceneTransform.Find("sS").gameObject; | |
| m_Sw = sceneTransform.Find("sW").gameObject; | |
| m_Se = sceneTransform.Find("sE").gameObject; | |
| m_InitialPosition = transform.position; | |
| } | |
| void SetEnvironment() | |
| { | |
| transform.position = m_InitialPosition * (m_ResetParams.GetWithDefault("gridSize", 5f) + 1); | |
| var playersList = new List<int>(); | |
| for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numPlusGoals", numberOfPlus); i++) | |
| { | |
| playersList.Add(0); | |
| } | |
| for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numExGoals", numberOfEx); i++) | |
| { | |
| playersList.Add(1); | |
| } | |
| players = playersList.ToArray(); | |
| var gridSize = (int)m_ResetParams.GetWithDefault("gridSize", 5f); | |
| m_Plane.transform.localScale = new Vector3(gridSize / 10.0f, 1f, gridSize / 10.0f); | |
| m_Plane.transform.localPosition = new Vector3((gridSize - 1) / 2f, -0.5f, (gridSize - 1) / 2f); | |
| m_Sn.transform.localScale = new Vector3(1, 1, gridSize + 2); | |
| m_Ss.transform.localScale = new Vector3(1, 1, gridSize + 2); | |
| m_Sn.transform.localPosition = new Vector3((gridSize - 1) / 2f, 0.0f, gridSize); | |
| m_Ss.transform.localPosition = new Vector3((gridSize - 1) / 2f, 0.0f, -1); | |
| m_Se.transform.localScale = new Vector3(1, 1, gridSize + 2); | |
| m_Sw.transform.localScale = new Vector3(1, 1, gridSize + 2); | |
| m_Se.transform.localPosition = new Vector3(gridSize, 0.0f, (gridSize - 1) / 2f); | |
| m_Sw.transform.localPosition = new Vector3(-1, 0.0f, (gridSize - 1) / 2f); | |
| m_AgentCam.orthographicSize = (gridSize) / 2f; | |
| m_AgentCam.transform.localPosition = new Vector3((gridSize - 1) / 2f, gridSize + 1f, (gridSize - 1) / 2f); | |
| } | |
| public void AreaReset() | |
| { | |
| var gridSize = (int)m_ResetParams.GetWithDefault("gridSize", 5f); | |
| foreach (var actor in actorObjs) | |
| { | |
| DestroyImmediate(actor); | |
| } | |
| SetEnvironment(); | |
| actorObjs.Clear(); | |
| var numbers = new HashSet<int>(); | |
| while (numbers.Count < players.Length + 1) | |
| { | |
| numbers.Add(Random.Range(0, gridSize * gridSize)); | |
| } | |
| var numbersA = numbers.ToArray(); | |
| for (var i = 0; i < players.Length; i++) | |
| { | |
| var x = (numbersA[i]) / gridSize; | |
| var y = (numbersA[i]) % gridSize; | |
| var actorObj = Instantiate(m_Objects[players[i]], transform); | |
| actorObj.transform.localPosition = new Vector3(x, -0.25f, y); | |
| actorObjs.Add(actorObj); | |
| } | |
| var xA = (numbersA[players.Length]) / gridSize; | |
| var yA = (numbersA[players.Length]) % gridSize; | |
| trueAgent.transform.localPosition = new Vector3(xA, -0.25f, yA); | |
| } | |
| } | |