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