def test_cluster_add_remove(): n = Node() n.production[RESOURCE] = lambda: 0 c = Cluster(resource=RESOURCE) def not_added(): return c.parts() == set() and n.cluster(RESOURCE) is None def added(): return c.parts() == {n} and n.cluster(RESOURCE) is c assert not_added() c.add_part(n) assert added() c.add_part(n) c.remove_part(n) assert not_added() c.remove_part(n) n.set_cluster(c) assert added() assert_raises(fs.InsanityError, n.set_cluster, c) n.unset_cluster(c) assert not_added() assert_raises(fs.InsanityError, n.unset_cluster, c)
def test_cluster_balance_constraint(): n = Node() n.production[RESOURCE] = lambda: 0 assert len(n.constraints()) == 1 c = Cluster(n, resource=RESOURCE) assert len(n.constraints()) == 0 c.remove_part(n) assert len(n.constraints()) == 1
def test_cluster_balance_constraint(): n = Node() n.production[RESOURCE] = lambda idx: 0 index = 0 assert len(n.constraints.make(index)) == 1 c = Cluster(n, resource=RESOURCE) assert len(n.constraints.make(index)) == 0 c.remove_part(n) assert len(n.constraints.make(index)) == 1
def test_cluster_add_remove(): n = Node() n.production[RESOURCE] = lambda: 0 c = Cluster(resource=RESOURCE) def not_added(): return c.children == set() and n.cluster(RESOURCE) is None def added(): return c.children == {n} and n.cluster(RESOURCE) is c assert not_added() c.add_part(n) assert added() c.add_part(n) c.remove_part(n) assert not_added() c.remove_part(n) n.set_cluster(c) assert added() assert_raises(fs.InsanityError, n.set_cluster, c) n.unset_cluster(c) assert not_added() assert_raises(fs.InsanityError, n.unset_cluster, c)
def test_state_vars(): consumption = lambda t: t * 1.5 p = Producer(name='Producer') c = Consumer(consumption, name='Consumer') cl = Cluster(p, c, resource=RESOURCE, name='Cluster') m = fs.models.MyopicDispatchModel(t0=0, step=3, horizon=7) m.add_part(cl) m.solver = default_solver m.advance() m.advance()
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 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))
def test_cluster_insanity(): n = Node() Cluster(n, resource=RESOURCE) Cluster(n, resource=RESOURCE)
def non_callable_constraint(): cl = Cluster(resource=RESOURCE) cl.constraints += fs.Variable() == 3