{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimization of a State-to-State Transfer in a Two-Level-System" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.377487Z", "start_time": "2019-07-14T20:35:00.999460Z" }, "attributes": { "classes": [], "id": "", "n": "1" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "matplotlib 3.1.2\n", "matplotlib.pylab 1.17.2\n", "scipy 1.3.1\n", "numpy 1.17.2\n", "qutip 4.4.1\n", "krotov 1.0.0\n", "CPython 3.7.3\n", "IPython 7.10.2\n" ] } ], "source": [ "# NBVAL_IGNORE_OUTPUT\n", "%load_ext watermark\n", "import qutip\n", "import numpy as np\n", "import scipy\n", "import matplotlib\n", "import matplotlib.pylab as plt\n", "import krotov\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{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", "\n", "This first example illustrates the basic use of the krotov package by solving\n", "a simple canonical optimization problem: the transfer of population in a two\n", "level system." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Two-level-Hamiltonian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We consider the Hamiltonian $\\op{H}_{0} = - \\frac{\\omega}{2} \\op{\\sigma}_{z}$, representing\n", "a simple qubit with energy level splitting $\\omega$ in the basis\n", "$\\{\\ket{0},\\ket{1}\\}$. The control field $\\epsilon(t)$ is assumed to couple via\n", "the Hamiltonian $\\op{H}_{1}(t) = \\epsilon(t) \\op{\\sigma}_{x}$ to the qubit,\n", "i.e., the control field effectively drives transitions between both qubit\n", "states." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.386131Z", "start_time": "2019-07-14T20:35:02.380331Z" } }, "outputs": [], "source": [ "def hamiltonian(omega=1.0, ampl0=0.2):\n", " \"\"\"Two-level-system Hamiltonian\n", "\n", " Args:\n", " omega (float): energy separation of the qubit levels\n", " ampl0 (float): constant amplitude of the driving field\n", " \"\"\"\n", " H0 = -0.5 * omega * qutip.operators.sigmaz()\n", " H1 = qutip.operators.sigmax()\n", "\n", " def guess_control(t, args):\n", " return ampl0 * krotov.shapes.flattop(\n", " t, t_start=0, t_stop=5, t_rise=0.3, func=\"blackman\"\n", " )\n", "\n", " return [H0, [H1, guess_control]]\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.396725Z", "start_time": "2019-07-14T20:35:02.389898Z" } }, "outputs": [], "source": [ "H = hamiltonian()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The control field here switches on from zero at $t=0$ to it's maximum amplitude\n", "0.2 within the time period 0.3 (the switch-on shape is half a [Blackman pulse](https://en.wikipedia.org/wiki/Window_function#Blackman_window)).\n", "It switches off again in the time period 0.3 before the\n", "final time $T=5$). We use a time grid with 500 time steps between 0 and $T$:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.403354Z", "start_time": "2019-07-14T20:35:02.399999Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "tlist = np.linspace(0, 5, 500)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.410815Z", "start_time": "2019-07-14T20:35:02.405695Z" }, "attributes": { "classes": [], "id": "", "n": "10" } }, "outputs": [], "source": [ "def plot_pulse(pulse, tlist):\n", " fig, ax = plt.subplots()\n", " if callable(pulse):\n", " pulse = np.array([pulse(t, args=None) for t in tlist])\n", " ax.plot(tlist, pulse)\n", " ax.set_xlabel('time')\n", " ax.set_ylabel('pulse amplitude')\n", " plt.show(fig)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-07-14T20:35:02.628919Z", "start_time": "2019-07-14T20:35:02.413216Z" }, "attributes": { "classes": [], "id": "", "n": "11" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "