u = [] for i in range(0, M): # u=np.hstack([u,math.pow(-1.0,i)*np.sin(2.0*dt*np.linspace(1.0,n,num=n))*uscale]) u = np.hstack([ u, -math.pow(-1.0, i) * np.sin(0.01 * dt * np.power(np.linspace(1.0, n, num=n), 2)) * uscale ]) u = np.hstack([ u, math.pow(-1.0, i) * np.array([random.uniform(-uscale, uscale) for j in range(0, int(n))]) ]) u = np.expand_dims(np.array(u), axis=0) print 'running system...' xtraj_sys = sys.runSystem(x0, u) xtraj_sys[1, :] = -np.cos(xtraj_sys[0, :]) xtraj_sys[0, :] = np.sin(xtraj_sys[0, :]) xudata = np.vstack([xtraj_sys, u]) row_sums = systeminfo['row_sums'] row_std = systeminfo['row_std'] xudata = xudata - np.array([row_sums]).T xudata = xudata / np.array([row_std]).T print 'running model...' xtraj_model = xudata[0:xdim, 0:xdelay] for i in xrange(u.shape[1] - xdelay): xtraj_model = np.hstack([ xtraj_model, modelsys.getNextState(xtraj_model[:, -xdelay:], xudata[-udim:, i - udelay])
print 'running ddp...' ddp.run(x0_model, uk0) # pr.disable() # s = StringIO.StringIO() # ps = pstats.Stats(pr, stream=s) # ps.sort_stats('time', 'cumulative').print_stats(.5, 'init') # ps.print_stats() # ps.print_callers(.5, 'init') # print >> f, s.getvalue() #apply control to real system x0 = np.array([[0.0], [0.0]]) realsys = Pendulum(systeminfo['params']) print 'running system...' xtraj_sys = realsys.splitAngle(realsys.runSystem(x0, ddp.uk)) print 'running model...' xtraj_model = sys.runSystem(x0_model, uk0) print 'running system with feedback' xtraj_sys_feedback = realsys.splitAngle( realsys.runSystemWithFeedback(x0, ddp.uk, ddp.K[:, :xdim, 0, :], xtraj_model[:xdim, :], feedback_split=True)) print 'plotting...' fig, axes = plt.subplots(nrows=xdim + 1, ncols=1) pd.DataFrame(ddp.uk.T).plot(ax=axes[0], legend=False, title='u') for i in xrange(xdim): pd.DataFrame(np.vstack(
print 'hello world' # pendulum parameters dt=0.02 L=1.0 params={'dt':dt, 'c':0.01, 'm':0.1, 'g':9.8, 'l':L} x0=np.array([[0.0],[0.0]]) sys=Pendulum(params) M=10000 N=50 uscale=100.0 print 'making data...' #make input freq=np.logspace(-0.01,1.8,num=M) xtraj=sys.runSystem(x0,np.zeros((1,N))) udata=np.zeros((1,N)) for i in range(0,M/4): u=np.random.uniform(-uscale,uscale,size=(1,N)) xtraj=np.dstack([xtraj,sys.runSystem(x0,u)]) udata=np.dstack([udata,u]) for i in range(0,M): u=np.sin(np.random.uniform(-math.pi,math.pi)+freq[i]*dt*np.linspace(1.0,N,num=N))*np.random.uniform(-uscale,uscale) u=np.expand_dims(np.array(u),axis=0) xtraj=np.dstack([xtraj,sys.runSystem(x0,u)]) udata=np.dstack([udata,u]) xtraj=xtraj.T udata=udata.T WRITEDATA=True