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)
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_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)