/// Sends Academy parameters to external agent private void SendParameters(AcademyParameters envParams) { string envMessage = JsonConvert.SerializeObject(envParams, Formatting.Indented); sender.Send(Encoding.ASCII.GetBytes(envMessage)); Receive(); }
public override void Initialize(BaseAgent agent) { base.Initialize(agent); PositionY = agent.gameObject.transform.position.y; academy = agent.area.academy; PlayAreaDistance = AcademyParameters.FetchOrParse(academy, PlayAreaDistanceKeyVal); }
public override void Initialize(BaseAgent agent) { academy = agent.area.academy; Reward = AcademyParameters.FetchOrParse(academy, RewardKeyVal); myArea = agent.gameObject.GetComponentInParent <PersonalityQuarksArea>(); }
public override void ResetArea(PersonalityQuarksArea area) { foreach (GameObject go in Spawned) { GameObject.Destroy(go); } Spawned.Clear(); int SpawnNumber = (int)AcademyParameters.FetchOrParse(area.academy, SpawnNumberKeyVal); for (int i = 0; i < SpawnNumber; i++) { GameObject gob = GameObject.Instantiate(Actor, new Vector3( Random.Range(-SpawnRange, SpawnRange), area.StartY + 0.5f, Random.Range(-SpawnRange, SpawnRange)), Quaternion.identity, area.gameObject.transform); if (area.EventSystem != null) { area.EventSystem.RaiseEvent(CreateEvent.Create(Actor.name, gob)); } Spawned.Add(gob); } }
/// Contains the logic for the initializtation of the socket. public void InitializeCommunicator() { messageHolder = new byte[messageLength]; // Create a TCP/IP socket. sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Connect("localhost", comPort); AcademyParameters accParamerters = new AcademyParameters(); accParamerters.brainParameters = new List <BrainParameters>(); accParamerters.brainNames = new List <string>(); accParamerters.externalBrainNames = new List <string>(); accParamerters.apiNumber = api; foreach (Brain b in brains) { accParamerters.brainParameters.Add(b.brainParameters); accParamerters.brainNames.Add(b.gameObject.name); if (b.brainType == BrainType.External) { accParamerters.externalBrainNames.Add(b.gameObject.name); } } accParamerters.AcademyName = academy.gameObject.name; accParamerters.resetParameters = academy.resetParameters; SendParameters(accParamerters); }
// Start is called before the first frame update public override void Init(PersonalityQuarksArea area) { SpawnNumber = (int)AcademyParameters.FetchOrParse(area.academy, SpawnNumberKeyVal); SpawnDistance = AcademyParameters.FetchOrParse(area.academy, SpawnDistanceKeyVal); ResetArea(area); }
/// Contains the logic for the initializtation of the socket. public void InitializeCommunicator() { Application.logMessageReceived += HandleLog; logPath = Path.GetFullPath(".") + "/unity-environment.log"; logWriter = new StreamWriter(logPath, false); logWriter.WriteLine(System.DateTime.Now.ToString()); logWriter.WriteLine(" "); logWriter.Close(); messageHolder = new byte[messageLength]; // Create a TCP/IP socket. sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Connect("localhost", comPort); AcademyParameters accParamerters = new AcademyParameters(); accParamerters.brainParameters = new List <BrainParameters>(); accParamerters.brainNames = new List <string>(); accParamerters.externalBrainNames = new List <string>(); accParamerters.apiNumber = api; accParamerters.logPath = logPath; foreach (Brain b in brains) { accParamerters.brainParameters.Add(b.brainParameters); accParamerters.brainNames.Add(b.gameObject.name); if (b.brainType == BrainType.External) { accParamerters.externalBrainNames.Add(b.gameObject.name); } } accParamerters.AcademyName = academy.gameObject.name; accParamerters.resetParameters = academy.resetParameters; SendParameters(accParamerters); }
/// Contains the logic for the initializtation of the socket. public void InitializeCommunicator() { try { ReadArgs(); } catch { throw new UnityAgentsException("One of the brains was set isExternal" + " but Unity was unable to read the" + " arguments passed at launch"); } messageHolder = new byte[messageLength]; // Create a TCP/IP socket. sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Connect("localhost", comPort); AcademyParameters accParamerters = new AcademyParameters(); accParamerters.brainParameters = new List <BrainParameters>(); accParamerters.brainNames = new List <string>(); foreach (Brain b in brains) { accParamerters.brainParameters.Add(b.brainParameters); accParamerters.brainNames.Add(b.gameObject.name); } accParamerters.AcademyName = academy.gameObject.name; accParamerters.resetParameters = academy.resetParameters; SendParameters(accParamerters); }
public override void AddReward(BaseAgent agent, float[] vectorActions) { if (resetNextFrame) { agent.Done(); myArea.ResetArea(); resetNextFrame = false; } else { List <GameObject> objs = myArea.FindGameObjectsWithTagInChildren(Tag); foreach (GameObject obj in objs) { if ((obj.transform.position - agent.gameObject.transform.position).sqrMagnitude < Distance * Distance) { if (ResetTime < 0) { ResetTime = Time.time; } ResetAreaAfter = AcademyParameters.Update(academy, ResetAreaAfterKeyVal, ResetAreaAfter); if (Time.time - ResetTime >= ResetAreaAfter) { agent.AddReward(Reward); resetNextFrame = true; } } else { ResetTime = -1; } } } }
/// Contains the logic for the initializtation of the socket. public void InitializeCommunicator() { //Application.logMessageReceived += HandleLog; //logPath = Path.GetFullPath(".") + "/unity-environment.log"; //logWriter = new StreamWriter(logPath, false); //logWriter.WriteLine(System.DateTime.Now.ToString()); //logWriter.WriteLine(" "); //logWriter.Close(); messageHolder = new byte[messageLength]; lengthHolder = new byte[4]; // Create a TCP/IP socket. sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); UnityEngine.Debug.Log("Connecting to : localhost:" + comPort); sender.Connect("localhost", comPort); var accParamerters = new AcademyParameters(); accParamerters.brainParameters = new List <BrainParameters>(); accParamerters.brainNames = new List <string>(); accParamerters.externalBrainNames = new List <string>(); accParamerters.apiNumber = _version_; accParamerters.logPath = logPath; foreach (Brain b in brains) { accParamerters.brainParameters.Add(b.brainParameters); accParamerters.brainNames.Add(b.gameObject.name); if (b.brainType == BrainType.External) { accParamerters.externalBrainNames.Add(b.gameObject.name); } } accParamerters.AcademyName = academy.gameObject.name; accParamerters.resetParameters = academy.resetParameters; SendParameters(accParamerters); sMessage = new StepMessage(); sMessage.agents = new List <int>(defaultNumAgents); sMessage.vectorObservations = new List <float>(defaultNumAgents * defaultNumObservations); sMessage.rewards = new List <float>(defaultNumAgents); sMessage.memories = new List <float>(defaultNumAgents * defaultNumObservations); sMessage.dones = new List <bool>(defaultNumAgents); sMessage.previousVectorActions = new List <float>(defaultNumAgents * defaultNumObservations); sMessage.previousTextActions = new List <string>(defaultNumAgents); sMessage.maxes = new List <bool>(defaultNumAgents); sMessage.textObservations = new List <string>(defaultNumAgents); // Initialize the list of brains the Communicator must listen to // Issue : This assumes all brains are broadcasting. foreach (string k in accParamerters.brainNames) { current_agents[k] = new List <Agent>(defaultNumAgents); hasSentState[k] = false; triedSendState[k] = false; } }
public void SpawnWalls(PersonalityQuarksArea area) { SpawnNumber = (int)AcademyParameters.Update(area.academy, SpawnNumberKeyVal, (int)SpawnNumber); SpawnDistance = AcademyParameters.Update(area.academy, SpawnDistanceKeyVal, SpawnDistance); for (int i = 0; i < SpawnNumber; i++) { SpawnWall(area, new Vector2(Random.Range(-SpawnDistance, SpawnDistance), Random.Range(-SpawnDistance, SpawnDistance))); } }
public override void Initialize(BaseAgent agent) { myArea = agent.gameObject.GetComponentInParent <Area>(); //TAG: MakeEvent myArea.Logger.Log(String.Concat("Found Area: ", myArea.StartY)); //TAG: MakeEvent myArea.Logger.Log(String.Concat("Found Pos: ", myArea.gameObject.transform.position.y)); agent.ColliderTags.Add(Tag); academy = agent.area.academy; Reward = AcademyParameters.FetchOrParse(academy, RewardKeyVal); ContinuousReward = AcademyParameters.FetchOrParse(academy, ContinuousRewardKeyVal); Penalty = AcademyParameters.FetchOrParse(academy, PenaltyKeyVal); }
public override void AddReward(BaseAgent agent, float[] vectorActions) { Mult = AcademyParameters.Update(academy, MultKeyVal, Mult); agent.TriggerCollider .Filter(tc => tc != null) .Filter(tc => tc.gameObject.tag == "consumable") .MatchSome(tc => { GameObject go = tc.gameObject; Consumable consumable = go.GetComponent <Consumable>(); agent.AddReward(consumable.value * Mult); SpawnDistance = AcademyParameters.Update(academy, SpawnDistanceKeyVal, SpawnDistance); Vector2 pos = new Vector2(Random.Range(-SpawnDistance, SpawnDistance), Random.Range(-SpawnDistance, SpawnDistance)); go.transform.position = new Vector3(pos.x, go.transform.position.y, pos.y); if (agent.area.EventSystem != null) { agent.area.EventSystem.RaiseEvent(ConsumableEvent.Create(agent.gameObject, consumable.value, tc.transform.position)); } }); }
public override void Reset(BaseAgent agent) { PlayAreaDistance = AcademyParameters.Update(academy, PlayAreaDistanceKeyVal, PlayAreaDistance); /* float spawn = PlayAreaDistance * 0.5f; */ /* float x = Random.Range(-halfdist, halfdist); */ /* x += halfdist * Mathf.Sign(x); */ /* float y = Random.Range(-halfdist, halfdist); */ /* y += halfdist * Mathf.Sign(y); */ Quaternion rotation = Quaternion.Euler(0, Random.Range(0, 360), 0); Vector3 polarPosition = rotation * new Vector3(0, 0, Random.Range(PlayAreaDistance * CenterDistance, PlayAreaDistance)); agent.transform.position = new Vector3(polarPosition.x, PositionY, polarPosition.z); agent.transform.rotation = Quaternion.identity; agent.transform.Rotate(0, Random.Range(0, 360), 0); if (agent.area.EventSystem != null) { agent.area.EventSystem.RaiseEvent(ResetEvent.Create(agent.gameObject)); agent.area.EventSystem.RaiseEvent(TransformEvent.Create(agent.gameObject)); } }
/// Sends Academy parameters to external agent private void SendParameters(AcademyParameters envParams) { string envMessage = NewJSon::Newtonsoft.Json.JsonConvert.SerializeObject(envParams, NewJSon::Newtonsoft.Json.Formatting.Indented); sender.Send(Encoding.ASCII.GetBytes(envMessage)); }
public override void AddReward(BaseAgent agent, float[] vectorActions) { Reward = AcademyParameters.Update(academy, RewardKeyVal, Reward); ContinuousReward = AcademyParameters.Update(academy, ContinuousRewardKeyVal, ContinuousReward); Penalty = AcademyParameters.Update(academy, PenaltyKeyVal, Penalty); float labelValue; switch (LabelValue) { case LabelValueType.Boolean: labelValue = 1; break; case LabelValueType.Time: labelValue = Time.time; break; default: labelValue = 0; break; } Option <GameObject> triggerColCont = agent.TriggerCollider .Filter(tc => tc != null) .Map(tc => tc.gameObject) .Filter(gob => gob.tag == Tag); Option <Collider> prevFrame = PreviousFrame.Filter(p => p != null); Option <GameObject> triggerCol = triggerColCont .Filter(tc => !tc.SomeNotNull().Equals(prevFrame.Map(p => p.gameObject))); triggerCol .MatchSome(_ => { if (AgentCollisionMessage != "") { //TAG: MakeEvent myArea.Logger.Log(Logger.CreateMessage(LogMessageType.Agent, AgentCollisionMessage), agent); } //TAG: MakeEvent myArea.Logger.Log(String.Concat("Tagged ", agent.transform.position.y)); }); triggerColCont.MatchSome(_ => { agent.AddReward(ContinuousReward); }); prevFrame .Filter(pc => triggerColCont.HasValue) .FlatMap(pc => pc.GetComponent <ObservableFields>().SomeNotNull()) .MatchSome(lc => { if (RemoveOnLeave) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Removing label on leave ", Label)); lc.FieldsHash.Remove(Label); } }); triggerCol .Map(tc => tc.gameObject) .MatchSome(go => { ObservableFields lc = go.GetComponent <ObservableFields>(); if ((lc == null || !lc.FieldsHash.ContainsKey(LabelPrevents)) && NewTag != "") { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Adding tag ", NewTag)); go.tag = NewTag; agent.area.EventSystem.RaiseEvent(TagEvent.Create(go)); agent.area.EventSystem.RaiseEvent(TaggingEvent.Create(agent.gameObject, NewTag)); } }); ObservableFields selfFields = agent.gameObject.GetComponent <ObservableFields>(); triggerCol .FlatMap(tc => tc.GetComponent <ObservableFields>().SomeNotNull()) .MatchSome(lc => { if (lc.FieldsHash.ContainsKey(Label) && Time.time - lc.FieldsHash[Label] < Cooldown ) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("already there ", Label)); if (Toggle) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Removing label ", Label)); lc.FieldsHash.Remove(Label); } //TAG: MakeEvent myArea.Logger.Log(String.Concat("Penalizing already there ", Penalty)); agent.AddReward(Penalty); if (DoneIfAlreadyThere) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Done already there ", agent.gameObject.tag)); agent.Done(); } if (ResetAreaIfAlreadyThere) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Resetting already there ", agent.gameObject.tag)); myArea.ResetArea(); } } else if (!lc.FieldsHash.ContainsKey(LabelPrevents) && !lc.FieldsHash.ContainsKey(Label) && (CooldownSelfTag == "" || selfFields == null || !selfFields.FieldsHash.ContainsKey(CooldownSelfTag) || Time.time - selfFields.FieldsHash[CooldownSelfTag] < Cooldown)) { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Adding reward ", Reward)); agent.AddReward(Reward); if (Label != "") { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Adding label ", Label)); lc.FieldsHash.Add(Label, labelValue); } } }); triggerCol .Filter((GameObject go) => Remove) .MatchSome(tc => GameObject.Destroy(tc)); triggerCol .Filter((GameObject go) => Done) .MatchSome(_ => agent.Done()); triggerCol .Filter((GameObject go) => Reset) .MatchSome(_ => { //TAG: MakeEvent myArea.Logger.Log(String.Concat("Reset on collide ", Tag)); agent.Reset(); }); triggerCol .Filter((GameObject go) => ResetArea) .MatchSome(_ => myArea.ResetArea()); PreviousFrame = agent.TriggerCollider; PreviousFrameTag = agent.gameObject.tag; }
public override void Initialize(BaseAgent agent) { academy = agent.area.academy; Amount = AcademyParameters.FetchOrParse(academy, AmountKeyVal); }
public override void AddReward(BaseAgent agent, float[] vectorAction) { Amount = AcademyParameters.Update(academy, AmountKeyVal, Amount); agent.AddReward(Amount / (float)agent.agentParameters.maxStep); }
public override void AddReward(BaseAgent agent, float[] vectorActions) { List <ObservableFields> LabelObjects = new List <ObservableFields>(); List <GameObject> objs = new List <GameObject>(); foreach (string tag in Tags) { objs.AddRange(myArea.FindGameObjectsWithTagInChildren(tag)); } foreach (GameObject obj in objs) { ObservableFields lobj = obj.GetComponent <ObservableFields>(); if (lobj != null) { LabelObjects.Add(lobj); } } Reward = AcademyParameters.Update(academy, RewardKeyVal, Reward); if (AddedLastRound.Contains(agent.gameObject.GetInstanceID())) { AddedLastRound.Remove(agent.gameObject.GetInstanceID()); if (AreaReset) { myArea.ResetArea(); } return; } bool allHaveTag = true; foreach (ObservableFields labels in LabelObjects) { foreach (string label in Labels) { allHaveTag &= labels.LabelsHash.Contains(label); } } if (allHaveTag) { // TAG: MakeEvent myArea.Logger.Log(String.Concat("All ", String.Join(",", Tags), " have labels ", String.Join(",", Labels), " Adding reward: ", Reward)); AddedLastRound.Add(agent.gameObject.GetInstanceID()); agent.AddReward(Reward * (MultRewardByTagCount ? objs.Count : 1)); if (Remove) { foreach (ObservableFields labels in LabelObjects) { foreach (string label in Labels) { labels.LabelsHash.Remove(label); } } } if (Reset) { agent.Done(); agent.Reset(); } } }
public override void Initialize(BaseAgent agent) { academy = agent.area.academy; Mult = AcademyParameters.FetchOrParse(academy, MultKeyVal); SpawnDistance = AcademyParameters.FetchOrParse(academy, SpawnDistanceKeyVal); }