Skip to content

Instantly share code, notes, and snippets.

@piyo7
Created October 31, 2018 05:59
Show Gist options
  • Save piyo7/d7574fa9ce5c99239bbaf1aaafbcb76c to your computer and use it in GitHub Desktop.
Save piyo7/d7574fa9ce5c99239bbaf1aaafbcb76c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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