Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
def test_balance_simple():

    time = 0
    consumption = lambda t: 1
    c = Consumer(consumption, name='Consumer')

    prob = fs.Problem()
    prob.add_constraints(c.constraints(time))

    prob.objective = fs.Minimize(c.consumption[RESOURCE](time))

    # Raises SolverError because the consumer wants to consume but noone delivers
    solution = default_solver.solve(prob)
Beispiel #4
0
def run_and_save():

    p = Producer(name='Producer')
    c = Consumer(consumption, name='Consumer')
    cl = fs.Cluster(p, c, resource=RESOURCE, name='Cluster')

    run_model(p, c, cl, TIMES_1)

    with open(FILENAME, 'wb') as f:
        dill.dump((p, c, cl), f)
Beispiel #5
0
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()
Beispiel #6
0
def test_cluster():
    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 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))
Beispiel #7
0
def test_cluster():
    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 += (part.constraints.make(t) for part, t in product(cl.descendants_and_self, 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))