{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Ensemble Optimization for Robust Pulses" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "attributes": { "classes": [], "id": "", "n": "1" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "numpy 1.16.4\n", "krotov 0.3.0+dev\n", "qutip 4.3.1\n", "matplotlib.pylab 1.16.4\n", "matplotlib 3.1.0\n", "scipy 1.2.1\n", "CPython 3.7.3\n", "IPython 7.5.0\n" ] } ], "source": [ "# NBVAL_IGNORE_OUTPUT\n", "%load_ext watermark\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\n", "#2\\vphantom{#1}\\right\\rangle}\n", "\\newcommand{Ketbra}[2]{\\left\\vert#1\\vphantom{#2}\n", "\\right\\rangle \\hspace{-0.2em} \\left\\langle #2\\vphantom{#1} \\right\\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": [ "## 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": 2, "metadata": {}, "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": 3, "metadata": {}, "outputs": [], "source": [ "tlist = np.linspace(0, 5, 500)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "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": 5, "metadata": {}, "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": 6, "metadata": {}, "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": 7, "metadata": {}, "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": 8, "metadata": {}, "outputs": [], "source": [ "psi_target = rwa_target_state(ket3)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "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": 9, "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": 10, "metadata": {}, "outputs": [], "source": [ "oct_result_unperturbed = krotov.result.Result.load(\n", " 'lambda_rwa_oct_result.dump', objectives=[objective]\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "proj1 = qutip.ket2dm(ket1)\n", "proj2 = qutip.ket2dm(ket2)\n", "proj3 = qutip.ket2dm(ket3)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "opt_unperturbed_dynamics = oct_result_unperturbed.optimized_objectives[\n", " 0\n", "].mesolve(tlist, e_ops=[proj1, proj2, proj3])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "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": 14, "metadata": { "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" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "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": 16, "metadata": { "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" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "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": 18, "metadata": { "lines_to_next_cell": 2 }, "outputs": [], "source": [ "def _f(mu):\n", " # parallel_map needs a global function\n", " return pop_error(oct_result_unperturbed.optimized_objectives[0], mu=mu)\n", "\n", "\n", "pop_errors_norobust = qutip.parallel_map(_f, mu_vals)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "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": 20, "metadata": {}, "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": 21, "metadata": {}, "outputs": [], "source": [ "ensemble_mu = [1.0, 0.9, 0.95, 1.05, 1.1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The corresponding perturbed Hamiltonians (excluding $\\mu=1$) are" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "ham_ensemble = [scale_control(objective.H, mu=mu) for mu in ensemble_mu[1:]]" ] }, { "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:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "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": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ensemble_objectives = krotov.objectives.ensemble_objectives(\n", " objectives, ham_ensemble\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": 24, "metadata": {}, "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" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "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_oct.log`." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "log_fh = open(\"ensemble_oct.log\", \"w\")" ] }, { "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": 27, "metadata": { "ExecuteTime": { "end_time": "2019-02-25T17:38:48.404127Z", "start_time": "2019-02-25T17:37:04.624207Z" }, "attributes": { "classes": [], "id": "", "n": "16" }, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration J_T(avg) J_T(μ=1.00) J_T(μ=0.90) J_T(μ=0.95) 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.75e-01 6.94e-01 6.83e-01 6.71e-01 6.71e-01\n", " 2 4.14e-01 4.07e-01 4.41e-01 4.21e-01 4.00e-01 4.00e-01\n", " 3 2.36e-01 2.27e-01 2.68e-01 2.43e-01 2.20e-01 2.23e-01\n", " 4 1.32e-01 1.21e-01 1.63e-01 1.37e-01 1.16e-01 1.22e-01\n", " 5 7.46e-02 6.29e-02 1.04e-01 7.78e-02 5.98e-02 6.86e-02\n", " 6 4.47e-02 3.24e-02 7.13e-02 4.58e-02 3.13e-02 4.26e-02\n", " 7 2.92e-02 1.66e-02 5.32e-02 2.88e-02 1.72e-02 3.04e-02\n", " 8 2.14e-02 8.59e-03 4.32e-02 1.96e-02 1.04e-02 2.50e-02\n", " 9 1.73e-02 4.48e-03 3.74e-02 1.46e-02 7.25e-03 2.28e-02\n", " 10 1.52e-02 2.38e-03 3.41e-02 1.19e-02 5.83e-03 2.21e-02\n", " 11 1.42e-02 1.29e-03 3.20e-02 1.03e-02 5.23e-03 2.20e-02\n", " 12 1.36e-02 7.20e-04 3.07e-02 9.37e-03 5.00e-03 2.20e-02\n" ] } ], "source": [ "oct_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", " qutip.parallel_map,\n", " qutip.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": 28, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration J_T(avg) J_T(μ=1.00) J_T(μ=0.90) J_T(μ=0.95) J_T(μ=1.05) J_T(μ=1.10)\n", " 0 1.36e-02 7.20e-04 3.07e-02 9.37e-03 5.00e-03 2.20e-02\n", " ...\n", " 670 1.05e-03 1.10e-04 2.80e-03 4.83e-04 5.22e-04 1.34e-03\n", " 671 1.05e-03 1.10e-04 2.79e-03 4.79e-04 5.20e-04 1.33e-03\n", " 672 1.04e-03 1.10e-04 2.77e-03 4.76e-04 5.17e-04 1.33e-03\n", " 673 1.03e-03 1.11e-04 2.76e-03 4.73e-04 5.14e-04 1.32e-03\n", " 674 1.03e-03 1.11e-04 2.74e-03 4.70e-04 5.11e-04 1.31e-03\n", " 675 1.02e-03 1.11e-04 2.72e-03 4.66e-04 5.08e-04 1.30e-03\n", " 676 1.02e-03 1.12e-04 2.71e-03 4.63e-04 5.06e-04 1.29e-03\n", " 677 1.01e-03 1.12e-04 2.69e-03 4.60e-04 5.03e-04 1.28e-03\n", " 678 1.00e-03 1.12e-04 2.68e-03 4.57e-04 5.00e-04 1.27e-03\n", " 679 9.99e-04 1.13e-04 2.67e-03 4.54e-04 4.98e-04 1.27e-03\n" ] } ], "source": [ "dumpfile = \"./ensemble_oct_result.dump\"\n", "if os.path.isfile(dumpfile):\n", " oct_result = krotov.result.Result.load(dumpfile, objectives)\n", " print_J_T_per_target(iteration=0, tau_vals=oct_result.tau_vals[12])\n", " print(\" ...\")\n", " n_iters = len(oct_result.tau_vals)\n", " for i in range(n_iters - 10, n_iters):\n", " print_J_T_per_target(iteration=i, tau_vals=oct_result.tau_vals[i])\n", "else:\n", " oct_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", " qutip.parallel_map,\n", " qutip.parallel_map,\n", " krotov.parallelization.parallel_map_fw_prop_step,\n", " ),\n", " iter_stop=1000,\n", " continue_from=oct_result,\n", " )\n", " oct_result.dump(dumpfile)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Krotov Optimization Result\n", "--------------------------\n", "- Started at 2019-04-11 20:07:54\n", "- Number of objectives: 1\n", "- Number of iterations: 679\n", "- Reason for termination: Reached convergence: J_T < 0.001\n", "- Ended at 2019-04-11 21:45:38" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "oct_result" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "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": 31, "metadata": {}, "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", " oct_result.optimized_controls[0], oct_result.optimized_controls[1], tlist\n", ")\n", "print(\"Stokes pulse amplitude and phase:\")\n", "plot_pulse_amplitude_and_phase(\n", " oct_result.optimized_controls[2], oct_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": 32, "metadata": {}, "outputs": [], "source": [ "opt_robust_dynamics = oct_result.optimized_objectives[0].mesolve(\n", " tlist, e_ops=[proj1, proj2, proj3]\n", ")" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "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": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "J_T(μ=1) = 1.13e-04\n" ] } ], "source": [ "print(\"J_T(μ=1) = %.2e\" % (1 - oct_result.tau_vals[-1][0].real))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " iter. J_T g_a_int_1 g_a_int_2 g_a_int_3 g_a_int_4 g_a_int J Delta_J_T Delta 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 1\n", " 13 3.25e-04 1.26e-04 1.98e-05 1.02e-04 1.84e-05 2.66e-04 5.90e-04 -2.66e-04 -3.54e-07 2\n", " 14 1.83e-04 6.32e-05 1.41e-05 5.12e-05 1.29e-05 1.41e-04 3.24e-04 -1.42e-04 -2.11e-07 2\n", " 15 1.06e-04 3.19e-05 1.00e-05 2.59e-05 9.11e-06 7.69e-05 1.83e-04 -7.70e-05 -1.27e-07 2\n" ] } ], "source": [ "oct_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", " unicode=False,\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=oct_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": 36, "metadata": {}, "outputs": [], "source": [ "def _f(mu):\n", " return pop_error(\n", " oct_result_unperturbed_cont.optimized_objectives[0], mu=mu\n", " )\n", "\n", "\n", "pop_errors_norobust_cont = qutip.parallel_map(_f, mu_vals)\n" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "def _f(mu):\n", " return pop_error(oct_result.optimized_objectives[0], mu=mu)\n", "\n", "\n", "pop_errors_robust = qutip.parallel_map(_f, mu_vals)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "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.7.3" }, "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 }