Example #1
0
def test_sawatabi_solver_n_hot_ising_with_deleting(n, s, i):
    # n out of (s - 1) variables should be 1
    model = LogicalModel(mtype="ising")
    x = model.variables("x", shape=(s,))
    model.add_constraint(NHotConstraint(variables=x, n=n))
    model.delete_variable(x[i])

    solver = SawatabiSolver()
    sampleset = solver.solve(model.to_physical(), seed=12345)

    result = np.array(sampleset.record[0].sample)
    assert np.count_nonzero(result == 1) == n
    assert np.count_nonzero(result == -1) == s - n - 1
def _create_ising_model_for_eq():
    model = LogicalModel(mtype="ising")
    x = model.variables(name="x", shape=(4,))
    z = model.variables(name="z", shape=(4,))
    model.add_interaction(target=x[0], coefficient=1.1)
    model.add_interaction(target=(x[0], x[1]), coefficient=2.2, scale=3.3, attributes={"foo": "bar"})

    model.add_interaction(target=x[2], coefficient=4.4)
    model.add_interaction(target=x[3], coefficient=5.5)
    model.remove_interaction(target=x[2])
    model.fix_variable(target=x[3], value=1)

    model.add_constraint(NHotConstraint(variables=z, n=1))

    return model
def test_logical_model_to_physical_with_n_hot_constraint_qubo(n, s):
    # n out of s variables should be 1
    model = LogicalModel(mtype="qubo")
    x = model.variables("x", shape=(s,))
    model.add_constraint(NHotConstraint(x, n=n))
    physical = model.to_physical()

    for i in range(s):
        assert physical._raw_interactions[constants.INTERACTION_LINEAR][f"x[{i}]"] == 2 * n - 1.0
    for i in range(s):
        for j in range(s):
            l1 = f"x[{i}]"
            l2 = f"x[{j}]"
            if l1 < l2:
                assert physical._raw_interactions[constants.INTERACTION_QUADRATIC][(l1, l2)] == -2.0
Example #4
0
def test_local_solver_zero_or_one_hot_qubo(n):
    model = LogicalModel(mtype="qubo")
    x = model.variables("x", shape=(n,))
    model.add_constraint(ZeroOrOneHotConstraint(variables=x))

    solver = LocalSolver()
    physical = model.to_physical()
    for seed in [11, 22, 33, 44, 55]:
        sampleset = solver.solve(physical, seed=seed)

        result = np.array(sampleset.record[0].sample)
        assert np.count_nonzero(result == 1) in [0, 1]

        # Execution time should be within practical seconds (20 sec).
        assert sampleset.info["timing"]["execution_sec"] <= 20.0
Example #5
0
def test_sawatabi_solver_n_hot_qubo(n, s):
    # n out of s variables should be 1
    model = LogicalModel(mtype="qubo")
    x = model.variables("x", shape=(s,))
    model.add_constraint(NHotConstraint(variables=x, n=n))

    solver = SawatabiSolver()
    sampleset = solver.solve(model.to_physical(), seed=12345)

    result = np.array(sampleset.record[0].sample)
    assert np.count_nonzero(result == 1) == n
    assert np.count_nonzero(result == 0) == s - n

    # Execution time should be within practical seconds (20 sec).
    assert sampleset.info["timing"]["execution_sec"] <= 20.0
Example #6
0
def test_local_solver_n_hot_ising(n, s):
    # n out of s spins should be +1
    model = LogicalModel(mtype="ising")
    x = model.variables("x", shape=(s,))
    model.add_constraint(NHotConstraint(variables=x, n=n))

    solver = LocalSolver()
    physical = model.to_physical()
    for seed in [11, 22, 33, 44, 55]:
        sampleset = solver.solve(physical, seed=seed)

        result = np.array(sampleset.record[0].sample)
        assert np.count_nonzero(result == 1) == n
        assert np.count_nonzero(result == -1) == s - n

        # Execution time should be within practical seconds (20 sec).
        assert sampleset.info["timing"]["execution_sec"] <= 20.0
def test_logical_model_to_physical_with_n_hot_constraint_ising(n, s):
    # n out of s spins should be +1
    model = LogicalModel(mtype="ising")
    x = model.variables("x", shape=(s,))
    model.add_constraint(NHotConstraint(x, n=n))
    physical = model.to_physical()

    for i in range(s):
        if s != 2 * n:
            assert physical._raw_interactions[constants.INTERACTION_LINEAR][f"x[{i}]"] == -0.5 * (s - 2 * n)
        else:
            assert f"x[{i}]" not in physical._raw_interactions[constants.INTERACTION_LINEAR]
    for i in range(s):
        for j in range(s):
            l1 = f"x[{i}]"
            l2 = f"x[{j}]"
            if l1 < l2:
                assert physical._raw_interactions[constants.INTERACTION_QUADRATIC][(l1, l2)] == -0.5
Example #8
0
def test_local_solver_equality_qubo(m, n):
    model = LogicalModel(mtype="qubo")
    x = model.variables("x", shape=(m,))
    y = model.variables("y", shape=(n,))
    model.add_constraint(EqualityConstraint(variables_1=x, variables_2=y))

    solver = LocalSolver()
    physical = model.to_physical()
    for seed in [11, 22, 33, 44, 55]:
        sampleset = solver.solve(physical, seed=seed)

        result = np.array(sampleset.record[0].sample)
        result_1 = result[0:m]
        result_2 = result[m : (m + n)]  # noqa: E203
        assert np.count_nonzero(result_1 == 1) == np.count_nonzero(result_2 == 1)

        # Execution time should be within practical seconds (20 sec).
        assert sampleset.info["timing"]["execution_sec"] <= 20.0
Example #9
0
def test_logical_model_delete_dealing_with_nhot_constraints_qubo():
    model = LogicalModel(mtype="qubo")
    x = model.variables("x", shape=(4, ))
    default_label = "Default N-hot Constraint"

    model.add_constraint(NHotConstraint(x, n=1, strength=1.0))
    assert len(model.get_constraints()) == 1
    assert default_label in model.get_constraints()
    assert model.get_constraints_by_label(default_label)._n == 1
    assert len(model.get_constraints_by_label(default_label)._variables) == 4

    model.delete_variable(x[0])

    assert len(model.get_constraints()) == 1
    assert default_label in model.get_constraints()
    assert model.get_constraints_by_label(default_label)._n == 1
    assert len(model.get_constraints_by_label(default_label)._variables) == 3

    physical = model.to_physical()
    assert physical._raw_interactions[
        constants.INTERACTION_LINEAR]["x[1]"] == 1.0
    assert physical._raw_interactions[constants.INTERACTION_QUADRATIC][(
        "x[1]", "x[2]")] == -2.0
def ising_z3():
    model = LogicalModel(mtype="ising")
    z = model.variables("z", shape=(3,))
    model.add_constraint(NHotConstraint(variables=z, n=1))
    return model