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); } }
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(); } }