{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# QOSF screening challenge\n", "https://www.qosf.org/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2020-09-10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "by [Kunal Marwaha](https://kunalmarwaha.com/about)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Task 2\n", "Implement a circuit that returns |01> and |10> with equal probability.\n", "Requirements :\n", "The circuit should consist only of CNOTs, RXs and RYs. \n", "Start from all parameters in parametric gates being equal to 0 or randomly chosen. \n", "You should find the right set of parameters using gradient descent (you can use more advanced optimization methods if you like). \n", "Simulations must be done with sampling - i.e. a limited number of measurements per iteration and noise. \n", "\n", "Compare the results for different numbers of measurements: 1, 10, 100, 1000. \n", "\n", "Bonus question:\n", "How to make sure you produce state |01> + |10> and not |01> - |10> ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting started" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is my first time using qiskit, but I'll give it a go." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I know how to turn $|00\\rangle$ into an equal combination of $|01\\rangle$ and $|10\\rangle$, but it uses a Hadamard gate." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qiskit import *\n", "from qiskit.visualization import plot_histogram\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
┌───┐┌───┐ \n",
"q_0: ┤ X ├┤ H ├──■──\n",
" ├───┤└───┘┌─┴─┐\n",
"q_1: ┤ X ├─────┤ X ├\n",
" └───┘ └───┘"
],
"text/plain": [
" ┌───┐┌───┐ \n",
"q_0: ┤ X ├┤ H ├──■──\n",
" ├───┤└───┘┌─┴─┐\n",
"q_1: ┤ X ├─────┤ X ├\n",
" └───┘ └───┘"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qc_with_h = QuantumCircuit(2)\n",
"qc_with_h.x(0)\n",
"qc_with_h.x(1)\n",
"qc_with_h.h(0)\n",
"qc_with_h.cx(0, 1)\n",
"qc_with_h.draw()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/kunal/anaconda3/lib/python3.7/site-packages/matplotlib/transforms.py:796: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" points = np.array(args, dtype=float).reshape(2, 2)\n"
]
},
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Probability weights in state vector')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
" ┌───┐┌───┐ ┌─┐ \n",
"q_0: ┤ X ├┤ H ├──■──┤M├───\n",
" ├───┤└───┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ┤ X ├─────┤ X ├─╫─┤M├\n",
" └───┘ └───┘ ║ └╥┘\n",
"c: 2/════════════════╩══╩═\n",
" 0 1 "
],
"text/plain": [
" ┌───┐┌───┐ ┌─┐ \n",
"q_0: ┤ X ├┤ H ├──■──┤M├───\n",
" ├───┤└───┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ┤ X ├─────┤ X ├─╫─┤M├\n",
" └───┘ └───┘ ║ └╥┘\n",
"c: 2/════════════════╩══╩═\n",
" 0 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qc_with_h_measured = QuantumCircuit(2, 2)\n",
"qc_with_h_measured.x(0)\n",
"qc_with_h_measured.x(1)\n",
"qc_with_h_measured.h(0)\n",
"qc_with_h_measured.cx(0, 1)\n",
"qc_with_h_measured.measure([0, 1], [0, 1])\n",
"qc_with_h_measured.draw()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
" ┌────────────┐┌────────────┐┌────────────┐ ┌─┐ \n",
"q_0: ┤ RX(2.4479) ├┤ RY(1.7707) ├┤ RX(3.2658) ├──■──┤M├───\n",
" ├────────────┤└────────────┘└────────────┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ┤ RX(3.8473) ├────────────────────────────┤ X ├─╫─┤M├\n",
" └────────────┘ └───┘ ║ └╥┘\n",
"c: 2/════════════════════════════════════════════════╩══╩═\n",
" 0 1 "
],
"text/plain": [
" ┌────────────┐┌────────────┐┌────────────┐ ┌─┐ \n",
"q_0: ┤ RX(2.4479) ├┤ RY(1.7707) ├┤ RX(3.2658) ├──■──┤M├───\n",
" ├────────────┤└────────────┘└────────────┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ┤ RX(3.8473) ├────────────────────────────┤ X ├─╫─┤M├\n",
" └────────────┘ └───┘ ║ └╥┘\n",
"c: 2/════════════════════════════════════════════════╩══╩═\n",
" 0 1 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rands = np.random.random(4)*2*pi\n",
"qc_rand = gen_circuit(rands)\n",
"qc_rand.draw()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def get_counts(qc, shots):\n",
" backend = BasicAer.get_backend('qasm_simulator')\n",
" return execute(qc, backend, shots=shots).result().get_counts()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAE6CAYAAAB00gm8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de3xU9Z3/8dfHRAL8AAWUa6AhRhCCBuLQSH8U6K5Kl9psvRSxtWq9rdXVqu3W9reK2ptuq1apdWmp65WCldXFtQV9SCsY5WJAsCEWsCRKooAgreEWzPj5/XEm6RASOAOTmUnyfj4e82DOlc9wyLzzPed7vsfcHRERETm8Y9JdgIiISHuh0BQREQlJoSkiIhKSQlNERCQkhaaIiEhICk0REZGQstNdQDqdcMIJnpeXl+4yREQkg6xatWq7u5/Y0rJOHZp5eXmUl5enuwwREckgZvZOa8t0elZERCQkhaaIiEhICk0REZGQFJoiIiIhKTRFRERCUmiKiIiEpNAUEREJSaEpIiISkkJTREQkJIWmiIhISApNERGRkBSaIiIiISk0RUREQlJoioiIhKTQFBERCUmhKSIiEpJCU0REJCSFpoiISEgKTRERkZAUmiIiIiEpNEVEREJSaIqIiISk0BSJWbRoESNGjKCgoIC777671fXmz5+PmVFeXg7AnDlzGDNmTNPrmGOOYc2aNQdsU1payujRo9u0fhFpewpNESAajXLdddexcOFCKisrmTt3LpWVlQetV1dXx8yZMykpKWma99WvfpU1a9awZs0annjiCfLy8hgzZkzT8meeeYYePXqk5HOISNtSaIoAK1eupKCggPz8fLp06cL06dNZsGDBQevddtttfOc736Fr164t7mfu3LlcdNFFTdO7du3ivvvu49Zbb22z2kUkdRSaIkBtbS1Dhgxpms7NzaW2tvaAdd544w02b97MOeec0+p+nnrqqQNC87bbbuNb3/oW3bt3T37RIpJyCk0RwN0PmmdmTe8/+eQTbrrpJu69995W97FixQq6d+/edO1yzZo1vP3225x77rnJL1hE0kKhKULQsty8eXPTdE1NDYMGDWqarquro6KigsmTJ5OXl8fy5cspLS1t6gwEMG/evANamcuWLWPVqlXk5eUxYcIENmzYwOTJk1PyeUSkbVhLv2F3FpFI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\n",
"text/plain": [
" ┌────────┐┌──────────┐┌───────┐┌──────────┐┌─┐\n",
"q_0: ┤ RX(pi) ├┤ RY(pi/2) ├┤ RX(0) ├┤ RY(pi/2) ├┤M├\n",
" ├────────┤└───┬─┬────┘└───────┘└──────────┘└╥┘\n",
"q_1: ┤ RX(pi) ├────┤M├───────────────────────────╫─\n",
" └────────┘ └╥┘ ║ \n",
"c: 2/═══════════════╩════════════════════════════╩═\n",
" 1 0 "
],
"text/plain": [
" ┌────────┐┌──────────┐┌───────┐┌──────────┐┌─┐\n",
"q_0: ┤ RX(pi) ├┤ RY(pi/2) ├┤ RX(0) ├┤ RY(pi/2) ├┤M├\n",
" ├────────┤└───┬─┬────┘└───────┘└──────────┘└╥┘\n",
"q_1: ┤ RX(pi) ├────┤M├───────────────────────────╫─\n",
" └────────┘ └╥┘ ║ \n",
"c: 2/═══════════════╩════════════════════════════╩═\n",
" 1 0 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.draw()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'10': 100}"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_counts(c, 100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that the \"optimal\" result from before does produce the state we are looking for!"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def input_to_bonus_loss(inputs, shots):\n",
" qc = gen_bonus_circuit(inputs)\n",
" counts = get_counts(qc, shots)\n",
" # something I learned: qiskit orders its qubits upside-down from the picture!\n",
" return 1 - counts.get('10', 0)/shots"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"input_to_bonus_loss([pi, pi, pi/2, 0], 100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But we can \"simulate\" this process:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" direc: array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 1.00000000e+00],\n",
" [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00],\n",
" [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00,\n",
" 0.00000000e+00],\n",
" [ 1.50640275e-04, 1.78873203e-05, -1.05366640e-05,\n",
" 1.00562098e-03]])\n",
" fun: array(0.)\n",
" message: 'Optimization terminated successfully.'\n",
" nfev: 193\n",
" nit: 3\n",
" status: 0\n",
" success: True\n",
" x: array([ 3.09980025, 3.13055976, 1.57828926, 13.3309928 ])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shots = 1000\n",
"res = minimize(input_to_bonus_loss, np.random.rand(4)*2*pi, method='Powell', args=(shots,))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best input: [ 3.09980025 3.13055976 1.57828926 13.3309928 ]\n",
"Loss: 0.0023120000000000003\n"
]
}
],
"source": [
"print(\"Best input:\", res.x)\n",
"print(\"Loss:\", input_to_loss(res.x, shots))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's confirm this still gives us equal probability in $|01\\rangle$ and $|10\\rangle$."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"