{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Grover search: sudoku solver\n", "\n", "In this example we are going to solve a sudoku puzzle. Since we have few qubits, we cannot solve a real 9x9 sudoku puzzle; our toy examples uses a 2x2 matrix where a valid solution is when in every row and every column there are no repeated values (`0` or `1`). We encode these xor-ing the values for each row and column. \n", "Since we want a specific solution, we add a constraint `constr`: we want the `[0][0]` element to be `True`.\n", "\n", "`sudoku_check` is already an oracle so we can instantiate the `Grover` algorithm without value." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qlasskit import qlassf, Qmatrix\n", "from qlasskit.algorithms import Grover\n", "\n", "\n", "@qlassf\n", "def sudoku_check(m: Qmatrix[bool, 2, 2]) -> bool:\n", " constr = m[0][0]\n", " sub0 = m[0][0] ^ m[0][1]\n", " sub1 = m[1][0] ^ m[1][1]\n", " sub2 = m[0][0] ^ m[1][0]\n", " sub3 = m[0][1] ^ m[1][1]\n", " return sub0 and sub1 and sub2 and sub3 and constr\n", "\n", "\n", "q_algo = Grover(sudoku_check)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", "\n", "We obtain that the solution for this puzzle is the matrix `[[True, False], [False, True]]`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoUAAAKjCAYAAABr3HX/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADX7ElEQVR4nOzdd3gUZdcG8HvSewESaiDUUKV3DT00FRCRKkWpgkgRBHmRJk1AQQUBQVCUotKlJJQEpIYWkBZDTSAECCUJIW13z/dHvh2zJKEm2ZL7d13v9ZqZyeYc5tmZM88884wiIgIiIiIiytesjB0AERERERkfi0IiIiIiYlFIRERERCwKiYiIiAgsComIiIgILAqJiIiICCwKiYiIiAiAjbEDMHc6nQ7R0dFwdXWFoijGDoeIiIgsnIggISEBxYoVg5VVzvXvsSh8RdHR0fDx8TF2GERERJTPREVFoUSJEjn2eSwKX5GrqyuA9B3j5uZm5GiIiIjI0sXHx8PHx0etQXIKi8JXpL9l7ObmxqKQiIiI8kxOD1vjgyZERERExKKQiIiIiFgUEhHRC/L19YWiKJn+N3ToUNy/fx8ff/wx/Pz84OjoiJIlS2L48OGIi4sz+Iysfn/t2rVGyoiIAI4pJCKiF3Ts2DFotVr157Nnz6JVq1bo0qULoqOjER0djblz56Jy5cq4fv06Bg8ejOjoaPz5558Gn7NixQq0adNG/dnDwyOvUiCiLLAoJCKiF+Ll5WXw86xZs1C2bFk0adIEiqJg/fr16rqyZcti+vTp6NWrFzQaDWxs/jvteHh4oEiRInkWNxE9HW8fExHRS0tNTcWvv/6KDz74INsnIePi4uDm5mZQEALA0KFDUahQIdSrVw8//fQTRCQvQiaibLCnkIiIXtqmTZvw8OFD9O3bN8v1sbGxmDZtGgYOHGiwfOrUqWjevDmcnJwQFBSEjz76CI8ePcLw4cPzIGoiyooivDR7JfHx8XB3d1evhImI8pPWrVvDzs4OW7duzbQuPj4erVq1QoECBbBlyxbY2tpm+zlffPEFVqxYgaioqNwMl8gi5FbtwdvHRET0Uq5fv47du3ejf//+mdYlJCSgTZs2cHV1xcaNG59aEAJA/fr1cePGDaSkpORWuET0DCwKiYjopaxYsQLe3t5o3769wfL4+HgEBATAzs4OW7ZsgYODwzM/KywsDJ6enrC3t8+tcInoGTimkIiIXphOp8OKFSvQp08fgwdI9AXh48eP8euvvyI+Ph7x8fEA0p9atra2xtatW3H79m00aNAADg4O2LVrF2bMmIFPP/3UWOkQEVgUEhHRS9i9ezciIyPxwQcfGCw/efIkjh49CgAoV66cwbqrV6/C19cXtra2WLhwIUaOHAkRQbly5fD1119jwIABeRY/EWXGB01eER80ISIiorzEB02IiIiIKNewKCQiIiIiFoVERERExKKQiIiIiMCikIiIiIjAopCIiIiIwKKQiIiIiMCikIiIiIjAopCIiIiIwKKQiIiIiMCikIiIiIjAopCIiIiIwKKQiIiIiMCikIiIiIjAopCIiIiIwKKQiIiIiMCikIiIiIjAopCIiIiIwKKQiIiIiADYGDsAIiIyDwPm5/3f/HFE3v9NovyKPYVERERExKKQiIiIiFgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFYFBIRERERWBQSEREREVgUEhERERFMvCjcuHEjWrVqhYIFC8LBwQGlS5dG9+7dERUVZbBdfHw8Ro0ahVKlSsHe3h6+vr4YM2YMHj16lOXn6nQ6fPfdd6hWrRocHR3h5eWF7t2748qVK3mRFhEREZHJsTF2AFkREQwePBhLly5F2bJl0a1bN7i6uiI6Ohr79u3D9evX4ePjAwBITExEkyZNEBYWhoCAAHTv3h2nTp3C3LlzsW/fPuzfvx8ODg4Gnz9o0CAsW7YMVapUwfDhwxEdHY3ff/8dQUFBOHLkCMqXL2+MtImIiIiMxiSLwm+//RZLly7FRx99hG+//RbW1tYG6zUajfrfX331FcLCwvDZZ59h1qxZ6vJx48Zh9uzZ+OabbzB+/Hh1eXBwMJYtWwZ/f3/s2rULdnZ2AIAePXqgXbt2GDZsGAIDA3M5QyIiIiLTooiIGDuIjJKSklC8eHF4enoiPDwcNjbZ160ighIlSiA+Ph4xMTFwdnZW1yUmJqJIkSLw9vbG5cuX1eU9evTAmjVrsG/fPvj7+xt8XrNmzRASEoLr16+jZMmSzxVvfHw83N3dERcXBzc3txfMlojIfAyYn/d/88cRef83iUxdbtUeJtdTGBQUhAcPHqBfv37QarXYsmUL/v33X3h4eKBly5YoV66cum1ERASio6PRunVrg4IQAJydndG4cWMEBgYiKipKvd0cEhKirntS69atERISgn379uH999/PMr6UlBSkpKSoP8fHxwMA0tLSkJaWBgCwsrKCtbU1tFotdDqduq1+uUajQcZa3NraGlZWVtku13+unr5Qzthj+rTltra20Ol00Gq16jJFUWBjY5Pt8uxiZ07MiTnl55xskdf0uXE/MSfmZJhTbjC5ovDEiRMA0nfOa6+9hn///VddZ2VlhZEjR2Lu3LkA0otCANmOASxfvjwCAwMREREBHx8fJCYm4tatW6hatWqmW9IZP0f/uVmZOXMmpkyZkml5UFAQnJycAAAlS5ZEzZo1cebMGURGRqrb+Pn5oWLFiggNDcXdu3fV5TVq1ECpUqWwf/9+JCQkqMsbNmwIb29vBAUFGTSAZs2awdHREdu3bzeIoV27dkhKSkJwcLC6zMbGBu3bt0dsbCwOHz6sLnd1dUXz5s0RFRWFsLAwdbmXlxcaNWqEiIgIhIeHq8uZE3NiTswJ6IC8ps+B+4k5Maf/ctLXSjnN5G4fDx48GEuWLIG1tTVq1aqFhQsXolKlSjh16hQGDhyIixcvYtGiRRgyZAhWr16Nnj17YsKECfjyyy8zfdaECRMwY8YMbNiwAZ06dUJ0dDSKFy+Oxo0b48CBA5m237VrFwICAjB8+HAsWLAgy/iy6in08fFBbGys2oWbX69amBNzYk6WndNHC/O+p3DRUPYUMifm9OTy+/fvo2DBgpZ/+1ifvJ2dHTZt2oRixYoBAN544w388ccfqF69OubNm4chQ4YYJT57e3vY29tnWm5rawtbW8MDprW1dZY9ktmNk8xu+ZOf+zLLraysYGWVeQai7JZnFztzYk4vupw5WWZOeeXJWLmfmBNzyj72V2Vy8xS6u7sDAOrUqaMWhHpVq1ZFmTJlcPnyZTx8+FDdNi4uLsvP0o/302/3otsTERER5RcmVxT6+fkBADw8PLJcr1+elJT0zDGAT445dHZ2RtGiRXH16lWD7tvsticiIiLKL0yuKGzWrBkA4MKFC5nWpaWl4dKlS3B2doaXlxfKly+PYsWK4eDBg0hMTDTYNjExEQcPHkTp0qXVJ48BoEmTJuq6J+nnJ3xyqhoiIiIiS2dyRWHZsmUREBCAS5cuYdmyZQbrZs2ahYcPH6JTp06wsbGBoijo378/Hj16hGnTphlsO23aNDx69AgDBgwwWD5w4EAAwMSJE5Gamqou37FjB0JCQhAQEIBSpUrlUnZEREREpsnknj4GgMuXL6NRo0a4c+cO2rdvj4oVK+LUqVPYu3cvSpUqhSNHjqBIkSIA0nsEGzdujNOnTyMgIAC1atXCyZMnERQUhLp162Lfvn1wdHQ0+PwBAwaor7lr3749bt26hXXr1sHFxQWHDx9GhQoVnjtWTl5NRPkFJ68mMg25VXuYXE8hkN5bePz4cfTt2xcnTpzAt99+i4iICAwdOhShoaFqQQikjxPct28fRowYgQsXLmDevHm4ePEiRo8ejT179mQqCAFgyZIl6pQzCxYswPbt29GpUyeEhoa+UEFIREREZClMsqfQnLCnkIjyC/YUEpmGfNVTSERERER5i0UhEREREbEoJCIiIiIWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREBBaFRERERAQWhUREREQEFoVEREREhFcoCvfv34/IyMinbhMVFYX9+/e/7J8gIiIiojzy0kVhs2bNsHLlyqdu88svv6BZs2Yv+yeIiIiIKI+8dFEoIs/cRqfTQVGUl/0TRERERJRHcnVMYUREBNzd3XPzTxARERFRDrB5kY0/+OADg583bdqEa9euZdpOq9Wq4wnbtm37SgESERERUe57oaIw4xhCRVEQFhaGsLCwLLdVFAV169bFN9988yrxEREREVEeeKGi8OrVqwDSxxOWKVMGI0aMwCeffJJpO2tra3h6esLZ2TlnoiQiIiKiXPVCRWGpUqXU/16xYgVq1qxpsIyIiIiIzNMLFYUZ9enTJyfjICIiIiIjeumiUC80NBTHjh3Dw4cPodVqM61XFAUTJ0581T9DRERERLnopYvC+/fvo2PHjjh48OBT5yxkUUhERERk+l66KBw1ahQOHDiApk2bok+fPihRogRsbF6545GIiIiIjOClq7i//voL9erVw549e/jWEiIiIiIz99JvNElKSoK/vz8LQiIiIiIL8NJFYY0aNbJ8mwkRERERmZ+XLgonTZqELVu24MiRIzkZDxEREREZwUuPKYyJiUH79u3RpEkT9OzZE7Vq1YKbm1uW2/bu3fulAyQiIiKi3KfI0+aTeQorKysoimIwHc2T4wtFBIqiZDl/oaWIj4+Hu7s74uLisi2KiYgswYD5ef83fxyR93+TyNTlVu3x0j2FK1asyLEgiIiIiMi4zOI1d7Nnz8a4ceMAAIcPH0aDBg0M1sfHx2Py5MlYv349YmJiULRoUXTp0gWTJk2Ci4tLps/T6XRYuHAhli5dikuXLsHFxQUtW7bE9OnTUaZMmTzJiYiIiMiUvPSDJnnl7NmzmDRpEpydnbNcn5iYiCZNmuCbb75BxYoVMXLkSPj5+WHu3Llo3rw5kpOTM/3OoEGDMHz4cIgIhg8fjjZt2mDDhg2oW7cuIiIicjslIiIiIpPz0j2FkZGRz71tyZIlX+pvpKWloU+fPqhRowbKly+PX3/9NdM2X331FcLCwvDZZ59h1qxZ6vJx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cuQIxo4di7Vr12L79u3qOgcHB/Tr1w+zZ8+26IKQiIiIyFK80uTVhQoVwk8//YQlS5bg4sWL6htNKlasCFtb25yKkYiIiIhy2QsXhdOnT0diYiKmTJmiFn62traoVq2auk1qaiomTJgAV1dXjBs3LueiJSIiIqJc8UIPmuzevRtffPEFChYs+NSeQDs7OxQsWBATJkzgPIVEREREZuCFisJffvkFnp6eGDZs2DO3HTp0KAoUKIAVK1a8dHBERERElDdeqCg8dOgQWrZsCXt7+2dua29vj5YtW+LgwYMvHRwRERER5Y0XKgqjo6NRpkyZ596+dOnSuHXr1gsHRURERER564WKQisrK6SlpT339mlpabCyeun5sYmIiIgoj7xQxVasWDGcPXv2ubc/e/Ysihcv/sJBEREREVHeeqGi8I033sDevXtx7dq1Z2577do17N27F/7+/i8bGxERERHlkRcqCocOHYq0tDS8++67iI2NzXa7e/fuoUuXLtBoNBgyZMgrB0lEREREueuFJq+uVasWRowYgfnz56Ny5coYPHgwmjVrhhIlSgAAbt68iT179mDp0qW4e/cuRo0ahVq1auVK4ERERESUc174jSbz5s2Dg4MD5syZg+nTp2P69OkG60UE1tbWGD9+PL788sscC5SIiIiIcs8LF4WKomDGjBn48MMPsWLFChw6dAgxMTEAgCJFiqBx48bo27cvypYtm+PBEhEREVHueOGiUK9s2bLsCSQiIiKyEJxEkIiIiIhYFBIRERERi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0IiIiIiAotCIiIiIgKLQiIiIiICi0Ii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", "text/plain": [ "
" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit import QuantumCircuit, transpile\n", "from qiskit.visualization import plot_histogram\n", "from qiskit_aer import AerSimulator\n", "\n", "qc = q_algo.export(\"qiskit\")\n", "qc.measure_all()\n", "simulator = AerSimulator()\n", "circ = transpile(qc, simulator)\n", "result = simulator.run(circ).result()\n", "counts = result.get_counts(circ)\n", "\n", "counts_readable = q_algo.decode_counts(counts, discard_lower=20)\n", "\n", "plot_histogram(counts_readable)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can exploit *matplotlib* for drawing the result sudoku matrix as follows:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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gBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoITAAFBCYAAoITAAlBAYAEoIDAAlBAaAEgIDQAmBAaCEwABQQmAAKCEwAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACghMACUEBgASggMACUEBoASAgNACYEBoET7aD9h0zRJkqM5kjSj/ewwOnr3D471CFCi98Bz7+3nf5efzKgHZv/+/UmSb+Wro/3UMGpmLB7rCaDW/v3709XVddL7tJoXk6ERNDg4mK1bt2batGlptVqj+dTnpN7e3vT09OSJJ55IZ2fnWI8DI857fHQ1TZP9+/dn7ty5GTfu5EdZRn0LZty4cbnwwgtH+2nPeZ2dnX74OKt5j4+eU225PM9BfgBKCAwAJQTmLDdx4sTcfPPNmThx4liPAiW8x1+6Rv0gPwDnBlswAJQQGABKCAwAJQQGgBICA0AJgQGghMAAUEJgACjx/wB5YmxI2zr1KQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "\n", "def draw_matrix(matrix):\n", " fig, ax = plt.subplots()\n", " ax.matshow(matrix, cmap=\"viridis\")\n", "\n", " for i in range(len(matrix)):\n", " for j in range(len(matrix[0])):\n", " ax.text(\n", " j,\n", " i,\n", " str(matrix[i][j]),\n", " va=\"center\",\n", " ha=\"center\",\n", " fontsize=12,\n", " color=\"black\",\n", " )\n", "\n", " plt.show()\n", "\n", "\n", "m_res = list(filter(lambda x: x[1] > 500, counts_readable.items()))[0][0]\n", "draw_matrix(m_res)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can create a more realistic sudoku game using numbers instead of booleans, but the resources required will scale exponentially. In the following code snippets, we recreate `sudoku_check` using `Qint[2]` and a 4x4 matrix. The sum of each column and row must be equal to 6 (3+2+1+0). As we can see, the resulting circuit of the checker requires more than 100 qubits, way above our simulation capabilities." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QCircuit(725 gates, 130 qubits)\n" ] } ], "source": [ "from qlasskit import Qint, Qint3\n", "\n", "\n", "@qlassf\n", "def sudoku_check(m: Qmatrix[Qint[2], 4, 4]) -> bool:\n", " res = True\n", "\n", " # Constraints\n", " res = (m[0][2] == 3) and (m[0][0] == 1)\n", "\n", " # Check every row and column\n", " for i in range(len(m)):\n", " c = (Qint3(0) + m[i][0] + m[i][1] + m[i][2] + m[i][3]) == 6\n", " r = (Qint3(0) + m[0][i] + m[1][i] + m[2][i] + m[3][i]) == 6\n", " res = res and c and r\n", "\n", " return res\n", "\n", "\n", "print(sudoku_check.circuit())" ] } ], "metadata": { "kernelspec": { "display_name": "qlasskit_310-env", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }