{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Grover's Search Algorithm" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Use Braket SDK Cost Tracking to estimate the cost to run this example\n", "from braket.tracking import Tracker\n", "t = Tracker().start()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, we provide a step-by-step walkthrough explaining Grover's quantum algorithm. We show how to build the corresponding quantum circuit with simple modular building blocks using the Braket SDK. Specifically, we demonstrate how to build custom gates that are not part of the basic gate set provided by the SDK. A custom gate can used as a core quantum gate by registering it as a subroutine. \n", "\n", "After building the circuit, we will run it on two types of devices: 1) classical simulator, and 2) ion-based quantum machine provided by IonQ. For the latter, we will demonstrate how to recover quantum tasks that may be waiting in queue.\n", "\n", "1. [Introduction](#introduction)\n", "2. [Background: What is a Quantum Oracle?](#background)\n", "3. [Anatomy of Grover's Algorithm](#steps)\n", "4. [Circuit Diagram](#diagram)\n", "5. [Code](#code)\n", " 1. [Libraries and Parameters](#setup)\n", " 2. [Helper Functions](#wrappers)\n", " 3. [Device: Classical Simulator](#sim_c)\n", " 4. [Device: IonQ](#ionq)\n", "6. [References](#ref)\n", "\n", "This tutorial is based on ion-trap experiments published as *C. Figgatt, D. Maslov, K. A. Landsman, N. M. Linke, S. Debnath & C. Monroe (2017), \"Complete 3-Qubit Grover search on a programmable quantum computer\", Nature Communications, Vol 8, Art 1918, doi:10.1038/s41467-017-01904-7, arXiv:1703.10535*. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Grover's algorithm is arguably one of the canonical quantum algorithms that kick-started the field of quantum computing. In the future, it could possibly serve as a hallmark application of quantum computing. Grover's algorithm allows us to find a particular register in an unordered database with $N$ entries in just $O(\\sqrt{N})$ steps, compared to the best classical algorithm taking on average $N/2$ steps, thereby providing a __quadratic speedup__.\n", "\n", "For large databases (with a large number of entries, $N$), a quadratic speedup can provide a significant advantage. For a database with one million entries, a quantum computer running Grover's algorithm would need about 1000 runs, while a classical computer would need, on average, $500$k runs.\n", "\n", "Research has been shown that any optimal quantum solution to an unstructured search problem has a speed limit of $O(\\sqrt{N})$ runtime. This research finding matches the performance of Grover's algorithm, thus proving that the algorithm is asymptotically optimal [2]. In fact, Grover's algorithm can be generalized to accelerate any type of search where one can construct a quantum oracle, as described in the next section. \n", "\n", "Consider the following problem [2]: \n", "In a search space with $N$ elements, we are searching the index of those elements, which is a number in the range $0, 1, \\dots, N-1$. \n", "We have $n$ bits at our disposal, with which we can store up to $2^{n}$ elements. \n", "Our search problem can then be expressed with the help of a function $f$, which takes as input an element out of our set of indices (that is, an integer $x$) and generates two possible outputs: $f(x^{*})=1$, if $x^{*}$ is the solution to the search problem or $f(x)=0$ otherwise (if $N<2^{n}$ we can just set $f(x)=0$ for all extra unused elements). \n", "This is done with the help of a quantum oracle, which recognizes solutions to the search problem. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Background: What is a Quantum Oracle? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Grover's algorithm, like many other quantum algorithms, utilizes the concept of a quantum oracle which we will denote as $\\mathcal{O}$. In essence, an oracle $\\mathcal{O}$ is a black-box operation that serves as a subroutine to another algorithm. Typically, oracles are defined using a classical function $f:\\{0,1\\}^{n} \\rightarrow \\{0,1\\}^{m}$, that maps an $n$-input bitstring to an $m$-output bitstring. With $x \\in \\{0,1\\}^{n}$, i.e., $x=(x_{0}, x_{1}, \\dots, x_{n-1})$ is a bitstring vector, and $y \\in \\{0,1\\}^{m}$, the oracle $\\mathcal{O}$ is a unitary operator, commonly defined by its effect on an arbitrary computational basis state as:\n", "\n", "$$\\mathcal{O} (\\left|x\\right> \\otimes \\left|y\\right>) = \\left|x\\right> \\otimes \\left|y \\oplus f(x)\\right>,$$ where $\\oplus$ denotes addition modulo 2. \n", "\n", "This means that the second qubit register of size $m$ stores the result of the computation. \n", "For $m=1$, which is the scenario we will focus on here, the second register $\\left|y\\right>$ is a single qubit that is flipped if (and only if) $f(x)=1$. \n", "In short, the quantum oracle flips the ancilla qubit only if the function $f(x)$ evaluates to one. \n", "Accordingly, we can check if $x$ is a solution to our search problem by first preparing the state $\\left|x\\right> \\otimes \\left|0\\right>$, then applying the oracle $\\mathcal{O}$ to that state, before finally measuring the state of the oracle qubit. \n", "\n", "In Grover's algorithm, it is useful to initialize the oracle qubit in a superposition, as $\\left|y\\right> = (\\left|0\\right> - \\left|1\\right>)/\\sqrt{2}$. \n", "We can distinguish two cases: \n", "(i) If $x$ is not a solution to our search problem (i.e., $f(x)=0$), then the application of the oracle operator $\\mathcal{O}$ to the input state $\\left|x\\right> \\otimes (\\left|0\\right> - \\left|1\\right>)/\\sqrt{2}$ leaves this state simply untouched. \n", "(ii) Conversely, if $x$ is a solution to our search problem (i.e., $f(x)=1$), then the oracle states $\\left|0\\right>$ and $\\left|1\\right>$ are flipped, such that the state picks up a minus sign, giving the final output state $-\\left|x\\right> \\otimes (\\left|0\\right> - \\left|1\\right>)/\\sqrt{2}$. \n", "Note that global phase factors do not matter in quantum computing, but the relative minus sign we encounter here does make all the difference for a superposition state, which would include the solution among all other possible input states. \n", "\n", "For both cases (i) and (ii), the action of the oracle can be summarized as: \n", "\n", "$$\\left|x\\right> \\otimes (\\left|0\\right> - \\left|1\\right>)/\\sqrt{2} \\longrightarrow (-1)^{f(x)} \\left|x\\right> \\otimes (\\left|0\\right> - \\left|1\\right>)/\\sqrt{2}.$$ \n", "Accordingly, the solution to our search problem gets *marked* by shifting the corresponding phase. \n", "Because the oracle qubit remains unchanged, one can omit this oracle qubit from further discussion and simply express the action of the oracle as: \n", "\n", "$$\\left|x\\right> \\longrightarrow (-1)^{f(x)}\\left|x\\right>.$$ \n", "\n", "This expression also captures the definition of a *phase oracle*, which will be used in our examples below. \n", "If a phase oracle is applied on a computational basis state $\\left|x\\right>$, then we only get a global phase that is not observable. However, when applied to a superposition of computational basis states, this phase oracle becomes a powerful tool. As it turns out, the search oracle needs to be applied only $O(\\sqrt{N})$ times to obtain the solution with high probability [2]; more generally, if there are $G$ solutions, the oracle needs to be applied only $O(\\sqrt{N/G})$ times). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Anatomy of Grover's Algorithm " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, we will be working with three bits $(n=3)$, leading to eight possible items $(N=2^{3}=8)$. \n", "To find a given target item, Grover's algorithm uses the following steps:\n", "\n", "1. **Initialize**: Start with a uniform superposition of all possible bit strings by applying Hadamard gates. This will result in all inputs having the same amplitude. Since we do not have any prior knowledge about the solution, we initialize to an equal superposition of all possible candidate solutions. \n", "\n", "2. **Oracle**: Item bits are then passed through an oracle. The oracle produces only two results. If it detects the target item, its amplitude will be flipped to negative. For all other items, their amplitudes will remain positive. Because the oracle is specifically engineered to change amplitudes based on a certain bit pattern, each target item would have its own associated oracle.\n", "\n", "3. **Amplification**: While the oracle in step 2 distinguishes the target item by flipping its amplitude in the negative direction, this difference remains too small to detect. Hence, we use a trick to magnify the difference in amplitudes; by flipping every amplitude around the mean amplitude. Recall that only the target item's amplitude was flipped to negative. In other words, the mean amplitude would still be positive, and its value would only be slightly lower than the amplitudes of other items. By flipping all amplitudes about the mean, the amplitudes of non-target items would decrease only slightly. On the other hand, the amplitude of the target item, being much less than the mean value to start, would be reflected back up into the positive direction by a large margin.\n", "\n", "4. **Repeat**: By repeating steps 2 and 3, we can magnify the amplitude of the target item to a point where it can be identified with overwhelming probability. To get to this point, we need to repeat these steps approximately $\\sqrt{N}$ times (again assuming a single solution and large $N$). As discussed in more detail in our Quantum Amplification Algorithm (QAA) tutorial, to ensure we measure a solution with high probability, we apply the Grover iterator $\\left\\lfloor\\frac{\\pi}{4\\theta}\\right\\rfloor=\\left\\lfloor\\frac{\\pi}{4}\\sqrt{\\frac{N}{G}}\\right\\rfloor$ times, with $G$ denoting the number of solutions. Since we may not know $G$ in advance, we not know the ideal number of iterations a priori. To address this issue, however, we may use quantum counting techniques with the help of the phase estimation procedure (QPE); for details we refer to Ref.[2]. \n", "\n", "5. **Measurement**: Measure the resulting amplitudes to identify the target item." ] }, { "attachments": { "image.png": { "image/png": "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DjvsEH79618P2YPsvOnljjnmmCHzv+51rwuTJk1KHsxL//WvfOUrYeHChUPm3WmnnQa2IZ3v7rvvPmTe9IQLL7wwfP7zn09PGvT6pptuSoJratazjwsuuGDQvMO9efbZZ8OnP/3psPbaa4cVVlghTJs2LWy55Zbh5JNPHm7R3M/POOOMsNdeew367MUXXwz33HPPoGmtvmlm3/H/5S9/mbuqz3zmM7nHjJk/+clP5i7T7HeFgP/www8PW2+9ddh0003D6quvHt7znveEu+66Kzd/JyqggAIKdI+Azf6751i6JwoooIACFRd4/vnnw7XXXhtWXHHFpDb77LPPDh/+8IfDiSeeGPbcc89BW8+8t9xyy5A+6lOmTBk0H28IZL/5zW+Gt7/97YEaepq4f+1rXwtz584Nxx9//KD5qUX/9re/Hd7xjncMms6gd/XSd77znXDxxReHO+64I6y//vpDZt14443DU089lUw/+uijk/71cd0UMjSayP8tb3lLWGuttcKpp56aBP1PP/10sk8HH3xw+NWvfpU03x9ue9Prw/yoo45KTwqLFi0KH/jAB8If/vCHMHbs4LoQWglQ0ECg3khqZt/xX7x48ZBsmX7++eeHc845J+yxxx6DPr/55pvDeeedl9T+r7vuuoM+400z35V99tkn8B2aM2dO8sxAiF/96lfD+9///nDppZeGcePGDcnfCQoooIAC3SFg8N8dx9G9UEABBRToEIHZs2eHWbNmJVv72c9+NikE+PKXvzwk+GcGCgnyBqjL29UZM2aE1VZbLfmIWu4111wz7LjjjoG8qTlPp2WXXbbhfFmOQoRLLrkkHHDAAUlBxbHHHpvOLnlNAB3XQ2A+fvz4gfdDZq4xgaD4gx/8YNhtt93CcccdN9BMnwH5qJ1+61vfGnbZZZfwxS9+Mfznf/5njVwGT77mmmuSWu7BU196d9lllyUtJA499NBBHy9YsCAsWbJk0LR6b4rYdwooKMShwCMb/DONdPnll4e84J/PGvmuUMBw7rnnhltvvTUJ/Flu6tSpiecb3/jGQEEA1iYFFFBAge4UGFzU3Z376F4poIACCihQWYGtttoq3HfffYVvH026qcV94IEHRpz39773vfDOd74zaYr/wx/+MBActyP99Kc/DfTxp3Ahb2A+Ci1+9KMfBbo+MHJ/I4km/+9973trznrkkUcG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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "