コード例 #1
0
ファイル: Agent.cs プロジェクト: eaclou/Rapid_Prototyping
    public void InitializeModules(AgentGenome genome, Agent agent, StartPositionGenome startPos)
    {
        testModule = new TestModule();
        testModule.Initialize(genome.bodyGenome.testModuleGenome, agent, startPos);


        /*
         * healthModuleList = new List<HealthModule>();
         * valueList = new List<InputValue>();
         *
         * for (int i = 0; i < genome.bodyGenome.healthModuleList.Count; i++) {
         *  HealthModule healthModule = new HealthModule();
         *  //agent.segmentList[genome.healthModuleList[i].parentID].AddComponent<HealthModuleComponent>();
         *  healthModule.Initialize(genome.bodyGenome.healthModuleList[i], agent);
         *  healthModuleList.Add(healthModule);
         *  //healthModuleList[i].Initialize(genome.healthModuleList[i]);
         * }
         * for (int i = 0; i < genome.bodyGenome.valueInputList.Count; i++) {
         *  InputValue inputValue = new InputValue();
         *  inputValue.Initialize(genome.bodyGenome.valueInputList[i], agent);
         *  valueList.Add(inputValue);
         *  //valueList[i].Initialize(genome.valueInputList[i]);
         * }
         */
    }
コード例 #2
0
    public void CopyGenomeFromTemplate(EnvironmentGenome templateGenome)
    {
        arenaBounds = new Vector3(templateGenome.arenaBounds.x, templateGenome.arenaBounds.y, templateGenome.arenaBounds.z);

        agentStartPositionsList = new List <StartPositionGenome>();
        for (int i = 0; i < templateGenome.agentStartPositionsList.Count; i++)
        {
            StartPositionGenome genomeCopy = new StartPositionGenome(templateGenome.agentStartPositionsList[i]);
            agentStartPositionsList.Add(genomeCopy);
        }
    }
コード例 #3
0
    public void StartNewTrainingMode()
    {
        Destroy(playerGO);

        // Create population brains
        agentGenomeList = new List <AgentGenome>();

        BodyGenome templateBodyGenome = new BodyGenome();

        templateBodyGenome.InitializeGenomeAsDefault();
        //BodyGenome bodyGenomeTemplate = new BodyGenome();
        //bodyGenomeTemplate.CopyBodyGenomeFromTemplate(bodyTemplate);

        for (int i = 0; i < trainingPopulationSize; i++)
        {
            AgentGenome newGenome = new AgentGenome(i);
            newGenome.InitializeBodyGenomeFromTemplate(templateBodyGenome);
            newGenome.InitializeRandomBrainFromCurrentBody(0.033f);
            agentGenomeList.Add(newGenome);
        }

        // CrossoverSettings:
        trainingSettingsManager = new TrainingSettingsManager(0.06f, 0.35f, 0.1f, 0.01f);
        GameObject dummyAgentGO = new GameObject("DummyAgent");

        dummyAgent       = dummyAgentGO.AddComponent <Agent>();
        dummyStartGenome = new StartPositionGenome(Vector3.zero, Quaternion.identity);

        ResetTrainingForNewGen();
        //Brain brain = new Brain()
        //Debug.Log(dummyAgent.testModule.);

        // Create Visible Display Agent to observe behavior

        /*displayStartPos = new StartPositionGenome(Vector3.zero, Quaternion.identity);
         * GameObject agentGO = Instantiate(Resources.Load("PredatorPrey/PredatorPrefab")) as GameObject; ; // GameObject.CreatePrimitive(PrimitiveType.Sphere);
         * //displayAgent
         * agentGO.name = "Guinea Pig";
         * //agentGO.transform.parent = gameObject.transform;
         * agentGO.transform.localPosition = displayStartPos.agentStartPosition;
         * agentGO.transform.localRotation = displayStartPos.agentStartRotation;
         * //agentGO.GetComponent<Collider>().enabled = false;
         * displayAgent = agentGO.AddComponent<Agent>();
         * displayAgent.isVisible = true;
         * displayAgent.InitializeAgentFromTemplate(agentGenomeList[0], displayStartPos);
         * // hook modules:
         * displayAgent.testModule.enemyTransform = targetGO.transform;
         * displayAgent.testModule.bias[0] = 1f;
         * displayAgent.testModule.enemyTestModule = displayAgent.testModule; // self as target, to zero out targetvel
         */
        ResetTrainingAgentAndEnvironment();
    }
コード例 #4
0
    public void CopyGenomeFromTemplate(EnvironmentGenome templateGenome)
    {
        //Debug.Log("CopyGenomeFromTemplate BEFORE startPosCount: " + templateGenome.agentStartPositionsList.Count.ToString());
        // This method creates a clone of the provided ScriptableObject Genome - should have no shared references!!!
        this.challengeType = templateGenome.challengeType;
        arenaBounds        = new Vector3(templateGenome.arenaBounds.x, templateGenome.arenaBounds.y, templateGenome.arenaBounds.z);

        agentStartPositionsList = new List <StartPositionGenome>();
        for (int i = 0; i < templateGenome.agentStartPositionsList.Count; i++)
        {
            //Debug.Log("CopyGenomeFromTemplate DURING i: " + i.ToString());
            StartPositionGenome genomeCopy = new StartPositionGenome(templateGenome.agentStartPositionsList[i]);
            agentStartPositionsList.Add(genomeCopy);
        }
        //Debug.Log("CopyGenomeFromTemplate AFTER startPosCount: " + agentStartPositionsList.Count.ToString());

        useTerrain = templateGenome.useTerrain;
        if (useTerrain)
        {
            terrainGenome = new TerrainGenome(templateGenome.terrainGenome);
            //terrainGenome.InitializeRandomGenome();
        }
        useBasicObstacles = templateGenome.useBasicObstacles;
        if (useBasicObstacles)
        {
            basicObstaclesGenome = new BasicObstaclesGenome(templateGenome.basicObstaclesGenome, this);
            //basicObstaclesGenome.InitializeRandomGenome();
        }
        useTargetColumn = templateGenome.useTargetColumn;
        if (useTargetColumn)
        {
            targetColumnGenome = new TargetColumnGenome();
            //targetColumnGenome.InitializeRandomGenome();
        }
        useAtmosphere = templateGenome.useAtmosphere;
        if (useAtmosphere)
        {
            atmosphereGenome = new AtmosphereGenome(templateGenome.atmosphereGenome);
            //basicObstaclesGenome.InitializeRandomGenome();
        }
        useMeteorites = templateGenome.useMeteorites;
        if (useMeteorites)
        {
            meteoritesGenome = new MeteoritesGenome(templateGenome.meteoritesGenome);
            //basicObstaclesGenome.InitializeRandomGenome();
        }

        // For now this is fine -- but eventually might want to copy brainGenome from saved asset!
        //brainGenome = new BrainGenome();  // creates neuron and axonLists
        //InitializeRandomBrainGenome();
    }
コード例 #5
0
    public void InitializeAsDefaultGenome()
    {
        // ARENA BOUNDS IRRELEVANT!!!
        // Currently hardcoded in:
        //  EvaluationManager --> CreateEvaluationInstances()
        arenaBounds = new Vector3(40f, 40f, 40f);

        agentStartPositionsList = new List <StartPositionGenome>();
        StartPositionGenome player1Start = new StartPositionGenome(new Vector3(0f, -5f, 0f), Quaternion.identity);
        StartPositionGenome player2Start = new StartPositionGenome(new Vector3(0f, 5f, 0f), Quaternion.identity);

        agentStartPositionsList.Add(player1Start);
        agentStartPositionsList.Add(player2Start);
    }
コード例 #6
0
ファイル: Agent.cs プロジェクト: eaclou/Rapid_Prototyping
    public void InitializeAgentFromTemplate(AgentGenome genome, StartPositionGenome startPos)
    {
        // Initialize Modules --
        //Debug.Log("Agent Initialize Modules() segment count: " + segmentList.Count.ToString() + ", visCount: " + visibleObjectList.Count.ToString());
        // -- Setup that used to be done in the constructors
        InitializeModules(genome, this, startPos);

        // Visible/Non-Visible:
        //if (isVisible) {
        //    for (int i = 0; i < visibleObjectList.Count; i++) {
        //        visibleObjectList[i].SetActive(true);
        //    }
        //}
        // Construct Brain:
        brain = new Brain(genome.brainGenome, this);
    }
コード例 #7
0
    public void Initialize(TestModuleGenome genome, Agent agent, StartPositionGenome startPos)
    {
        //destroyed = false;
        bias    = new float[1];
        bias[0] = 1f;

        ownPosX    = new float[1];
        ownPosX[0] = startPos.agentStartPosition.x;
        ownPosY    = new float[1];
        ownPosY[0] = startPos.agentStartPosition.y;
        ownVelX    = new float[1];
        ownVelY    = new float[1];

        enemyPosX = new float[1];
        enemyPosY = new float[1];
        enemyVelX = new float[1];
        enemyVelY = new float[1];
        enemyDirX = new float[1];
        enemyDirY = new float[1];

        distLeft  = new float[1];
        distRight = new float[1];
        distUp    = new float[1];
        distDown  = new float[1];

        throttleX = new float[1];
        throttleY = new float[1];

        maxSpeed = genome.maxSpeed;
        accel    = genome.accel;
        radius   = genome.radius;

        //maxHealth = genome.maxHealth;
        //health = maxHealth;
        //prevHealth = health;

        parentID = genome.parentID;
        inno     = genome.inno;
        //isVisible = agent.isVisible;

        //component = agent.segmentList[parentID].AddComponent<HealthModuleComponent>();
        //if (component == null) {
        //    Debug.LogAssertion("No existing HealthModuleComponent on segment " + parentID.ToString());
        //}
        //component.healthModule = this;
    }
コード例 #8
0
    void Start()
    {
        if (spawnZonesList == null)
        {
            return;
        }

        foodStartGenomesArray = new StartPositionGenome[spawnZonesList.Count];

        for (int i = 0; i < spawnZonesList.Count; i++)
        {
            Vector3             parentForward  = spawnZonesList[i].transform.up;
            Vector3             startPos       = new Vector3(spawnZonesList[i].transform.position.x, spawnZonesList[i].transform.position.y, 0f) + parentForward * 0.5f;
            StartPositionGenome startPosGenome = new StartPositionGenome(startPos, Quaternion.identity);
            foodStartGenomesArray[i] = startPosGenome;
        }
    }
コード例 #9
0
    private void EnvironmentCrossover()
    {
        /*int randStart = UnityEngine.Random.Range(0, 4);
         * if(randStart == 0) {
         *  StartPositionGenome newStart0 = new StartPositionGenome(new Vector3(-5f, 0f, 0f), Quaternion.identity);
         *  StartPositionGenome newStart1 = new StartPositionGenome(new Vector3(5f, 0f, 0f), Quaternion.identity);
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[0] = newStart0;
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[1] = newStart1;
         * }
         * else if(randStart == 1) {
         *  StartPositionGenome newStart0 = new StartPositionGenome(new Vector3(5f, 0f, 0f), Quaternion.identity);
         *  StartPositionGenome newStart1 = new StartPositionGenome(new Vector3(-5f, 0f, 0f), Quaternion.identity);
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[0] = newStart0;
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[1] = newStart1;
         * }
         * else if (randStart == 2) {
         *  StartPositionGenome newStart0 = new StartPositionGenome(new Vector3(0f, -5f, 0f), Quaternion.identity);
         *  StartPositionGenome newStart1 = new StartPositionGenome(new Vector3(0f, 5f, 0f), Quaternion.identity);
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[0] = newStart0;
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[1] = newStart1;
         * }
         * else {
         *  StartPositionGenome newStart0 = new StartPositionGenome(new Vector3(0f, 5f, 0f), Quaternion.identity);
         *  StartPositionGenome newStart1 = new StartPositionGenome(new Vector3(0f, -5f, 0f), Quaternion.identity);
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[0] = newStart0;
         *  teamsConfig.environmentPopulation.environmentGenomeList[0].agentStartPositionsList[1] = newStart1;
         * }*/
        for (int e = 0; e < teamsConfig.environmentPopulation.environmentGenomeList.Count; e++)
        {
            float randAngleRad            = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI);
            float randRadius              = UnityEngine.Random.Range(2.5f, 7.5f);
            StartPositionGenome newStart0 = new StartPositionGenome(new Vector3(Mathf.Cos(randAngleRad) * randRadius, Mathf.Sin(randAngleRad) * randRadius, 0f), Quaternion.identity);
            StartPositionGenome newStart1 = new StartPositionGenome(new Vector3(Mathf.Cos(randAngleRad + Mathf.PI) * randRadius, Mathf.Sin(randAngleRad + Mathf.PI) * randRadius, 0f), Quaternion.identity);
            teamsConfig.environmentPopulation.environmentGenomeList[e].agentStartPositionsList[0] = newStart0;
            teamsConfig.environmentPopulation.environmentGenomeList[e].agentStartPositionsList[1] = newStart1;
        }


        /*
         * List<EnvironmentGenome> newGenGenomeList = new List<EnvironmentGenome>(); // new population!
         *
         * FitnessManager fitnessManager = teamsConfig.environmentPopulation.fitnessManager;
         * TrainingSettingsManager trainingSettingsManager = teamsConfig.environmentPopulation.trainingSettingsManager;
         * float mutationChance = trainingSettingsManager.mutationChance;
         * float mutationStepSize = trainingSettingsManager.mutationStepSize;
         *
         * // Keep top-half peformers + mutations:
         * for (int x = 0; x < teamsConfig.environmentPopulation.environmentGenomeList.Count; x++) {
         *  if (false) { //x == 0) {
         *      // Top performer stays
         *      EnvironmentGenome parentGenome = teamsConfig.environmentPopulation.environmentGenomeList[fitnessManager.rankedIndicesList[x]];
         *      parentGenome.index = 0;
         *      newGenGenomeList.Add(parentGenome);
         *  }
         *  else {
         *      int parentIndex = fitnessManager.GetAgentIndexByLottery();
         *
         *      EnvironmentGenome parentGenome = teamsConfig.environmentPopulation.environmentGenomeList[parentIndex];
         *      EnvironmentGenome newGenome = parentGenome.BirthNewGenome(parentGenome, newGenGenomeList.Count, teamsConfig.challengeType, mutationChance, mutationStepSize);
         *
         *      newGenGenomeList.Add(newGenome);
         *  }
         * }
         *
         * for (int i = 0; i < teamsConfig.environmentPopulation.environmentGenomeList.Count; i++) {
         *  teamsConfig.environmentPopulation.environmentGenomeList[i] = newGenGenomeList[i];
         * }
         */
    }
コード例 #10
0
ファイル: TestModule.cs プロジェクト: eaclou/Evolution
    public void Initialize(TestModuleGenome genome, Agent agent, StartPositionGenome startPos)
    {
        ownRigidBody2D = agent.GetComponent <Rigidbody2D>();
        bias           = new float[1];  //0
        foodPosX       = new float[1];  //1
        foodPosY       = new float[1];  // 2
        foodDirX       = new float[1];  // 3
        foodDirY       = new float[1];  // 4
        foodTypeR      = new float[1];  // 5
        foodTypeG      = new float[1];  // 6
        foodTypeB      = new float[1];  // 7

        friendPosX = new float[1];      // 8
        friendPosY = new float[1];      // 9
        friendVelX = new float[1];      // 10
        friendVelY = new float[1];      // 11
        friendDirX = new float[1];      // 12
        friendDirY = new float[1];      // 13

        enemyPosX = new float[1];       // 14
        enemyPosY = new float[1];       // 15
        enemyVelX = new float[1];       // 16
        enemyVelY = new float[1];       // 17
        enemyDirX = new float[1];       // 18
        enemyDirY = new float[1];       // 19

        ownVelX       = new float[1];   // 20
        ownVelY       = new float[1];   // 21
        temperature   = new float[1];   // 22
        pressure      = new float[1];   // 23
        isContact     = new float[1];   // 24
        contactForceX = new float[1];   // 25
        contactForceY = new float[1];   // 26
        hitPoints     = new float[1];   // 27
        stamina       = new float[1];   // 28
        foodAmountR   = new float[1];   // 29
        foodAmountG   = new float[1];   // 30
        foodAmountB   = new float[1];   // 31

        distUp          = new float[1]; // 32 // start up and go clockwise!
        distTopRight    = new float[1]; // 33
        distRight       = new float[1]; // 34
        distBottomRight = new float[1]; // 35
        distDown        = new float[1]; // 36
        distBottomLeft  = new float[1]; // 37
        distLeft        = new float[1]; // 38
        distTopLeft     = new float[1]; // 39

        inComm0 = new float[1];         // 40
        inComm1 = new float[1];         // 41
        inComm2 = new float[1];         // 42
        inComm3 = new float[1];         // 43
        // 44 Total Inputs

        throttleX = new float[1]; // 0
        throttleY = new float[1]; // 1
        dash      = new float[1]; // 2
        outComm0  = new float[1]; // 3
        outComm1  = new float[1]; // 4
        outComm2  = new float[1]; // 5
        outComm3  = new float[1]; // 6
        // 7 Total Outputs

        //maxHealth = genome.maxHealth;
        //health = maxHealth;
        //prevHealth = health;

        bias[0]        = 1f;
        foodAmountR[0] = 0.5f;
        foodAmountG[0] = 0.5f;
        foodAmountB[0] = 0.5f;

        hitPoints[0] = 1f;
        stamina[0]   = 1f;

        //if(genome!= null) {
        //    Debug.Log("!null -- genome.parentID" + genome.parentID.ToString());
        //}
        //Debug.Log("genome.parentID" + genome.parentID.ToString());
        parentID = genome.parentID;
        inno     = genome.inno;
        //isVisible = agent.isVisible;

        //component = agent.segmentList[parentID].AddComponent<HealthModuleComponent>();
        //if (component == null) {
        //    Debug.LogAssertion("No existing HealthModuleComponent on segment " + parentID.ToString());
        //}
        //component.healthModule = this;
    }
コード例 #11
0
 public StartPositionGenome(StartPositionGenome templateGenome)
 {
     agentStartPosition = new Vector3(templateGenome.agentStartPosition.x, templateGenome.agentStartPosition.y, templateGenome.agentStartPosition.z);
     agentStartRotation = new Quaternion(templateGenome.agentStartRotation.x, templateGenome.agentStartRotation.y, templateGenome.agentStartRotation.z, templateGenome.agentStartRotation.w);
 }
コード例 #12
0
    public void ResetTrainingAgentAndEnvironment()
    {
        // Spawn Player & Target Randomly
        float   randomAngle  = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI);
        float   randomRadius = UnityEngine.Random.Range(minSpawnRadius, maxSpawnRadius);
        Vector3 displayPos   = new Vector3(Mathf.Cos(randomAngle) * randomRadius, Mathf.Sin(randomAngle) * randomRadius, 0f);
        Vector3 targetPos    = new Vector3(Mathf.Cos(randomAngle + Mathf.PI) * randomRadius, Mathf.Sin(randomAngle + Mathf.PI) * randomRadius, 0f);

        BodyGenome templateBodyGenome = new BodyGenome();

        templateBodyGenome.InitializeGenomeAsDefault();
        AgentGenome newGenome = new AgentGenome(-1);

        newGenome.InitializeBodyGenomeFromTemplate(templateBodyGenome);
        newGenome.InitializeRandomBrainFromCurrentBody(0.0f);

        if (displayGO != null)
        {
            Destroy(displayGO); // NOT IDEAL
        }
        displayGO    = Instantiate(Resources.Load("PredatorPrey/PredatorPrefab")) as GameObject;
        displayAgent = displayGO.AddComponent <Agent>();
        displayAgent.humanControlled = false;
        StartPositionGenome displayStartPos = new StartPositionGenome(displayPos, Quaternion.identity);

        displayGO.transform.position = displayPos;

        if (targetGO != null)
        {
            Destroy(targetGO); // NOT IDEAL
        }
        targetGO    = Instantiate(Resources.Load("PredatorPrey/PreyPrefab")) as GameObject;
        targetAgent = targetGO.AddComponent <Agent>();
        targetAgent.humanControlled = false;
        StartPositionGenome targetStartPos = new StartPositionGenome(targetPos, Quaternion.identity);

        targetGO.transform.position = targetPos;

        // Hook-Ups PLAYER:
        displayAgent.isVisible = true;
        displayAgent.InitializeAgentFromTemplate(agentGenomeList[0], displayStartPos);  // creates TestModule
        // Hook-Ups TARGET:
        targetAgent.isVisible = true;
        targetAgent.InitializeAgentFromTemplate(newGenome, targetStartPos);  // creates TestModule

        // hook modules PLAYER:
        displayAgent.testModule.ownRigidBody2D  = displayGO.GetComponent <Rigidbody2D>();
        displayAgent.testModule.bias[0]         = 1f;
        displayAgent.testModule.enemyTestModule = targetAgent.testModule; // self as target, to zero out targetvel
        // hook modules TARGET:
        targetAgent.testModule.ownRigidBody2D  = targetGO.GetComponent <Rigidbody2D>();
        targetAgent.testModule.bias[0]         = 1f;
        targetAgent.testModule.enemyTestModule = displayAgent.testModule; // self as target, to zero out targetvel

        /*
         * // Spawn Player & Target Randomly
         * float randomAngle = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI);
         * float randomRadius = UnityEngine.Random.Range(minSpawnRadius, maxSpawnRadius);
         * Vector3 playerPos = new Vector3(Mathf.Cos(randomAngle) * randomRadius, Mathf.Sin(randomAngle) * randomRadius, 0f);
         * Vector3 targetPos = new Vector3(Mathf.Cos(randomAngle + Mathf.PI) * randomRadius, Mathf.Sin(randomAngle + Mathf.PI) * randomRadius, 0f);
         * targetGO.transform.position = targetPos;
         *
         * displayStartPos = new StartPositionGenome(playerPos, Quaternion.identity);
         * GameObject agentGO;
         * if (displayAgent == null) {
         *  agentGO = GameObject.CreatePrimitive(PrimitiveType.Sphere);
         *  displayAgent = agentGO.AddComponent<Agent>();
         * }
         * else {
         *  agentGO = displayAgent.gameObject;
         * }
         * //displayAgent
         * agentGO.name = "Guinea Pig";
         * agentGO.transform.parent = gameObject.transform;
         * agentGO.transform.localPosition = displayStartPos.agentStartPosition;
         * agentGO.transform.localRotation = displayStartPos.agentStartRotation;
         * //agentGO.GetComponent<Collider>().enabled = false;
         * displayAgent.isVisible = true;
         * displayAgent.InitializeAgentFromTemplate(agentGenomeList[0], displayStartPos);
         * // hook modules:
         * displayAgent.testModule.enemyTransform = targetGO.transform;
         * displayAgent.testModule.bias[0] = 1f;
         * displayAgent.testModule.enemyTestModule = displayAgent.testModule;
         */
    }
コード例 #13
0
    public void StartNewDataCollectionRound()
    {
        curTimeStep = 0;
        imitationUI.TogglePause();

        // Spawn Player & Target Randomly
        float   randomAngle  = UnityEngine.Random.Range(-Mathf.PI, Mathf.PI);
        float   randomRadius = UnityEngine.Random.Range(minSpawnRadius, maxSpawnRadius);
        Vector3 playerPos    = new Vector3(Mathf.Cos(randomAngle) * randomRadius, Mathf.Sin(randomAngle) * randomRadius, 0f);
        Vector3 targetPos    = new Vector3(Mathf.Cos(randomAngle + Mathf.PI) * randomRadius, Mathf.Sin(randomAngle + Mathf.PI) * randomRadius, 0f);

        BodyGenome templateBodyGenome = new BodyGenome();

        templateBodyGenome.InitializeGenomeAsDefault();
        AgentGenome newGenome = new AgentGenome(-1);

        newGenome.InitializeBodyGenomeFromTemplate(templateBodyGenome);
        newGenome.InitializeRandomBrainFromCurrentBody(0.0f);

        if (playerGO == null)
        {
            //ResetTrainingForNewGen();
            // Create Visible Display Agent to observe behavior
            //displayStartPos = new StartPositionGenome(Vector3.zero, Quaternion.identity);
            //playerGO.transform.localPosition = displayStartPos.agentStartPosition;
            //playerGO.transform.localRotation = displayStartPos.agentStartRotation;
        }
        else
        {
            //playerGO.transform.position = playerPos;
            Destroy(playerGO); // NOT IDEAL
        }
        // Instantiate Player (Predator) Human-Controlled:
        playerGO    = Instantiate(Resources.Load("PredatorPrey/PredatorPrefab")) as GameObject;
        playerAgent = playerGO.AddComponent <Agent>();
        playerAgent.humanControlled = true;
        StartPositionGenome playerStartPos = new StartPositionGenome(playerPos, Quaternion.identity);

        playerGO.transform.position = playerPos;

        if (targetGO == null)
        {
            //targetGO = Instantiate(Resources.Load("PredatorPrey/PreyPrefab")) as GameObject;
            //targetGO.transform.position = targetPos;
        }
        else
        {
            //targetGO.transform.position = targetPos;
            Destroy(targetGO); // NOT IDEAL
        }
        targetGO    = Instantiate(Resources.Load("PredatorPrey/PreyPrefab")) as GameObject;
        targetAgent = targetGO.AddComponent <Agent>();
        targetAgent.humanControlled = false;
        StartPositionGenome targetStartPos = new StartPositionGenome(targetPos, Quaternion.identity);

        targetGO.transform.position = targetPos;



        // Hook-Ups PLAYER:
        playerAgent.isVisible = true;
        playerAgent.InitializeAgentFromTemplate(newGenome, playerStartPos);  // creates TestModule
        // Hook-Ups TARGET:
        targetAgent.isVisible = true;
        targetAgent.InitializeAgentFromTemplate(newGenome, targetStartPos);  // creates TestModule

        // hook modules PLAYER:
        playerAgent.testModule.ownRigidBody2D  = playerGO.GetComponent <Rigidbody2D>();
        playerAgent.testModule.bias[0]         = 1f;
        playerAgent.testModule.enemyTestModule = targetAgent.testModule; // self as target, to zero out targetvel
        // hook modules TARGET:
        targetAgent.testModule.ownRigidBody2D  = targetGO.GetComponent <Rigidbody2D>();
        targetAgent.testModule.bias[0]         = 1f;
        targetAgent.testModule.enemyTestModule = playerAgent.testModule; // self as target, to zero out targetvel
    }