def test_basic_functionality(): times = range(1,4) consumption = lambda t: t * 1.5 V0 = 10 p = Producer(name='Producer') c = Consumer(consumption, name='Consumer') s = Storage(RESOURCE, capacity=15, name='Storage') s.volume(0).value = V0 rn = FlowNetwork(RESOURCE) rn.connect(p, s) rn.connect(s, c) prob = Problem() prob.add_constraints(chain(*(rn.constraints(t) for t in times))) prob.objective = Minimize(sum(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t in times: c.activity(t).take_value(solution) p.activity(t).take_value(solution) s.volume(t).take_value(solution) for t in times: assert approx(p.activity(t).value, 0) assert approx(c.consumption[RESOURCE](t).value, consumption(t)) assert approx(s.volume(t).value, s.volume(t-1).value + s.accumulation[RESOURCE](t-1).value)
def test_basic_functionality(): times = range(1, 4) consumption = lambda t: t * 1.5 V0 = 10 p = Producer(name='Producer') c = Consumer(consumption, name='Consumer') s = Storage(RESOURCE, capacity=15, name='Storage') s.volume(0).value = V0 rn = FlowNetwork(RESOURCE) rn.connect(p, s) rn.connect(s, c) prob = Problem() prob.add_constraints(chain(*(rn.constraints(t) for t in times))) prob.objective = Minimize(sum(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t in times: c.activity(t).take_value(solution) p.activity(t).take_value(solution) s.volume(t).take_value(solution) for t in times: assert approx(p.activity(t).value, 0) assert approx(c.consumption[RESOURCE](t).value, consumption(t)) assert approx( s.volume(t).value, s.volume(t - 1).value + s.accumulation[RESOURCE](t - 1).value)
def check_variant(variant): times = list(range(5)) consumption = lambda t: t * 1.5 p = Producer(name='Producer') c = Consumer(consumption, variant) cl = Cluster(p, c, resource=RESOURCE, name='Cluster') prob = fs.Problem() prob.add_constraints(chain(*(cl.constraints(t) for t in times))) prob.objective = fs.Minimize(sum(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t in times: c.activity(t).take_value(solution) p.activity(t).take_value(solution) for t in times: assert approx(p.production[RESOURCE](t).value, consumption(t)) assert approx(c.consumption[RESOURCE](t).value, consumption(t))
def check_variant(variant, sum_func=sum): times = list(range(5)) consumption = lambda t: t * 1.5 p = Producer(name='Producer') c = Consumer(consumption, variant) cl = Cluster(p, c, resource=RESOURCE, name='Cluster') prob = fs.Problem() prob += (part.constraints.make(t) for part, t in product(cl.descendants_and_self, times)) prob.objective = fs.Minimize(sum_func(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t in times: c.activity(t).take_value(solution) p.activity(t).take_value(solution) for t in times: assert approx(p.production[RESOURCE](t).value, consumption(t)) assert approx(c.consumption[RESOURCE](t).value, consumption(t))
def test_state_vars(): times = list(range(1, 4)) consumption = lambda t: t * 1.5 p = Producer(name='Producer') c = Consumer(consumption, name='Consumer') cl = Cluster(p, c, resource=RESOURCE, name='Cluster') prob = fs.Problem() prob.add_constraints(chain(*(cl.constraints(t) for t in times))) prob.objective = fs.Minimize(sum(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t, part in product(times, cl.parts()): for v in part.state_variables(t): v.take_value(solution) for t in times: assert approx(p.production[RESOURCE](t).value, consumption(t)) assert approx(c.consumption[RESOURCE](t).value, consumption(t))
def test_state_vars(): times = list(range(1,4)) consumption = lambda t: t * 1.5 p = Producer(name='Producer') c = Consumer(consumption, name='Consumer') cl = Cluster(p, c, resource=RESOURCE, name='Cluster') prob = fs.Problem() prob.add_constraints(chain(*(cl.constraints(t) for t in times))) prob.objective = fs.Minimize(sum(p.cost(t) for t in times)) solution = default_solver.solve(prob) for t, part in product(times, cl.parts()): for v in part.state_variables(t): v.take_value(solution) for t in times: assert approx(p.production[RESOURCE](t).value, consumption(t)) assert approx(c.consumption[RESOURCE](t).value, consumption(t))