Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)