{ "cells": [ { "cell_type": "markdown", "id": "82982c82", "metadata": {}, "source": [ "# ExpressibilityV0" ] }, { "cell_type": "markdown", "id": "74658c21", "metadata": {}, "source": [ "![image](../images/expressibilityv0.png)" ] }, { "cell_type": "markdown", "id": "148cf54c", "metadata": {}, "source": [ "## Description\n", "\n", "The **ExpressibilityV0** environment simulates the task of building **parameterized quantum circuits** that achieve **high expressibility**. It is based on the `QuantumEnv` base class. In variational quantum algorithms (VQAs), the expressibility of an ansatz measures how well the circuit can explore the Hilbert space of possible quantum states.\n", "\n", "This environment challenges an agent to construct expressive circuits while balancing circuit depth\n", "and gate costs.\n", "\n", "At each step, the agent adds or removes blocks (rotation or entangling layers) or decides to terminate construction. The reward is based on how closely the circuit's fidelity distribution matches the Haar-random distribution (an idealized benchmark of maximum expressibility), penalized by circuit depth and two-qubit gate counts.\n", "\n", "The environment includes a rendering mode that animates:\n", "1. The evolving **fidelity distribution vs Haar distribution**, and \n", "2. The **block diagram** of the constructed circuit architecture. " ] }, { "cell_type": "markdown", "id": "8f6a8225", "metadata": {}, "source": [ "\n", "## Action Space\n", "\n", "The action space is a **Discrete(8)** space, where each action corresponds to a modification of\n", "the circuit architecture:\n", "\n", "| ID | Action | Description |\n", "|----|-----------------|-------------------------------------------------|\n", "| 0 | `RotX` | Add single-qubit RX rotations on all qubits |\n", "| 1 | `RotY` | Add single-qubit RY rotations on all qubits |\n", "| 2 | `RotZ` | Add single-qubit RZ rotations on all qubits |\n", "| 3 | `RotXYZ` | Add RX, RY, RZ rotations on all qubits |\n", "| 4 | `EntRingCNOT` | Add a ring of CNOT entanglers |\n", "| 5 | `EntLadderCZ` | Add ladder-style CZ entanglers |\n", "| 6 | `RemoveLast` | Remove the most recently added block |\n", "| 7 | `Terminate` | Stop circuit construction and end the episode |" ] }, { "cell_type": "markdown", "id": "78717a77", "metadata": {}, "source": [ "\n", "## Observation Space\n", "\n", "The observation is a **7-dimensional vector** summarizing circuit statistics:\n", "[depth, n_blocks, n_twoq, n_params, ent_density, last_express, steps_left]\n", "\n", "Where:\n", "- **`depth`**: Total circuit depth \n", "- **`n_blocks`**: Number of blocks in the circuit \n", "- **`n_twoq`**: Number of two-qubit gates \n", "- **`n_params`**: Number of trainable rotation parameters \n", "- **`ent_density`**: Entangling density relative to possible qubit connections \n", "- **`last_express`**: Last computed expressibility score \n", "- **`steps_left`**: Remaining steps before max_steps is reached " ] }, { "cell_type": "markdown", "id": "e3187aff", "metadata": {}, "source": [ "\n", "## Rewards\n", "\n", "The reward encourages high expressibility while penalizing excessive depth and two-qubit usage:\n", "\n", "$reward = - KL(P_C \\,\\|\\, P_{Haar}) \\;-\\; \\lambda_{depth}\\cdot depth \\;-\\; \\lambda_{2q}\\cdot n_{twoq}$\n", "\n", "Where:\n", "- **KL**: Kullback-Leibler divergence between circuit fidelity distribution `P_C`\n", "and Haar-random distribution `P_Haar`. \n", "- **λ_depth, λ_2q**: Regularization weights for penalizing large depth and two-qubit gates. \n", "- **Terminate bonus**: A small positive reward (`terminate_bonus`) is added if the agent terminates explicitly. \n", "\n", "Interpretation:\n", "- High reward = Circuit closely mimics Haar distribution, shallow, and efficient. \n", "- Low reward = Circuit deviates significantly from Haar distribution or becomes overly complex. " ] }, { "cell_type": "markdown", "id": "6b232068", "metadata": {}, "source": [ "\n", "## Starting State\n", "\n", "At the beginning of each episode:\n", "- The circuit is empty (`blocks = []`).\n", "- The observation corresponds to a circuit with zero depth, parameters, and entangling density.\n", "- The first reward is undefined until the agent applies at least one block." ] }, { "cell_type": "markdown", "id": "a3a653cb", "metadata": {}, "source": [ "\n", "## Episode End\n", "\n", "The episode ends under either condition:\n", "1. **Termination**: Agent selects `Terminate` action (ID=7). \n", "2. **Truncation**: Maximum number of steps (`max_steps`, default=20) is reached. " ] }, { "cell_type": "markdown", "id": "eb7521c6", "metadata": {}, "source": [ "## Rendering\n", "\n", "The rendering shows a **two-panel animation**:\n", "\n", "1. **Left panel**: \n", "- Histogram of circuit fidelity distribution vs. Haar-random distribution. \n", "- The closer the two curves overlap, the more expressive the circuit is. \n", "\n", "2. **Right panel**: \n", "- Block diagram of the constructed circuit architecture, showing the sequence of blocks. \n", "\n", "The figure title includes **reward and expressibility score** for the current step. \n", "The animation can be displayed interactively or saved as an MP4 file." ] }, { "cell_type": "markdown", "id": "39debd4f", "metadata": {}, "source": [ "## Arguments\n", "\n", "- **`n_qubits`** (`int`, default=4): Number of qubits. \n", "- **`max_blocks`** (`int`, default=12): Maximum number of blocks allowed in the circuit. \n", "- **`max_steps`** (`int`, default=20): Maximum steps per episode. \n", "- **`n_pairs_eval`** (`int`, default=120): Number of random state pairs used to evaluate expressibility. \n", "- **`bins`** (`int`, default=50): Number of histogram bins for fidelity distribution. \n", "- **`lambda_depth`** (`float`, default=0.002): Penalty weight for depth. \n", "- **`lambda_2q`** (`float`, default=0.002): Penalty weight for two-qubit gates. \n", "- **`terminate_bonus`** (`float`, default=0.1): Bonus reward for explicit termination. \n", "- **`device_name`** (`str`, default=\"default.qubit\"): PennyLane device backend. \n", "- **`seed`** (`int`, optional): Random seed for reproducibility. \n", "- **`allow_all_to_all`** (`bool`, default=False): Allow inclusion of all-to-all entangling ISWAP blocks.\n", "- **`ffmpeg`** (`bool`, default=False): If `True`, uses FFmpeg for saving animations; otherwise uses Pillow (GIF).\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "0f9dde69", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Episode return: -1.946745839339734\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAHyCAYAAACNj2+AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACCkElEQVR4nOzdd3xO5//H8fedSO4MGUYiCSGx9x61KRV7VavVGlVaq6VK0WFWjZZSNVpt0W9RqmhLa9YoStUqtbeqWSQSBMn5/XH/cnPLkESSE7yej8d5uM91rnPO55zccudzX+e6LothGIYAAAAAAECGczI7AAAAAAAAHlck5QAAAAAAmISkHAAAAAAAk5CUAwAAAABgEpJyAAAAAABMQlIOAAAAAIBJSMoBAAAAADAJSTkAAAAAACYhKQcAAAAAwCQk5QCANGexWDR06FCzw8AjoFOnTgoJCbGvHz9+XBaLRR999NF99x06dKgsFotDWUhIiDp16mRfX7t2rSwWi9auXZtGEQMAkDIk5QCQgWbOnCmLxWJfsmTJoty5c6tTp046ffq02eE9VE6fPq1nn31Wvr6+8vb2VosWLXT06NFk7RsbG6tp06apbNmyypo1q3LlyqVGjRpp06ZN8epu27ZNDRs2lLe3t7y8vNSgQQPt3LkzXr0VK1bo5ZdfVsmSJeXs7OyQSKZWp06dHN4vdy9ubm4PfHwkbM6cOZowYYLZYTi4cuWKXnnlFfn5+cnT01N169bV9u3bk73/p59+qmLFislqtSp37tzq27evoqKi4tU7c+aMXnnlFYWGhsrd3V0FChRQ37599d9//6X6mACApGUxOwAAeBwNHz5coaGhunHjhjZv3qyZM2dqw4YN2rNnD8lWMkRGRqpu3boKDw/X22+/LRcXF3388ceqXbu2du7cqRw5ciS5f//+/TV+/Hi9+OKL6tGjh65cuaLPPvtMtWvX1saNG1W5cmVJ0vbt21WjRg0FBwdryJAhio2N1ZQpU1S7dm398ccfKlKkiP2Yc+bM0bx581S+fHkFBQWl2bVarVZ98cUX8cqdnZ3T7ByZ2fTp0xUbG5uqfd99910NHDgwyTq1atXS9evX5erqai+bM2eO9uzZoz59+qTqvGktNjZWTZo00a5du9S/f3/lzJlTU6ZMUZ06dbRt2zYVKlQoyf0HDBigsWPHqk2bNurdu7f27t2rSZMm6e+//9by5cvt9SIjI1W1alVFRUWpR48eCg4O1q5du/Tpp59qzZo12rZtm5ycnFJ0TABAMhgAgAwzY8YMQ5KxdetWh/IBAwYYkox58+aZFFnKREZGJrldkjFkyJB0O/+YMWMMScYff/xhL9u3b5/h7OxsDBo0KMl9b926Zbi7uxtt2rRxKD969KghyXj99dftZY0bNzayZctmXLx40V7277//GlmzZjVat27tsP/p06eNmzdvGoZhGE2aNDHy5cuX2suz69ixo+Hp6fnAx0kLMTExxvXr180Owzh27Jghyfjwww9TtX++fPmMjh07JlknrX5+aWXevHmGJOO7776zl50/f97w9fU1nn/++ST3/ffff40sWbIY7du3dyifNGmSIcn48ccf7WWzZ882JBlLlixxqDt48GBDkrF9+/YUHxMAcH88vg4AmUDNmjUlSUeOHHEo379/v9q0aaPs2bPLzc1NFStW1I8//mjffuXKFTk7O+uTTz6xl128eFFOTk7KkSOHDMOwl3fv3l0BAQH29d9++03PPPOM8ubNK6vVquDgYL3xxhu6fv26QwydOnVS1qxZdeTIETVu3FheXl564YUXJEnR0dF644035OfnJy8vLzVv3lz//PNP2t2YRCxYsECVKlVSpUqV7GVFixZVvXr1NH/+/CT3vXXrlq5fv65cuXI5lPv7+8vJyUnu7u72st9++03169d3aHkPDAxU7dq1tWTJEkVGRtrLg4KC5OLi8qCXlmKGYahu3bry8/PT+fPn7eU3b95UqVKlVKBAAfsjxXF9rPfv369nn31W3t7eypEjh3r37q0bN244HNdisahXr16aPXu2SpQoIavVqmXLlkmydR3o3LmzcuXKJavVqhIlSuirr76KF9ukSZNUokQJeXh4KFu2bKpYsaLmzJlj33716lX16dNHISEhslqt8vf311NPPeXwWPa9fcrv9vHHHytfvnxyd3dX7dq1tWfPHoftCfUpv9e9fcrr1KmjpUuX6sSJE/auAiEhIYqMjJSnp6d69+4d7xj//POPnJ2dNWrUqCTPlVoLFixQrly51Lp1a3uZn5+fnn32Wf3www+Kjo5OdN/ff/9dt2/f1nPPPedQHrf+7bff2ssiIiIkKd7/jcDAQEmy/99IyTEBAPfH4+sAkAkcP35ckpQtWzZ72d9//63q1asrd+7c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JUl//vmnwsLClDNnTrm7uys0NFSdO3dO+UUi06GlHI+c8PBwXbx40aHMYrEoR44ckqR3331XP/30k15++WXt3r1bXl5eWr58uaZPn64RI0bESyRHjhwpi8WiAQMG6Pz585owYYLq16+vnTt3OnxL+99//6lRo0Z67rnn9OKLLypXrlyKjY1V8+bNtWHDBr3yyisqVqyYdu/erY8//lgHDx7U4sWLJUl///23mjZtqtKlS2v48OGyWq06fPiwNm7caD/+9OnT9frrr6tNmzbq3bu3bty4ob/++ktbtmxRu3btkrwnhw4dUtu2bdWtWzd17NhRM2bM0DPPPKNly5Y90LfArVu31sGDBzV37lx9/PHHypkzpyTJz89P7du3V9euXbVnzx6VLFnSvs/WrVt18OBBvfvuu0kee9OmTSpZsqTDY4SS1K1bNy1YsEC9evVS8eLF9d9//2nDhg3at2+fypcvr3feeUfh4eH6559/9PHHH0uSvaU6uT+POOvWrdO8efP0+uuvy2q1asqUKWrYsKH++OMPh2t6UD4+PipQoIA2btyoN954I82OCwCZwU8//aT8+fOrWrVqD3ScHj16yM/PT4MHD1ZUVJQkWxLXuXNnlShRQoMGDZKvr6927NihZcuW3fez8X5effVV/fvvv1q5cqX+97//JXu/LVu26PDhw5oxY4ZcXV3VunVrzZ49O94X7XGeeeYZFSpUSB988IEMw5AkDRs2TEOHDlW1atU0fPhwubq6asuWLfr111/VoEED+76HDx9WmzZt9PLLL6tjx4766quv1KlTJ1WoUEElSpRI8Hxp9Tl5vxgnTJig1157TVmzZtU777wjScqVK1ey7+PdDhw4oOeff16vvvqqunbtqiJFiujatWuqXbu2Tp8+rVdffVV58+bVpk2bNGjQIJ05cyZZfeZjYmLsfzPeunVL+/bts38hUb169ST3HTp0qIYNG6b69eure/fuOnDggKZOnaqtW7dq48aN9r9fVq5cqaZNmyowMFC9e/dWQECA9u3bpyVLljh8GXW3rVu3KiwsTBUrVtQPP/wgd3d3nT9/Xg0aNJCfn58GDhwoX19fHT9+PF4jCx5SBvCImDFjhiEpwcVqtTrU3b17t+Hq6mp06dLFuHz5spE7d26jYsWKxq1bt+x11qxZY0gycufObURERNjL58+fb0gyJk6caC+r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V1dXLVy4UJUqVVKzZs30xx9/2Lddvnw53j73/q2Ihxct5Xjk/PLLL9q/f3+88mrVqil//vzat2+f3nvvPXXq1EnNmjWTZJtSpWzZsurRo4fmz5/vsF/27NlVo0YNvfTSSzp37pwmTJigggULqmvXrveNpX379po/f766deumNWvWqHr16oqJidH+/fs1f/58+5ybw4cP1/r169WkSRPly5dP58+f15QpU5QnTx77nKUNGjRQQECAqlevrly5cmnfvn369NNP1aRJk/sOoFO4cGG9/PLL2rp1q3LlyqWvvvpK586d04wZM5J7WxMVNxDaO++8o+eee04uLi5q1qyZ/Q+ZcuXKqWTJkvbBY8qXL5+s47Zo0UIjRozQunXr7NO/XL16VXny5FGbNm1UpkwZZc2aVatWrdLWrVsd+n1VqFBB8+bNU9++fVWpUiVlzZpVzZo1S/bPI07JkiUVFhbmMCWapGR1F/jpp5/sc97funVLf/31l95//31JUvPmzR2etFi1apUMw1CLFi2SdW8A4GFSoEABzZkzR23btlWxYsXUoUMHlSxZUjdv3tSmTZv03XffJTiP+P14e3vr448/VpcuXVSpUiX7XN+7du3StWvX7Alely5dtGDBAjVs2FDPPvusjhw5om+++caeGCYl7jPu9ddfV1hYmJydnfXcc88lWHf27NnKkSNHol+wNm/eXNOnT9fSpUsTfDIvTsGCBfXOO+9oxIgRqlmzplq3bi2r1aqtW7cqKChIo0aNum/cybmuB/mcTG6MFSpU0NSpU/X++++rYMGC8vf315NPPqkGDRoob968evnll9W/f385Ozvrq6++kp+fn06ePJmsa+jfv79+/PFHNW3a1D4NXFRUlHbv3q0FCxbo+PHj9+0WFh4erm+++UaSbZC+uGnN3N3dNXDgwET38/Pz06BBgzRs2DA1bNhQzZs314EDBzRlyhRVqlTJ3gDh5OSkqVOnqlmzZipbtqxeeuklBQYGav/+/fr7778T/ELB3d1dS5Ys0ZNPPqlGjRpp3bp1KlmypGbNmqUpU6aoVatWKlCggK5evarp06fL29tbjRs3TtY9QyZmxpDvQHpIako0/f8UJ7dv3zYqVapk5MmTx7hy5YrD/hMnTjQkGfPmzTMM484UInPnzjUGDRpk+Pv7G+7u7kaTJk2MEydOOOxbu3btRKcru3nz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N5o2bZoKFSqk9evX68UXX5Sfn59q166d5PHbtm2rPXv2aNmyZVq1apUkWyt24cKFVatWLZ05c8b+2PmSJUt07do1tW3bNkXX4O7urm7duumNN97Q+fPn5e/v77D9zJkzev755zV27Fi1atVKV69e1W+//SbDMNSvXz/t27dPERERmjFjhiQpe/bsKTo/AABAUkxNyuvUqXPfPn2dO3dW586dMygiAEjc4cOHZRiGihYtmqr9+/Tpo9atW9vX33//fb355pvq3bu3vaxSpUqpOrarq6t8fHzsLeD3Ex4e7pC0Z82aVWfPno1Xb8KECRo0aJA97mnTpmn58uX27dHR0frggw+0atUqVa1aVZKUP39+bdiwQZ999tl9k/K4x+WzZMniEHe1atVUpEgR/e9//9Nbb70lSZoxY4aeeeaZVH3ZEPczO378eIJJ+e3bt9W6dWt796i4x9zjYoyOjk51VwEAAICkZNo+5QCQ2SR3YLDEVKxY0f76/Pnz+vfff+0Dw2U0Ly8vbd++3b7u5BS/N1N4eLjOnDmjKlWq2MuyZMmiihUr2u/F4cOHde3aNT311FMO+968eVPlypV7oBi7dOmizz//XG+99ZbOnTunX375Rb/++muqjhUXr8ViibetTJkyqlevnkqVKqWwsDA1aNBAbdq0SfeB+gAAACSScgBItkKFCslisdgHc0upux95v99AZ3FJ8t1fBNy6dStV503s+AULFnzg40RGRkqSli5dqty5cztse9BBNzt06KCBAwfq999/16ZNmxQaGqqaNWum6lj79u2TJIWEhMTb5uzsrJUrV2rTpk1asWKFJk2apHfeeUdbtmxRaGjog1wCAADAfWXaecoBILPJnj27wsLCNHnyZEVFRcXbnpL5wr28vBQSEqLVq1cnuN3Pz0+S7dHqOPebMszV1VUxMTHJjuF+fHx8FBgYqC1bttjLbt++rW3bttnXixcvLqvVqpMnT6pgwYIOS3Kno0ws7hw5cqhly5aaMWNGotO4Jcf169f1+eefq1atWvb7ei+LxaLq1atr2LBh2rFjh1xdXbVo0aIk4wMAAEgLtJQDQApMnjxZ1atXV+XKlTV8+HCVLl1at2/f1sqVKzV16lR7i2xyDB06VN26dZO/v78aNWqkq1evauPGjXrttdfk7u6uJ554QqNHj1ZoaKjOnz+vd999N8njhYSE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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from qrl.env import ExpressibilityV0\n", "\n", "# set ffmpeg=True if you have ffmpeg installed to save as mp4, or ffmpeg=False to save as gif\n", "env = ExpressibilityV0(n_qubits=3, n_pairs_eval=60, bins=40, seed=7,ffmpeg=False)\n", "obs, _ = env.reset()\n", "done = False\n", "total = 0\n", "while not done:\n", " action = env.action_space.sample()\n", " obs, reward, done, info = env.step(action)\n", " total += reward\n", "env.render(r'expressibilityV0')\n", "print(\"Episode return:\", total)" ] } ], "metadata": { "kernelspec": { "display_name": "qrl_env (3.12.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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }