void QuickOptimization(int goal_generation) { if (simulation_Running && Robot_Optimization.activated) { if (!Robot_Optimization.started) { Robot_Optimization.Load(robot); } CancelInvoke(); Visualization.enabled = false; simulation_Running = true; Robot_Optimization.quickOpti = true; //Optimize fast: while (Robot_Optimization.currentGeneration < goal_generation) { OptimizationUpdate_Sim(); } Debug.Log("Reached Generation: " + Robot_Optimization.currentGeneration); //simulation_Running = false; Robot_Optimization.quickOpti = false; //reenable normal optimization: Visualization.enabled = true; InvokeRepeating("OptimizationUpdate_Sim", 0.01f, Robot_Optimization.deltaTime); } }
void CreateOptimizations() { //Loadrobot for each robot //Loadvis for each robot Robot_Optimization.Load(robot); Robot_Optimization.deltaTime = dt; //Robot_Optimization.IterTime = 10; //Robot_Optimization.timeStep = 0.01f ;// dt; InvokeRepeating("OptimizationUpdate_Sim", 0.01f, Robot_Optimization.deltaTime); }
void OptimizationUpdate_Sim() { if (simulation_Running)//Check if simulation is paused { //OPTIMIZATION: if (Robot_Optimization.Update(robot, simulationTime, Opti_Iterator, Robot_Optimization.IterTime)) { simulationTime = 0; //deletes and recreates robot ResetRobot(); //resets robot position:(gotta create AgX assembly first) //robot.setPos(oldpos?); Opti_Iterator++; if (!Robot_Optimization.quickOpti) { Debug.Log("Generation: " + Robot_Optimization.currentGeneration + "| Entity: " + Opti_Iterator); } if (Opti_Iterator >= Robot_Optimization.population)//If all iterations have ran { //start new iterations with new population Robot_Optimization.UpdatePopulation(robot);//Update the populations //ResetRobot(); Opti_Iterator = 0; genom = Robot_Optimization.currentBestGenome; currDynamics.text = genom[0].ToString("0.###") + "," + genom[1].ToString("0.###") + "," + genom[2].ToString("0.###") + "," + genom[3].ToString("0.###") + "," + genom[4].ToString("0.###") + "," + genom[5].ToString("0.###") + "," + genom[6].ToString("0.###"); } } //VISUALIZATION: if (Visualization.enabled) { Update_Vis(robot); } //this should be the Physics time simulationTime += Robot_Optimization.deltaTime;//timestep = dt = each step time. } }
void Reset_Opti() { Robot_Optimization.Reset(); Robot_Optimization.currentGeneration = 0; }