Ejemplo n.º 1
0
    /// 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();
    }
Ejemplo n.º 2
0
 public override void Initialize(BaseAgent agent)
 {
     base.Initialize(agent);
     PositionY        = agent.gameObject.transform.position.y;
     academy          = agent.area.academy;
     PlayAreaDistance = AcademyParameters.FetchOrParse(academy, PlayAreaDistanceKeyVal);
 }
Ejemplo n.º 3
0
    public override void Initialize(BaseAgent agent)
    {
        academy = agent.area.academy;
        Reward  = AcademyParameters.FetchOrParse(academy, RewardKeyVal);

        myArea = agent.gameObject.GetComponentInParent <PersonalityQuarksArea>();
    }
Ejemplo n.º 4
0
    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);
        }
    }
Ejemplo n.º 5
0
    /// 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);
    }
Ejemplo n.º 6
0
    // 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);
    }
Ejemplo n.º 7
0
    /// 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);
    }
Ejemplo n.º 8
0
    /// 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);
    }
Ejemplo n.º 9
0
    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;
                }
            }
        }
    }
Ejemplo n.º 10
0
    /// 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;
        }
    }
Ejemplo n.º 11
0
    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)));
        }
    }
Ejemplo n.º 12
0
    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);
    }
Ejemplo n.º 13
0
    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));
            }
        });
    }
Ejemplo n.º 14
0
    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));
        }
    }
Ejemplo n.º 15
0
    /// 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));
    }
Ejemplo n.º 16
0
    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;
    }
Ejemplo n.º 17
0
 public override void Initialize(BaseAgent agent)
 {
     academy = agent.area.academy;
     Amount  = AcademyParameters.FetchOrParse(academy, AmountKeyVal);
 }
Ejemplo n.º 18
0
 public override void AddReward(BaseAgent agent, float[] vectorAction)
 {
     Amount = AcademyParameters.Update(academy, AmountKeyVal, Amount);
     agent.AddReward(Amount / (float)agent.agentParameters.maxStep);
 }
Ejemplo n.º 19
0
    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();
            }
        }
    }
Ejemplo n.º 20
0
 public override void Initialize(BaseAgent agent)
 {
     academy       = agent.area.academy;
     Mult          = AcademyParameters.FetchOrParse(academy, MultKeyVal);
     SpawnDistance = AcademyParameters.FetchOrParse(academy, SpawnDistanceKeyVal);
 }