Source code for qlauncher.routines.dwave.backends
1"""DWave backends"""
2
3from abc import ABC, abstractmethod
4
5from qlauncher.base import Backend
6from qlauncher.exceptions import DependencyError
7
8try:
9 from dimod import Sampler
10 from dwave.samplers import SimulatedAnnealingSampler, SteepestDescentSampler, TabuSampler
11 from dwave.system import DWaveSampler, EmbeddingComposite
12except ImportError as e:
13 raise DependencyError(e, install_hint='dwave') from e
14
15
[docs]
16class BQMBackend(Backend, ABC):
17 """Base dwave backend"""
18
19 def __init__(self, name: str, parameters: list | None = None) -> None:
20 super().__init__(name, parameters)
21 self.sampler = self._get_sampler()
22
23 @abstractmethod
24 def _get_sampler(self) -> Sampler:
25 """Get a dimod sampler"""
26
27
[docs]
28class TabuBackend(BQMBackend):
29 """Tabu search simulator backend"""
30
31 def __init__(self, parameters: list | None = None) -> None:
32 super().__init__('TabuBackend', parameters)
33
34 def _get_sampler(self):
35 return TabuSampler()
36
37
[docs]
38class SimulatedAnnealingBackend(BQMBackend):
39 """Simulated annealing simulator backend"""
40
41 def __init__(self, parameters: list | None = None) -> None:
42 super().__init__('SimulatedAnnealingBackend', parameters)
43
44 def _get_sampler(self) -> Sampler:
45 return SimulatedAnnealingSampler()
46
47
[docs]
48class SteepestDescentBackend(BQMBackend):
49 """Steepest descent simulator backend"""
50
51 def __init__(self, parameters: list | None = None) -> None:
52 super().__init__('SteepestDescentBackend', parameters)
53
54 def _get_sampler(self) -> Sampler:
55 return SteepestDescentSampler()
56
57
[docs]
58class DwaveBackend(BQMBackend):
59 """Real Dwave device backend"""
60
61 def __init__(self, parameters: list | None = None) -> None:
62 super().__init__('DwaveDevice', parameters)
63
64 def _get_sampler(self) -> Sampler:
65 return EmbeddingComposite(DWaveSampler())