def run_irl(world, car, reward, theta, data): def gen(): for point in data: for c, x0, u in zip(world.cars, point['x0'], point['u']): c.traj.x0.set_value(x0) for cu, uu in zip(c.traj.u, u): cu.set_value(uu) yield r = car.traj.reward(reward) g = utils.grad(r, car.traj.u) H = utils.hessian(r, car.traj.u) I = tt.eye(utils.shape(H)[0]) reg = utils.vector(1) reg.set_value([1e-1]) H = H - reg[0] * I L = tt.dot(g, tt.dot(tn.MatrixInverse()(H), g)) + tt.log(tn.Det()(-H)) for _ in gen(): pass optimizer = utils.Maximizer(L, [theta], gen=gen, method='gd', eps=0.1, debug=True, iters=1000, inf_ignore=10) optimizer.maximize() print theta.get_value()
def minus_two_log_gauss_likelihood_2D(residuals, covariance_values): """computes the -2 log gaussian likelihood (ignoring the constant term) from the given residuals and covariance values in the form of a 1D array: [variance1, covariance, variance2]""" cov = covariance_matrix_2D(covariance_values) det = L.Det()(cov) precis = L.MatrixInverse()(cov) term1 = T.dot(T.transpose(residuals), T.dot(precis, residuals)) term2 = T.log(det) return term1 + term2