Пример #1
0
def test_feasible():
    from magnum.examples.feasible_example import feasible_example as g
    from stl.boolean_eval import pointwise_sat
    res = milp.encode_and_run(g)
    phi = g.spec_as_stl(discretize=False)
    dt = g.model.dt
    assert pointwise_sat(phi, dt=dt)(res.solution)
    assert pytest.approx(res.cost) == 5

    res = milp.encode_and_run(g.invert())
    phi = g.spec_as_stl(discretize=False)
    dt = g.model.dt
    assert not pointwise_sat(phi, dt=dt)(res.solution)
    assert pytest.approx(res.cost) == 5
Пример #2
0
def test_one_player_rps_feasibility():
    from magnum.examples.rock_paper_scissors import rps as g
    from stl.boolean_eval import pointwise_sat
    res = milp.encode_and_run(g)
    phi = g.spec_as_stl(discretize=False)
    dt = g.model.dt
    assert pointwise_sat(phi, dt=dt)(res.solution)

    assert pytest.approx(res.cost) == 10

    g = g.invert()
    res = milp.encode_and_run(g)
    phi = g.spec_as_stl(discretize=False)
    dt = g.model.dt
    assert pointwise_sat(phi, dt=dt)(res.solution)

    assert pytest.approx(res.cost) == 10
Пример #3
0
def test_example3():
    from magnum.examples.feasible_example3 import feasible_example as g
    from stl.fastboolean_eval import pointwise_sat

    res = milp.encode_and_run(g)
    phi = g.spec_as_stl(discretize=False)
    assert res.feasible
    assert pointwise_sat(phi)(res.solution, 0)
Пример #4
0
def test_rps_counter_examples():
    from magnum.examples.rock_paper_scissors import rps as g
    from stl.boolean_eval import pointwise_sat

    # Respond to Paper
    ces = [{'w': traces.TimeSeries([(0, 20 / 60)])}]

    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible
    assert pytest.approx(res.cost) == 10
    phi = stl.parse('X((x >= 10) & (x <= 50))')
    assert pointwise_sat(phi, dt=g.model.dt)(res.solution)

    # Respond to Scissors and Paper
    ces.append({'w': traces.TimeSeries([(0, 40 / 60)])})
    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible
    assert pytest.approx(res.cost) == 10
    phi = stl.parse('X((x >= 30) & (x <= 50))')
    assert pointwise_sat(phi, dt=g.model.dt)(res.solution)

    ces.append({'w': traces.TimeSeries([(0, 0)])})
    res = milp.encode_and_run(g, counter_examples=ces)
    assert not res.feasible
    assert pytest.approx(res.cost) == 0
    phi = stl.parse('X((x = 10) | (x = 30) | (x = 50))')
    assert pointwise_sat(phi, dt=g.model.dt)(res.solution)

    g = g.invert()

    res = milp.encode_and_run(g)
    assert res.feasible
    assert pytest.approx(res.cost) == 10

    ces = [{'u': traces.TimeSeries([(0, 20 / 60)])}]

    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible
    assert pytest.approx(res.cost) == 10

    ces = [{'u': traces.TimeSeries([(0, 40 / 60)])}]

    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible
    assert pytest.approx(res.cost) == 10

    ces = [({'u': traces.TimeSeries([(0, 0)])})]

    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible

    ces = [({'u': traces.TimeSeries([(0, 1)])})]

    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible
Пример #5
0
def test_counter_examples():
    from magnum.examples.feasible_example2 import feasible_example as g

    res = milp.encode_and_run(g)
    assert res.feasible

    ces = [{'w': traces.TimeSeries([(0, 0)])}]
    res = milp.encode_and_run(g, counter_examples=ces)
    assert res.feasible

    ces = [{'w': traces.TimeSeries([(0, 1)])}]
    res = milp.encode_and_run(g, counter_examples=ces)
    assert not res.feasible

    ces = [{
        'w': traces.TimeSeries([(0, 1)])
    }, {
        'w': traces.TimeSeries([(0, 0)])
    }]
    res = milp.encode_and_run(g, counter_examples=ces)
    assert not res.feasible
Пример #6
0
def test_one_player_rps_robustness():
    from magnum.examples.rock_paper_scissors import rps as g
    ces = [{'w': traces.TimeSeries([(0, 20 / 60)])}]
    milp.encode_and_run(g, counter_examples=ces)