{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"テンソルネットワーク誤差軽減（TEM） - AlgorithmiqによるQiskit関数\"\n",
        "description: \"アルゴリズムイクによるQiskit関数「TEM」の紹介：テンソルネットワークを用いたソフトウェア後処理誤差軽減による推定値計算\"\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",
        "# テンソルネットワーク誤差軽減（TEM）：AlgorithmiqによるQiskit関数\n",
        "\n",
        "*[APIリファレンス](/docs/api/functions/algorithmiq-tem)を参照してください*\n",
        "\n",
        "<Admonition type=\"note\" title=\"注\">\n",
        "  Qiskit 関数は、 IBM Quantum® Premium Plan、Flex Plan、およびオンプレム ( IBM Quantum Platform API 経由) Plan ユーザーだけが利用できる実験的な機能です。 これらはプレビューリリースであり、変更される可能性がある。\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=\"パッケージ・バージョン\">\n",
        "    このページ上のコードは、以下の要件に基づいて開発されました。\n",
        "    これらのバージョンまたはそれ以降のバージョンを使用することを推奨します。\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",
        "## 概要\n",
        "\n",
        "Algorithmiqのテンソルネットワークエラー緩和（TEM）メソッドは、ハイブリッドな量子-古典アルゴリズムです。 量子-古典アルゴリズムである。 古典的な後処理段階で実行するように設計されています。 TEMを使えば、ユーザーは観測値の期待値を計算することができる。 観測値の期待値を計算することができる。 量子ハードウェアで発生する不可避のノイズによる誤差を、より高い精度とコスト効率で軽減することができる、 量子研究者や産業界にとって非常に魅力的な選択肢となる。 量子研究者や産業界にとって非常に魅力的な選択肢となっている。\n",
        "\n",
        "この方法は、量子プロセッサの状態に影響を与えるグローバル・ノイズ・チャネルの逆数を表すテンソル・ネットワークを構築し 量子プロセッサの状態に影響を与えるグローバル・ノイズ・チャネルの逆数を表すテンソル・ネットワークを構築する。 そのマップを、ノイズのある状態から得られた情報的に完全な測定結果に適用する。 観測量に対する不偏推定量を得る。\n",
        "\n",
        "利点として、TEMは情報的に完全な測定を活用し、観測量の緩和された期待値の膨大な集合へのアクセスを提供するとともに、量子ハードウェア上で最適なサンプリングオーバーヘッドを実現する。これはFilippov et al. (2023)、[arXiv:2307.11740](https://arxiv.org/abs/2307.11740)およびFilippov et al. (2024)で説明されている[arXiv:2403.13542](https://arxiv.org/abs/2403.13542) 測定オーバーヘッドとは、効率的な誤差軽減を行うために必要な追加測定の数を指し、量子計算の実現可能性における重要な要素である したがって、TEMは量子カオス、多体物理学、ハバードダイナミクス、小分子化学シミュレーションなどの分野における応用など、複雑なシナリオにおいて量子優位性を実現する可能性を秘めている\n",
        "\n",
        "TEMの主な特徴と利点をまとめると以下のようになる：\n",
        "\n",
        "1. **最適な測定オーバーヘッド** ：TEMは [理論的境界に関して](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.131.210601)最適である、 つまり、これより小さい測定オーバーヘッドを達成できる方法はない。 言い換えれば 言い換えれば、TEMはエラー緩和を行うために最小限の追加測定を必要とする。 エラー緩和を実行するために、最小限の追加測定が必要なのです。 これは、TEMが最小限の量子ランタイムを使うことを意味する。\n",
        "2. **費用対効果** ：TEMはノイズの軽減をすべて後処理で行うため、量子力学に余分な回路を追加する必要がない。 そのため、量子コンピューターに余計な回路を追加する必要がない。 そのため、計算コストが安くなるだけでなく、量子コンピュータの不完全性によって新たなエラーが発生するリスクも低減できる。 量子デバイスの不完全性に起因する新たなエラーが発生するリスクも低減できる。 デバイスの不完全性に起因する新たなエラー発生のリスクを低減することができる。\n",
        "3. **複数の観測値の推定** ：情報的に完全な TEMは、情報的に完全な測定のおかげで、量子コンピュータからの同じ測定データで複数の観測量を効率的に推定することができます。 量子コンピュータからの測定データを用いて、複数の観測量を効率的に推定します。\n",
        "4. **測定誤差の軽減** ：TEM Qiskit Functionには、独自の測定誤差軽減法も含まれています。 [独自の測定誤差軽減法](https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033154) 短時間の校正で読み出し誤差を大幅に低減することができます。\n",
        "5. **精度** ：TEMは、デジタル量子シミュレーションの精度と信頼性を大幅に向上させる。 デジタル量子シミュレーションの精度と信頼性を大幅に向上させ、量子アルゴリズムの精度と信頼性を高める。 信頼性を高めます。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## 説明\n",
        "\n",
        "TEM関数を使用すると、量子回路上の複数の観測値について、サンプリング・オーバーヘッドを最小限に抑えながら、エラー軽減された期待値を得ることができます。 を最小限のサンプリングオーバーヘッドで得ることができます。 回路は 回路は、情報的に完全な正演算子値メジャー（IC-POVM）を用いて測定される。 IC-POVM）で測定され、収集された測定結果は古典的なコンピュータで処理される。 で処理される。 この測定は、テンソルネットワーク法 メソッドを実行し、ノイズ・インバージョン・マップを構築する。 この関数は この関数は、テンソル・ネットワークを用いてノイズの多い回路全体を反転させるマップを適用する。 層を表現する。\n",
        "\n",
        "![TEM schemhematics](https://quantum.cloud.ibm.com/docs/images/guides/algorithmiq-tem/tem_scheme.svg \"ノイズ量子プロセッサの測定結果を後処理することで、観測可能なOの誤差推定を行う。 UとNは、理想的な量子演算と、それに関連するノイズマップを表し、一般に非局所的であることがある（グレイボックスまで拡張可能）。 Dは、IC測定における効果と双対的な作用素のテンソルを表す。 ノイズ軽減モジュールMは、途中から効率的に収縮するテンソルネットワークである。 収縮の最初の反復は紫の点線で、2回目は破線で、3回目は実線で表されている。\")\n",
        "\n",
        "回路がこの関数に渡されると、トランスパイルされ、2量子ビットゲート（ノイズの多いもの）の層数が最小になるように最適化される。 最適化され、2量子ビットゲート（量子デバイスではノイズの多い 量子デバイス上のノイズの多いゲート)を持つ層の数を最小化するように最適化される。 レイヤーに影響を与えるノイズは [Qiskit Runtime](/docs/api/qiskit-ibm-runtime/noise-learner-noise-learner) で説明されているように、スパース・パウリ・リンドブラッドノイズモデルを用いて学習される。 ヴァン・デン・ベルグ, Z. Minev、A. Kandala、K. Temme、Nat. フィジーク。 (2023).\n",
        "[arXiv:2201.09866](https://arxiv.org/abs/2201.09866).\n",
        "\n",
        "ノイズモデルは、デバイス上のノイズを正確に記述するもので、量子ビットのクロストークなどの微妙な特徴を捉えることができる。 量子ビットのクロストークを含む微妙な特徴を捉えることができる。 しかし しかし、デバイスのノイズは変動やドリフトを起こす可能性があり、学習されたノイズは推定が行われた時点では正確でない可能性がある。 推定が行われる時点では、学習されたノイズは正確ではないかもしれない。 これは不正確な結果をもたらすかもしれない。 の結果になるかもしれない。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2995da29",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## 使用を開始する\n",
        "\n",
        "[IBM Quantum Platform](http://quantum.cloud.ibm.com/) のAPIキーを使用して認証を行い、次のようにTEM機能を選択してください。 （このスニペットは[、アカウントが](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client)すでにローカル環境に保存されていることを前提としています。）\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",
        "## 例\n",
        "\n",
        "次のスニペットは、単純な量子回路を与えられた観測値の期待値を計算するためにTEMを使用した例を示しています。\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": [
        "Qiskit Serverless APIを使用して、Qiskit Functionワークロードの状態を確認します：\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": [
        "として結果を返すことができる：\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",
        "  与えられた演算子に対するノイズレス回路の期待値は、 `0.18409094298943401` 程度のはずである。\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## サポートの利用\n",
        "\n",
        "リーチアウト to [qiskit \\_ibm@algorithmiq.fi](mailto:qiskit_ibm@algorithmiq.fi)\n",
        "\n",
        "次の情報を必ずご記入ください。\n",
        "\n",
        "* Qiskit 職務ID (`qiskit-ibm-catalog`)、 `job.job_id`\n",
        "* 問題の詳細\n",
        "* 関連するエラーメッセージやコード\n",
        "* 問題を再現する手順\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 次のステップ\n",
        "\n",
        "<Admonition type=\"tip\" title=\"推奨事項\">\n",
        "  * [AlgorithmiqのTensor-networkエラー軽減機能へのアクセス権をリクエストしてください](https://quantum.ibm.com/functions?id=4b1b9d76-c18b-4788-b70b-15125111fbe6)。\n",
        "  * このQiskit関数の [APIリファレンス](/docs/api/functions/algorithmiq-tem)をご覧ください。\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
}