{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "dde95705",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Otimizador de Parity Twine: uma função do Qiskit, de ParityQC\"\n",
        "description: \"Resolva problemas de otimização em computadores quânticos usando o Parity Twine. Minimiza o número de portas e a profundidade dos circuitos para executar algoritmos de otimização quântica.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore parityqc QOBLIB  */}\n",
        "\n",
        "<span id=\"parity-twine-optimizer-a-qiskit-function-by-parityqc\" />\n",
        "\n",
        "# Otimizador de Parity Twine: uma função do Qiskit, de ParityQC\n",
        "\n",
        "*Consulte a [referência da API](/docs/api/functions/parity-twine-optimizer)*\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Qiskit Functions são um recurso experimental disponível apenas para usuários dos planos “ IBM Quantum® Premium Plan ”, “Flex Plan” e “ On-Prem ” (por meio da API do IBM Quantum Platform ). Elas estão em fase de pré-lançamento e estão sujeitas a alterações.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"overview\" />\n",
        "\n",
        "## Visão geral\n",
        "\n",
        "O Parity Twine Optimizer permite que os usuários resolvam problemas de otimização com computadores quânticos utilizando o [método Parity Twine](https://arxiv.org/abs/2501.14020).\n",
        "Essa abordagem, baseada na Arquitetura Parity, utiliza o compilador “ ParityQC ” para minimizar o número de portas e a profundidade do circuito necessários para executar um algoritmo quântico, levando em conta a conectividade dos dispositivos.\n",
        "\n",
        "Essa redução no uso de recursos permite resolver problemas de otimização relevantes para a indústria em escalas que seriam inviáveis com métodos de transpilagem padrão, que exigem uso intensivo de SWAP.\n",
        "O Parity Twine Optimizer automatiza as etapas de transpilagem e pode ser utilizado com o mínimo de intervenção do usuário.\n",
        "\n",
        "A abordagem Parity Twine supera todos os outros métodos de compilação no que diz respeito à redução do número de portas e da profundidade dos circuitos para algoritmos quânticos, como o\n",
        "[algoritmo quântico de otimização aproximada (QAOA)](https://arxiv.org/abs/2501.14020) e [a transformada de Fourier quântica (QFT)](https://arxiv.org/abs/2604.12465).\n",
        "Ao abstrair a informação quântica dos qubits físicos, as interações não locais são implementadas sem portas SWAP. Em vez disso, as cadeias de Parity Twine (sequências de portas CNOT) distribuem sistematicamente\n",
        "informações de paridade lógica entre os qubits.\n",
        "\n",
        "O otimizador utiliza o QAOA para minimizar a energia de uma determinada função de custo. O QAOA é um algoritmo variacional híbrido quântico-clássico projetado para resolver problemas de otimização combinatória por meio da aproximação do estado fundamental\n",
        "de um hamiltoniano de custo ( $H_C$ ). Um termo de mistura ( $H_B$ ) impulsiona as transições entre os estados para explorar o espaço de soluções. Uma sequência alternada desses termos, controlada pelos parâmetros $\\gamma$ e $\\beta$, define o operador unitário\n",
        "$U(\\gamma, \\beta) = \\Pi_{i=1}^p e^{-i \\beta_i H_B} e^{-i \\gamma_i H_C}$, que atua sobre o estado inicial.\n",
        "\n",
        "A codificação do problema unitário, exp( $-i \\beta H_C)$ ), requer a codificação de todos os operadores de rotação de corpos lógicos $n$ (exp( $-i \\beta J_{i,j,...n}Z_iZ_j...Z_n$ )).\n",
        "Isso pode ser realizado utilizando geradores de corpos $n$ (Redes de Parity Twine), que reduzem a profundidade do circuito QAOA e o número de portas de dois qubits.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "02f8e130",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Descrição\n",
        "\n",
        "A entrada do Parity Twine Optimizer consiste em um problema de otimização, o nome do hardware IBM Quantum escolhido e argumentos opcionais adicionais para personalizar as configurações de transpilagem e execução em hardware. A função do otimizador\n",
        "encaminha a definição do problema para o Compilador Parity Twine. A Figura 1 apresenta um resumo do fluxo de trabalho da função.\n",
        "\n",
        "![Fluxo](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/process_pipeline.avif \"de trabalho do Parity Twine Optimizer Figura 1: Resumo do fluxo de trabalho do Parity Twine Optimizer.\")\n",
        "\n",
        "O problema de otimização de entrada é pré-processado em um hamiltoniano (normalizado). O compilador ParityQC, então, constrói um circuito de ansatz Parity Twine parametrizado, que é transpilado para um ansatz lógico compatível com o\n",
        "conjunto de portas nativo do hardware escolhido.\n",
        "\n",
        "Os parâmetros do circuito QAOA são tradicionalmente otimizados por meio da abordagem [“efficient depth one”](https://github.com/qiskit-community/qaoa_training_pipeline/blob/main/how_tos/efficient_depth_one.ipynb) e atribuídos ao circuito transpilado.\n",
        "Como é utilizada uma única rodada do QAOA, os parâmetros ótimos de $\\gamma$ e $\\beta$ são obtidos por meio de uma busca em grade em uma CPU, sem a necessidade de uma otimização iterativa dispendiosa\n",
        "ao longo de muitas chamadas de circuito. Isso reduz significativamente o tempo de execução do otimizador na QPU. O tempo de execução por circuito é determinado principalmente pela sobrecarga constante necessária para executar uma tarefa na QPU.\n",
        "Com os parâmetros do circuito definidos, o trabalho é enviado para a QPU especificada IBM®.\n",
        "\n",
        "Os resultados brutos são, então, submetidos a um pós-processamento. Esta etapa utiliza uma busca gananciosa local que percorre aleatoriamente a sequência de solução e inverte os valores dos bits, caso isso reduza o valor da função de custo.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "b34fe075",
      "metadata": {},
      "source": [
        "<span id=\"benchmarks\" />\n",
        "\n",
        "## Referências\n",
        "\n",
        "<Admonition type=\"caution\" title=\"Renúncia de responsabilidade\">\n",
        "  O desempenho pode depender tanto da instância do problema quanto das etapas de processamento subsequentes. Em alguns casos, amostras clássicas e amostras geradas quânticamente podem atingir uma qualidade final de solução semelhante após um pós-processamento equivalente. A avaliação deve, portanto, levar em conta todo o fluxo de trabalho de otimização.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"sherrington-kirkpatrick-model\" />\n",
        "\n",
        "### Modelo de Sherrington-Kirkpatrick\n",
        "\n",
        "A Figura 2 demonstra a eficácia do Otimizador de Cordas de Paridade. Isso compara os resultados obtidos com o uso do otimizador aos resultados de amostragem aleatória para o modelo de Sherrington-Kirkpatrick\n",
        "com um número crescente de qubits.\n",
        "\n",
        "O pós-processamento tanto dos resultados aleatórios quanto dos obtidos pelo otimizador leva a estados fundamentais exatos, mas o resultado bruto de energia mínima gerado pelo Twine QAOA é sempre melhor do que os\n",
        "valores aleatórios. Para os maiores números de qubits considerados (90 e 100), o ruído do hardware prejudica o resultado do otimizador, fazendo com que ele volte aos valores brutos correspondentes à amostragem aleatória.\n",
        "\n",
        "![Testes](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/benchmark_run_sk.avif \"de desempenho do Parity Twine Optimizer para o modelo SK Figura 2: Resultados dos testes de desempenho do Parity Twine Optimizer para o modelo SK em comparação com a amostragem aleatória. Os resultados foram obtidos no\n",
        "\\`ibm_boston`, com 20.000 tentativas, repetidas três vezes.\")\n",
        "\n",
        "Consulte este [tutorial](/docs/tutorials/parity-twine-optimizer-sk) para obter uma introdução ao modelo de Sherrington-Kirkpatrick e detalhes sobre como resolvê-lo com o Parity Twine Optimizer.\n",
        "\n",
        "<span id=\"market-split-problem\" />\n",
        "\n",
        "### Problema de divisão do mercado\n",
        "\n",
        "A Tabela 1 apresenta métricas específicas de desempenho do Parity Twine Optimizer aplicadas a várias instâncias do problema de divisão de mercado (MS).\n",
        "Esses [dados](https://github.com/ZIB-AOPT/QOBLIB/tree/main/01-marketsplit/submissions/20260728_Parity_Twine_Optimizer) foram obtidos da [QOBLIB — Quantum Optimization Benchmarking Library](https://github.com/ZIB-AOPT/QOBLIB) — e correspondem a\n",
        "enviados à\n",
        "biblioteca utilizando o Parity Twine Optimizer.\n",
        "\n",
        "A violação MS é uma métrica de precisão que mede o quanto a solução está longe de satisfazer todas as restrições, definida como $\\sum_i ((Ax - b)_i)^2$. Valores mais baixos dessa métrica indicam soluções mais precisas.\n",
        "A Tabela 1 apresenta os valores médios de cinco execuções de cada instância, utilizando o Parity Twine Optimizer com o dispositivo `ibm_boston` como backend e 100.000 shots.\n",
        "É informada a violação mínima do MS obtida a partir das execuções de cada instância.\n",
        "\n",
        "| Instância        | Qubits | Portas de dois qubits | Profundidade de dois qubits | Violação da EM | Tempo de mapeamento (s) | Tempo de execução da QPU (s) | Tempo de pós-processamento (s) |\n",
        "| :--------------- | :----- | :-------------------- | :-------------------------- | :------------- | :---------------------- | :--------------------------- | :----------------------------- |\n",
        "| ms\\_03\\_050\\_002 | 20     | 399                   | 76                          | 0              | 45                      | 29                           | 82                             |\n",
        "| ms\\_03\\_100\\_022 | 20     | 399                   | 76                          | 0              | 30                      | 29                           | 77                             |\n",
        "| ms\\_03\\_200\\_177 | 20     | 399                   | 76                          | 0              | 33                      | 29                           | 63                             |\n",
        "| ms\\_04\\_050\\_001 | 30     | 899                   | 116                         | 1              | 80                      | 29                           | 216                            |\n",
        "| ms\\_04\\_100\\_003 | 30     | 899                   | 116                         | 2              | 89                      | 29                           | 187                            |\n",
        "| ms\\_04\\_200\\_030 | 30     | 899                   | 116                         | 3              | 89                      | 29                           | 219                            |\n",
        "| ms\\_05\\_100\\_003 | 40     | 1599                  | 156                         | 3              | 237                     | 30                           | 364                            |\n",
        "| ms\\_06\\_050\\_001 | 50     | 2499                  | 196                         | 4              | 499                     | 30                           | 464                            |\n",
        "| ms\\_07\\_050\\_001 | 60     | 3599                  | 236                         | 17             | 858                     | 31                           | 637                            |\n",
        "| ms\\_08\\_050\\_001 | 65     | 4899                  | 276                         | 36             | 1561                    | 31                           | 773                            |\n",
        "\n",
        "Tabela 1: Métricas de desempenho para diferentes instâncias do problema de divisão de mercado. Os nomes das instâncias referem-se aos exemplos correspondentes na biblioteca de problemas [QOBLIB](https://github.com/ZIB-AOPT/QOBLIB). Conforme mencionado anteriormente na seção de descrição, o tempo de execução na QPU é mínimo e quase constante, uma vez que é utilizada apenas uma rodada do algoritmo QAOA com parâmetros de circuito otimizados obtidos em uma CPU.\n",
        "\n",
        "Consulte este [tutorial](/docs/tutorials/parity-twine-optimizer-ms) para obter uma introdução ao problema da divisão de mercado e detalhes sobre como resolvê-lo com o Parity Twine Optimizer.\n",
        "\n",
        "<span id=\"maximum-independent-set-problem\" />\n",
        "\n",
        "### Problema do Conjunto Independente Máximo\n",
        "\n",
        "A Figura 3 compara os resultados obtidos com o otimizador Parity Twine e com amostragem aleatória para o problema do conjunto independente máximo em instâncias selecionadas\n",
        "obtidas da [QOBLIB — Biblioteca de Referência de Otimização Quântica](https://github.com/ZIB-AOPT/QOBLIB). Esses valores variam de 18 (interações entre mamíferos e cangurus) a\n",
        "114 ( es60fst03 ) qubits.\n",
        "\n",
        "Para instâncias pequenas, os resultados do tamanho bruto do Conjunto Independente Máximo obtidos pelo otimizador e pela amostragem aleatória são semelhantes, mas, para instâncias maiores, o otimizador apresenta resultados muito melhores.\n",
        "O pós-processamento tanto dos resultados da amostragem aleatória quanto dos do otimizador leva, mais uma vez, a tamanhos de conjuntos que correspondem aos valores exatos.\n",
        "\n",
        "![Testes](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/benchmark_run_mis.avif \"de desempenho do Parity Twine Optimizer para o modelo MIS Figura 3: Resultados dos testes de desempenho do Parity Twine Optimizer para o modelo MIS em comparação com a amostragem aleatória.\n",
        "Os resultados foram obtidos no `ibm_boston` com 20.000 tentativas, repetidas três vezes.\")\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73390a19",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Introdução\n",
        "\n",
        "Faça a autenticação usando seu [token da API do IBM Quantum Platform e selecione a função do Qiskit da seguinte forma:](/docs/guides/functions-get-started)\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "95a715d2",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "\n",
        "# Authenticate and load the Qiskit Function\n",
        "catalog = QiskitFunctionsCatalog(\n",
        "    channel=\"ibm_quantum_platform\",\n",
        ")\n",
        "function = catalog.load(\"parityqc/parity-twine-optimizer\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e8837f5f",
      "metadata": {},
      "source": [
        "<span id=\"example\" />\n",
        "\n",
        "## Exemplo\n",
        "\n",
        "O Parity Twine Optimizer pode ser aplicado a um exemplo simples de QUBO da seguinte maneira. O problema é definido inicialmente por meio de um dicionário:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "d56e1440",
      "metadata": {},
      "outputs": [],
      "source": [
        "problem = {\"()\": 3, \"(0,)\": 1, \"(0, 1)\": 2, \"(1, 2)\": -1}"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "69ea92c9",
      "metadata": {},
      "source": [
        "Então, o tipo da variável deve ser definido como `binary` ou `spin`:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "06fc4134",
      "metadata": {},
      "outputs": [],
      "source": [
        "variable_type = \"spin\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "03998691",
      "metadata": {},
      "source": [
        "Isso define a função-objetivo $3 + s_0 + 2 s_0s_1 - s_1s_2$, em que $s_i \\in \\{-1, 1\\}$.\n",
        "\n",
        "Escolha um backend. Por exemplo:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "856fe992",
      "metadata": {},
      "outputs": [],
      "source": [
        "backend_name = \"ibm_phoenix\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6f88b8ee-47a8-4c93-b25c-f4eceaf3dbf8",
      "metadata": {},
      "source": [
        "Use `catalog.backends()` para ver uma lista dos back-ends disponíveis na conta de usuário/instância.\n",
        "\n",
        "Se nenhum backend for especificado, o backend menos ocupado (aquele com o menor número de tarefas pendentes) será selecionado automaticamente.\n",
        "\n",
        "Depois que o otimizador for carregado (veja acima), você poderá executá-lo no problema usando as opções padrão:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "27558d79-01c1-4616-aec0-2a9623e0e9e1",
      "metadata": {},
      "outputs": [],
      "source": [
        "function_job = function.run(\n",
        "    problem=problem, variable_type=variable_type, backend_name=backend_name\n",
        ")\n",
        "print(f\"Job ID: {function_job.job_id}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c036d9c6a386323",
      "metadata": {},
      "source": [
        "Verifique o status do trabalho da seguinte maneira:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "5c71411c8ac8271d",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Monitor the job status\n",
        "function_job.status()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "646bd940-80ad-4e79-b4e2-0db447edf41b",
      "metadata": {},
      "source": [
        "Recupere os resultados da seguinte forma:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "197d53b9-2b5e-44e5-99e3-0c285db903a9",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Retrieve the job result if the status is DONE\n",
        "result = function_job.result()\n",
        "\n",
        "result"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "bb1bba96-4689-4ddf-b72f-6c6e5cf2c3ba",
      "metadata": {},
      "source": [
        "Ao imprimir os resultados, obtém-se o seguinte:\n",
        "\n",
        "```\n",
        "{\n",
        "    'solution': {'0': -1, '1': 1, '2': 1},\n",
        "    'objective_value': -1.0,\n",
        "    'solution_bitstring': '100',\n",
        "    'metadata': {\n",
        "        'circuit_metrics': {\n",
        "            'depth': 20,\n",
        "            'gate_count': 198,\n",
        "            'two_qubit_gate_depth': 4,\n",
        "            'two_qubit_gate_count': 4,\n",
        "            'num_qubits': 3,\n",
        "            'operations': {'delay': 158, 'rz': 17, 'sx': 14, 'cz': 4, 'measure': 3, 'x': 2}\n",
        "        },\n",
        "        'solver_info': {\n",
        "            'variable_mapping': {'0': 0, '1': 1, '2': 2},\n",
        "            'bitstring_distributions': {\n",
        "                'before_postprocessing': {'100': 71760, ... },\n",
        "                'after_postprocessing': {'100': 88440, '011': 11560}\n",
        "            },\n",
        "            'best_parameters': {\n",
        "                'beta': [-0.46259546391008877],\n",
        "                'gamma': [0.6181957189727373]\n",
        "            }\n",
        "        },\n",
        "        'resource_usage': {\n",
        "            'RUNNING: MAPPING': {'CPU_TIME': 42.878},\n",
        "            'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 0.094},\n",
        "            'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 790.623},\n",
        "            'RUNNING: EXECUTING_QPU': {'QPU_TIME': 28.0},\n",
        "            'RUNNING: POST_PROCESSING': {'CPU_TIME': 0.828}\n",
        "        }\n",
        "    }\n",
        "}\n",
        "```\n",
        "\n",
        "O dicionário `solution` corresponde aos qubits definidos no problema ( $s_0, s_1$ e $s_2$ ) e fornece seus valores de spin otimizados.\n",
        "\n",
        "O `objective_value` é o custo ou a energia do problema de otimização. Ele quantifica a qualidade `solution` .\n",
        "\n",
        "`metadata` fornece informações sobre a transpilação (número de portas de dois qubits/profundidade, portas utilizadas, qubits ativos) e vários tempos de execução, tanto para o tempo de computação quântica quanto para o tempo de computação clássica.\n",
        "\n",
        "Além disso, `metadata` oferece uma visão geral do funcionamento interno do algoritmo. É possível visualizar os parâmetros variacionais otimizados (beta e gama) e verificar como a distribuição das sequências de bits medidas melhorou após a aplicação do pós-processamento clássico aos resultados quânticos brutos.\n",
        "\n",
        "Todas as sequências de bits na saída do resultado podem ser mapeadas para as variáveis do problema utilizando o `variable_mapping`.\n",
        "Por exemplo, você pode mapear o `'solution_bitstring': '100'` com o `'variable_mapping': {'0': 0, '1': 1, '2': 2}` para a solução binária: `{'0': 1, '1': 0, '2': 0}`.\n",
        "Como você está resolvendo o problema em termos de variáveis de spin, é preciso aplicar a transformação binária para spin (`0` -> `1`, `1` -> ) `-1` .\n",
        "Chega-se, então, à solução final `'solution': {'0': -1, '1': 1, '2': 1}`.\n",
        "\n",
        "Consulte a [referência da API](/docs/api/functions/parity-twine-optimizer) para obter detalhes completos sobre as entradas e saídas da função Parity Twine Optimizer.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8ba474e4",
      "metadata": {},
      "source": [
        "<span id=\"changelog\" />\n",
        "\n",
        "## Log de mudanças\n",
        "\n",
        "<span id=\"[101]---2026-09-15\" />\n",
        "\n",
        "### \\[1.0.1] - 15/09/2026\n",
        "\n",
        "**Notas**\n",
        "\n",
        "Este lançamento marca a primeira versão estável de produção da função Qiskit do Parity Twine Optimizer. Espera-se que as próximas versões incluam o seguinte:\n",
        "\n",
        "* compilação de problemas de ordem superior,\n",
        "* algoritmos de otimização adicionais e\n",
        "* melhorias no pré-processamento e no pós-processamento.\n",
        "\n",
        "**Recursos**\n",
        "\n",
        "* Resolva problemas de QUBO esparsos e densos com o eficiente Parity Twine Compiler.\n",
        "\n",
        "**Documentação**\n",
        "\n",
        "* Guia de introdução para o usuário.\n",
        "* Tutoriais com exemplos sobre os problemas de Market Split e Sherrington-Kirkpatrick.\n",
        "* Documentação da API.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Obtenha suporte\n",
        "\n",
        "Entre em contato com [ParityQC](mailto:support@parityqc.com) em caso de dúvidas ou problemas.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximas etapas\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendações\">\n",
        "  * Solicite acesso à função preenchendo este [formulário](https://parityqc.com/products/parity-twine-optimizer/free-trial).\n",
        "  * Acesse a [referência](/docs/api/functions/parity-twine-optimizer) da API desta função do Qiskit.\n",
        "  * Experimente o [tutorial](/docs/tutorials/parity-twine-optimizer-ms) sobre como aplicar o Otimizador de Parity Twine ao problema da divisão do mercado.\n",
        "  * Experimente o [tutorial](/docs/tutorials/parity-twine-optimizer-sk) sobre como aplicar o Parity Twine Optimizer ao modelo de Sherrington-Kirkpatrick.\n",
        "  * Consulte o artigo [“Connectivity-aware Synthesis of Quantum Algorithms”, de Drier et al. (2025), disponível como](https://arxiv.org/abs/2501.14020) pré-impressão no site ArXiv.\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": 5
}