{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "255dc213-977b-46de-86f4-3bab0a005340",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Inicialización de qubits\"\n",
        "description: \"Contenido explicativo sobre la ejecución dinámica de la tasa de repetición\"\n",
        "---\n",
        "\n",
        "<span id=\"qubit-initialization\" />\n",
        "\n",
        "# Inicialización de qubits\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6e5f6e09-ed60-4b74-a2fd-72da40d8645e",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Versiones del paquete\">\n",
        "    El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos.\n",
        "    Recomendamos utilizar estas versiones o versiones más recientes.\n",
        "\n",
        "    ```\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "abdfb100-5321-41d7-8aee-117062aed595",
      "metadata": {},
      "source": [
        "Cuando se ejecuta un circuito en una unidad de procesamiento cuántico (QPU) IBM®, se suele insertar un reinicio implícito al principio del circuito para garantizar que los qubits se inicializan a cero. Esto se controla mediante la bandera `init_qubits` , establecida como una [opción de ejecución primitiva](/docs/api/qiskit-ibm-runtime/options-execution-options-v2).\n",
        "\n",
        "Sin embargo, las imperfecciones en el proceso de reinicio pueden introducir errores en la preparación del estado. Para paliar el error, la QPU también inserta un tiempo de retardo de repetición (o `rep_delay`) entre los circuitos. Cada backend tiene un valor predeterminado diferente `rep_delay`, pero normalmente se configura para equilibrar la fidelidad del restablecimiento con el tiempo total de ejecución. Ejecutar `backend.default_rep_delay` para encontrar el valor predeterminado `rep_delay` para una QPU específica.\n",
        "\n",
        "Dado que todas las QPU de IBM utilizan una ejecución con frecuencia de repetición dinámica, puede cambiar la `rep_delay` para cada trabajo. Los circuitos que envías en un trabajo primitivo se agrupan para su ejecución en la QPU. Estos circuitos se ejecutan iterando sobre los circuitos para cada disparo solicitado; la ejecución se realiza por columnas sobre una matriz de circuitos y disparos, como se ilustra en la siguiente figura.\n",
        "\n",
        "![La primera columna representa el disparo 0.  Los circuitos se ejecutan en orden de 0 a 3.  La segunda columna representa la toma 1.  Los circuitos se ejecutan en orden de 0 a 3.  Las demás columnas siguen el mismo patrón.](https://quantum.cloud.ibm.com/docs/images/guides/repetition-rate-execution/circuits_shots_matrix1.avif \"Matriz de ejecución por columnas\")\n",
        "\n",
        "Debido a que `rep_delay` se inserta entre circuitos, cada disparo de la ejecución encuentra este retraso. Por lo tanto, a medida que se reduce el `rep_delay`, el tiempo total de ejecución de la QPU disminuye, a costa de aumentar la tasa de error de preparación del estado, como ilustra la siguiente imagen:\n",
        "\n",
        "![Esta imagen muestra que, a medida que se reduce el valor de rep\\_delay, aumenta la tasa de error en la preparación del estado.](https://quantum.cloud.ibm.com/docs/images/guides/repetition-rate-execution/rep_delay.avif \"Retardo de repetición frente a tasa de error\")\n",
        "\n",
        "Si se establecen tanto `rep_delay=0` como `init_qubits=False`, los circuitos se «fusionan», ya que los qubits comenzarán en el estado final de la toma anterior.\n",
        "\n",
        "Tenga en cuenta que, aunque los circuitos de un trabajo primitivo se agrupan para su ejecución en QPU, no hay garantía sobre el orden en que se ejecutan los circuitos de los PUB. Por ejemplo, si envías `pubs=[pub1, pub2]`, es posible que los circuitos `pub1` de no se ejecuten antes que los de `pub2`. Tampoco hay garantía de que los circuitos del mismo trabajo se ejecuten como un único lote en la QPU.\n",
        "\n",
        "<span id=\"specify-rep_delay-for-a-primitive-job\" />\n",
        "\n",
        "## Especificar `rep_delay` para un trabajo primitivo\n",
        "\n",
        "<Admonition type=\"note\" title=\"Verifique el valor rep_delay para una QPU\">\n",
        "  Verifique siempre el rango `rep_delay` compatible con la QPU específica que esté utilizando. Estos valores no son los mismos para todas las QPU y también pueden cambiar con el tiempo.\n",
        "\n",
        "  Tenga en cuenta que un aumento en `rep_delay` tendrá un impacto directo en su tiempo de ejecución y consumo de capacidad.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "aca7f18c-ee37-4f6f-a6a2-fe389459bb9b",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "\n",
        "# Make sure your backend supports it\n",
        "backend = service.least_busy(\n",
        "    operational=True, min_num_qubits=100, dynamic_reprate_enabled=True\n",
        ")\n",
        "\n",
        "# Determine the allowable range\n",
        "backend.rep_delay_range\n",
        "sampler = Sampler(mode=backend)\n",
        "\n",
        "# Specify a value in the supported range\n",
        "sampler.options.execution.rep_delay = 0.0005"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "53c33092-8d59-4422-b438-1331afbacf17",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximos pasos\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendaciones\">\n",
        "  * Pruebe un ejemplo en el tutorial [Algoritmo de optimización aproximada cuántica (QAOA)](/docs/tutorials/quantum-approximate-optimization-algorithm).\n",
        "  * Consulta cómo [empezar](/docs/guides/get-started-with-estimator) a utilizar Estimator.\n",
        "  * Consulta cómo [empezar](/docs/guides/get-started-with-sampler) a utilizar Sampler.\n",
        "</Admonition>\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": 4
}