Classical Solvers¶
You might use a classical solver while developing your code or on a small version of your problem to verify your code. To solve a problem classically on your local machine, you configure a classical solver, either one of those included in the Ocean tools or your own.
Examples¶
Among several samplers provided in the dimod
tool for testing your code locally, is the ExactSolver
that calculates the energy of all
possible samples for a given problem. Such a sampler can solve a small three-variable
problem such as a BQM representing a Boolean AND gate (see also the
Example: BQM for a Boolean Circuit section) as follows:
>>> from dimod.generators import and_gate
>>> from dimod import ExactSolver
>>> bqm = and_gate('in1', 'in2', 'out')
>>> sampler = ExactSolver()
>>> sampleset = sampler.sample(bqm)
>>> print(sampleset)
in1 in2 out energy num_oc.
0 0 0 0 0.0 1
1 1 0 0 0.0 1
3 0 1 0 0.0 1
5 1 1 1 0.0 1
2 1 1 0 2.0 1
4 0 1 1 2.0 1
6 1 0 1 2.0 1
7 0 0 1 6.0 1
['BINARY', 8 rows, 8 samples, 3 variables]
Note that the first four samples are the valid states of the AND gate and have lower values than the second four, which represent invalid states.
If you use a classical solver running locally on your CPU, a single sample might provide the optimal solution.
This example solves a two-variable problem using the dwave_neal
simulated annealing sampler. For such a small problem, num_reads=10
most likely
finds the optimal solution.
>>> import neal
>>> solver = neal.SimulatedAnnealingSampler()
>>> sampleset = solver.sample_ising({'a': -0.5, 'b': 1.0}, {('a', 'b'): -1}, num_reads=10)
>>> sampleset.first.sample["a"] == sampleset.first.sample["b"] == -1
True