{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "(grover)=\n", "# Introducción\n", "\n", "```{index} Grover (algoritmo)\n", "```\n", "El **algoritmo de grover** es uno de los algoritmos más utilizados en el mundo de la computación cuántica, y su finalidad explicada a grandes pinceladas es la siguiente: Supongamos que tenemos un conjunto desordenado de elementos y nos interesa reconocer uno de ellos. Con la computación clásica iríamos uno a uno viendo si es elemento que buscamos o no. Entonces con este método tardaríamos una media de N/2 (N es el número de elementos que tenemos). Pues bien con el algoritmo de Grover podemos reducir considerablemente ese número de intentos a $\\sqrt{N}$. Es decir si N=100, con un computador clásico en media hay que hacer 50 intentos, mientras que con este algoritmo, se reducirá a $\\sqrt{100}=10$ intentos.\n", "\n", "Para una explicación algo más detallada de esto se recomiendo ver Este vídeo , en el cual además de explicar de una forma muy intuitiva el algorimo, también tiene un documento que lo demuestra de una forma más técnica. Este documento lo podemos encontrar en este enlace .\n", "\n", "Si bien entender lo que hace el algoritmo es muy interesante, también es importante su implementación, para ello, se aconseja al lector igualmente ver este vídeo y el documento que explica esta implementación también se puede ver aquí. \n", "\n", "No obstante en este apartado vamos a profundizar con mayor grado de talle en este importante algoritmo para la computación cuántica. El esquema que define de una forma más técnica este algoritmo es el siguiente:\n", "\n", "
\n", "\n", "![](..\\images\\grover_I.PNG)\n", "\n", "
\n", "\n", "LO primero que hace el algoritmo es pasar el estado inicial por la puerta H, y entonces después de este paso se obtiene el estado denominado por $|s\\rangle$ igual a :\n", "\n", "$$|s\\rangle=\\frac{1}{\\sqrt{N}}\\sum_{x\\in\\{0,1\\}}|x\\rangle=\\frac{1}{\\sqrt{N}}\\sum_{x=0}^{N-1}|x\\rangle$$\n", "\n", "Para entender mejor la expresión anterior, si estamos trabajando con dos qubits inicialmente en estado básico entonces al pasarles por un puerta H se transforma en:\n", "\n", "$$|s\\rangle=\\frac{1}{\\sqrt{2}}\\left[|00\\rangle+|01\\rangle+|10\\rangle+|11\\rangle\\right]$$\n", "\n", "## Creación del oráculo.\n", "\n", "El segundo paso en la aplicación de este algoritmo es la creación del oráculo. Este oráculo añade añade una fase negativa al estado solución que estamos buscando. En este sentido si estamos trabajando con tres qubits y el estado que buscamos es el $w=|101\\rangle$ entonces la matriz del oráculo tiene en la diagonal 1 salvo en la posición donde se invierte el qubit que en este caso sería la sexta, para ver esta posición hay que recordar lo siguiente:\n", "\n", "$$|101\\rangle = 0\\cdot |000\\rangle+0\\cdot |001\\rangle + ...+1\\cdot |101\\rangle +0\\cdot |110\\rangle+0\\cdot |111\\rangle $$\n", "\n", "Por lo tanto la matriz de este oráculo es la siguiente:\n", "\n", "$$U_{w}=\\left(\\begin{array}{cccccccc}\n", "1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", "0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 0 & 0 & -1 & 0 & 0\\\\\n", "0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\n", "\\end{array}\\right)$$\n", "\n", "Una forma genérica de definir el oráculo, utilizando la notación de Dirac es la siguiente:\n", "\n", "$$U_{w}=\\left(I-2|w\\rangle\\langle w|\\right)$$\n", "\n", "Vamos a comprobar lo anterior suponiendo que estamos trabajando con dos quibits y el estado que queremos cambiar de fase es por ejemplo $|w\\rangle=|11\\rangle$. Es decir en esta situación se tiene que:\n", "\n", "$$|w\\rangle=\\left(\\begin{array}{c}\n", "0\\\\\n", "0\\\\\n", "0\\\\\n", "1\n", "\\end{array}\\right)$$\n", "\n", "Puesto que $|11\\rangle=0\\cdot|00\\rangle+0\\cdot|01\\rangle+0\\cdot|10\\rangle+1\\cdot|11\\rangle\\rangle$.\n", "\n", "Calculemos pues el valor de $\\left(I-2|w\\rangle\\langle w|\\right)$\n", "\n", "$$\n", "\\begin{align*}\n", "U_{w} & =\\left(I-2|w\\rangle\\langle w|\\right)=\\left(\\begin{array}{cccc}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & 1\n", "\\end{array}\\right)-2\\left(\\begin{array}{c}\n", "0\\\\\n", "0\\\\\n", "0\\\\\n", "1\n", "\\end{array}\\right)\\left(\\begin{array}{cccc}\n", "0 & 0 & 0 & 1\\end{array}\\right)=\\left(\\begin{array}{cccc}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & 1\n", "\\end{array}\\right)-2\\left(\\begin{array}{cccc}\n", "0 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 1\n", "\\end{array}\\right)=\\\\\n", "= & \\left(\\begin{array}{cccc}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & -1\n", "\\end{array}\\right)\n", "\\end{align*}$$\n", "\n", "Existen muchos problemas computacionales para los que es difícil encontrar una solución, pero es relativamente fácil comprobar si un determinado valor verifica una condición. Para este tipo de problemas, podemos crear una función f que tome como argumento una posible solución y devuelva f(x)=0 si x no es una solución y f(x)=1 si x es la solución que buscamos. Entonces nuestra función oráculo sería la siguiente:\n", "\n", "$$U_{w}|w\\rangle=(-1)^{f(x)}|x\\rangle$$\n", "\n", "Y en consecuencia la matriz sería la siguiente:\n", "\n", "$$U_{w}=\\left(\\begin{array}{cccc}\n", "(-1)^{f(0)} & 0 & ... & 0\\\\\n", "0 & (-1)^{f(1)} & ... & 0\\\\\n", "\\vdots & 0 & \\ddots & \\vdots\\\\\n", "0 & 0 & \\ldots & (-1)^{f(2^{n}-1)}\n", "\\end{array}\\right)$$\n", "\n", "## Creación de operador de difusión\n", "\n", "Por regla general este operador de difusión tiene el siguiente aspecto.\n", "\n", "![](../images/operadorDifusion.PNG)\n", "\n", "\n", " En este documento se demuestra que el operador de difusión se puede implementar mediante el siguiente circuito:\n", "\n", "![](../images/PuertaGrover.PNG)\n", "\n", "Pero como en qiskit no podemos implementar de una forma directa multicontrol z que se muestra en la figura anterior, este control se implementa mediante otro análogo e igual al siguiente:\n", "\n", "![](../images/multicontrolZ.PNG)\n", "\n", "Construido con la ayuda de Quirk y gracias al mismo se puede comprobar que los dos circuitos son exactamente los mismos.\n", "\n", "A continuación podemos ver un ejemplo de este algoritmo." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Importamos las librerías necesarias\n", "\n", "from qiskit import QuantumCircuit, Aer, execute\n", "from qiskit.visualization import plot_histogram" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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Hv/Q2/PHKpn6wDlhHuh1m+l9IGnDzAcffCBJGjlyZK/bw+Gwtm3bJun0MHNqkDlhxowZkqS6urqYapkxY4ZCoejWxYOpA3TDj/fHdL7enJdbpIJJV7jW3r8qLipSpLvdtfactDRp7c/da89xFHlgjRTulgpGyP7t7xS4/DJZee49OKS4qFhWV5crbZn2/kvu94GzuXTCAi298oFet514hsynSc/8599f+s+z73e259D8/tnnddU3/08fq42d3/uA23OAFP95wM05QPJfH8jNzdXOnTtjOjZpw0xra6skqb299xe1vLxcjY2NysrK0qhRoz61rZdfflmSNH78+JhqCYVCUQehlPSBMZ3LK/UN9Qp3trnXYEa63Px+P3vjJjl731HgG7cpMOsShe+4S5EH1ihYVirLslw5R31DvdThzt2hpr3/Uhz6wFk0DTt21m0nniHTF1ag7/ueqq2tLeZfbKLh+z7g8hwgxX8ecHMOkOgD0UjaMJObm6umpibt3r1bs2bNOm1bQ0ODVq1aJUmaMmXKp3biuro6ff/739fVV18d87NocnNzoz4mmDogpnN5JW9YnusrM0fdaquuTva69bLGFitw682ygkEFFi+S/ZvHZG/cpOAN17lynrxhea6uzJjG7T5wNgMGnf1bH7taP/v49MyeIOPYUuen7H+2tgKpjoYPH/7ZJzpHfu8Dbs4BUmLmATfnAMl/fSCWfytPSNowc8UVV6iqqkqlpaWaO3euiouLJUk7duzQkiVL1NjYc+H90wLK8ePHdd111yktLU3r1q2LuZZYls06w9I95TGfMuGq9+9Xuou9qTUS1uAtL51zO45tK3L/g5JtK7jq7pMfvwzcerOcba/LXrdegYtnurLMXL2/WplBd14E095/yf0+cDbHG6U31/e+rS9fT/Cl/+xZkelslV5bG/35l96xUP/3NwujPzBKfu8Dbs0BUuLmATfnAIk+EI2kvfOppKRE559/vg4fPqyJEydq8uTJKioq0syZMzV69GjNmTNH0un3y5yqvb1d8+fP18GDB/WnP/1Jw4bxpSwmsp9+Vk5llQK3LZZV8M9Ht1rBoILfuVuyI4o8sEaOic+p96nMHCno9vWHKGR/3rtzIzbMA8kvacNMfn6+tm7dqnnz5ikjI0M1NTXKycnR2rVrVVFRoerqakm9h5nu7m7dfPPN2rlzp158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", "text/plain": [ "
" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Implementamos la puerta de Grover\n", "\n", "Grover = QuantumCircuit(3,3)\n", "\n", "Grover.h(range(3))\n", "Grover.x(range(3))\n", "\n", "#CORRECCIÓN !!!\n", "# Si el ccz lo implementamos de esta manera estaremos cambiando algunas amplitudes que no debemos\n", "# la solución está en recordar que Z = HXH\n", "\n", "\n", "Grover.h(2)\n", "Grover.ccx(0,1,2) # esto es el cccx, el primer parámetro indica los qubits de control, el segundo\n", "Grover.h(2) # el qubit objetivo. Finalmente poned un cero, no deis importancia a ese valor\n", "#Grover.ccx(0,1,2)\n", "\n", "#Grover.x(2)\n", "#Grover.z(2)\n", "3#Grover.x(2)\n", "#Grover.mct(range(2),2,0)\n", "#Grover.ccx(0,1,2)\n", "\n", "Grover.x(range(3))\n", "Grover.h(range(3))\n", "\n", "Grover.draw(output = \"mpl\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Esta es la función que podeis cambiar para buscar nuevos elementos\n", "\n", "Detector = QuantumCircuit(3,3)\n", "\n", "Detector.cz(1,0)\n", "Detector.draw(output = \"mpl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Me interesa buscar lo elementos que la puerta anterior cambia de signo. se puede comprobar que los que cambian de signo son el 011 y el 111, ya que la puerta z transforma el 0 en 0 y el ket 1 en -1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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U2N94xgA7M/lcmnevHmaMmVK5XPff/+9nnrqKT399NO1zqGxdOlSSRVnZdx000268847lZSUpJiYGD3xxBOaOXOmmjVrJolQAw2brS9FufPOO5WZmanf/va3mjdvXmWoIUnTpk1T9+7dVV5erpSUFDVp0sTEShEqMTEx6tevn2JiYswupd5tPSgtWlc91PixPd9Kf19bcZmKEzipDaCCKzxcYVPvkUpK5H30/yqfNw5lyrfoBbk6nSf3taPNKxD1JnOLtOudn77s5Ls90pf/lnw/0V9aFccAUJUdxwKPP/54lVBj2bJl6tKli+677746TQz6/fffa968eerSpYueeuqpyucJNWAVtg02du7cqSVLlqhly5Z66KGHalymV69eklR5atUp+/bt05VXXqnY2Fg1b95cN9xwg77//vt6rxn1LyUlRQsXLlRKSorZpdSrwlLp5U8ko47LH/xeWvNlvZbUYDilDaAqV2pHucdeJ2PTZvlWrpbh9co7Z55kGPJMvUcuj8fsEhFkRcelXe/Vffnv90uHNtdXNebjGAD+y25jgWnTpumOO+6QVHHZyS233KIxY8bou+++83tbBQUFuu+++/TNN99UeX7dunWEGmjQbHspyuLFi+Xz+TRu3Dg1bty4xmUaNWokqWqwkZ+fr4EDByouLk6LFy9WcXGxpk2bpiuuuELr16+X223NLKj8ZJGK83PNLsN0Xq9XxcXFatSokTw2HsR99o100s//PG74WhrWTYqwba9QwSlt4MfoAyT3uF/K958N8j6zUO6vv5Hx1W65J/2PXEmJZpeGepC1RXVPd3+QuUVK7m3f+TacfgzQD+IUO40FunbtqgcffLDy8Y033qiXX3454O2dmii0ffv2kirm4XG5XBo7dqwWLVqkt95666xrBuqDbf+EWbt2rSRp4MCBtS5z6rSs04ONp59+WllZWfroo4+UnJwsSUpMTNTFF1+sFStW6Kqrrqq/ouvRp8tm6NNlM8wuw3S7du3SmDFjtHTpUqWnp5tdTr35JIBAveiktOWg1Kd98OtpSJzSBn6MPkByhYUpbOoUlf/uLvneXClX13S5r7nK7LJQD3xe6XAAE/YX50lHD0gtUoJeUoPg9GOAfhCn2GUs4PF4tGjRIkVEVEyU9vDDDwcl1Dh9otC//e1vmjlzpiTpmWeeUdeuXXXixImzLx4IMtsG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NWrUKP3+97/X4sWLtWHDBt12222Kjo7WbbfdZnZ5IVFQUKAuXbroV7/6le666y6zywm5tWvX6te//rUuvPBCRUdHa+HChbriiiv04Ycfql+/fiGthWCjAfjFL35R5XH79u31+uuv64MPPiDYAAAAANDgPProo7rwwgv10EMPSZI6d+6sHTt26OGHH3ZMsDF8+HANHz5ckjR9+nSTqwm91atXV3k8Z84crVmzRsuXLw95sMGlKA2MYRj67LPPtH79eg0cONDscgAAAACgmvXr12vo0KFVnhs6dKgOHDigzMxMk6qCmXw+n06cOKGYmJiQ75szNhqIvLw8JSQk6OTJk/L5fJoxY4buvPNOs8sCAAAAYCElpSd18PB31Z4v93orP+/el1nt8enatIpTbOPoM+4nOztb8fHxVZ479Tg7O1uJiYkBfw9n60BmjkrLyqs8V9P3W9vPILpRpBLjW4Wo2uA7mpev3KN51Z73pw2cmxSv8DD/4oJZs2bp+PHjmjRpUoCVB45go4GIjY3Vli1bVFRUpE8++UR//OMf1bZtW918881mlwYAAADAIiLCw7T2k83an5lT4+tFxSV67tVVtT5u0byJ7pw4ut7rrE/ffX9cy9Z8VONrP/5+a3rupjFDf7yapYR7PFryxloVFpfU+PpPtYFundorNSXBr30+9dRTmjVrllasWGFKqMWlKA2E2+1Wx44d1a1bN912222aNm2a/vSnP5ldFgAAAAALcbvdum7EZYqICPd7XZfLpetHDFRkHdZt06aNcnKqhifffvtt5Wtm6t3tPHXumBzQuj+7oIvO6xDYug1FbONoXT300oDXveryS+Ryueq8zrx58zR16lStWLFCgwcPDmi/Z4tgo4Hy+XwqKak5YQMAAACA2sQ1a6KRP+/r93oDf9ZDyQmt67Rsv3799NZbb1V5bs2aNWrXrp2pl6FIFQHNNUP7KyY6yq/1WjZvquGXXVRPVYVW17Rz1atrmt/rXTtsgKIb1f3ndt999+mBBx7QqlWrTAs1JC5FaRBmzJihSy+9VO3bt1dZWZk++ugjzZ49WzfddJPZpQEAAACwoN7nn6edew8oY8+BOi2f0Lqlft6vV523f/fdd+viiy/Wn/70J02YMEEbNmzQ448/rvnz5wdaclDFxkTrmqH99eLyt+u0vNvl0nVXDPTrTJeCggLt3btXknTy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", "text/plain": [ "
" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circ = QuantumCircuit(3,3)\n", "circ.h(range(3))\n", "circ.barrier(range(3))\n", "#circ = circ + Detector\n", "circ = circ.compose(Detector)\n", "circ.barrier(range(3))\n", "#circ = circ + Grover\n", "circ = circ.compose(Grover)\n", "circ.barrier(range(3))\n", "circ.measure(range(3), range(3))\n", "circ.draw(output = \"mpl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Construimos a continuación el circuito para aplicar el algoritmo de grover" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAHICAYAAAAyd/zsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzKElEQVR4nO3deXRUVb7+/6eqEkLMTAJCZOYyKTOiAjYhgGFSbARBHCAO2K0EZ0VUDA6AiLRyQb3M4EVlkK+oCBIJhAgEoUEGaYWAjIYgYyYgVJL6/cEvdS2TQFIkqWTzfq3FWtY+u059NotzfGrXPudYHA6HQwAAADCK1dMFAAAAoPQR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQF6eLqCyy8vLU0pKigICAmSxWDxdDgAAMJzD4VBGRobCw8NltRY9X0fIu0opKSmqU6eOp8sAAADXmCNHjqh27dpFbifkXaWAgABJl/6iAwMDPVwNAAAwXXp6uurUqePMIEUh5F2l/J9oAwMDCXkAAKDcXGmZGBdeAAAAGIiQBwAAYCBCHiq1sWPHymKxuPxp1qyZc/uFCxc0YsQIhYaGyt/fXwMGDNDx48ed2+fNm1fg/fl//vjjD08MCQCAUsGaPFR6N910k1avXu187eX1f/+sn332WX377bdasmSJgoKCFBMTo3vuuUcbNmyQJA0ePFi9evVy2V90dLQuXLigGjVqlM8AAAAoA4Q8VHpeXl6qWbNmgfa0tDTNnj1bn332mbp16yZJmjt3rpo3b65Nmzbptttuk6+vr3x9fZ3vOXHihNasWaPZs2eXW/0AAJQFfq5FpZecnKzw8HA1bNhQDzzwgA4fPixJ2rp1q+x2u3r06OHs26xZM9WtW1dJSUmF7uuTTz7Rddddp4EDB5ZL7QAAlBVCHiq1W2+9VfPmzdN3332njz/+WAcOHNDf/vY3ZWRkKDU1VVWqVFFwcLDLe66//nqlpqYWur/Zs2fr/vvvd5ndAwCgMuLnWlRqvXv3dv53q1atdOutt6pevXpavHhxiYNaUlKSfvnlF/3v//5vaZcJAEC5YyYPRgkODlaTJk20b98+1axZUxcvXtTZs2dd+hw/frzQNXyzZs1SmzZt1L59+3KqFgCAskPIg1EyMzO1f/9+1apVS+3bt5e3t7fi4+Od2/fs2aPDhw+rY8eOBd63ePFiPfroo+VdMgAAZYKfa1GpvfDCC7rrrrtUr149paSkKDY2VjabTUOGDFFQUJAeffRRPffcc6pWrZoCAwM1cuRIdezYUbfddpvLfhYtWqScnBw9+OCDHhoJAACli5CHSu3o0aMaMmSITp06perVq+v222/Xpk2bVL16dUnS+++/L6vVqgEDBig7O1s9e/bURx99VGA/s2fP1j333FPgIg0AACori8PhcHi6iMosPT1dQUFBSktLU2BgoKfLAQCgSO+8845Gjx6tp59+Wh988IEkaf/+/XrhhRe0fv16ZWdnq1evXpo6daquv/565/v69eun7du3648//lBISIh69OihiRMnKjw83EMjubYVN3uwJg8AgGvAli1bNH36dLVq1crZlpWVpaioKFksFq1Zs0YbNmzQxYsXdddddykvL8/ZLzIyUosXL9aePXu0dOlS7d+/n/uJVgL8XAsAgOEyMzP1wAMPaObMmXr77bed7Rs2bNDBgwf1008/OWeE5s+fr5CQEK1Zs8Z5M/lnn33W+Z569erp5Zdf1t///nfZ7XZ5e3uX72BQbMzkAQBguBEjRqhv374uTwCSpOzsbFksFvn4+DjbqlatKqvVqvXr1xe6r9OnT+vTTz9Vp06dCHgVHCEPAACDLVy4UNu2bdOECRMKbLvtttvk5+enUaNG6dy5c8rKytILL7yg3NxcHTt2zKXvqFGj5Ofnp9DQUB0+fFhfffVVeQ0BbiLkAQBgqCNHjujpp5/Wp59+qqpVqxbYXr16dS1ZskTffPON/P39FRQUpLNnz6pdu3ayWl0jwosvvqiffvpJcXFxstlsGjp0qLh2s2Lj6tqrxNW1AICKatmyZerfv79sNpuzLTc3VxaLRVarVdnZ2c5tJ0+elJeXl4KDg1WzZk09//zzevHFFwvd79GjR1WnTh1t3LixwM3lUfaKmz248AIAAEN1795du3btcml7+OGH1axZM40aNcol/IWFhUmS1qxZoz/++EP9+vUrcr/5V95mZ2eXQdUoLYQ8AAAMFRAQoBYtWri05a+ry2+fO3eumjdvrurVqyspKUlPP/20nn32WTVt2lSS9OOPP2rLli26/fbbFRISov3792vMmDFq1KgRs3gVHCEPAIBr2J49ezR69GidPn1a9evX16uvvupyy5TrrrtO/+///T/FxsYq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0crNzdWKFSvkcDhcvnGePHlSK1eu1BdffKH4+HidO3fOuW358uXq06ePJ8oGgHKzdu1a9ejRQzExMZoyZYokKTMzUxs3btR3332n+Ph459KV8PBw3XvvvTp//rxmzJihb775Rn379vVk+SgGQh6MtW/fPmVnZ6t58+ayWq1yOBzKy8uT1WqVxWJx9jty5IjmzZund955Rz4+Pjp9+rQHqwaA8rFjxw7de++9GjlypEaOHKnc3FznOmVJSk1NVUJCgr777jslJibq4MGDkqTg4GDOk5UEIQ/XpPzAJ0k2m02bNm1S9+7d9eCDD2r69Okerg4AykdGRoZycnIUEhLibMv/MvxnKSkpmjBhgj788EM98cQT+vDDD8u7VLjBy9MFAJ5gsVhcvrEuWLBA58+f1+OPP+7BqgCgfAUEBBRoyw94+V+GbTabwsPDVa1aNUnSI488Uq41wn3cQgXXvKysLGVmZiosLEzt27f3dDkAUCH8+cvwb7/9pi+//FL16tXjPFmJMJMH4xT2U8Pl+Pn5ad68eUpPTy/DqgCg8rJYLKpZs6YGDx7s6VJQAqzJg9GKE/hycnIK/HwLACb760UWZf0+eAY/18IYx48f1/PPP69Vq1bp7NmzklzXlhT1fcbLy4uTFoBrwp8vOJNcL0K7nIsXL7q8D5UDM3kwRmxsrN566y3Vr19fN954o7p27aqIiAi1atVKPj4+zn55eXlyOByy2WxKSEjQhQsX1KtXLw9WDgDl4+OPP1ZCQoKGDh2qiIgI+fv7O7flh72SLHdBxUbIgzHatm2r//znP2rXrp22bdsmu92uevXqqXPnzoqMjFTnzp3VrFkzZ/9z585pyJAhWr58ubKyslS1alUPVg8AZa9BgwY6dOiQfHx81Lp1a0VFRalPnz669dZbXe4fmpOTIy8vL507d04zZsxQ69atFRkZ6cHK4Q5CHoxw5MgRdenSRaGhoUpKStLWrVu1YsUKff3119q5c6esVqtuuukmdenSRV26dFHPnj21Z88e9evXTx06dOAxZgCMt3v3brVs2VLt27dXSEiIVq9eLenSxWedO3dWnz59FBUV5fJleP369erSpYs6deqk9evXe6p0uImra2GEY8eOKT09XREREfL29laHDh10yy23KCYmRtu2bdNXX32llStX6sMPP9ScOXN08803y9vbW8ePH+feeACu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", "text/plain": [ "
" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backend = Aer.get_backend(\"qasm_simulator\")\n", "job = execute(circ, backend, shots = 1000)\n", "result = job.result()\n", "counts = result.get_counts()\n", "plot_histogram(counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Implementemos a continuación otro ejmeplo para un total de dos qubits y suponiendo que $|w\\rangle = |11\\rangle$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#inicialización importando las librerías correspondientes\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import math\n", "\n", "# importamos qiskit\n", "from qiskit import IBMQ, Aer, transpile, execute\n", "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", "#from qiskit.providers.ibmq import least_busy\n", "\n", "# herramientas para histograma\n", "from qiskit.visualization import plot_histogram" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comenzamos creando el circuito inicial de dos qubits" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = 2\n", "grover_circuit = QuantumCircuit(n)\n", "grover_circuit.draw('mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aplicamos una puerta H para obtener el estado $|s\\rangle$ que hemos llamamo an l parte teórica" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def initialize_s(qc, qubits):\n", " \"\"\"Con esta aplicación damos el primer paso en la implementación del algoritmo de Grover.\n", " Lo primero es aplicar un apuerta H.\n", "\n", " @patameter:\n", " - qc es el circuito\n", " - qubits: un lista de los qubits del circuito\n", " \n", " \"\"\"\n", " for q in qubits:\n", " qc.h(q)\n", " return qc" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grover_circuit = initialize_s(grover_circuit, [0,1])\n", "grover_circuit.draw('mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación construimos el oráculo. Suponemos que $|w\\rangle = |11\\rangle$. Entonces de acuerdo con los visto anteriormente y para este estado cuántico, el oráculo $U_w$ será una matriz de orden 4x4 con 1 en la diagonal salvo el cuarto que sería igual a -1. Esto lo podemos contruir con una puerta contro z. ya que no olvidemo la puerta z es igual a:\n", "\n", "$\\left(\\begin{array}{cc}\r\n", "1 & 0\\\\\r\n", "0 & -1\r\n", "\\end{array}\\right)$" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grover_circuit.cz(0,1) # Oracle\n", "grover_circuit.draw('mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora cramos y añadimos el difusor" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#operador difusor\n", "\n", "grover_circuit.h([0,1])\n", "grover_circuit.z([0,1])\n", "grover_circuit.cz(0,1)\n", "grover_circuit.h([0,1])\n", "grover_circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\n", "|\\psi\\rangle =\n", "\\begin{bmatrix}\n", "0 & 0 & 0 & 1 \\\\\n", " \\end{bmatrix}\n", "$$" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Ejecutamos y obtenemos el vector de estado\n", "sv_sim = Aer.get_backend('statevector_simulator')\n", "result = sv_sim.run(grover_circuit).result()\n", "statevec = result.get_statevector()\n", "from qiskit.visualization import array_to_latex\n", "array_to_latex(statevec, prefix=\"|\\\\psi\\\\rangle =\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como esperabamos, las amplitudes de los tres primeros estados son cero mientras que para el cuarto estado es 1." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoUAAAG8CAYAAACotN8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtXElEQVR4nO3deXRUZYL38V9VBWIMSYCELRKSwIStWQIICAhJWAIi7dKyNDSrbcAFGaQXhpZVBRqxFRu6R5Y2kUXFFWdsxkQCgWYNgmE7CsWegDCEpSoJECqpev9gcl+KLCQhu9/POZxjPfepe5/Cc/R77r1V1+RyuVwCAADAz5q5shcAAACAykcUAgAAgCgEAAAAUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAASR6VvYCfG6fTqfPnz8vHx0cmk6mylwMAAGo4l8uljIwMBQYGymwu/HwgUVjBzp8/r6CgoMpeBgAA+JlJTU1V06ZNC91OFFYwHx8fSbf/xfj6+lbyagAAQE1nt9sVFBRkNEhhiMIKlnfJ2NfXlygEAAAV5l63rfFFEwAAABCFAFCRtm3bpl/+8pcKDAyUyWTShg0b3La7XC7Nnj1bTZo0kZeXl/r37y+r1WpsP336tH77298qNDRUXl5eatGihebMmaNbt24VeLzjx4/Lx8dHdevWLcdPBaAmIAoBoAJlZWWpY8eO+tvf/lbg9jfffFN//etf9d5772nPnj3y9vbWwIEDdfPmTUnSjz/+KKfTqeXLl+vIkSN655139N577+lPf/pTvn05HA6NHDlSvXv3LtfPBKBmMLlcLldlL+LnxG63y8/PTzabjXsKgZ85k8mkL7/8Uk899ZSk22cJAwMD9bvf/U6///3vJUk2m02NGjVSXFycfv3rXxe4n8WLF+s///M/dfLkSbfx6dOn6/z58+rXr5+mTp2qa9eulefHAVBFFbc9OFMIAFXEqVOndOHCBfXv398Y8/PzU/fu3bVr165C32ez2VS/fn23sc2bN+vTTz8t9IwkANyNKASAKuLChQuSpEaNGrmNN2rUyNh2t+PHj2vp0qWaNGmSMXb58mWNHz9ecXFxXJEAUGxEIQBUU+fOndOgQYM0bNgwxcTEGOMxMTEaNWqU+vTpU4mrA1DdEIUAUEU0btxYknTx4kW38YsXLxrb8pw/f15RUVHq2bOnVqxY4bZt8+bNeuutt+Th4SEPDw/99re/lc1mk4eHh95///3y/RAAqi1+vBoAqojQ0FA1btxYiYmJCg8Pl3T7BvE9e/bohRdeMOadO3dOUVFR6tKli2JjY/M9y3TXrl3Kzc01Xn/11VdatGiRdu7cqYceeqhCPguA6ocoBIAKlJmZqePHjxuvT506pZSUFNWvX1/NmjXT1KlT9cYbbygsLEyhoaGaNWuWAgMDjW8onzt3TpGRkQoODtZbb72lS5cuGfvKO5vYpk0bt2N+9913MpvNateuXfl/QADVFlEIABXou+++U1RUlPF62rRpkqRx48YpLi5Of/zjH5WVlaWJEyfq2rVrevTRR/XNN9/ogQcekCR9++23On78uI4fP57vwfb8whiA+8HvFFYwfqcQAABUJH6nEAAAAMVGFAIAAIAoBAAAAFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAAEkelb0AlI+YJZW9AgAAUBwrp1b2Cm7jTCEAAACqZhSuXbtWkyZN0sMPPyxPT0+ZTCbFxcUVOt9ut2vatGkKDg6Wp6enQkJC9Ic//EGZmZkFznc6nVq6dKnat28vLy8vNWjQQCNHjtTJkycLPUZ8fLwiIiLk4+MjX19fRUVFKTEx8X4/KgAAQJVQJaNw5syZWrFihc6cOaMmTZoUOTcrK0sRERF655131Lp1a73yyitq1aqV3nrrLfXt21c3b97M955JkyZpypQpcrlcmjJligYNGqQvvvhCXbt2ldVqzTd/7dq1GjRokH744QeNHz9e48aN05EjRzRgwAB99tlnZfa5AQAAKkuVjMJVq1bp9OnTunTpkp5//vki57755ptKSUnR9OnTFR8frz//+c+Kj4/X9OnTtXfvXr3zzjtu87ds2aJVq1apT58+2r9/vxYtWqQ1a9Zow4YNunLliiZPnuw2/+rVq3r55ZcVEBCg/fv3a+nSpVq6dKn2798vf39/vfDCC8rIyCjzvwMAAICKVCWjsH///goODr7nPJfLpVWrVqlOnTqaNWuW27ZZs2apTp06WrVqldv4ypUrJUmvv/66ateubYw/9thjioyMVEJCgs6ePWuMf/rpp7p27ZpefvllNW3a1Bhv2rSpJk+erPT0dH355Zel+pwAAABVRZWMwuKyWq06f/68evXqJW9vb7dt3t7e6tWrl06ePKnU1FRjPCkpydh2t4EDB0qStm7d6jZfkqKjo4s1HwAAoDqq1j9Jk3f/X1hYWIHbw8LCFB8fL6vVqqCgIGVlZemnn35Su3btZLFYCpx/537vdYyC5t8tOztb2dnZxmu73S5JcjgccjgckiSz2SyLxaLc3Fw5nU5jbt54Tk6OXC6XMW6xWGQ2mwsdv73fWoWuCQAAVB1Op1O5ubnGa5PJJA8Pj0LHC+uFojqiOKp1FNpsNkmSn59fgdt9fX3d5pV0/r3eU9D8uy1cuFDz5s3LN56QkKAHH3xQktSsWTN16tRJBw8edLt03apVK7Vu3VrJycm6dOmSMR4eHq7g4GBt27bN7X7GHj16qGHDhkpISJD0eKFrAgAAVUd6erp27dplvPbx8VHfvn2VmpqqlJQUY7xBgwbq2bOnrFarjh49aozfqyP27dtXrHVU6yisDmbMmKFp06YZr+12u4KCghQdHW1Epdl8+yp+hw4d1K5dO2Nu3ni3bt3ynRGUpD59+hQ4Hh0drQ2Fn7wEAABVSEBAgAYPHmy8NplMkqSgoCAFBgbmGw8LC1OLFi2M8Xt1RJcuXYq1jmodhXln7wo7U5d3qTZvXknn3/0ef3//e86/m6enpzw9PfON16pVS7VquV/itVgsBV7W9vAo+F9TYeN37xcAAFRdZrPZCLjijBfWCyXtiHzHK9asKupe9/TdfT+gt7e3mjRpolOnTrldoy9s/r2Oca97GgEAAKqLah+FgYGB2rFjh7Kysty2ZWVlaceOHQoNDVVQUJAxHhERYWy7W3x8vKTbl2XvnC/p/+7TK3h+3hwAAIDqqlpHoclk0nPPPafMzEy9/vrrbttef/11ZWZmKiYmxm184sSJkm7/juGtW7eM8f/5n/9RUlKSoqOj3X4jcfjw4fLz89PSpUuVlpZmjKelpWnZsmUKCAjQ008/XR4fDwAAoMKYXHd+U6GKWLVqlbZv3y5JOnTokPbv369evXrp3/7t3yRJjz76qJ577jlJt88I9urVSwcOHFB0dLQ6d+6s/fv3KyEhQV27dtXWrVvl5eXltv+YmBitWrVKv/jFL/T444/rp59+0vr161WnTh3t2rVLLVu2dJu/du1ajRkzRg0aNNCIESMkSevXr1d6errWr1+vYcOGFfuz2e12+fn5yWazGV80KQ8xS8pt1wAAoAytnFq++y9ue1TJKBw/frw++OCDQrePGzdOcXFxxmubzaa5c+fq888/14ULF9SkSRMNGzZMc+bMkY+PT773O51OLVu2TCtWrNDx48dVp04d9e/fX/Pnz3f7Ns+dvvnmGy1YsED79++XyWRSly5dNHPmTPXv379En40oBAAAdyIKf6aIQgAAcKeqEoXV+p5CAAAAlA2iEAAAAEQhAAAAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACoBkRhXFycTCZTkX/69etnzJ87d26Rc0+fPl3gceLj4xURESEfHx/5+voqKipKiYmJFfQpAQAAypdHZS/gfoWHh2vOnDkFbvvss8905MgRDRw4MN+2cePGKSQkJN943bp1842tXbtWY8aMUYMGDTR+/HhJ0vr16zVgwAB98sknGjp06P18BAAAgEpncrlcrspeRHm4deuWAgMDZbPZlJaWpkaNGkm6faZw3rx52rJliyIjI++5n6tXr6p58+by8PDQ999/r6ZNm0qS0tLS1KlTJ0nSyZMn5ePjU6x12e12+fn5yWazydfXt3QfrhhilpTbrgEAQBlaObV891/c9qj2l48Ls2HDBl2+fFlDhgwxgrA0Pv30U127dk0vv/yyEYSS1LRpU02ePFnp6en68ssvy2LJAAAAlabGRuGqVaskSc8991yB27dt26ZFixZp8eLF2rBhgzIzMwucl5SUJEmKjo7Oty3vsvTWrVvLYMUAAACVp9rfU1iQM2fOKDExUU2bNtWgQYMKnHP3fYh169bVu+++q7Fjx7qNW61WSVJYWFi+feSN5c0pSHZ2trKzs43XdrtdkuRwOORwOCRJZrNZFotFubm5cjqdxty88ZycHN15ld9ischsNhc6fnu/tQpdEwAAqDqcTqdyc3ON1yaTSR4eHoWOF9YLRXVEcdTIKIyNjZXT6dT48eNlsVjctnXs2FHvv/++IiMj1aRJE124cEFff/21Zs+erfHjx6tu3bp64oknjPk2m02S5Ofnl+84edfl8+YUZOHChZo3b16+8YSEBD344IOSpGbNmqlTp046ePCgzp49a8xp1aqVWrdureTkZF26dMkYDw8PV3BwsLZt26aMjAxjvEePHmrYsKESEhIkPV7UXxEAAKgi0tPTtWvXLuO1j4+P+vbtq9TUVKWkpBjjDRo0UM+ePWW1WnX06FFj/F4dsW/fvmKto8Z90cTpdCo0NFSpqak6ceKEQkNDi/W+xMREDRgwQO3atdPBgweN8ZYtW8pqtcrhcMjDw72hHQ6HateurQ4dOujAgQMF7regM4VBQUFKT083orI8zhS++DfOFAIAUB0sn1K+ZwqvXLkif3//e37RpMadKdy0aZPOnj2rfv36FTsIJalfv35q0aKFDh06JLvdbvyl5Z0htNls8vf3d3tP3qXggs4i5vH09JSnp2e+8Vq1aqlWLfdws1gs+c5sSsoXo/cav3u/AACg6jKbzTKb83/No7DxwnqhpB2R73jFmlWN3OsLJkUJCAiQJF2/ft0YK+q+waLuNwQAAKhOalQUXr58WV999ZXq16+vp59+ukTvzcrK0pEjR+Tt7W3EoSRFRERI0v/dp+cuPj7ebQ4AAEB1VaOicM2aNbp165ZGjx5d4CXbjIwMHTt2LN/4jRs3FBMTo4yMDA0fPtztNOvw4cPl5+enpUuXKi0tzRhPS0vTsmXLFBAQUOIABQAAqGpq1D2F//jHPyQVfun48uXLat26tbp27ao2bdqocePGunjxojZt2qS0tDS1b99eixcvdntPvXr1tGzZMo0ZM0adO3fWiBEjJN1+zN3ly5e1fv36Yj/NBAAAoKqqMVGYnJysw4cPq1u3bmrfvn2Bc+rXr68XX3xRycnJ2rhxo65evSovLy+1adNGU6ZM0eTJk+Xl5ZXvfaNHj1ZAQIAWLFig2NhYmUwmdenSRTNnzlT//v3L+6MBAACUuxr3kzRVHc8+BgAAd+LZxwAAAKgyiEIAAAAQhQAAACAKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAuo8o3LZtm86ePVvknNTUVG3btq20hwAAAEAFKXUURkVFKS4ursg5q1evVlRUVGkPAQAAgApS6ih0uVz3nON0OmUymUp7CAAAAFSQcr2n0Gq1ys/PrzwPAQAAgDLgUZLJzz77rNvrDRs26PTp0/nm5ebmGvcTPvbYY/e1QAAAAJS/EkXhnfcQmkwmpaSkKCUlpcC5JpNJXbt21TvvvHM/6wMAAEAFKFEUnjp1StLt+wmbN2+uqVOn6t///d/zzbNYLKpXr568vb3LZpUAAAAoVyWKwuDgYOOfY2Nj1alTJ7cxAAAAVE8lisI7jRs3rizXAQAAgEpU6ijMk5ycrL179+ratWvKzc3Nt91kMmnWrFn3exgAAACUo1JH4ZUrV/TUU09px44dRf5mIVEIAABQ9ZU6CqdNm6bt27crMjJS48aNU9OmTeXhcd8nHgEAAFAJSl1xX3/9tbp166bExESeWgIAAFDNlfqJJjdu3FCfPn0IQgAAgBqg1FEYHh5e4NNMAAAAUP2UOgrnzJmj//qv/9Lu3bvLcj0AAACoBKW+p/DChQt6/PHHFRERod/85jfq3LmzfH19C5w7duzYUi8QAAAA5c/kKur3ZIpgNptlMpncfo7m7vsLXS6XTCZTgb9f+HNlt9vl5+cnm81WaESXhZgl5bZrAABQhlZOLd/9F7c9Sn2mMDY2trRvBQAAQBXDY+4AAABQ+i+aAAAAoOYo9ZnCs2fPFntus2bNSnsYAAAAVIBSR2FISEixfrjaZDIpJyentIcBAABABSh1FI4dO7bAKLTZbDpw4IBOnTqliIgIhYSE3M/6AAAAUAFKHYVxcXGFbnO5XPrLX/6iN998U//4xz9KewgAAABUkHL5oonJZNLvf/97/eIXv9Af/vCH8jgEAAAAylC5fvv44Ycf1ubNm8vzEAAAACgD5RqFJ06c4EsmAAAA1UCp7yksjNPp1Llz5xQXF6evvvpK/fr1K+tDAAAAoIyVOgrznn1cGJfLpXr16ukvf/lLaQ8BAACAClLqKOzTp0+BUWg2m1WvXj117dpVEyZMUMOGDe9rgQAAACh/pY7CpKSkMlwGAAAAKhPPPgYAAEDZfNFkx44dSklJkd1ul6+vr8LDw9WrV6+y2DUAAAAqwH1F4c6dOzVhwgQdP35c0u0vl+TdZxgWFqbY2Fj16NHj/lcJAACAclXqKDxy5Iiio6N1/fp1DRgwQFFRUWrSpIkuXLigLVu2KCEhQQMHDtTu3bvVtm3bslwzAAAAylipo/C1117TrVu3tHHjRg0aNMht2/Tp0/XNN9/oiSee0GuvvaaPP/74vhcKAACA8lPqL5okJSVp6NCh+YIwz6BBgzR06FBt2bKl1IsDAABAxSh1FNpsNoWGhhY5JzQ0VDabrbSHAAAAQAUpdRQGBgZq9+7dRc7Zs2ePAgMDS3sIAAAAVJBSR+ETTzyhpKQkzZo1Szdv3nTbdvPmTc2ZM0dbtmzRk08+ed+LBAAAQPkyuVwuV2neePnyZXXv3l2nTp2Sv7+/unXrpkaNGunixYvau3evLl26pObNmys5OVn169cv63VXW3a7XX5+frLZbPL19S2348QsKbddAwCAMrRyavnuv7jtUeozhf7+/tq9e7fGjRunzMxMbdy4UbGxsdq4caMyMjI0YcIE7d69u0KCMCQkRCaTqcA/kZGR+eZnZ2frtddeU1hYmB544AEFBgZq4sSJ+t///d9Cj7Fu3Tp169ZN3t7eqlevnoYMGaL9+/eX46cCAACoOPf149UBAQF6//33tXz5cv3444/GE01at26tWrVqldUai8XPz09Tp07NNx4SEuL22ul06sknn1R8fLweeeQRPfPMM7JarVq1apUSExO1e/duNWjQwO098+fP18yZMxUcHKznn39eGRkZ+vjjj9WzZ08lJiby9BYAAFDtlfjy8fz585WVlaV58+YVGn63bt3SvHnz5OPjo//4j/8ok4UWJS/8Tp8+fc+5sbGxevbZZzVy5EitW7fOeALLe++9pxdeeEETJ07U8uXLjflWq1Vt27Y1LoX7+flJklJSUvTII4+oefPmOnz4sMzm4p105fIxAAC4U7W8fLxp0ybNnj1b/v7+RZ4JrF27tvz9/fXqq69Wud8pXLlypSRp4cKFRhBK0qRJk9S8eXOtW7dON27cMMZjY2OVk5OjV1991QhCSQoPD9fIkSP1ww8/aPv27RX3AQAAAMpBiaJw9erVqlevniZPnnzPuS+99JLq16+v2NjYUi+uJLKzsxUXF6cFCxZo2bJl2rNnT745N2/e1J49e9SqVSsFBwe7bTOZTBowYICysrL03XffGeNJSUmSpOjo6Hz7GzhwoCRp69atZfhJAAAAKl6J7incuXOn+vfvL09Pz3vO9fT0VP/+/bVjx45SL64kLly4oAkTJriNde3aVR999JFatGghSTpx4oScTqfCwsIK3EfeuNVqVe/evY1/rlOnjho3blzk/MJkZ2crOzvbeG232yVJDodDDodDkmQ2m2WxWJSbmyun02nMzRvPycnRnVf5LRaLzGZzoeO391ux93QCAIDScTqdys3NNV6bTCZ5eHgUOl5YLxTVEcVRoig8f/68mjdvXuz5oaGh+uqrr0pyiFKZMGGCevfurXbt2qlOnTo6duyY3n77ba1Zs0b9+vXToUOH5OPjYzxd5c7LwHfKu85+51NYbDabGjZsWOz5d1u4cKHmzZuXbzwhIUEPPvigJKlZs2bq1KmTDh48qLNnzxpzWrVqpdatWys5OVmXLl0yxsPDwxUcHKxt27YpIyPDGO/Ro4caNmyohIQESY8XuiYAAFB1pKena9euXcZrHx8f9e3bV6mpqUpJSTHGGzRooJ49e8pqtero0aPG+L06Yt++fcVaR4mi8P+fhSoeh8NR7C9g3I85c+a4vQ4PD9fq1aslSWvWrNHKlSs1bdq0cl9HQWbMmOF2bLvdrqCgIEVHRxtRmfd31KFDB7Vr186YmzferVu3fGcEJalPnz4FjkdHR2tD4ScvAQBAFRIQEKDBgwcbr/O+8xAUFOT2ZLi88bCwMOMqqHTvjujSpUux1lGiYgsMDNThw4eLPf/w4cN66KGHSnKIMjVp0iRJMi5h550hLOzMXt6l3TvPJOZ9W6e48+/m6ekpX19ftz+SVKtWLeNPXsxZLJYCxz08PNzG8/4lFzZe0T8HBAAASs9sNrv9/9zDw6PI8cJ6oaiOKNY6SrLo3r17a/PmzcX66ZfTp09r8+bN6tOnT0kOUaYCAgIkSVlZWZKk5s2by2w2F3oPYN74nfcchoWFKTMzUxcuXCjWfAAAgOqoRFH40ksvyeFwaOjQoUpPTy903uXLlzVs2DDl5OTohRdeuO9FllbeN5DzfsfQy8tL3bp109GjR3XmzBm3uS6XS99++628vb318MMPG+MRERGS9H/36bmLj493mwMAAFBdlSgKO3furKlTp2r//v1q27atZs+erS1btshqtcpqtSopKUmzZs1S27ZttW/fPr3yyivq3Llzea1dkvTjjz/q+vXrBY5Pnz5dkjRq1ChjfOLEiZJu3+t35/14y5cv18mTJ/Wb3/xGXl5exviECRPk4eGh+fPnu11GTklJ0UcffaQ2bdro0UcfLfPPBQAAUJFK/EQTl8ulV199VYsXL3b72vOd2y0Wi/74xz/qjTfecPuB6PIwd+5cvf322+rTp4+Cg4Pl7e2tY8eOaePGjXI4HJoxY4YWLFhgzHc6nRo8eLDxmLuIiAgdP35cX3zxhUJCQrRnz54iH3P3zDPPGI+5u3XrVokfc8cTTQAAwJ2qyhNNShyFeU6cOKHY2Fjt3LnTuN+ucePG6tWrl8aPH+/2rZjytHXrVv3973/X999/r4sXL+r69esKCAhQ9+7d9eKLLxb4o9PZ2dn685//rDVr1ig1NVX169fXkCFD9MYbb6hRo0YFHmfdunVasmSJjhw5otq1a6tXr156/fXXS3wmlCgEAAB3qvZRiNIhCgEAwJ2qShSW/48IAgAAoMojCgEAAEAUAgAAgCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAakAUnjt3TkuWLFF0dLSaNWum2rVrq3HjxnrmmWe0Z8+efPPnzp0rk8lU6J/Tp08XeJz4+HhFRETIx8dHvr6+ioqKUmJiYjl/OgAAgIrhUdkLuF9Lly7VokWL1KJFC0VHR6tBgwayWq3asGGDNmzYoA8//FAjRozI975x48YpJCQk33jdunXzja1du1ZjxoxRgwYNNH78eEnS+vXrNWDAAH3yyScaOnRoGX8qAACAimVyuVyuyl7E/fjiiy/k7++viIgIt/F//etf6tevn+rUqaOffvpJnp6ekm6fKZw3b562bNmiyMjIe+7/6tWrat68uTw8PPT999+radOmkqS0tDR16tRJknTy5En5+PgUa712u11+fn6y2Wzy9fUtwSctmZgl5bZrAABQhlZOLd/9F7c9qv3l41/96lf5glCSevfuraioKF29elWHDh0q9f4//fRTXbt2TS+//LIRhJLUtGlTTZ48Wenp6fryyy9LvX8AAICqoNpHYVFq1aolSfLwyH+VfNu2bVq0aJEWL16sDRs2KDMzs8B9JCUlSZKio6PzbRs4cKAkaevWrWW0YgAAgMpR7e8pLMzZs2e1adMmNWnSRO3bt8+3fc6cOW6v69atq3fffVdjx451G7darZKksLCwfPvIG8ubU5Ds7GxlZ2cbr+12uyTJ4XDI4XBIksxmsywWi3Jzc+V0Oo25eeM5OTm68yq/xWKR2WwudPz2fmsVuiYAAFB1OJ1O5ebmGq9NJpM8PDwKHS+sF4rqiOKokVHocDg0ZswYZWdna9GiRbJYLMa2jh076v3331dkZKSaNGmiCxcu6Ouvv9bs2bM1fvx41a1bV0888YQx32azSZL8/PzyHSfvunzenIIsXLhQ8+bNyzeekJCgBx98UJLUrFkzderUSQcPHtTZs2eNOa1atVLr1q2VnJysS5cuGePh4eEKDg7Wtm3blJGRYYz36NFDDRs2VEJCgqTH7/XXBAAAqoD09HTt2rXLeO3j46O+ffsqNTVVKSkpxniDBg3Us2dPWa1WHT161Bi/V0fs27evWOuo9l80uZvT6dSYMWP04YcfKiYmRitWrCjW+xITEzVgwAC1a9dOBw8eNMZbtmwpq9Uqh8OR7zK0w+FQ7dq11aFDBx04cKDA/RZ0pjAoKEjp6elGVJbHmcIX/8aZQgAAqoPlU8r3TOGVK1fk7+9/zy+a1KgzhU6nU88++6w+/PBDjR49Wu+9916x39uvXz+1aNFChw4dkt1uN/7S8s4Q2mw2+fv7u70n71JwQWcR83h6ehrffL5TrVq1jHse81gsFrezmnkKuieyqPG79wsAAKous9ksszn/1zwKGy+sF0raEfmOV6xZ1YDT6dSECRP0wQcfaOTIkYqLiyvwL7IoAQEBkqTr168bY0XdN1jU/YYAAADVSY2IwrwgXL16tUaMGKE1a9YUWMpFycrK0pEjR+Tt7W3EoSTj525u36fnLj4+3m0OAABAdVXtozDvkvHq1as1bNgwrV27ttAgzMjI0LFjx/KN37hxQzExMcrIyNDw4cPdTrMOHz5cfn5+Wrp0qdLS0ozxtLQ0LVu2TAEBAXr66afL/oMBAABUoGp/T+Frr72mDz74QHXq1FHLli31xhtv5Jvz1FNPKTw8XJcvX1br1q3VtWtXtWnTRo0bN9bFixe1adMmpaWlqX379lq8eLHbe+vVq6dly5ZpzJgx6ty5s/HIvPXr1+vy5ctav359sZ9mAgAAUFVV+yg8ffq0JCkzM1Pz588vcE5ISIjCw8NVv359vfjii0pOTtbGjRt19epVeXl5qU2bNpoyZYomT54sLy+vfO8fPXq0AgICtGDBAsXGxspkMqlLly6aOXOm+vfvX54fDwAAoELUuJ+kqep49jEAALgTzz4GAABAlUEUAgAAgCgEAAAAUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAAEYUAAAAQUQgAAAARhSWyd+9eDR48WHXr1pW3t7ceeeQRffLJJ5W9LAAAgPvmUdkLqC62bNmigQMH6oEHHtCvf/1r+fj46PPPP9eIESOUmpqq3/3ud5W9RAAAgFIzuVwuV2UvoqrLyclR69atlZaWpt27dys8PFySZLPZ1K1bN50+fVrHjh1TcHDwPfdlt9vl5+cnm80mX1/fcltzzJJy2zUAAChDK6eW7/6L2x5cPi6GzZs368SJExo1apQRhJLk5+enP/3pT7p165Y++OCDylsgAADAfSIKiyEpKUmSFB0dnW/bwIEDJUlbt26tyCUBAACUKaKwGKxWqyQpLCws37bGjRurTp06xhwAAIDqiC+aFIPNZpN0+3JxQXx9fY05d8vOzlZ2dna+fV25ckUOh0OSZDabZbFYlJubK6fTaczNG8/JydGdt35aLBaZzeZCxx0Oh27drFXKTwsAACrStWtO5ebmGq9NJpM8PDzkdBY8XlgvFDZ+5coVSdK9vkZCFJazhQsXat68efnGQ0NDK2E1AACgqlk9o2KOk5GRUegJLokoLJa8v8DCzgba7XbVq1evwG0zZszQtGnTjNdOp1NXrlyRv7+/TCZT2S8WQI1lt9sVFBSk1NTUcv31AgA1i8vlUkZGhgIDA4ucRxQWQ969hFarVV26dHHbduHCBWVmZqpbt24FvtfT01Oenp5uY3Xr1i2XdQL4efD19SUKAZRIUWcI8/BFk2KIiIiQJCUkJOTbFh8f7zYHAACgOuLHq4shJydHrVq10rlz5wr98eqjR48qJCSkUtcJoGarqB+/B/DzxOXjYvDw8NCqVas0cOBA9enTx+0xd2fOnNFbb71FEAIod56enpozZ06+W1IAoCxwprAEkpOTNWfOHO3cuVMOh0Pt27fXtGnTNGLEiMpeGgAAwH0hCgEAAMAXTQAAAEAUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQEQhAFRpubm5lb0EAD8TRCEAVEFOp1OSZLFYJEkul8sYKwoPqQJQWkQhAFRBy5cv14gRI/TPf/5TmZmZMplMMptv/yfb6XQWGogmk6kilwmgBuHZxwBQBYWGhurMmTPy9PRUx44dFR0drcGDB6t79+5u4ZeTkyMPDw9dv35dK1asUMeOHRUVFVWJKwdQXRGFAFDFHDlyRO3bt1eXLl1Ur149bdq0SZLk7e2tXr16afDgwYqOjlbr1q2N92zfvl19+vRRz549tX379spaOoBqzKOyFwAAcHfo0CFJ0qhRo/TKK6/o2LFj2rBhgz766CMlJCQoISFBjRs3VmRkpB577DENGTJEycnJkqQZM2ZU5tIBVGOcKQSAKmbFihV6/vnn9c9//lOPPfaY27a9e/fqo48+0meffaa0tDRJUlhYmOx2u27cuKFr165VwooB1AR80QQAqhCXy6UOHTpo6tSpatmypdu4JHXt2lVvv/22jh07pv/+7//W2LFjdfHiRV28eFFjxoyprGUDqAE4UwgAVVBmZqZq166t2rVr59vmcrncvmwyefJk/f3vf9f+/fsVHh5egasEUJMQhQBQDeWF4YkTJzRixAjZbDZZrdbKXhaAaozLxwBQDeWdKfzhhx+0f/9+/epXv6rkFQGo7jhTCABV0N2XiAtz8eJFffPNN/rlL3+p+vXrV8DKANRURCEAVAE3btzQ2bNn1axZM3l5eZXovbm5ucbj8ACgtLh8DABVwLvvvqvRo0dryZIl2rJli86fP6/c3Nwi33Pp0iXl5OQQhADKBGcKAaAKaNq0qc6fPy+LxSI/Pz/17NlT0dHR6t69u5o3by5/f3+3+VlZWZo7d64uX76slStXEoYA7htPNAGASnbs2DHZbDb16NFDo0aN0rfffqtdu3bp66+/VrNmzRQZGan+/furU6dOeuihh1S3bl0dPnxYK1euVGRkJEEIoEwQhQBQyY4dO6abN28qOjpaL730koYMGaKjR49q165d2rx5sz7//HOtW7dObdu2Vd++fTVo0CAlJibKbrcrJiamspcPoIbg8jEAVLLPPvtMw4cP18cff6zhw4cb4w6HQ2fOnNGBAwf0r3/9S0lJSfrhhx9Uq1YtuVwueXp66sqVK5W4cgA1CVEIAJXM5XLpxx9/1AMPPKDQ0NACf44mKytLx44d09GjRxUbG6tvv/1WkydP1l//+tdKWjWAmoYoBIAqrKBAnDJlipYtW6Z9+/apU6dOlbQyADUNUQgA1YDT6ZTZbNbp06f15JNP6urVqzp79mxlLwtADcLvFAJANWA23/7P9blz5+RwOPTiiy9W8ooA1DScKQSAasTlciktLU3169eXt7d3ZS8HQA1CFAIAAIDLxwAAACAKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAkv4fYgZ+ruujkQMAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# ahora medimos\n", "grover_circuit.measure_all()\n", "\n", "qasm_sim = Aer.get_backend('qasm_simulator')\n", "result = qasm_sim.run(grover_circuit).result()\n", "counts = result.get_counts()\n", "plot_histogram(counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hagamos ahora el ejemplo pear tres qubits, y los estados a localizar serían el $|101\\rangle$ y $|110\\rangle$. El esquema del circuito que resuelve el problema sería el siguiente:\n", "\n", "![](../images/grover_II.PNG)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "qc = QuantumCircuit(3)\n", "# Creamos el oráculo\n", "qc.cz(0, 2)\n", "qc.cz(1, 2)\n", "oracle_ex3 = qc.to_gate()\n", "oracle_ex3.name = \"U$_\\omega$\"\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuación vamos a construir una función que nos permite construir un difusor para cualquier número de qubits (Para más información sobre esto ver este enlace ). " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def diffuser(nqubits):\n", " qc = QuantumCircuit(nqubits)\n", " # Apply transformation |s> -> |00..0> (H-gates)\n", " for qubit in range(nqubits):\n", " qc.h(qubit)\n", " # Apply transformation |00..0> -> |11..1> (X-gates)\n", " for qubit in range(nqubits):\n", " qc.x(qubit)\n", " # Do multi-controlled-Z gate\n", " qc.h(nqubits-1)\n", " qc.mct(list(range(nqubits-1)), nqubits-1) # multi-controlled-toffoli\n", " qc.h(nqubits-1)\n", " # Apply transformation |11..1> -> |00..0>\n", " for qubit in range(nqubits):\n", " qc.x(qubit)\n", " # Apply transformation |00..0> -> |s>\n", " for qubit in range(nqubits):\n", " qc.h(qubit)\n", " # We will return the diffuser as a gate\n", " U_s = qc.to_gate()\n", " U_s.name = \"U$_s$\"\n", " return U_s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora utilizamos todos los códigos ya expuestos anteriormente:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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znZORERUM/VgDnfzcnFxwdGjR7FhwwYMHDgQeXl5OHXqFFJTU9GqVStMmzYNR48ehb+/v34fe3t7/Pzzzxg3bhwaNWqEixcv6l8Hc+bMGXh6elY5jr+/P9auXYtRo0bB3d0dV65cQUJCAtRqNUaOHIljx45JFqQefAffgF6dGaSIiIgeot70TJF4bmffx84Dx5CbX8heKSIiokdgmKJqFRYVQ21tJXcZREREtRrDFBEREZEAHDNFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAvwfTxGreJuvw+oAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = 3\n", "grover_circuit = QuantumCircuit(n)\n", "grover_circuit = initialize_s(grover_circuit, [0,1,2])\n", "grover_circuit.append(oracle_ex3, [0,1,2])\n", "grover_circuit.append(diffuser(n), [0,1,2])\n", "grover_circuit.measure_all()\n", "grover_circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAHHCAYAAADDIU45AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAySklEQVR4nO3deXRUVb728aeqEkIkExkQkDAaRkECogJKCELCoChXhG5lVOhWGRpwwCgIaAMiLYoiXhEFXHQL2LaoXIYIEpCZCwSFvkBEGUNYhJCBACFJ1fsHb6opk0DmSjbfz1qs1bXPrlO/48o5/dSuvc+xOBwOhwAAAGAUq7sLAAAAQNkj5AEAABiIkAcAAGAgQh4AAICBCHkAAAAGIuQBAAAYiJAHAABgIA93F1DV2e12JSYmytfXVxaLxd3lAAAAwzkcDmVkZKhu3bqyWgsfryPklVJiYqJCQ0PdXQYAALjFnDx5UvXq1St0OyGvlHx9fSVd+w/t5+fn5moAAIDp0tPTFRoa6swghSHklVLeT7R+fn6EPAAAUGFuNk2MhRcAAAAGIuQBAAAYiJCHKm3q1KmyWCwu/5o3b+7cvmDBAnXt2lV+fn6yWCxKTU3Nt4+GDRvm28dbb71VgUcBAEDZY04eqrxWrVpp/fr1ztceHv/5s7506ZJ69uypnj17KiYmptB9vPHGGxo5cqTz9c0mswIAUNkR8lDleXh4qHbt2gVuGzdunCQpLi7uhvvw9fUtdB8AAFRF/FyLKi8hIUF169ZV48aN9dRTT+nEiRPF3sdbb72loKAghYeHa/bs2crJySmHSgEAqDiM5KFKu++++7R48WI1a9ZMZ86c0bRp0/Tggw/qwIEDRf7JdezYsWrXrp0CAwO1bds2xcTE6MyZM5ozZ045Vw8AQPlhJA9VWq9evfTEE0+oTZs2io6O1urVq5WamqoVK1YUeR8TJkxQ165d1aZNGz377LN655139MEHHygrK6scKweA8nezxWlXrlzRqFGjFBQUJB8fHz3++OM6e/asyz42bNigTp06Oae1TJw4kV87qghCHowSEBCgpk2b6pdffinxPu677z7l5OTo2LFjZVcYALhJq1atdObMGee/LVu2OLeNHz9e3333nb788ktt2rRJiYmJ+q//+i/n9v3796t3797q2bOn9u3bp+XLl+vbb7/VK6+84o5DQTER8mCUixcv6ujRo6pTp06J9xEfHy+r1apatWqVYWUA4B55i9Py/gUHB0uS0tLS9Omnn2rOnDnq1q2b2rdvr0WLFmnbtm3asWOHJGn58uVq06aNXn/9dd15552KiIjQ22+/rQ8//FAZGRnuPCwUASEPVdqLL76oTZs26dixY9q2bZv69esnm82mP/7xj5KkpKQkxcfHO0f2fv75Z8XHxyslJUWStH37dr333nvav3+/fv31V/3973/X+PHjNWjQINWsWdNtxwUAZaWwxWl79uxRdna2unfv7uzbvHlz1a9fX9u3b5ckZWVlqXr16i778/b21pUrV7Rnz56KOwiUCCEPVdqpU6f0xz/+Uc2aNdOAAQMUFBSkHTt2KCQkRJL03//93woPD3feA69Lly4KDw/Xt99+K0ny8vLSsmXLFBERoVatWmn69OkaP368FixY4LZjAoCykrc4be3atfroo4/022+/6cEHH1RGRoaSkpJUrVo1BQQEuLzn9ttvV1JSkiQpOjpa27Zt0xdffKHc3FydPn1ab7zxhiTpzJkzFX04KCaLw+FwuLuIqiw9PV3+/v5KS0uTn5+fu8sBAKBQqampatCggebMmSNvb28NHz483yKze++9V5GRkZo1a5Ykac6cOZo2bZoyMzPl5eWlyZMnKyYmRsuWLdPAgQPdcRi3vKJmD0byAAC4RVy/OK127dq6evVqvsc9nj171uXm8BMmTFBqaqpOnDih5ORkPfroo5Kkxo0bV2TpKAFCHgAAt4jrF6e1b99enp6e2rBhg3P74cOHdeLECXXs2NHlfRaLRXXr1pW3t7e++OILhYaGql27dhVdPoqJmyEDAGCoF198UY888ogaNGigxMRETZkyxbk4zd/fX88884wmTJigwMBA+fn5acyYMerYsaPuv/9+5z5mz56tnj17ymq16l//+pfeeustrVixQjabzY1HhqIg5AEAYKi8xWnnz59XSEiIHnjgAZfFae+++66sVqsef/xxZWVlKTo6WvPnz3fZx5o1azR9+nRlZWXp7rvv1jfffKNevXq543BQTCy8KCUWXgAAgIrEwgsAAIBbGCEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQB7uLgBFM/I9d1cA/Mcn49xdAQDgZhjJAwAAMBAhDwAAwECEPAAAAAMxJw8AUOUxbxmVSWWZt8xIHgAAgIEIeQAAAAYi5AEAABiIkAcAAGAgQh4AAICBCHkAAAAGIuQBAAAYiJAHAABgIEIeAACAgQh5AAAABiLkAQAAGIiQBwAAYCBCHgAAgIEIeQAAAAYi5AEAABiIkAcAAGAgQh4AAICBCHkAAAAGIuQBAAAYiJAHAABgIEIeAACAgQh5AAAABiLkAQAAGIiQBwAAYCBCHgAAgIEIeQAAAAYi5AEAABiIkAcAAGAgQh4AAICBCHkAAAAGIuQBAAAYiJAHAABgIEIeAACAgQh5AAAABqoSIW/WrFmyWCyyWCzasWOHy7apU6c6txX079ixYwXuc926dYqIiJCvr6/8/PwUGRmpDRs2VMDRAAAAlD8PdxdwMwcOHNCUKVNUo0YNZWZmFtpv6NChatiwYb72gICAfG1Lly7V4MGDFRISomHDhkmSli9frh49emjFihXq379/GVUPAADgHpU65GVnZ2vo0KFq27atwsLCtHTp0kL7Dhs2TF27dr3pPi9cuKAxY8YoODhYe/fuVb169SRJEydOVHh4uJ577jlFR0fL19e3rA4DAACgwlXqn2unT5+ugwcP6rPPPpPNZiuTfX755ZdKTU3VmDFjnAFPkurVq6fRo0crOTlZX3/9dZl8FgAAgLtU2pG8vXv3avr06XrjjTfUsmXLm/bfvHmzdu7cKavVqrCwMHXv3l0+Pj75+sXFxUmSoqKi8m2Ljo7W1KlTtWnTJg0ZMqTAz8nKylJWVpbzdXp6uqRro47Z2dmSJKvVKpvNptzcXNntdmffvPacnBw5HA5nu81mk9VqLbT92n49b/rfAKgoeX/reTw8rl1KcnJyXNo9PT1lt9uVm5vrbLNYLPLw8Ci0vbDzpmzPp5vXzjFVrWOSLAIqi4o4n4qiUoa8rKwsDRkyRG3bttXLL79cpPdMmTLF5XVAQIDmzp2bL6wlJCRIksLCwvLtI68tr09BZs6cqWnTpuVrj42N1W233SZJql+/vsLDw/XTTz/pxIkTzj7NmjVT8+bNtWvXLp07d87Z3rZtWzVo0ECbN29WRkaGs71jx46qVauWYmNjJfUptCagoq1evdrlde/evXX58mVt3LjR2ebh4aE+ffooOTlZ27dvd7b7+vqqW7duOnnypOLj453tISEh6tSpkxISEnT48GFne3mcT9dfICMjI+Xt7c0xVfFjkvwEVBblfT7t2bOnSHVYHNd/haokJk6cqPfee0979uzRXXfdJenanLslS5Zo+/btuv/++519v/76a6Wmpqpr166qU6eOkpKStGrVKr3++utKTU3VypUr1bdvX2f/pk2bKiEhQdnZ2dd9A7wmOztb1apVU5s2bbR///4CaytoJC80NFTJycny87t2kSmPb7TPf8hIHiqP+aMYyeOYKtcx/WkuI3moPD4eW77nU0pKioKCgpSWlubMHgWpdCN527dv19/+9jdNnTrVGfBupF+/fi6vGzZsqNGjR6tFixbq0aOHJk2a5BLySsvLy0teXl752j09PeXp6RrEbDZbgXMJfx8ub9b++/0C7lbY32RB7VarVVZr/um/hbUXdt6U9/nEMVXtYwIqE3edT/k+r0i9KkhOTo6GDh2qNm3a6JVXXinVvh566CE1adJEP//8s3PenCT5+/tLktLS0vK9J69fXh8AAICqqlKFvIsXLyohIUHx8fGqVq2ay02NlyxZIunafA2LxaKVK1fedH/BwcGSpEuXLjnbbjTv7kbz9QAAAKqSSvVzrZeXl5555pkCt23evFkJCQnq27evQkJCCrzx8fUyMzN18OBB1ahRwxn2JCkiIkJffPGFYmNjXeb2SdeegpHXBwAAoCqrVCHP29tbCxcuLHDbsGHDlJCQoJiYGGc4y8jI0JkzZ9S0aVOXvpcvX9bIkSOVkZGh4cOHu/x2PWDAAE2cOFEffPCBnn76aee98k6dOqV58+YpODg43zw/AACAqqZShbziOn/+vJo3b64OHTqoRYsWql27ts6ePav169fr1KlTat26tWbPnu3ynpo1a2revHkaPHiw2rVrp4EDB0q69liz8+fPa/ny5TztAgAAVHlVOuQFBgbq+eef165du7R69WpduHBB3t7eatGihcaOHavRo0fL29s73/sGDRqk4OBgzZgxQ4sWLZLFYlH79u01adIkde/e3Q1HAgAAULYq5X3yqpL09HT5+/vf9F41pTXyvXLbNVBsn4xzdwWAK66RqEzK+xpZ1OxRqVbXAgAAoGwQ8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMRMgDAAAwECEPAADAQIQ8AAAAAxHyAAAADETIAwAAMBAhDwAAwECEPAAAAAMR8gAAAAxEyAMAADAQIQ8AAMBAhDwAAAADEfIAAAAMVOKQt3nzZp04ceKGfU6ePKnNmzeX9CMAAABQQiUOeZGRkVq8ePEN+3z++eeKjIws6UcAAACghEoc8hwOx0372O12WSyWkn4EAAAASqhc5+QlJCTI39+/PD8CAAAABfAoTuenn37a5fXKlSt17NixfP1yc3Od8/F69epVqgIBAABQfMUKedfPwbNYLIqPj1d8fHyBfS0Wizp06KB33323NPUBAACgBIoV8n777TdJ1+bjNW7cWOPGjdNf/vKXfP1sNptq1qypGjVqlE2VAAAAKJZihbwGDRo4//eiRYsUHh7u0gYAAIDKoVgh73pDhw4tyzoAAABQhkoc8vLs2rVLu3fvVmpqqnJzc/Ntt1gsmjx5cpH3d+XKFb366qv63//9X/3yyy9KSUlRQECAmjRpohEjRmjQoEHy9PR0eU96erqmTp2qr776SklJSapTp46eeOIJTZkyRT4+Pvk+w26368MPP9SCBQv0yy+/yMfHR927d9f06dPVuHHj4v9HAAAAqGQsjqLc8K4AKSkpeuyxx7R169Yb3jPPYrEUGP4Kk5ycrNDQUN17771q2rSpQkJCdOHCBa1Zs0bHjx9XVFSU1qxZI6v12t1fMjMz9cADDyg+Pl5RUVEKDw/Xvn37FBsbqw4dOmjz5s2qXr26y2eMHDlSCxcuVKtWrdSnTx8lJiZqxYoV8vHx0Y4dOxQWFlbketPT0+Xv76+0tDT5+fkV+X3FNfK9cts1UGyfjHN3BYArrpGoTMr7GlnU7FHikbwJEyZoy5Yt6tq1q4YOHap69erJw6PUA4MKDAxUWlqaqlWr5tKek5OjHj16KDY2VmvWrFGfPn0kSW+//bbi4+M1ceJEvfXWW87+r7zyimbNmqV3331XMTExzvaNGzdq4cKF6tKli77//nvn5zz55JPq3bu3Ro8erXXr1pX6OAAAANypxKls1apVuvfee7Vhw4YyfaqF1WrNF/AkycPDQ/369VNcXJx++eUXSddW+S5cuFA+Pj75fhKePHmyPvzwQy1cuNAl5H3yySeSpDfffNPlc3r16qWuXbsqNjZWJ06cUP369cvsmAAAACpaiUPe5cuX1aVLlwp7bJndbtfatWslSXfddZeka0/USExMVHR0dL7btdSoUUOdO3fWunXrdPLkSYWGhkqS4uLinNt+Lzo6WnFxcdq0aZMGDx5cYB1ZWVnKyspyvk5PT5ckZWdnKzs7W9K1oGqz2ZSbmyu73e7sm9eek5Pj8hO3zWaT1WottP3afl3nIQLulPe3nidvFD8nJ8el3dPTU3a73WXKhsVikYeHR6HthZ03ZXs+3bx2jqlqHZPEIzRReVTE+VQUJQ55bdu2LfBpF2Xl6tWrmjFjhhwOh86fP68NGzbo0KFDGj58uB566CFJ10KepELn0IWFhWndunVKSEhQaGioMjMzdebMGd11112y2WwF9r9+vwWZOXOmpk2blq89NjZWt912mySpfv36Cg8P108//aQTJ044+zRr1kzNmzfXrl27dO7cOWd727Zt1aBBA23evFkZGRnO9o4dO6pWrVqKjY2V1KfQmoCKtnr1apfXvXv31uXLl7Vx40Znm4eHh/r06aPk5GRt377d2e7r66tu3brp5MmTLjdTDwkJUadOnZSQkKDDhw8728vjfLr+AhkZGSlvb2+OqYofk1R+c6KB4irv82nPnj1FqqPECy9iY2PVt29fxcXF6f777y/JLm7o4sWL8vX1db62WCx64YUXNHPmTOc3t3/84x966qmn9Nprr+mvf/1rvn289tprmjFjhv71r3+pX79+SkxM1B133KHOnTtry5Yt+fp///33ioqK0tixYzV37twC6ypoJC80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tGzZMvXv3192u10fffSR2rdvrzvvvFOzZs3SsmXLlJqaqpdeesnd5QNAuXE4HAoKClJ4eLh27typVatWKTc3Vw6HQzk5Ofn6e3h4aODAgerUqZP27t2rlJQUN1SN4iLkwVg+Pj6qV6+emjVrJuna/Dt/f38NGDBAK1as0E8//aT3339fERER+vXXXxUTE6O3335bAQEB6tOnj5urB4Dykzdi169fP0nSCy+8oA0bNshisTh/xcjNzXUGP0lKS0tTSEiI0tLSFBgY6J7CUSyEPBjrnnvu0dq1a9W3b19J176JOhwO5+ra+vXra/To0dq4caMOHz6sp556SpL05JNPuq1mAKhIvXr10tKlS5WWlqaePXuqW7duWrFihTIzM2Wz2VzuQrB161bt2rVLERERbqwYxcGkIxjL09NTLVu2dGmzWCzOi5bD4ZDdbpfNZlNYWJjCwsIkScOHD6/wWgHAXR5//HFJ0pw5cxQXF6e4uDjVqlVLERER6tGjh7y8vHTgwAF9+umn8vLy0l/+8hc3V4yiYnUtjGW322W1WpWbm1voPfHyVpIdOXJEjzzyiHJycnT06NEKrhQA3M/hcOi7777TggULFBsbm29uXseOHTVp0iT16tXLTRWiuBjJg7Hy7n13o5se581LcTgcslqtzm+0AHCrcDgczmtg37591bdvX6WlpSkuLk6//vqr6tatKx8fH3Xo0MG5ChdVAyN5MNLatWt14MABxcfHq1atWurQoYPuvPNONWjQQEFBQbLZbAXeDyonJ4dbpwAwXmG/cOTm5spisbjcIB5VFyEPRklNTdXMmTM1e/Zs2Ww25yILSQoMDFTnzp3Vr18/PfbYYwoICHBuu9FPugBgirxpLHmuH8W73vXteQvW+AJc9RDyYJTZs2dr6tSpio6O1tixY1W3bl3t27dPhw8f1u7du7Vz504lJycrPDxckydP1mOPPebukgGgwnz00UeKi4vTkCFDFBERIR8fH+c2u90uSYziGYSQB6M0bNhQd911l5YsWaKgoCCXbYmJidq3b5++/fZbffbZZ8rNzdWCBQs0YsQIN1ULABWrUaNGOn78uLy8vHT33XcrKipKvXv31n333ecyfSVv6sqlS5e0YMEC3X333YqMjHRj5SgJQh6McejQIXXo0EFjx47V9OnTJRX8zfTq1atav369xowZo9TUVK1atUodO3Z0S80AUFEOHjyo1q1bq3379qpZs6bWr18vSapRo4Y6d+6s3r17KyoqSs2bN3e+Z8uWLerSpYs6deqkLVu2uKt0lBA/sMMYDodDAQEBzlug5OTkyGq1OgNe3veZatWqqXfv3srOzla/fv30448/EvIAGO/nn3+WdO2G7+PHj9eRI0e0cuVKffHFF4qNjVVsbKxq166trl27qlevXnr44Ye1a9cuSVJMTIw7S0cJMZIHo9x///3697//reXLl+e7l1Peatq8iccpKSm655571L59e3355ZduqhgAKsaCBQv07LPP6n/+53/yXR93796tL774Qv/85z916tQpSVJYWJjS09N1+fJlpaamuqFilBazK2GEvO8q77//vvz8/NSnTx+NHz9eu3bt0pUrVyT955542dnZkqTDhw8rKytLdevWdU/RAFBBHA6H2rRpo3Hjxqlp06Yu7ZLUoUMHzZkzR0eOHNF3332nIUOG6OzZszp79qwGDx7srrJRSozkwSi5ublaunSpYmJilJSUpJYtWyoqKkqdOnVSy5Yt1bx5c1mtVp0+fVovvfSSvvzyS+3cuVPt2rVzd+kAUO4uXryoatWqqVq1avm2/f7eoaNHj9b8+fO1d+9etW3btgKrRFkh5MFI586d07x587RixQodOXJEt912m+644w75+PgoMDBQhw4d0rlz5zR8+HDNnz/f3eUCQKWQF/SOHj2qgQMHKi0tTQkJCe4uCyVEyINRHA6H7Ha7bDabLl++rISEBO3evVtbt27Vzp07dejQIYWEhCg0NFQjRozQoEGDVKNGDXeXDQCVyqpVq9S3b1+99NJLmjVrlrvLQQkR8mA8u92uK1euqFq1akpLS1NSUpJatWrl7rIAoMIV9DjHgpw9e1Zr167VI488osDAwAqoDOWBkIcq7fLlyzpx4oTq168vb29vl212u10Wi8V5Qfv9xe33j/cBANPc6Bp5Mzzuserj/+FQpc2dO1eDBg3Se++9p40bNyoxMdH5vFqr1SqLxeJ8BmNewDt37pzzHnoAYLIbXSMLk3eNJOBVfYzkoUqrV6+eEhMTZbPZ5O/vr06dOikqKkr33XefGjdunO/RZpmZmZo6darOnz+vhQsXEvQAGK0018hPPvmEoFfF8cQLVFlHjhxRWlqaOnbsqCeffFLff/+9tm/frlWrVql+/frq2rWrunfvrvDwcN1xxx0KCAjQgQMH9Mknn6hr164EPABGK+01koBX9RHyUGUdOXJEV65cUVRUlEaNGqWHH35Yhw8f1vbt2/XDDz/oq6++0t///ne1bNlS3bp1U8+ePbVhwwalp6dr5MiR7i4fAMoV10jwcy2qrH/+858aMGCAli1bpgEDBjjbs7Ozdfz4ce3fv18//vij4uLi9H//93/y9PSUw+GQl5eXUlJS3Fg5AJQ/rpEg5KHKcjgcOnTokKpXr65GjRoVeGuAzMxMHTlyRIcPH9aiRYv0/fffa/To0Xr//ffdVDUAVAyukSDkwUgFXczGjh2refPmac+ePQoPD3dTZQDgflwjbw2EPBgt7154x44d06OPPqoLFy7oxIkT7i4LACoFrpFmY3khjJa3gvb06dPKzs7W888/7+aKAKDy4BppNkbycEtwOBw6deqUAgMDeVYtAPwO10gzEfIAAAAMxM+1AAAABiLkAQAAGIiQBwAAYCBCHgAAgIEIeQAAAAYi5AEAABiIkAcAAGAgQh4AAICB/h/fhVra19AtMQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qasm_sim = Aer.get_backend('qasm_simulator')\n", "transpiled_grover_circuit = transpile(grover_circuit, qasm_sim)\n", "results = qasm_sim.run(transpiled_grover_circuit).result()\n", "counts = results.get_counts()\n", "plot_histogram(counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solución del algoritmo de Grover con grover_problem_oracle.\n", "\n", "A continuación vamos a ver cómo resolver este tipo de problemas con el paquete qiskit_textbook.problems y la función *grover_problem_oracle*:\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit_textbook.problems import grover_problem_oracle\n", "## Ejemplo de uso\n", "n = 4\n", "oracle = grover_problem_oracle(n, variant=1) # 0th variant of oracle, with n qubits\n", "qc = QuantumCircuit(n)\n", "qc.append(oracle, [0,1,2,3])\n", "qc.draw('mpl')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }