From 219c067fe9a51c718455c630662bfab4bd0e3dc3 Mon Sep 17 00:00:00 2001 From: Chris Elion Date: Mon, 10 Feb 2020 10:32:27 -0800 Subject: [PATCH 1/3] debugging --- com.unity.ml-agents/Runtime/Agent.cs | 6 ++-- .../Tests/Editor/MLAgentsEditModeTest.cs | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/com.unity.ml-agents/Runtime/Agent.cs b/com.unity.ml-agents/Runtime/Agent.cs index 66e8520ba5..13a8a04d25 100644 --- a/com.unity.ml-agents/Runtime/Agent.cs +++ b/com.unity.ml-agents/Runtime/Agent.cs @@ -758,10 +758,8 @@ void AgentStep() NotifyAgentDone(true); _AgentReset(); } - else - { - m_StepCount += 1; - } + m_StepCount += 1; + if ((m_RequestAction) && (m_Brain != null)) { m_RequestAction = false; diff --git a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs index 1d84ff8638..337abb8ecd 100644 --- a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs +++ b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs @@ -65,6 +65,7 @@ public override void AgentAction(float[] vectorAction) public override void AgentReset() { + Debug.Log("AgentReset()"); agentResetCalls += 1; } @@ -500,5 +501,34 @@ public void TestCumulativeReward() aca.EnvironmentStep(); } } + + [Test] + public void TestMaxSteps() + { + var agentGo1 = new GameObject("TestAgent"); + agentGo1.AddComponent(); + var agent1 = agentGo1.GetComponent(); + var aca = Academy.Instance; + + var decisionRequester = agent1.gameObject.AddComponent(); + decisionRequester.DecisionPeriod = 2; + decisionRequester.Awake(); + + var maxStep = 20; + agent1.maxStep = maxStep; + agent1.LazyInitialize(); + + for (var i = 0; i < 50; i++) + { + var atMaxStep = agent1.GetStepCount() == maxStep; // whether agent will reset this step + if (!atMaxStep) + { + //Assert.AreEqual(i % maxStep, agent1.GetStepCount()); + } + + Debug.Log($"i={i} agent1.GetStepCount()={agent1.GetStepCount()}"); + aca.EnvironmentStep(); + } + } } } From f9887d066c67e8468ccab113526d9ba30adfd993 Mon Sep 17 00:00:00 2001 From: Chris Elion Date: Mon, 10 Feb 2020 10:36:11 -0800 Subject: [PATCH 2/3] smaller --- com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs index 337abb8ecd..17e62ecda0 100644 --- a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs +++ b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs @@ -514,11 +514,11 @@ public void TestMaxSteps() decisionRequester.DecisionPeriod = 2; decisionRequester.Awake(); - var maxStep = 20; + var maxStep = 6; agent1.maxStep = maxStep; agent1.LazyInitialize(); - for (var i = 0; i < 50; i++) + for (var i = 0; i < 15; i++) { var atMaxStep = agent1.GetStepCount() == maxStep; // whether agent will reset this step if (!atMaxStep) From 7e19c0a60c8ade4c89c290aed7e79385b831e533 Mon Sep 17 00:00:00 2001 From: Chris Elion Date: Mon, 10 Feb 2020 13:30:38 -0800 Subject: [PATCH 3/3] undo logging, cleanup test --- com.unity.ml-agents/Runtime/Agent.cs | 5 +++- .../Tests/Editor/MLAgentsEditModeTest.cs | 29 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/com.unity.ml-agents/Runtime/Agent.cs b/com.unity.ml-agents/Runtime/Agent.cs index 13a8a04d25..88997f6262 100644 --- a/com.unity.ml-agents/Runtime/Agent.cs +++ b/com.unity.ml-agents/Runtime/Agent.cs @@ -758,7 +758,10 @@ void AgentStep() NotifyAgentDone(true); _AgentReset(); } - m_StepCount += 1; + else + { + m_StepCount += 1; + } if ((m_RequestAction) && (m_Brain != null)) { diff --git a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs index 17e62ecda0..ff2ba643b9 100644 --- a/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs +++ b/com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs @@ -37,7 +37,9 @@ internal void SetPolicy(IPolicy policy) public int initializeAgentCalls; public int collectObservationsCalls; + public int collectObservationsCallsSinceLastReset; public int agentActionCalls; + public int agentActionCallsSinceLastReset; public int agentResetCalls; public override void InitializeAgent() { @@ -54,19 +56,22 @@ public override void InitializeAgent() public override void CollectObservations() { collectObservationsCalls += 1; + collectObservationsCallsSinceLastReset += 1; AddVectorObs(0f); } public override void AgentAction(float[] vectorAction) { agentActionCalls += 1; + agentActionCallsSinceLastReset += 1; AddReward(0.1f); } public override void AgentReset() { - Debug.Log("AgentReset()"); agentResetCalls += 1; + collectObservationsCallsSinceLastReset = 0; + agentActionCallsSinceLastReset = 0; } public override float[] Heuristic() @@ -503,7 +508,7 @@ public void TestCumulativeReward() } [Test] - public void TestMaxSteps() + public void TestMaxStepsReset() { var agentGo1 = new GameObject("TestAgent"); agentGo1.AddComponent(); @@ -511,7 +516,7 @@ public void TestMaxSteps() var aca = Academy.Instance; var decisionRequester = agent1.gameObject.AddComponent(); - decisionRequester.DecisionPeriod = 2; + decisionRequester.DecisionPeriod = 1; decisionRequester.Awake(); var maxStep = 6; @@ -520,14 +525,20 @@ public void TestMaxSteps() for (var i = 0; i < 15; i++) { - var atMaxStep = agent1.GetStepCount() == maxStep; // whether agent will reset this step - if (!atMaxStep) - { - //Assert.AreEqual(i % maxStep, agent1.GetStepCount()); - } + // We expect resets to occur when there are maxSteps actions since the last reset (and on the first step) + var expectReset = agent1.agentActionCallsSinceLastReset == maxStep || (i == 0); + var previousNumResets = agent1.agentResetCalls; - Debug.Log($"i={i} agent1.GetStepCount()={agent1.GetStepCount()}"); aca.EnvironmentStep(); + + if (expectReset) + { + Assert.AreEqual(previousNumResets + 1, agent1.agentResetCalls); + } + else + { + Assert.AreEqual(previousNumResets, agent1.agentResetCalls); + } } } }