using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MLAgents { /// CoreBrain which decides actions via communication with an external system such as Python. public class CoreBrainExternal : ScriptableObject, CoreBrain { /**< Reference to the brain that uses this CoreBrainExternal */ public Brain brain; Batcher brainBatcher; /// Creates the reference to the brain public void SetBrain(Brain b) { brain = b; } /// Generates the communicator for the Academy if none was present and /// subscribe to ExternalCommunicator if it was present. public void InitializeCoreBrain(Batcher brainBatcher) { if (brainBatcher == null) { brainBatcher = null; throw new UnityAgentsException($"The brain {brain.gameObject.name} was set to" + " External mode" + " but Unity was unable to read the" + " arguments passed at launch."); } else { this.brainBatcher = brainBatcher; this.brainBatcher.SubscribeBrain(brain.gameObject.name); } } /// Uses the communicator to retrieve the actions, memories and values and /// sends them to the agents public void DecideAction(Dictionary agentInfo) { if (brainBatcher != null) { brainBatcher.SendBrainInfo(brain.gameObject.name, agentInfo); } } /// Nothing needs to appear in the inspector public void OnInspector() { } } }