def test_hyp_hyp_linking_case_2(self): T = np.arange(0, 20, eps) M = 10 f = TradeoffFunction(5, 6, 4, 4, 1) g = TradeoffFunction(3, 4, 1, 1, -0.5) numeric_opt_d, numeric_h = numeric.link_consumption(T, f, g, M) analytic_opt_d, analytic_h = analytic.link_consumption(f, g) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h)) numeric_opt_d, numeric_h = numeric.link_consumption(T, g, f, M) analytic_opt_d, analytic_h = analytic.link_consumption(g, f) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h))
def test_hyp_hyp_linking_case_3(self): T = np.arange(0, 20, eps) M = 10 f = TradeoffFunction(2, 4, 1, 1, -0.5) g = TradeoffFunction(5, 10, 4, 4, 1) numeric_opt_d, numeric_h = numeric.link_consumption(T, f, g, M) analytic_opt_d, analytic_h = analytic.link_consumption(f, g) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h)) # should also work in the symmetric case numeric_opt_d, numeric_h = numeric.link_consumption(T, g, f, M) analytic_opt_d, analytic_h = analytic.link_consumption(g, f) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h))
def test_lin_lin_same_linking(self): T = np.arange(0, 20, eps) M = 10 f = PiecewiseFunction([0], [LinearFunction(0, 5)]) g = PiecewiseFunction([0], [LinearFunction(0, 5)]) numeric_opt_d, numeric_h = numeric.link_consumption(T, f, g, M) analytic_opt_d, analytic_h = analytic.link_consumption(f, g) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h)) self.assertEqual(analytic_h(0), 10) self.assertEqual(analytic_h(20), 10)
def test_linking_analytic(self): link_consumption = lambda f, g, M: analytic.link_consumption(f, g) link_charging = lambda f, cf, M: analytic.link_charging(f, cf, M) f = PiecewiseFunction([0], [LinearFunction(0, 5)]) cf = PiecewiseFunction( [0, 10], [LinearFunction(1, 0), LinearFunction(0, 10)]) graph = Graph([(0, 1, (False, f)), (1, 2, (True, cf))]) ds, h = link_path(graph, [0, 1, 2], 10, link_consumption, link_charging) self.assertEqual(h(0), 5) self.assertEqual(h(5), 0)
def test_hyp_lin_linking(self): T = np.arange(0, 20, eps) M = 10 f = PiecewiseFunction([0, 2, 6], [ LinearFunction(0, float('inf')), HypLinFunction(5, 1, 1, 0), LinearFunction(0, 6 / 5.) ]) self.assertEqual(f(2), 6) self.assertEqual(f(6), 1.2) self.assertEqual(f(10), 1.2) g = PiecewiseFunction([0, 4, 9], [ LinearFunction(0, float('inf')), LinearFunction(-1, 9), LinearFunction(0, 0) ]) numeric_opt_d, numeric_h = numeric.link_consumption(T, f, g, M) analytic_opt_d, analytic_h = analytic.link_consumption(f, g) self.assertTrue(equal("opt_d", T, numeric_opt_d, analytic_opt_d)) self.assertTrue(equal("h", T, numeric_h, analytic_h)) self.assertEqual(analytic_h(6), 11) self.assertEqual(analytic_h(16), 6 / 5.)