mcpField
C
cirq

cirq

github.com/crazymsn開発2335 回インストール22 週間前に更新
リポジトリ

cirq について

Cirqは、量子回路の設計、シミュレーション、実行に使うGoogle Quantum AIのオープンソースPythonフレームワークです。回路変換やノイズモデリングに加え、複数の量子ハードウェアプロバイダーとの連携に対応しています。

主な機能

  1. 01回路とパラメーター付きゲートの構築
  2. 02正確な回路・ノイズあり回路のシミュレーション
  3. 03ハードウェア向けの回路最適化とコンパイル
  4. 04ノイズモデリングと誤差軽減
  5. 05複数の量子ハードウェアへの接続

活用シーン

  1. 01量子アルゴリズムをシミュレーションして測定結果を分析
  2. 02量子ハードウェア向けに回路を最適化・コンパイル
  3. 03異なるノイズ条件で回路の挙動を比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/crazymsn/academic-skills --skill cirq

インストール後、Claude Code で/cirqを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
building.md
experiments.md
hardware.md
noise.md
simulation.md
transformation.md

詳細

Cirq - Python による量子コンピューティング

Cirq は Google Quantum AI によるオープンソースフレームワークで、量子回路を設計、シミュレーション、そして量子コンピューターやシミュレーターで実行するためのものです。

インストール

uv pip install cirq

ハードウェア連携の場合:

# Google Quantum Engine
uv pip install cirq-google

# IonQ
uv pip install cirq-ionq

# AQT (Alpine Quantum Technologies)
uv pip install cirq-aqt

# Pasqal
uv pip install cirq-pasqal

# Azure Quantum
uv pip install azure-quantum cirq

クイックスタート

基本的な回路
import cirq
import numpy as np

# Create qubits
q0, q1 = cirq.LineQubit.range(2)

# Build circuit
circuit = cirq.Circuit(
    cirq.H(q0),              # Hadamard on q0
    cirq.CNOT(q0, q1),       # CNOT with q0 control, q1 target
    cirq.measure(q0, q1, key='result')
)

print(circuit)

# Simulate
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=1000)

# Display results
print(result.histogram(key='result'))
パラメーター化された回路
import sympy

# Define symbolic parameter
theta = sympy.Symbol('theta')

# Create parameterized circuit
circuit = cirq.Circuit(
    cirq.ry(theta)(q0),
    cirq.measure(q0, key='m')
)

# Sweep over parameter values
sweep = cirq.Linspace('theta', start=0, stop=2*np.pi, length=20)
results = simulator.run_sweep(circuit, params=sweep, repetitions=1000)

# Process results
for params, result in zip(sweep, results):
    theta_val = params['theta']
    counts = result.histogram(key='m')
    print(f"θ={theta_val:.2f}: {counts}")

主な機能

回路の構築

量子ビット、ゲート、操作、カスタムゲート、回路パターンを含む、量子回路の構築に関する包括的な情報については、以下を参照してください:

主なトピック:

  • 量子ビットの種類 (GridQubit、LineQubit、NamedQubit)
  • 1 量子ビットおよび 2 量子ビットゲート
  • パラメーター化されたゲートと操作
  • カスタムゲートの分解
  • モーメントによる回路の構成
  • 標準的な回路パターン (ベル状態、GHZ、QFT)
  • インポート/エクスポート (OpenQASM、JSON)
  • qudit と可観測量の扱い
シミュレーション

厳密シミュレーション、ノイズを含むシミュレーション、パラメータースイープ、量子仮想マシンを含む、量子回路のシミュレーションに関する詳細情報については、以下を参照してください:

主なトピック:

  • 厳密シミュレーション (状態ベクトル、密度行列)
  • サンプリングと測定
  • パラメータースイープ (単一パラメーターおよび複数パラメーター)
  • ノイズを含むシミュレーション
  • 状態ヒストグラムと可視化
  • 量子仮想マシン (QVM)
  • 期待値と可観測量
  • パフォーマンスの最適化
回路変換

量子回路の最適化、コンパイル、操作に関する情報については、以下を参照してください:

主なトピック:

  • トランスフォーマーフレームワーク
  • ゲートの分解
  • 回路の最適化 (ゲートのマージ、Z ゲートの取り出し、無視できる操作の削除)
  • ハードウェア向けの回路コンパイル
  • 量子ビットのルーティングと SWAP の挿入
  • カスタムトランスフォーマー
  • 変換パイプライン
ハードウェア連携

さまざまなプロバイダーの実機量子ハードウェアで回路を実行する方法に関する情報については、以下を参照してください:

対応プロバイダー:

  • Google Quantum AI (cirq-google) - Sycamore、Weber プロセッサー
  • IonQ (cirq-ionq) - イオントラップ型量子コンピューター
  • Azure Quantum (azure-quantum) - IonQ および Honeywell のバックエンド
  • AQT (cirq-aqt) - Alpine Quantum Technologies
  • Pasqal (cirq-pasqal) - 中性原子型量子コンピューター

トピックには、デバイス表現、量子ビットの選択、認証、ジョブ管理、ハードウェア向けの回路最適化が含まれます。

ノイズモデリング

ノイズのモデリング、ノイズを含むシミュレーション、特性評価、エラー緩和に関する情報については、以下を参照してください:

主なトピック:

  • ノイズチャネル (デポラライジング、振幅減衰、位相減衰)
  • ノイズモデル (一定、ゲート固有、量子ビット固有、熱)
  • 回路へのノイズの追加
  • 読み出しノイズ
  • ノイズの特性評価 (ランダム化ベンチマーキング、XEB)
  • ノイズの可視化 (ヒートマップ)
  • エラー緩和の手法
量子実験

実験の設計、パラメータースイープ、データ収集、ReCirq フレームワークの利用に関する情報については、以下を参照してください:

主なトピック:

  • 実験設計のパターン
  • パラメータースイープとデータ収集
  • ReCirq フレームワークの構造
  • 代表的なアルゴリズム (VQE、QAOA、QPE)
  • データ分析と可視化
  • 統計解析と忠実度の推定
  • 並列データ収集

一般的なパターン

変分アルゴリズムのテンプレート
import scipy.optimize

def variational_algorithm(ansatz, cost_function, initial_params):
    """Template for variational quantum algorithms."""

    def objective(params):
        circuit = ansatz(params)
        simulator = cirq.Simulator()
        result = simulator.simulate(circuit)
        return cost_function(result)

    # Optimize
    result = scipy.optimize.minimize(
        objective,
        initial_params,
        method='COBYLA'
    )

    return result

# Define ansatz
def my_ansatz(params):
    q = cirq.LineQubit(0)
    return cirq.Circuit(
        cirq.ry(params[0])(q),
        cirq.rz(params[1])(q)
    )

# Define cost function
def my_cost(result):
    state = result.final_state_vector
    # Calculate cost based on state
    return np.real(state[0])

# Run optimization
result = variational_algorithm(my_ansatz, my_cost, [0.0, 0.0])
ハードウェア実行のテンプレート
def run_on_hardware(circuit, provider='google', device_name='weber', repetitions=1000):
    """Template for running on quantum hardware."""

    if provider == 'google':
        import cirq_google
        engine = cirq_google.get_engine()
        processor = engine.get_processor(device_name)
        job = processor.run(circuit, repetitions=repetitions)
        return job.results()[0]

    elif provider == 'ionq':
        import cirq_ionq
        service = cirq_ionq.Service()
        result = service.run(circuit, repetitions=repetitions, target='qpu')
        return result

    elif provider == 'azure':
        from azure.quantum.cirq import AzureQuantumService
        # Setup workspace...
        service = AzureQuantumService(workspace)
        result = service.run(circuit, repetitions=repetitions, target='ionq.qpu')
        return result

    else:
        raise ValueError(f"Unknown provider: {provider}")
ノイズ研究のテンプレート
def noise_comparison_study(circuit, noise_levels):
    """Compare circuit performance at different noise levels."""

    results = {}

    for noise_level in noise_levels:
        # Create noisy circuit
        noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level))

        # Simulate
        simulator = cirq.DensityMatrixSimulator()
        result = simulator.run(noisy_circuit, repetitions=1000)

        # Analyze
        results[noise_level] = {
            'histogram': result.histogram(key='result'),
            'dominant_state': max(
                result.histogram(key='result').items(),
                key=lambda x: x[1]
            )
        }

    return results

# Run study
noise_levels = [0.0, 0.001, 0.01, 0.05, 0.1]
results = noise_comparison_study(circuit, noise_levels)

ベストプラクティス

  1. 回路設計

    • トポロジーに適した量子ビットの種類を使用する
    • 回路はモジュール化し、再利用可能に保つ
    • 測定にはわかりやすいキーでラベルを付ける
    • 実行前にデバイスの制約に照らして回路を検証する
  2. シミュレーション

    • 純粋状態には状態ベクトルシミュレーションを使用する(より効率的)
    • 密度行列シミュレーションは必要な場合(混合状態、ノイズ)にのみ使用する
    • 個別の実行ではなく、パラメータスイープを活用する
    • 大規模システムではメモリ使用量を監視する(2^n は急速に増大する)
  3. ハードウェア実行

    • 必ず最初にシミュレーターでテストする
    • キャリブレーションデータを使用して最適な量子ビットを選択する
    • ターゲットハードウェアのゲートセットに合わせて回路を最適化する
    • 本番実行にはエラー緩和を実装する
    • 高コストなハードウェアの結果はすぐに保存する
  4. 回路最適化

    • まずは高レベルの組み込みトランスフォーマーから始める
    • 複数の最適化を順番に連結する
    • 深さとゲート数の削減を追跡する
    • 変換後に正しさを検証する
  5. ノイズモデリング

    • キャリブレーションデータに基づく現実的なノイズモデルを使用する
    • すべての誤差要因(ゲート、デコヒーレンス、読み出し)を含める
    • 緩和を行う前に特性を把握する
    • ノイズの蓄積を最小限に抑えるため、回路は浅く保つ
  6. 実験

    • データ生成、収集、分析を明確に分けて実験を構成する
    • 再現性のために ReCirq のパターンを使用する
    • 中間結果は頻繁に保存する
    • 独立したタスクは並列化する
    • メタデータを含めて十分に文書化する

追加リソース

よくある問題

ハードウェアに対して回路が深すぎる:

  • 回路最適化トランスフォーマーを使用して深さを減らす
  • 最適化手法については transformation.md を参照

シミュレーションのメモリ問題:

  • 密度行列シミュレーターから状態ベクトルシミュレーターに切り替える
  • 量子ビット数を減らすか、Clifford回路にはスタビライザーシミュレーターを使用する

デバイス検証エラー:

  • device.metadata.nx_graph で量子ビットの接続性を確認する
  • ゲートをデバイスネイティブのゲートセットに分解する
  • デバイス固有のコンパイルについては hardware.md を参照

ノイズありシミュレーションが遅すぎる:

  • 密度行列シミュレーションは O(2^2n) なので、量子ビット数の削減を検討する
  • ノイズモデルは重要な操作にのみ選択的に適用する
  • パフォーマンス最適化については simulation.md を参照

コメント