{
  "cells": [
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "54453454-26da-499f-b42f-ec9a911aa23f",
      "metadata": {
        "gloss": {
          "advantage": {
            "text": "Practical demonstration of a quantum computer's ability to solve certain computational problems faster than classical computers.",
            "title": "Quantum Advantage"
          },
          "converge": {
            "text": "Reaching a stable and optimal solution, where further iterations or modifications to the algorithm no longer result in significant improvements or changes to the solution.",
            "title": "Converge"
          }
        }
      },
      "source": [
        "---\n",
        "title: \"Algoritmos variacionales\"\n",
        "description: \"Esta lección describe el flujo general del curso y resume algunos componentes clave de los algoritmos variacionales.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore infty */}\n",
        "\n",
        "<span id=\"variational-algorithms\" />\n",
        "\n",
        "# Algoritmos variacionales\n",
        "\n",
        "Este curso cubre los aspectos específicos de los algoritmos variacionales y los algoritmos híbridos cuántico-clásicos a corto plazo basados en el teorema variacional de la mecánica cuántica. Estos algoritmos pueden aprovechar la utilidad que ofrecen los actuales ordenadores cuánticos no tolerantes a fallos, lo que los convierte en candidatos ideales para lograr <DefinitionTooltip definition=\"Demostración práctica de la capacidad de un ordenador cuántico para resolver determinados problemas de cálculo más rápidamente que los ordenadores clásicos.\">ventaja cuántica</DefinitionTooltip>.\n",
        "\n",
        "A lo largo de este curso, exploraremos:\n",
        "\n",
        "* Cada paso en el flujo de trabajo del diseño del algoritmo variacional\n",
        "* Compromisos asociados a cada paso\n",
        "* Cómo utilizar [las primitivas de « IBM Quantum » para optimizar la velocidad y la precisión](/docs/guides/primitives)\n",
        "\n",
        "Aunque este curso pretende ser un punto de partida para que investigadores y desarrolladores exploren la utilidad de los ordenadores cuánticos, no dude en explorar los conocimientos teóricos y fundamentales en torno a la informática cuántica en general en los [Fundamentos de la información y la computación cuánticas](/learning/courses/basics-of-quantum-information) (también disponible en [una serie de vídeos en YouTube](https://www.youtube.com/playlist?list=PLOFEBzvs-VvqKKMXX4vbi4EB1uaErFMSO) ).\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "d5b17281-21f7-4d3e-921a-9a533d46208f",
      "metadata": {},
      "source": [
        "<span id=\"simplified-hybrid-workflow\" />\n",
        "\n",
        "## Flujo de trabajo híbrido simplificado\n",
        "\n",
        "![Flujo de un algoritmo variacional que muestra los pasos: inicializar el problema, preparar el ansatz, evaluar la función de coste, optimizar los parámetros.](https://quantum.cloud.ibm.com/learning/images/courses/variational-algorithm-design/variational-algorithms/variational-workflow.svg)\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "8ec24045-65fb-43c7-8ea5-ba6fa1061956",
      "metadata": {
        "gloss": {
          "cost_function": {
            "text": "A mathematical function used to measure the difference between the predicted output of a model or algorithm and the actual output, with the goal of minimizing this difference through optimization.",
            "title": "Cost Function"
          }
        }
      },
      "source": [
        "Los algoritmos variacionales incluyen varios componentes modulares que pueden combinarse y optimizarse en función de los avances en algoritmos, software y hardware. Esto incluye una *función de coste* que describe un problema específico con un conjunto de parámetros, un *ansatz* para expresar el espacio de búsqueda con estos parámetros y un *optimizador* para explorar iterativamente el espacio de búsqueda. Durante cada iteración, el optimizador evalúa la <DefinitionTooltip definition=\"Función matemática utilizada para medir la diferencia entre el resultado previsto de un modelo o algoritmo y el resultado real, con el objetivo de minimizar esta diferencia mediante la optimización.\">función de coste</DefinitionTooltip> con los parámetros actuales y selecciona los parámetros de la iteración siguiente hasta que <DefinitionTooltip definition=\"Alcanzar una solución estable y óptima, en la que nuevas iteraciones o modificaciones del algoritmo ya no produzcan mejoras o cambios significativos en la solución.\">converge</DefinitionTooltip> en una solución óptima. La naturaleza híbrida de esta familia de algoritmos proviene del hecho de que las funciones de coste se evalúan utilizando recursos cuánticos y se optimizan mediante recursos clásicos.\n",
        "\n",
        "1. **Problema de inicialización** : Los algoritmos variacionales comienzan inicializando el ordenador cuántico en un *estado por defecto* $|0\\rangle$, transformándolo después a algún estado deseado (no parametrizado) $|\\rho\\rangle$, que llamaremos *estado de referencia*.\n",
        "\n",
        "   Esta transformación se representa mediante la aplicación de un operador de referencia unitario $U_R$ sobre el estado por defecto, tal que $U_R|0\\rangle = |\\rho\\rangle$.\n",
        "\n",
        "2. **Preparar ansatz** : Para empezar a optimizar iterativamente desde el estado por defecto $|0\\rangle$ al estado objetivo $|\\psi(\\vec\\theta)\\rangle$, debemos definir una *forma variacional* $U_V(\\vec\\theta)$ para representar una colección de estados parametrizados para que nuestro algoritmo variacional los explore.\n",
        "\n",
        "   Nos referimos a cualquier combinación particular de estado de referencia y forma variacional como un ansatz, tal que así: $U_A(\\vec\\theta) := U_V(\\vec\\theta) U_R$. En última instancia, los ansatze adoptarán la forma de circuitos cuánticos parametrizados capaces de llevar el estado por defecto $|0\\rangle$ al estado objetivo $|\\psi(\\vec\\theta)\\rangle$.\n",
        "\n",
        "   En total tendremos:\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "|0\\rangle \\xrightarrow{U_R} U_R|0\\rangle\n",
        "\n",
        "& = |\\rho\\rangle \\xrightarrow{U_V(\\vec{\\theta})} U_A(\\vec{\\theta})|0\\rangle \\\\[1mm]\n",
        "\n",
        "& = U_V(\\vec{\\theta})U_R|0\\rangle \\\\[1mm]\n",
        "\n",
        "& = U_V(\\vec{\\theta})|\\rho\\rangle \\\\[1mm]\n",
        "\n",
        "& = |\\psi(\\vec{\\theta})\\rangle \\\\[1mm]\n",
        "\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "3. **Evaluar la función de coste** : Podemos expresar nuestro problema mediante una *función de coste* $C(\\vec\\theta)$ como una combinación lineal de operadores de Pauli, aplicada a un sistema cuántico. Aunque puede tratarse de información sobre un sistema físico, como la energía o el espín, también podemos codificar problemas no físicos. Podemos aprovechar las primitivas de « IBM Quantum » para hacer frente al ruido mediante la supresión y la mitigación de errores, al tiempo que evaluamos nuestra función de coste.\n",
        "\n",
        "4. **Optimizar parámetros** : Las evaluaciones se llevan a un ordenador clásico, donde un optimizador clásico las analiza y elige el siguiente conjunto de valores para los parámetros variacionales. Si tenemos una solución óptima preexistente, podemos establecerla como *punto inicial* $\\vec\\theta_0$ para *arrancar* nuestra optimización. El uso de este *estado inicial* $|\\psi(\\vec\\theta_0)\\rangle$ podría ayudar a nuestro optimizador a encontrar una solución válida más rápidamente.\n",
        "\n",
        "5. **Se ajustan los parámetros del ansatz con los resultados y se vuelve a ejecutar** : Todo el proceso se repite hasta que se cumplen los criterios de finalización del optimizador clásico y se obtiene un conjunto óptimo de valores de los parámetros $\\vec\\theta^*$. El estado de solución propuesto para nuestro problema será entonces $|\\psi(\\vec\\theta^*)\\rangle = U_A(\\vec\\theta^*)|0\\rangle$.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "8e23f141-350e-4cfc-ae87-c2ee64890607",
      "metadata": {},
      "source": [
        "<span id=\"variational-theorem\" />\n",
        "\n",
        "## Teorema variacional\n",
        "\n",
        "Un objetivo común de los algoritmos variacionales es encontrar el estado cuántico con el valor propio más bajo o más alto de un determinado observable. Una idea clave que utilizaremos es el *teorema variacional* de la mecánica cuántica. Antes de entrar en su enunciado completo, exploremos algunas de las intuiciones matemáticas que lo sustentan.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "3468473d-d97a-4332-8f66-8d74976361e5",
      "metadata": {
        "gloss": {
          "decomposition": {
            "text": "Process of expressing a matrix as a sum of eigenvalues and eigenvectors, which enables the analysis and manipulation of its properties and behavior.",
            "title": "Spectral Decomposition"
          },
          "eigenstate": {
            "text": "State of a physical system in which a magnitude like energy or momentum has a fixed value.",
            "title": "Eigenstate"
          }
        }
      },
      "source": [
        "<span id=\"mathematical-intuition-for-energy-and-ground-states\" />\n",
        "\n",
        "### Intuición matemática para la energía y los estados fundamentales\n",
        "\n",
        "En mecánica cuántica, la energía adopta la forma de un observable cuántico denominado habitualmente *Hamiltoniano*, que denotaremos por $\\hat{\\mathcal{H}}$. Consideremos su <DefinitionTooltip definition=\"Proceso de expresar una matriz como suma de valores y vectores propios, lo que permite analizar y manipular sus propiedades y comportamiento.\">descomposición espectral</DefinitionTooltip> :\n",
        "\n",
        "$$\n",
        "\\hat{\\mathcal{H}} = \\sum_{k=0}^{N-1} \\lambda_k |\\phi_k\\rangle \\langle \\phi_k|\n",
        "$$\n",
        "\n",
        "donde $N$ es la dimensionalidad del espacio de estados, $\\lambda_{k}$ es el $k$ -ésimo eigenvalor o, físicamente, el $k$ -ésimo nivel de energía, y $|\\phi_k\\rangle$ es el correspondiente <DefinitionTooltip definition=\"Estado de un sistema físico en el que una magnitud como la energía o el momento tiene un valor fijo.\">estado propio</DefinitionTooltip> : $\\hat{\\mathcal{H}}|\\phi_k\\rangle = \\lambda_k |\\phi_k\\rangle$, la energía esperada de un sistema en el estado (normalizado) $|\\psi\\rangle$ será:\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "\\langle \\psi | \\hat{\\mathcal{H}} | \\psi \\rangle\n",
        "\n",
        "& = \\langle \\psi |\\bigg(\\sum_{k=0}^{N-1} \\lambda_k |\\phi_k\\rangle \\langle \\phi_k|\\bigg) | \\psi \\rangle \\\\[1mm]\n",
        "\n",
        "& = \\sum_{k=0}^{N-1} \\lambda_k \\langle \\psi |\\phi_k\\rangle \\langle \\phi_k| \\psi \\rangle \\\\[1mm]\n",
        "\n",
        "& = \\sum_{k=0}^{N-1} \\lambda_k |\\langle \\psi |\\phi_k\\rangle|^2 \\\\[1mm]\n",
        "\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "Si tenemos en cuenta que $\\lambda_0\\leq \\lambda_k, \\forall k$, tenemos:\n",
        "\n",
        "$$\n",
        "\\begin{aligned}\n",
        "\\langle \\psi | \\hat{\\mathcal{H}} | \\psi \\rangle\n",
        "\n",
        "& = \\sum_{k=0}^{N-1} \\lambda_k |\\langle \\psi |\\phi_k\\rangle|^2 \\\\[1mm]\n",
        "\n",
        "& \\geq  \\sum_{k=0}^{N-1} \\lambda_0 |\\langle \\psi |\\phi_k\\rangle|^2 \\\\[1mm]\n",
        "\n",
        "& = \\lambda_0 \\sum_{k=0}^{N-1} |\\langle \\psi |\\phi_k\\rangle|^2 \\\\[1mm]\n",
        "\n",
        "& = \\lambda_0 \\\\[1mm]\n",
        "\n",
        "\\end{aligned}\n",
        "$$\n",
        "\n",
        "Como $\\{|\\phi_k\\rangle \\}_{k=0}^{N-1}$ es una base ortonormal, la probabilidad de medir $|\\phi_{k} \\rangle$ es $p_k = |\\langle \\psi |\\phi_{k} \\rangle |^2$, y la suma de todas las probabilidades es tal que $\\sum_{k=0}^{N-1} |\\langle \\psi |\\phi_k\\rangle|^2 = \\sum_{k=0}^{N-1}p_k = 1$. En resumen, la energía esperada de cualquier sistema es superior a la energía más baja o energía del estado fundamental:\n",
        "\n",
        "$$\n",
        "\\langle \\psi | \\hat{\\mathcal{H}} | \\psi \\rangle \\geq \\lambda_0.\n",
        "$$\n",
        "\n",
        "El argumento anterior se aplica a cualquier estado cuántico válido (normalizado) $|\\psi\\rangle$, por lo que es perfectamente posible considerar estados parametrizados $|\\psi(\\vec\\theta)\\rangle$ que dependan de un vector de parámetros $\\vec\\theta$. Aquí es donde entra en juego la parte \"variacional\". Si consideramos una función de coste dada por $C(\\vec\\theta) := \\langle \\psi(\\vec\\theta)|\\hat{\\mathcal{H}}|\\psi(\\vec\\theta)\\rangle$ y queremos minimizarla, el mínimo siempre se satisfará:\n",
        "\n",
        "$$\n",
        "\\min_{\\vec\\theta} C(\\vec\\theta) =\n",
        "\\min_{\\vec\\theta} \\langle \\psi(\\vec\\theta)|\\hat{\\mathcal{H}}|\\psi(\\vec\\theta)\\rangle \\geq \\lambda_0.\n",
        "$$\n",
        "\n",
        "El valor mínimo de $C(\\vec\\theta)$ será el más cercano posible a $\\lambda_0$ utilizando los estados parametrizados $|\\psi(\\vec\\theta)\\rangle$, y solo se alcanzará la igualdad si existe un vector de parámetros $\\vec\\theta^*$ tal que $|\\psi(\\vec\\theta^*)\\rangle = |\\phi_0\\rangle$.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "f22bc219-954d-46bd-8bb8-53b87f795658",
      "metadata": {
        "gloss": {
          "expectation": {
            "text": "Average value of a measurement of a quantum system in a particular state, weighted by the probability of the outcome of the state.",
            "title": "Expectation values"
          }
        }
      },
      "source": [
        "<span id=\"variational-theorem-of-quantum-mechanics\" />\n",
        "\n",
        "### Teorema variacional de la mecánica cuántica\n",
        "\n",
        "Si el estado (normalizado) $|\\psi\\rangle$ de un sistema cuántico depende de un vector de parámetros $\\vec\\theta$, entonces la aproximación óptima del estado fundamental (es decir, el estado propio $|\\phi_0\\rangle$ con el valor propio mínimo $\\lambda_0$ ) es la que minimiza el <DefinitionTooltip definition=\"Valor medio de una medición de un sistema cuántico en un estado determinado, ponderado por la probabilidad del resultado del estado.\">valor de expectativa</DefinitionTooltip> del Hamiltoniano $\\hat{\\mathcal{H}}$ :\n",
        "\n",
        "$$\n",
        "\\langle \\hat{\\mathcal{H}} \\rangle(\\vec\\theta) :=\n",
        "\\langle \\psi(\\vec\\theta) |\\hat{\\mathcal{H}}| \\psi(\\vec\\theta) \\rangle \\geq\n",
        "\\lambda_0\n",
        "$$\n",
        "\n",
        "La razón por la que el teorema variacional se enuncia en términos de mínimos de energía es que incluye una serie de supuestos matemáticos:\n",
        "\n",
        "* Por razones físicas, es necesario que exista un límite inferior finito para la energía $E \\geq \\lambda_0 > -\\infty$, incluso para $N\\rightarrow\\infty$.\n",
        "* Por lo general, no existen límites superiores.\n",
        "\n",
        "Sin embargo, matemáticamente hablando, no hay nada especial en el hamiltoniano $\\hat{\\mathcal{H}}$ más allá de estos supuestos, por lo que el teorema puede generalizarse a otros observables cuánticos y sus estados propios siempre que sigan las mismas restricciones. También hay que tener en cuenta que si existen límites superiores finitos, se podrían utilizar los mismos argumentos matemáticos para maximizar los valores propios cambiando los límites inferiores por los superiores.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "81088f06-649e-4e57-a296-38c51b5053ba",
      "metadata": {},
      "source": [
        "<span id=\"summary\" />\n",
        "\n",
        "## Resumen\n",
        "\n",
        "Con esta lección, has aprendido la visión de alto nivel de los algoritmos variacionales. A lo largo de las siguientes lecciones, exploraremos cada paso con mayor detalle, así como sus ventajas y desventajas asociadas.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "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"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}