using System; using MLAgents.CommunicatorObjects; using UnityEngine; namespace MLAgents { /// /// Demonstration Object. Contains meta-data regarding demonstration. /// Used for imitation learning, or other forms of learning from data. /// [Serializable] public 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] public class DemonstrationMetaData { public int numberExperiences; public int numberEpisodes; public float meanReward; public string demonstrationName; public const int ApiVersion = 1; /// /// Constructor for initializing metadata to default values. /// public DemonstrationMetaData() { } /// /// Initialize metadata values based on proto object. /// public DemonstrationMetaData(DemonstrationMetaProto demoProto) { numberEpisodes = demoProto.NumberEpisodes; numberExperiences = demoProto.NumberSteps; meanReward = demoProto.MeanReward; demonstrationName = demoProto.DemonstrationName; if (demoProto.ApiVersion != ApiVersion) { throw new Exception("API versions of demonstration are incompatible."); } } /// /// Convert metadata object to proto object. /// public DemonstrationMetaProto ToProto() { var demoProto = new DemonstrationMetaProto { ApiVersion = ApiVersion, MeanReward = meanReward, NumberSteps = numberExperiences, NumberEpisodes = numberEpisodes, DemonstrationName = demonstrationName }; return demoProto; } } }