{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to optimize controls in arbitrary quantum systems using graphs\n",
    "**Highly-configurable non-linear optimization framework for quantum control**\n",
    "\n",
    "Boulder Opal provides a highly-flexible optimization engine for general-purpose gradient-based optimization.\n",
    "It can be directly applied to model-based control optimization for arbitrary-dimensional quantum systems.\n",
    "\n",
    "The optimization engine from Boulder Opal allows the user to express their system Hamiltonians as almost-arbitrary functions of the controllable parameters.\n",
    "The underlying structure of this map is a [graph](https://docs.q-ctrl.com/boulder-opal/toolkit/design/calculate-with-graphs/get-an-introduction-to-graphs-in-boulder-opal), which defines the cost function and can be efficiently evaluated and differentiated.\n",
    "The resulting optimized controls thus achieve the desired objectives within the constraints imposed by the user-defined Hamiltonian structure.\n",
    "\n",
    "The example in this user guide illustrates how to optimize multiple controls under different constraints in a single system.\n",
    "For a step-by-step description of how to create a robust optimization with multiple controls, see our tutorial [Design robust single-qubit gates using computational graphs](https://docs.q-ctrl.com/boulder-opal/toolkit/design/design-error-robust-quantum-logic-gates/learn-to-design-robust-single-qubit-gates-using-computational-graphs)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary workflow\n",
    "### 1. Define the computational graph\n",
    "The Boulder Opal optimization engine expresses all optimization problems as [data flow graphs](https://docs.q-ctrl.com/boulder-opal/toolkit/design/calculate-with-graphs/get-an-introduction-to-graphs-in-boulder-opal), which you can create a graph object by initializing the `boulderopal.Graph` class.\n",
    "The methods of the graph object allow you to represent the mathematical structure of the problem that you want to solve.\n",
    "\n",
    "For an optimization, a typical workflow is to:\n",
    "- Create \"signals\", or scalar-valued functions of time, which typically represent control pulses.\n",
    "- Create \"operators\", or matrix-valued functions of time, by modulating constant operators by signals. These typically represent terms of a Hamiltonian.\n",
    "- Combine the operators into a single Hamiltonian operator.\n",
    "- Calculate the optimization cost function (typically an infidelity) from the Hamiltonian.\n",
    "\n",
    "### 2. Execute graph-based optimization\n",
    "\n",
    "You can calculate an optimization from an input graph using the `boulderopal.run_optimization` function.\n",
    "Provide the name of the node of the graph that represents the cost, and this function will return the optimized value of the output nodes that you requested."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example: Optimal control of a single qubit\n",
    "\n",
    "This example shows how to optimize a Hamiltonian with multiple controls.\n",
    "Specifically, consider a single-qubit system represented by the following Hamiltonian:\n",
    "\n",
    "\\begin{align*}\n",
    "H(t) &= \\frac{\\nu}{2} \\sigma_{z} + \\frac{1}{2}\\left[\\gamma(t)\\sigma_{-} + \\gamma^*(t)\\sigma_{+}\\right] + \\frac{\\alpha(t)}{2} \\sigma_{z} , \n",
    "\\end{align*}\n",
    "\n",
    "where $\\nu$ is the qubit detuning, $\\gamma(t)$ and $\\alpha(t)$ are, respectively, complex and real time-dependent pulses, $\\sigma_{\\pm}$ are the qubit ladder operators, and $\\sigma_{z}$ is the Pauli-Z operator.\n",
    "\n",
    "The functions of time $\\gamma(t)$ and $\\alpha(t)$ are not predetermined, and instead are optimized by Boulder Opal in order to achieve the target operation, which in this case is a Y-gate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import qctrlvisualizer as qv\n",
    "import boulderopal as bo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Your task (action_id=\"1828657\") has started.\n",
      "Your task (action_id=\"1828657\") has completed.\n",
      "Optimized cost:\t5.129e-13\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x540 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Define physical constants.\n",
    "nu = 2 * np.pi * 5e5  # rad/s\n",
    "gamma_max = 2 * np.pi * 3e5  # rad/s\n",
    "alpha_max = 2 * np.pi * 1e5  # rad/s\n",
    "cutoff_frequency = 5e6  # Hz\n",
    "segment_count = 50\n",
    "duration = 10e-6  # s\n",
    "\n",
    "# Create the graph describing the system.\n",
    "graph = bo.Graph()\n",
    "\n",
    "# Create the time-independent detuning term.\n",
    "detuning = nu * graph.pauli_matrix(\"Z\") / 2\n",
    "\n",
    "# Create a optimizable complex-valued piecewise-constant (PWC) signal.\n",
    "rough_gamma = graph.complex_optimizable_pwc_signal(\n",
    "    segment_count=segment_count, maximum=gamma_max, duration=duration\n",
    ")\n",
    "# Smooth the signal.\n",
    "gamma = graph.filter_and_resample_pwc(\n",
    "    pwc=rough_gamma,\n",
    "    segment_count=256,\n",
    "    kernel=graph.sinc_convolution_kernel(cutoff_frequency),\n",
    "    name=r\"$\\gamma$\",\n",
    ")\n",
    "\n",
    "# Create a PWC operator representing the drive term.\n",
    "drive = graph.hermitian_part(gamma * graph.pauli_matrix(\"M\"))\n",
    "\n",
    "# Create an optimizable real-valued PWC signal.\n",
    "rough_alpha = graph.real_optimizable_pwc_signal(\n",
    "    segment_count=segment_count,\n",
    "    minimum=-alpha_max,\n",
    "    maximum=alpha_max,\n",
    "    duration=duration,\n",
    ")\n",
    "# Smooth the signal.\n",
    "alpha = graph.filter_and_resample_pwc(\n",
    "    pwc=rough_alpha,\n",
    "    segment_count=256,\n",
    "    kernel=graph.sinc_convolution_kernel(cutoff_frequency),\n",
    "    name=r\"$\\alpha$\",\n",
    ")\n",
    "# Create a PWC operator representing the clock shift term.\n",
    "shift = alpha * graph.pauli_matrix(\"Z\") / 2\n",
    "\n",
    "# Define the total Hamiltonian and the target operation.\n",
    "hamiltonian = detuning + drive + shift\n",
    "target = graph.target(graph.pauli_matrix(\"Y\"))\n",
    "\n",
    "# Create the infidelity.\n",
    "infidelity = graph.infidelity_pwc(hamiltonian, target, name=\"infidelity\")\n",
    "\n",
    "# Run the optimization.\n",
    "result = bo.run_optimization(\n",
    "    graph=graph,\n",
    "    cost_node_name=\"infidelity\",\n",
    "    output_node_names=[r\"$\\alpha$\", r\"$\\gamma$\"],\n",
    "    optimization_count=4,\n",
    ")\n",
    "print(f\"Optimized cost:\\t{result['cost']:.3e}\")\n",
    "\n",
    "# Plot the optimized controls.\n",
    "qv.plot_controls(result[\"output\"])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
