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