diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta
index 04e0c8ae44..abe1ab241d 100644
--- a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBall.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta
index f7ef37fa9e..b9beb56b42 100644
--- a/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/3DBall/Demos/Expert3DBallHard.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta
index a08dff9d64..5a37b13ff7 100644
--- a/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Basic/Demos/ExpertBasic.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Bouncer/Demos/ExpertBouncer.demo.meta b/Project/Assets/ML-Agents/Examples/Bouncer/Demos/ExpertBouncer.demo.meta
index 5a35e67b69..ea852b696f 100644
--- a/Project/Assets/ML-Agents/Examples/Bouncer/Demos/ExpertBouncer.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Bouncer/Demos/ExpertBouncer.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Bouncer/Demos/ExpertBouncer.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerDyn.demo.meta b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerDyn.demo.meta
index a14f0c4475..9c608b13f1 100644
--- a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerDyn.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerDyn.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerDyn.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerSta.demo.meta b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerSta.demo.meta
index 623b8a4fe6..e29755c4c8 100644
--- a/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerSta.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerSta.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Crawler/Demos/ExpertCrawlerSta.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo.meta b/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo.meta
index 7e1320816b..90a6191606 100644
--- a/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGrid.demo.meta b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGrid.demo.meta
index 562b7ba23d..43d024e70f 100644
--- a/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGrid.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGrid.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/GridWorld/Demos/ExpertGrid.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta
index 257d6726f5..fecd234d0f 100644
--- a/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Hallway/Demos/ExpertHallway.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPush.demo.meta b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPush.demo.meta
index b0403ebbc3..c860cfd6e5 100644
--- a/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPush.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPush.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/PushBlock/Demos/ExpertPush.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta
index 8cedb1b302..9eede9c2b8 100644
--- a/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Pyramids/Demos/ExpertPyramid.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Reacher/Demos/ExpertReacher.demo.meta b/Project/Assets/ML-Agents/Examples/Reacher/Demos/ExpertReacher.demo.meta
index 5b84bc89a6..9e5b388ddf 100644
--- a/Project/Assets/ML-Agents/Examples/Reacher/Demos/ExpertReacher.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Reacher/Demos/ExpertReacher.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Reacher/Demos/ExpertReacher.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Tennis/Demos/ExpertTennis.demo.meta b/Project/Assets/ML-Agents/Examples/Tennis/Demos/ExpertTennis.demo.meta
index 5519347c6b..b6ffd01178 100644
--- a/Project/Assets/ML-Agents/Examples/Tennis/Demos/ExpertTennis.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Tennis/Demos/ExpertTennis.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Tennis/Demos/ExpertTennis.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta
index 21a36ec8b2..9841625eea 100644
--- a/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta
+++ b/Project/Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo.meta
@@ -4,7 +4,7 @@ ScriptedImporter:
fileIDToRecycleName:
11400000: Assets/ML-Agents/Examples/Walker/Demos/ExpertWalker.demo
externalObjects: {}
- userData: ' (MLAgents.Demonstrations.Demonstration)'
+ userData: ' (MLAgents.Demonstrations.DemonstrationSummary)'
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 7bd65ce151aaa4a41a45312543c56be1, type: 3}
diff --git a/Project/ProjectSettings/ProjectVersion.txt b/Project/ProjectSettings/ProjectVersion.txt
index 9bebbca979..aac939d2ad 100644
--- a/Project/ProjectSettings/ProjectVersion.txt
+++ b/Project/ProjectSettings/ProjectVersion.txt
@@ -1 +1 @@
-m_EditorVersion: 2018.4.18f1
+m_EditorVersion: 2018.4.17f1
diff --git a/com.unity.ml-agents/CHANGELOG.md b/com.unity.ml-agents/CHANGELOG.md
index ed328e4f7c..63d14b95e1 100755
--- a/com.unity.ml-agents/CHANGELOG.md
+++ b/com.unity.ml-agents/CHANGELOG.md
@@ -31,6 +31,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- `StackingSensor` was changed from `internal` visibility to `public`
- Updated Barracuda to 0.6.3-preview.
+ ### Bug Fixes
+ - Fixed a display bug when viewing Demonstration files in the inspector. The shapes of the observations in the file now display correctly. (#3771)
+
## [0.15.1-preview] - 2020-03-30
### Bug Fixes
- Raise the wall in CrawlerStatic scene to prevent Agent from falling off. (#3650)
diff --git a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs
index 3d3f88a0b7..0479ab07fb 100644
--- a/com.unity.ml-agents/Editor/DemonstrationDrawer.cs
+++ b/com.unity.ml-agents/Editor/DemonstrationDrawer.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
using System.Text;
using UnityEditor;
using MLAgents.Demonstrations;
@@ -7,19 +8,21 @@
namespace MLAgents.Editor
{
///
- /// Renders a custom UI for Demonstration Scriptable Object.
+ /// Renders a custom UI for DemonstrationSummary ScriptableObject.
///
- [CustomEditor(typeof(Demonstration))]
+ [CustomEditor(typeof(DemonstrationSummary))]
[CanEditMultipleObjects]
internal class DemonstrationEditor : UnityEditor.Editor
{
SerializedProperty m_BrainParameters;
SerializedProperty m_DemoMetaData;
+ SerializedProperty m_ObservationShapes;
void OnEnable()
{
m_BrainParameters = serializedObject.FindProperty("brainParameters");
m_DemoMetaData = serializedObject.FindProperty("metaData");
+ m_ObservationShapes = serializedObject.FindProperty("observationSummaries");
}
///
@@ -28,25 +31,25 @@ void OnEnable()
void MakeMetaDataProperty(SerializedProperty property)
{
var nameProp = property.FindPropertyRelative("demonstrationName");
- var expProp = property.FindPropertyRelative("numberExperiences");
- var epiProp = property.FindPropertyRelative("numberEpisodes");
- var rewProp = property.FindPropertyRelative("meanReward");
+ var experiencesProp = property.FindPropertyRelative("numberSteps");
+ var episodesProp = property.FindPropertyRelative("numberEpisodes");
+ var rewardsProp = property.FindPropertyRelative("meanReward");
var nameLabel = nameProp.displayName + ": " + nameProp.stringValue;
- var expLabel = expProp.displayName + ": " + expProp.intValue;
- var epiLabel = epiProp.displayName + ": " + epiProp.intValue;
- var rewLabel = rewProp.displayName + ": " + rewProp.floatValue;
+ var experiencesLabel = experiencesProp.displayName + ": " + experiencesProp.intValue;
+ var episodesLabel = episodesProp.displayName + ": " + episodesProp.intValue;
+ var rewardsLabel = rewardsProp.displayName + ": " + rewardsProp.floatValue;
EditorGUILayout.LabelField(nameLabel);
- EditorGUILayout.LabelField(expLabel);
- EditorGUILayout.LabelField(epiLabel);
- EditorGUILayout.LabelField(rewLabel);
+ EditorGUILayout.LabelField(experiencesLabel);
+ EditorGUILayout.LabelField(episodesLabel);
+ EditorGUILayout.LabelField(rewardsLabel);
}
///
- /// Constructs label for action size array.
+ /// Constructs label for a serialized integer array.
///
- static string BuildActionArrayLabel(SerializedProperty actionSizeProperty)
+ static string BuildIntArrayLabel(SerializedProperty actionSizeProperty)
{
var actionSize = actionSizeProperty.arraySize;
var actionLabel = new StringBuilder("[ ");
@@ -64,35 +67,62 @@ static string BuildActionArrayLabel(SerializedProperty actionSizeProperty)
}
///
- /// Renders Inspector UI for Brain Parameters of Demonstration.
+ /// Renders Inspector UI for BrainParameters of a DemonstrationSummary.
+ /// Only the Action size and type are used from the BrainParameters.
///
- void MakeBrainParametersProperty(SerializedProperty property)
+ void MakeActionsProperty(SerializedProperty property)
{
- var vecObsSizeProp = property.FindPropertyRelative("vectorObservationSize");
- var numStackedProp = property.FindPropertyRelative("numStackedVectorObservations");
var actSizeProperty = property.FindPropertyRelative("vectorActionSize");
var actSpaceTypeProp = property.FindPropertyRelative("vectorActionSpaceType");
- var vecObsSizeLabel = vecObsSizeProp.displayName + ": " + vecObsSizeProp.intValue;
- var numStackedLabel = numStackedProp.displayName + ": " + numStackedProp.intValue;
var vecActSizeLabel =
- actSizeProperty.displayName + ": " + BuildActionArrayLabel(actSizeProperty);
+ actSizeProperty.displayName + ": " + BuildIntArrayLabel(actSizeProperty);
var actSpaceTypeLabel = actSpaceTypeProp.displayName + ": " +
(SpaceType)actSpaceTypeProp.enumValueIndex;
- EditorGUILayout.LabelField(vecObsSizeLabel);
- EditorGUILayout.LabelField(numStackedLabel);
EditorGUILayout.LabelField(vecActSizeLabel);
EditorGUILayout.LabelField(actSpaceTypeLabel);
}
+ ///
+ /// Render the observation shapes of a DemonstrationSummary.
+ ///
+ ///
+ void MakeObservationsProperty(SerializedProperty obsSummariesProperty)
+ {
+ var shapesLabels = new List();
+ var numObservations = obsSummariesProperty.arraySize;
+ for (var i = 0; i < numObservations; i++)
+ {
+ var summary = obsSummariesProperty.GetArrayElementAtIndex(i);
+ var shapeProperty = summary.FindPropertyRelative("shape");
+ shapesLabels.Add(BuildIntArrayLabel(shapeProperty));
+ }
+
+ var shapeLabel = $"Shapes: {string.Join(", ", shapesLabels)}";
+ EditorGUILayout.LabelField(shapeLabel);
+
+ }
+
public override void OnInspectorGUI()
{
serializedObject.Update();
+
EditorGUILayout.LabelField("Meta Data", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
MakeMetaDataProperty(m_DemoMetaData);
- EditorGUILayout.LabelField("Brain Parameters", EditorStyles.boldLabel);
- MakeBrainParametersProperty(m_BrainParameters);
+ EditorGUI.indentLevel--;
+
+ EditorGUILayout.LabelField("Observations", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
+ MakeObservationsProperty(m_ObservationShapes);
+ EditorGUI.indentLevel--;
+
+ EditorGUILayout.LabelField("Actions", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
+ MakeActionsProperty(m_BrainParameters);
+ EditorGUI.indentLevel--;
+
serializedObject.ApplyModifiedProperties();
}
}
diff --git a/com.unity.ml-agents/Editor/DemonstrationImporter.cs b/com.unity.ml-agents/Editor/DemonstrationImporter.cs
index b338cc9540..6489d5022b 100644
--- a/com.unity.ml-agents/Editor/DemonstrationImporter.cs
+++ b/com.unity.ml-agents/Editor/DemonstrationImporter.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
using MLAgents.CommunicatorObjects;
using UnityEditor;
@@ -26,7 +27,7 @@ public override void OnImportAsset(AssetImportContext ctx)
try
{
- // Read first two proto objects containing metadata and brain parameters.
+ // Read first three proto objects containing metadata, brain parameters, and observations.
Stream reader = File.OpenRead(ctx.assetPath);
var metaDataProto = DemonstrationMetaProto.Parser.ParseDelimitedFrom(reader);
@@ -36,17 +37,30 @@ public override void OnImportAsset(AssetImportContext ctx)
var brainParamsProto = BrainParametersProto.Parser.ParseDelimitedFrom(reader);
var brainParameters = brainParamsProto.ToBrainParameters();
+ // Read the first AgentInfoActionPair so that we can get the observation sizes.
+ List observationSummaries;
+ try
+ {
+ var agentInfoActionPairProto = AgentInfoActionPairProto.Parser.ParseDelimitedFrom(reader);
+ observationSummaries = agentInfoActionPairProto.GetObservationSummaries();
+ }
+ catch
+ {
+ // Just in case there weren't any AgentInfoActionPair or they couldn't be read.
+ observationSummaries = new List();
+ }
+
reader.Close();
- var demonstration = ScriptableObject.CreateInstance();
- demonstration.Initialize(brainParameters, metaData);
- userData = demonstration.ToString();
+ var demonstrationSummary = ScriptableObject.CreateInstance();
+ demonstrationSummary.Initialize(brainParameters, metaData, observationSummaries);
+ userData = demonstrationSummary.ToString();
var texture = (Texture2D)
AssetDatabase.LoadAssetAtPath(k_IconPath, typeof(Texture2D));
- ctx.AddObjectToAsset(ctx.assetPath, demonstration, texture);
- ctx.SetMainObject(demonstration);
+ ctx.AddObjectToAsset(ctx.assetPath, demonstrationSummary, texture);
+ ctx.SetMainObject(demonstrationSummary);
}
catch
{
diff --git a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
index 0ac9f1050d..77c8775828 100644
--- a/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
+++ b/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
@@ -17,6 +17,7 @@ namespace MLAgents
{
internal static class GrpcExtensions
{
+ #region AgentInfo
///
/// Converts a AgentInfo to a protobuf generated AgentInfoActionPairProto
///
@@ -59,6 +60,29 @@ public static AgentInfoProto ToAgentInfoProto(this AgentInfo ai)
return agentInfoProto;
}
+ ///
+ /// Get summaries for the observations in the AgentInfo part of the AgentInfoActionPairProto.
+ ///
+ ///
+ ///
+ public static List GetObservationSummaries(this AgentInfoActionPairProto infoActionPair)
+ {
+ List summariesOut = new List();
+ var agentInfo = infoActionPair.AgentInfo;
+ foreach (var obs in agentInfo.Observations)
+ {
+ var summary = new ObservationSummary();
+ summary.shape = obs.Shape.ToArray();
+ summariesOut.Add(summary);
+ }
+
+ return summariesOut;
+ }
+
+
+ #endregion
+
+ #region BrainParameters
///
/// Converts a Brain into to a Protobuf BrainInfoProto so it can be sent
///
@@ -80,6 +104,25 @@ public static BrainParametersProto ToProto(this BrainParameters bp, string name,
return brainParametersProto;
}
+ ///
+ /// Convert a BrainParametersProto to a BrainParameters struct.
+ ///
+ /// An instance of a brain parameters protobuf object.
+ /// A BrainParameters struct.
+ public static BrainParameters ToBrainParameters(this BrainParametersProto bpp)
+ {
+ var bp = new BrainParameters
+ {
+ vectorActionSize = bpp.VectorActionSize.ToArray(),
+ vectorActionDescriptions = bpp.VectorActionDescriptions.ToArray(),
+ vectorActionSpaceType = (SpaceType)bpp.VectorActionSpaceType
+ };
+ return bp;
+ }
+
+ #endregion
+
+ #region DemonstrationMetaData
///
/// Convert metadata object to proto object.
///
@@ -89,7 +132,7 @@ public static DemonstrationMetaProto ToProto(this DemonstrationMetaData dm)
{
ApiVersion = DemonstrationMetaData.ApiVersion,
MeanReward = dm.meanReward,
- NumberSteps = dm.numberExperiences,
+ NumberSteps = dm.numberSteps,
NumberEpisodes = dm.numberEpisodes,
DemonstrationName = dm.demonstrationName
};
@@ -104,7 +147,7 @@ public static DemonstrationMetaData ToDemonstrationMetaData(this DemonstrationMe
var dm = new DemonstrationMetaData
{
numberEpisodes = demoProto.NumberEpisodes,
- numberExperiences = demoProto.NumberSteps,
+ numberSteps = demoProto.NumberSteps,
meanReward = demoProto.MeanReward,
demonstrationName = demoProto.DemonstrationName
};
@@ -114,22 +157,7 @@ public static DemonstrationMetaData ToDemonstrationMetaData(this DemonstrationMe
}
return dm;
}
-
- ///
- /// Convert a BrainParametersProto to a BrainParameters struct.
- ///
- /// An instance of a brain parameters protobuf object.
- /// A BrainParameters struct.
- public static BrainParameters ToBrainParameters(this BrainParametersProto bpp)
- {
- var bp = new BrainParameters
- {
- vectorActionSize = bpp.VectorActionSize.ToArray(),
- vectorActionDescriptions = bpp.VectorActionDescriptions.ToArray(),
- vectorActionSpaceType = (SpaceType)bpp.VectorActionSpaceType
- };
- return bp;
- }
+ #endregion
public static UnityRLInitParameters ToUnityRLInitParameters(this UnityRLInitializationInputProto inputProto)
{
@@ -141,6 +169,7 @@ public static UnityRLInitParameters ToUnityRLInitParameters(this UnityRLInitiali
};
}
+ #region AgentAction
public static AgentAction ToAgentAction(this AgentActionProto aap)
{
return new AgentAction
@@ -158,7 +187,9 @@ public static List ToAgentActionList(this UnityRLInputProto.Types.L
}
return agentActions;
}
+ #endregion
+ #region Observations
public static ObservationProto ToProto(this Observation obs)
{
ObservationProto obsProto = null;
@@ -248,5 +279,6 @@ public static ObservationProto GetObservationProto(this ISensor sensor, WriteAda
observationProto.Shape.AddRange(shape);
return observationProto;
}
+ #endregion
}
}
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/Demonstration.cs b/com.unity.ml-agents/Runtime/Demonstrations/Demonstration.cs
deleted file mode 100644
index a09ea6ebf7..0000000000
--- a/com.unity.ml-agents/Runtime/Demonstrations/Demonstration.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using UnityEngine;
-using MLAgents.Policies;
-
-namespace MLAgents.Demonstrations
-{
- ///
- /// Demonstration Object. Contains meta-data regarding demonstration.
- /// Used for imitation learning, or other forms of learning from data.
- ///
- [Serializable]
- internal class Demonstration : ScriptableObject
- {
- public DemonstrationMetaData metaData;
- public BrainParameters brainParameters;
-
- public void Initialize(BrainParameters brainParams,
- DemonstrationMetaData demonstrationMetaData)
- {
- brainParameters = brainParams;
- metaData = demonstrationMetaData;
- }
- }
-
- ///
- /// Demonstration meta-data.
- /// Kept in a struct for easy serialization and deserialization.
- ///
- [Serializable]
- internal class DemonstrationMetaData
- {
- public int numberExperiences;
- public int numberEpisodes;
- public float meanReward;
- public string demonstrationName;
- public const int ApiVersion = 1;
- }
-}
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs
new file mode 100644
index 0000000000..a5e07374bd
--- /dev/null
+++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs
@@ -0,0 +1,22 @@
+using System;
+using UnityEngine;
+using MLAgents.Policies;
+using UnityEngine.Serialization;
+
+namespace MLAgents.Demonstrations
+{
+ ///
+ /// Demonstration meta-data.
+ /// Kept in a struct for easy serialization and deserialization.
+ ///
+ [Serializable]
+ internal class DemonstrationMetaData
+ {
+ [FormerlySerializedAs("numberExperiences")]
+ public int numberSteps;
+ public int numberEpisodes;
+ public float meanReward;
+ public string demonstrationName;
+ public const int ApiVersion = 1;
+ }
+}
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta
new file mode 100644
index 0000000000..8e6ff39275
--- /dev/null
+++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationMetaData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: af5f3b4258a2d4ead90e733f30cfaa7a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs
new file mode 100644
index 0000000000..1beb53b87d
--- /dev/null
+++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using MLAgents.Policies;
+
+namespace MLAgents.Demonstrations
+{
+ ///
+ /// Summary of a loaded Demonstration file. Only used for display in the Inspector.
+ ///
+ [Serializable]
+ internal class DemonstrationSummary : ScriptableObject
+ {
+ public DemonstrationMetaData metaData;
+ public BrainParameters brainParameters;
+ public List observationSummaries;
+
+ public void Initialize(BrainParameters brainParams,
+ DemonstrationMetaData demonstrationMetaData, List obsSummaries)
+ {
+ brainParameters = brainParams;
+ metaData = demonstrationMetaData;
+ observationSummaries = obsSummaries;
+ }
+ }
+
+
+ ///
+ /// Summary of a loaded Observation. Currently only contains the shape of the Observation.
+ ///
+ /// This is necessary because serialization doesn't support nested containers or arrays.
+ [Serializable]
+ internal struct ObservationSummary
+ {
+ public int[] shape;
+ }
+}
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/Demonstration.cs.meta b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs.meta
similarity index 100%
rename from com.unity.ml-agents/Runtime/Demonstrations/Demonstration.cs.meta
rename to com.unity.ml-agents/Runtime/Demonstrations/DemonstrationSummary.cs.meta
diff --git a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs
index e4fb4a4954..577663d25e 100644
--- a/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs
+++ b/com.unity.ml-agents/Runtime/Demonstrations/DemonstrationWriter.cs
@@ -105,7 +105,7 @@ internal void Record(AgentInfo info, List sensors)
}
// Increment meta-data counters.
- m_MetaData.numberExperiences++;
+ m_MetaData.numberSteps++;
m_CumulativeReward += info.reward;
if (info.done)
{
diff --git a/docs/Training-Imitation-Learning.md b/docs/Training-Imitation-Learning.md
index a71d7ed166..ba3cba51e2 100644
--- a/docs/Training-Imitation-Learning.md
+++ b/docs/Training-Imitation-Learning.md
@@ -68,7 +68,7 @@ from the agent.
@@ -83,7 +83,7 @@ inspector.
@@ -101,4 +101,4 @@ And for GAIL:
gail:
demo_path:
...
-```
\ No newline at end of file
+```
diff --git a/docs/images/demo_inspector.png b/docs/images/demo_inspector.png
index 9cb7a60980..d1d62bba84 100644
Binary files a/docs/images/demo_inspector.png and b/docs/images/demo_inspector.png differ