{ "cells": [ { "cell_type": "markdown", "id": "3dae4474-c19d-4003-add1-821db4f66899", "metadata": {}, "source": [ "# 09-Finance Tutorial- Credit Risk Analysis\n", "### Modified for Quantum Rings toolkit for Qiskit 2.x" ] }, { "cell_type": "code", "execution_count": 1, "id": "7ab5133f-3fce-45d4-b4ba-7a71d373b53a", "metadata": {}, "outputs": [], "source": [ "# This example is from:\n", "# https://qiskit-community.github.io/qiskit-finance/tutorials/09_credit_risk_analysis.html\n", "\n", "# Modified for use with Quantum Rings toolkit" ] }, { "cell_type": "code", "execution_count": 2, "id": "2b7673a6-8f5a-45ac-a4b5-dce2465a68d0", "metadata": {}, "outputs": [], "source": [ "#\n", "# Setup your account\n", "# You can also save your account locally using the class method QrRuntimeService.save_account(...) and\n", "# invoke the QrRuntimeService class constructor without any arguments.\n", "#\n", "\n", "import os\n", "my_token = os.environ[\"QR_TOKEN\"]\n", "my_name = os.environ[\"QR_ACCOUNT\"]\n", "\n", "#\n", "# Set the backend of your choice, depending upon the task and your hardware configuration.\n", "# See SDK documentation for additional help.\n", "#\n", "\n", "my_backend = \"scarlet_quantum_rings\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "0b6015ed-998d-448b-87c9-54723cc9f5bd", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from qiskit import QuantumRegister, QuantumCircuit\n", "from qiskit.circuit.library import IntegerComparator\n", "from qiskit_algorithms import IterativeAmplitudeEstimation, EstimationProblem\n", "#from qiskit_aer.primitives import Sampler\n", "\n", "from quantumrings.toolkit.qiskit import QrRuntimeService\n", "from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler\n", "\n", "#\n", "# Acquire Quantum Rings Backend\n", "#\n", "\n", "qr_services = QrRuntimeService(name = my_name, token = my_token)\n", "qr_backend = qr_services.backend(name = my_backend, precision = \"single\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "a3e2b240-8f4b-49d9-8e3a-c369bfc0c367", "metadata": {}, "outputs": [], "source": [ "# set problem parameters\n", "n_z = 2\n", "z_max = 2\n", "z_values = np.linspace(-z_max, z_max, 2**n_z)\n", "p_zeros = [0.15, 0.25]\n", "rhos = [0.1, 0.05]\n", "lgd = [1, 2]\n", "K = len(p_zeros)\n", "alpha = 0.05" ] }, { "cell_type": "code", "execution_count": 5, "id": "0ec7de1b-3dc1-462e-8960-1d66cfb8ca03", "metadata": {}, "outputs": [], "source": [ "from qiskit_finance.circuit.library import GaussianConditionalIndependenceModel as GCI\n", "\n", "u = GCI(n_z, z_max, p_zeros, rhos)" ] }, { "cell_type": "code", "execution_count": 6, "id": "14185c8d-1ee2-4ca4-8c9f-d19fb1c7f742", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
     ┌───────┐\n",
       "q_0: ┤0      ├\n",
       "     │       │\n",
       "q_1: ┤1      ├\n",
       "     │  P(X) │\n",
       "q_2: ┤2      ├\n",
       "     │       │\n",
       "q_3: ┤3      ├\n",
       "     └───────┘
" ], "text/plain": [ " ┌───────┐\n", "q_0: ┤0 ├\n", " │ │\n", "q_1: ┤1 ├\n", " │ P(X) │\n", "q_2: ┤2 ├\n", " │ │\n", "q_3: ┤3 ├\n", " └───────┘" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.draw()" ] }, { "cell_type": "code", "execution_count": 7, "id": "881a4f4f-b32f-4870-9a8a-a227eb164a5f", "metadata": {}, "outputs": [], "source": [ "u_measure = u.measure_all(inplace=False)\n", "sampler = Sampler(backend = qr_backend)\n", "job = sampler.run([u_measure])\n", "\n", "from qiskit.result import QuasiDistribution\n", "result = job.result()\n", "pub_result = result[0]\n", "counts = pub_result.data.meas.get_counts()\n", "shots = 0\n", "for key, val in counts.items():\n", " shots += val\n", "quasi_dist = QuasiDistribution({outcome: freq / shots for outcome, freq in counts.items()})\n", "\n", "binary_probabilities = quasi_dist.binary_probabilities()" ] }, { "cell_type": "code", "execution_count": 8, "id": "1280c3d7-35db-44f9-940f-85c99f2e98d6", "metadata": {}, "outputs": [], "source": [ "# analyze uncertainty circuit and determine exact solutions\n", "p_z = np.zeros(2**n_z)\n", "p_default = np.zeros(K)\n", "values = []\n", "probabilities = []\n", "num_qubits = u.num_qubits\n", "\n", "for i, prob in binary_probabilities.items():\n", " # extract value of Z and corresponding probability\n", " i_normal = int(i[-n_z:], 2)\n", " p_z[i_normal] += prob\n", "\n", " # determine overall default probability for k\n", " loss = 0\n", " for k in range(K):\n", " if i[K - k - 1] == \"1\":\n", " p_default[k] += prob\n", " loss += lgd[k]\n", "\n", " values += [loss]\n", " probabilities += [prob]\n", "\n", "\n", "values = np.array(values)\n", "probabilities = np.array(probabilities)\n", "\n", "expected_loss = np.dot(values, probabilities)\n", "losses = np.sort(np.unique(values))\n", "pdf = np.zeros(len(losses))\n", "for i, v in enumerate(losses):\n", " pdf[i] += sum(probabilities[values == v])\n", "cdf = np.cumsum(pdf)\n", "\n", "i_var = np.argmax(cdf >= 1 - alpha)\n", "exact_var = losses[i_var]\n", "exact_cvar = np.dot(pdf[(i_var + 1) :], losses[(i_var + 1) :]) / sum(pdf[(i_var + 1) :])" ] }, { "cell_type": "code", "execution_count": 9, "id": "08669ae5-c7d8-4684-b74a-3bb1e912af9b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Expected Loss E[L]: 0.6592\n", "Value at Risk VaR[L]: 2.0000\n", "P[L <= VaR[L]]: 0.9512\n", "Conditional Value at Risk CVaR[L]: 3.0000\n" ] } ], "source": [ "print(\"Expected Loss E[L]: %.4f\" % expected_loss)\n", "print(\"Value at Risk VaR[L]: %.4f\" % exact_var)\n", "print(\"P[L <= VaR[L]]: %.4f\" % cdf[exact_var])\n", "print(\"Conditional Value at Risk CVaR[L]: %.4f\" % exact_cvar)" ] }, { "cell_type": "code", "execution_count": 10, "id": "51733958-b349-4600-b512-5ac8331e9e22", "metadata": {}, "outputs": [ { "data": { "image/png": "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4eHSoEEDFTxdv35dtm3bJlu2bJH3339fli1bJvXq1ZO//vpLfv75Z+nRo4fdfV64cEFWrVolwcHB0r17d5ePLUeOHNK1a1e1npCQIP/8848KiLCsW7fObvBjMpnk1VdflRIlSsizzz7r8ucXLVpU+vXrJzNmzJCXX35ZKlSoIL6ILU5EPqBgeEG1EHlcaEHzQm63a9cuefDBB1XQ9Nprr6mAZ82aNTJv3jxZvny5en7hwoUqADl9+rQ8+eST6n3ffvttuvv9/vvv5c6dO9KmTRspVKjQ3ReCg82LgwoWLKiCIyxz585VQduiRYvUa1999ZVs2LDB5vsWL16sgr7BgwdLaGioZMawYcMkKSlJRo4cKb6KgRORl+UIySEXh15UC9aJPCY4h8ijF80L1slt0CqDQOj27dsyZswYmTBhgmrhsRYYGChdunSRHTt2SJ06dVTrUbZs2eS3336Tixcv2t23Flg98cQTKUuu3HefecG6izp16qQCMvj1119tboMWInTt9ezZUzKrePHiqgsTAdt///0nvoiBExERkZv98ssvsm/fPtWa9MYbb6S7bZ48eaRatWqqBah169aqNWn+/Pk2t0V3Glp7cufOLY888oh67s8//5SBAwdK9erV1dgpjBuqVKmSDB8+XK5du+b0sVetWlU9ooUstePHj6tWsxYtWqguRz0gAENXoSPjoryBgRMREZGboSsOunXrpsYiOSqj7jrteYxNQoAEQ4cOlS+//FL9G12DWG7cuCHvvfeeNG7cWKKjo5069ps3b6rHwoULp3ltxYoVqjWtWbNmohdtX9p35ms4OJzIy1Bm5eG5D6v1lb1WSvZs5h9+RG6HMivrzPeeNFspEuzBey8mxv5r6FoKC3Ns28BAkeSAweltMVvN3myxgACR8HDRc3wT1KpVy6n3oRUJLVBbt26Vo0ePSrly5VK8jrFI1gEWjB49Wu5v0EDyaC1E5ctLXEKCvPTSS/L555+rGX2YvecItPygRQm0LjtraN2CunXril7KlCmjWtswxgpdm2HW94IP8OkWp1u3bqmLi5H1+OKKFSsmffr0kTNnzji1n4iIiDRTLa2XQ4cOue0ciDKCMivrT6xXC0uukGcliVxYb148XXIlZ077y6OPptwWLR32tn04OfDTRETY3/aBB1JuW6WK/W11DATg8uXL6jHF4G0H4HefNtMt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5KclVzoe5b1n2JIr27Z5+ygMySfDUG0WXWxsrM3XY5KTeeXKlctjxzRixAg1YF1bTp065bHPJiIiIt/gky1OpUqVUo+nT5+2+br2fOnSpT12TKGhoWohIiIi/+WTLU41atRQjzt37rT5uvZ89erVPXpcRO6APE6nQ/uoReV0IvKQsIDbsqFSH7VgnQwEPTYoLYbFTu8NGajFqVGjRpInTx45duyY7Nq1S+67774Ury9YsEA9dujQwUtHSKSvxMAL3j4E8kMYDl4ixHzvcWi4wZhMmHp+d52M3eIUEhIiAwcOVOsDBgywjGmCyZMnq/xNTZs2TZE1HJnGK1WqpMYiEREREflNixO8+eabsnr1atm0aZOUL19emjRpovI2oV5doUKFZNasWSm2v3Tpkhw+fFjOnTuXZl9ffPGFWiAhIUE9YrsGDRpYtpkxY4bdhJtEREREPh04hYWFydq1a1UagHnz5snixYslf/78EhkZKWPHjrWbHNPeYHIEXKnr4Vk/x7xMRERElCW76jTZs2eXt99+W44ePaqST6KVaPbs2TaDpjFjxojJZJI5c+bYfS29pVmzZh46KyIiIsqqfDpwIiIiIvIlPttVR+RPsiWZc5cReRLmWh25bb73OO/KYAICRKpUubtOumHgRORlgRImxeJmePswyA/dNoVJqyO89wwJtV737/f2URgSu+qIiIiIHMTAiYiIiMhBDJyIvAxlVs6G9lcLS66QJ6HMym8V+quFJVcMBmVWqlY1Lyy5oiuOcSLyAQmBJ719COSHMGS4Qpj53uPwYYNBmZUDB+6uk27Y4kRERETkIAZORERERA5i4ERERETkIAZORERERA5i4ERERETkIM6qI/IBQUmFvX0I5Icw1+p0vPne47wrg0GZldKl766Tbhg4EflAyZUScbO8fRjkpyVXGh/ivWfYkitRUd4+CkNiVx0RERGRgxg4ERERETmIgRORlyVJnJwLfUUtWCfylNCAOPm53CtqwToZyK1bInXrmhesk244xonI60wSH/iPZZ3IUwLFJDXC/7Gsk4EkJYls3353nXTDFiciIiIiB7HFiYiIyI6I4cslK8oef1sOJq9XHvmL3AoJk6wmakI78UVscSIiIiJyEAMnIiIiIgcxcCIiIiJyEMc4EfmAQFNubx8C+anLd3jvGdXl7Ly27sDAicgHSq6UvD3P24dB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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot loss PDF, expected loss, var, and cvar\n", "plt.bar(losses, pdf)\n", "plt.axvline(expected_loss, color=\"green\", linestyle=\"--\", label=\"E[L]\")\n", "plt.axvline(exact_var, color=\"orange\", linestyle=\"--\", label=\"VaR(L)\")\n", "plt.axvline(exact_cvar, color=\"red\", linestyle=\"--\", label=\"CVaR(L)\")\n", "plt.legend(fontsize=15)\n", "plt.xlabel(\"Loss L ($)\", size=15)\n", "plt.ylabel(\"probability (%)\", size=15)\n", "plt.title(\"Loss Distribution\", size=20)\n", "plt.xticks(size=15)\n", "plt.yticks(size=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "id": "b218de28-691e-41ab-a086-82af084253c5", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot results for Z\n", "plt.plot(z_values, p_z, \"o-\", linewidth=3, markersize=8)\n", "plt.grid()\n", "plt.xlabel(\"Z value\", size=15)\n", "plt.ylabel(\"probability (%)\", size=15)\n", "plt.title(\"Z Distribution\", size=20)\n", "plt.xticks(size=15)\n", "plt.yticks(size=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "id": "86d5c368-7438-4df4-99f7-54d5fdc5ca17", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlUAAAHbCAYAAADiVG+HAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUBBJREFUeJzt3Qd0VNX2+PEdAiT0LoL0jiBIkSIiCAI+kSr4VBQRfxaaICjCk/pA4IHCQwGxPEBBkCJFqgiG3gSkPop0aVKklwDJ/Nc+zzv/STIzmUxuksnk+1lr1iT3ztx7p9yZPefss0+Iw+FwCAAAABIlXeLuDgAAAEVQBQAAYAOCKgAAABsQVAEAANiAoAoAAMAGBFUAAAA2IKgCAACwAUEVAACADQiqAAAAbEBQhYA0aNAgCQkJMRd3ihUrZtZ16NAhSfZfv359s329TgzrMejjCWR2Pd5AtnjxYmnSpInkzZtXQkNDzePNmTOnBJopU6Y43zfHjh1L6cMJOIFyTtn1OulnmG5DP9MS+lmn+7WOQY8nKT9z4RuCKhirVq0KmA8rpE7W+8f1ki5dOsmePbsULlxYqlWrJv/3f/8nX3zxhVy8eDFZj23ChAnyzDPPyPLly82+o6Ojk3X/qSGgjn3RwDN37tzyyCOPyHvvvSeHDh1K6UMFAh5BFYAko1OLXrt2TU6ePCnbt2+X//znP/Lmm29KoUKF5NVXX5ULFy4k+THcvHlT/vGPf5i/y5UrJ3PmzJFff/1Vdu/eLRs3bpTUJr6WDbto4Hnp0iXZunWrfPTRR1KhQgUTnCL1oNUz+aVPgX0CiZbUHxDacgf/VK9eXSZPnuz8PzIy0nw5a0vH2rVrZd68eXLr1i3zgb9s2TLzf61atZLseDQouHLlivlbg4OmTZsm2b5SOw00LVFRUSYYnj17tnz99ddy584d6dq1qxQtWpTn0EZ6HvjbdaeBtf5wsYP2UNBLkXgEVQBslSVLFqlYsWKc5U8++aS89dZbpnWqR48e8u2338rZs2elefPmsmXLliRreTl16pTz7zJlyiTJPoJF7NetcuXKJoDSrtu3337bfIEPGDCAoArwgO4/AMlKE8WnTZtmAix1/vx56d69e5LtT1vKLBkyZEiy/QSzLl26mBYqpd24586dS+lDAgISQRUSnMhudY3NmjVLGjZsKPny5ZNMmTJJ2bJlpXfv3vLnn3/Guz3tVtAP6hIlSkh4eLgULFjQtFisWLHCp+PxNCKmQYMGZrkmRsfXLH779m3JkSOHuf1zzz3n12i46dOnm9vkypVLsmbNan7pDxw4UC5fvmxbbkx8eRHaLbNw4ULTNaNJxXosGjzkyZNHatasaZr0kyN3KaH+/e9/m9dJ6fHv3bvX62s1btw48367//77JWPGjHLfffeZ1i/N07p3716c+1ivoeZuWYoXLx4jGdu1m1e7KLXb8qWXXpIHH3zQvJ66H92fjhrUBHt9rhNyjnjiz6AQa3SWdsWp48ePu00wTwo64EC7dS0nTpzweK789ttv5r1YunRpyZw5s9v3rf7/zjvvmDytbNmymdvp7TXfzrUL0hf6maGfHQUKFDCfJfqZovt3baF058iRI/Lxxx9Ls2bNzDmon2F60eDx73//u+maTmjwrt3LVatWNZ8rOkBDzz/NQ9Ou1KTIkfM0+s96L3p778d+n/o6+s+fc9HVzz//LC+88II5Hn2+9bXX51xTAN59912zPlVzAA6HIyIiQiMQcxk4cKDX9StXrnS89NJLzv9jX0qVKuU4c+aMx32tWbPGkT17do/3HzRokDkG6393ihYtata98sorMZZ/9dVXzvutWrXK62OePXu287bz58+Psa5evXpmuV67c/fuXUfbtm09PoYSJUo4jhw54vU51WPXdfpYvJk8ebJzO0ePHvW4HW+XPHnyONatW+dxH/E9Xl9Y+0rINoYNG+a834cffuj2Njt27HC+3p4ujzzyiOPs2bNuH5O3i76vLfHtQy9VqlTx+N52PUdct+vtuXL3vvD0erueE94uCeX6PHnz/PPPO2+3adOmOPfXaz2PsmTJEueYXB/H119/7QgLC/N4/KGhoeZ94ctzp58VnraTI0cO81njjuu56e2in3N6rrvj+jpt377dUa1aNY/befzxxx3Xrl1zu534Pgc8fdYpfV6tfejxuHsv+vr+j+8zNzHnoqVHjx4+fValZuRUIcH69+8vGzZskJYtW0r79u3Nr4w//vhDxo8fb2oBaUKy/gqdMWNGnPvqL1wd2n716lXz6/eNN96QNm3amF92u3btkhEjRphfTK6/ihPi2WefNS1g+qtRc3bq1avntZVJacvO3/72twTtR39RaQKvslroKlWqZBKidfmXX35pfu0mB/1lqL/OW7VqJTVq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AAACO6jq2rWrfPnllxIVFSVPPPGEvPjii1K/fn0pXry4x/scOXJEIiIiZPr06TJr1iz5/vvv5Y033pBPP/3UzuMHAABIPYnqkyZNkk6dOsmJEyfkp59+kldffdVrQKVKlCghr732mqxcuVKOHz8ub731ltkOAABAmm2p0lan+++/3++dPPDAAzJ27Fjp27ev39sAAABI9S1ViQmokmI7AAAAgYY6VQAAAIEUVO3atUvat28v1atXN+UUOnbsaGpYAQAApAW2BFWzZ882pRUWLFggoaGhcvPmTfn666+lcuXKsmzZMjt2AQAAEPxBVe/evaVJkyZy6tQp2bx5s+zZs0e2bt0qWbJkITkdAACkCT4FVVqjypPbt287SyZkzZrVubxKlSrSoEEDugABAECa4FNQpQFTzZo15ZdffomzLjw8XHLkyCGrVq2KsfzGjRvy66+/MuIPAACkCT4FVevWrZO7d+9K7dq15fXXX5cLFy7EWN+5c2cZPXq0PPnkk9KnTx95++23pUKFCnLs2DGzDgAAINj5FFRpMLVt2zYzxYzO/Ve2bFmZMGGCOBwOs37o0KHy0Ucfma6+kSNHyrhx4yQ6Otpca74VAABAsPM5UT0kJMRMVXPw4EFp06aNaY3SEX8bNmww63r27GkS1XVSZb3olDa0UgEAgLQiwaP/cufOLZ9//rls2rRJMmbMKHXr1pUOHTrI+fPnzfps2bKZCwAAQFrid0kFLfKpgZWODNRaVKVLlzbz+2m3HwAAQFqToKDqjz/+kJ9//lm+//57MxLwzp07pnL6gQMH5OWXX5Z3331XHn74YVm9enXSHTEAAEBqDaoiIyNNflSRIkWkUaNG0rZtW6lVq5aUKlVK5syZY0oqaBK7JrPnzJnT1Kd68cUX5fTp00n/CAAAAFJLUPXee+/JxIkT5YknnpBvv/1Wli5dakoopEuXTp5//nlTPV1VqlRJ1qxZI998841prSpXrpyMGjUqqR8DAABA6giqvvvuO6latarJndIgSqek6d69uyxcuNDkUM2cOTPG7du1a2e6BN944w3p379/Uh07AABA6gqqtDp6/vz54yy3qqXfunUrzjqdskZrV+3YscOO4wQAAEj9QZV2+/34448mSDp37pyprr53716TpK41qurVq+fxvtoFCAAAEOx8CqrGjx8vZcqUMdXRCxQoYOb70/yp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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot results for default probabilities\n", "plt.bar(range(K), p_default)\n", "plt.xlabel(\"Asset\", size=15)\n", "plt.ylabel(\"probability (%)\", size=15)\n", "plt.title(\"Individual Default Probabilities\", size=20)\n", "plt.xticks(range(K), size=15)\n", "plt.yticks(size=15)\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "id": "d0ba9a52-534a-4a4b-afb1-aeabcd4021b3", "metadata": {}, "outputs": [], "source": [ "# add Z qubits with weight/loss 0\n", "from qiskit.circuit.library import WeightedAdder\n", "\n", "agg = WeightedAdder(n_z + K, [0] * n_z + lgd)" ] }, { "cell_type": "code", "execution_count": 14, "id": "c10a8b38-ab55-41fb-939f-b0c9c111aef9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_39140\\3038495397.py:11: DeprecationWarning: The class ``qiskit.circuit.library.arithmetic.linear_amplitude_function.LinearAmplitudeFunction`` is deprecated as of Qiskit 2.2. It will be removed in Qiskit 3.0. Use the class qiskit.circuit.library.LinearAmplitudeFunctionGate instead.\n", " objective = LinearAmplitudeFunction(\n" ] } ], "source": [ "from qiskit.circuit.library import LinearAmplitudeFunction\n", "\n", "# define linear objective function\n", "breakpoints = [0]\n", "slopes = [1]\n", "offsets = [0]\n", "f_min = 0\n", "f_max = sum(lgd)\n", "c_approx = 0.25\n", "\n", "objective = LinearAmplitudeFunction(\n", " agg.num_sum_qubits,\n", " slope=slopes,\n", " offset=offsets,\n", " # max value that can be reached by the qubit register (will not always be reached)\n", " domain=(0, 2**agg.num_sum_qubits - 1),\n", " image=(f_min, f_max),\n", " rescaling_factor=c_approx,\n", " breakpoints=breakpoints,\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "id": "9d23064f-9cf0-4c07-9d7c-c7482a6bea05", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
           ┌───────┐┌────────┐      ┌───────────┐\n",
       "  state_0: ┤0      ├┤0       ├──────┤0          ├\n",
       "           │       ││        │      │           │\n",
       "  state_1: ┤1      ├┤1       ├──────┤1          ├\n",
       "           │  P(X) ││        │      │           │\n",
       "  state_2: ┤2      ├┤2       ├──────┤2          ├\n",
       "           │       ││        │      │           │\n",
       "  state_3: ┤3      ├┤3       ├──────┤3          ├\n",
       "           └───────┘│  adder │┌────┐│  adder_dg │\n",
       "objective: ─────────┤        ├┤2   ├┤           ├\n",
       "                    │        ││    ││           │\n",
       "    sum_0: ─────────┤4       ├┤0 F ├┤4          ├\n",
       "                    │        ││    ││           │\n",
       "    sum_1: ─────────┤5       ├┤1   ├┤5          ├\n",
       "                    │        │└────┘│           │\n",
       "    carry: ─────────┤6       ├──────┤6          ├\n",
       "                    └────────┘      └───────────┘
" ], "text/plain": [ " ┌───────┐┌────────┐ ┌───────────┐\n", " state_0: ┤0 ├┤0 ├──────┤0 ├\n", " │ ││ │ │ │\n", " state_1: ┤1 ├┤1 ├──────┤1 ├\n", " │ P(X) ││ │ │ │\n", " state_2: ┤2 ├┤2 ├──────┤2 ├\n", " │ ││ │ │ │\n", " state_3: ┤3 ├┤3 ├──────┤3 ├\n", " └───────┘│ adder │┌────┐│ adder_dg │\n", "objective: ─────────┤ ├┤2 ├┤ ├\n", " │ ││ ││ │\n", " sum_0: ─────────┤4 ├┤0 F ├┤4 ├\n", " │ ││ ││ │\n", " sum_1: ─────────┤5 ├┤1 ├┤5 ├\n", " │ │└────┘│ │\n", " carry: ─────────┤6 ├──────┤6 ├\n", " └────────┘ └───────────┘" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# define the registers for convenience and readability\n", "qr_state = QuantumRegister(u.num_qubits, \"state\")\n", "qr_sum = QuantumRegister(agg.num_sum_qubits, \"sum\")\n", "qr_carry = QuantumRegister(agg.num_carry_qubits, \"carry\")\n", "qr_obj = QuantumRegister(1, \"objective\")\n", "\n", "# define the circuit\n", "state_preparation = QuantumCircuit(qr_state, qr_obj, qr_sum, qr_carry, name=\"A\")\n", "\n", "# load the random variable\n", "state_preparation.append(u.to_gate(), qr_state)\n", "\n", "# aggregate\n", "state_preparation.append(agg.to_gate(), qr_state[:] + qr_sum[:] + qr_carry[:])\n", "\n", "# linear objective function\n", "state_preparation.append(objective.to_gate(), qr_sum[:] + qr_obj[:])\n", "\n", "# uncompute aggregation\n", "state_preparation.append(agg.to_gate().inverse(), qr_state[:] + qr_sum[:] + qr_carry[:])\n", "\n", "# draw the circuit\n", "state_preparation.draw()" ] }, { "cell_type": "code", "execution_count": 16, "id": "ede38a99-cd81-41fc-a86f-c2c79778ffea", "metadata": {}, "outputs": [], "source": [ "state_preparation_measure = state_preparation.measure_all(inplace=False)\n", "sampler = Sampler(backend = qr_backend)\n", "job = sampler.run([state_preparation_measure])\n", "\n", "from qiskit.result import QuasiDistribution\n", "result = job.result()\n", "pub_result = result[0]\n", "counts = pub_result.data.meas.get_counts()\n", "shots = 0\n", "for key, val in counts.items():\n", " shots += val\n", "quasi_dist = QuasiDistribution({outcome: freq / shots for outcome, freq in counts.items()})\n", "\n", "binary_probabilities = quasi_dist.binary_probabilities()" ] }, { "cell_type": "code", "execution_count": 17, "id": "25185c53-6b89-4619-8009-1400cf164590", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact Expected Loss: 0.6592\n", "Exact Operator Value: 0.3867\n", "Mapped Operator value: 0.6346\n" ] } ], "source": [ "# evaluate the result\n", "value = 0\n", "for i, prob in binary_probabilities.items():\n", " if prob > 1e-6 and i[-(len(qr_state) + 1) :][0] == \"1\":\n", " value += prob\n", "\n", "print(\"Exact Expected Loss: %.4f\" % expected_loss)\n", "print(\"Exact Operator Value: %.4f\" % value)\n", "print(\"Mapped Operator value: %.4f\" % objective.post_processing(value))" ] }, { "cell_type": "code", "execution_count": 18, "id": "d1067c98-f6f5-4f44-8ced-a40754b6e9fa", "metadata": {}, "outputs": [], "source": [ "# Example output\n", "\n", "# Exact Expected Loss: 0.6562\n", "# Exact Operator Value: 0.0000\n", "# Mapped Operator value: -2.3197" ] }, { "cell_type": "code", "execution_count": 19, "id": "b45b6004-e91a-424a-9bc3-a4f2ffec2b2f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact value: \t0.6592\n", "Estimated value:\t0.6517\n", "Confidence interval: \t[0.5830, 0.7204]\n" ] } ], "source": [ "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "problem = EstimationProblem(\n", " state_preparation=state_preparation,\n", " objective_qubits=[len(qr_state)],\n", " post_processing=objective.post_processing,\n", ")\n", "# construct amplitude estimation\n", "ae = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(backend = qr_backend, options={\"shots\": 100, \"seed\": 75})\n", ")\n", "result = ae.estimate(problem)\n", "\n", "# print results\n", "conf_int = np.array(result.confidence_interval_processed)\n", "print(\"Exact value: \\t%.4f\" % expected_loss)\n", "print(\"Estimated value:\\t%.4f\" % result.estimation_processed)\n", "print(\"Confidence interval: \\t[%.4f, %.4f]\" % tuple(conf_int))" ] }, { "cell_type": "code", "execution_count": 20, "id": "97a187a6-3ba1-4e09-9acc-9813af63db4d", "metadata": {}, "outputs": [], "source": [ "# Example output:\n", "\n", "# Exact value: \t0.6562\n", "# Estimated value:\t0.6592\n", "# Confidence interval: \t[0.5982, 0.7202]" ] }, { "cell_type": "code", "execution_count": 21, "id": "81933d68-67e1-4ae0-a5d1-df12c92e8331", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
         ┌──────────────┐\n",
       "state_0: ┤0             ├\n",
       "         │              │\n",
       "state_1: ┤1             ├\n",
       "         │  circuit-148 │\n",
       "compare: ┤2             ├\n",
       "         │              │\n",
       "    a17: ┤3             ├\n",
       "         └──────────────┘
" ], "text/plain": [ " ┌──────────────┐\n", "state_0: ┤0 ├\n", " │ │\n", "state_1: ┤1 ├\n", " │ circuit-148 │\n", "compare: ┤2 ├\n", " │ │\n", " a17: ┤3 ├\n", " └──────────────┘" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# set x value to estimate the CDF\n", "x_eval = 2\n", "\n", "comparator = IntegerComparator(agg.num_sum_qubits, x_eval + 1, geq=False)\n", "comparator.draw()" ] }, { "cell_type": "code", "execution_count": 22, "id": "a6358b35-7bdf-479d-acc2-868d84fb3c0c", "metadata": {}, "outputs": [], "source": [ "def get_cdf_circuit(x_eval):\n", " # define the registers for convenience and readability\n", " qr_state = QuantumRegister(u.num_qubits, \"state\")\n", " qr_sum = QuantumRegister(agg.num_sum_qubits, \"sum\")\n", " qr_carry = QuantumRegister(agg.num_carry_qubits, \"carry\")\n", " qr_obj = QuantumRegister(1, \"objective\")\n", " qr_compare = QuantumRegister(1, \"compare\")\n", "\n", " # define the circuit\n", " state_preparation = QuantumCircuit(qr_state, qr_obj, qr_sum, qr_carry, name=\"A\")\n", "\n", " # load the random variable\n", " state_preparation.append(u, qr_state)\n", "\n", " # aggregate\n", " state_preparation.append(agg, qr_state[:] + qr_sum[:] + qr_carry[:])\n", "\n", " # comparator objective function\n", " comparator = IntegerComparator(agg.num_sum_qubits, x_eval + 1, geq=False)\n", " state_preparation.append(comparator, qr_sum[:] + qr_obj[:] + qr_carry[:])\n", "\n", " # uncompute aggregation\n", " state_preparation.append(agg.inverse(), qr_state[:] + qr_sum[:] + qr_carry[:])\n", "\n", " return state_preparation\n", "\n", "\n", "state_preparation = get_cdf_circuit(x_eval)" ] }, { "cell_type": "code", "execution_count": 23, "id": "3e901ba0-5e81-41f3-99d8-b93ae8c0d084", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
           ┌───────┐┌────────┐        ┌───────────┐\n",
       "  state_0: ┤0      ├┤0       ├────────┤0          ├\n",
       "           │       ││        │        │           │\n",
       "  state_1: ┤1      ├┤1       ├────────┤1          ├\n",
       "           │  P(X) ││        │        │           │\n",
       "  state_2: ┤2      ├┤2       ├────────┤2          ├\n",
       "           │       ││        │        │           │\n",
       "  state_3: ┤3      ├┤3       ├────────┤3          ├\n",
       "           └───────┘│  adder │┌──────┐│  adder_dg │\n",
       "objective: ─────────┤        ├┤2     ├┤           ├\n",
       "                    │        ││      ││           │\n",
       "    sum_0: ─────────┤4       ├┤0     ├┤4          ├\n",
       "                    │        ││  cmp ││           │\n",
       "    sum_1: ─────────┤5       ├┤1     ├┤5          ├\n",
       "                    │        ││      ││           │\n",
       "    carry: ─────────┤6       ├┤3     ├┤6          ├\n",
       "                    └────────┘└──────┘└───────────┘
" ], "text/plain": [ " ┌───────┐┌────────┐ ┌───────────┐\n", " state_0: ┤0 ├┤0 ├────────┤0 ├\n", " │ ││ │ │ │\n", " state_1: ┤1 ├┤1 ├────────┤1 ├\n", " │ P(X) ││ │ │ │\n", " state_2: ┤2 ├┤2 ├────────┤2 ├\n", " │ ││ │ │ │\n", " state_3: ┤3 ├┤3 ├────────┤3 ├\n", " └───────┘│ adder │┌──────┐│ adder_dg │\n", "objective: ─────────┤ ├┤2 ├┤ ├\n", " │ ││ ││ │\n", " sum_0: ─────────┤4 ├┤0 ├┤4 ├\n", " │ ││ cmp ││ │\n", " sum_1: ─────────┤5 ├┤1 ├┤5 ├\n", " │ ││ ││ │\n", " carry: ─────────┤6 ├┤3 ├┤6 ├\n", " └────────┘└──────┘└───────────┘" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "state_preparation.draw()" ] }, { "cell_type": "code", "execution_count": 24, "id": "8deaaa33-4088-4bac-a556-8d7761d8316b", "metadata": {}, "outputs": [], "source": [ "state_preparation_measure = state_preparation.measure_all(inplace=False)\n", "sampler = Sampler(backend = qr_backend)\n", "job = sampler.run([state_preparation_measure])\n", "\n", "from qiskit.result import QuasiDistribution\n", "result = job.result()\n", "pub_result = result[0]\n", "counts = pub_result.data.meas.get_counts()\n", "shots = 0\n", "for key, val in counts.items():\n", " shots += val\n", "quasi_dist = QuasiDistribution({outcome: freq / shots for outcome, freq in counts.items()})\n", "\n", "binary_probabilities = quasi_dist.binary_probabilities()" ] }, { "cell_type": "code", "execution_count": 25, "id": "9c0a54e9-a23b-4b45-a9e3-3761ac02cf18", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Operator CDF(2) = 0.9668\n", "Exact CDF(2) = 0.9512\n" ] } ], "source": [ "# evaluate the result\n", "var_prob = 0\n", "for i, prob in binary_probabilities.items():\n", " if prob > 1e-6 and i[-(len(qr_state) + 1) :][0] == \"1\":\n", " var_prob += prob\n", "\n", "print(\"Operator CDF(%s)\" % x_eval + \" = %.4f\" % var_prob)\n", "print(\"Exact CDF(%s)\" % x_eval + \" = %.4f\" % cdf[x_eval])" ] }, { "cell_type": "code", "execution_count": 26, "id": "80bb90b4-413a-4985-b41d-0d1e95dff5a3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact value: \t0.9512\n", "Estimated value:\t0.9783\n", "Confidence interval: \t[0.9775, 0.9790]\n" ] } ], "source": [ "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "problem = EstimationProblem(state_preparation=state_preparation, objective_qubits=[len(qr_state)])\n", "# construct amplitude estimation\n", "ae_cdf = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(backend = qr_backend, options={\"shots\": 100, \"seed\": 75})\n", ")\n", "result_cdf = ae_cdf.estimate(problem)\n", "\n", "# print results\n", "conf_int = np.array(result_cdf.confidence_interval)\n", "print(\"Exact value: \\t%.4f\" % cdf[x_eval])\n", "print(\"Estimated value:\\t%.4f\" % result_cdf.estimation)\n", "print(\"Confidence interval: \\t[%.4f, %.4f]\" % tuple(conf_int))" ] }, { "cell_type": "code", "execution_count": 27, "id": "a52476a6-280b-40a8-adf8-fde3aa188498", "metadata": {}, "outputs": [], "source": [ "# Example output:\n", "\n", "# Exact value: \t0.9600\n", "# Estimated value:\t0.9581\n", "# Confidence interval: \t[0.9570, 0.9592]" ] }, { "cell_type": "code", "execution_count": 28, "id": "fd99ddcc-dd14-479e-ad17-db16d500f9fe", "metadata": {}, "outputs": [], "source": [ "def run_ae_for_cdf(x_eval, epsilon=0.01, alpha=0.05):\n", "\n", " # construct amplitude estimation\n", " state_preparation = get_cdf_circuit(x_eval)\n", " problem = EstimationProblem(\n", " state_preparation=state_preparation, objective_qubits=[len(qr_state)]\n", " )\n", " ae_var = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(backend = qr_backend, options={\"shots\": 100, \"seed\": 75})\n", " )\n", " result_var = ae_var.estimate(problem)\n", "\n", " return result_var.estimation" ] }, { "cell_type": "code", "execution_count": 29, "id": "fa19ad5e-3487-4991-9c3d-616cd30970f6", "metadata": {}, "outputs": [], "source": [ "def bisection_search(\n", " objective, target_value, low_level, high_level, low_value=None, high_value=None\n", "):\n", " \"\"\"\n", " Determines the smallest level such that the objective value is still larger than the target\n", " :param objective: objective function\n", " :param target: target value\n", " :param low_level: lowest level to be considered\n", " :param high_level: highest level to be considered\n", " :param low_value: value of lowest level (will be evaluated if set to None)\n", " :param high_value: value of highest level (will be evaluated if set to None)\n", " :return: dictionary with level, value, num_eval\n", " \"\"\"\n", "\n", " # check whether low and high values are given and evaluated them otherwise\n", " print(\"--------------------------------------------------------------------\")\n", " print(\"start bisection search for target value %.3f\" % target_value)\n", " print(\"--------------------------------------------------------------------\")\n", " num_eval = 0\n", " if low_value is None:\n", " low_value = objective(low_level)\n", " num_eval += 1\n", " if high_value is None:\n", " high_value = objective(high_level)\n", " num_eval += 1\n", "\n", " # check if low_value already satisfies the condition\n", " if low_value > target_value:\n", " return {\n", " \"level\": low_level,\n", " \"value\": low_value,\n", " \"num_eval\": num_eval,\n", " \"comment\": \"returned low value\",\n", " }\n", " elif low_value == target_value:\n", " return {\"level\": low_level, \"value\": low_value, \"num_eval\": num_eval, \"comment\": \"success\"}\n", "\n", " # check if high_value is above target\n", " if high_value < target_value:\n", " return {\n", " \"level\": high_level,\n", " \"value\": high_value,\n", " \"num_eval\": num_eval,\n", " \"comment\": \"returned low value\",\n", " }\n", " elif high_value == target_value:\n", " return {\n", " \"level\": high_level,\n", " \"value\": high_value,\n", " \"num_eval\": num_eval,\n", " \"comment\": \"success\",\n", " }\n", "\n", " # perform bisection search until\n", " print(\"low_level low_value level value high_level high_value\")\n", " print(\"--------------------------------------------------------------------\")\n", " while high_level - low_level > 1:\n", "\n", " level = int(np.round((high_level + low_level) / 2.0))\n", " num_eval += 1\n", " value = objective(level)\n", "\n", " print(\n", " \"%2d %.3f %2d %.3f %2d %.3f\"\n", " % (low_level, low_value, level, value, high_level, high_value)\n", " )\n", "\n", " if value >= target_value:\n", " high_level = level\n", " high_value = value\n", " else:\n", " low_level = level\n", " low_value = value\n", "\n", " # return high value after bisection search\n", " print(\"--------------------------------------------------------------------\")\n", " print(\"finished bisection search\")\n", " print(\"--------------------------------------------------------------------\")\n", " return {\"level\": high_level, \"value\": high_value, \"num_eval\": num_eval, \"comment\": \"success\"}" ] }, { "cell_type": "code", "execution_count": 30, "id": "c1933cc0-c5ab-4df7-aea5-24e7e123dd86", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--------------------------------------------------------------------\n", "start bisection search for target value 0.950\n", "--------------------------------------------------------------------\n", "low_level low_value level value high_level high_value\n", "--------------------------------------------------------------------\n", "-1 0.000 1 0.751 3 1.000\n", " 1 0.751 2 0.958 3 1.000\n", "--------------------------------------------------------------------\n", "finished bisection search\n", "--------------------------------------------------------------------\n" ] } ], "source": [ "# run bisection search to determine VaR\n", "objective = lambda x: run_ae_for_cdf(x)\n", "bisection_result = bisection_search(\n", " objective, 1 - alpha, min(losses) - 1, max(losses), low_value=0, high_value=1\n", ")\n", "var = bisection_result[\"level\"]" ] }, { "cell_type": "code", "execution_count": 31, "id": "2721d65b-624d-4610-88ac-634db3a8c8c1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimated Value at Risk: 2\n", "Exact Value at Risk: 2\n", "Estimated Probability: 0.958\n", "Exact Probability: 0.951\n" ] } ], "source": [ "print(\"Estimated Value at Risk: %2d\" % var)\n", "print(\"Exact Value at Risk: %2d\" % exact_var)\n", "print(\"Estimated Probability: %.3f\" % bisection_result[\"value\"])\n", "print(\"Exact Probability: %.3f\" % cdf[exact_var])" ] }, { "cell_type": "code", "execution_count": 32, "id": "1a334390-8df7-494c-baa1-9ab2905321b7", "metadata": {}, "outputs": [], "source": [ "# Example output:\n", "\n", "# Estimated Value at Risk: 2\n", "# Exact Value at Risk: 2\n", "# Estimated Probability: 0.960\n", "# Exact Probability: 0.960" ] }, { "cell_type": "code", "execution_count": 33, "id": "8729fb66-bdfc-42a1-9024-c9d2eb25c2d5", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_39140\\2011604251.py:9: DeprecationWarning: The class ``qiskit.circuit.library.arithmetic.linear_amplitude_function.LinearAmplitudeFunction`` is deprecated as of Qiskit 2.2. It will be removed in Qiskit 3.0. Use the class qiskit.circuit.library.LinearAmplitudeFunctionGate instead.\n", " cvar_objective = LinearAmplitudeFunction(\n" ] }, { "data": { "text/html": [ "
       ┌────┐\n",
       "q78_0: ┤0   ├\n",
       "       │    │\n",
       "q78_1: ┤1   ├\n",
       "       │    │\n",
       "  q79: ┤2 F ├\n",
       "       │    │\n",
       "a80_0: ┤3   ├\n",
       "       │    │\n",
       "a80_1: ┤4   ├\n",
       "       └────┘
" ], "text/plain": [ " ┌────┐\n", "q78_0: ┤0 ├\n", " │ │\n", "q78_1: ┤1 ├\n", " │ │\n", " q79: ┤2 F ├\n", " │ │\n", "a80_0: ┤3 ├\n", " │ │\n", "a80_1: ┤4 ├\n", " └────┘" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# define linear objective\n", "breakpoints = [0, var]\n", "slopes = [0, 1]\n", "offsets = [0, 0] # subtract VaR and add it later to the estimate\n", "f_min = 0\n", "f_max = 3 - var\n", "c_approx = 0.25\n", "\n", "cvar_objective = LinearAmplitudeFunction(\n", " agg.num_sum_qubits,\n", " slopes,\n", " offsets,\n", " domain=(0, 2**agg.num_sum_qubits - 1),\n", " image=(f_min, f_max),\n", " rescaling_factor=c_approx,\n", " breakpoints=breakpoints,\n", ")\n", "\n", "cvar_objective.draw()" ] }, { "cell_type": "code", "execution_count": 34, "id": "1a0d1e86-3190-4a2b-8bdf-e7594b169afb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# define the registers for convenience and readability\n", "qr_state = QuantumRegister(u.num_qubits, \"state\")\n", "qr_sum = QuantumRegister(agg.num_sum_qubits, \"sum\")\n", "qr_carry = QuantumRegister(agg.num_carry_qubits, \"carry\")\n", "qr_obj = QuantumRegister(1, \"objective\")\n", "qr_work = QuantumRegister(cvar_objective.num_ancillas - len(qr_carry), \"work\")\n", "\n", "# define the circuit\n", "state_preparation = QuantumCircuit(qr_state, qr_obj, qr_sum, qr_carry, qr_work, name=\"A\")\n", "\n", "# load the random variable\n", "state_preparation.append(u, qr_state)\n", "\n", "# aggregate\n", "state_preparation.append(agg, qr_state[:] + qr_sum[:] + qr_carry[:])\n", "\n", "# linear objective function\n", "state_preparation.append(cvar_objective, qr_sum[:] + qr_obj[:] + qr_carry[:] + qr_work[:])\n", "\n", "# uncompute aggregation\n", "state_preparation.append(agg.inverse(), qr_state[:] + qr_sum[:] + qr_carry[:])" ] }, { "cell_type": "code", "execution_count": 35, "id": "cba6a1be-4689-4d27-9ce2-3b5f32dd8d37", "metadata": {}, "outputs": [], "source": [ "state_preparation_measure = state_preparation.measure_all(inplace=False)\n", "sampler = Sampler(backend = qr_backend)\n", "job = sampler.run([state_preparation_measure])\n", "\n", "from qiskit.result import QuasiDistribution\n", "result = job.result()\n", "pub_result = result[0]\n", "counts = pub_result.data.meas.get_counts()\n", "shots = 0\n", "for key, val in counts.items():\n", " shots += val\n", "quasi_dist = QuasiDistribution({outcome: freq / shots for outcome, freq in counts.items()})\n", "\n", "binary_probabilities = quasi_dist.binary_probabilities()" ] }, { "cell_type": "code", "execution_count": 36, "id": "f7e0fb85-5581-47b0-a686-3b853777ab89", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimated CVaR: 4.0312\n", "Exact CVaR: 3.0000\n" ] } ], "source": [ "# evaluate the result\n", "value = 0\n", "for i, prob in binary_probabilities.items():\n", " if prob > 1e-6 and i[-(len(qr_state) + 1)] == \"1\":\n", " value += prob\n", "\n", "# normalize and add VaR to estimate\n", "value = cvar_objective.post_processing(value)\n", "d = 1.0 - bisection_result[\"value\"]\n", "v = value / d if d != 0 else 0\n", "normalized_value = v + var\n", "print(\"Estimated CVaR: %.4f\" % normalized_value)\n", "print(\"Exact CVaR: %.4f\" % exact_cvar)" ] }, { "cell_type": "code", "execution_count": 37, "id": "4388b83f-7693-42a8-8a38-84fb4a23f6a9", "metadata": {}, "outputs": [], "source": [ "# Example output:\n", "\n", "# Estimated CVaR: 2.1238\n", "# Exact CVaR: 3.0000" ] }, { "cell_type": "code", "execution_count": 38, "id": "dd33fe62-cceb-4bce-9200-179db229f97a", "metadata": {}, "outputs": [], "source": [ "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "problem = EstimationProblem(\n", " state_preparation=state_preparation,\n", " objective_qubits=[len(qr_state)],\n", " post_processing=cvar_objective.post_processing,\n", ")\n", "# construct amplitude estimation\n", "ae_cvar = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(backend = qr_backend, options={\"shots\": 100, \"seed\": 75})\n", ")\n", "result_cvar = ae_cvar.estimate(problem)" ] }, { "cell_type": "code", "execution_count": 39, "id": "fe644fc7-6582-4454-9dc4-19d853c80e4b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact CVaR: \t3.0000\n", "Estimated CVaR:\t3.1881\n" ] } ], "source": [ "# print results\n", "d = 1.0 - bisection_result[\"value\"]\n", "v = result_cvar.estimation_processed / d if d != 0 else 0\n", "print(\"Exact CVaR: \\t%.4f\" % exact_cvar)\n", "print(\"Estimated CVaR:\\t%.4f\" % (v + var))" ] }, { "cell_type": "code", "execution_count": 40, "id": "c9909365-9b53-4e72-9411-c3ff42003aad", "metadata": {}, "outputs": [], "source": [ "# Example output\n", "\n", "# Exact CVaR: \t3.0000\n", "# Estimated CVaR:\t3.2712" ] }, { "cell_type": "code", "execution_count": 41, "id": "765fcf72-b5f0-4682-977b-86e16fb88268", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit2.2.1
qiskit_algorithms0.4.0
qiskit_finance0.4.1
qiskit_aer0.17.1
qiskit_ibm_runtime0.40.1
System information
Python version3.12.9
OSWindows
Thu Oct 16 11:28:31 2025 Mountain Daylight Time
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Quantum Rings Version Information

SoftwareVersion
QuantumRingsLib0.11.0
quantumrings-toolkit-qiskit0.1.10
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of a Qiskit project

© Copyright IBM 2017, 2025.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

Modifications Copyright Quantum Rings Inc, 2025
Modified from the originals
Added support for Quantum Rings QrEstimatorV2 class.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%quantumrings_version_table\n", "%qiskit_copyright" ] } ], "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.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }