{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "b1267e87-e0b3-4934-b4b8-0265fe84adfd",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Técnicas de mitigação e supressão de erros\"\n",
        "description: \"Explicação das técnicas de mitigação e supressão de erros disponíveis em Qiskit Runtime\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore extrapolators */}\n",
        "\n",
        "<span id=\"error-mitigation-and-suppression-techniques\" />\n",
        "\n",
        "# Técnicas de mitigação e supressão de erros\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "349a0e50",
      "metadata": {},
      "source": [
        "<Admonition type=\"note\" title=\"Novo modelo de execução, agora em versão beta\">\n",
        "  A versão beta de um novo modelo de execução já está disponível. O modelo de execução direcionada oferece mais flexibilidade ao personalizar seu fluxo de trabalho de atenuação de erros. Consulte o guia [do modelo de execução direcionada](/docs/guides/directed-execution-model) para obter mais informações.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "7fb66fc9-c519-4904-a6a1-33adc3f8df13",
      "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=\"Versões do pacote\">\n",
        "    O código desta página foi desenvolvido usando os seguintes requisitos.\n",
        "    Recomendamos o uso dessas versões ou de versões mais recentes.\n",
        "\n",
        "    ```\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "076872c0-f8de-4aef-ae13-29078ee8564e",
      "metadata": {},
      "source": [
        "Técnicas de mitigação e supressão de erros são utilizadas para melhorar a qualidade dos resultados ao aumentar a escala para cargas de trabalho maiores. Esta página fornece explicações de alto nível sobre as técnicas de supressão e mitigação de erros disponíveis através do Qiskit Runtime.\n",
        "\n",
        "A célula a seguir importa a primitiva Estimator e cria um backend que será usado para inicializar o Estimator em células de código posteriores.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "39ef65e5",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import EstimatorV2 as Estimator\n",
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ad548ef5-f1c1-4def-b551-b3ece2032065",
      "metadata": {},
      "source": [
        "<span id=\"dynamical-decoupling\" />\n",
        "\n",
        "## Desacoplamento dinâmico\n",
        "\n",
        "Os circuitos quânticos são executados no hardware IBM® como sequências de pulsos de micro-ondas que precisam ser programados e executados em intervalos de tempo precisos.\n",
        "Infelizmente, interações indesejadas entre qubits podem levar a erros coerentes em qubits ociosos. O desacoplamento dinâmico funciona com a inserção de sequências de pulsos em qubits ociosos para cancelar aproximadamente o efeito desses erros. Cada sequência de pulsos inserida equivale a uma operação de identidade, mas a presença física dos pulsos tem o efeito de suprimir erros.\n",
        "Há muitas opções possíveis de sequências de pulso, e qual sequência é melhor para cada caso específico continua sendo uma [área ativa de pesquisa](https://journals.aps.org/prapplied/abstract/10.1103/PhysRevApplied.20.064027).\n",
        "\n",
        "Observe que a dissociação dinâmica é útil principalmente para circuitos que contêm lacunas nas quais alguns qubits ficam ociosos sem que nenhuma operação atue sobre eles. Se as operações no circuito forem muito densas, de modo que todos os qubits estejam ocupados na maior parte do tempo, a adição de pulsos de desacoplamento dinâmico poderá não melhorar o desempenho. De fato, ele pode até piorar o desempenho devido a imperfeições nos próprios pulsos.\n",
        "\n",
        "O diagrama abaixo mostra a dissociação dinâmica com uma sequência de pulsos XX. O circuito abstrato à esquerda é mapeado em uma programação de pulsos de micro-ondas no canto superior direito. A parte inferior direita mostra a mesma programação, mas com uma sequência de dois pulsos X inseridos durante um período ocioso do primeiro qubit.\n",
        "\n",
        "![Representação da dissociação dinâmica](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/error-mitigation-explanation/dd.avif)\n",
        "\n",
        "O desacoplamento dinâmico pode ser ativado definindo `enable` como `True` nas [opções de desacoplamento dinâmico](/docs/api/qiskit-ibm-runtime/options-dynamical-decoupling-options). A opção `sequence_type` pode ser usada para escolher entre várias sequências de pulso diferentes. O tipo de sequência padrão é `\"XX\"`.\n",
        "\n",
        "A célula de código a seguir mostra como ativar o desacoplamento dinâmico para o Estimador e selecionar uma sequência de desacoplamento dinâmico.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "cc057e3f-f592-434e-8bb2-96f901564318",
      "metadata": {
        "jp-MarkdownHeadingCollapsed": true,
        "vscode": {
          "languageId": "plaintext"
        }
      },
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.dynamical_decoupling.enable = True\n",
        "estimator.options.dynamical_decoupling.sequence_type = \"XpXm\""
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "56ed5785-e3a8-4dc5-8b55-ef876fccd592",
      "metadata": {
        "editable": true,
        "slideshow": {
          "slide_type": ""
        },
        "tags": []
      },
      "source": [
        "<span id=\"pauli-twirling\" />\n",
        "\n",
        "## Pauli girando\n",
        "\n",
        "O Twirling, também conhecido como [compilação aleatória](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.94.052325), é uma técnica amplamente usada para converter canais de ruído arbitrários em canais de ruído com estrutura mais específica.\n",
        "\n",
        "O giro de Pauli é um tipo especial de giro que usa operações de Pauli. Ele tem o efeito de transformar qualquer canal quântico em um canal Pauli. Executado sozinho, ele pode atenuar o ruído coerente porque o ruído coerente tende a se acumular quadraticamente com o número de operações, enquanto o ruído Pauli se acumula linearmente. O giro de Pauli é frequentemente combinado com outras técnicas de atenuação de erros que funcionam melhor com o ruído de Pauli do que com o ruído arbitrário.\n",
        "\n",
        "O giro de Pauli é implementado ao intercalar um conjunto escolhido de portas com portas de Pauli de um único qubit escolhidas aleatoriamente, de modo que o efeito ideal da porta permaneça o mesmo. O resultado é que um único circuito é substituído por um conjunto aleatório de circuitos, todos com o mesmo efeito ideal. Ao fazer a amostragem do circuito, as amostras são extraídas de várias instâncias aleatórias, em vez de apenas uma única.\n",
        "\n",
        "![Representação de Pauli girando](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/error-mitigation-explanation/pauli_twirling.svg)\n",
        "\n",
        "Como a maioria dos erros no hardware quântico atual vem de portas de dois qubits, essa técnica costuma ser aplicada exclusivamente a portas de dois qubits (nativas). O diagrama a seguir mostra alguns giros de Pauli para as portas CNOT e ECR. Cada circuito em uma linha tem o mesmo efeito ideal.\n",
        "\n",
        "![Representação de giros de portão](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/error-mitigation-explanation/gate_twirls.avif)\n",
        "\n",
        "O giro de Pauli pode ser ativado definindo `enable_gates` como `True` nas [opções de giro](/docs/api/qiskit-ibm-runtime/options-twirling-options). Outras opções notáveis incluem:\n",
        "\n",
        "* `num_randomizations`: O número de instâncias de circuito a serem extraídas do conjunto de circuitos girados.\n",
        "* `shots_per_randomization`: O número de disparos a serem amostrados de cada instância do circuito.\n",
        "\n",
        "A célula de código a seguir mostra como ativar o efeito de rotação de Pauli e definir essas opções para o Estimator. Não é necessário definir explicitamente nenhuma dessas opções.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "c3e12d44",
      "metadata": {},
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.twirling.enable_gates = True\n",
        "estimator.options.twirling.num_randomizations = 32\n",
        "estimator.options.twirling.shots_per_randomization = 100"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "ad9d9159-4277-4aec-bf26-da748e240f38",
      "metadata": {
        "editable": true,
        "slideshow": {
          "slide_type": ""
        },
        "tags": []
      },
      "source": [
        "<span id=\"trex\" />\n",
        "\n",
        "<span id=\"twirled-readout-error-extinction-trex\" />\n",
        "\n",
        "## Erro de leitura do TREX ( eXtinction )\n",
        "\n",
        "[O TREX ( eXtinction )](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.105.032620) atenua o efeito dos erros de medição na estimativa dos valores esperados das observáveis de Pauli.\n",
        "Baseia-se no conceito de medições giradas, que são realizadas substituindo-se aleatoriamente portas de medição por uma sequência composta por (1) uma porta Pauli X, (2) uma medição e (3) uma inversão clássica de bits. Assim como na rotação padrão do portão, essa sequência equivale a uma medição simples na ausência de ruído, conforme ilustrado no diagrama a seguir:\n",
        "\n",
        "![Representação do movimento giratório durante a medição](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/error-mitigation-explanation/measurement_twirling.svg)\n",
        "\n",
        "Na presença de erro de leitura, a rotação da medição tem o efeito de diagonalizar a matriz de transferência do erro de leitura, facilitando sua inversão. Um termo de reescalonamento proveniente do canal de ruído diagonal é aprendido por meio da\n",
        "avaliação comparativa de circuitos aleatórios inicializados no estado zero. Isso permite\n",
        "que o serviço elimine o desvio dos valores esperados resultantes do\n",
        "ruído de leitura. A estimativa da matriz de transferência de erros de leitura requer a execução de circuitos de calibração adicionais, o que acarreta uma pequena sobrecarga.\n",
        "\n",
        "<span id=\"enable-trex-by-using-the-measure_mitigation-option\" />\n",
        "\n",
        "### Ative o TREX usando a `measure_mitigation` opção\n",
        "\n",
        "O TREX pode ser ativado definindo `measure_mitigation` como `True` nas [opções de resiliência Qiskit Runtime](/docs/api/qiskit-ibm-runtime/options-resilience-options-v2) do Estimator. As opções de aprendizado de ruído de medição são descritas [aqui](/docs/api/qiskit-ibm-runtime/options-measure-noise-learning-options). Assim como no caso do gate twirling, você pode definir o número de randomizações do circuito e o número de disparos por randomização.\n",
        "\n",
        "A célula de código a seguir mostra como ativar o TREX e definir essas opções para o Estimator. Nenhuma dessas opções precisa ser definida explicitamente.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "80c858e3",
      "metadata": {},
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.resilience.measure_mitigation = True\n",
        "estimator.options.resilience.measure_noise_learning.num_randomizations = 32\n",
        "estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a0c3f58",
      "metadata": {},
      "source": [
        "<span id=\"enable-trex-by-using-the-resilience_level-option\" />\n",
        "\n",
        "### Ative o TREX usando a `resilience_level` opção\n",
        "\n",
        "Você pode ativar o TREX definindo o [nível de resiliência](/docs/guides/estimator-noise-management#resilience) para `1`, conforme mostrado no exemplo a seguir.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "de92bffd",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "from qiskit_ibm_runtime import EstimatorV2 as Estimator\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy(operational=True, simulator=False)\n",
        "\n",
        "# Setting options during primitive initialization\n",
        "estimator = Estimator(backend, options={\"resilience_level\": 1})"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "7f345691-8330-40f5-a5c6-d6c5fb93409a",
      "metadata": {
        "editable": true,
        "slideshow": {
          "slide_type": ""
        },
        "tags": []
      },
      "source": [
        "<span id=\"zne\" />\n",
        "\n",
        "<span id=\"zero-noise-extrapolation-zne\" />\n",
        "\n",
        "## Extrapolacão sem ruído (ZNE)\n",
        "\n",
        "A extrapolação de ruído zero (ZNE) é uma técnica para atenuar erros na estimativa de valores de expectativa de observáveis. Embora muitas vezes melhore os resultados, não é garantido que produza um resultado imparcial.\n",
        "\n",
        "A ZNE consiste em dois estágios:\n",
        "\n",
        "1. *Amplificação de ruído* : O circuito quântico original é executado várias vezes com diferentes taxas de ruído.\n",
        "2. *Extrapolação* : O resultado ideal é estimado pela extrapolação dos resultados do valor de expectativa com ruído para o limite de ruído zero.\n",
        "\n",
        "Os estágios de amplificação e extrapolação de ruído podem ser implementados de várias maneiras diferentes. Qiskit Runtime implementa a amplificação de ruído por \"dobragem de porta digital\", o que significa que as portas de dois qubits são substituídas por sequências equivalentes da porta e seu inverso. Por exemplo, a substituição de um $U$ unitário por $U U^\\dagger U$ produziria um fator de amplificação de ruído de 3. Para a extrapolação, você pode escolher uma das várias formas funcionais, incluindo um ajuste linear ou um ajuste exponencial.\n",
        "A imagem abaixo mostra a dobragem da porta digital à esquerda e o procedimento de extrapolação à direita.\n",
        "\n",
        "![Representação da ZNE](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/error-mitigation-explanation/zne.avif)\n",
        "\n",
        "A sobrecarga desse método varia proporcionalmente ao número de fatores de ruído. As\n",
        "configurações padrão calculam o valor esperado com três fatores de ruído,\n",
        "resultando em uma sobrecarga de aproximadamente 3x.\n",
        "\n",
        "<span id=\"enable-zne-by-using-the-zne_mitigation-option\" />\n",
        "\n",
        "### Ative o ZNE usando a `zne_mitigation` opção\n",
        "\n",
        "A ZNE pode ser ativada definindo `zne_mitigation` como `True` nas [opções de resiliência Qiskit Runtime](/docs/api/qiskit-ibm-runtime/options-resilience-options-v2) do Estimator.\n",
        "As opções do site Qiskit Runtime para ZNE são descritas [aqui](/docs/api/qiskit-ibm-runtime/options-zne-options). As seguintes opções são notáveis:\n",
        "\n",
        "* `noise_factors`: Os fatores de ruído a serem usados para amplificação de ruído.\n",
        "* `extrapolator`: A forma funcional a ser usada para a extrapolação.\n",
        "\n",
        "A célula de código a seguir mostra como habilitar o ZNE e definir essas opções para o Estimator. Nenhuma dessas opções precisa ser definida explicitamente.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "06de4431",
      "metadata": {},
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.resilience.zne_mitigation = True\n",
        "estimator.options.resilience.zne.noise_factors = (1, 3, 5)\n",
        "estimator.options.resilience.zne.extrapolator = \"exponential\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "600ee406",
      "metadata": {},
      "source": [
        "<span id=\"enable-zne-by-using-the-resilience_level-option\" />\n",
        "\n",
        "### Ative o ZNE usando a `resilience_level` opção\n",
        "\n",
        "Você pode ativar o ZNE (juntamente com o TREX e o gate twirling) definindo o [nível de resiliência](/docs/guides/estimator-noise-management#resilience) para `2`, conforme mostrado no exemplo a seguir.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "7b644752",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "from qiskit_ibm_runtime import EstimatorV2 as Estimator\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy(operational=True, simulator=False)\n",
        "\n",
        "# Setting options during primitive initialization\n",
        "estimator = Estimator(backend, options={\"resilience_level\": 2})"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e5dcab7b",
      "metadata": {},
      "source": [
        "<span id=\"pea\" />\n",
        "\n",
        "<span id=\"probabilistic-error-amplification-pea\" />\n",
        "\n",
        "## Amplificação de erro probabilística (PEA)\n",
        "\n",
        "Um dos principais desafios da ZNE é amplificar com precisão o ruído que afeta o circuito-alvo. A dobragem de porta oferece uma maneira fácil de realizar essa amplificação, mas é potencialmente imprecisa e pode levar a resultados incorretos.  Consulte o artigo [\"Scalable error mitigation for noisy quantum circuits produces competitive expectation values\"](https://arxiv.org/pdf/2108.09197) e, especificamente, a página 4 das informações complementares para obter detalhes. A amplificação de erro probabilística oferece uma abordagem mais precisa para a amplificação de erro por meio do aprendizado de ruído.\n",
        "\n",
        "A PEA é uma técnica mais sofisticada que realiza experimentos preliminares para reconstruir o ruído e, em seguida, usa essas informações para realizar uma amplificação precisa. Ele começa aprendendo o modelo de ruído giratório de cada camada de portas emaranhadas no circuito antes de serem executadas (consulte [LayerNoiseLearningOptions](/docs/api/qiskit-ibm-runtime/options-layer-noise-learning-options) para ver as opções de aprendizado relevantes). Após a fase de aprendizado, os circuitos são executados em cada fator de ruído, onde cada camada de emaranhamento dos circuitos é amplificada pela injeção probabilística de ruído de um único qubit proporcional ao modelo de ruído aprendido correspondente. Consulte o artigo [\"Evidence for the utility of quantum computing before fault tolerance\"](https://www.nature.com/articles/s41586-023-06096-3) para obter mais detalhes.\n",
        "\n",
        "A PEA consiste em três estágios:\n",
        "\n",
        "1. *Aprendizado* : O modelo de ruído giratório de cada camada de portas de emaranhamento no circuito é aprendido.\n",
        "2. *Amplificação de ruído* : O circuito quântico original é executado várias vezes com diferentes fatores de ruído.\n",
        "3. *Extrapolação* : O resultado ideal é estimado pela extrapolação dos resultados do valor de expectativa com ruído para o limite de ruído zero.\n",
        "\n",
        "Para experimentos em escala de serviços públicos, a PEA é geralmente a melhor opção.\n",
        "\n",
        "Como a PEA é uma técnica de amplificação de ruído ZNE, você também precisa ativar a ZNE configurando `resilience.zne_mitigation = True`. Outras [`resilience.zne`](/docs/api/qiskit-ibm-runtime/options-zne-options) opções podem ser usadas adicionalmente para definir extrapoladores, níveis de amplificação e assim por diante. A PEA requer um modelo de ruído, que é gerado automaticamente ao usar primitivos.\n",
        "\n",
        "O trecho a seguir fornece um exemplo em que a PEA é usada para atenuar o resultado de um trabalho do Estimator:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "4947f442",
      "metadata": {},
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.resilience.zne_mitigation = True\n",
        "estimator.options.resilience.zne.amplifier = \"pea\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fcc40cb7-45b7-4248-84c4-aa7f26ba50ff",
      "metadata": {},
      "source": [
        "<span id=\"pec\" />\n",
        "\n",
        "<span id=\"probabilistic-error-cancellation-pec\" />\n",
        "\n",
        "## Cancelamento probabilístico de erros (PEC)\n",
        "\n",
        "O cancelamento de erro probabilístico (PEC) é uma técnica para atenuar erros na estimativa de valores de expectativa de observáveis. Ao contrário do ZNE, ele retorna uma estimativa imparcial do valor esperado. No entanto, em geral, ele incorre em uma sobrecarga maior.\n",
        "\n",
        "No PEC, o efeito de um circuito-alvo ideal é expresso como uma combinação linear de circuitos ruidosos que são realmente implementáveis na prática:\n",
        "\n",
        "$$\n",
        "\\mathcal{O}_{\\text{ideal}} = \\sum_{i} \\eta_i \\mathcal{O}_{noisy, i}\n",
        "$$\n",
        "\n",
        "A saída do circuito ideal pode então ser reproduzida pela execução de diferentes instâncias de circuitos ruidosos extraídos de um conjunto aleatório definido pela combinação linear. Se os coeficientes $\\eta_i$ formarem uma distribuição de probabilidade, eles poderão ser usados diretamente como as probabilidades do conjunto. Na prática, alguns dos coeficientes são negativos, portanto, eles formam uma distribuição de quase-probabilidade. Eles ainda podem ser usados para definir um conjunto aleatório, mas há uma sobrecarga de amostragem relacionada à negatividade da distribuição de quase-probabilidade, que é caracterizada pela quantidade\n",
        "\n",
        "$$\n",
        "\\gamma = \\sum_{i} \\lvert \\eta_i \\rvert \\geq 1.\n",
        "$$\n",
        "\n",
        "A sobrecarga de amostragem é um fator multiplicativo do número de disparos necessários para estimar um valor de expectativa com uma determinada precisão, em comparação com o número de disparos que seriam necessários no circuito ideal. Ele é escalonado quadraticamente com $\\gamma$, que, por sua vez, é escalonado exponencialmente com a profundidade do circuito.\n",
        "\n",
        "O PEC pode ser ativado definindo `pec_mitigation` como `True` nas [opções de resiliência Qiskit Runtime](/docs/api/qiskit-ibm-runtime/options-resilience-options-v2) do Estimator.\n",
        "As opções do Qiskit Runtime para o PEC são descritas [aqui](/docs/api/qiskit-ibm-runtime/options-pec-options). Um limite para a sobrecarga de amostragem pode ser definido usando a opção `max_overhead` . Observe que a limitação da sobrecarga de amostragem pode fazer com que a precisão do resultado exceda a precisão solicitada. O valor padrão de `max_overhead` é 100.\n",
        "\n",
        "A célula de código a seguir mostra como habilitar o PEC e definir a `max_overhead` opção para o Estimator.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "f4ae33f2-3a4d-4869-952b-e5ebd9e69efc",
      "metadata": {},
      "outputs": [],
      "source": [
        "estimator = Estimator(mode=backend)\n",
        "estimator.options.resilience.pec_mitigation = True\n",
        "estimator.options.resilience.pec.max_overhead = 100"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b9b598a2-03c0-4ff9-ac47-d187693ac6e2",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximas etapas\n",
        "\n",
        "* Confira o [tutorial](/docs/tutorials/combine-error-mitigation-techniques) sobre a combinação de opções de atenuação de erros com a primitiva Estimator.\n",
        "* [Configure o gerenciamento de ruído com o Estimator](/docs/guides/estimator-noise-management).\n",
        "* [Configure o gerenciamento de ruídos com o Sampler](/docs/guides/sampler-noise-management).\n",
        "* Explore outras [opções](/docs/guides/runtime-options-overview) para as primitivas do `Qiskit Runtime`.\n",
        "* Decida em que [modo de execução](/docs/guides/execution-modes) deseja executar sua tarefa.\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": 5
}