{ "cells": [ { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "# Parameters\n", "N = 64\n", "steps = 60" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]\n", " [0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]\n", " [0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]\n", " ...\n", " [0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]\n", " [0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]\n", " [0.015625 0.015625 0.015625 ... 0.015625 0.015625 0.015625]]\n" ] } ], "source": [ "# Initial state\n", "psi = np.zeros((N,N))\n", "for i in range(N):\n", " for j in range(N):\n", " psi[i][j] = 1/np.sqrt(N*N)\n", "print(psi)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "# Specify the marked vertex\n", "a = 0" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "# Create an array to store the probabilities.\n", "prob = np.zeros(steps+1)\n", "\n", "# Print the probability at the marked vertex\n", "prob[0] = np.sum(np.square(psi[a][:]));\n", "#print(0,\"\\t\",prob[0])\n", "\n", "for t in range(steps):\n", " # Query the oracle.\n", " for i in range(N):\n", " psi[a][i] *= -1\n", " \n", " # Temporary variable.\n", " tmp = np.zeros((N,N))\n", "\n", " # Apply the Grover coin\n", " for i in range(N):\n", " # Calculate the average amplitude at this vertex.\n", " avg = 0\n", " for j in range(N):\n", " avg += psi[i][j]\n", " avg /= N\n", " \n", " # Invert each amplitude about this average.\n", " for j in range(N):\n", " tmp[i][j] = 2*avg - psi[i][j]\n", " \n", " # Flip-Flop Shift\n", " for i in range(N):\n", " for j in range(N):\n", " psi[i][j] = tmp[j][i]\n", " \n", " # Print the probability at the marked vertex\n", " prob[t+1] = np.sum(np.square(psi[a][:]))\n", " #print(t+1,\"\\t\",prob[t+1])" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(prob)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 4 }