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