{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\"Note: Trusted Notebook\" width=\"500 px\" align=\"left\">" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Iterative Phase Estimation Algorithm\n", "\n", "\n", "The latest version of this notebook is available on https://github.com/qiskit/qiskit-tutorial.\n", "\n", "For more information about how to use the IBM Q Experience (QX), consult the [tutorials](https://quantumexperience.ng.bluemix.net/qstage/#/tutorial?sectionId=c59b3710b928891a1420190148a72cce&pageIndex=0), or check out the [community](https://quantumexperience.ng.bluemix.net/qstage/#/community).\n", "\n", "***\n", "### Contributors\n", "Antonio Córcoles, Jay Gambetta, Rudy Raymond" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quantum Phase Estimation (QPE)\n", "\n", "The Quantum Phase Estimation (QPE) algorithm solves the problem of finding unknown eigenvalues of a unitary operator. The attractiveness of the QPE algorithm is due to the fact that it is a key ingredient of some other very powerful algorithms, like order-finding and Shor's. \n", "\n", "In a standard textbook, such as Nielsen & Chuang Quantum Computation and Quantum Information, in the QPE, each bit of the phase is encoded in a different qubit on a register using the phase kickback property of controlled-unitary operations. This is followed by an inverse Quantum Fourier Transform operation, which yields an n-bit approximation to the phase by reading the n-qubit register." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Iterative Phase Estimation Algorithm (IPEA)\n", "The QPE algorithm can, however, be realized in a much smaller qubit system, by iterating the steps on a system of just two qubits. This is called the Iterative Phase Estimation Algorithm (IPEA).\n", "\n", "Consider the problem of finding $\\varphi$ given $|\\Psi\\rangle$ and $U$ in $U |\\Psi\\rangle = e^{i \\phi} | \\Psi \\rangle$, with $\\phi = 2 \\pi \\varphi$. Let's assume for now that $\\varphi$ can be written as $\\varphi = \\varphi_1/2 + \\varphi_2/4 + ... + \\varphi_m/2^m = 0.\\varphi_1 \\varphi_2 ... \\varphi_m$, where we have defined the notation $0.\\varphi_1 \\varphi_2 ... \\varphi_m$. Now, if we have two qubits, $q_0$ and $q_1$, and we initialize them as $q_0 \\rightarrow |+\\rangle$ and $q_1 \\rightarrow |\\Psi \\rangle$, then, after applying a control-U between $q_0$ and $q_1$ $2^t$ times, the state of $q_0$ can be written as $|0\\rangle + e^{i 2 \\pi 2^{t} \\varphi} | 1 \\rangle$. That is, the phase of $U$ has been kicked back into $q_0$ as many times as the control operation has been performed.\n", "\n", "For $t=0$, we have a total phase in $q_0$ of $e^{i 2 \\pi 2^{0} \\varphi} = e^{i 2 \\pi \\varphi} = e^{i 2 \\pi 0.\\varphi_1 \\varphi_2 ... \\varphi_m}$\n", "\n", "For $t=1$, the phase would be $e^{i 2 \\pi 2^{1} \\varphi} = e^{i 2 \\pi \\varphi_1} e^{i 2 \\pi 0.\\varphi_2 \\varphi_3 ... \\varphi_m}$\n", "\n", "For $t=2$, $e^{i 2 \\pi 2^{2} \\varphi} = e^{i 2 \\pi 2 \\varphi_1} e^{i 2 \\pi \\varphi_2} e^{i 2 \\pi 0.\\varphi_3 \\varphi_4 ... \\varphi_m}$\n", "\n", "And for $t=m-1$, $e^{i 2 \\pi 2^{m-1} \\varphi} = e^{i 2 \\pi 2^{m-2} \\varphi_1} e^{i 2 \\pi 2^{m-3} \\varphi_2} ... e^{i 2 \\pi 2^{-1} \\varphi_m} = e^{i 2 \\pi 0.\\varphi_m}$. Note that if we perform a Hadamard operation on the state $|0\\rangle + e^{i 2 \\pi 0.\\varphi_m}|1\\rangle$ and perform a measurement in the standard basis, we obtain $|0\\rangle$ if $\\varphi_m = 0$ and $|1\\rangle$ if $\\varphi_m = 1$. \n", "\n", "In the first step of the IPEA, we directly measure the least significant bit of the phase $\\varphi$, $\\varphi_m$, by initializing the 2-qubit register as described above, performing $2^{m-1}$ control-$U$ operations between the qubits, and measuring $q_0$ in the diagonal basis.\n", "\n", "For the second step, we initialize the register in the same way and apply $2^{m-2}$ control-$U$ operations. The phase in $q_0$ after these operations is now $e^{i 2 \\pi 0.\\varphi_{m-1}\\varphi_{m}}= e^{i 2 \\pi 0.\\varphi_{m-1}} e^{i 2 \\pi \\varphi_m/4}$. We see that prior to extracting the phase bit $\\varphi_{m-1}$, we must perform a phase correction of $\\varphi_m /2$. This is equivalent to a rotation around the $Z-$axis of angle $-\\varphi_m /4$.\n", "\n", "Therefore, the $k$th step of the IPEA, giving $\\varphi_{m-k+1}$, consists of the register initialization ($q_0$ in $|+\\rangle$, $q_1$ in $|\\Psi\\rangle$), the application of control-$U$ $2^{m-k}$ times, a rotation around $Z$ of angle $\\omega_k = -2 \\pi 0.0\\varphi_{k+1} ... \\varphi_m$, a Hadamard transform to $q_0$, and a measurement of $q_0$ in the standard basis. Note that $q_1$ remains in the state $|\\Psi\\rangle$ throughout the algorithm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## IPEA circuit\n", "\n", "Let's first initialize the API and import the necessary packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:28:50.747843Z", "start_time": "2018-09-26T14:28:48.229088Z" } }, "outputs": [], "source": [ "from math import pi\n", "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# importing Qiskit\n", "from qiskit import BasicAer, IBMQ\n", "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", "from qiskit import execute\n", "from qiskit.tools.visualization import plot_histogram\n", "from qiskit.tools.monitor import job_monitor" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:28:51.950686Z", "start_time": "2018-09-26T14:28:50.750412Z" } }, "outputs": [], "source": [ "# Load saved IBMQ accounts\n", "IBMQ.load_accounts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you can try the following circuit in the quantum simulator for a phase of $-5\\pi/8 = 2 \\pi \\varphi$ and $m=4$. Note that the IPEA cannot be run in the real device in this form, due to the current lack of feedback capability." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:28:53.401913Z", "start_time": "2018-09-26T14:28:51.952881Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We first define controlled gates used in the IPEA\n", "def cu1fixed(qProg, c, t, a):\n", " qProg.u1(-a, t)\n", " qProg.cx(c, t)\n", " qProg.u1(a, t)\n", " qProg.cx(c, t)\n", "\n", "def cu5pi8(qProg, c, t):\n", " cu1fixed(qProg, c, t, -5.0*pi/8.0)\n", "\n", "# We then prepare quantum and classical registers and the circuit\n", "qr = QuantumRegister(2)\n", "cr = ClassicalRegister(4)\n", "circuitName=\"IPEAonSimulator\"\n", "ipeaCircuit = QuantumCircuit(qr, cr)\n", "\n", "# Apply IPEA\n", "ipeaCircuit.h(qr[0])\n", "for i in range(8):\n", " cu5pi8(ipeaCircuit, qr[0], qr[1])\n", "ipeaCircuit.h(qr[0])\n", "ipeaCircuit.measure(qr[0], cr[0])\n", "\n", "ipeaCircuit.reset(qr[0])\n", "\n", "ipeaCircuit.h(qr[0])\n", "for i in range(4):\n", " cu5pi8(ipeaCircuit, qr[0], qr[1])\n", "ipeaCircuit.u1(-pi/2, qr[0]).c_if(cr, 1)\n", "ipeaCircuit.h(qr[0])\n", "ipeaCircuit.measure(qr[0], cr[1])\n", "\n", "ipeaCircuit.reset(qr[0])\n", "\n", "ipeaCircuit.h(qr[0])\n", "for i in range(2):\n", " cu5pi8(ipeaCircuit, qr[0], qr[1])\n", "ipeaCircuit.u1(-pi/4, qr[0]).c_if(cr, 1)\n", "ipeaCircuit.u1(-pi/2, qr[0]).c_if(cr, 2)\n", "ipeaCircuit.u1(-3*pi/4, qr[0]).c_if(cr, 3)\n", "ipeaCircuit.h(qr[0])\n", "ipeaCircuit.measure(qr[0], cr[2])\n", "\n", "ipeaCircuit.reset(qr[0])\n", "\n", "ipeaCircuit.h(qr[0])\n", "cu5pi8(ipeaCircuit, qr[0], qr[1])\n", "ipeaCircuit.u1(-pi/8, qr[0]).c_if(cr, 1)\n", "ipeaCircuit.u1(-2*pi/8, qr[0]).c_if(cr, 2)\n", "ipeaCircuit.u1(-3*pi/8, qr[0]).c_if(cr, 3)\n", "ipeaCircuit.u1(-4*pi/8, qr[0]).c_if(cr, 4)\n", "ipeaCircuit.u1(-5*pi/8, qr[0]).c_if(cr, 5)\n", "ipeaCircuit.u1(-6*pi/8, qr[0]).c_if(cr, 6)\n", "ipeaCircuit.u1(-7*pi/8, qr[0]).c_if(cr, 7)\n", "ipeaCircuit.h(qr[0])\n", "ipeaCircuit.measure(qr[0], cr[3])\n", "\n", "backend = BasicAer.get_backend('qasm_simulator')\n", "shots = 1000\n", "\n", "results = execute(ipeaCircuit, backend=backend, shots=shots).result()\n", "plot_histogram(results.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are given in terms of $\\varphi = 0.\\varphi_1 \\varphi_2 \\varphi_3 \\varphi_4$, with the least significant digit ($\\varphi_4$) as the leftmost bit in the classical register. The result is $\\varphi = 11/16$, from which $\\phi = 2\\pi \\varphi = 11 \\pi/8 = 2 \\pi - 5\\pi/8$, as encoded in the circuit. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## IPEA in the real device\n", "\n", "As we have mentioned before, we currently lack the ability to use measurement feedback or feedforward, along with qubit resetting, on the real device in the Quantum Experience. However, we still can implement a segmentized version of the IPEA by extracting the information about the phase one bit at a time.\n", "\n", "Try the following four circuits in the real device. They estimate the same phase as in the previous example (-5$\\pi/8$), one bit at a time, from least ($\\varphi_4$) to most ($\\varphi_1$) significant bit." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:28:55.118404Z", "start_time": "2018-09-26T14:28:53.403783Z" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available backends: [[, , ], [, , ]]\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c2973ffcc61041fca8e7db9625227e5e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value=\"

Job Status: job is being initialized

\")" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We then prepare quantum and classical registers and the circuit\n", "qr = QuantumRegister(5)\n", "cr = ClassicalRegister(5)\n", "realStep1Circuit = QuantumCircuit(qr, cr)\n", "\n", "# Apply IPEA\n", "realStep1Circuit.h(qr[0])\n", "for i in range(8):\n", " cu5pi8(realStep1Circuit, qr[0], qr[1])\n", "realStep1Circuit.h(qr[0])\n", "realStep1Circuit.measure(qr[0], cr[0])\n", "\n", "#connect to remote API to be able to use remote simulators and real devices\n", "print(\"Available backends:\", [BasicAer.backends(), IBMQ.backends()])\n", "\n", "backend = IBMQ.get_backend(\"ibmq_5_tenerife\")\n", "shots = 1000\n", " \n", "job_exp1 = execute(realStep1Circuit, backend=backend, shots=shots)\n", "job_monitor(job_exp1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:46:51.283780Z", "start_time": "2018-09-26T14:28:55.120518Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results1 = job_exp1.result()\n", "plot_histogram(results1.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the first step of IPEA as above, we obtain the bit \"1\" with probability close to one. We then proceed to the second step of IPEA, assuming that we have identified the result of the first step correctly, as below. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:46:51.501883Z", "start_time": "2018-09-26T14:46:51.285861Z" }, "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "247d603af9d84a7dbfd5486f90a797cb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value=\"

Job Status: job has successfully run

\")" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "realStep2Circuit = QuantumCircuit(qr, cr)\n", "\n", "# Apply IPEA\n", "realStep2Circuit.h(qr[0])\n", "for i in range(4):\n", " cu5pi8(realStep2Circuit, qr[0], qr[1])\n", "realStep2Circuit.u1(-pi/2, qr[0]) # Assuming the value of the measurement on Step 1\n", "realStep2Circuit.h(qr[0])\n", "realStep2Circuit.measure(qr[0], cr[0])\n", "\n", "job_exp2 = execute(realStep2Circuit, backend=backend, shots=shots)\n", "job_monitor(job_exp1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:47:15.561184Z", "start_time": "2018-09-26T14:46:51.503838Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results2 = job_exp2.result()\n", "plot_histogram(results2.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the second step of IPEA as above, we obtain the bit \"1\" with probability close to one. We then proceed to the third step of IPEA, assuming that we have identified the result of the first and second steps correctly, as below." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:47:15.760111Z", "start_time": "2018-09-26T14:47:15.563852Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5baf27dc9bca430ebfffb0584c9357a0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value=\"

Job Status: job is being initialized

\")" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "realStep3Circuit = QuantumCircuit(qr, cr)\n", "\n", "# Apply IPEA\n", "realStep3Circuit.h(qr[0])\n", "for i in range(2):\n", " cu5pi8(realStep3Circuit, qr[0], qr[1])\n", "realStep3Circuit.u1(-3*pi/4, qr[0]) # Assuming the value of the measurement on Step 1 and Step 2\n", "realStep3Circuit.h(qr[0])\n", "realStep3Circuit.measure(qr[0], cr[0])\n", "\n", "job_exp3 = execute(realStep3Circuit, backend=backend, shots=shots)\n", "job_monitor(job_exp3)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:47:40.065810Z", "start_time": "2018-09-26T14:47:15.761971Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results3 = job_exp3.result()\n", "plot_histogram(results3.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the third step of IPEA as above, we obtain the bit \"0\" with probability close to one. We then proceed to the fourth step of IPEA, assuming that we have identified the result of the first, second, and third steps correctly, as below." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:47:40.199847Z", "start_time": "2018-09-26T14:47:40.069259Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "54019d73c383491eb2e6e598fcba7490", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value=\"

Job Status: job is being initialized

\")" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "realStep4Circuit = QuantumCircuit(qr, cr)\n", "\n", "# Apply IPEA\n", "realStep4Circuit.h(qr[0])\n", "cu5pi8(realStep4Circuit, qr[0], qr[1])\n", "realStep4Circuit.u1(-3*pi/8, qr[0]) # Assuming the value of the measurement on Step 1, 2, and 3\n", "realStep4Circuit.h(qr[0])\n", "realStep4Circuit.measure(qr[0], cr[0])\n", " \n", "job_exp4 = execute(realStep4Circuit, backend=backend, shots=shots)\n", "job_monitor(job_exp4)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2018-09-26T14:48:04.209177Z", "start_time": "2018-09-26T14:47:40.202791Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results4 = job_exp4.result()\n", "plot_histogram(results4.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the fourth step of the IPEA, we identify the bit \"1\" with high probability. In summary, we can conclude with high probability that the binary string of the phase is \"1011\"; that is, eleven in the decimal. \n", "\n", "We have left aside the case when $\\varphi$ does not accept a decomposition of the form $\\varphi = \\varphi_1/2 + \\varphi_2/4 + ... + \\varphi_m/2^m$. In that case, it can be shown that we can still use the IPEA to obtain $\\varphi$ to an accuracy of $2^{-m}$ with greater than a constant probability independent of $m$ (around $81\\%$ [1])." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "\n", "[1] M. Dobsicek *et al. Phys. Rev. A* **76**, 030306 (2007)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.6.4" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }