def exercise_9b(world, timestep, reset): """Exercise example""" # Parameters n_joints = 10 listamplitude=np.linspace(0.05,0.4, 4) listphaselag=np.linspace(0., 0.9, 6) listuple=[] for i in range(len(listamplitude)): for j in range(len(listphaselag)): listuple.append((listamplitude[i], listphaselag[j])) nbsimu=len(listamplitude)* len(listphaselag) parameter_set = [SimulationParameters( simulation_duration=15, amplitude_body_value=amp, phase_lag=phasel, drive_mlr=None) for amp, phasel in listuple] # Grid search for simulation_i, parameters in enumerate(parameter_set): print(simulation_i) reset.reset() run_simulation( world, parameters, timestep, int(1000*parameters.simulation_duration/timestep), logs="./logs/9b/simulation_{}.npz".format(simulation_i) ) plot_results.main(nbsimu,listamplitude, listphaselag, plot=True)
def exercise_9g(world, timestep, reset): """Exercise 9g""" # Parameters n_joints = 10 listuple = [] Rtail = np.linspace(0.2, 0.2, 1) Rhead = np.linspace(0.1, 0.2, 1) for i in range(Rtail.size): for j in range(len(Rhead)): listuple.append((Rtail[i], Rhead[j])) nbsimu = Rhead.size * Rtail.size parameter_set = [ SimulationParameters( simulation_duration=30, phase_lag=2 * np.pi / 10, drive_mlr=1.2, turn=0, ) for grad in listuple ] # Grid search for simulation_i, parameters in enumerate(parameter_set): print(simulation_i) reset.reset() run_simulation(world, parameters, timestep, int(1000 * parameters.simulation_duration / timestep), logs="./logs/9g/simulation_{}.npz".format(simulation_i)) plot_results.main(nbsimu, Rtail, Rhead, plot=True)
def exercise_9c(world, timestep, reset): """Exercise 9c""" # Parameters n_joints = 10 listuple = [] Rtail = np.linspace(0.1, 0.4, 2) Rhead = np.linspace(0.1, 0.4, 4) for i in range(Rtail.size): for j in range(len(Rhead)): listuple.append((Rtail[i], Rhead[j])) nbsimu = Rhead.size * Rtail.size parameter_set = [ SimulationParameters( simulation_duration=1, #drive=drive, amplitude_gradient=-(grad[1] - grad[0]) / 10, amplitude_body_value=grad[1], phase_lag=2 * np.pi / 10) for grad in listuple ] # Grid search for simulation_i, parameters in enumerate(parameter_set): print(simulation_i) reset.reset() run_simulation(world, parameters, timestep, int(1000 * parameters.simulation_duration / timestep), logs="./logs/9c/simulation_{}.npz".format(simulation_i)) plot_results.main(nbsimu, Rtail, Rhead, plot=True)
def exercise_9b(world, timestep, reset): """Exercise 9b""" # Parameters amplitudes = [0.2, 0.5] phase_bias = [np.pi / 2, np.pi / 10, np.pi / 14, np.pi / 20] parameter_set = [ SimulationParameters( simulation_duration=4, #drive=drive, amplitudes=amp, phase_bias_vertical=phase, turn=0, freqs=3, ) for amp in amplitudes for phase in phase_bias ] # Grid search for simulation_i, parameters in enumerate(parameter_set): reset.reset() path = "./logs/9b/simulation_{}.npz".format(simulation_i) run_simulation(world, parameters, timestep, int(1000 * parameters.simulation_duration / timestep), logs=path) plot_results.main("./logs/9b/simulation_{}.npz", len(parameter_set))
def run_network(duration, update=False, drive=0): """Run network without Webots and plot results""" # Simulation setup timestep = 5e-3 times = np.arange(0, duration, timestep) n_iterations = len(times) parameters = SimulationParameters( drive=drive, amplitude_gradient=None, phase_lag=None, turn=1.0, use_drive_saturation=1, shes_got_legs=1, cR_body=[0.05, 0.16], #cR1, cR0 cR_limb=[0.131, 0.131], #cR1, cR0 amplitudes_rate=40, ) network = SalamanderNetwork(timestep, parameters) osc_left = np.arange(10) osc_right = np.arange(10, 20) osc_legs = np.arange(20, 24) # Logs phases_log = np.zeros([n_iterations, len(network.state.phases)]) phases_log[0, :] = network.state.phases amplitudes_log = np.zeros([n_iterations, len(network.state.amplitudes)]) amplitudes_log[0, :] = network.state.amplitudes freqs_log = np.zeros([n_iterations, len(network.parameters.freqs)]) freqs_log[0, :] = network.parameters.freqs outputs_log = np.zeros( [n_iterations, len(network.get_motor_position_output())]) outputs_log[0, :] = network.get_motor_position_output() # Run network ODE and log data tic = time.time() for i, _ in enumerate(times[1:]): if update: network.parameters.update( SimulationParameters( # amplitude_gradient=None, # phase_lag=None )) network.step() phases_log[i + 1, :] = network.state.phases amplitudes_log[i + 1, :] = network.state.amplitudes outputs_log[i + 1, :] = network.get_motor_position_output() freqs_log[i + 1, :] = network.parameters.freqs toc = time.time() # Network performance pylog.info("Time to run simulation for {} steps: {} [s]".format( n_iterations, toc - tic)) # Implement plots of network results pylog.warning("Implement plots") plot_results.main()
def exercise_9d1(world, timestep, reset): """Exercise 9d1""" # Parameters n_joints = 10 listuple = [] Rtail = np.linspace(0.3, 0.4, 1) Rhead = np.linspace(0.3, 0.4, 1) for i in range(Rtail.size): for j in range(len(Rhead)): listuple.append((Rtail[i], Rhead[j])) nbsimu = Rhead.size * Rtail.size parameter_set = [ SimulationParameters( simulation_duration=20, #drive=drive, drive_mlr=4, amplitude_gradient=None, amplitude_value=0.2, phase_lag=2 * np.pi / 10, freqs=(np.ones((n_joints * 2 + 4, 1)) * 2.5)[:, 0], backward=False, turn=-0.2, # ... ) for grad in listuple ] # Grid search for simulation_i, parameters in enumerate(parameter_set): print(simulation_i) reset.reset() run_simulation(world, parameters, timestep, int(1000 * parameters.simulation_duration / timestep), logs="./logs/9b/simulation_{}.npz".format(simulation_i)) plot_results.main(nbsimu, Rtail, Rhead, plot=True)
def exercise_9f(world, timestep, reset): """Exercise 9f""" # Parameters n_joints = 10 Phase_offset = np.linspace(-3, 3, 10) amp = np.linspace(0.3, 0.3, 2) nbsimu = Phase_offset.size * amp.size listuple = [] for i in range(Phase_offset.size): for j in range(len(amp)): listuple.append((Phase_offset[i], amp[j])) nbsimu = Phase_offset.size * amp.size parameter_set = [ SimulationParameters( simulation_duration=15, drive_mlr=1, phaseoffset=phaseof, amplitude_value=ampli, phase_lag=2 * np.pi / 10, ) for phaseof, ampli in listuple ] # Grid search for simulation_i, parameters in enumerate(parameter_set): print(simulation_i) reset.reset() run_simulation(world, parameters, timestep, int(1000 * parameters.simulation_duration / timestep), logs="./logs/9b/simulation_{}.npz".format(simulation_i)) plot_results.main(nbsimu, Phase_offset, amp, plot=True)