Esempio n. 1
0
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