diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo b/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo index 5490b52f23..a459608ff2 100644 Binary files a/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo and b/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab index f64724101b..a414253886 100644 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab @@ -2180,15 +2180,20 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 4 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] - VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3} + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: FoodCollector TeamId: 0 m_UseChildSensors: 1 + m_UseChildActuators: 1 m_ObservableAttributeHandling: 0 --- !u!114 &114176228333253036 MonoBehaviour: @@ -2216,6 +2221,7 @@ MonoBehaviour: myLaser: {fileID: 1081721624670010} contribute: 1 useVectorObs: 1 + useVectorFrozenFlag: 0 --- !u!114 &114725457980523372 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2520,15 +2526,20 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 4 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] - VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3} + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: FoodCollector TeamId: 0 m_UseChildSensors: 1 + m_UseChildActuators: 1 m_ObservableAttributeHandling: 0 --- !u!114 &114711827726849508 MonoBehaviour: @@ -2556,6 +2567,7 @@ MonoBehaviour: myLaser: {fileID: 1941433838307300} contribute: 0 useVectorObs: 1 + useVectorFrozenFlag: 0 --- !u!114 &114443152683847924 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2851,15 +2863,20 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 4 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] - VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3} + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: FoodCollector TeamId: 0 m_UseChildSensors: 1 + m_UseChildActuators: 1 m_ObservableAttributeHandling: 0 --- !u!114 &114542632553128056 MonoBehaviour: @@ -2887,6 +2904,7 @@ MonoBehaviour: myLaser: {fileID: 1421240237750412} contribute: 0 useVectorObs: 1 + useVectorFrozenFlag: 0 --- !u!114 &114986980423924774 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3445,15 +3463,20 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 4 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] - VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3} + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: FoodCollector TeamId: 0 m_UseChildSensors: 1 + m_UseChildActuators: 1 m_ObservableAttributeHandling: 0 --- !u!114 &114189751434580810 MonoBehaviour: @@ -3481,6 +3504,7 @@ MonoBehaviour: myLaser: {fileID: 1617924810425504} contribute: 0 useVectorObs: 1 + useVectorFrozenFlag: 0 --- !u!114 &114644889237473510 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3762,15 +3786,20 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 4 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] - VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3} + VectorActionSpaceType: 1 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: FoodCollector TeamId: 0 m_UseChildSensors: 1 + m_UseChildActuators: 1 m_ObservableAttributeHandling: 0 --- !u!114 &114235147148547996 MonoBehaviour: @@ -3798,6 +3827,7 @@ MonoBehaviour: myLaser: {fileID: 1045923826166930} contribute: 0 useVectorObs: 1 + useVectorFrozenFlag: 0 --- !u!114 &114276061479012222 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4112,7 +4142,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1819751139121548} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 12.3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab index 716edaf2ed..8da644e25a 100644 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab @@ -2180,10 +2180,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 0 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: GridFoodCollector @@ -2217,6 +2221,7 @@ MonoBehaviour: myLaser: {fileID: 1081721624670010} contribute: 0 useVectorObs: 0 + useVectorFrozenFlag: 0 --- !u!114 &8297075921230369060 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2286,6 +2291,7 @@ MonoBehaviour: - {r: 0, g: 0, b: 0, a: 0} GizmoYOffset: 0 ShowGizmos: 0 + CompressionType: 1 --- !u!1 &1482701732800114 GameObject: m_ObjectHideFlags: 0 @@ -2532,10 +2538,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 0 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: GridFoodCollector @@ -2569,6 +2579,7 @@ MonoBehaviour: myLaser: {fileID: 1941433838307300} contribute: 0 useVectorObs: 0 + useVectorFrozenFlag: 0 --- !u!114 &259154752087955944 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2625,6 +2636,7 @@ MonoBehaviour: - {r: 0, g: 0, b: 0, a: 0} GizmoYOffset: 0 ShowGizmos: 0 + CompressionType: 1 --- !u!1 &1528397385587768 GameObject: m_ObjectHideFlags: 0 @@ -2875,10 +2887,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 0 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: GridFoodCollector @@ -2912,6 +2928,7 @@ MonoBehaviour: myLaser: {fileID: 1421240237750412} contribute: 0 useVectorObs: 0 + useVectorFrozenFlag: 0 --- !u!114 &5519119940433428255 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2968,6 +2985,7 @@ MonoBehaviour: - {r: 0, g: 0, b: 0, a: 0} GizmoYOffset: 0 ShowGizmos: 0 + CompressionType: 1 --- !u!1 &1617924810425504 GameObject: m_ObjectHideFlags: 0 @@ -3481,10 +3499,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 0 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: GridFoodCollector @@ -3518,6 +3540,7 @@ MonoBehaviour: myLaser: {fileID: 1617924810425504} contribute: 0 useVectorObs: 0 + useVectorFrozenFlag: 0 --- !u!114 &5884750436653390196 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3574,6 +3597,7 @@ MonoBehaviour: - {r: 0, g: 0, b: 0, a: 0} GizmoYOffset: 0 ShowGizmos: 0 + CompressionType: 1 --- !u!1 &1688105343773098 GameObject: m_ObjectHideFlags: 0 @@ -3810,10 +3834,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 0 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: GridFoodCollector @@ -3847,6 +3875,7 @@ MonoBehaviour: myLaser: {fileID: 1045923826166930} contribute: 0 useVectorObs: 0 + useVectorFrozenFlag: 0 --- !u!114 &4768752321433982785 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3903,6 +3932,7 @@ MonoBehaviour: - {r: 0, g: 0, b: 0, a: 0} GizmoYOffset: 0 ShowGizmos: 0 + CompressionType: 1 --- !u!1 &1729825611722018 GameObject: m_ObjectHideFlags: 0 @@ -4172,7 +4202,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1819751139121548} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 12.3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab index 91519e369b..f2e74cf41a 100644 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab @@ -626,10 +626,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 1 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: da2da13ac266640339f1d87403c895f0, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: VisualFoodCollector @@ -1210,10 +1214,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 1 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: da2da13ac266640339f1d87403c895f0, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: VisualFoodCollector @@ -1608,10 +1616,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 1 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: da2da13ac266640339f1d87403c895f0, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: VisualFoodCollector @@ -3426,10 +3438,14 @@ MonoBehaviour: m_BrainParameters: VectorObservationSize: 1 NumStackedVectorObservations: 1 - VectorActionSize: 03000000030000000300000002000000 + m_ActionSpec: + m_NumContinuousActions: 3 + BranchSizes: 02000000 + VectorActionSize: VectorActionDescriptions: [] VectorActionSpaceType: 0 - m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3} + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 11400000, guid: da2da13ac266640339f1d87403c895f0, type: 3} m_InferenceDevice: 0 m_BehaviorType: 0 m_BehaviorName: VisualFoodCollector diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs index 7ca79100fc..97d21d5828 100644 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs @@ -70,7 +70,7 @@ public Color32 ToColor(int hexVal) return new Color32(r, g, b, 255); } - public void MoveAgent(ActionSegment act) + public void MoveAgent(ActionBuffers actionBuffers) { m_Shoot = false; @@ -93,49 +93,20 @@ public void MoveAgent(ActionSegment act) var dirToGo = Vector3.zero; var rotateDir = Vector3.zero; + var continuousActions = actionBuffers.ContinuousActions; + var discreteActions = actionBuffers.DiscreteActions; + if (!m_Frozen) { - var shootCommand = false; - var forwardAxis = (int)act[0]; - var rightAxis = (int)act[1]; - var rotateAxis = (int)act[2]; - var shootAxis = (int)act[3]; - - switch (forwardAxis) - { - case 1: - dirToGo = transform.forward; - break; - case 2: - dirToGo = -transform.forward; - break; - } + var forward = Mathf.Clamp(continuousActions[0], -1f, 1f); + var right = Mathf.Clamp(continuousActions[1], -1f, 1f); + var rotate = Mathf.Clamp(continuousActions[2], -1f, 1f); - switch (rightAxis) - { - case 1: - dirToGo = transform.right; - break; - case 2: - dirToGo = -transform.right; - break; - } + dirToGo = transform.forward * forward; + dirToGo += transform.right * right; + rotateDir = -transform.up * rotate; - switch (rotateAxis) - { - case 1: - rotateDir = -transform.up; - break; - case 2: - rotateDir = transform.up; - break; - } - switch (shootAxis) - { - case 1: - shootCommand = true; - break; - } + var shootCommand = (int)discreteActions[0] > 0; if (shootCommand) { m_Shoot = true; @@ -216,32 +187,33 @@ void Unsatiate() public override void OnActionReceived(ActionBuffers actionBuffers) { - MoveAgent(actionBuffers.DiscreteActions); + MoveAgent(actionBuffers); } public override void Heuristic(in ActionBuffers actionsOut) { - var discreteActionsOut = actionsOut.DiscreteActions; - discreteActionsOut[0] = 0; - discreteActionsOut[1] = 0; - discreteActionsOut[2] = 0; + var continuousActionsOut = actionsOut.ContinuousActions; + continuousActionsOut[0] = 0; + continuousActionsOut[1] = 0; + continuousActionsOut[2] = 0; if (Input.GetKey(KeyCode.D)) { - discreteActionsOut[2] = 2; + continuousActionsOut[2] = 1; } if (Input.GetKey(KeyCode.W)) { - discreteActionsOut[0] = 1; + continuousActionsOut[0] = 1; } if (Input.GetKey(KeyCode.A)) { - discreteActionsOut[2] = 1; + continuousActionsOut[2] = -1; } if (Input.GetKey(KeyCode.S)) { - discreteActionsOut[0] = 2; + continuousActionsOut[0] = -1; } - discreteActionsOut[3] = Input.GetKey(KeyCode.Space) ? 1 : 0; + var discreteActionsOut = actionsOut.DiscreteActions; + discreteActionsOut[0] = Input.GetKey(KeyCode.Space) ? 1 : 0; } public override void OnEpisodeBegin() diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn deleted file mode 100644 index f39e644374..0000000000 Binary files a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn and /dev/null differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn.meta deleted file mode 100644 index 4bf5ec16c4..0000000000 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 36ab3e93020504f48858d0856f939685 -ScriptedImporter: - fileIDToRecycleName: - 11400000: main obj - 11400002: model data - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx new file mode 100644 index 0000000000..a3302c2195 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx.meta new file mode 100644 index 0000000000..5b7a9c6672 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 3210b528a2bc44a86bd6bd1d571070f8 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn deleted file mode 100644 index efe9e032c8..0000000000 Binary files a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn and /dev/null differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn.meta deleted file mode 100644 index 394e7581f5..0000000000 --- a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 699f852e79b5ba642871514fb1fb9843 -ScriptedImporter: - fileIDToRecycleName: - 11400000: main obj - 11400002: model data - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3} diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx new file mode 100644 index 0000000000..1827b13583 Binary files /dev/null and b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx differ diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta new file mode 100644 index 0000000000..4b4cf81d22 --- /dev/null +++ b/Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 75910f45f20be49b18e2b95879a217b2 +ScriptedImporter: + fileIDToRecycleName: + 11400000: main obj + 11400002: model data + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} + optimizeModel: 1 + forceArbitraryBatchSize: 1 + treatErrorsAsWarnings: 0 diff --git a/com.unity.ml-agents/CHANGELOG.md b/com.unity.ml-agents/CHANGELOG.md index 2c8d44bf4e..08bf4f0354 100755 --- a/com.unity.ml-agents/CHANGELOG.md +++ b/com.unity.ml-agents/CHANGELOG.md @@ -19,7 +19,8 @@ both continuous and discrete action sizes in Behavior Parameters. (#4702, #4718) - In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics. Please refer to "Information that is passively collected by Unity" in the [Unity Privacy Policy](https://unity3d.com/legal/privacy-policy). (#4677) - +- The FoodCollector example environment now uses continuous actions for moving and +discrete actions for shooting. (#4746) #### ml-agents / ml-agents-envs / gym-unity (Python) - `ActionSpec.validate_action()` now enforces that `UnityEnvironment.set_action_for_agent()` receives a 1D `np.array`. (#4691) diff --git a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs index e6e037a3a7..35de8ed569 100644 --- a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs +++ b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs @@ -2,6 +2,7 @@ using System.Text; using UnityEditor; using Unity.MLAgents.Demonstrations; +using Unity.MLAgents.Policies; namespace Unity.MLAgents.Editor @@ -23,9 +24,9 @@ internal class DemonstrationEditor : UnityEditor.Editor const string k_NumberStepsName = "numberSteps"; const string k_NumberEpisodesName = "numberEpisodes"; const string k_MeanRewardName = "meanReward"; - const string k_ActionSpecName = "ActionSpec"; + const string k_ActionSpecName = "m_ActionSpec"; const string k_NumContinuousActionsName = "m_NumContinuousActions"; - const string k_NumDiscreteActionsName = "m_NumDiscreteActions"; + const string k_NumDiscreteActionsName = "BranchSizes"; const string k_ShapeName = "shape"; @@ -86,12 +87,9 @@ void MakeActionsProperty(SerializedProperty property) var actSpecProperty = property.FindPropertyRelative(k_ActionSpecName); var continuousSizeProperty = actSpecProperty.FindPropertyRelative(k_NumContinuousActionsName); var discreteSizeProperty = actSpecProperty.FindPropertyRelative(k_NumDiscreteActionsName); - - var continuousSizeLabel = - continuousSizeProperty.displayName + ": " + continuousSizeProperty.intValue; - var discreteSizeLabel = discreteSizeProperty.displayName + ": " + - discreteSizeProperty.intValue; - + var continuousSizeLabel = "Continuous Actions: " + continuousSizeProperty.intValue; + var discreteSizeLabel = "Discrete Action Branches: "; + discreteSizeLabel += discreteSizeProperty == null ? "[]" : BuildIntArrayLabel(discreteSizeProperty); EditorGUILayout.LabelField(continuousSizeLabel); EditorGUILayout.LabelField(discreteSizeLabel); } diff --git a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs index 2693c0b7e8..5768b2989c 100644 --- a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs +++ b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs @@ -162,10 +162,27 @@ public static BrainParametersProto ToBrainParametersProto(this ActionSpec action /// A BrainParameters struct. public static BrainParameters ToBrainParameters(this BrainParametersProto bpp) { + ActionSpec actionSpec; + if (bpp.ActionSpec == null) + { + var spaceType = (SpaceType)bpp.VectorActionSpaceTypeDeprecated; + if (spaceType == SpaceType.Continuous) + { + actionSpec = ActionSpec.MakeContinuous(bpp.VectorActionSizeDeprecated.ToArray()[0]); + } + else + { + actionSpec = ActionSpec.MakeDiscrete(bpp.VectorActionSizeDeprecated.ToArray()); + } + } + else + { + actionSpec = ToActionSpec(bpp.ActionSpec); + } var bp = new BrainParameters { VectorActionDescriptions = bpp.VectorActionDescriptionsDeprecated.ToArray(), - ActionSpec = ToActionSpec(bpp.ActionSpec), + ActionSpec = actionSpec, }; return bp; } diff --git a/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs index fd1db48e3b..1ae30a95e8 100644 --- a/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs +++ b/com.unity.ml-agents/Runtime/Policies/BrainParameters.cs @@ -133,7 +133,9 @@ public BrainParameters Clone() /// private void UpdateToActionSpec() { - if (!hasUpgradedBrainParametersWithActionSpec) + if (!hasUpgradedBrainParametersWithActionSpec + && m_ActionSpec.NumContinuousActions == 0 + && m_ActionSpec.BranchSizes == null) { if (VectorActionSpaceType == SpaceType.Continuous) { @@ -145,9 +147,8 @@ private void UpdateToActionSpec() m_ActionSpec.NumContinuousActions = 0; m_ActionSpec.BranchSizes = (int[])VectorActionSize.Clone(); } - - hasUpgradedBrainParametersWithActionSpec = true; } + hasUpgradedBrainParametersWithActionSpec = true; } /// diff --git a/docs/Learning-Environment-Examples.md b/docs/Learning-Environment-Examples.md index 9be7a2f8e5..97fb771ddb 100644 --- a/docs/Learning-Environment-Examples.md +++ b/docs/Learning-Environment-Examples.md @@ -315,11 +315,10 @@ you would like to contribute environments, please see our agent is frozen and/or shot its laser (2), plus ray-based perception of objects around agent's forward direction (49; 7 raycast angles with 7 measurements for each). - - Actions: 4 discrete action ranches: - - Forward Motion (3 possible actions: Forward, Backwards, No Action) - - Side Motion (3 possible actions: Left, Right, No Action) - - Rotation (3 possible actions: Rotate Left, Rotate Right, No Action) - - Laser (2 possible actions: Laser, No Action) + - Actions: + - 3 continuous actions correspond to Forward Motion, Side Motion and Rotation + - 1 discrete acion branch for Laser with 2 possible actions corresponding to + Shoot Laser or No Action - Visual Observations (Optional): First-person camera per-agent, plus one vector flag representing the frozen state of the agent. This scene uses a combination of vector and visual observations and the training will not succeed without diff --git a/ml-agents/mlagents/trainers/demo_loader.py b/ml-agents/mlagents/trainers/demo_loader.py index 392600db57..db467244f1 100644 --- a/ml-agents/mlagents/trainers/demo_loader.py +++ b/ml-agents/mlagents/trainers/demo_loader.py @@ -70,15 +70,28 @@ def make_demo_buffer( for i, obs in enumerate(split_obs.visual_observations): demo_raw_buffer["visual_obs%d" % i].append(obs) demo_raw_buffer["vector_obs"].append(split_obs.vector_observations) - # TODO: update the demonstraction files and read from the new proto format - if behavior_spec.action_spec.continuous_size > 0: - demo_raw_buffer["continuous_action"].append( - current_pair_info.action_info.vector_actions_deprecated - ) - if behavior_spec.action_spec.discrete_size > 0: - demo_raw_buffer["discrete_action"].append( - current_pair_info.action_info.vector_actions_deprecated - ) + if ( + len(current_pair_info.action_info.continuous_actions) == 0 + and len(current_pair_info.action_info.discrete_actions) == 0 + ): + if behavior_spec.action_spec.continuous_size > 0: + demo_raw_buffer["continuous_action"].append( + current_pair_info.action_info.vector_actions_deprecated + ) + else: + demo_raw_buffer["discrete_action"].append( + current_pair_info.action_info.vector_actions_deprecated + ) + else: + if behavior_spec.action_spec.continuous_size > 0: + demo_raw_buffer["continuous_action"].append( + current_pair_info.action_info.continuous_actions + ) + if behavior_spec.action_spec.discrete_size > 0: + demo_raw_buffer["discrete_action"].append( + current_pair_info.action_info.discrete_actions + ) + demo_raw_buffer["prev_action"].append(previous_action) if next_done: demo_raw_buffer.resequence_and_append(