public override void OnImportAsset(AssetImportContext ctx) { var inputType = Path.GetExtension(ctx.assetPath); if (inputType == null) { throw new Exception("Demonstration import error."); } try { // Read first two proto objects containing metadata and brain parameters. Stream reader = File.OpenRead(ctx.assetPath); var metaDataProto = DemonstrationMetaProto.Parser.ParseDelimitedFrom(reader); var metaData = new DemonstrationMetaData(metaDataProto); reader.Seek(DemonstrationStore.MetaDataBytes + 1, 0); var brainParamsProto = BrainParametersProto.Parser.ParseDelimitedFrom(reader); var brainParameters = new BrainParameters(brainParamsProto); reader.Close(); var demonstration = ScriptableObject.CreateInstance <Demonstration>(); demonstration.Initialize(brainParameters, metaData); userData = demonstration.ToString(); Texture2D texture = (Texture2D) AssetDatabase.LoadAssetAtPath(IconPath, typeof(Texture2D)); #if UNITY_2017_3_OR_NEWER ctx.AddObjectToAsset(ctx.assetPath, demonstration, texture); ctx.SetMainObject(demonstration); #else ctx.SetMainAsset(ctx.assetPath, model); #endif } catch { return; } }
/// Helper function that resets all the data structures associated with /// the agent. Typically used when the agent is being initialized or reset /// at the end of an episode. void ResetData() { if (brain == null) { return; } BrainParameters param = brain.brainParameters; actionMasker = new ActionMasker(param); if (param.vectorActionSpaceType == SpaceType.continuous) { action.vectorActions = new float[param.vectorActionSize[0]]; info.storedVectorActions = new float[param.vectorActionSize[0]]; } else { action.vectorActions = new float[param.vectorActionSize.Length]; info.storedVectorActions = new float[param.vectorActionSize.Length]; } if (info.textObservation == null) { info.textObservation = ""; } action.textActions = ""; info.memories = new List <float>(); action.memories = new List <float>(); info.vectorObservation = new List <float>(param.vectorObservationSize); info.stackedVectorObservation = new List <float>(param.vectorObservationSize * brain.brainParameters.numStackedVectorObservations); info.stackedVectorObservation.AddRange( new float[param.vectorObservationSize * param.numStackedVectorObservations]); info.visualObservations = new List <Texture2D>(); info.customObservation = null; }
/// <summary> /// Sends the Agent info to the linked Brain. /// </summary> void SendInfoToBrain() { if (brain == null) { return; } info.memories = action.memories; info.storedVectorActions = action.vectorActions; info.storedTextActions = action.textActions; info.vectorObservation.Clear(); actionMasker.ResetMask(); CollectObservations(); info.actionMasks = actionMasker.GetMask(); BrainParameters param = brain.brainParameters; if (info.vectorObservation.Count != param.vectorObservationSize) { throw new UnityAgentsException(string.Format( "Vector Observation size mismatch between continuous " + "agent {0} and brain {1}. " + "Was Expecting {2} but received {3}. ", gameObject.name, brain.name, brain.brainParameters.vectorObservationSize, info.vectorObservation.Count)); } info.stackedVectorObservation.RemoveRange( 0, param.vectorObservationSize); info.stackedVectorObservation.AddRange(info.vectorObservation); info.visualObservations.Clear(); var visualObservationCount = agentParameters.agentCameras.Count + agentParameters.agentRenderTextures.Count; if (param.cameraResolutions.Length > visualObservationCount) { throw new UnityAgentsException(string.Format( "Not enough cameras/renderTextures for agent {0} : Brain {1} expecting at " + "least {2} cameras/renderTextures but only {3} were present.", gameObject.name, brain.name, brain.brainParameters.cameraResolutions.Length, visualObservationCount)); } //First add all cameras for (int i = 0; i < agentParameters.agentCameras.Count; i++) { ObservationToTexture( agentParameters.agentCameras[i], param.cameraResolutions[i].width, param.cameraResolutions[i].height, ref textureArray[i]); info.visualObservations.Add(textureArray[i]); } //Then add all renderTextures var camCount = agentParameters.agentCameras.Count; for (int i = 0; i < agentParameters.agentRenderTextures.Count; i++) { ObservationToTexture( agentParameters.agentRenderTextures[i], param.cameraResolutions[camCount + i].width, param.cameraResolutions[camCount + i].height, ref textureArray[i]); info.visualObservations.Add(textureArray[i]); } info.reward = reward; info.done = done; info.maxStepReached = maxStepReached; info.id = id; brain.SendState(this, info); if (recorder != null && recorder.record && Application.isEditor) { recorder.WriteExperience(info); } info.textObservation = ""; }
public ActionMasker(BrainParameters brainParameters) { this._brainParameters = brainParameters; }
public void Initialize(BrainParameters brainParameters, DemonstrationMetaData demonstrationMetaData) { this.brainParameters = brainParameters; metaData = demonstrationMetaData; }