In [2]:
%matplotlib inline
import pylab
import numpy as np
import functools
import adapt_float
import adapt_spike
import adapt_fixed
import ctn_benchmark.control as ctrl
In [59]:
D = 1
dt=0.001
T = 10.0
seed=1
noise=0.1
Kp=2
Kd=1
Ki=0.1
tau_d=0.001
period=4
amplitude=3
n_neurons=500
learning_rate=1
max_freq=1.0
synapse=0.01
scale_add=2
delay=0.00
filter=0.00
n_neurons=256
signal = ctrl.Signal(D, period, dt=dt, max_freq=max_freq, seed=seed)
system = ctrl.System(D, D, dt=dt, seed=seed,
motor_noise=noise, sense_noise=noise,
scale_add=scale_add,
motor_scale=10,
motor_delay=delay, sensor_delay=delay,
motor_filter=filter, sensor_filter=filter)
pid = ctrl.PID(Kp, Kd, Ki, tau_d=tau_d)
adapt = adapt_float.AdaptiveFloat(n_inputs=D, n_outputs=D, n_neurons=n_neurons, seed=seed,
learning_rate=1e-3)
steps = int(T / dt)
time = np.arange(steps)*dt
data_desired = np.zeros((steps, D))
data_actual = np.zeros((steps, D))
data_pid = np.zeros((steps, D))
data_error = np.zeros((steps, D))
for i in range(steps):
desired = signal.value(i*dt)*amplitude
data_desired[i,:] = desired
actual = system.state
data_actual[i,:] = actual
raw_pid = pid.step(actual, desired)
data_pid[i,:] = raw_pid
adjust = adapt.step(actual, -raw_pid)
system.step(raw_pid + adjust)
In [60]:
pylab.plot(time, data_desired, label='desired')
pylab.plot(time, data_actual, label='actual')
pylab.legend(loc='best')
pylab.show()
In [ ]: