private AgentBodyGenomeTemplate GetDefaultTemplateAgentGenome(Challenge.Type challengeType) { AgentBodyGenomeTemplate templateGenome; switch (challengeType) { case Challenge.Type.Test: templateGenome = Resources.Load("Templates/Agents/TemplateSnakeA") as AgentBodyGenomeTemplate; //templateGenome = ((AgentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Agents/TemplateTelevisionWalker.asset", typeof(AgentGenomeTemplate))); break; case Challenge.Type.Racing: //Debug.Log("Loaded DogCar!"); templateGenome = Resources.Load("Templates/Agents/TemplateDogCar") as AgentBodyGenomeTemplate; //templateGenome = ((AgentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Agents/TemplateDogCar.asset", typeof(AgentGenomeTemplate))); break; case Challenge.Type.Combat: templateGenome = Resources.Load("Templates/Agents/TemplateCombat2") as AgentBodyGenomeTemplate; //templateGenome = ((AgentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Agents/TemplateCombatBot.asset", typeof(AgentGenomeTemplate))); break; default: Debug.LogError("ChallengeType Not Found! " + challengeType.ToString()); templateGenome = null; break; } return(templateGenome); }
private void SetUpDefaultFitnessComponents(Challenge.Type challengeType, FitnessManager fitnessManager) { switch (challengeType) { case Challenge.Type.Test: FitnessComponentDefinition newComponent = new FitnessComponentDefinition(FitnessComponentType.Random, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(newComponent); break; case Challenge.Type.Racing: FitnessComponentDefinition newComponentRacing = new FitnessComponentDefinition(FitnessComponentType.Random, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(newComponentRacing); break; case Challenge.Type.Combat: FitnessComponentDefinition newComponentCombat = new FitnessComponentDefinition(FitnessComponentType.Random, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(newComponentCombat); break; default: Debug.LogError("ChallengeType Not Found! " + challengeType.ToString()); break; } fitnessManager.SetPendingFitnessListFromMaster(); // make pending list a copy of the primary }
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); } }
/*public void ReloadAgentTemplates() { * // Players: * for (int i = 0; i < playersList.Count; i++) { * // Might have to revisit how to pass agent templates per population... * AgentGenomeTemplate templateAgentGenome = GetDefaultTemplateAgentGenome(challengeType); * playersList[i].templateGenome = templateAgentGenome.templateGenome; * } * }*/ private EnvironmentGenome GetDefaultTemplateEnvironmentGenome(Challenge.Type challengeType) { EnvironmentGenome templateGenome; switch (challengeType) { case Challenge.Type.Test: templateGenome = (Resources.Load("Templates/Environments/TemplateTestDefault2") as EnvironmentGenomeTemplate).templateGenome; //templateGenome = ((EnvironmentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Environments/TemplateTestDefault.asset", typeof(EnvironmentGenomeTemplate))).templateGenome; break; case Challenge.Type.Racing: templateGenome = (Resources.Load("Templates/Environments/TemplateRacingDefault") as EnvironmentGenomeTemplate).templateGenome; //templateGenome = ((EnvironmentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Environments/TemplateRacingDefault.asset", typeof(EnvironmentGenomeTemplate))).templateGenome; break; case Challenge.Type.Combat: templateGenome = (Resources.Load("Templates/Environments/TemplateCombatDefault") as EnvironmentGenomeTemplate).templateGenome; //templateGenome = ((EnvironmentGenomeTemplate)AssetDatabase.LoadAssetAtPath("Assets/Templates/Environments/TemplateCombatDefault.asset", typeof(EnvironmentGenomeTemplate))).templateGenome; break; default: Debug.LogError("ChallengeType Not Found! " + challengeType.ToString()); templateGenome = null; break; } return(templateGenome); }
public static Vector3 GetChallengeArenaBounds(Challenge.Type challengeType) { Vector3 arenaBounds = new Vector3(10f, 10f, 10f); switch (challengeType) { case Challenge.Type.Test: arenaBounds.x = 40f; arenaBounds.y = 40f; arenaBounds.z = 40f; break; case Challenge.Type.Racing: arenaBounds.x = 40f; arenaBounds.y = 40f; arenaBounds.z = 40f; break; case Challenge.Type.Combat: arenaBounds.x = 40f; arenaBounds.y = 40f; arenaBounds.z = 40f; break; default: //print("default"); break; } return(arenaBounds); }
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(); }
private void SetUpDefaultFitnessComponents(Challenge.Type challengeType, FitnessManager fitnessManager) { switch (challengeType) { case Challenge.Type.Test: //FitnessComponentDefinition fitTest1 = new FitnessComponentDefinition(FitnessComponentType.WinLoss, FitnessComponentMeasure.Last, 1f, true); //fitnessManager.fitnessComponentDefinitions.Add(fitTest1); //FitnessComponentDefinition fitTest2 = new FitnessComponentDefinition(FitnessComponentType.DistanceToTargetSquared, FitnessComponentMeasure.Avg, 1f, false); //fitnessManager.fitnessComponentDefinitions.Add(fitTest2); FitnessComponentDefinition fitTest1 = new FitnessComponentDefinition(FitnessComponentType.ContactHazard, FitnessComponentMeasure.Avg, 1f, false); fitnessManager.fitnessComponentDefinitions.Add(fitTest1); FitnessComponentDefinition fitTest2 = new FitnessComponentDefinition(FitnessComponentType.DistToOrigin, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitTest2); FitnessComponentDefinition fitTest3 = new FitnessComponentDefinition(FitnessComponentType.Velocity, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitTest3); break; case Challenge.Type.Racing: FitnessComponentDefinition fitCompRacing1 = new FitnessComponentDefinition(FitnessComponentType.ContactHazard, FitnessComponentMeasure.Avg, 1f, false); fitnessManager.fitnessComponentDefinitions.Add(fitCompRacing1); FitnessComponentDefinition fitCompRacing2 = new FitnessComponentDefinition(FitnessComponentType.Velocity, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitCompRacing2); break; case Challenge.Type.Combat: FitnessComponentDefinition fitCompCombat1 = new FitnessComponentDefinition(FitnessComponentType.Random, FitnessComponentMeasure.Avg, 0.1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitCompCombat1); FitnessComponentDefinition fitCompCombat2 = new FitnessComponentDefinition(FitnessComponentType.Health, FitnessComponentMeasure.Avg, 0.5f, true); fitnessManager.fitnessComponentDefinitions.Add(fitCompCombat2); FitnessComponentDefinition fitCompCombat3 = new FitnessComponentDefinition(FitnessComponentType.DamageInflicted, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitCompCombat3); FitnessComponentDefinition fitCompCombat4 = new FitnessComponentDefinition(FitnessComponentType.WinLoss, FitnessComponentMeasure.Avg, 1f, true); fitnessManager.fitnessComponentDefinitions.Add(fitCompCombat4); break; default: Debug.LogError("ChallengeType Not Found! " + challengeType.ToString()); break; } fitnessManager.SetPendingFitnessListFromMaster(); // make pending list a copy of the primary }
// First-time Initialization -- triggered through gameManager & GUI public void NewTrainingMode(Challenge.Type challengeType) { this.challengeType = challengeType; // Initialize int numPlayers = 1; switch (this.challengeType) { case Challenge.Type.Test: Debug.Log("Switch: Test"); numPlayers = 1; break; case Challenge.Type.Racing: Debug.Log("Switch: Racing"); numPlayers = 1; break; case Challenge.Type.Combat: Debug.Log("Switch: Combat"); numPlayers = 2; break; default: Debug.Log("Switch: Default"); break; } // environment is evolvable, 1 player: teamsConfig = new TeamsConfig(numPlayers, this.challengeType, 1, 1); playingCurGen = 0; evaluationManager = new EvaluationManager(); // Need to make sure all populations have their representatives set up before calling this: // Right now this is done through the teamsConfig Constructor evaluationManager.InitializeNewTraining(teamsConfig, challengeType); // should I just roll this into the Constructor? isTraining = true; //cameraEnabled = true; gameManager.uiManager.panelTraining.moduleViewUI.SetPendingGenomesFromData(this); }
// Representative system will be expanded later - for now, just defaults to Top # of performers public PlayerPopulation(Challenge.Type challengeType, BodyGenome bodyTemplate, int numGenomes, int numBaseline, int numReps) { bodyGenomeTemplate = new BodyGenome(); bodyGenomeTemplate.CopyBodyGenomeFromTemplate(bodyTemplate); graphKing = new TheGraphKing(); popSize = numGenomes; this.numBaseline = numBaseline; // Create blank AgentGenomes for the standard population agentGenomeList = new List <AgentGenome>(); historicGenomePool = new List <AgentGenome>(); baselineGenomePool = new List <AgentGenome>(); for (int j = 0; j < numGenomes; j++) { AgentGenome agentGenome = new AgentGenome(j); agentGenome.InitializeBodyGenomeFromTemplate(bodyGenomeTemplate); agentGenome.InitializeRandomBrainFromCurrentBody(0.0f); agentGenomeList.Add(agentGenome); } RepopulateBaselineGenomes(); AppendBaselineGenomes(); // Representatives: numPerformanceReps = numReps; ResetRepresentativesList(); historicGenomePool.Add(agentGenomeList[0]); // init fitnessManager = new FitnessManager(); SetUpDefaultFitnessComponents(challengeType, fitnessManager); fitnessManager.ResetHistoricalData(); fitnessManager.ResetCurrentHistoricalDataLists(); fitnessManager.InitializeForNewGeneration(agentGenomeList.Count); trainingSettingsManager = new TrainingSettingsManager(0.01f, 0.8f, 0.2f, 0.005f); }
public EnvironmentPopulation(Challenge.Type challengeType, EnvironmentGenome templateGenome, int numGenomes, int numBaseline, int numReps) { this.templateGenome = templateGenome; popSize = numGenomes; this.numBaseline = numBaseline; environmentGenomeList = new List <EnvironmentGenome>(); historicGenomePool = new List <EnvironmentGenome>(); baselineGenomePool = new List <EnvironmentGenome>(); for (int e = 0; e < numGenomes; e++) { // Create new environmentGenome EnvironmentGenome envGenome = new EnvironmentGenome(e); envGenome.InitializeRandomGenomeFromTemplate(templateGenome); // Add to envGenomesList: environmentGenomeList.Add(envGenome); // Create parallel initial batch of genomes to be used as baseline comparison EnvironmentGenome baseGenome = new EnvironmentGenome(e); baseGenome.InitializeRandomGenomeFromTemplate(templateGenome); baselineGenomePool.Add(baseGenome); } AppendBaselineGenomes(); // Representatives: numPerformanceReps = numReps; ResetRepresentativesList(); historicGenomePool.Add(environmentGenomeList[0]); // init fitnessManager = new FitnessManager(); SetUpDefaultFitnessComponents(challengeType, fitnessManager); fitnessManager.ResetHistoricalData(); fitnessManager.InitializeForNewGeneration(environmentGenomeList.Count); trainingSettingsManager = new TrainingSettingsManager(1f, 1f, 0f, 0f); }
public void SetUpInstance(EvaluationTicket evalTicket, TeamsConfig teamsConfig, ExhibitionParticleCurves exhibitionParticleCurves) { this.teamsConfig = teamsConfig; this.challengeType = teamsConfig.challengeType; this.maxTimeSteps = evalTicket.maxTimeSteps; /*string debugname = ""; * for( int i = 0; i < evalTicket.genomeIndices.Length; i++) { * debugname += evalTicket.genomeIndices[i].ToString() + ","; * } * debugname += evalTicket.focusPopIndex.ToString(); * gameObject.name = debugname;*/ // create particle key: /*int[] indices = new int[teamsConfig.playersList.Count + 2]; * indices[0] = evalTicket.focusPopIndex; * for(int i = 0; i < evalTicket.genomeIndices.Length; i++) { * indices[i + 1] = evalTicket.genomeIndices[i]; * } * indices[indices[0] + 1] = 0; // focusPop is 0 */ /*int[] indices = new int[teamsConfig.playersList.Count + 2]; * indices[0] = evalTicket.focusPopIndex; * for (int i = 0; i < evalTicket.agentGenomesList.Count + 1; i++) { * if (i == 0) { * indices[i + 1] = evalTicket.environmentGenome.index; * } * else { * indices[i + 1] = evalTicket.agentGenomesList[i - 1].index; * } * //indices[i + 1] = ticket.genomeIndices[i]; * } * * string txt = ""; * for(int i = 0; i < indices.Length; i++) { * txt += indices[i].ToString(); * }*/ //Debug.Log(txt); /*if (exhibitionParticleRef.particleDictionary != null) { * if (exhibitionParticleRef.particleDictionary.TryGetValue(txt, out particleCurves)) { * // particleCurves * //Debug.Log("FOUND IT! set up " + txt); * * emit = true; * if (isExhibition) * emit = false; * } * else { * //if (!isExhibition) * //Debug.Log("Eval Instance Setup FAIL " + txt); * emit = false; * } * }*/ if (evalTicket.environmentGenome.index == 0) // if this instance is testing an agent vs. the Top Environment, record its curves: { if (isExhibition) { //emit = false; particleCurves = exhibitionParticleCurves.singleTrajectoryCurvesPS; emit = true; } else { particleCurves = exhibitionParticleCurves.singleTrajectoryCurvesPS; emit = true; } } else { emit = false; } currentEvalTicket = evalTicket; BruteForceInit(); currentEvalTicket.status = EvaluationTicket.EvaluationStatus.InProgress; //emitterParamsDefault.startSize = 0.12f; //emitterParamsDefault.startColor = new Color(1f, 1f, 1f, 0.1f); emitterParamsWin.startSize = 1.2f; emitterParamsWin.startColor = new Color(0.1f, 1f, 0.1f, 1f); emitterParamsLose.startSize = 1.2f; emitterParamsLose.startColor = new Color(1f, 0.1f, 0.1f, 1f); emitterParamsDraw.startSize = 1.0f; emitterParamsDraw.startColor = new Color(0.4f, 0.4f, 0.4f, 1f); }
public void Init1(TeamsConfig teamsConfig) { challengeType = teamsConfig.challengeType; // Temp hardcoded!!!!! competitionType = CompetitionType.Independent; competitionFormat = CompetitionFormat.HighScore; numOpponents = 1; tournamentRoundList = new List <TournamentRound>(); TournamentRound round1 = new TournamentRound(0); // MOCKUP: int[] competitorIDs = new int[1]; competitorIDs[0] = -1; // Match1 string savename = "env1"; string path = Application.dataPath + "/IndividualSaves/Environments/" + savename + ".json"; // Read the json from the file into a string string dataAsJson = File.ReadAllText(path); EnvironmentGenome loadedGenome1 = JsonUtility.FromJson <EnvironmentGenome>(dataAsJson); List <AgentGenome> agentGenomesList1 = new List <AgentGenome>(); agentGenomesList1.Add(teamsConfig.playersList[0].agentGenomeList[0]); EvaluationTicket ticket1 = new EvaluationTicket(loadedGenome1, agentGenomesList1, 1, 1000); TournamentMatchup matchup1 = new TournamentMatchup(0, ticket1, 0, competitorIDs); round1.matchupList.Add(matchup1); // Match2 savename = "env2"; path = Application.dataPath + "/IndividualSaves/Environments/" + savename + ".json"; // Read the json from the file into a string dataAsJson = File.ReadAllText(path); EnvironmentGenome loadedGenome2 = JsonUtility.FromJson <EnvironmentGenome>(dataAsJson); List <AgentGenome> agentGenomesList2 = new List <AgentGenome>(); agentGenomesList2.Add(teamsConfig.playersList[0].agentGenomeList[0]); EvaluationTicket ticket2 = new EvaluationTicket(loadedGenome2, agentGenomesList2, 1, 1000); TournamentMatchup matchup2 = new TournamentMatchup(1, ticket2, 1, competitorIDs); round1.matchupList.Add(matchup2); // Matchup3: savename = "env3"; path = Application.dataPath + "/IndividualSaves/Environments/" + savename + ".json"; // Read the json from the file into a string dataAsJson = File.ReadAllText(path); EnvironmentGenome loadedGenome3 = JsonUtility.FromJson <EnvironmentGenome>(dataAsJson); List <AgentGenome> agentGenomesList3 = new List <AgentGenome>(); agentGenomesList3.Add(teamsConfig.playersList[0].agentGenomeList[0]); EvaluationTicket ticket3 = new EvaluationTicket(loadedGenome3, agentGenomesList3, 1, 1000); TournamentMatchup matchup3 = new TournamentMatchup(2, ticket3, 2, competitorIDs); round1.matchupList.Add(matchup3); tournamentRoundList.Add(round1); }
public void FirstTimePlayGoToTraining() { challengeType = Challenge.Type.Test; NewTrainingMode(); }
public void AddChallenge(Topic topic, string text, bool isOpen, Challenge.Type type, List <string> answers) { topic.AddChallenge(idCount, text, isOpen, type, answers); idCount++; }
public void AddChallenge(int id, string text, bool isOpen, Challenge.Type type, List <string> answers) { entries.Add(new Challenge(id, text, isOpen, type, answers)); }
public EnvironmentGenome BirthNewGenome(EnvironmentGenome parentGenome, int index, Challenge.Type challengeType, float mutationRate, float mutationDriftAmount) { EnvironmentGenome newGenome = new EnvironmentGenome(index); newGenome.challengeType = parentGenome.challengeType; newGenome.arenaBounds = new Vector3(parentGenome.arenaBounds.x, parentGenome.arenaBounds.y, parentGenome.arenaBounds.z); newGenome.useTerrain = parentGenome.useTerrain; if (parentGenome.useTerrain) { newGenome.terrainGenome = TerrainGenome.BirthNewGenome(parentGenome.terrainGenome, mutationRate, mutationDriftAmount); } newGenome.useBasicObstacles = parentGenome.useBasicObstacles; if (parentGenome.useBasicObstacles) { newGenome.basicObstaclesGenome = BasicObstaclesGenome.BirthNewGenome(parentGenome.basicObstaclesGenome, mutationRate, mutationDriftAmount, this); } newGenome.useTargetColumn = parentGenome.useTargetColumn; if (parentGenome.useTargetColumn) { newGenome.targetColumnGenome = TargetColumnGenome.BirthNewGenome(parentGenome.targetColumnGenome, mutationRate, mutationDriftAmount); } newGenome.useAtmosphere = parentGenome.useAtmosphere; if (parentGenome.useAtmosphere) { newGenome.atmosphereGenome = AtmosphereGenome.BirthNewGenome(parentGenome.atmosphereGenome, mutationRate, mutationDriftAmount); } newGenome.useMeteorites = parentGenome.useMeteorites; if (parentGenome.useMeteorites) { newGenome.meteoritesGenome = MeteoritesGenome.BirthNewGenome(parentGenome.meteoritesGenome, mutationRate, mutationDriftAmount); } // StartPositions: // HACKY! DOES NOT SUPPORT EVOLVING START POSITIONS! ALL THE SAME!!!! newGenome.agentStartPositionsList = parentGenome.agentStartPositionsList; /*newGenome.agentStartPositionsList = new List<Vector3>(); * //Debug.Log("(parentGenome.agentStartPositionsList.Count" + parentGenome.agentStartPositionsList.Count.ToString()); * for (int i = 0; i < parentGenome.agentStartPositionsList.Count; i++) { * newGenome.agentStartPositionsList.Add(new Vector3(parentGenome.agentStartPositionsList[i].x, parentGenome.agentStartPositionsList[i].y, parentGenome.agentStartPositionsList[i].z)); * } * newGenome.agentStartRotationsList = new List<Quaternion>(); * for (int i = 0; i < parentGenome.agentStartRotationsList.Count; i++) { * newGenome.agentStartRotationsList.Add(new Quaternion(parentGenome.agentStartRotationsList[i].x, parentGenome.agentStartRotationsList[i].y, parentGenome.agentStartRotationsList[i].z, parentGenome.agentStartRotationsList[i].w)); * }*/ return(newGenome); }