Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 3
0
def test_simple_pwa():
    pwa = fs.PiecewiseAffine((1, 1.5, 2), name='aoeu')
    prob = fs.Problem()
    prob.objective = fs.Minimize(pwa.func([3, 2, 4]))

    solution = default_solver.solve(prob)
    print(solution)
    for var in pwa.variables:
        var.take_value(solution)

    assert(approx(pwa.arg.value, 1.5))
Ejemplo n.º 4
0
def test_simple_pwa():
    pwa = fs.PiecewiseAffine((1, 1.5, 2), name='aoeu')
    prob = fs.Problem()
    prob.objective = fs.Minimize(pwa.func([3, 2, 4]))

    solution = default_solver.solve(prob)
    print(solution)
    for var in pwa.variables:
        var.take_value(solution)

    assert (approx(pwa.arg.value, 1.5))
Ejemplo n.º 5
0
def test_balance_simple():

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

    prob = fs.Problem()
    prob.add(c.constraints.make(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)
Ejemplo n.º 6
0
def run_model(p, c, cl, times):
    times = tuple(times)

    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)
Ejemplo n.º 7
0
def run_model(p, c, cl, times):
    times = tuple(times)

    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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
0
def test_simple_pwa_2():
    points = {1: 3, 1.5: 2, 2: 4}
    x, y, constraints = fs.piecewise_affine(points, name='aoeu')
    prob = fs.Problem()
    prob.objective = fs.Maximize(y)
    prob.add(constraints)

    solution = default_solver.solve(prob)
    print(solution)
    for var in x.variables:
        var.take_value(solution)

    assert(approx(x.value, 2))
    assert(approx(y.value, 4))
Ejemplo n.º 10
0
def test_simple_pwa_1():
    x_vals = (1, 1.5, 2)
    y_vals = [3, 2, 4]
    x, y, constraints = fs.piecewise_affine(zip(x_vals, y_vals), name='aoeu')
    prob = fs.Problem()
    prob.objective = fs.Minimize(y)
    prob.add(constraints)

    solution = default_solver.solve(prob)
    print(solution)
    for var in x.variables:
        var.take_value(solution)

    assert(approx(x.value, 1.5))
    assert(approx(y.value, 2))
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))
Ejemplo n.º 12
0
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))
Ejemplo n.º 13
0
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))
Ejemplo n.º 14
0
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))
Ejemplo n.º 15
0
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))
Ejemplo n.º 16
0
def test_simple_SOS1():
    n = 4
    index = 2
    sum_val = 3.
    vs = [fs.Variable(lb=-1, domain=fs.Domain.integer) for i in range(n)]
    #vs[0] = fs.Variable(lb=-1, domain=fs.Domain.integer)
    weights = [1 for i in range(n)]
    weights[index] = 0.5
    prob = fs.Problem()
    prob.add_constraint(fs.SOS1(vs))
    prob.add_constraint(Constraint(sum(vs) == sum_val))
    #prob.constraints.update(Constraint(v >= 0) for v in vs)
    prob.objective = fs.Minimize(sum(v * w for v, w in zip(vs, weights)))

    solution = default_solver.solve(prob)
    print(solution)
    for v in vs:
        v.take_value(solution)

    for i in range(n):
        if i == index:
            assert (approx(vs[i].value, sum_val))
        else:
            assert (approx(vs[i].value, 0))
Ejemplo n.º 17
0
def test_simple_SOS1():
    n = 4
    index = 2
    sum_val = 3.
    vs = [fs.Variable(lb=-1, domain=fs.Domain.integer) for i in range(n)]
    #vs[0] = fs.Variable(lb=-1, domain=fs.Domain.integer)
    weights = [1 for i in range(n)]
    weights[index] = 0.5
    prob = fs.Problem()
    prob.add_constraint(fs.SOS1(vs))
    prob.add_constraint(Constraint(sum(vs) == sum_val))
    #prob.constraints.update(Constraint(v >= 0) for v in vs)
    prob.objective = fs.Minimize(sum(v * w for v, w in zip(vs, weights)))

    solution = default_solver.solve(prob)
    print(solution)
    for v in vs:
        v.take_value(solution)

    for i in range(n):
        if i == index:
            assert(approx(vs[i].value, sum_val))
        else:
            assert(approx(vs[i].value, 0))