def test_ctm_admm_adjoint_run():
    scen, control = test_ctm.small_scenario()

    set_cells = []
    set_ramps = []

    adjoint = ctm_admm.AdmmCTMAdjoint(scen, set_cells, set_ramps)
    u_star = AcceleratedGradient.ramp_metering().solve(adjoint,
                                                       ctm_admm.AdmmCTMAdjoint.no_control(scen, set_cells))
    state = adjoint.fs(u_star)
    #state.plot()
    assert_almost_equal(adjoint.j(state, u_star), 7.7, delta=.1)

    set_cells = [0, 1]
    set_ramps = [0, 1]

    adjoint = ctm_admm.AdmmCTMAdjoint(scen, set_cells, set_ramps)
    u_star = AcceleratedGradient.ramp_metering().solve(adjoint,
                                                       ctm_admm.AdmmCTMAdjoint.no_control(scen, set_cells))
    state = adjoint.fs(u_star)
    #state.plot()

    assert_almost_equal(adjoint.j(state, u_star), 2.0, delta=0.01)

    set_cells = []
    set_ramps = [0, 1]

    adjoint = ctm_admm.AdmmCTMAdjoint(scen, set_cells, set_ramps)
    u_star = AcceleratedGradient.ramp_metering().solve(adjoint, ctm_admm.AdmmCTMAdjoint.no_control(scen, set_cells))
    state = adjoint.fs(u_star)
    assert_almost_equal(adjoint.j(state, u_star), 7.7, delta=0.05)
    #state.plot()
    u_0 = u_star.copy()
    u_0[10:] = 0.0
    state_0 = adjoint.fs(u_0)
Example #2
0
 def test_large(self):
     scen = large_network()
     #scen, _ = small_scenario()
     print scen
     print scen.simulate().density
     print scen.ttt(scen.simulate())
     scen.simulate().plot()
     AcceleratedGradient.ramp_metering().solve(CTMAdjoint(scen), scen.no_control().flatten())
 def test_interpretation(self):
     scen, control = small_scenario()
     dummy_links = [0]
     control = numpy.array(
         [
             1.0,
             0.5,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             1.0,
             0.9,
             0.9,
             0.9,
             0.0,
             0,
             0,
             0,
             0,
             0,
             0,
         ]
     )
     dummy = DummyControl(dummy_links, scen)
     dummy.alpha = 0.0
     self.assertAlmostEqual(7.7, dummy.eval(control))
     dummy.alpha = 5.0
     self.assertAlmostEqual(7.7, dummy.eval(control))
     control[20] = 0.0
     self.assertAlmostEqual(7.7 + dummy.alpha * 0.9 ** 2, dummy.eval(control))
     control[20] = 0.9
     grad = dummy.grad(control)
     assert_array_almost_equal(grad[20:], numpy.zeros(10))
     control[1] = 0.5
     print dummy.grad(control)
     control[20] = 0.5
     grad = dummy.grad(control)
     self.assertAlmostEqual(grad[20], -dummy.alpha * 2 * (0.4))
     control[20] = 1.1
     grad = dummy.grad(control)
     self.assertAlmostEqual(grad[20], dummy.alpha * 2 * (0.2))
     control[20] = 0.9
     print AcceleratedGradient.ramp_metering().solve(dummy, control)
Example #4
0
def test_smoother():
    beta_op.beta = 20.0
    beta_op.factor = 1.000
    beta_op.beta_admm_factor = 1.000
    beta_op.inner_iters = 30
    beta = 1.0
    n = 6
    t = 10
    fw = CTMFreeway.standard(n)
    ic = InitialConditions.blank(n)
    bc = BoundaryConditions.blank(n, t)
    ic.mainline[:] = 1.0
    ic.queue[0] = 0.5
    ic.queue[[3]] = 0.5
    bc.demand[0, :] = 0.5
    bc.demand[[1, 4], :2] = 0.3
    scen = Scenario(fw, ic, bc)
    print scen.ttt(scen.simulate())
    scen.simulate().plot()
    # IpOptSolver(n_iters=100).solve(CTMAdjoint(scen), scen.no_control().flatten())
    # u_star = AcceleratedGradient(n_iters=40, beta=50.0, lb=0.0, ub=1.0).solve(CTMAdjoint(scen),
    #                                                                         scen.no_control().transpose().flatten())
    #
    #
    # print scen.ttt(scen.simulate(u_star))
    # scen.simulate(u_star).plot()
    sln = CtmAdjointAdmm.from_full_scenario(scen, 3, beta=beta, n_iters=100).solve()
    u_star = sln.construct_control()
    sln.density_summary()
    print "###########"
    print CTMAdjoint(scen).j(scen.simulate(u_star), u_star)
    print scen.ttt(scen.simulate(u_star))
    u_star = AcceleratedGradient(n_iters=20, beta=20.0, lb=0.0, ub=1.0).solve(
        CTMAdjoint(scen), u_star.transpose().flatten()
    )
    print scen.ttt(scen.simulate(u_star))
def test_full_run():
    scen, control = small_scenario()
    adjoint = CTMAdjoint(scen)
    u_star = AcceleratedGradient.ramp_metering().solve(adjoint, control.ravel())
    assert_almost_equal(scen.ttt(CTMSimulator().simulate(scen, u_star)), 7.7, 2)