{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Tensor-Netzwerk-Fehlerminderung (TEM) – Eine Qiskit-Funktion von Algorithmiq\"\n",
        "description: \"Einführung in TEM, eine Qiskit-Funktion von Algorithmiq, zur Berechnung von Schätzungen mit Software-Nachbearbeitung zur Fehlerminderung unter Verwendung von Tensor-Netzwerken.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore POVM, mathbf, Filippov, Lindblad, Leahy, Rossi, García, Pérez, Minev, Kandala, Temme, informationally  */}\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "dde95705",
      "metadata": {},
      "source": [
        "<span id=\"tensor-network-error-mitigation-tem-a-qiskit-function-by-algorithmiq\" />\n",
        "\n",
        "# Tensor-Netzwerk-Fehlerminderung (TEM): Eine Qiskit-Funktion von Algorithmiq\n",
        "\n",
        "*Siehe [API-Referenz](/docs/api/functions/algorithmiq-tem)*\n",
        "\n",
        "<Admonition type=\"note\" title=\"Anmerkung\">\n",
        "  Qiskit-Funktionen sind eine experimentelle Funktion, die nur für Benutzer des IBM Quantum® Premium Plan, Flex Plan und On-Prem (über IBM Quantum Platform API) Plan verfügbar ist. Sie befinden sich im Status einer Vorabversion und können sich noch ändern.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b130b1ae",
      "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=\"Paketversionen\">\n",
        "    Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt.\n",
        "    Wir empfehlen die Verwendung dieser oder neuerer Versionen.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.1\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "47066e9a",
      "metadata": {},
      "source": [
        "<span id=\"overview\" />\n",
        "\n",
        "## Übersicht\n",
        "\n",
        "Die Tensor-Network Error Mitigation (TEM) Methode von Algorithmiq ist ein hybrider hybrider quantenklassischer Algorithmus, der die Rauschminderung vollständig in der der klassischen Nachbearbeitungsphase. Mit TEM kann der Benutzer die erwartungswerte von Observablen berechnen und dabei die unvermeidlichen, durch Rauschen verursachten Fehler abmildern die bei Quantenhardware auftreten, mit erhöhter Genauigkeit und Kosteneffizienz, dies macht sie zu einer äußerst attraktiven Option für Quantenforscher und Industrie praktiker gleichermaßen attraktiv macht.\n",
        "\n",
        "Die Methode besteht darin, ein Tensornetz zu konstruieren, das die Umkehrung des des globalen Rauschkanals darstellt, der den Zustand des Quantenprozessors beeinflusst, und dann anwendung der Abbildung auf informationell vollständige Messergebnisse, die aus dem verrauschten dem verrauschten Zustand, um unverzerrte Schätzer für die Observablen zu erhalten.\n",
        "\n",
        "Als Vorteil nutzt TEM informationsvollständige Messungen, um\n",
        "Zugriff auf eine Vielzahl von gemilderten Erwartungswerten von Observablen zu gewähren, und hat\n",
        "einen optimalen Sampling-Overhead auf der Quantenhardware, wie in Filippov et\n",
        "al. (2023) und [arXiv:2307.11740](https://arxiv.org/abs/2307.11740) Filippov\n",
        "et al. (2024) beschrieben. [arXiv:2403.13542](https://arxiv.org/abs/2403.13542) Der\n",
        "Messaufwand bezieht sich auf die Anzahl der zusätzlichen Messungen, die erforderlich sind, um\n",
        "eine effiziente Fehlerkorrektur durchzuführen, ein entscheidender Faktor für die Durchführbarkeit von\n",
        "Quantenberechnungen. Daher hat TEM das Potenzial, einen Quantenvorteil\n",
        "in komplexen Szenarien zu ermöglichen, beispielsweise in Anwendungen in den Bereichen Quantenchaos,\n",
        "Vielteilchenphysik, Hubbard-Dynamik und Simulationen in der Chemie kleiner Moleküle\n",
        ".\n",
        "\n",
        "Die wichtigsten Merkmale und Vorteile von TEM lassen sich wie folgt zusammenfassen:\n",
        "\n",
        "1. **Optimaler Aufwand für die Messung** : TEM ist optimal im Hinblick auf [theoretischen Schranken](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.131.210601), das bedeutet, dass keine Methode einen geringeren Messaufwand erreichen kann. Mit anderen Worten mit anderen Worten: TEM erfordert die geringstmögliche Anzahl zusätzlicher Messungen, um eine fehlerminderung. Dies wiederum bedeutet, dass TEM eine minimale Quantenlaufzeit benötigt.\n",
        "2. **Kosteneffizienz** : Da TEM die Rauschunterdrückung vollständig in der nachbearbeitungsphase übernimmt, müssen dem Quantencomputer keine zusätzlichen Schaltungen hinzugefügt quantencomputer hinzuzufügen, was nicht nur die Berechnung billiger macht, sondern auch das risiko der Einführung zusätzlicher Fehler aufgrund der Unvollkommenheiten von Quanten geräte.\n",
        "3. **Schätzung mehrerer Observablen** : Dank der informationsmäßig vollständigen messungen schätzt TEM effizient mehrere Observablen mit denselben messdaten aus dem Quantencomputer.\n",
        "4. **Verringerung von Messfehlern** : Die TEM Qiskit Funktion beinhaltet auch eine [proprietäre Methode zur Messfehlerbegrenzung](https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033154) die nach einem kurzen Kalibrierungslauf die Messfehler erheblich reduzieren kann.\n",
        "5. **Genauigkeit** : TEM verbessert deutlich die Genauigkeit und Zuverlässigkeit von digitalen Quantensimulationen und macht Quantenalgorithmen präziser und verlässlich.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Beschreibung\n",
        "\n",
        "Die TEM-Funktion ermöglicht es Ihnen, fehlerbereinigte Erwartungswerte für mehrere Observablen auf einem Quantenschaltkreis mit minimalem Abtast-Overhead. Die die Schaltung wird mit einem informationell vollständigen, positiven, operatorbewerteten (IC-POVM) gemessen, und die gesammelten Messergebnisse werden auf einem klassischen Computer verarbeitet. Diese Messung wird verwendet, um die Tensornetz methoden durchzuführen und eine Rauschinversionskarte zu erstellen. Die Funktion wendet eine Karte an, die den gesamten verrauschten Schaltkreis vollständig invertiert, wobei Tensornetzwerke zur Darstellung der verrauschten schichten.\n",
        "\n",
        "![TEM-Schema](https://quantum.cloud.ibm.com/docs/images/guides/algorithmiq-tem/tem_scheme.svg \"Fehlerkorrigierte Schätzung einer beobachtbaren Größe O durch Nachbearbeitung von Messergebnissen des verrauschten Quantenprozessors. U und N bezeichnen eine ideale Quantenoperation und die zugehörige Rauschkarte, die im Allgemeinen nichtlokal sein kann (und auf graue Kästen ausgedehnt wird). D steht für einen Tensor von Operatoren, die zu den Effekten der IC-Messung dual sind. Das Rauschunterdrückungsmodul M ist ein Tensornetz, das von der Mitte aus effizient zusammengezogen wird. Die erste Iteration der Kontraktion wird durch die gepunktete lila Linie dargestellt, die zweite durch die gestrichelte Linie und die dritte durch die durchgezogene Linie.\")\n",
        "\n",
        "Sobald die Schaltungen der Funktion unterworfen sind, werden sie transpiliert und optimiert, um die Anzahl der Schichten mit Zwei-Qubit-Gattern (die lauteren gatter auf Quantengeräten). Das auf die Schichten einwirkende Rauschen wird gelernt durch [Qiskit Runtime](/docs/api/qiskit-ibm-runtime/noise-learner-noise-learner) mit Hilfe eines spärlichen Pauli-Lindblad-Rauschmodells, wie in E beschrieben. van den Berg, Z. Minev, A. Kandala, K. Temme, Nat. Phys. (2023).\n",
        "[arXiv:2201.09866](https://arxiv.org/abs/2201.09866).\n",
        "\n",
        "Das Rauschmodell ist eine genaue Beschreibung des Rauschens auf dem Gerät und kann subtile Merkmale zu erfassen, einschließlich des Übersprechens von Qubits. Allerdings kann das Rauschen auf den schwanken und driften, und das erlernte Rauschen ist zum Zeitpunkt der Schätzung möglicherweise nicht zu dem Zeitpunkt, an dem die Schätzung vorgenommen wird. Dies könnte zu ungenauen ergebnisse führen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2995da29",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Erste Schritte\n",
        "\n",
        "Authentifizieren Sie sich mit Ihrem [IBM Quantum Platform API-Schlüssel](http://quantum.cloud.ibm.com/) und wählen Sie die TEM-Funktion wie folgt aus. (In diesem Codeausschnitt wird davon ausgegangen, dass Sie [Ihr Konto](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) bereits in Ihrer lokalen Umgebung gespeichert haben.)\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "cc0a8093",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[QiskitFunction(qunova/hivqe-chemistry),\n",
              " QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),\n",
              " QiskitFunction(algorithmiq/tem),\n",
              " QiskitFunction(qedma/qesem),\n",
              " QiskitFunction(multiverse/singularity),\n",
              " QiskitFunction(ibm/circuit-function),\n",
              " QiskitFunction(q-ctrl/optimization-solver),\n",
              " QiskitFunction(colibritd/quick-pde),\n",
              " QiskitFunction(q-ctrl/performance-management),\n",
              " QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "\n",
        "tem_function_name = \"algorithmiq/tem\"\n",
        "catalog = QiskitFunctionsCatalog(channel=\"ibm_quantum_platform\")\n",
        "# verify that you have access to the function\n",
        "catalog.list()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "08fa6dcf",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Load your function\n",
        "tem = catalog.load(tem_function_name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ae7adcc7",
      "metadata": {},
      "source": [
        "<span id=\"example\" />\n",
        "\n",
        "## Beispiel\n",
        "\n",
        "Der folgende Ausschnitt zeigt ein Beispiel, in dem TEM verwendet wird, um die Erwartungswerte einer Beobachtungsgröße in einem einfachen Quantenkreis zu berechnen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "ab05b87f",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.quantum_info import SparsePauliOp\n",
        "\n",
        "# Create a quantum circuit\n",
        "qc = QuantumCircuit(3)\n",
        "qc.u(0.4, 0.9, -0.3, 0)\n",
        "qc.u(-0.4, 0.2, 1.3, 1)\n",
        "qc.u(-1.2, -1.2, 0.3, 2)\n",
        "for _ in range(2):\n",
        "    qc.barrier()\n",
        "    qc.cx(0, 1)\n",
        "    qc.cx(2, 1)\n",
        "    qc.barrier()\n",
        "    qc.u(0.4, 0.9, -0.3, 0)\n",
        "    qc.u(-0.4, 0.2, 1.3, 1)\n",
        "    qc.u(-1.2, -1.2, 0.3, 2)\n",
        "\n",
        "# Define the observables\n",
        "observable = SparsePauliOp(\"IYX\", 1.0)\n",
        "\n",
        "# Define the execution options\n",
        "pub = (qc, [observable])\n",
        "options = {\"default_precision\": 0.02}\n",
        "\n",
        "# Define backend to use. TEM will choose the least-busy device\n",
        "# reported by IBM if not specified\n",
        "backend_name = \"ibm_marrakesh\"\n",
        "\n",
        "# Run the TEM function (uses around three minutes of QPU time)\n",
        "job = tem.run(pubs=[pub], backend_name=backend_name, options=options)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6e2a97e2",
      "metadata": {},
      "source": [
        "Verwenden Sie die Qiskit Serverless-APIs, um den Status Ihres Qiskit Function-Workloads zu überprüfen:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "47b0db71",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "ea1d7802-b067-4cc9-af39-3c2402d22413\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "QUEUED\n"
          ]
        }
      ],
      "source": [
        "# Print the ID so you can use it later, if necessary\n",
        "print(job.job_id)\n",
        "print(job.status())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fbaeace8",
      "metadata": {},
      "source": [
        "Sie können die Ergebnisse als zurückgeben:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "ad5b9a53",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "-0.10628832892063486\n"
          ]
        }
      ],
      "source": [
        "result = job.result()\n",
        "evs = result[0].data.evs\n",
        "print(evs[0])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e5e138d3",
      "metadata": {},
      "source": [
        "<Admonition type=\"info\">\n",
        "  Der Erwartungswert für die geräuschlose Schaltung für den gegebenen Operator sollte etwa `0.18409094298943401` betragen.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Unterstützung anfordern\n",
        "\n",
        "Wenden Sie sich an [qiskit\\ \\_ibm@algorithmiq.fi](mailto:qiskit_ibm@algorithmiq.fi)\n",
        "\n",
        "Achten Sie darauf, dass Sie die folgenden Informationen angeben:\n",
        "\n",
        "* Qiskit Function Job ID (`qiskit-ibm-catalog`), `job.job_id`\n",
        "* Eine detaillierte Beschreibung des Problems\n",
        "* Alle relevanten Fehlermeldungen oder Codes\n",
        "* Schritte zum Reproduzieren des Problems\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 Zugriff auf die Fehlerbehebung für Tensor-Netzwerke von Algorithmiq](https://quantum.ibm.com/functions?id=4b1b9d76-c18b-4788-b70b-15125111fbe6).\n",
        "  * Rufen Sie die [API-Referenz](/docs/api/functions/algorithmiq-tem) für diese Qiskit-Funktion auf.\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
}