コード例 #1
0
    public TeamsConfig(int numPlayers, Challenge.Type challengeType, int numEnvironmentReps, int numPlayerReps)
    {
        this.challengeType = challengeType;
        // Challenges might have required modules for environment (& agent?) genomes:
        // for example, go-to-target would REQUIRE having a target object in the environment
        Debug.Log("TeamsConfig() " + this.challengeType.ToString());
        // Teams:
        // Environment
        EnvironmentGenome templateEnvironmentGenome = GetDefaultTemplateEnvironmentGenome(challengeType);

        environmentPopulation = new EnvironmentPopulation(challengeType, templateEnvironmentGenome, numEnvironmentGenomes, numBaselineGenomes, 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);
            Debug.Log("TEMPLATE: " + templateAgentGenome.bodyGenome.ToString());
            // List of Agent Genomes
            PlayerPopulation player = new PlayerPopulation(challengeType, templateAgentGenome.bodyGenome, numAgentGenomesPerPlayer, numBaselineGenomes, numPlayerReps);

            playersList.Add(player);
        }
    }
コード例 #2
0
    private void BruteForceInit()
    {
        // REFACTOR THIS!!!!!!!!!!!!!!

        // Clear Everything:
        DeleteAllGameObjects();

        currentTimeStep = 0;
        gameWonOrLost   = false; // <-- revisit this shit
        //winnerPopIndex = -1; // <-- revisit this shit

        currentAgentsArray   = new Agent[currentEvalTicket.agentGenomesList.Count];
        agentGameScoresArray = new float[currentEvalTicket.agentGenomesList.Count][];
        for (int i = 0; i < agentGameScoresArray.Length; i++)
        {
            agentGameScoresArray[i] = new float[1];
        }

        // Create Environment:
        CreateEnvironment();

        // Create Agents:
        for (int i = 0; i < currentAgentsArray.Length; i++)
        {
            // Create Agent Base Body:
            GameObject agentGO = Instantiate(Resources.Load(AgentBodyGenomeTemplate.GetAgentBodyTypeURL(currentEvalTicket.agentGenomesList[i].bodyGenome.bodyType))) as GameObject;
            agentGO.transform.parent = gameObject.transform;
            //Debug.Log("null check: " + currentEvalTicket.environmentGenome.agentStartPositionsList.Count.ToString());
            agentGO.transform.localPosition = currentEvalTicket.environmentGenome.agentStartPositionsList[i].agentStartPosition;
            agentGO.transform.localRotation = currentEvalTicket.environmentGenome.agentStartPositionsList[i].agentStartRotation;
            Agent agentScript = agentGO.GetComponent <Agent>();
            agentScript.rootObject.GetComponent <Rigidbody>().centerOfMass = agentScript.rootCOM;
            agentScript.isVisible = visible;

            agentScript.InitializeAgentFromTemplate(currentEvalTicket.agentGenomesList[i]);

            currentAgentsArray[i] = agentScript;
        }

        // Create Challenge Instance:
        GameObject challengeGO = new GameObject("challenge" + challengeType.ToString());

        switch (challengeType)
        {
        case Challenge.Type.Test:
            ChallengeTest challengeTest = challengeGO.AddComponent <ChallengeTest>();
            currentChallenge = challengeTest;
            break;

        case Challenge.Type.Racing:
            ChallengeRacing challengeRacing = challengeGO.AddComponent <ChallengeRacing>();
            currentChallenge = challengeRacing;
            break;

        case Challenge.Type.Combat:
            ChallengeCombat challengeCombat = challengeGO.AddComponent <ChallengeCombat>();
            currentChallenge = challengeCombat;
            break;

        default:
            break;
        }
        challengeGO.transform.parent        = gameObject.transform;
        challengeGO.transform.localPosition = new Vector3(0f, 0f, 0f);

        // !!! RETHINK ROLE OF CHALLENGE CLASS!!!
        currentChallenge.agent       = currentAgentsArray[0]; // hacky to prevent error, hardcoded for Test challengeType
        currentChallenge.environment = currentEnvironment;
        //currentChallenge.HookUpModules(); // maybe do this through the modules themselves -- by passing relevant agent/environment info through function?

        /*if (isExhibition) {
         *  if(currentEvalTicket.environmentGenome.useAtmosphere) {
         *      Debug.Log("Wind: " + currentEvalTicket.environmentGenome.atmosphereGenome.windForce.ToString());
         *  }
         * }*/


        HookUpModules();

        //SetInvisibleTraverse(gameObject);
        if (visible)
        {
            currentEnvironment.AddRenderableContent(currentEvalTicket.environmentGenome);
            SetVisibleTraverse(gameObject);
            //Debug.Log("IS VISIBLE" + gameObject.name);
            //currentEnvironment.AddRenderableContent(teamsConfig.environmentPopulation.environmentGenomeList[currentEvalTicket.genomeIndices[0]]);
            //SetVisibleTraverse(gameObject);
        }
        else
        {
            SetInvisibleTraverse(gameObject);
        }

        if (isExhibition)
        {
        }
        else
        {
            // Fitness Crap only if NON-exhibition!:
            FitnessManager fitnessManager;
            int            genomeIndex;
            if (currentEvalTicket.focusPopIndex == 0)    // environment
            {
                fitnessManager = teamsConfig.environmentPopulation.fitnessManager;
                genomeIndex    = currentEvalTicket.environmentGenome.index;
            }
            else    // a player
            {
                fitnessManager = teamsConfig.playersList[currentEvalTicket.focusPopIndex - 1].fitnessManager;
                genomeIndex    = currentEvalTicket.agentGenomesList[currentEvalTicket.focusPopIndex - 1].index;
            }
            fitnessComponentEvaluationGroup = new FitnessComponentEvaluationGroup();
            // Creates a copy inside this, and also a copy in the FitnessManager, but they share refs to the FitComps themselves:
            //Debug.Log("focusPop: " + currentEvalTicket.focusPopIndex.ToString() + ", index: " + genomeIndex.ToString());
            fitnessComponentEvaluationGroup.CreateFitnessComponentEvaluationGroup(fitnessManager, genomeIndex);
            //Debug.Log("currentEvalTicket.focusPopIndex: " + currentEvalTicket.focusPopIndex.ToString() + ", index: " + currentEvalTicket.genomeIndices[currentEvalTicket.focusPopIndex].ToString());
            HookUpFitnessComponents();
        }
    }