def _Test_Draw(): T = 1000 quad = Quadruped() sim = PYROSIM(playPaused=False, playBlind=True, evalTime=T) quad.Send_To_Simulator(sim) sim.Start() sim.Wait_To_Finish() data = sim.Get_Results() print data[4, 1, T - 1] sim2 = PYROSIM(playPaused=False, playBlind=False, evalTime=T) quad.Send_To_Simulator(sim2) sim2.Start() sim2.Wait_To_Finish() data = sim2.Get_Results() print data[4, 1, T - 1] mutant = quad.Copy_And_Mutate(variable=.99, sigma=5) sim3 = PYROSIM(playPaused=False, playBlind=False, evalTime=T) IDs = quad.Send_To_Simulator(sim3) print IDs IDs = mutant.Send_To_Simulator(sim3, objID=IDs[0], jointID=IDs[1], sensorID=IDs[2], neuronID=IDs[3]) sim3.Start() sim3.Wait_To_Finish() data = sim3.Get_Results() print data[4, 1, T - 1], data[9, 1, T - 1]
def _Test_Tree(): T = 1000 sim = PYROSIM(playPaused=False, playBlind=False, evalTime=T, xyz=[0, 0, 5], hpr=[90, -90, 0]) #sim = PYROSIM(playPaused=False, playBlind=False, evalTime=T, xyz=[-5,0,2], hpr=[0,-20,0]) t = Treebot() t.Send_To_Simulator(sim) sim.Start() sim.Wait_To_Finish() data = sim.Get_Results()
def Play_Indv(robot, eval_time, environment=False): sensor_data = {} if environment: for i, env in enumerate(environment[:8]): sim = PYROSIM(playPaused=True, playBlind=False, evalTime=eval_time, xyz=(0, -2, 3), hpr=(90, -30, 0)) offset = robot.Send_To_Simulator(sim, eval_time=eval_time) env.Send_To_Simulator(sim, ID_offset=offset[0]) sim.Start() sim.Wait_To_Finish() sensor_data[i] = sim.Get_Results() print sensor_data return sensor_data
IDs = quad.Send_To_Simulator(sim3) print IDs IDs = mutant.Send_To_Simulator(sim3, objID=IDs[0], jointID=IDs[1], sensorID=IDs[2], neuronID=IDs[3]) sim3.Start() sim3.Wait_To_Finish() data = sim3.Get_Results() print data[4, 1, T - 1], data[9, 1, T - 1] if __name__ == "__main__": #_Test_Draw() import numpy as np import environments import fitness_functions as ff t = Treebot.MC() #t = Treebot.Non_Modular() #t = Treebot() sim = PYROSIM(playPaused=False, playBlind=False, evalTime=100) offset = t.Send_To_Simulator(sim, eval_time=100) env = environments.Cluster_Env.Bi_Sym(2, 2, 4, 2) env.Send_To_Simulator(sim, offset[0]) sim.Start() sim.Wait_To_Finish() results = sim.Get_Results() print ff.Treebot(results, env)
def run_experiment( generator_fcn, fitness_fcn, name, trial_num, pop_size, gens, eval_time, env_order, dimensions, env_space=False, fitness_threshold=False, development_layers=1, ): time_stamp = dt.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') data = {} envs_to_train_in = [env_space[i] for i in env_order] evolver = evolvers.AFPO(max_population_size=pop_size, generator_fcn=generator_fcn, fitness_fcn=fitness_fcn, environments=envs_to_train_in, development_layers=development_layers, max_generations=gens, eval_time=eval_time, fitness_threshold=fitness_threshold) data['pop_size'] = evolver.max_population_size #data['fitness_function'] = fitness_function data['development_layers'] = evolver.development_layers data['eval_time'] = evolver.eval_time evolved_data = evolver.Evolve() gens = evolver.generation - 1 data['gens'] = gens best_robot = evolved_data[gens]['pareto_front'][0]['genome'] data['data'] = evolved_data data['best_robot'] = best_robot data['motor_speed'] = robots.MOTOR_SPEED data['environments'] = envs_to_train_in data['env_space'] = env_space data['name'] = name data['threshold'] = fitness_threshold data['dimensions'] = dimensions data['num_trained_in'] = len(envs_to_train_in) env_fitness = [0] * 16 for index, env in enumerate(env_space): sim = PYROSIM(playBlind=True, playPaused=False, evalTime=eval_time) ids = best_robot.Send_To_Simulator(sim, eval_time=eval_time) env.Send_To_Simulator(sim, ID_offset=ids[0]) sim.Start() sim.Wait_To_Finish() sensor_data = sim.Get_Results() env_fitness[index] = fitness_fcn(sensor_data, env) data_folder = './Data' file_name = name + '_' + str(trial_num) + '_' + str( len(env_order)) + '_' + str(dimensions) + '_' + str(time_stamp) print file_name pickle_file_name = file_name + '.pickle' json_file_name = file_name + '.json' if not os.path.isdir(data_folder): os.makedirs(data_folder) pickle_path_to_file = data_folder + '/' + pickle_file_name json_path_to_file = data_folder + '/' + json_file_name with open(pickle_path_to_file, 'w') as f: pickle.dump(data, f) #Create json daat json_data = {} print 'env fit', env_fitness print 'env order', env_order #store json data json_data['env_fitness'] = env_fitness json_data['type'] = name json_data['threshold'] = fitness_threshold json_data['dimensions'] = dimensions json_data['num_trained_in'] = len(envs_to_train_in) json_data['env_order'] = env_order #Write json with open(json_path_to_file, 'w') as f: json.dump(json_data, f)