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