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