def forward(self, inputs): """ Forward propagation :param inputs: x_init, params :return: """ ab_cat = F.concat((self.A, self.B), axis=1) large_f_learner = expand_time_batch(ab_cat, self.T - 1, self.n_batch) assert list(large_f_learner.shape) == [ self.T - 1, self.n_batch, self.n_state, self.n_sc ], " Learner's F dimension mismatch" assert large_f_learner.dtype.kind == 'f', "dtype error" x_init, f = inputs C = expand_time_batch(self.C, self.T, self.n_batch) c = expand_time_batch(self.c, self.T, self.n_batch) return self.lqr_layer.apply((x_init, C, c, large_f_learner, f))
def forward(self, inputs): """ Forward propagation :param inputs: x_init, u_init, cost = inputs :return: """ ab_cat = F.concat((self.A, self.B), axis=1) large_f_learner = expand_time_batch(ab_cat, self.T - 1, self.n_batch) assert list(large_f_learner.shape) == [ self.T - 1, self.n_batch, self.n_state, self.n_sc ], " Learner's F dimension mismatch" assert large_f_learner.dtype.kind == 'f', "dtype error" x_init, cost = inputs f = chainer.Variable( np.zeros((self.T - 1, self.n_batch, self.n_state), dtype=x_init.dtype)) dynamics = LinDx(large_f_learner, f) res = self.mpc_layer((x_init, cost, dynamics)) return res
n_batch = 128 dtype = np.float32 expert_seed = 42 np.random.seed(expert_seed) alpha = 0.2 exp = dict( Q=chainer.Variable(np.eye(n_sc)), #Cost p=chainer.Variable(np.random.randn(n_sc)), # cost (little c) A=chainer.Variable( np.eye(n_state) + alpha * np.random.randn(n_state, n_state)), # F left side B=chainer.Variable(np.random.randn(n_state, n_ctrl))) exp_ab_cat = F.concat((exp['A'], exp['B']), axis=1) exp_large_f = expand_time_batch(exp_ab_cat, T - 1, n_batch) exp['F'] = exp_large_f exp['f'] = chainer.Variable( np.zeros((T - 1, n_batch, n_state), dtype=exp_large_f.dtype)) exp_C = expand_time_batch(exp['Q'], T, n_batch) exp['C'] = exp_C exp['c'] = expand_time_batch(exp['p'], T, n_batch) u_lower = -10.0 * np.ones(n_ctrl) u_upper = 10.0 * np.ones(n_ctrl) u_lower = expand_time_batch(u_lower, T, n_batch) u_upper = expand_time_batch(u_upper, T, n_batch)