Skip to content

Instantly share code, notes, and snippets.

@goerz
Forked from TejasAvinashShetty/simple_gate.ipynb
Last active October 27, 2019 23:57
Show Gist options
  • Save goerz/d62fcabc2f2d3e97dd0cc32a115227d0 to your computer and use it in GitHub Desktop.
Save goerz/d62fcabc2f2d3e97dd0cc32a115227d0 to your computer and use it in GitHub Desktop.
modify simple state transfer notebook for Gate optimization
Display the source blob
Display the rendered blob
Raw
{
"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-10-27T23:55:24.671600Z",
"start_time": "2019-10-27T23:55:23.025477Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "1"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"numpy 1.17.2\n",
"qutip 4.4.1\n",
"scipy 1.3.1\n",
"matplotlib.pylab 1.17.2\n",
"krotov 0.4.1+dev\n",
"matplotlib 3.1.1\n",
"CPython 3.7.3\n",
"IPython 7.8.0\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\n",
"#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-10-27T23:55:24.696758Z",
"start_time": "2019-10-27T23:55:24.683277Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}0.0 & -1.0j\\\\1.0j & 0.0\\\\\\end{array}\\right)\\end{equation*}"
],
"text/plain": [
"Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True\n",
"Qobj data =\n",
"[[0.+0.j 0.-1.j]\n",
" [0.+1.j 0.+0.j]]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# DEBUG\n",
"qutip.operators.sigmay()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:24.713453Z",
"start_time": "2019-10-27T23:55:24.703063Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}0.0 & 1.0\\\\1.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}"
],
"text/plain": [
"Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True\n",
"Qobj data =\n",
"[[0. 1.]\n",
" [1. 0.]]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# DEBUG\n",
"qutip.operators.sigmax()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:24.726142Z",
"start_time": "2019-10-27T23:55:24.717818Z"
}
},
"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=\"sinsq\"\n",
" )\n",
"\n",
" return [H0, [H1, guess_control]]\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:24.735554Z",
"start_time": "2019-10-27T23:55:24.729607Z"
}
},
"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 the first period of\n",
"a $\\sin^2$ function). 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": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:24.743027Z",
"start_time": "2019-10-27T23:55:24.738146Z"
},
"lines_to_next_cell": 2
},
"outputs": [],
"source": [
"tlist = np.linspace(0, 5, 500)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:24.756635Z",
"start_time": "2019-10-27T23:55:24.746149Z"
},
"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": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.051532Z",
"start_time": "2019-10-27T23:55:24.763414Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "11"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_pulse(H[1][1], tlist)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Optimization target"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `krotov` package requires the goal of the optimization to be described by a\n",
"list of `Objective` instances. In this example, there is only a single\n",
"objective: the state-to-state transfer from initial state $\\ket{\\Psi_{\\init}} =\n",
"\\ket{0}$ to the target state $\\ket{\\Psi_{\\tgt}} = \\ket{1}$, under the dynamics\n",
"of the Hamiltonian $\\op{H}(t)$:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.068686Z",
"start_time": "2019-10-27T23:55:25.055161Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[Objective[|Ψ₀(2)⟩ to |Ψ₁(2)⟩ via [H₀[2,2], [H₁[2,2], u₁(t)]]],\n",
" Objective[|Ψ₁(2)⟩ to |Ψ₀(2)⟩ via [H₀[2,2], [H₁[2,2], u₁(t)]]]]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"objectives = krotov.gate_objectives(\n",
" basis_states=[qutip.ket('0'), qutip.ket('1')],\n",
" gate=qutip.operators.sigmax(),\n",
" H=H)\n",
"objectives"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In addition, we would like to maintain the property of the control field to be\n",
"zero at $t=0$ and $t=T$, with a smooth switch-on and switch-off. We can define\n",
"an \"update shape\" $S(t) \\in [0, 1]$ for this purpose: Krotov's method will\n",
"update the field at each point in time proportionally to $S(t)$; wherever\n",
"$S(t)$ is zero, the optimization will not change the value of the control from\n",
"the original guess."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.081234Z",
"start_time": "2019-10-27T23:55:25.072822Z"
},
"lines_to_next_cell": 2
},
"outputs": [],
"source": [
"def S(t):\n",
" \"\"\"Shape function for the field update\"\"\"\n",
" return krotov.shapes.flattop(\n",
" t, t_start=0, t_stop=5, t_rise=0.3, t_fall=0.3, func='sinsq'\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Beyond the shape, Krotov's method uses a parameter $\\lambda_a$ for each control\n",
"field that determines the overall magnitude of the respective field in each\n",
"iteration (the smaller $\\lambda_a$, the larger the update; specifically, the\n",
"update is proportional to $\\frac{S(t)}{\\lambda_a}$). Both the update-shape\n",
"$S(t)$ and the $\\lambda_a$ parameter must be passed to the optimization routine\n",
"as \"pulse options\":"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.090762Z",
"start_time": "2019-10-27T23:55:25.086325Z"
},
"lines_to_next_cell": 0
},
"outputs": [],
"source": [
"pulse_options = {\n",
" H[1][1]: dict(lambda_a=5, update_shape=S)\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulate dynamics under the guess field"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before running the optimization procedure, we first simulate the dynamics under the\n",
"guess field $\\epsilon_{0}(t)$. The following solves equation of motion for the\n",
"defined objective, which contains the initial state $\\ket{\\Psi_{\\init}}$ and\n",
"the Hamiltonian $\\op{H}(t)$ defining its evolution. This delegates to QuTiP's\n",
"usual `mesolve` function."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use the projectors $\\op{P}_0 = \\ket{0}\\bra{0}$ and $\\op{P}_1 = \\ket{1}\\bra{1}$ for calculating the population:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.108142Z",
"start_time": "2019-10-27T23:55:25.095861Z"
}
},
"outputs": [],
"source": [
"proj0 = qutip.ket2dm(qutip.ket(\"0\"))\n",
"proj1 = qutip.ket2dm(qutip.ket(\"1\"))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.264099Z",
"start_time": "2019-10-27T23:55:25.116620Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "12"
}
},
"outputs": [],
"source": [
"guess_dynamics = objectives[0].mesolve(tlist, e_ops=[proj0, proj1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The plot of the population dynamics shows that the guess field does not transfer\n",
"the initial state $\\ket{\\Psi_{\\init}} = \\ket{0}$ to the desired target state\n",
"$\\ket{\\Psi_{\\tgt}} = \\ket{1}$ (so the optimization will have something to do)."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:55:25.274982Z",
"start_time": "2019-10-27T23:55:25.266575Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "13"
}
},
"outputs": [],
"source": [
"def plot_population(result):\n",
" fig, ax = plt.subplots()\n",
" ax.plot(result.times, result.expect[0], label='0')\n",
" ax.plot(result.times, result.expect[1], label='1')\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": "2019-10-27T23:55:25.559267Z",
"start_time": "2019-10-27T23:55:25.279031Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "14"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_population(guess_dynamics)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Optimize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the following we optimize the guess field $\\epsilon_{0}(t)$ such\n",
"that the intended state-to-state transfer $\\ket{\\Psi_{\\init}} \\rightarrow\n",
"\\ket{\\Psi_{\\tgt}}$ is solved, via the `krotov` package's central\n",
"`optimize_pulses` routine. It requires, besides the previously defined\n",
"`objectives`, information about the optimization functional $J_T$ (implicitly,\n",
"via `chi_constructor`, which calculates the states $\\ket{\\chi} =\n",
"\\frac{J_T}{\\bra{\\Psi}}$).\n",
"\n",
"Here, we choose $J_T = J_{T,\\text{re}} = 1 - F_{\\text{re}}$ with $F_{\\text{re}}\n",
"= \\Re\\Braket{\\Psi(T)}{\\Psi_{\\tgt}}$, with $\\ket{\\Psi(T)}$ the forward\n",
"propagated state of $\\ket{\\Psi_{\\init}}$. Even though $J_T$ is not explicitly\n",
"required for the optimization, it is nonetheless useful to be able to calculate\n",
"and print it as a way to provide some feedback about the optimization progress.\n",
"Here, we pass as an `info_hook` the function `krotov.info_hooks.print_table`,\n",
"using `krotov.functionals.J_T_re` (which implements the above functional; the\n",
"`krotov` library contains implementations of all the \"standard\" functionals used in\n",
"quantum control). This `info_hook` prints a tabular overview after each\n",
"iteration, containing the value of $J_T$, the magnitude of the integrated pulse\n",
"update, and information on how much $J_T$ (and the full Krotov functional $J$)\n",
"changes between iterations. It also stores the value of $J_T$ internally in the\n",
"`Result.info_vals` attribute.\n",
"\n",
"The value of $J_T$ can also be used to check the convergence. In this example,\n",
"we limit the number of total iterations to 10, but more generally, we could use\n",
"the `check_convergence` parameter to stop the optimization when $J_T$ falls below\n",
"some threshold. Here, we only pass a function that checks that the value of\n",
"$J_T$ is monotonically decreasing. The\n",
"`krotov.convergence.check_monotonic_error` relies on\n",
"`krotov.info_hooks.print_table` internally having stored the value of $J_T$ to\n",
"the `Result.info_vals` in each iteration."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.169289Z",
"start_time": "2019-10-27T23:55:25.562757Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "15"
},
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" iter. J_T ∫gₐ(t)dt J ΔJ_T ΔJ secs\n",
" 0 9.55e-01 0.00e+00 9.55e-01 n/a n/a 1\n",
" 1 9.29e-01 2.21e-03 9.31e-01 -2.59e-02 -2.37e-02 2\n",
" 2 8.89e-01 3.40e-03 8.93e-01 -3.98e-02 -3.64e-02 3\n",
" 3 8.30e-01 5.11e-03 8.35e-01 -5.96e-02 -5.45e-02 2\n",
" 4 7.44e-01 7.33e-03 7.52e-01 -8.51e-02 -7.77e-02 2\n",
" 5 6.32e-01 9.80e-03 6.42e-01 -1.13e-01 -1.03e-01 3\n",
" 6 4.99e-01 1.18e-02 5.10e-01 -1.33e-01 -1.22e-01 2\n",
" 7 3.61e-01 1.23e-02 3.74e-01 -1.37e-01 -1.25e-01 2\n",
" 8 2.41e-01 1.10e-02 2.52e-01 -1.20e-01 -1.09e-01 3\n",
" 9 1.50e-01 8.48e-03 1.58e-01 -9.11e-02 -8.26e-02 3\n",
" 10 8.88e-02 5.75e-03 9.46e-02 -6.11e-02 -5.53e-02 3\n",
" 11 5.11e-02 3.57e-03 5.47e-02 -3.77e-02 -3.41e-02 2\n",
" 12 2.91e-02 2.10e-03 3.12e-02 -2.21e-02 -2.00e-02 2\n",
" 13 1.65e-02 1.20e-03 1.77e-02 -1.26e-02 -1.14e-02 2\n",
" 14 9.42e-03 6.78e-04 1.01e-02 -7.08e-03 -6.41e-03 2\n",
" 15 5.44e-03 3.81e-04 5.82e-03 -3.98e-03 -3.60e-03 3\n",
" 16 3.20e-03 2.15e-04 3.42e-03 -2.24e-03 -2.02e-03 2\n",
" 17 1.93e-03 1.22e-04 2.05e-03 -1.27e-03 -1.15e-03 2\n",
" 18 1.20e-03 7.03e-05 1.27e-03 -7.29e-04 -6.59e-04 2\n",
" 19 7.76e-04 4.12e-05 8.17e-04 -4.26e-04 -3.85e-04 3\n"
]
}
],
"source": [
"oct_result = krotov.optimize_pulses(\n",
" objectives,\n",
" pulse_options=pulse_options,\n",
" tlist=tlist,\n",
" propagator=krotov.propagators.expm,\n",
" chi_constructor=krotov.functionals.chis_sm,\n",
" info_hook=krotov.info_hooks.print_table(J_T=krotov.functionals.J_T_sm),\n",
" check_convergence=krotov.convergence.Or(\n",
" krotov.convergence.value_below(1e-3, name='J_T'),\n",
" krotov.convergence.delta_below(1e-5),\n",
" krotov.convergence.check_monotonic_error,\n",
" ),\n",
" iter_stop=1000,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.180817Z",
"start_time": "2019-10-27T23:56:24.172386Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "16"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Krotov Optimization Result\n",
"--------------------------\n",
"- Started at 2019-10-27 19:55:25\n",
"- Number of objectives: 2\n",
"- Number of iterations: 19\n",
"- Reason for termination: Reached convergence: J_T < 0.001\n",
"- Ended at 2019-10-27 19:56:24"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"oct_result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulate the dynamics under the optimized field"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Having obtained the optimized control field, we can now plot it and calculate\n",
"the population dynamics under this field."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.400199Z",
"start_time": "2019-10-27T23:56:24.183333Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "17"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_pulse(oct_result.optimized_controls[0], tlist)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In contrast to the dynamics under the guess field, the optimized field indeed\n",
"drives the initial state $\\ket{\\Psi_{\\init}} = \\ket{0}$ to the desired target\n",
"state $\\ket{\\Psi_{\\tgt}} = \\ket{1}$."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.574596Z",
"start_time": "2019-10-27T23:56:24.402742Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "18"
}
},
"outputs": [],
"source": [
"opt_dynamics = oct_result.optimized_objectives[0].mesolve(\n",
" tlist, e_ops=[proj0, proj1])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.784445Z",
"start_time": "2019-10-27T23:56:24.576709Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "19"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_population(opt_dynamics)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:24.952235Z",
"start_time": "2019-10-27T23:56:24.786691Z"
},
"attributes": {
"classes": [],
"id": "",
"n": "18"
}
},
"outputs": [],
"source": [
"opt_dynamics = oct_result.optimized_objectives[1].mesolve(\n",
" tlist, e_ops=[proj0, proj1])"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T23:56:25.175825Z",
"start_time": "2019-10-27T23:56:24.954537Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_population(opt_dynamics)"
]
}
],
"metadata": {
"hide_input": false,
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment