{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "255dc213-977b-46de-86f4-3bab0a005340",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Inizializzazione dei qubit\"\n",
        "description: \"Contenuto esplicativo sull'esecuzione della frequenza di ripetizione dinamica\"\n",
        "---\n",
        "\n",
        "<span id=\"qubit-initialization\" />\n",
        "\n",
        "# Inizializzazione dei qubit\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=\"Versioni del pacchetto\">\n",
        "    Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti.\n",
        "    Si consiglia di utilizzare queste versioni o versioni più recenti.\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": [
        "Quando un circuito viene eseguito su un'unità di elaborazione quantistica (QPU) IBM®, all'inizio del circuito viene tipicamente inserito un reset implicito per garantire che i qubit siano inizializzati a zero. Questo è controllato dal flag `init_qubits` , impostato come [opzione di esecuzione primitiva](/docs/api/qiskit-ibm-runtime/options-execution-options-v2).\n",
        "\n",
        "Tuttavia, eventuali imperfezioni nel processo di ripristino possono causare errori nella preparazione dello stato. Per mitigare l'errore, la QPU inserisce anche un ritardo di ripetizione (o `rep_delay`) tra i circuiti. Ogni backend ha un valore predefinito diverso `rep_delay`, ma solitamente è impostato per bilanciare la fedeltà del ripristino con il tempo totale di esecuzione. Esegui `backend.default_rep_delay` per trovare l'impostazione predefinita `rep_delay` per una QPU specifica.\n",
        "\n",
        "Poiché tutte le QPU IBM utilizzano l'esecuzione con frequenza di ripetizione dinamica, è possibile modificare il `rep_delay` per ogni lavoro. I circuiti inviati in un lavoro primitivo vengono raggruppati in batch per l'esecuzione sulla QPU. Questi circuiti vengono eseguiti iterando sui circuiti per ogni colpo richiesto; l'esecuzione avviene per colonne su una matrice di circuiti e colpi, come illustrato nella figura seguente.\n",
        "\n",
        "![La prima colonna rappresenta il colpo 0.  I circuiti vengono eseguiti in ordine da 0 a 3.  La seconda colonna rappresenta lo scatto 1.  I circuiti vengono eseguiti in ordine da 0 a 3.  Le altre colonne seguono lo stesso schema.](https://quantum.cloud.ibm.com/docs/images/guides/repetition-rate-execution/circuits_shots_matrix1.avif \"Matrice di esecuzione per colonne\")\n",
        "\n",
        "Poiché `rep_delay` è inserito tra i circuiti, ogni colpo dell'esecuzione incontra questo ritardo. Pertanto, man mano che si abbassa il `rep_delay`, il tempo totale di esecuzione della QPU diminuisce, a scapito di un aumento del tasso di errore nella preparazione dello stato, come illustra l'immagine seguente:\n",
        "\n",
        "![Questa immagine mostra che, al diminuire del valore di ritardo di ripetizione, aumenta il tasso di errore di preparazione dello stato.](https://quantum.cloud.ibm.com/docs/images/guides/repetition-rate-execution/rep_delay.avif \"Ritardo di ripetizione rispetto al tasso di errore\")\n",
        "\n",
        "Se si impostano sia `rep_delay=0` che `init_qubits=False`, i circuiti si \"uniscono\", poiché i qubit inizieranno nello stato finale del tiro precedente.\n",
        "\n",
        "Si noti che, mentre i circuiti in un lavoro primitivo vengono raggruppati in batch per l'esecuzione QPU, non vi è alcuna garanzia sull'ordine di esecuzione dei circuiti provenienti dai PUB. Ad esempio, se invii `pubs=[pub1, pub2]`, i circuiti da `pub1` potrebbero non essere eseguiti prima di quelli da `pub2`. Non vi è inoltre alcuna garanzia che i circuiti dello stesso lavoro vengano eseguiti come un unico batch sulla QPU.\n",
        "\n",
        "<span id=\"specify-rep_delay-for-a-primitive-job\" />\n",
        "\n",
        "## Specificare `rep_delay` per un lavoro primitivo\n",
        "\n",
        "<Admonition type=\"note\" title=\"Verificare il valore rep_delay per una QPU\">\n",
        "  Verificare sempre l'intervallo `rep_delay` supportato per la QPU specifica in uso. Questi valori non sono gli stessi per ogni QPU e possono anche cambiare nel tempo.\n",
        "\n",
        "  Si prega di notare che un aumento di `rep_delay` avrà un impatto diretto sui tempi di esecuzione e sul consumo di capacità.\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",
        "## Passi successivi\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Suggerimenti\">\n",
        "  * Provate un esempio nel tutorial sull' [algoritmo di ottimizzazione approssimativa quantistica (QAOA)](/docs/tutorials/quantum-approximate-optimization-algorithm).\n",
        "  * Scopri come [iniziare](/docs/guides/get-started-with-estimator) a usare Estimator.\n",
        "  * Scopri come [iniziare](/docs/guides/get-started-with-sampler) a usare 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
}