コード例 #1
0
def get_solver(solver_type: str, solver_name: str, token):
    filters = {}
    if solver_type.endswith("QPU") and solver_name in QPU_SOLVER_NAME_LIST:
        filters[
            "topology__type"] = "pegasus" if solver_name == "ADVANTAGE" else "chimera"
        filters[
            "name__contains"] = "Advantage_system" if solver_name == "ADVANTAGE" else "DW_2000Q"
    if solver_type.endswith(
            "HYBRID") and solver_name in HYBRID_SOLVER_NAME_LIST:
        filters[
            "name__contains"] = "version2" if solver_name == "HYBRID_V2" else "v1"

    if solver_type == "SA":
        solver = neal.SimulatedAnnealingSampler()
    elif solver_type == "QPU":
        solver = DWaveSampler(client="qpu", solver=filters, token=token)
        solver = EmbeddingComposite(solver)
    elif solver_type == "HYBRID":
        solver = LeapHybridSampler(solver=filters, token=token)
    elif solver_type == "FIXED_QPU":
        solver = DWaveSampler(client="qpu", solver=filters, token=token)
        solver = LazyFixedEmbeddingComposite(solver)
    elif solver_type == "CLIQUE_FIXED_QPU":
        solver = DWaveCliqueSampler(client="qpu", solver=filters, token=token)
    else:
        raise NotImplementedError(
            "Solver {} is not implemented".format(solver_type))
    return solver
コード例 #2
0
    def test_sample_bqm(self, mock_client):

        mock_client.from_config.side_effect = MockClient

        bqm = dimod.BinaryQuadraticModel({'a': -1, 'b': 1, 'c': 1},
                    {'ab': -0.8, 'ac': -0.7, 'bc': -1}, 0, dimod.SPIN)

        sampler = LeapHybridSampler()

        response = sampler.sample(bqm)

        rows, cols = response.record.sample.shape

        self.assertEqual(cols, 3)
        self.assertFalse(np.any(response.record.sample == 0))
        self.assertIs(response.vartype, dimod.SPIN)
        self.assertIn('num_occurrences', response.record.dtype.fields)
コード例 #3
0
    def test_sample_ising_variables(self, mock_client):

        mock_client.from_config.side_effect = MockClient

        sampler = LeapHybridSampler()

        response = sampler.sample_ising({0: -1, 1: 1}, {})

        rows, cols = response.record.sample.shape

        self.assertEqual(cols, 2)

        response = sampler.sample_ising({}, {(0, 4): 1})

        rows, cols = response.record.sample.shape
        self.assertEqual(cols, 2)
        self.assertFalse(np.any(response.record.sample == 0))
        self.assertIs(response.vartype, dimod.SPIN)
コード例 #4
0
    def test_sample_qubo_variables(self, mock_client):

        mock_client.from_config.side_effect = MockClient

        sampler = LeapHybridSampler()

        response = sampler.sample_qubo({(0, 0): -1, (1, 1): 1})

        rows, cols = response.record.sample.shape

        self.assertEqual(cols, 2)

        response = sampler.sample_qubo({(0, 0): -1, (1, 1): 1})

        rows, cols = response.record.sample.shape

        self.assertEqual(cols, 2)
        self.assertTrue(np.all(response.record.sample >= 0))
        self.assertIs(response.vartype, dimod.BINARY)
コード例 #5
0
ファイル: test.py プロジェクト: kevinab107/q-algos
def solve_tsp_hybrid(Q, G):
    bqm = BinaryQuadraticModel.from_qubo(Q)
    response = LeapHybridSampler().sample(bqm, time_limit=40)
    sample = response.first.sample
    route = [None] * len(G)
    for (city, time), val in sample.items():
        if val:
            route[time] = city
    cost = calculate_cost(nx.to_numpy_array(G), route)
    return (route, cost)
コード例 #6
0
def run_annealer_hybrid(theta):
    sampler = LeapHybridSampler()
    response = sampler.sample_qubo(theta)
    response = response.first.sample.values()

    return np.atleast_2d(list(response)).T
コード例 #7
0
    def test_solver_init(self, mock_client):

        mock_client.from_config.side_effect = MockClient

        # Default call
        mock_client.reset_mock()
        LeapHybridSampler()
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=True,
            solver={
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })

        # Non-hybrid client setting
        mock_client.reset_mock()
        with self.assertRaises(SolverNotFoundError):
            LeapHybridSampler(client='qpu')

        # Explicitly set category to hybrid
        mock_client.reset_mock()
        LeapHybridSampler(solver={
            'category': 'hybrid',
            'supported_problem_types__contains': 'bqm'
        })
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=True,
            solver={
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })

        # Explicitly set category to not hybrid
        with self.assertRaises(ValueError):
            LeapHybridSampler(solver={'category': 'not hybrid'})

        # Set irrelevant paremeters
        mock_client.reset_mock()
        LeapHybridSampler(solver={'qpu': True})
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=True,
            solver={
                'qpu': True,
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })

        mock_client.reset_mock()
        LeapHybridSampler(solver={'qpu': True, 'anneal_schedule': False})
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=True,
            solver={
                'anneal_schedule': False,
                'qpu': True,
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })

        # Named solver: hybrid
        mock_client.reset_mock()
        LeapHybridSampler(solver="hybrid_solver")
        mock_client.from_config.assert_called_once_with(client='hybrid',
                                                        connection_close=True,
                                                        solver="hybrid_solver")

        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False, solver="hybrid_solver")
        mock_client.from_config.assert_called_once_with(client='hybrid',
                                                        connection_close=False,
                                                        solver="hybrid_solver")

        # Named solver: non-hybrid
        with self.assertRaises(ValueError):
            LeapHybridSampler(solver="not_hybrid_solver")

        # Set connection_close to False
        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False)
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=False,
            solver={
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })

        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False,
                          solver={
                              'category': 'hybrid',
                              'supported_problem_types__contains': 'bqm'
                          })
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=False,
            solver={
                'category': 'hybrid',
                'supported_problem_types__contains': 'bqm',
                'order_by': '-version'
            })
コード例 #8
0
    def test_solver_init(self, mock_client):

        mock_client.from_config.side_effect = MockClient

        # Default call
        mock_client.reset_mock()
        LeapHybridSampler()
        mock_client.from_config.assert_called_once_with(
            connection_close=True, solver={'category': 'hybrid'})

        # Explicitly set category to hybrid
        mock_client.reset_mock()
        LeapHybridSampler(solver={'category': 'hybrid'})
        mock_client.from_config.assert_called_once_with(
            connection_close=True, solver={'category': 'hybrid'})

        # Explicitly set category to not hybrid
        with self.assertRaises(ValueError):
            LeapHybridSampler(solver={'category': 'not hybrid'})

        # Set irrelevant paremeters
        mock_client.reset_mock()
        LeapHybridSampler(solver={'qpu': True})
        mock_client.from_config.assert_called_once_with(connection_close=True,
                                                        solver={
                                                            'qpu': True,
                                                            'category':
                                                            'hybrid'
                                                        })

        mock_client.reset_mock()
        LeapHybridSampler(solver={'qpu': True, 'anneal_schedule': False})
        mock_client.from_config.assert_called_once_with(connection_close=True,
                                                        solver={
                                                            'anneal_schedule':
                                                            False,
                                                            'qpu': True,
                                                            'category':
                                                            'hybrid'
                                                        })

        # Named solver: hybrid
        mock_client.reset_mock()
        LeapHybridSampler(solver="hybrid_solver")
        mock_client.from_config.assert_called_once_with(connection_close=True,
                                                        solver="hybrid_solver")

        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False, solver="hybrid_solver")
        mock_client.from_config.assert_called_once_with(connection_close=False,
                                                        solver="hybrid_solver")

        # Named solver: non-hybrid
        with self.assertRaises(ValueError):
            LeapHybridSampler(solver="not_hybrid_solver")

        # Set connection_close to False
        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False)
        mock_client.from_config.assert_called_once_with(
            connection_close=False, solver={'category': 'hybrid'})

        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False,
                          solver={'category': 'hybrid'})
        mock_client.from_config.assert_called_once_with(
            connection_close=False, solver={'category': 'hybrid'})
コード例 #9
0
ファイル: test.py プロジェクト: kevinab107/q-algos

config = sigma_is_one_constraints(G.number_of_nodes())
for node in G.nodes():
    variables = [str(node) + str(pos) for pos in G.nodes()]
    csp.add_constraint(config, variables)

for pos in G.nodes():
    variables = [str(node) + str(pos) for node in G.nodes()]
    csp.add_constraint(config, variables)

bqm = dwavebinarycsp.stitch(csp, max_graph_size=15)

#%%

sampler = LeapHybridSampler()
response = sampler.sample(bqm)

# %%
from collections import defaultdict

data = create_tsp_data_model(5)
G = nx.from_numpy_matrix(data["distance_matrix_numpy"])

time_window = defaultdict(bool)
i = 0
for node in range(5):
    i += 1
    for pos in range(5):
        if pos < i:
            time_window[(4 - node, pos)] = True
コード例 #10
0
    def test_solver_init(self, mock_client):
        mock_client.from_config.side_effect = MockClient

        default_solver = dict(
            supported_problem_types__contains='bqm',
            order_by='-properties.version')
        self.assertEqual(LeapHybridSampler.default_solver, default_solver)

        defaults = dict(solver=default_solver)

        # Default call
        mock_client.reset_mock()
        LeapHybridSampler()
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=True,
            defaults=defaults)

        # Non-hybrid client setting
        mock_client.reset_mock()
        with self.assertRaises(SolverNotFoundError):
            LeapHybridSampler(client='qpu')

        # Explicitly set solver def
        mock_client.reset_mock()
        LeapHybridSampler(solver={'supported_problem_types__contains': 'bqm'})
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            solver={'supported_problem_types__contains': 'bqm'},
            connection_close=True,
            defaults=defaults)

        # Named solver
        solver_name = 'hybrid-solver-name'
        mock_client.reset_mock()
        LeapHybridSampler(solver=solver_name)
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            solver=solver_name,
            connection_close=True,
            defaults=defaults)

        # Named solver: non-hybrid
        with self.assertRaises(ValueError):
            LeapHybridSampler(solver='not_hybrid_solver')

        # Set connection_close to False
        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False)
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            connection_close=False,
            defaults=defaults)

        mock_client.reset_mock()
        LeapHybridSampler(connection_close=False, solver=solver_name)
        mock_client.from_config.assert_called_once_with(
            client='hybrid',
            solver=solver_name,
            connection_close=False,
            defaults=defaults)