Created
October 31, 2018 05:59
-
-
Save piyo7/d7574fa9ce5c99239bbaf1aaafbcb76c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "BinaryQuadraticModel({'q00': 4.0, 'q01': -2.0, 'q02': -2.0, 'q03': 0.0, 'q10': -2.0, 'q11': 0.0, 'q12': 0.0, 'q13': -2.0, 'q20': -2.0, 'q21': 0.0, 'q22': 0.0, 'q23': -2.0, 'q30': 4.0, 'q31': -2.0, 'q32': -2.0, 'q33': 0.0}, {('q01', 'q00'): -4.0, ('q02', 'q00'): 4.0, ('q02', 'q01'): -2.0, ('q03', 'q00'): -2.0, ('q03', 'q01'): 4.0, ('q03', 'q02'): -2.0, ('q11', 'q10'): 4.0, ('q12', 'q10'): -2.0, ('q12', 'q11'): -2.0, ('q13', 'q10'): 0.0, ('q13', 'q11'): -2.0, ('q13', 'q12'): 4.0, ('q21', 'q20'): 4.0, ('q22', 'q20'): -2.0, ('q22', 'q21'): -2.0, ('q23', 'q20'): 0.0, ('q23', 'q21'): -2.0, ('q23', 'q22'): 4.0, ('q31', 'q30'): -8.0, ('q32', 'q30'): 8.0, ('q32', 'q31'): -4.0, ('q33', 'q30'): -4.0, ('q33', 'q31'): 8.0, ('q33', 'q32'): -4.0, ('q10', 'q00'): -4.0, ('q20', 'q00'): 4.0, ('q20', 'q10'): -2.0, ('q30', 'q00'): -2.0, ('q30', 'q10'): 4.0, ('q30', 'q20'): -2.0, ('q11', 'q01'): 4.0, ('q21', 'q01'): -2.0, ('q21', 'q11'): -2.0, ('q31', 'q01'): 0.0, ('q31', 'q11'): -2.0, ('q31', 'q21'): 4.0, ('q12', 'q02'): 4.0, ('q22', 'q02'): -2.0, ('q22', 'q12'): -2.0, ('q32', 'q02'): 0.0, ('q32', 'q12'): -2.0, ('q32', 'q22'): 4.0}, 4.0, Vartype.BINARY)" | |
| ] | |
| }, | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import dwavebinarycsp as dbc\n", | |
| "\n", | |
| "csp = dbc.ConstraintSatisfactionProblem(dbc.BINARY)\n", | |
| "csp.add_constraint([(0,0,1,1),(0,1,1,0),(1,1,0,0)], ['q00', 'q01', 'q02', 'q03']) # 2\n", | |
| "csp.add_constraint([(0,1,0,1),(1,0,0,1),(1,0,1,0)], ['q10', 'q11', 'q12', 'q13']) # 1,1\n", | |
| "csp.add_constraint([(0,1,0,1),(1,0,0,1),(1,0,1,0)], ['q20', 'q21', 'q22', 'q23']) # 1,1\n", | |
| "csp.add_constraint([(0,0,1,1),(0,1,1,0),(1,1,0,0)], ['q30', 'q31', 'q32', 'q33']) # 2\n", | |
| "csp.add_constraint([(0,0,1,1),(0,1,1,0),(1,1,0,0)], ['q00', 'q10', 'q20', 'q30']) # 2\n", | |
| "csp.add_constraint([(0,1,0,1),(1,0,0,1),(1,0,1,0)], ['q01', 'q11', 'q21', 'q31']) # 1,1\n", | |
| "csp.add_constraint([(0,1,0,1),(1,0,0,1),(1,0,1,0)], ['q02', 'q12', 'q22', 'q32']) # 1,1\n", | |
| "csp.add_constraint([(0,0,1,1),(0,1,1,0),(1,1,0,0)], ['q30', 'q31', 'q32', 'q33']) # 2\n", | |
| "bqm = dbc.stitch(csp)\n", | |
| "\n", | |
| "bqm" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "$$- 4.0 q_{00} q_{01} + 4.0 q_{00} q_{02} - 2.0 q_{00} q_{03} - 4.0 q_{00} q_{10} + 4.0 q_{00} q_{20} - 2.0 q_{00} q_{30} + 4.0 q_{00} - 2.0 q_{01} q_{02} + 4.0 q_{01} q_{03} + 4.0 q_{01} q_{11} - 2.0 q_{01} q_{21} - 2.0 q_{01} - 2.0 q_{02} q_{03} + 4.0 q_{02} q_{12} - 2.0 q_{02} q_{22} - 2.0 q_{02} + 4.0 q_{10} q_{11} - 2.0 q_{10} q_{12} - 2.0 q_{10} q_{20} + 4.0 q_{10} q_{30} - 2.0 q_{10} - 2.0 q_{11} q_{12} - 2.0 q_{11} q_{13} - 2.0 q_{11} q_{21} - 2.0 q_{11} q_{31} + 4.0 q_{12} q_{13} - 2.0 q_{12} q_{22} - 2.0 q_{12} q_{32} - 2.0 q_{13} + 4.0 q_{20} q_{21} - 2.0 q_{20} q_{22} - 2.0 q_{20} q_{30} - 2.0 q_{20} - 2.0 q_{21} q_{22} - 2.0 q_{21} q_{23} + 4.0 q_{21} q_{31} + 4.0 q_{22} q_{23} + 4.0 q_{22} q_{32} - 2.0 q_{23} - 8.0 q_{30} q_{31} + 8.0 q_{30} q_{32} - 4.0 q_{30} q_{33} + 4.0 q_{30} - 4.0 q_{31} q_{32} + 8.0 q_{31} q_{33} - 2.0 q_{31} - 4.0 q_{32} q_{33} - 2.0 q_{32} + 4.0$$" | |
| ], | |
| "text/plain": [ | |
| "-4.0⋅q₀₀⋅q₀₁ + 4.0⋅q₀₀⋅q₀₂ - 2.0⋅q₀₀⋅q₀₃ - 4.0⋅q₀₀⋅q₁₀ + 4.0⋅q₀₀⋅q₂₀ - 2.0⋅q₀₀\n", | |
| "⋅q₃₀ + 4.0⋅q₀₀ - 2.0⋅q₀₁⋅q₀₂ + 4.0⋅q₀₁⋅q₀₃ + 4.0⋅q₀₁⋅q₁₁ - 2.0⋅q₀₁⋅q₂₁ - 2.0⋅q\n", | |
| "₀₁ - 2.0⋅q₀₂⋅q₀₃ + 4.0⋅q₀₂⋅q₁₂ - 2.0⋅q₀₂⋅q₂₂ - 2.0⋅q₀₂ + 4.0⋅q₁₀⋅q₁₁ - 2.0⋅q₁₀\n", | |
| "⋅q₁₂ - 2.0⋅q₁₀⋅q₂₀ + 4.0⋅q₁₀⋅q₃₀ - 2.0⋅q₁₀ - 2.0⋅q₁₁⋅q₁₂ - 2.0⋅q₁₁⋅q₁₃ - 2.0⋅q\n", | |
| "₁₁⋅q₂₁ - 2.0⋅q₁₁⋅q₃₁ + 4.0⋅q₁₂⋅q₁₃ - 2.0⋅q₁₂⋅q₂₂ - 2.0⋅q₁₂⋅q₃₂ - 2.0⋅q₁₃ + 4.0\n", | |
| "⋅q₂₀⋅q₂₁ - 2.0⋅q₂₀⋅q₂₂ - 2.0⋅q₂₀⋅q₃₀ - 2.0⋅q₂₀ - 2.0⋅q₂₁⋅q₂₂ - 2.0⋅q₂₁⋅q₂₃ + 4\n", | |
| ".0⋅q₂₁⋅q₃₁ + 4.0⋅q₂₂⋅q₂₃ + 4.0⋅q₂₂⋅q₃₂ - 2.0⋅q₂₃ - 8.0⋅q₃₀⋅q₃₁ + 8.0⋅q₃₀⋅q₃₂ -\n", | |
| " 4.0⋅q₃₀⋅q₃₃ + 4.0⋅q₃₀ - 4.0⋅q₃₁⋅q₃₂ + 8.0⋅q₃₁⋅q₃₃ - 2.0⋅q₃₁ - 4.0⋅q₃₂⋅q₃₃ - 2\n", | |
| ".0⋅q₃₂ + 4.0" | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "import sympy\n", | |
| "expr = bqm.offset\n", | |
| "for symb, coef in bqm.linear.items():\n", | |
| " expr += sympy.symbols(symb) * coef\n", | |
| "for (symb1, symb2), coef in bqm.quadratic.items():\n", | |
| " expr += sympy.symbols(symb1) * sympy.symbols(symb2) * coef\n", | |
| "\n", | |
| "sympy.init_printing()\n", | |
| "expr" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "True -20.0 {'q00': 0, 'q01': 0, 'q02': 1, 'q03': 1, 'q10': 0, 'q11': 1, 'q12': 0, 'q13': 1, 'q20': 1, 'q21': 0, 'q22': 1, 'q23': 0, 'q30': 1, 'q31': 1, 'q32': 0, 'q33': 0}\n", | |
| "True -20.0 {'q00': 1, 'q01': 1, 'q02': 0, 'q03': 0, 'q10': 1, 'q11': 0, 'q12': 1, 'q13': 0, 'q20': 0, 'q21': 1, 'q22': 0, 'q23': 1, 'q30': 0, 'q31': 0, 'q32': 1, 'q33': 1}\n", | |
| "True -20.0 {'q00': 0, 'q01': 1, 'q02': 1, 'q03': 0, 'q10': 1, 'q11': 0, 'q12': 0, 'q13': 1, 'q20': 1, 'q21': 0, 'q22': 0, 'q23': 1, 'q30': 0, 'q31': 1, 'q32': 1, 'q33': 0}\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import dimod\n", | |
| "import itertools\n", | |
| "\n", | |
| "res = dimod.ExactSolver().sample(bqm)\n", | |
| "min_energy = next(res.data()).energy\n", | |
| "for sample in itertools.takewhile(lambda sample: sample.energy == min_energy, res.data()):\n", | |
| " print(csp.check(sample.sample), sample.energy, sample.sample)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.7.0" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment