Пример #1
0
def test_basic_infeasible_init(model):
    model.c2 = Constraint(expr=model.y <= 50)

    tc, prog, ni = homotopy(model, [model.x], [20])

    assert tc == TerminationCondition.infeasible
    assert prog == 0
    assert ni == 0
Пример #2
0
def test_basic_max_iter(model):
    tc, prog, ni = homotopy(model, [model.x], [20], max_eval=2)

    assert pytest.approx(model.y.value, 1e-4) == 182.25

    assert tc == TerminationCondition.maxEvaluations
    assert prog == 0.35
    assert ni == 2
Пример #3
0
def test_basic(model):
    tc, prog, ni = homotopy(model, [model.x], [20])

    assert model.y.value == 400

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 4
Пример #4
0
def test_basic_overshoot(model):
    # Use a big step such that overshoot will occur if not caught
    tc, prog, ni = homotopy(model, [model.x], [20], step_init=0.6)

    assert model.y.value == 400

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 2
Пример #5
0
def test_basic_step_accel(model):
    # With zero acceleration, should take 10 steps
    tc, prog, ni = homotopy(model, [model.x], [20], step_accel=0)

    assert model.y.value == 400

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 10
Пример #6
0
def test_basic_iter_target(model):
    # Should take 5 steps
    tc, prog, ni = homotopy(model, [model.x], [20], iter_target=2)

    assert model.y.value == 400

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 5
Пример #7
0
def test_basic_max_step(model):
    # With max_step = step_init = 0.1, should take 10 steps
    tc, prog, ni = homotopy(model, [model.x], [20], max_step=0.1)

    assert model.y.value == 400

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 10
Пример #8
0
def test_basic_constraint_violation(model):
    # Add a constraint to limit y
    model.c2 = Constraint(expr=model.y <= 300)

    # Try to walk to a value of x that gives an infeasible value of y
    tc, prog, ni = homotopy(model, [model.x], [20])

    assert pytest.approx(model.y.value, 1e-4) == 293.27

    assert tc == TerminationCondition.minStepLength
    assert prog == 0.7125
    assert ni == 12
Пример #9
0
def test_basic_step_cut_2(model):
    # Add a constraint to limit y
    model.c2 = Constraint(expr=model.y <= 196)

    # Should take 7 steps
    # 4 steps to reach 14, and 3 to cut back to min_step
    tc, prog, ni = homotopy(model, [model.x], [20], step_init=0.1,
                            min_step=0.01, step_cut=0.25, step_accel=0)

    assert model.y.value == 196

    assert tc == TerminationCondition.minStepLength
    assert prog == 0.4
    assert ni == 7
Пример #10
0
def test_ideal_prop(model2):
    tc, prog, ni = homotopy(model2, [model2.fs.state_block.temperature], [390])

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 5

    # Check for VLE results
    assert model2.fs.state_block.mole_frac_phase_comp["Liq", "benzene"].value \
        == pytest.approx(0.291, abs=1e-3)
    assert model2.fs.state_block.mole_frac_phase_comp["Liq", "toluene"].value \
        == pytest.approx(0.709, abs=1e-3)
    assert model2.fs.state_block.mole_frac_phase_comp["Vap", "benzene"].value \
        == pytest.approx(0.5, abs=1e-5)
    assert model2.fs.state_block.mole_frac_phase_comp["Vap", "toluene"].value \
        == pytest.approx(0.5, abs=1e-5)
Пример #11
0
def test_ideal_prop_max_iter(model2):
    tc, prog, ni = homotopy(
            model2, [model2.fs.state_block.temperature], [390],
            max_solver_iterations=3, min_step=0.01, step_accel=0)

    assert tc == TerminationCondition.optimal
    assert prog == 1
    assert ni == 19

    # Check for VLE results
    assert model2.fs.state_block.mole_frac_phase_comp["Liq", "benzene"].value \
        == pytest.approx(0.291, abs=1e-3)
    assert model2.fs.state_block.mole_frac_phase_comp["Liq", "toluene"].value \
        == pytest.approx(0.709, abs=1e-3)
    assert model2.fs.state_block.mole_frac_phase_comp["Vap", "benzene"].value \
        == pytest.approx(0.5, abs=1e-5)
    assert model2.fs.state_block.mole_frac_phase_comp["Vap", "toluene"].value \
        == pytest.approx(0.5, abs=1e-5)
Пример #12
0
def test_current_value_ub(model):
    model.x.setub(5)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20])
Пример #13
0
def test_var_not_fixed(model):
    model.x.unfix()

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20])
Пример #14
0
def test_var_not_in_model(model):
    m2 = ConcreteModel()

    with pytest.raises(ConfigurationError):
        homotopy(m2, [model.x], [20])
Пример #15
0
def test_not_var(model):
    model.p = Param()

    with pytest.raises(TypeError):
        homotopy(model, [model.p], [20])
Пример #16
0
def test_invalid_model(model):
    o = object()

    with pytest.raises(TypeError):
        homotopy(o, [model.x], [20])
Пример #17
0
def test_target_value_lb(model):
    model.x.fix(50)
    model.x.setlb(30)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20])
Пример #18
0
def test_step_cut(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], step_cut=0.09)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], step_cut=0.91)
Пример #19
0
def test_step_accel(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], step_accel=-1)
Пример #20
0
def test_iter_target(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], iter_target=0)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], iter_target=1.7)
Пример #21
0
def test_min_max_step(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], min_step=0.1, max_step=0.05)
Пример #22
0
def test_init_step_min_max(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], step_init=0.2, max_step=0.1)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], step_init=0.05, min_step=0.1)
Пример #23
0
def test_max_eval(model):
    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], max_eval=0)

    with pytest.raises(ConfigurationError):
        homotopy(model, [model.x], [20], max_eval=1.7)