Dense Evolution について
Dense Evolution は、量子計算の研究者や開発者向けの量子シミュレーションツールキットです。状態ベクトルと MPS エンジン、VQE、ノイズ処理、量子化学機能を備え、ローカルの回路エディターと Agent 用 MCP サーバーも含みます。
主な機能
- 01JAX XLA コンパイルによる状態ベクトル・MPS シミュレーション
- 02チャンク実行とディスクへのオーバーフロー
- 03ノイズモデルとゼロノイズ外挿
- 04微分可能な VQE と分子ハミルトニアン
- 05OpenQASM 2.0/3.0 の解析と相互運用
- 06回路エディターとローカルダッシュボード
活用シーン
- 01メモリ制限下での量子回路シミュレーション
- 02VQE と分子量子化学計算の実行
- 03ノイズと量子誤差緩和の研究
- 04Agent による回路エディターの操作
MCP 対応
Agent がローカルで動作する回路エディターを操作するための、22 個のツールを備えた MCP サーバーが含まれています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx dense-evolutionDENSE_EVOLUTION_KERNEL_URLURL of the running Dense-Evolution Composer kernel. Start it first with 'dense-evolution serve' (requires the [composer] extra). Defaults to http://127.0.0.1:8800.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
高性能な量子シミュレーションツールキット コンパイル、ノイズ、VQE、QEC、化学、エージェントネイティブなツール群を備えた Statevector/MPS エンジンです。
Dense Evolution Dashboard(Streamlit)をダウンロード
Windows (.bat) ·
macOS / Linux (.sh)
目次
▍ 概要
最大28量子ビットを約3秒で、クラッシュすることなく実行できます。Dense Evolution は、JAX XLA を通じて Statevector 回路を JIT コンパイルし、自動的にチャンク化します。さらにメモリ上限を超える場合は、メモリがいっぱいになるとディスクにスピルするため、実際のシミュレーションを OOM で停止させずに実行し続けられます。
ローカルの Streamlit ダッシュボードとウェブベースの Composer エディターも含まれています。詳しくは、以下のComposer と MCP サーバーをご覧ください。
▍ インストール
pip install dense-evolution # JAX is a core dependency, installed by default
# full stack: GPU · dashboard · Qiskit/PennyLane interop
pip install dense-evolution[full]
# just the interop bridge
pip install dense-evolution[qiskit]
pip install dense-evolution[pennylane]
# native Hartree-Fock (basis-set data)
pip install dense-evolution[hf]
# Composer's local kernel (see "Composer" below)
pip install dense-evolution[composer]
# MCP server for the Composer kernel (see "MCP Server" below)
pip install dense-evolution[mcp]
# development
git clone https://github.com/tatopenn-cell/Dense-Evolution.git
cd Dense-Evolution && pip install -e .[full]
⚠️ macOS + dense-evolution[qiskit] ユーザー向け
Qiskit 自身の QuantumCircuit.__init__ は、macOS/arm64 でプロセス全体をセグフォルトさせることが知られています(Dense-Evolution 側では修正できない、Qiskit 上流のバグです。完全な再現手順については リリース v8.1.43 をご覧ください)。dense_evolution/interop.py は、sys.platform == 'darwin' のときに Qiskit ブリッジを初めて使用すると警告(RuntimeWarning。プロセスごとに 1 回)を表示するようになりましたが、処理はブロックしません。Qiskit と macOS の組み合わせによっては問題なく動作する場合もあります。クラッシュが発生した場合は、pip install dense-evolution[pennylane] を実行すると、Qiskit オブジェクトを構築せずに同じ回路相互運用機能を利用できます。
Google Colab(3 行):
!git clone https://github.com/tatopenn-cell/Dense-Evolution.git
%cd Dense-Evolution
!pip install -e .
▍ クイックスタート
from dense_evolution import DenseSVSimulator, QASMParser
# parse any OpenQASM 2.0 / 3.0 string -- single-qubit rotations, a barrier
# (a real OpenQASM synchronization marker: parsed like hardware would, no
# effect on the simulated state), then an entangling layer
qasm = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[3];
rx(pi/3) q[0];
ry(pi/4) q[1];
h q[2];
barrier q;
cx q[0], q[1];
cx q[1], q[2];
rz(pi/6) q[2];
"""
parser = QASMParser()
circuit = parser.parse(qasm)
sim = DenseSVSimulator(n_qubits=3)
sim.run_circuit_jit(circuit.to_tuples())
probs = sim.get_probabilities()
sv = sim.get_statevector()
# probs = [0.3201 0.3201 0.0549 0.0549 0.0183 0.0183 0.1067 0.1067]
ノイズ:
import numpy as np
from dense_evolution import DenseSVSimulator, QASMParser, NoiseModel
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; h q[0]; cx q[0],q[1];'
circuit = QASMParser().parse(qasm)
sim = DenseSVSimulator(n_qubits=2)
sim.run_circuit_jit(circuit.to_tuples())
noisy_sv = NoiseModel.apply_to_sv(np.asarray(sim.sv), n=2, model='depolarizing', p=0.05, rng=np.random.default_rng(0))
np.abs(noisy_sv) ** 2
# [0. 0.5 0.5 0. ]
VQE:
import jax
import jax.numpy as jnp
from dense_evolution import QASMParser, circuit_to_energy_fn
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[1]; ry(0.0) q[0];'
circuit = QASMParser().parse(qasm)
energy_fn, n_params = circuit_to_energy_fn(circuit, n_qubits=1)
h = jnp.array([[1.0, 0.0], [0.0, -1.0]], dtype=jnp.complex128) # Pauli Z
theta = jnp.array([0.1])
grad_fn = jax.value_and_grad(energy_fn, argnums=0, has_aux=True)
for _ in range(40):
(energy, sv), grad = grad_fn(theta, h)
theta = theta - 0.5 * grad
# energy = -1.0, theta = [3.14159265]
緩和(ZNE):
import dense_evolution as de
e1, e2, e3 = 1.234, 0.876, 0.611 # values at 1x, 2x, 3x noise
de.zero_noise_extrapolation([e1, e2, e3], [1.0, 2.0, 3.0])
# 1.622
ダッシュボード(ローカル、Streamlit):
pip install "dense-evolution[dashboard]" # JAX already included by default
streamlit run tools/dashboard/app.py
大規模回路向けの OOM 対策:
from dense_evolution import Chunk, QASMParser
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[27]; h q[0:27];'
circuit = QASMParser().parse(qasm)
sim = Chunk(27)
sim.run_chunk(circuit.to_tuples(), chunk_size_gates=500)
▍ 主な機能
- JIT融合ステートベクトルエンジン。 クロネッカー積のオーバーヘッドがなく、ストライドスライスされた線形カーネルの融合をJAX XLA経由でコンパイルします。コードを変更せずに実際のGPU/TPUへディスパッチできます。大規模な低エンタングルメント回路には、シミュレーター · MPSバックエンドを利用できます。
- OOMを防ぐ
Chunkエンジン。 1つの配列に収まらない回路を動的に分割し、実際の計算デバイスの空きメモリに応じてサイズを調整します。さらに、上限を超えた分はディスクに退避します。Chunkガイド。 - 実際のノイズと、その実効的な軽減。 確率的Krausチャネル、Qiskitバックエンドから取り込んだ実デバイスのノイズ、Zero-Noise Extrapolationに対応しています。ショット数をノイズ係数間で最適に配分し、常に有効な状態を返して補正する単一量子ビットのBlochベクトル版も備えています。ノイズ · 軽減 · ノイズ/軽減/修復の意味。
- 一から構築する微分可能なVQE。
circuit_to_energy_fnは、実際の分子VQEが使用するものと同じ、JAXで微分可能なエンジンです。実際のHartree-Fockハミルトニアン、UCCSD/ハードウェア効率型アンザッツ、Adam最適化に対応しています。自動微分。 - Windows、macOS、Linuxでのlibcint積分。
pip install dense-evolutionを実行すると、各システム向けにコンパイルされたlibcintがインストールされます。6-31G*でのエタノールの完全な二電子テンソルを0.32秒で計算します。UHFとROHFを用いた開殻分子にも対応しています(run_uhf、run_cuhf)。native_hf。 - 可逆演算。 レジスターの加算器、減算、比較、剰余演算から剰余べき乗までを、正確な基底状態の置換として、またOPENQASM 2.0ゲート回路として適用します(Cuccaro、Draper、Beauregardの加算器、制御付き剰余乗算)。制御量子ビット1個でのShorの位数発見まで対応します。演算。
- 事後選択。 量子ビットが
|0>、|1>、|±>、|±i>のいずれかで観測された分岐と、その確率を保持します。事後選択。 - OpenQASM 2.0/3.0の双方向対応。 実際のパーサーに加え、Qiskit/PennyLaneとの相互運用ブリッジを備えています。QASMパーサー · 相互運用。
- コードに依存しないQECデコード、Majorana/Jordan-Wignerフェルミオンマッピング、PennyLane独自の基底セットに含まれない元素向けのHartree-Fockの一からの実装、通過可能なワームホールに着想を得たテレポーテーションプロトコル、実際のQM/MM領域分割(リングを考慮したBFS、Diffuse2Seg由来の関連性伝播)などに対応しています。すべての機能についてはAPIリファレンス全文をご覧ください。
▍ ベンチマーク
Windows、CPU のみ、RAM 8 GB で測定。PennyLane の default.qubit は状態ベクトル全体を割り当てますが、Dense Evolution の Chunk は量子ビット数にかかわらず約 2 GB を一定に保ちます。
| 量子ビット数 | ヒルベルト空間 | PennyLane | Dense Evolution | チャンクの構成 |
|---|---|---|---|---|
| 26 | 67,108,864 | ✅ 1,074 MB | ✅ 2,050 MB | 1× (2²⁷) |
| 28 | 268,435,456 | ❌ OOM | ✅ 2,050 MB | 2× (2²⁷) |
| 32 | 4,294,967,296 | ❌ OOM | ✅ 2,048 MB | 32× (2²⁷) |
Google Colab(RAM 12 GB)では、n=28 の処理は最初から最後まで約 3 秒で実行されます(JIT コンパイル済み、num_chunks=2)。マルチチャンク経路は OOM を安全に回避するだけでなく、高速です。実際の RAM の上限を超える場合(Chunk 単体でも、プロセスをクラッシュさせずに MemoryPressureError を適切に発生させます)、allow_disk_overflow=True を指定すると、失敗するのではなく、低速なディスクバックの経路にフォールバックします。速度はまだベンチマークしていませんが、正確性を優先しています。測定結果の全表は docs/api/chunk.md をご覧ください。
▍ Composer と MCP サーバー
自分のマシン上で動作する本格的な回路エディター(グラフィカルまたは OpenQASM)と、エージェント(Claude Code、Claude Desktop など)が直接操作できるように 22 個のツールを公開する MCP サーバーです。Composer · MCP Server。
▍ 主なリソース
▍ 変更履歴
📜 変更履歴とリリースの全文 — すべてのバージョンを最新のものから掲載しています。
▍ ライセンス
GNU Affero General Public License v3.0 以降。 商用ライセンスはご要望に応じて提供します。
8.3.2 までのリリースは Business Source License 1.1 に基づいて公開されていました:LICENSE-BUSL-1.1-until-8.3.2.md
全文:LICENSE
▍ 引用について
Dense-Evolution が学術研究に役立つ場合は、CITATION.cff のメタデータを使って引用してください(GitHub 独自の「このリポジトリを引用」ボタン、および Citation File Format に対応する文献管理ツールで認識されます)。
Zenodo にアーカイブされています:
- Concept DOI(常に最新バージョンに解決されます):10.5281/zenodo.21855643
- このリリース(v8.2.0):10.5281/zenodo.22818319
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。