Exemple #1
0
    public TeamsConfig(int numPlayers, int numEnvironmentReps, int numPlayerReps)
    {
        //EnvironmentGenome templateEnvironmentGenome = GetDefaultTemplateEnvironmentGenome(challengeType);
        EnvironmentGenome templateEnvironmentGenome = new EnvironmentGenome(-1);

        templateEnvironmentGenome.InitializeAsDefaultGenome();  // Temporary hacky solution

        environmentPopulation = new EnvironmentPopulation(templateEnvironmentGenome, numEnvironmentGenomes, numEnvironmentReps);

        // Players:
        playersList = new List <PlayerPopulation>();
        for (int i = 0; i < numPlayers; i++)
        {
            // Might have to revisit how to pass agent templates per population...
            //AgentBodyGenomeTemplate templateAgentGenome = GetDefaultTemplateAgentGenome(challengeType);
            // Temporary hack solution:
            BodyGenome templateBodyGenome = new BodyGenome();
            templateBodyGenome.InitializeGenomeAsDefault();
            if (i == 0f)
            {
                templateBodyGenome.testModuleGenome.maxSpeed = 0.25f;
                templateBodyGenome.testModuleGenome.accel    = 0.025f;
            }
            else
            {
                templateBodyGenome.testModuleGenome.maxSpeed = 1f;
                templateBodyGenome.testModuleGenome.accel    = 0.35f;
            }

            // List of Agent Genomes
            PlayerPopulation player = new PlayerPopulation(i, templateBodyGenome, numAgentGenomesPerPlayer, numPlayerReps);

            playersList.Add(player);
        }
    }
Exemple #2
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();
    }
Exemple #3
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;
         */
    }
Exemple #4
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
    }