{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "dde95705",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Parity Twine Optimizer: Eine Qiskit-Funktion von ParityQC\"\n",
        "description: \"Lösen Sie Optimierungsprobleme auf Quantencomputern mit Hilfe von „Parity Twine“. Minimiert die Anzahl der Gatter und die Schaltungstiefe, um Quantenoptimierungsalgorithmen auszuführen.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore parityqc QOBLIB  */}\n",
        "\n",
        "<span id=\"parity-twine-optimizer-a-qiskit-function-by-parityqc\" />\n",
        "\n",
        "# Parity Twine Optimizer: Eine Qiskit-Funktion von ParityQC\n",
        "\n",
        "*Siehe [API-Referenz](/docs/api/functions/parity-twine-optimizer)*\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Qiskit Functions sind eine experimentelle Funktion, die ausschließlich Nutzern der Tarife „ IBM Quantum® Premium Plan “, „Flex Plan“ und „ On-Prem “ (über die IBM Quantum Platform -API) zur Verfügung steht. Sie befinden sich im Status „Vorschauversion“ und können sich noch ändern.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"overview\" />\n",
        "\n",
        "## Übersicht\n",
        "\n",
        "Mit dem „Parity Twine Optimizer“ können Nutzer Optimierungsprobleme mithilfe von Quantencomputern unter Verwendung der [Parity-Twine-Methode](https://arxiv.org/abs/2501.14020) lösen.\n",
        "Dieser auf der Parity-Architektur basierende Ansatz nutzt den „ ParityQC “-Compiler, um die Anzahl der Gatter und die Schaltungstiefe, die für die Ausführung eines Quantenalgorithmus erforderlich sind, unter Berücksichtigung der Gerätekonnektivität zu minimieren.\n",
        "\n",
        "Diese Ressourcenreduzierung ermöglicht die Lösung branchenrelevanter Optimierungsprobleme in einer Größenordnung, die mit herkömmlichen, SWAP-intensiven Transpilierungsverfahren nicht realisierbar ist.\n",
        "Der „Parity Twine Optimizer“ automatisiert die Transpilierungsschritte und lässt sich mit minimalem Benutzereingriff einsetzen.\n",
        "\n",
        "Der „Parity Twine“-Ansatz übertrifft alle anderen Kompilierungsmethoden hinsichtlich der Reduzierung der Gatteranzahl und der Schaltungstiefe bei Quantenalgorithmen wie dem\n",
        "[Quantenalgorithmus zur approximativen Optimierung (QAOA)](https://arxiv.org/abs/2501.14020) und [der Quanten-Fourier-Transformation (QFT)](https://arxiv.org/abs/2604.12465).\n",
        "Durch die Abstraktion der Quanteninformation von den physikalischen Qubits lassen sich nichtlokale Wechselwirkungen ohne SWAP-Gatter realisieren. Stattdessen verteilen Parity-Twine-Ketten (Folgen von CNOT-Gattern) systematisch logische\n",
        "Paritätsinformationen auf die Qubits.\n",
        "\n",
        "Der Optimierer nutzt den QAOA, um die Energie einer vorgegebenen Kostenfunktion zu minimieren. QAOA ist ein hybrider quanten-klassischer Variationsalgorithmus, der zur Lösung kombinatorischer Optimierungsprobleme entwickelt wurde, indem er den Grundzustand\n",
        "eines Kosten-Hamilton-Operators approximiert ( $H_C$ ). Ein Mischterm ( $H_B$ ) bewirkt Übergänge zwischen den Zuständen, um den Lösungsraum zu durchforsten. Eine abwechselnde Abfolge dieser Terme, die durch die Parameter $\\gamma$ und $\\beta$ gesteuert wird, definiert den unitären Operator\n",
        "$U(\\gamma, \\beta) = \\Pi_{i=1}^p e^{-i \\beta_i H_B} e^{-i \\gamma_i H_C}$, der auf den Anfangszustand wirkt.\n",
        "\n",
        "Die Kodierung des unitaren Problems exp( $-i \\beta H_C)$ ) erfordert die Kodierung aller logischen $n$ -Körper-Rotationsoperatoren (exp( $-i \\beta J_{i,j,...n}Z_iZ_j...Z_n$ )).\n",
        "Dies lässt sich mithilfe von $n$ -Körper-Generatoren (Parity-Twine-Netzwerke) erreichen, die die Schaltungstiefe des QAOA-Schaltkreises und die Anzahl der Zwei-Qubit-Gatter reduzieren.\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",
        "## Beschreibung\n",
        "\n",
        "Die Eingabe für den „Parity Twine Optimizer“ besteht aus einem Optimierungsproblem, dem gewählten Namen der „ IBM Quantum “-Hardware sowie zusätzlichen optionalen Argumenten zur Anpassung der Einstellungen für die Transpilierung und die Ausführung auf der Hardware. Die Optimierer-Funktion\n",
        "leitet die Problemdefinition an den Parity-Twine-Compiler weiter. Abbildung 1 zeigt eine Übersicht über den Funktionsablauf.\n",
        "\n",
        "![Ablauf](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/process_pipeline.avif \"des „Parity Twine Optimizer“ Abbildung 1: Übersicht über den Ablauf des „Parity Twine Optimizer“.\")\n",
        "\n",
        "Das Problem der Eingabeoptimierung wird zu einem (normierten) Hamilton-Operator vorverarbeitet. Der „ ParityQC “-Compiler erstellt daraufhin eine parametrisierte „Parity Twine“-Ansatzschaltung, die in einen logischen Ansatz transpiliert wird, der dem nativen\n",
        "Gatesatz der ausgewählten Hardware entspricht.\n",
        "\n",
        "Die Parameter der QAOA-Schaltung werden klassischerweise mithilfe des [„Efficient-Depth-One](https://github.com/qiskit-community/qaoa_training_pipeline/blob/main/how_tos/efficient_depth_one.ipynb) “-Ansatzes optimiert und der transpilierten Schaltung zugewiesen.\n",
        "Da eine Runde QAOA verwendet wird, werden die optimalen Parameter für „ $\\gamma$ “ und „ $\\beta$ “ mittels einer Rastersuche auf einer CPU ermittelt, ohne dass eine aufwendige iterative Optimierung\n",
        "über viele Schaltkreisaufrufe hinweg erforderlich ist. Dadurch wird die erforderliche QPU-Laufzeit des Optimierers erheblich reduziert. Die Ausführungszeit pro Schaltkreis wird hauptsächlich durch den konstanten Overhead bestimmt, der bei der Ausführung eines Jobs auf der QPU anfällt.\n",
        "Nachdem die Schaltungsparameter festgelegt wurden, wird der Auftrag an die angegebene QPU unter IBM® übermittelt.\n",
        "\n",
        "Die Rohdaten werden anschließend nachbearbeitet. In diesem Schritt wird eine lokale gierige Suche verwendet, die zufällig durch die Lösungszeichenfolge durchläuft und Bitwerte umkehrt, sofern dies den Wert der Kostenfunktion verringert.\n",
        "\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "b34fe075",
      "metadata": {},
      "source": [
        "<span id=\"benchmarks\" />\n",
        "\n",
        "## Benchmarks\n",
        "\n",
        "<Admonition type=\"caution\" title=\"Haftungsausschluss\">\n",
        "  Die Leistung kann sowohl von der konkreten Problemstellung als auch von den nachfolgenden Verarbeitungsschritten abhängen. In einigen Fällen können klassische Stichproben und quantengenerierte Stichproben nach einer gleichwertigen Nachbearbeitung eine ähnliche Qualität der Endlösung erzielen. Bei der Bewertung sollte daher der gesamte Optimierungsablauf berücksichtigt werden.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"sherrington-kirkpatrick-model\" />\n",
        "\n",
        "### Sherrington-Kirkpatrick-Modell\n",
        "\n",
        "Abbildung 2 veranschaulicht die Wirksamkeit des Parity Twine Optimizers. Hier werden die mit dem Optimierer erzielten Ergebnisse mit denen einer Zufallsstichprobe für das Sherrington-Kirkpatrick-Modell\n",
        "bei steigender Anzahl von Qubits verglichen.\n",
        "\n",
        "Die Nachbearbeitung sowohl der Zufallsergebnisse als auch der Optimierergebnisse führt zu exakten Grundzuständen, doch die von Twine QAOA gelieferten Rohwerte für die minimale Energie sind stets besser als Zufallswerte\n",
        ". Bei den größten betrachteten Qubit-Anzahlen (90 und 100) verschlechtert das Hardware-Rauschen das Ergebnis des Optimierers, sodass es auf Rohwerte zurückfällt, die denen einer Zufallsstichprobe entsprechen.\n",
        "\n",
        "![Parity Twine Optimizer SK – Benchmark-Ergebnisse](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/benchmark_run_sk.avif \"Abbildung 2: Benchmark-Ergebnisse für den Parity Twine Optimizer für das SK-Modell im Vergleich zur Zufallsstichprobe. Die Ergebnisse wurden auf\n",
        "\\`ibm_boston` mit 20.000 Schüssen erzielt, wobei der Vorgang dreimal wiederholt wurde.\")\n",
        "\n",
        "In diesem [Tutorial](/docs/tutorials/parity-twine-optimizer-sk) finden Sie eine Einführung in das Sherrington-Kirkpatrick-Modell sowie Einzelheiten dazu, wie Sie es mit dem Parity Twine Optimizer lösen können.\n",
        "\n",
        "<span id=\"market-split-problem\" />\n",
        "\n",
        "### Problem der Marktaufteilung\n",
        "\n",
        "Tabelle 1 zeigt spezifische Leistungskennzahlen für den „Parity Twine Optimizer“, der auf verschiedene Fälle des Market-Split-Problems (MS) angewendet wurde.\n",
        "Diese wurden aus der [QOBLIB – Quantum Optimization Benchmarking Library](https://github.com/ZIB-AOPT/QOBLIB) bezogen und entsprechen\n",
        "[Beiträgen](https://github.com/ZIB-AOPT/QOBLIB/tree/main/01-marketsplit/submissions/20260728_Parity_Twine_Optimizer), die unter Verwendung des\n",
        "Parity Twine Optimizers an die Bibliothek übermittelt wurden.\n",
        "\n",
        "Die MS-Verletzung ist eine Genauigkeitskennzahl, die misst, wie weit die Lösung davon entfernt ist, alle Nebenbedingungen zu erfüllen. Sie ist definiert als „ $\\sum_i ((Ax - b)_i)^2$ “. Niedrigere Werte dieser Kennzahl weisen auf genauere Lösungen hin.\n",
        "Tabelle 1 enthält die gemittelten Werte für fünf Durchläufe jeder Instanz unter Verwendung des Parity Twine Optimizers mit dem Gerät `ibm_boston` als Backend und 100.000 Schüssen.\n",
        "Es wird der geringste MS-Verstoß angegeben, der aus den Durchläufen der jeweiligen Instanz ermittelt wurde.\n",
        "\n",
        "| Instanz          | Qubits     | Zwei-Qubit-Gatter | Tiefe bei zwei Qubits | MS-Verstoß | Kartierungszeit (s) | QPU-Laufzeit (s) | Nachbearbeitungszeit (s) |\n",
        "| :--------------- | :--------- | :---------------- | :-------------------- | :--------- | :------------------ | :--------------- | :----------------------- |\n",
        "| ms\\_03\\_050\\_002 | 20 Jahre   | 399               | 76                    | 0          | 45                  | 29               | 71                       |\n",
        "| ms\\_03\\_100\\_022 | 20 Jahre   | 399               | 76                    | 0          | 30 Stunden          | 29               | 77                       |\n",
        "| ms\\_03\\_200\\_177 | 20 Jahre   | 399               | 76                    | 0          | 33                  | 29               | 63                       |\n",
        "| ms\\_04\\_050\\_001 | 30 Stunden | 899               | 116                   | 1          | 68                  | 29               | 245                      |\n",
        "| ms\\_04\\_100\\_003 | 30 Stunden | 899               | 116                   | 2          | 89                  | 29               | 187                      |\n",
        "| ms\\_04\\_200\\_030 | 30 Stunden | 899               | 116                   | 3          | 89                  | 29               | 219                      |\n",
        "| ms\\_05\\_100\\_003 | 40         | 1599              | 156                   | 3          | 237                 | 30 Stunden       | 364                      |\n",
        "| ms\\_06\\_050\\_001 | 50         | 2499              | 196                   | 4          | 499                 | 30 Stunden       | 464                      |\n",
        "| ms\\_07\\_050\\_001 | 60.000     | 3599              | 236                   | 17.        | 858                 | 31               | 637                      |\n",
        "| ms\\_08\\_050\\_001 | 70         | 4899              | 276                   | 36         | 1561                | 31               | 773                      |\n",
        "\n",
        "<p align=\"center\"><i>Tabelle 1: Leistungskennzahlen für verschiedene Fälle des Marktaufteilungsproblems. Die Instanznamen beziehen sich auf die entsprechenden Beispiele in der [QOBLIB](https://github.com/ZIB-AOPT/QOBLIB) -Aufgabenbibliothek. Wie bereits im Abschnitt „Beschreibung“ erwähnt, ist die QPU-Laufzeit minimal und nahezu konstant, da nur eine QAOA-Runde verwendet wird, wobei die optimalen Schaltungsparameter auf einer CPU ermittelt wurden.</i></p>\n",
        "\n",
        "In diesem [Tutorial](/docs/tutorials/parity-twine-optimizer-ms) finden Sie eine Einführung in das Problem der Marktaufteilung sowie Einzelheiten dazu, wie Sie es mit dem Parity Twine Optimizer lösen können.\n",
        "\n",
        "<span id=\"maximum-independent-set-problem\" />\n",
        "\n",
        "### Das Problem der maximalen unabhängigen Menge\n",
        "\n",
        "Abbildung 3 vergleicht die mit dem „Parity Twine“-Optimierer erzielten Ergebnisse mit denen einer Zufallsstichprobe für das Problem der maximalen unabhängigen Menge bei ausgewählten Instanzen,\n",
        "die aus der [QOBLIB – Quantum Optimization Benchmarking Library](https://github.com/ZIB-AOPT/QOBLIB) stammen. Diese reichen von 18 (Interaktionen zwischen Säugetieren und Kängurus) bis zu\n",
        "114 ( es60fst03 ) Qubits.\n",
        "\n",
        "Bei kleinen Instanzen sind die vom Optimierer und durch Zufallsstichproben ermittelten Werte für die maximale Größe der unabhängigen Menge ähnlich, bei größeren Instanzen liefert der Optimierer jedoch weitaus bessere Ergebnisse.\n",
        "Die Nachbearbeitung sowohl der zufällig ausgewählten als auch der Optimierer-Ergebnisse führt erneut zu Mengengrößen, die mit den exakten Werten übereinstimmen.\n",
        "\n",
        "![Parity Twine Optimizer – MIS-Benchmarks](https://quantum.cloud.ibm.com/docs/images/guides/parity-twine-optimizer/benchmark_run_mis.avif \"Abbildung 3: Benchmark-Ergebnisse für den Parity Twine Optimizer für das MIS-Modell im Vergleich zur Zufallsstichprobe.\n",
        "Die Ergebnisse wurden auf „ibm_boston“ mit 20.000 Schüssen erzielt und dreimal wiederholt.\")\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73390a19",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Erste Schritte\n",
        "\n",
        "Melden Sie sich mit Ihrem „ [IBM Quantum Platform “-API-Token](/docs/guides/functions-get-started) an und wählen Sie die Qiskit-Funktion wie folgt aus:\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",
        "## Beispiel\n",
        "\n",
        "Der Parity-Twine-Optimierer lässt sich wie folgt auf ein einfaches QUBO-Beispiel anwenden. Das Problem wird zunächst mithilfe eines Wörterbuchs definiert:\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": [
        "Dann muss der Variablentyp wie folgt definiert werden: oder `binary` `spin`:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "06fc4134",
      "metadata": {},
      "outputs": [],
      "source": [
        "variable_type = \"spin\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "03998691",
      "metadata": {},
      "source": [
        "Damit wird die Zielfunktion definiert: $3 + s_0 + 2 s_0s_1 - s_1s_2$, wobei $s_i \\in \\{-1, 1\\}$ gilt.\n",
        "\n",
        "Wählen Sie ein Backend aus. Zum Beispiel:\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": [
        "Verwenden Sie, `catalog.backends()` um eine Liste der verfügbaren Backends des Benutzerkontos bzw. der Instanz anzuzeigen.\n",
        "\n",
        "Wenn kein Backend angegeben wird, wird automatisch das am wenigsten ausgelastete Backend (das mit der geringsten Anzahl an ausstehenden Aufträgen) ausgewählt.\n",
        "\n",
        "Sobald der Optimierer geladen ist (siehe oben), können Sie ihn mit den Standardoptionen auf das Problem anwenden:\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": [
        "Überprüfen Sie den Auftragsstatus wie folgt:\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": [
        "Rufen Sie die Ergebnisse wie folgt ab:\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": [
        "Die Ausgabe der Ergebnisse sieht wie folgt aus:\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",
        "Das Wörterbuch `solution` entspricht den in der Aufgabenstellung definierten Qubits ( $s_0, s_1$ und $s_2$ ) und gibt deren optimierte Spinwerte an.\n",
        "\n",
        "Die `objective_value` ist die Kostenfunktion oder Energie des Optimierungsproblems. Es quantifiziert die Qualität `solution` .\n",
        "\n",
        "`metadata` liefert Informationen zur Transpilation (Anzahl der Zwei-Qubit-Gates/Tiefe, verwendete Gates, aktive Qubits) sowie zu verschiedenen Laufzeiten sowohl für die Quanten- als auch für die klassische Rechenzeit.\n",
        "\n",
        "Darüber hinaus bietet `metadata` es einen Einblick in die Funktionsweise des Algorithmus. Sie können die optimierten Variationsparameter (Beta und Gamma) einsehen und nachvollziehen, wie sich die Verteilung der gemessenen Bitstrings verbessert hat, nachdem die Rohdaten der Quantenergebnisse einer klassischen Nachbearbeitung unterzogen wurden.\n",
        "\n",
        "Alle Bitfolgen in der Ergebnisausgabe können mithilfe von `variable_mapping`. den Problemvariablen zugeordnet werden.\n",
        "Beispielsweise kann man das `'solution_bitstring': '100'` mit dem `'variable_mapping': {'0': 0, '1': 1, '2': 2}` auf die binäre Lösung abbilden: `{'0': 1, '1': 0, '2': 0}`.\n",
        "Da Sie das Problem mit Hilfe von Spinvariablen lösen, müssen Sie die Transformation von Binärzahlen in Spins anwenden (`0` → `1`, `1` → ) `-1` .\n",
        "Dadurch gelangen Sie zur endgültigen Lösung `'solution': {'0': -1, '1': 1, '2': 1}`.\n",
        "\n",
        "Ausführliche Informationen zu den Ein- und Ausgabedaten der Funktion „Parity Twine Optimizer“ finden Sie in der [API-Referenz](/docs/api/functions/parity-twine-optimizer).\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8ba474e4",
      "metadata": {},
      "source": [
        "<span id=\"changelog\" />\n",
        "\n",
        "## Änderungsprotokoll\n",
        "\n",
        "<span id=\"[102]---2026-09-15\" />\n",
        "\n",
        "### \\[1.0.2] - 15.09.2026\n",
        "\n",
        "**Hinweise**\n",
        "\n",
        "Mit dieser Veröffentlichung wird die erste stabile Produktionsversion der Parity Twine Optimizer-Qiskit-Funktion vorgestellt. In zukünftigen Versionen werden voraussichtlich folgende Neuerungen eingeführt:\n",
        "\n",
        "* Zusammenstellung von Problemen höherer Ordnung,\n",
        "* weitere Optimierungsalgorithmen sowie\n",
        "* Verbesserungen bei der Vor- und Nachbearbeitung.\n",
        "\n",
        "**Funktionen**\n",
        "\n",
        "* Lösen Sie spärliche und dichte QUBO-Probleme mit dem effizienten Parity-Twine-Compiler.\n",
        "\n",
        "**Dokumentation**\n",
        "\n",
        "* Benutzerhandbuch für den Einstieg.\n",
        "* Anleitungen mit Beispielen zu Markt-Split- und Sherrington-Kirkpatrick-Problemen.\n",
        "* API-Dokumentation.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Unterstützung anfordern\n",
        "\n",
        "Bei Fragen oder Problemen wenden Sie sich bitte an [ParityQC](mailto:support@parityqc.com).\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Beantragen Sie den Zugriff auf die Funktion, indem Sie dieses [Formular](https://parityqc.com/products/parity-twine-optimizer/free-trial) ausfüllen.\n",
        "  * Rufen Sie die [API-Referenz](/docs/api/functions/parity-twine-optimizer) für diese Qiskit-Funktion auf.\n",
        "  * Probieren Sie das [Tutorial](/docs/tutorials/parity-twine-optimizer-ms) zur Anwendung des „Parity Twine Optimizer“ auf das Marktaufteilungsproblem aus.\n",
        "  * Probieren Sie das [Tutorial](/docs/tutorials/parity-twine-optimizer-sk) zur Anwendung des „Parity Twine Optimizer“ auf das Sherrington-Kirkpatrick-Modell aus.\n",
        "  * Lesen Sie den Preprint [„Connectivity-aware Synthesis of Quantum Algorithms“ von Drier et al. (2025)](https://arxiv.org/abs/2501.14020) unter 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
}