{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Ensemble Optimization for Robust Pulses" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.419196Z", "start_time": "2020-03-22T05:01:27.400452Z" }, "attributes": { "classes": [], "id": "", "n": "1" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:11.117023Z", "iopub.status.busy": "2021-11-07T04:54:11.116687Z", "iopub.status.idle": "2021-11-07T04:54:12.444759Z", "shell.execute_reply": "2021-11-07T04:54:12.444360Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.8.1\n", "IPython version : 7.24.1\n", "\n", "numpy : 1.20.3\n", "scipy : 1.6.3\n", "matplotlib: 3.4.2\n", "qutip : 4.6.1\n", "sys : 3.8.1 (default, Aug 12 2020, 19:33:59) \n", "[GCC 8.3.0]\n", "krotov : 1.2.1+dev\n", "\n" ] } ], "source": [ "# NBVAL_IGNORE_OUTPUT\n", "%load_ext watermark\n", "import sys\n", "import os\n", "import qutip\n", "import numpy as np\n", "import scipy\n", "import matplotlib\n", "import matplotlib.pylab as plt\n", "import krotov\n", "from qutip import Qobj\n", "import pickle\n", "\n", "%watermark -v --iversions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\newcommand{tr}[0]{\\operatorname{tr}}\n", "\\newcommand{diag}[0]{\\operatorname{diag}}\n", "\\newcommand{abs}[0]{\\operatorname{abs}}\n", "\\newcommand{pop}[0]{\\operatorname{pop}}\n", "\\newcommand{aux}[0]{\\text{aux}}\n", "\\newcommand{opt}[0]{\\text{opt}}\n", "\\newcommand{tgt}[0]{\\text{tgt}}\n", "\\newcommand{init}[0]{\\text{init}}\n", "\\newcommand{lab}[0]{\\text{lab}}\n", "\\newcommand{rwa}[0]{\\text{rwa}}\n", "\\newcommand{bra}[1]{\\langle#1\\vert}\n", "\\newcommand{ket}[1]{\\vert#1\\rangle}\n", "\\newcommand{Bra}[1]{\\left\\langle#1\\right\\vert}\n", "\\newcommand{Ket}[1]{\\left\\vert#1\\right\\rangle}\n", "\\newcommand{Braket}[2]{\\left\\langle #1\\vphantom{#2}\\mid{#2}\\vphantom{#1}\\right\\rangle}\n", "\\newcommand{ketbra}[2]{\\vert#1\\rangle\\!\\langle#2\\vert}\n", "\\newcommand{op}[1]{\\hat{#1}}\n", "\\newcommand{Op}[1]{\\hat{#1}}\n", "\\newcommand{dd}[0]{\\,\\text{d}}\n", "\\newcommand{Liouville}[0]{\\mathcal{L}}\n", "\\newcommand{DynMap}[0]{\\mathcal{E}}\n", "\\newcommand{identity}[0]{\\mathbf{1}}\n", "\\newcommand{Norm}[1]{\\lVert#1\\rVert}\n", "\\newcommand{Abs}[1]{\\left\\vert#1\\right\\vert}\n", "\\newcommand{avg}[1]{\\langle#1\\rangle}\n", "\\newcommand{Avg}[1]{\\left\\langle#1\\right\\rangle}\n", "\\newcommand{AbsSq}[1]{\\left\\vert#1\\right\\vert^2}\n", "\\newcommand{Re}[0]{\\operatorname{Re}}\n", "\\newcommand{Im}[0]{\\operatorname{Im}}\n", "\\newcommand{toP}[0]{\\omega_{12}}\n", "\\newcommand{toS}[0]{\\omega_{23}}$\n", "\n", "This example revisits the [Optimization of a State-to-State Transfer in a\n", "Lambda System in the RWA](02_example_lambda_system_rwa_complex_pulse.ipynb),\n", "attempting to make the control pulses robustness with respect to variations in\n", "the pulse amplitude, through \"ensemble optimization\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note**: This notebook uses some parallelization features (`parallel_map`/`multiprocessing`). Unfortunately, on Windows (and macOS with Python >= 3.8), `multiprocessing` does not work correctly for functions defined in a Jupyter notebook (due to the [spawn method](https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods) being used on Windows, instead of Unix-`fork`, see also https://stackoverflow.com/questions/45719956). We can use the third-party [loky](https://loky.readthedocs.io/) library to fix this, but this significantly increases the overhead of multi-process parallelization. The use of parallelization here is for illustration only and makes no guarantee of actually improving the runtime of the optimization." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.426125Z", "start_time": "2020-03-22T05:01:29.421562Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.447159Z", "iopub.status.busy": "2021-11-07T04:54:12.446826Z", "iopub.status.idle": "2021-11-07T04:54:12.448649Z", "shell.execute_reply": "2021-11-07T04:54:12.448309Z" } }, "outputs": [], "source": [ "krotov.parallelization.set_parallelization(use_loky=True)\n", "from krotov.parallelization import parallel_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Control objectives for population transfer in the Lambda system\n", "\n", "As in the original example, we define the Hamiltonian for a Lambda system in\n", "the rotating wave approximation, like this:\n", "\n", "![Lambda system considered in this notebook](energylevels.png)\n", "\n", "We set up the control fields and the Hamiltonian exactly as before:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.441078Z", "start_time": "2020-03-22T05:01:29.429149Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.451933Z", "iopub.status.busy": "2021-11-07T04:54:12.451586Z", "iopub.status.idle": "2021-11-07T04:54:12.453312Z", "shell.execute_reply": "2021-11-07T04:54:12.452971Z" } }, "outputs": [], "source": [ "def Omega_P1(t, args):\n", " \"\"\"Guess for the real part of the pump pulse\"\"\"\n", " Ω0 = 5.0\n", " return Ω0 * krotov.shapes.blackman(t, t_start=2.0, t_stop=5.0)\n", "\n", "\n", "def Omega_P2(t, args):\n", " \"\"\"Guess for the imaginary part of the pump pulse\"\"\"\n", " return 0.0\n", "\n", "\n", "def Omega_S1(t, args):\n", " \"\"\"Guess for the real part of the Stokes pulse\"\"\"\n", " Ω0 = 5.0\n", " return Ω0 * krotov.shapes.blackman(t, t_start=0.0, t_stop=3.0)\n", "\n", "\n", "def Omega_S2(t, args):\n", " \"\"\"Guess for the imaginary part of the Stokes pulse\"\"\"\n", " return 0.0" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.448554Z", "start_time": "2020-03-22T05:01:29.443630Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.455638Z", "iopub.status.busy": "2021-11-07T04:54:12.455305Z", "iopub.status.idle": "2021-11-07T04:54:12.457009Z", "shell.execute_reply": "2021-11-07T04:54:12.456679Z" } }, "outputs": [], "source": [ "tlist = np.linspace(0, 5, 500)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.467163Z", "start_time": "2020-03-22T05:01:29.452425Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.461207Z", "iopub.status.busy": "2021-11-07T04:54:12.460866Z", "iopub.status.idle": "2021-11-07T04:54:12.462595Z", "shell.execute_reply": "2021-11-07T04:54:12.462251Z" } }, "outputs": [], "source": [ "def hamiltonian(E1=0.0, E2=10.0, E3=5.0, omega_P=9.5, omega_S=4.5):\n", " \"\"\"Lambda-system Hamiltonian in the RWA\"\"\"\n", "\n", " # detunings\n", " ΔP = E1 + omega_P - E2\n", " ΔS = E3 + omega_S - E2\n", "\n", " H0 = Qobj([[ΔP, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, ΔS]])\n", "\n", " HP_re = -0.5 * Qobj([[0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 0.0]])\n", " HP_im = -0.5 * Qobj([[0.0, 1.0j, 0.0], [-1.0j, 0.0, 0.0], [0.0, 0.0, 0.0]])\n", "\n", " HS_re = -0.5 * Qobj([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]])\n", " HS_im = -0.5 * Qobj([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0j], [0.0, -1.0j, 0.0]])\n", "\n", " return [\n", " H0,\n", " [HP_re, Omega_P1],\n", " [HP_im, Omega_P2],\n", " [HS_re, Omega_S1],\n", " [HS_im, Omega_S2],\n", " ]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.480174Z", "start_time": "2020-03-22T05:01:29.470251Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.466108Z", "iopub.status.busy": "2021-11-07T04:54:12.465774Z", "iopub.status.idle": "2021-11-07T04:54:12.467380Z", "shell.execute_reply": "2021-11-07T04:54:12.467045Z" } }, "outputs": [], "source": [ "H = hamiltonian()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The control objective is the realization of a phase sensitive $\\ket{1}\n", "\\rightarrow \\ket{3}$ transition in the lab frame. Thus, in the rotating frame,\n", "we must take into account an additional phase factor." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.492615Z", "start_time": "2020-03-22T05:01:29.482710Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.470618Z", "iopub.status.busy": "2021-11-07T04:54:12.470279Z", "iopub.status.idle": "2021-11-07T04:54:12.472044Z", "shell.execute_reply": "2021-11-07T04:54:12.471709Z" } }, "outputs": [], "source": [ "ket1 = qutip.Qobj(np.array([1.0, 0.0, 0.0]))\n", "ket2 = qutip.Qobj(np.array([0.0, 1.0, 0.0]))\n", "ket3 = qutip.Qobj(np.array([0.0, 0.0, 1.0]))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.502476Z", "start_time": "2020-03-22T05:01:29.497857Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.474293Z", "iopub.status.busy": "2021-11-07T04:54:12.473956Z", "iopub.status.idle": "2021-11-07T04:54:12.475618Z", "shell.execute_reply": "2021-11-07T04:54:12.475283Z" } }, "outputs": [], "source": [ "def rwa_target_state(ket3, E2=10.0, omega_S=4.5, T=5):\n", " return np.exp(1j * (E2 - omega_S) * T) * ket3" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.511580Z", "start_time": "2020-03-22T05:01:29.505632Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.477716Z", "iopub.status.busy": "2021-11-07T04:54:12.477385Z", "iopub.status.idle": "2021-11-07T04:54:12.479126Z", "shell.execute_reply": "2021-11-07T04:54:12.478787Z" } }, "outputs": [], "source": [ "psi_target = rwa_target_state(ket3)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.523688Z", "start_time": "2020-03-22T05:01:29.514140Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.482993Z", "iopub.status.busy": "2021-11-07T04:54:12.482656Z", "iopub.status.idle": "2021-11-07T04:54:12.484470Z", "shell.execute_reply": "2021-11-07T04:54:12.484733Z" } }, "outputs": [ { "data": { "text/plain": [ "[Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₁[3,3], u₁(t)], [H₂[3,3], u₂(t)], [H₃[3,3], u₃(t)], [H₄[3,3], u₄(t)]]]]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "objective = krotov.Objective(initial_state=ket1, target=psi_target, H=H)\n", "objectives = [objective]\n", "objectives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Robustness to amplitude fluctuations\n", "\n", "A potential source of error is fluctuations in the pulse amplitude between\n", "different runs of the experiment. To account for this, the `hamiltonian`\n", "function above include a parameter `mu` that scales the pulse amplitudes by the\n", "given factor.\n", "\n", "We can analyze the result of the [Optimization of a State-to-State Transfer in\n", "a Lambda System in the RWA](02_example_lambda_system_rwa_complex_pulse.ipynb)\n", "with respect to such fluctuations. We load the earlier optimization result from\n", "disk, and verify that the optimized controls produce the $\\ket{1} \\rightarrow\n", "\\ket{3}$ transition as desired." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.532018Z", "start_time": "2020-03-22T05:01:29.525825Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.486819Z", "iopub.status.busy": "2021-11-07T04:54:12.486473Z", "iopub.status.idle": "2021-11-07T04:54:12.493136Z", "shell.execute_reply": "2021-11-07T04:54:12.492833Z" } }, "outputs": [], "source": [ "opt_result_unperturbed = krotov.result.Result.load(\n", " 'lambda_rwa_opt_result.dump', objectives=[objective]\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.540217Z", "start_time": "2020-03-22T05:01:29.534230Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.496043Z", "iopub.status.busy": "2021-11-07T04:54:12.495707Z", "iopub.status.idle": "2021-11-07T04:54:12.497413Z", "shell.execute_reply": "2021-11-07T04:54:12.497074Z" } }, "outputs": [], "source": [ "proj1 = qutip.ket2dm(ket1)\n", "proj2 = qutip.ket2dm(ket2)\n", "proj3 = qutip.ket2dm(ket3)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.860337Z", "start_time": "2020-03-22T05:01:29.542275Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.500483Z", "iopub.status.busy": "2021-11-07T04:54:12.500147Z", "iopub.status.idle": "2021-11-07T04:54:12.539732Z", "shell.execute_reply": "2021-11-07T04:54:12.539481Z" } }, "outputs": [], "source": [ "opt_unperturbed_dynamics = (\n", " opt_result_unperturbed\n", " .optimized_objectives[0]\n", " .mesolve(tlist, e_ops=[proj1, proj2, proj3])\n", ")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:29.874858Z", "start_time": "2020-03-22T05:01:29.862369Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.542406Z", "iopub.status.busy": "2021-11-07T04:54:12.542105Z", "iopub.status.idle": "2021-11-07T04:54:12.543791Z", "shell.execute_reply": "2021-11-07T04:54:12.543488Z" } }, "outputs": [], "source": [ "def plot_population(result):\n", " fig, ax = plt.subplots()\n", " ax.plot(result.times, result.expect[0], label='1')\n", " ax.plot(result.times, result.expect[1], label='2')\n", " ax.plot(result.times, result.expect[2], label='3')\n", " ax.legend()\n", " ax.set_xlabel('time')\n", " ax.set_ylabel('population')\n", " plt.show(fig)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:30.119626Z", "start_time": "2020-03-22T05:01:29.879489Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.553288Z", "iopub.status.busy": "2021-11-07T04:54:12.552988Z", "iopub.status.idle": "2021-11-07T04:54:12.673653Z", "shell.execute_reply": "2021-11-07T04:54:12.673349Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_population(opt_unperturbed_dynamics)" ] }, { "cell_type": "markdown", "metadata": { "lines_to_next_cell": 2 }, "source": [ "Now we can analyze how robust this control is for variations of ±20% of the\n", "pulse amplitude. Numerically, this is achieved by scaling the control\n", "Hamiltonians with a pre-factor $\\mu$.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:30.128652Z", "start_time": "2020-03-22T05:01:30.122273Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.676316Z", "iopub.status.busy": "2021-11-07T04:54:12.676019Z", "iopub.status.idle": "2021-11-07T04:54:12.677654Z", "shell.execute_reply": "2021-11-07T04:54:12.677355Z" } }, "outputs": [], "source": [ "def scale_control(H, *, mu):\n", " \"\"\"Scale all control Hamiltonians by `mu`.\"\"\"\n", " H_scaled = []\n", " for spec in H:\n", " if isinstance(spec, list):\n", " H_scaled.append([mu * spec[0], spec[1]])\n", " else:\n", " H_scaled.append(spec)\n", " return H_scaled" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the analysis, we take the following sample of $\\mu$ values:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:30.138078Z", "start_time": "2020-03-22T05:01:30.131210Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.679744Z", "iopub.status.busy": "2021-11-07T04:54:12.679452Z", "iopub.status.idle": "2021-11-07T04:54:12.681092Z", "shell.execute_reply": "2021-11-07T04:54:12.680794Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "mu_vals = np.linspace(0.75, 1.25, 33)" ] }, { "cell_type": "markdown", "metadata": { "lines_to_next_cell": 2 }, "source": [ "We measure the success of the transfer via the \"population error\", i.e., the\n", "deviation from 1.0 of the population in state $\\ket{3}$ at final time $T$.\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:30.153375Z", "start_time": "2020-03-22T05:01:30.144877Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.683373Z", "iopub.status.busy": "2021-11-07T04:54:12.683078Z", "iopub.status.idle": "2021-11-07T04:54:12.684641Z", "shell.execute_reply": "2021-11-07T04:54:12.684342Z" } }, "outputs": [], "source": [ "def pop_error(obj, mu):\n", " res = obj.mesolve(tlist, H=scale_control(obj.H, mu=mu), e_ops=[proj3])\n", " return 1 - res.expect[0][-1]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:40.680753Z", "start_time": "2020-03-22T05:01:30.156668Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:12.688567Z", "iopub.status.busy": "2021-11-07T04:54:12.688269Z", "iopub.status.idle": "2021-11-07T04:54:16.209853Z", "shell.execute_reply": "2021-11-07T04:54:16.209324Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "def _f(mu):\n", " # parallel_map needs a global function\n", " return pop_error(opt_result_unperturbed.optimized_objectives[0], mu=mu)\n", "\n", "\n", "pop_errors_norobust = parallel_map(_f, mu_vals)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:40.693446Z", "start_time": "2020-03-22T05:01:40.684478Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.216205Z", "iopub.status.busy": "2021-11-07T04:54:16.215690Z", "iopub.status.idle": "2021-11-07T04:54:16.218050Z", "shell.execute_reply": "2021-11-07T04:54:16.218621Z" } }, "outputs": [], "source": [ "def plot_robustness(mu_vals, pop_errors, pop_errors0=None):\n", " fig, ax = plt.subplots()\n", " ax.plot(mu_vals, pop_errors, label='1')\n", " if pop_errors0 is not None:\n", " ax.set_prop_cycle(None) # reset colors\n", " if isinstance(pop_errors0, list):\n", " for (i, pop_errors_prev) in enumerate(pop_errors0):\n", " ax.plot(\n", " mu_vals, pop_errors_prev, ls='dotted', label=(\"%d\" % (-i))\n", " )\n", " else:\n", " ax.plot(mu_vals, pop_errors0, ls='dotted', label='0')\n", " ax.set_xlabel(\"relative coupling strength\")\n", " ax.set_ylabel(r\"$1 - \\vert \\langle \\Psi \\vert 3 \\rangle \\vert^2$\")\n", " ax.axvspan(0.9, 1.1, alpha=0.25, color='red')\n", " ax.set_yscale('log')\n", " if pop_errors0 is not None:\n", " ax.legend()\n", " plt.show(fig)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.453727Z", "start_time": "2020-03-22T05:01:40.696343Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.221152Z", "iopub.status.busy": "2021-11-07T04:54:16.220338Z", "iopub.status.idle": "2021-11-07T04:54:16.889177Z", "shell.execute_reply": "2021-11-07T04:54:16.888861Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_robustness(mu_vals, pop_errors_norobust)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plot shows that as the pulse amplitude deviates from the optimal value, the\n", "error rises quickly: our previous optimization result is not robust.\n", "\n", "The highlighted region of ±10% is our \"region of interest\" within\n", "which we would like the control to be robust by applying optimal control." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting the ensemble objectives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "They central idea of optimizing for robustness is to take multiple copies of\n", "the Hamiltonian, sampling over the space of variations to which would\n", "like to be robust, and optimize over the average of this ensemble.\n", "\n", "Here, we sample 5 values of $\\mu$ (including the unperturbed $\\mu=1$) in the\n", "region of interest, $\\mu \\in [0.9, 1.1]$." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.462459Z", "start_time": "2020-03-22T05:01:41.456749Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.890847Z", "iopub.status.busy": "2021-11-07T04:54:16.890495Z", "iopub.status.idle": "2021-11-07T04:54:16.892671Z", "shell.execute_reply": "2021-11-07T04:54:16.892906Z" } }, "outputs": [], "source": [ "ensemble_mu = [0.9, 0.95, 1.0, 1.05, 1.1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The corresponding Hamiltonians are" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.487262Z", "start_time": "2020-03-22T05:01:41.474312Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.895871Z", "iopub.status.busy": "2021-11-07T04:54:16.895580Z", "iopub.status.idle": "2021-11-07T04:54:16.896806Z", "shell.execute_reply": "2021-11-07T04:54:16.897032Z" } }, "outputs": [], "source": [ "ham_ensemble = [scale_control(objective.H, mu=mu) for mu in ensemble_mu]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `krotov.objectives.ensemble_objectives` extends the original objective of a\n", "single unperturbed state-to-state transition with one additional objective for\n", "each ensemble Hamiltonian for $\\mu \\neq 1$:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.504002Z", "start_time": "2020-03-22T05:01:41.492908Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.900210Z", "iopub.status.busy": "2021-11-07T04:54:16.899803Z", "iopub.status.idle": "2021-11-07T04:54:16.901982Z", "shell.execute_reply": "2021-11-07T04:54:16.901685Z" } }, "outputs": [ { "data": { "text/plain": [ "[Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₅[3,3], u₁(t)], [H₆[3,3], u₂(t)], [H₇[3,3], u₃(t)], [H₈[3,3], u₄(t)]]],\n", " Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₉[3,3], u₁(t)], [H₁₀[3,3], u₂(t)], [H₁₁[3,3], u₃(t)], [H₁₂[3,3], u₄(t)]]],\n", " Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₁₃[3,3], u₁(t)], [H₁₄[3,3], u₂(t)], [H₁₅[3,3], u₃(t)], [H₁₆[3,3], u₄(t)]]],\n", " Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₁₇[3,3], u₁(t)], [H₁₈[3,3], u₂(t)], [H₁₉[3,3], u₃(t)], [H₂₀[3,3], u₄(t)]]],\n", " Objective[|Ψ₀(3)⟩ to |Ψ₁(3)⟩ via [H₀[3,3], [H₂₁[3,3], u₁(t)], [H₂₂[3,3], u₂(t)], [H₂₃[3,3], u₃(t)], [H₂₄[3,3], u₄(t)]]]]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ensemble_objectives = krotov.objectives.ensemble_objectives(\n", " objectives, ham_ensemble, keep_original_objectives=False,\n", ")\n", "ensemble_objectives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is important that all five objectives reference the same four control\n", "pulses, as is the case here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the same update shape $S(t)$ and $\\lambda_a$ value as in the original optimization:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.515808Z", "start_time": "2020-03-22T05:01:41.506536Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.904901Z", "iopub.status.busy": "2021-11-07T04:54:16.904616Z", "iopub.status.idle": "2021-11-07T04:54:16.906339Z", "shell.execute_reply": "2021-11-07T04:54:16.906048Z" } }, "outputs": [], "source": [ "def S(t):\n", " \"\"\"Scales the Krotov methods update of the pulse value at the time t\"\"\"\n", " return krotov.shapes.flattop(t, 0.0, 5, 0.3, func='sinsq')\n", "\n", "\n", "λ = 0.5\n", "\n", "pulse_options = {\n", " H[1][1]: dict(lambda_a=λ, update_shape=S),\n", " H[2][1]: dict(lambda_a=λ, update_shape=S),\n", " H[3][1]: dict(lambda_a=λ, update_shape=S),\n", " H[4][1]: dict(lambda_a=λ, update_shape=S),\n", "}" ] }, { "cell_type": "markdown", "metadata": { "lines_to_next_cell": 2 }, "source": [ "It will be interesting to see how the optimization progresses for each\n", "individual element of the ensemble. Thus, we write an `info_hook` routine that\n", "prints out a tabular overview of $1 - \\Re\\Braket{\\Psi(T)}{3}_{\\Op{H}_i}$ for\n", "all $\\Op{H}_i$ in the ensemble, as well as their average (the total functional\n", "$J_T$ that is being minimized)\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.526072Z", "start_time": "2020-03-22T05:01:41.518139Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.909348Z", "iopub.status.busy": "2021-11-07T04:54:16.909055Z", "iopub.status.idle": "2021-11-07T04:54:16.910802Z", "shell.execute_reply": "2021-11-07T04:54:16.910444Z" } }, "outputs": [], "source": [ "def print_J_T_per_target(**kwargs):\n", " iteration = kwargs['iteration']\n", " N = len(ensemble_mu)\n", " if iteration == 0:\n", " print(\n", " \"iteration \"\n", " + \"%11s \" % \"J_T(avg)\"\n", " + \" \".join([(\"J_T(μ=%.2f)\" % μ) for μ in ensemble_mu])\n", " )\n", " J_T_vals = 1 - kwargs['tau_vals'].real\n", " J_T = np.sum(J_T_vals) / N\n", " print(\n", " (\"%9d \" % iteration)\n", " + (\"%11.2e \" % J_T)\n", " + \" \".join([(\"%11.2e\" % v) for v in J_T_vals])\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll also want to look at the output of ``krotov.info_hooks.print_table``, but\n", "in order to keep the output orderly, we will write that information to a file\n", "`ensemble_opt.log`." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:01:41.534779Z", "start_time": "2020-03-22T05:01:41.528504Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.912816Z", "iopub.status.busy": "2021-11-07T04:54:16.912434Z", "iopub.status.idle": "2021-11-07T04:54:16.916220Z", "shell.execute_reply": "2021-11-07T04:54:16.915927Z" } }, "outputs": [], "source": [ "log_fh = open(\"ensemble_opt.log\", \"w\", encoding=\"utf-8\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To speed up the optimization slightly, we parallelize across the five\n", "objectives with appropriate `parallel_map` functions.\n", "The optimization starts for the same guess pulses as the original [Optimization\n", "of a State-to-State Transfer in a Lambda System in the\n", "RWA](02_example_lambda_system_rwa_complex_pulse.ipynb). Generally, for a\n", "robustness ensemble optimization, this will yield better results than trying to\n", "take the optimized pulses for the unperturbed system as a guess.\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:03.283073Z", "start_time": "2020-03-22T05:01:41.538943Z" }, "attributes": { "classes": [], "id": "", "n": "16" }, "execution": { "iopub.execute_input": "2021-11-07T04:54:16.919723Z", "iopub.status.busy": "2021-11-07T04:54:16.919041Z", "iopub.status.idle": "2021-11-07T04:56:17.800380Z", "shell.execute_reply": "2021-11-07T04:56:17.800811Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration J_T(avg) J_T(μ=0.90) J_T(μ=0.95) J_T(μ=1.00) J_T(μ=1.05) J_T(μ=1.10)\n", " 0 1.01e+00 1.01e+00 1.01e+00 1.01e+00 1.01e+00 1.01e+00\n", " 1 6.79e-01 6.94e-01 6.83e-01 6.75e-01 6.71e-01 6.71e-01\n", " 2 4.14e-01 4.40e-01 4.20e-01 4.07e-01 4.00e-01 4.00e-01\n", " 3 2.36e-01 2.68e-01 2.43e-01 2.27e-01 2.20e-01 2.23e-01\n", " 4 1.32e-01 1.63e-01 1.37e-01 1.21e-01 1.16e-01 1.22e-01\n", " 5 7.46e-02 1.04e-01 7.78e-02 6.29e-02 5.98e-02 6.86e-02\n", " 6 4.46e-02 7.13e-02 4.58e-02 3.23e-02 3.12e-02 4.26e-02\n", " 7 2.92e-02 5.32e-02 2.88e-02 1.66e-02 1.72e-02 3.04e-02\n", " 8 2.14e-02 4.32e-02 1.96e-02 8.59e-03 1.04e-02 2.50e-02\n", " 9 1.73e-02 3.74e-02 1.46e-02 4.48e-03 7.25e-03 2.28e-02\n", " 10 1.52e-02 3.41e-02 1.19e-02 2.37e-03 5.83e-03 2.21e-02\n", " 11 1.42e-02 3.20e-02 1.03e-02 1.29e-03 5.23e-03 2.20e-02\n", " 12 1.36e-02 3.07e-02 9.36e-03 7.19e-04 5.00e-03 2.20e-02\n" ] } ], "source": [ "opt_result = krotov.optimize_pulses(\n", " ensemble_objectives,\n", " pulse_options,\n", " tlist,\n", " propagator=krotov.propagators.expm,\n", " chi_constructor=krotov.functionals.chis_re,\n", " info_hook=krotov.info_hooks.chain(\n", " print_J_T_per_target,\n", " krotov.info_hooks.print_table(\n", " J_T=krotov.functionals.J_T_re, out=log_fh\n", " ),\n", " ),\n", " check_convergence=krotov.convergence.Or(\n", " krotov.convergence.value_below(1e-3, name='J_T'),\n", " krotov.convergence.check_monotonic_error,\n", " ),\n", " parallel_map=(\n", " krotov.parallelization.parallel_map,\n", " krotov.parallelization.parallel_map,\n", " krotov.parallelization.parallel_map_fw_prop_step,\n", " ),\n", " iter_stop=12,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After twelve iterations (which were sufficient to produce an error $<10^{-3}$\n", "in the original optimization), we find the average error over the ensemble to\n", "be still above $>10^{-2}$. However, the error for $\\mu = 1$ is only *slightly*\n", "larger than in the original optimization; the lack of success is entirely due\n", "to the large error for the other elements of the ensemble for $\\mu \\neq 1$.\n", "Achieving robustness is hard!\n", "\n", "We continue the optimization until the *average* error falls below $10^{-3}$:\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:03.339376Z", "start_time": "2020-03-22T05:06:03.287117Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:17.808595Z", "iopub.status.busy": "2021-11-07T04:56:17.808038Z", "iopub.status.idle": "2021-11-07T04:56:17.819064Z", "shell.execute_reply": "2021-11-07T04:56:17.818595Z" }, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration J_T(avg) J_T(μ=0.90) J_T(μ=0.95) J_T(μ=1.00) J_T(μ=1.05) J_T(μ=1.10)\n", " 0 1.36e-02 3.07e-02 9.37e-03 7.20e-04 5.00e-03 2.20e-02\n", " ...\n", " 670 1.05e-03 2.80e-03 4.83e-04 1.10e-04 5.22e-04 1.34e-03\n", " 671 1.05e-03 2.79e-03 4.79e-04 1.10e-04 5.20e-04 1.33e-03\n", " 672 1.04e-03 2.77e-03 4.76e-04 1.10e-04 5.17e-04 1.33e-03\n", " 673 1.03e-03 2.76e-03 4.73e-04 1.11e-04 5.14e-04 1.32e-03\n", " 674 1.03e-03 2.74e-03 4.70e-04 1.11e-04 5.11e-04 1.31e-03\n", " 675 1.02e-03 2.72e-03 4.66e-04 1.11e-04 5.08e-04 1.30e-03\n", " 676 1.02e-03 2.71e-03 4.63e-04 1.12e-04 5.06e-04 1.29e-03\n", " 677 1.01e-03 2.69e-03 4.60e-04 1.12e-04 5.03e-04 1.28e-03\n", " 678 1.00e-03 2.68e-03 4.57e-04 1.12e-04 5.00e-04 1.27e-03\n", " 679 9.99e-04 2.67e-03 4.54e-04 1.13e-04 4.98e-04 1.27e-03\n" ] } ], "source": [ "dumpfile = \"./ensemble_opt_result.dump\"\n", "if os.path.isfile(dumpfile):\n", " opt_result = krotov.result.Result.load(dumpfile, objectives)\n", " print_J_T_per_target(iteration=0, tau_vals=opt_result.tau_vals[12])\n", " print(\" ...\")\n", " n_iters = len(opt_result.tau_vals)\n", " for i in range(n_iters - 10, n_iters):\n", " print_J_T_per_target(iteration=i, tau_vals=opt_result.tau_vals[i])\n", "else:\n", " opt_result = krotov.optimize_pulses(\n", " ensemble_objectives,\n", " pulse_options,\n", " tlist,\n", " propagator=krotov.propagators.expm,\n", " chi_constructor=krotov.functionals.chis_re,\n", " info_hook=krotov.info_hooks.chain(\n", " print_J_T_per_target,\n", " krotov.info_hooks.print_table(\n", " J_T=krotov.functionals.J_T_re, out=log_fh\n", " ),\n", " ),\n", " check_convergence=krotov.convergence.Or(\n", " krotov.convergence.value_below(1e-3, name='J_T'),\n", " krotov.convergence.check_monotonic_error,\n", " ),\n", " parallel_map=(\n", " krotov.parallelization.parallel_map,\n", " krotov.parallelization.parallel_map,\n", " krotov.parallelization.parallel_map_fw_prop_step,\n", " ),\n", " iter_stop=1000,\n", " continue_from=opt_result,\n", " )\n", " opt_result.dump(dumpfile)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:03.357680Z", "start_time": "2020-03-22T05:06:03.349278Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:17.823557Z", "iopub.status.busy": "2021-11-07T04:56:17.823052Z", "iopub.status.idle": "2021-11-07T04:56:17.825930Z", "shell.execute_reply": "2021-11-07T04:56:17.826320Z" } }, "outputs": [ { "data": { "text/plain": [ "Krotov Optimization Result\n", "--------------------------\n", "- Started at 2019-12-14 07:18:32\n", "- Number of objectives: 1\n", "- Number of iterations: 679\n", "- Reason for termination: Reached convergence: J_T < 0.001\n", "- Ended at 2019-12-14 09:49:45 (2:31:13)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "opt_result" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:03.366547Z", "start_time": "2020-03-22T05:06:03.360976Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:17.829154Z", "iopub.status.busy": "2021-11-07T04:56:17.828687Z", "iopub.status.idle": "2021-11-07T04:56:17.831731Z", "shell.execute_reply": "2021-11-07T04:56:17.832144Z" } }, "outputs": [], "source": [ "log_fh.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Even now, the ideal Hamiltonian ($\\mu = 1$) has the lowest error in the\n", "ensemble by a significant margin. However, notice that the error in the $J_T$\n", "for $\\mu = 1$ is actually rising, while the errors for values of $\\mu \\neq 1$\n", "are falling by a much larger value! This is a good thing: we sacrifice a little\n", "bit of fidelity in the unperturbed dynamics to an increase in robustness.\n", "\n", "The optimized \"robust\" pulse looks as follows:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:04.274992Z", "start_time": "2020-03-22T05:06:03.369715Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:17.838312Z", "iopub.status.busy": "2021-11-07T04:56:17.837734Z", "iopub.status.idle": "2021-11-07T04:56:18.135511Z", "shell.execute_reply": "2021-11-07T04:56:18.135754Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pump pulse amplitude and phase:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Stokes pulse amplitude and phase:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_pulse_amplitude_and_phase(pulse_real, pulse_imaginary, tlist):\n", " ax1 = plt.subplot(211)\n", " ax2 = plt.subplot(212)\n", " amplitudes = [\n", " np.sqrt(x * x + y * y) for x, y in zip(pulse_real, pulse_imaginary)\n", " ]\n", " phases = [\n", " np.arctan2(y, x) / np.pi for x, y in zip(pulse_real, pulse_imaginary)\n", " ]\n", " ax1.plot(tlist, amplitudes)\n", " ax1.set_xlabel('time')\n", " ax1.set_ylabel('pulse amplitude')\n", " ax2.plot(tlist, phases)\n", " ax2.set_xlabel('time')\n", " ax2.set_ylabel('pulse phase (π)')\n", " plt.show()\n", "\n", "\n", "print(\"pump pulse amplitude and phase:\")\n", "plot_pulse_amplitude_and_phase(\n", " opt_result.optimized_controls[0], opt_result.optimized_controls[1], tlist\n", ")\n", "print(\"Stokes pulse amplitude and phase:\")\n", "plot_pulse_amplitude_and_phase(\n", " opt_result.optimized_controls[2], opt_result.optimized_controls[3], tlist\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and produces the dynamics (in the unperturbed system) shown below:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:04.614894Z", "start_time": "2020-03-22T05:06:04.277559Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:18.138348Z", "iopub.status.busy": "2021-11-07T04:56:18.138055Z", "iopub.status.idle": "2021-11-07T04:56:18.177210Z", "shell.execute_reply": "2021-11-07T04:56:18.176904Z" } }, "outputs": [], "source": [ "opt_robust_dynamics = opt_result.optimized_objectives[0].mesolve(\n", " tlist, e_ops=[proj1, proj2, proj3]\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:04.825054Z", "start_time": "2020-03-22T05:06:04.616827Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:18.189848Z", "iopub.status.busy": "2021-11-07T04:56:18.188989Z", "iopub.status.idle": "2021-11-07T04:56:18.269837Z", "shell.execute_reply": "2021-11-07T04:56:18.269537Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_population(opt_robust_dynamics)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Robustness analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When comparing the robustness of the \"robust\" optimized pulse to that obtained\n", "from the original optimization for the unperturbed Hamiltonian, we should make\n", "sure that we have converged to a comparable error: We would like to avoid the\n", "suspicion that the ensemble error is below our threshold only because the error\n", "for $\\mu = 1$ is so much lower. Therefore, we continue the original unperturbed\n", "optimization for a few more iterations, until we reach the same error $\\approx\n", "1.13 \\times 10^{-4}$ that we found as the result of the ensemble optimization,\n", "looking at $\\mu=1$ only:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:04.832756Z", "start_time": "2020-03-22T05:06:04.827766Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:18.272128Z", "iopub.status.busy": "2021-11-07T04:56:18.271824Z", "iopub.status.idle": "2021-11-07T04:56:18.273456Z", "shell.execute_reply": "2021-11-07T04:56:18.273688Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "J_T(μ=1) = 2.67e-03\n" ] } ], "source": [ "print(\"J_T(μ=1) = %.2e\" % (1 - opt_result.tau_vals[-1][0].real))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:16.589810Z", "start_time": "2020-03-22T05:06:04.834702Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:18.287182Z", "iopub.status.busy": "2021-11-07T04:56:18.276397Z", "iopub.status.idle": "2021-11-07T04:56:25.378133Z", "shell.execute_reply": "2021-11-07T04:56:25.377821Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter. J_T ∫gₐ(ϵ₁)dt ∫gₐ(ϵ₂)dt ∫gₐ(ϵ₃)dt ∫gₐ(ϵ₄)dt ∑∫gₐ(t)dt J ΔJ_T ΔJ secs\n", "0 5.91e-04 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 5.91e-04 n/a n/a 0\n", "13 3.25e-04 6.30e-05 9.90e-06 5.10e-05 9.21e-06 1.33e-04 4.58e-04 -2.66e-04 -1.33e-04 2\n", "14 1.83e-04 3.17e-05 7.05e-06 2.57e-05 6.48e-06 7.08e-05 2.54e-04 -1.42e-04 -7.08e-05 2\n", "15 1.06e-04 1.60e-05 5.02e-06 1.30e-05 4.56e-06 3.85e-05 1.44e-04 -7.70e-05 -3.85e-05 2\n" ] } ], "source": [ "opt_result_unperturbed_cont = krotov.optimize_pulses(\n", " [objective],\n", " pulse_options,\n", " tlist,\n", " propagator=krotov.propagators.expm,\n", " chi_constructor=krotov.functionals.chis_re,\n", " info_hook=krotov.info_hooks.print_table(\n", " J_T=krotov.functionals.J_T_re,\n", " show_g_a_int_per_pulse=True,\n", " ),\n", " check_convergence=krotov.convergence.Or(\n", " krotov.convergence.value_below(1.13e-4, name='J_T'),\n", " krotov.convergence.check_monotonic_error,\n", " ),\n", " iter_stop=50,\n", " continue_from=opt_result_unperturbed,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can compare the robustness of the optimized pulses from the original\n", "unperturbed optimization (label \"-1\"), the continued unperturbed optimization\n", "(label \"0\"), and the ensemble optimization (label \"1\"):" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:25.330316Z", "start_time": "2020-03-22T05:06:16.592668Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:25.381785Z", "iopub.status.busy": "2021-11-07T04:56:25.381485Z", "iopub.status.idle": "2021-11-07T04:56:28.811361Z", "shell.execute_reply": "2021-11-07T04:56:28.810894Z" } }, "outputs": [], "source": [ "def _f(mu):\n", " return pop_error(\n", " opt_result_unperturbed_cont.optimized_objectives[0], mu=mu\n", " )\n", "\n", "\n", "pop_errors_norobust_cont = parallel_map(_f, mu_vals)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:34.908457Z", "start_time": "2020-03-22T05:06:25.332449Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:28.817640Z", "iopub.status.busy": "2021-11-07T04:56:28.817168Z", "iopub.status.idle": "2021-11-07T04:56:32.405239Z", "shell.execute_reply": "2021-11-07T04:56:32.404641Z" } }, "outputs": [], "source": [ "def _f(mu):\n", " return pop_error(opt_result.optimized_objectives[0], mu=mu)\n", "\n", "\n", "pop_errors_robust = parallel_map(_f, mu_vals)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "ExecuteTime": { "end_time": "2020-03-22T05:06:35.372866Z", "start_time": "2020-03-22T05:06:34.911667Z" }, "execution": { "iopub.execute_input": "2021-11-07T04:56:32.416243Z", "iopub.status.busy": "2021-11-07T04:56:32.415735Z", "iopub.status.idle": "2021-11-07T04:56:32.739466Z", "shell.execute_reply": "2021-11-07T04:56:32.739158Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_robustness(\n", " mu_vals,\n", " pop_errors_robust,\n", " pop_errors0=[pop_errors_norobust_cont, pop_errors_norobust],\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that without the ensemble optimization, we only lower the error for\n", "exactly $\\mu = 1$: the more we converge, the less robust the result. In\n", "contrast, the ensemble optimization results in considerably lower errors (order\n", "of magnitude!) throughout the highlighted \"region of interest\" and beyond." ] } ], "metadata": { "hide_input": false, "jupytext": { "formats": "" }, "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.8.1" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }