From f76fdc2f6b2a592fade71f0a93486e513a9cd4f8 Mon Sep 17 00:00:00 2001 From: Alexander Condello Date: Tue, 10 Oct 2017 13:26:42 -0700 Subject: [PATCH] 0.2.0 * implemented composition for spin variables, no docs yet * broke everything but now better documented * sped up ising_to_qubo * sped up qubo_to_ising * fixed important bug where data field was replicated * composition version implemented, might try decorator now... * layer -> composite * dynamic inheritance to instantiated object wrapping * added to unittests * install instructions include pip * docstrings and html stuff, not complete * first pass finished documentation for spin_transform * clean up, unittest update * finished first draft documentation * updated ignore * changed generic sampler test name so it hopefully does not get caught by pytest * removed unnecessary import * samples -> num_samples * removed structured_ising and structured_qubo methods, added composite functionality * Added Travis CI status badge to README * sublime in .gitignore * removing structure * building on travis and appveyor for pypi * changed install * reverted. added using pip to install * changed order * Update .travis.yml changed test runner * added deployment details for deployment to pypi * added deployment details for deployment to pypi * Merge branch 'master' of https://github.com/oneklc/dimod * added linux and mac os testing * fixed order * added appveyor.yml from demo * modified to work with our build process * testing a hunch * hunch number 2 * osx fixes for travis-ci * fixes for mac builds * fixed pip install * made executable * more updates for osx testing * fix for python 2.7 * changed pypi user * more fixes for python2 on mac * clean up * clean up * added appveyor helper scripts * added appveyor helper scripts * typo fix * installing/upgrading setuptools and wheel in python env * removed previous fail. installing/upgrading setuptools and wheel in python env * removing ci support for python 2.6 * added wheel to travis pypi build * does not support python 2.7.0 * removed structured methods with references * updated documenation to reflect removal of structured methods * removed structured, changed the way the structure property was added and added inits to the example samplers --- .gitignore | 6 +- README.md | 4 + dimod/__init__.py | 8 +- dimod/composite_template.py | 57 ++++ dimod/composites/__init__.py | 1 + dimod/composites/spin_transform.py | 289 ++++++++++++++++++ dimod/composites/tests/__init__.py | 0 dimod/composites/tests/test_spin_transform.py | 119 ++++++++ dimod/responses.py | 16 +- dimod/sampler_template.py | 114 +------ dimod/samplers/brute_force.py | 3 + dimod/samplers/random_sampler.py | 3 + dimod/samplers/simulated_annealing.py | 5 +- dimod/samplers/tests/generic_sampler_tests.py | 2 +- dimod/samplers/tests/test_brute_force.py | 4 +- dimod/samplers/tests/test_random_sampler.py | 4 +- .../tests/test_simulated_annealing.py | 13 +- dimod/tests/test_utilities.py | 52 +++- dimod/utilities.py | 77 ++--- docs/composing_samplers.png | Bin 0 -> 99633 bytes docs/composite_template.rst | 19 ++ docs/composites/index.rst | 16 + docs/composites/spin_transform.rst | 9 + docs/conf.py | 3 +- docs/index.rst | 6 +- docs/sampler_template.rst | 2 - docs/samplers/exactsolver.rst | 2 +- docs/samplers/randomsampler.rst | 2 +- docs/samplers/simulatedannealing.rst | 2 +- 29 files changed, 653 insertions(+), 185 deletions(-) create mode 100644 dimod/composite_template.py create mode 100644 dimod/composites/__init__.py create mode 100644 dimod/composites/spin_transform.py create mode 100644 dimod/composites/tests/__init__.py create mode 100644 dimod/composites/tests/test_spin_transform.py create mode 100644 docs/composing_samplers.png create mode 100644 docs/composite_template.rst create mode 100644 docs/composites/index.rst create mode 100644 docs/composites/spin_transform.rst diff --git a/.gitignore b/.gitignore index de1bba2f6..9b260576b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,11 @@ *.pyc +*.odp build dimod.egg-info dist -docs/generated \ No newline at end of file +docs/generated + +*.sublime-project +*.sublime-workspace \ No newline at end of file diff --git a/README.md b/README.md index 205780ce8..591f5ac9d 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ See documentation for more examples. Compatible with Python 2 and 3. +`pip install dimod` + +To install from source: + `python setup.py install` ## License diff --git a/dimod/__init__.py b/dimod/__init__.py index 175ccbd7e..a69ad79f4 100644 --- a/dimod/__init__.py +++ b/dimod/__init__.py @@ -1,4 +1,6 @@ -__version__ = '0.1.1' +from __future__ import absolute_import + +__version__ = '0.2.0' __author__ = 'D-Wave Systems Inc.' __authoremail__ = 'acondello@dwavesys.com' __description__ = 'A shared API for binary quadratic model samplers.' @@ -14,3 +16,7 @@ from dimod.sampler_template import * from dimod.samplers import * + +from dimod.composites import * + +from dimod.composite_template import * diff --git a/dimod/composite_template.py b/dimod/composite_template.py new file mode 100644 index 000000000..549863e14 --- /dev/null +++ b/dimod/composite_template.py @@ -0,0 +1,57 @@ +""" +Samplers can be composed. This pattern allows pre- and post-processing +to be applied to binary quadratic programs without needing to change +the underlying sampler implementation. + +We refer to these layers as `composites`. Each composed sampler must +include at least one `sampler`, and possibly many composites. See +'dimod sampler composition pattern' figure below. + +Each composed sampler is itself a dimod sampler with all of the +included methods and parameters. In this way complex samplers +can be constructed. + + +Examples +-------- + +We will be using the included composite :class:`.SpinReversalTransform` +and included samplers :class:`.ExactSolver` and +:class:`.SimulatedAnnealingSampler` in our examples. + +Building composed samplers are easy + +>>> composed_sampler_es = dimod.SpinReversalTransform(dimod.ExactSolver()) + +A composite layer can be applied to any dimod sampler. + +>>> composed_sampler_sa = dimod.SpinReversalTransform(dimod.SimulatedAnnealingSampler) + +These composed samplers themselves behave exactly like samplers. + +>>> h = {0: -1, 1: 1} +>>> response = composed_sampler_es.sample_ising(h, {}) +>>> list(response.samples()) +[{0: 1, 1: -1}, {0: -1, 1: -1}, {0: 1, 1: 1}, {0: -1, 1: 1}] + +Composite layers can also be nested. + +>>> composed_sampler_nested = dimod.SpinReversalTransform(composed_sampler_es) + +""" +from dimod import TemplateSampler + + +class TemplateComposite(TemplateSampler): + """Serves as a template for composites. Not intended to be used directly. + + Args: + *samplers: child sampler(s) of the composite. + + Attributes: + children (list): A list of child samplers or child composed samplers. + + """ + def __init__(self, *samplers): + TemplateSampler.__init__(self) + self.children = list(samplers) diff --git a/dimod/composites/__init__.py b/dimod/composites/__init__.py new file mode 100644 index 000000000..2a224f9c6 --- /dev/null +++ b/dimod/composites/__init__.py @@ -0,0 +1 @@ +from dimod.composites.spin_transform import * diff --git a/dimod/composites/spin_transform.py b/dimod/composites/spin_transform.py new file mode 100644 index 000000000..6d1b5b332 --- /dev/null +++ b/dimod/composites/spin_transform.py @@ -0,0 +1,289 @@ +from random import random +import sys +import time +import itertools + +from dimod.composite_template import TemplateComposite +from dimod.responses import SpinResponse, BinaryResponse +from dimod.decorators import ising, qubo +from dimod.utilities import ising_to_qubo, qubo_to_ising + +__all__ = ['SpinReversalTransform'] + +_PY2 = sys.version_info[0] == 2 +if _PY2: + iteritems = lambda d: d.iteritems() + range = xrange + zip = itertools.izip +else: + iteritems = lambda d: d.items() + + +class SpinReversalTransform(TemplateComposite): + """Composite for applying spin reversal transform preprocessing. + + Spin reversal transforms (or "gauge transformations") are applied + by flipping the spin of variables in the Ising problem. We can + then sample using the transformed Ising problem and flip the same + bits in the resulting sample. + + Args: + sampler: A dimod sampler object. + + Examples: + Composing a sampler. + + >>> base_sampler = dimod.ExactSolver() + >>> composed_sampler = dimod.SpinReversalTransform(base_sampler) + + The composed sampler can now be used as a dimod sampler. + + >>> h = {0: -1, 1: 1} + >>> response = composed_sampler.sample_ising(h, {}) + >>> list(response.samples()) + [{0: 1, 1: -1}, {0: -1, 1: -1}, {0: 1, 1: 1}, {0: -1, 1: 1}] + + The base sampler is also in `children` attribute of the composed + sampler. + + >>> base_sampler in composed_sampler.children + True + + References + ---------- + .. [KM] Andrew D. King and Catherine C. McGeoch. Algorithm engineering + for a quantum annealing platform. https://arxiv.org/abs/1410.2628, + 2014. + + Attributes: + children (list): [`sampler`] where `sampler` is the input sampler. + structure: Inherited from input `sampler`. + + """ + def __init__(self, sampler): + # puts sampler into self.children + TemplateComposite.__init__(self, sampler) + + self._child = sampler # faster access than self.children[0] + + # copy over the structure + self.structure = sampler.structure + + @ising(1, 2) + def sample_ising(self, h, J, + num_spin_reversal_transforms=1, spin_reversal_variables=None, + **kwargs): + """Applies spin reversal transforms to an Ising problem, then samples + using the child sampler's `sample_ising` method. + + Args: + h (dict/list): The linear terms in the Ising problem. If a + dict, should be of the form {v: bias, ...} where v is + a variable in the Ising problem, and bias is the linear + bias associated with v. If a list, should be of the form + [bias, ...] where the indices of the biases are the + variables in the Ising problem. + J (dict): A dictionary of the quadratic terms in the Ising + problem. Should be of the form {(u, v): bias} where u, + v are variables in the Ising problem and bias is the + quadratic bias associated with u, v. + num_spin_reversal_transforms (int, optional): Default 1. The + number of different spin reversal transforms to apply to + the given Ising problem. Note that the child sampler will + be invoked for each spin reversal transform. + spin_reversal_variables (iterable, optional): An iterable of + variables in the Ising problem. These are the variables + that have their spins flipped. If set to None, each variable + has a 50% chance of having its bit flipped. Default None. + **kwargs: Any other keyword arguments are passed unchanged to + the child sampler's `sample_ising` method. + + + Notes: + As noted in the section defining the `num_spin_reversal_transforms` + parameter, the child sampler will be invoked for each different + spin reversal transform. So if the child sampler accepts a + `num_reads` keyword parameter, the total number of reads + performed will be `num_reads` * `num_spin_reversal_transforms`. + + """ + if not isinstance(num_spin_reversal_transforms, int): + raise TypeError("input `num_spin_reversal_transforms` must be an 'int'") + + sampler = self._child + + # dispatch all of the jobs, in case the samples are resolved upon response read. + # keep track of which variables were transformed + dispatched = [] + for __ in range(num_spin_reversal_transforms): + h_spin, J_spin, transform = \ + apply_spin_reversal_transform(h, J, spin_reversal_variables) + + response = sampler.sample_ising(h_spin, J_spin, **kwargs) + + dispatched.append((response, transform)) + + # put all of the responses into one + st_response = SpinResponse() + + for response, transform in dispatched: + samples, energies, sample_data = zip(*response.items(data=True)) + + # flip the bits in the samples + st_samples = (_apply_srt_sample_spin(sample, transform) for sample in samples) + + # keep track of which bits were flipped in data + st_sample_data = (_apply_srt_sample_data(dat, transform) for dat in sample_data) + + st_response.add_samples_from(st_samples, energies, st_sample_data) + + st_response.data.update(response.data) + + return st_response + + @ising(1, 2) + def sample_structured_ising(self, h, J, + num_spin_reversal_transforms=1, spin_reversal_variables=None, + **kwargs): + """Applies spin reversal transforms to an Ising problem, then samples + using the child sampler's `sample_structured_ising` method. + + Args: + h (dict/list): The linear terms in the Ising problem. If a + dict, should be of the form {v: bias, ...} where v is + a variable in the Ising problem, and bias is the linear + bias associated with v. If a list, should be of the form + [bias, ...] where the indices of the biases are the + variables in the Ising problem. + J (dict): A dictionary of the quadratic terms in the Ising + problem. Should be of the form {(u, v): bias} where u, + v are variables in the Ising problem and bias is the + quadratic bias associated with u, v. + num_spin_reversal_transforms (int, optional): Default 1. The + number of different spin reversal transforms to apply to + the given Ising problem. Note that the child sampler will + be invoked for each spin reversal transform. + spin_reversal_variables (iterable, optional): An iterable of + variables in the Ising problem. These are the variables + that have their spins flipped. If set to None, each variable + has a 50% chance of having its bit flipped. Default None. + **kwargs: Any other keyword arguments are passed unchanged to + the child sampler's `sample_structured_ising` method. + + + Notes: + As noted in the section defining the `num_spin_reversal_transforms` + parameter, the child sampler will be invoked for each different + spin reversal transform. So if the child sampler accepts a + `num_reads` keyword parameter, the total number of reads + performed will be `num_reads` * `num_spin_reversal_transforms`. + + """ + if not isinstance(num_spin_reversal_transforms, int): + raise TypeError("input `num_spin_reversal_transforms` must be an 'int'") + + sampler = self._child + + # dispatch all of the jobs, in case the samples are resolved upon response read. + # keep track of which variables were transformed + dispatched = [] + for __ in range(num_spin_reversal_transforms): + h_spin, J_spin, transform = \ + apply_spin_reversal_transform(h, J, spin_reversal_variables) + + response = sampler.sample_structured_ising(h_spin, J_spin, **kwargs) + + dispatched.append((response, transform)) + + # put all of the responses into one + st_response = SpinResponse() + + for response, transform in dispatched: + samples, energies, sample_data = zip(*response.items(data=True)) + + # flip the bits in the samples + st_samples = (_apply_srt_sample_spin(sample, transform) for sample in samples) + + # keep track of which bits were flipped in data + st_sample_data = (_apply_srt_sample_data(dat, transform) for dat in sample_data) + + st_response.add_samples_from(st_samples, energies, st_sample_data) + + st_response.data.update(response.data) + + return st_response + + +def _apply_srt_sample_spin(sample, transform): + # flips the bits in a spin sample + return {v: -s if v in transform else s for v, s in iteritems(sample)} + + +def _apply_srt_sample_data(data, transform): + # stores information about the transform in the sample's data field + if 'spin_reversal_variables' in data: + data['spin_reversal_variables_{}'.format(time.time())] = transform + else: + data['spin_reversal_variables'] = transform + return data + + +def apply_spin_reversal_transform(h, J, spin_reversal_variables=None): + """Applies spin reversal transforms to an Ising problem. + + Spin reversal transforms (or "gauge transformations") are applied + by flipping the spin of variables in the Ising problem. We can + then sample using the transformed Ising problem and flip the same + bits in the resulting sample. + + Args: + h (dict): The linear terms in the Ising problem. Should be of + the form {v: bias, ...} where v is a variable in the Ising + problem, and bias is the linear bias associated with v. + J (dict): A dictionary of the quadratic terms in the Ising + problem. Should be of the form {(u, v): bias} where u, + v are variables in the Ising problem and bias is the + quadratic bias associated with u, v. + spin_reversal_variables (iterable, optional): An iterable of + variables in the Ising problem. These are the variables + that have their spins flipped. If set to None, each variable + has a 50% chance of having its bit flipped. Default None. + + Returns: + h_spin (dict): the transformed linear biases, in the same + form as `h`. + J_spin (dict): the transformed quadratic biases, in the same + form as `J`. + spin_reversal_variables (set): The variables which had their + spins flipped. If `spin_reversal_variables` were provided, + then this will be the same. + + References + ---------- + .. [KM] Andrew D. King and Catherine C. McGeoch. Algorithm engineering + for a quantum annealing platform. https://arxiv.org/abs/1410.2628, + 2014. + + """ + + if spin_reversal_variables is None: + # apply spin transform to each variable with 50% chance + transform = set(v for v in h if random() > .5) + else: + transform = set(spin_reversal_variables) + + # apply spins transform to the linear biases + h_spin = {v: -bias if v in transform else bias for v, bias in iteritems(h)} + + # apply spins transform to the quadratic biases + def quad_bias(edge): + u, v = edge + bias = J[edge] + if u in transform: + bias = -bias + if v in transform: + bias = -bias + return bias + J_spin = {edge: quad_bias(edge) for edge in J} + + return h_spin, J_spin, transform diff --git a/dimod/composites/tests/__init__.py b/dimod/composites/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/dimod/composites/tests/test_spin_transform.py b/dimod/composites/tests/test_spin_transform.py new file mode 100644 index 000000000..8e1f916a3 --- /dev/null +++ b/dimod/composites/tests/test_spin_transform.py @@ -0,0 +1,119 @@ +import unittest +import itertools +import random + +import dimod +from dimod.samplers.tests.generic_sampler_tests import SamplerAPITest + +# import functions and classes we wish to test, from the 'topmost' location +from dimod.composites.spin_transform import apply_spin_reversal_transform + + +class MockSampler(dimod.TemplateSampler): + def sample_ising(self, h, J, orig_h=None): + + if orig_h is not None: + assert h != orig_h + + return dimod.ExactSolver().sample_ising(h, J) + + return dimod.ExactSolver().sample_qubo(Q) + + +class TestSpinTransformComposition(unittest.TestCase, SamplerAPITest): + + def setUp(self): + self.sampler = dimod.SpinReversalTransform(MockSampler()) + + def test_spin_transform_composition_basic(self): + sampler = self.sampler + + # let's get a problem that we know the answer to + h = {v: .1 for v in range(10)} + J = {(u, v): -1. for (u, v) in itertools.combinations(h, 2)} + + response = sampler.sample_ising(h, J, orig_h=h) + + # lowest energy sample should be all -1 + sample = next(iter(response)) + self.assertTrue(all(s == -1 for s in sample.values())) + + # also energy should still be preserved + for sample, energy in response.items(): + self.assertLessEqual(abs(dimod.ising_energy(h, J, sample) - energy), 10**-5) + + for __, data in response.samples(data=True): + self.assertIn('spin_reversal_variables', data) + + Q, __ = dimod.ising_to_qubo(h, J) + + response = sampler.sample_qubo(Q) + + # lowest energy sample should be all 0 + sample = next(iter(response)) + self.assertTrue(all(s == 0 for s in sample.values())) + + # also energy should still be preserved + for sample, energy in response.items(): + self.assertLessEqual(abs(dimod.qubo_energy(Q, sample) - energy), 10**-5) + + for __, data in response.samples(data=True): + self.assertIn('spin_reversal_variables', data) + + response = sampler.sample_ising(h, J, orig_h=h) + + # lowest energy sample should be all -1 + sample = next(iter(response)) + self.assertTrue(all(s == -1 for s in sample.values())) + + # also energy should still be preserved + for sample, energy in response.items(): + self.assertLessEqual(abs(dimod.ising_energy(h, J, sample) - energy), 10**-5) + + for __, data in response.samples(data=True): + self.assertIn('spin_reversal_variables', data) + + +class TestSpinTransform(unittest.TestCase): + def test_function_typical(self): + """Check that applying the transform twice returns the original + form + """ + # the form of the Ising problem is not important + h = {v: v for v in range(100)} + J = {(u, v): u + v for u, v in itertools.combinations(range(100), 2)} + + # apply transform + h_spin, J_spin, transform = apply_spin_reversal_transform(h, J) + + # unapply the transform + h_orig, J_orig, transform = apply_spin_reversal_transform(h_spin, J_spin, transform) + + self.assertEqual(h, h_orig) + self.assertEqual(J, J_orig) + + def test_specifying_variables(self): + """""" + h = {v: v for v in range(100)} + J = {(u, v): u + v for u, v in itertools.combinations(range(100), 2)} + + transform = {1, 5, 10, 15} + + h_spin, J_spin, transform = apply_spin_reversal_transform(h, J, transform) + + # check that the variables in transform and no others are negated + for v, bias in h_spin.items(): + if v in transform: + self.assertEqual(bias, -v) + else: + self.assertEqual(bias, v) + + for (u, v), bias in J_spin.items(): + if v in transform and u in transform: + self.assertEqual(bias, v + u) + elif v in transform: + self.assertEqual(bias, -(v + u)) + elif u in transform: + self.assertEqual(bias, -(v + u)) + else: + self.assertEqual(bias, v + u) diff --git a/dimod/responses.py b/dimod/responses.py index 537131063..2d7ddbe9a 100644 --- a/dimod/responses.py +++ b/dimod/responses.py @@ -229,7 +229,7 @@ def items(self, data=False): return zip(self._samples, self._energies, self._sample_data) return zip(self._samples, self._energies) - def add_sample(self, sample, energy, data={}): + def add_sample(self, sample, energy, data=None): """Loads a sample and associated energy into the response. Args: @@ -256,6 +256,10 @@ def add_sample(self, sample, energy, data={}): """ + # create a new empty dict + if data is None: + data = {} + if not isinstance(sample, dict): raise TypeError("expected 'sample' to be a dict") if not isinstance(energy, (float, int)): @@ -484,7 +488,7 @@ class BinaryResponse(TemplateResponse): as a dictionary. Default {}. """ - def add_sample(self, sample, energy=None, data={}, Q=None): + def add_sample(self, sample, energy=None, data=None, Q=None): """Loads a sample and associated energy into the response. Args: @@ -536,6 +540,9 @@ def add_sample(self, sample, energy=None, data={}, Q=None): raise TypeError("most provide 'energy' or 'Q'") energy = qubo_energy(Q, sample) + if data is None: + data = {} + TemplateResponse.add_sample(self, sample, energy, data) def add_samples_from(self, samples, energies=None, sample_data=None, Q=None): @@ -654,7 +661,7 @@ class SpinResponse(TemplateResponse): """ - def add_sample(self, sample, energy=None, data={}, h=None, J=None): + def add_sample(self, sample, energy=None, data=None, h=None, J=None): """Loads a sample and associated energy into the response. Args: @@ -700,6 +707,9 @@ def add_sample(self, sample, energy=None, data={}, h=None, J=None): raise TypeError("most provide 'energy' or 'h' and 'J'") energy = ising_energy(h, J, sample) + if data is None: + data = {} + TemplateResponse.add_sample(self, sample, energy, data) def add_samples_from(self, samples, energies=None, sample_data=None, h=None, J=None): diff --git a/dimod/sampler_template.py b/dimod/sampler_template.py index bc9a615fe..e55f30a75 100644 --- a/dimod/sampler_template.py +++ b/dimod/sampler_template.py @@ -6,16 +6,14 @@ - sample_ising - sample_qubo -- sample_structured_ising -- sample_structured_qubo Property: - structure -For many samplers, the `structure` property will be None and the -structured and unstructured variants of the methods will do the -same thing. See Structured Samplers section below. +Some samplers will only function on binary quadratic models with specific +structures. These samplers should have information in the `structure` +property. See Structured Samplers section below. Examples @@ -23,6 +21,10 @@ Define a sampler that operates on QUBO problems: >>> class MyLinearSampler(dimod.TemplateSampler): +... def __init__(self): +... dimod.TemplateSampler.__init__(self) +... self.structure = 'linear' +... ... @dimod.decorators.qubo(1) ... def sample_qubo(self, Q): ... response = dimod.BinaryResponse() @@ -57,43 +59,13 @@ >>> list(response.samples()) [{0: 1, 1: -1}] -Similarly for the structured methods. - ->>> h = {0: -1, 1: 2} ->>> J = {} ->>> response = MyLinearSampler().sample_structured_ising(h, J) ->>> list(response.samples()) -[{0: 1, 1: -1}] ->>> Q = {(0, 0): 1, (1, 1): 0} ->>> response = MyLinearSampler().sample_structured_qubo(Q) ->>> list(response.samples()) -[{0: 0, 1: 1}] - -However, if we assign a structure to our sampler, the structured -methods will no longer work. - ->>> sampler = MyLinearSampler() ->>> sampler.structure = 'linear' ->>> try: -... sampler.sample_structured_qubo({}) -... except RecursionError: # infinite recursion -... print('not implemented') # python3 -... except RuntimeError: -... print('not implemented') # python2 -'not implemented' Structured Samplers ------------------- Some samplers can only operate on a particular problem structure. Most commonly this happens when there is a particular problem graph. -In this case, `sample_structured_ising` and `sample_sturctured_qubo` -would require the user to provide an Ising problem or QUBO of the -appropriate structure. `sample_ising` and `sample_qubo` could either -fail when the structure is not provided, but more commonly would -make an attempt to change the structure to fit. These sorts of -embedding techniques are discussed here: -https://www.dwavesys.com/sites/default/files/Map%20Coloring%20WP2.pdf +In this case, the `structure` property will not be None. """ # we could do a solver that requires a complete graph as an example above... @@ -113,6 +85,7 @@ class TemplateSampler(object): need only implement the methods that make sense. See module documentation for examples. + """ def __init__(self): self.structure = None @@ -177,76 +150,9 @@ def sample_ising(self, h, J, **kwargs): binary_response = self.sample_qubo(Q, **kwargs) return binary_response.as_spin(offset) - @qubo(1) - def sample_structured_qubo(self, Q, **kwargs): - """If sampler is unstructured, invokes the sample_qubo method, otherwise - converts the problem to an Ising problem and invokes the - sample_structured_ising method. - - See sample_qubo and sample_structured_ising documentation for more - information. - - Args: - Q (dict): A dictionary defining the QUBO. Should be of the form - {(u, v): bias} where u, v are variables and bias is numeric. - **kwargs: Any keyword arguments are passed directly to - sample_ising. - - Returns: - :obj:`BinaryResponse`: - A `BinaryResponse`, converted from the `SpinResponse` return - from sample_ising. - - Note: - This method is inherited from the :obj:`TemplateSampler` base class. - - """ - if self.structure is not None: - h, J, offset = qubo_to_ising(Q) - spin_response = self.sample_structured_ising(h, J, **kwargs) - return spin_response.as_binary(offset) - return self.sample_qubo(Q, **kwargs) - - @ising(1, 2) - def sample_structured_ising(self, h, J, **kwargs): - """If sampler is unstructured, invokes the sample_ising method, otherwise - converts the problem to a QUBO and invokes the sample_structured_qubo - method. - - See sample_ising and sample_structured_qubo documentation for more - information. - - Args: - h (dict/list): The linear terms in the Ising problem. If a - dict, should be of the form {v: bias, ...} where v is - a variable in the Ising problem, and bias is the linear - bias associated with v. If a list, should be of the form - [bias, ...] where the indices of the biases are the - variables in the Ising problem. - J (dict): A dictionary of the quadratic terms in the Ising - problem. Should be of the form {(u, v): bias} where u, - v are variables in the Ising problem and bias is the - quadratic bias associated with u, v. - **kwargs: Any keyword arguments are passed directly to - sample_qubo. - - Returns: - :obj:`SpinResponse`: - A `SpinResponse`, converted from the `BinaryResponse` - return from sample_ising. - - Note: - This method is inherited from the :obj:`TemplateSampler` base class. - - """ - if self.structure is not None: - Q, offset = ising_to_qubo(h, J) - binary_response = self.sample_structured_qubo(Q, **kwargs) - return binary_response.as_spin(offset) - return self.sample_ising(h, J, **kwargs) - @property def structure(self): + """Structure for the sampler. None for unstructured samplers.""" return self._structure @structure.setter diff --git a/dimod/samplers/brute_force.py b/dimod/samplers/brute_force.py index 43ece7d8a..280158138 100644 --- a/dimod/samplers/brute_force.py +++ b/dimod/samplers/brute_force.py @@ -26,6 +26,9 @@ class ExactSolver(TemplateSampler): """ + def __init__(self): + TemplateSampler.__init__(self) + @ising(1, 2) @ising_index_labels(1, 2) def sample_ising(self, h, J): diff --git a/dimod/samplers/random_sampler.py b/dimod/samplers/random_sampler.py index cc47024a6..61ea06af0 100644 --- a/dimod/samplers/random_sampler.py +++ b/dimod/samplers/random_sampler.py @@ -25,6 +25,9 @@ class RandomSampler(TemplateSampler): """ + def __init__(self): + TemplateSampler.__init__(self) + @qubo(1) def sample_qubo(self, Q, num_samples=10): """Gives random samples. diff --git a/dimod/samplers/simulated_annealing.py b/dimod/samplers/simulated_annealing.py index 384d54958..38c2ceedd 100644 --- a/dimod/samplers/simulated_annealing.py +++ b/dimod/samplers/simulated_annealing.py @@ -24,6 +24,9 @@ class SimulatedAnnealingSampler(TemplateSampler): + def __init__(self): + TemplateSampler.__init__(self) + @ising(1, 2) def sample_ising(self, h, J, beta_range=None, num_samples=10, sweeps=1000): """Sample from low-energy spin states using simulated annealing. @@ -53,7 +56,7 @@ def sample_ising(self, h, J, beta_range=None, num_samples=10, sweeps=1000): >>> sampler = SimulatedAnnealingSampler() >>> h = {0: -1, 1: -1} >>> J = {(0, 1): -1} - >>> response = sampler.sample_ising(h, J, samples=1) + >>> response = sampler.sample_ising(h, J, num_samples=1) >>> list(response.samples()) [{0: 1, 1: 1}] diff --git a/dimod/samplers/tests/generic_sampler_tests.py b/dimod/samplers/tests/generic_sampler_tests.py index e774ae5ea..ed6c2f8ee 100644 --- a/dimod/samplers/tests/generic_sampler_tests.py +++ b/dimod/samplers/tests/generic_sampler_tests.py @@ -11,7 +11,7 @@ """ -class TestSamplerAPI: +class SamplerAPITest: """Provides a series of generic API tests that all samplers should pass. """ diff --git a/dimod/samplers/tests/test_brute_force.py b/dimod/samplers/tests/test_brute_force.py index bb39b5247..8c40d352e 100644 --- a/dimod/samplers/tests/test_brute_force.py +++ b/dimod/samplers/tests/test_brute_force.py @@ -3,10 +3,10 @@ import itertools from dimod import ExactSolver, ising_energy, qubo_energy -from dimod.samplers.tests.generic_sampler_tests import TestSamplerAPI +from dimod.samplers.tests.generic_sampler_tests import SamplerAPITest -class TestExactSolver(unittest.TestCase, TestSamplerAPI): +class TestExactSolver(unittest.TestCase, SamplerAPITest): def setUp(self): self.sampler = ExactSolver() diff --git a/dimod/samplers/tests/test_random_sampler.py b/dimod/samplers/tests/test_random_sampler.py index d25c2882b..3e4093be3 100644 --- a/dimod/samplers/tests/test_random_sampler.py +++ b/dimod/samplers/tests/test_random_sampler.py @@ -1,10 +1,10 @@ import unittest from dimod import RandomSampler -from dimod.samplers.tests.generic_sampler_tests import TestSamplerAPI +from dimod.samplers.tests.generic_sampler_tests import SamplerAPITest -class TestRandomSampler(unittest.TestCase, TestSamplerAPI): +class TestRandomSampler(unittest.TestCase, SamplerAPITest): # this inherits tests from TestSamplerAPI def setUp(self): diff --git a/dimod/samplers/tests/test_simulated_annealing.py b/dimod/samplers/tests/test_simulated_annealing.py index 53f3a498e..1780b2ac3 100644 --- a/dimod/samplers/tests/test_simulated_annealing.py +++ b/dimod/samplers/tests/test_simulated_annealing.py @@ -5,10 +5,10 @@ from dimod import SimulatedAnnealingSampler, ising_energy, qubo_energy from dimod.samplers.simulated_annealing import ising_simulated_annealing, greedy_coloring -from dimod.samplers.tests.generic_sampler_tests import TestSamplerAPI +from dimod.samplers.tests.generic_sampler_tests import SamplerAPITest -class TestSASampler(unittest.TestCase, TestSamplerAPI): +class TestSASampler(unittest.TestCase, SamplerAPITest): def setUp(self): self.sampler = SimulatedAnnealingSampler() @@ -27,12 +27,6 @@ def test_basic(self): # make sure we actully got back 100 samples self.assertEqual(len(response0), 10) - response2 = sampler.sample_structured_ising(h, J, num_samples=10) - self.assertEqual(len(response2), 10) - - for sample, energy in response2.items(): - self.assertEqual(ising_energy(h, J, sample), energy) - Q = {(0, 0): 0, (1, 1): 0, (0, 1): -1} response4 = sampler.sample_qubo(Q, num_samples=10) @@ -41,9 +35,6 @@ def test_basic(self): for sample, energy in response4.items(): self.assertEqual(qubo_energy(Q, sample), energy) - response6 = sampler.sample_structured_qubo(Q, num_samples=10) - self.assertEqual(len(response6), 10) - def test_bug1(self): # IN IN OUT AUX h = {0: -.5, 1: 0, 2: 1, 3: -.5} diff --git a/dimod/tests/test_utilities.py b/dimod/tests/test_utilities.py index 4f68336c1..3bf9447eb 100644 --- a/dimod/tests/test_utilities.py +++ b/dimod/tests/test_utilities.py @@ -1,5 +1,8 @@ +from __future__ import division + import unittest from itertools import groupby +import itertools from dimod import ising_to_qubo, qubo_to_ising, ising_energy, qubo_energy @@ -61,32 +64,51 @@ def test_trivial(self): def test_no_zeros(self): q, offset = ising_to_qubo({0: 0, 0: 0, 0: 0}, {(0, 0): 0, (4, 5): 0}) - self.assertEqual(q, {}) + self.assertEqual(q, {(0, 0): 0.0}) self.assertEqual(offset, 0) def test_j_diag(self): q, offset = ising_to_qubo({}, {(0, 0): 1, (300, 300): 99}) - self.assertEqual(q, {}) + self.assertEqual(q, {(0, 0): 0.0, (300, 300): 0.0}) self.assertEqual(offset, 100) def test_typical(self): h = {i: v for i, v in enumerate([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])} - j = {(0, 0): -5, (0, 5): 2, (0, 8): 4, (1, 4): -5, (1, 7): 1, (2, 0): 5, + j = {(0, 5): 2, (0, 8): 4, (1, 4): -5, (1, 7): 1, (2, 0): 5, (2, 1): 4, (3, 0): -1, (3, 6): -3, (3, 8): 3, (4, 0): 2, (4, 7): 3, - (4, 9): 3, (5, 1): 3, (6, 5): -4, (6, 6): -5, (6, 7): -4, (7, 1): -4, + (4, 9): 3, (5, 1): 3, (6, 5): -4, (6, 7): -4, (7, 1): -4, (7, 8): 3, (8, 2): -4, (8, 3): -3, (8, 6): -5, (8, 7): -4, (9, 0): 4, (9, 1): -1, (9, 4): -5, (9, 7): 3} q, offset = ising_to_qubo(h, j) - norm_q = normalized_matrix(q) - self.assertEqual(norm_q, {(0, 0): -42, (0, 2): 20, (0, 3): -4, (0, 4): 8, - (0, 5): 8, (0, 8): 16, (0, 9): 16, (1, 1): -4, - (1, 2): 16, (1, 4): -20, (1, 5): 12, (1, 7): -12, - (1, 9): -4, (2, 2): -16, (2, 8): -16, (3, 3): 4, - (3, 6): -12, (4, 4): 2, (4, 7): 12, (4, 9): -8, - (5, 5): -2, (5, 6): -16, (6, 6): 34, (6, 7): -16, - (6, 8): -20, (7, 7): 8, (7, 8): -4, (7, 9): 12, - (8, 8): 18}) - self.assertEqual(offset, -8) + # norm_q = normalized_matrix(q) + ans = {(0, 0): -42, (0, 2): 20, (0, 3): -4, (0, 4): 8, + (0, 5): 8, (0, 8): 16, (0, 9): 16, (1, 1): -4, + (1, 2): 16, (1, 4): -20, (1, 5): 12, (1, 7): -12, + (1, 9): -4, (2, 2): -16, (2, 8): -16, (3, 3): 4, + (3, 6): -12, (4, 4): 2, (4, 7): 12, (4, 9): -8, + (5, 5): -2, (5, 6): -16, (6, 6): 34, (6, 7): -16, + (6, 8): -20, (7, 7): 8, (7, 8): -4, (7, 9): 12, + (8, 8): 18} + for (u, v), bias in normalized_matrix(q).items(): + self.assertIn((u, v), ans) + self.assertEqual(bias, ans[(u, v)]) + + self.assertEqual(offset, 2) + + def test_energy(self): + h = {v: v for v in range(0, 100, 2)} + h.update({v: -(1 / v) for v in range(1, 100, 2)}) + J = {(u, v): 2 * (u / 3) + v ** .5 for (u, v) in itertools.combinations(range(100), 2)} + + spin_sample = {v: 1 if v % 2 else -1 for v in h} + bin_sample = {v: 1 if v % 2 else 0 for v in h} + + Q, off = ising_to_qubo(h, J) + + ising_en = ising_energy(h, J, spin_sample) + qubo_en = qubo_energy(Q, bin_sample) + + self.assertLessEqual(abs(-ising_en + qubo_en + off), 10**-5) class TestQuboToIsing(unittest.TestCase): @@ -127,4 +149,4 @@ def key_fn(x): smat = sorted(((sorted(k), v) for k, v in mat.items()), key=key_fn) return dict((tuple(k), s) for k, g in groupby(smat, key=key_fn) for s in - [sum(v for _, v in g)] if s != 0) \ No newline at end of file + [sum(v for _, v in g)] if s != 0) diff --git a/dimod/utilities.py b/dimod/utilities.py index 63825ef84..aadf66f77 100644 --- a/dimod/utilities.py +++ b/dimod/utilities.py @@ -4,15 +4,15 @@ import sys -from collections import defaultdict - __all__ = ['ising_energy', 'qubo_energy', 'ising_to_qubo', 'qubo_to_ising'] PY2 = sys.version_info[0] == 2 if PY2: iteritems = lambda d: d.iteritems() + itervalues = lambda d: d.itervalues() else: iteritems = lambda d: d.items() + itervalues = lambda d: d.values() def ising_energy(h, J, sample): @@ -36,7 +36,7 @@ def ising_energy(h, J, sample): No input checking is performed. """ - energy = 0 + energy = 0. # add the contribution from the linear biases for v in h: @@ -70,7 +70,7 @@ def qubo_energy(Q, sample): No input checking is performed. """ - energy = 0 + energy = 0. for v0, v1 in Q: energy += sample[v0] * sample[v1] * Q[(v0, v1)] @@ -97,24 +97,20 @@ def ising_to_qubo(h, J): (dict, float): A dict of the QUBO coefficients. The energy offset. """ - - q = defaultdict(float) - offset = 0 - # the linear biases are the easiest - for v, bias in iteritems(h): - q[(v, v)] = 2 * bias - offset -= bias + q = {(v, v): 2. * bias for v, bias in iteritems(h)} # next the quadratic biases for (u, v), bias in iteritems(J): - q[(u, v)] += 4 * bias - q[(u, u)] -= 2 * bias - q[(v, v)] -= 2 * bias - offset += bias + if bias == 0.0: + continue + q[(u, v)] = 4. * bias + q[(u, u)] -= 2. * bias + q[(v, v)] -= 2. * bias + + # finally calculate the offset + offset = sum(itervalues(J)) - sum(itervalues(h)) - # finally convert q to a dict, rather than default dict - q = dict((k, v) for k, v in iteritems(q) if v != 0) return q, offset @@ -139,24 +135,35 @@ def qubo_to_ising(Q): The energy offset. """ - h = defaultdict(float) - j = {} - offset = 0 - - for (i, k), e in iteritems(Q): - if i == k: - # linear biases - h[i] += 0.5 * e - offset += 0.5 * e + h = {} + J = {} + linear_offset = 0.0 + quadratic_offset = 0.0 + + for (u, v), bias in iteritems(Q): + if u == v: + if u in h: + h[u] += .5 * bias + else: + h[u] = .5 * bias + linear_offset += bias + else: - # quadratic biases - j[(i, k)] = 0.25 * e - h[i] += 0.25 * e - h[k] += 0.25 * e - offset += 0.25 * e + if bias != 0.0: + J[(u, v)] = .25 * bias + + if u in h: + h[u] += .25 * bias + else: + h[u] = .25 * bias + + if v in h: + h[v] += .25 * bias + else: + h[v] = .25 * bias + + quadratic_offset += bias - # remove the 0 entries of J - h = dict(h) - j = dict((k, v) for k, v in iteritems(j) if v != 0) + offset = .5 * linear_offset + .25 * quadratic_offset - return h, j, offset + return h, J, offset diff --git a/docs/composing_samplers.png b/docs/composing_samplers.png new file mode 100644 index 0000000000000000000000000000000000000000..af89175579367499c6dd61457578edfb7b681a65 GIT binary patch literal 99633 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 dzq;}*)kv8~zDJp-