cirq について
GoogleのオープンソースPython量子回路フレームワークCirqを使うためのスキルです。回路設計やシミュレーションからノイズ研究、Googleやパートナーのバックエンドでの実験まで扱います。
主な機能
- 01量子回路の構築とパラメーター化
- 02厳密・ノイズあり回路シミュレーション
- 03回路変換とハードウェア向けコンパイル
- 04量子ハードウェアプロバイダー連携
- 05ノイズモデリングと特性評価
- 06実験パターンとパラメータースイープ
活用シーン
- 01量子回路の試作とシミュレーション
- 02対象ハードウェア向けの回路最適化
- 03ノイズ条件による回路動作の比較
- 04量子実験でのパラメータースイープ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill cirqインストール後、Claude Code で/cirqを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/building.mdexperiments.mdhardware.mdnoise.mdsimulation.mdtransformation.md詳細
Cirq - Python による量子コンピューティング
Cirq は、量子コンピューターやシミュレーター上で量子回路を設計、シミュレーション、実行するための Google Quantum AI のオープンソースフレームワークです。
このスキルを使用する場面
次のような場合にこのスキルを使用してください。
- Python で NISQ 回路を構築、シミュレーション、最適化する
- Google Quantum AI プロセッサ(
cirq-google経由)またはパートナーのバックエンド(IonQ、Azure Quantum、AQT、Pasqal)でジョブを実行する - ノイズをモデル化し、ハードウェアのゲートセットにコンパイルし、特性評価実験を設計する
- パラメーターのスイープ、トランスフォーマー、ReCirq の実験パターンを使用する
IBM ハードウェアには qiskit、自動微分を使用する量子 ML には pennylane、物理シミュレーションには qutip を使用してください。
インストール
Python 3.11 以降が必要です。現在の安定版リリースは 1.6.1(2025 年 8 月)です。ベンダーのパッケージも同じバージョン番号を使用します。
uv pip install "cirq==1.6.1"
ハードウェアとの統合の場合(再現性を確保するため、一致するバージョンを指定してください)。
# Google Quantum Engine (requires approved GCP project access)
uv pip install "cirq-google==1.6.1"
# IonQ
uv pip install "cirq-ionq==1.6.1"
# AQT (Alpine Quantum Technologies)
uv pip install "cirq-aqt==1.6.1"
# Pasqal
uv pip install "cirq-pasqal==1.6.1"
# Azure Quantum (IonQ, Honeywell/Quantinuum backends)
uv pip install "azure-quantum[cirq]"
開発中に最新機能を使用する場合は、バージョンの固定を省略してください。本番環境やハードウェアで実行する場合は、すべてのパッケージを同じ 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}")
主な機能
回路の構築
量子ビット、ゲート、操作、カスタムゲート、回路パターンなど、量子回路の構築に関する詳しい情報については、次を参照してください。
- references/building.md - 回路構築の完全ガイド
主なトピック:
- 量子ビットの種類(GridQubit、LineQubit、NamedQubit)
- 1 量子ビットゲートと 2 量子ビットゲート
- パラメーター化されたゲートと操作
- カスタムゲートの分解
- モーメントを使った回路の編成
- 標準的な回路パターン(ベル状態、GHZ、QFT)
- インポート/エクスポート(OpenQASM、JSON)
- 量子ディットとオブザーバブルの操作
シミュレーション
厳密なシミュレーション、ノイズを含むシミュレーション、パラメーターのスイープ、Quantum Virtual Machine など、量子回路のシミュレーションに関する詳しい情報については、次を参照してください。
- references/simulation.md - 量子シミュレーションの完全ガイド
主なトピック:
- 厳密なシミュレーション(状態ベクトル、密度行列)
- サンプリングと測定
- パラメーターのスイープ(単一および複数のパラメーター)
- ノイズを含むシミュレーション
- 状態ヒストグラムと可視化
- Quantum Virtual Machine(QVM)
- 期待値とオブザーバブル
- パフォーマンスの最適化
回路変換
量子回路の最適化、コンパイル、操作に関する情報については、次を参照してください。
- references/transformation.md - 回路変換の完全ガイド
主なトピック:
- トランスフォーマーフレームワーク
- ゲートの分解
- 回路の最適化(ゲートの統合、Z ゲートの排除、無視できる操作の削除)
- ハードウェア向けの回路コンパイル
- 量子ビットのルーティングと SWAP の挿入
- カスタムトランスフォーマー
- 変換パイプライン
ハードウェアとの統合
さまざまなプロバイダーの実際の量子ハードウェアで回路を実行する方法については、次を参照してください。
- references/hardware.md - ハードウェア統合の完全ガイド
対応プロバイダー:
- Google Quantum AI(
cirq-google)— Quantum Engine 経由の Sycamore、Weber、Willow プロセッサ(アクセス制限あり。承認済みの GCP プロジェクトが必要です) - IonQ(
cirq-ionq)— トラップイオン型 QPU とシミュレーター - Azure Quantum(
azure-quantum[cirq])— IonQ および Honeywell/Quantinuum のバックエンド - AQT(
cirq-aqt)— Alpine Quantum Technologies - Pasqal(
cirq-pasqal)— 中性原子デバイス
デバイスの表現、量子ビットの選択、認証、ジョブ管理、ハードウェア向けの回路最適化などのトピックを扱います。Google Cloud のセットアップについては、アクセスと認証を参照してください。
ノイズモデリング
ノイズモデリング、ノイズシミュレーション、特性評価、エラー緩和に関する情報は、以下を参照してください。
- references/noise.md - ノイズモデリングの完全ガイド
主なトピック:
- ノイズチャネル(脱分極、振幅減衰、位相減衰)
- ノイズモデル(定数、ゲート固有、量子ビット固有、熱)
- 回路へのノイズの追加
- 読み出しノイズ
- ノイズの特性評価(ランダム化ベンチマーキング、XEB)
- ノイズの可視化(ヒートマップ)
- エラー緩和手法
量子実験
実験の設計、パラメータスイープ、データ収集、ReCirq フレームワークの使用に関する情報は、以下を参照してください。
- references/experiments.md - 量子実験の完全ガイド
主なトピック:
- 実験設計パターン
- パラメータスイープとデータ収集
- 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])
ハードウェア実行のテンプレート
import os
def run_on_hardware(circuit, provider='google', processor_id=None, repetitions=1000):
"""Template for running on quantum hardware."""
if provider == 'google':
import cirq_google as cg
project_id = os.environ['GOOGLE_CLOUD_PROJECT']
engine = cg.Engine(project_id=project_id)
# List available processors: engine.list_processors()
processor_id = processor_id or 'weber' # use your assigned processor_id
sampler = engine.get_sampler(processor_id=processor_id)
return sampler.run(circuit, repetitions=repetitions)
elif provider == 'ionq':
import cirq_ionq as ionq
# Requires IONQ_API_KEY in environment
service = ionq.Service()
return service.run(circuit, repetitions=repetitions, target='qpu')
elif provider == 'azure':
from azure.quantum.cirq import AzureQuantumService
service = AzureQuantumService(
resource_id=os.environ['AZURE_QUANTUM_RESOURCE_ID'],
location=os.environ['AZURE_QUANTUM_LOCATION'],
)
return service.run(circuit, repetitions=repetitions, target='ionq.qpu')
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)
ベストプラクティス
-
回路設計
- トポロジーに適した量子ビットタイプを使用します
- 回路をモジュール化し、再利用可能にします
- 測定には内容が分かるキーを付けます
- 実行前に、回路がデバイスの制約を満たしていることを検証します
-
シミュレーション
- 純粋状態には状態ベクトルシミュレーションを使用します(より効率的です)
- 密度行列シミュレーションは必要な場合にのみ使用します(混合状態、ノイズ)
- 個別の実行ではなく、パラメータスイープを活用します
- 大規模システムではメモリ使用量を監視します(2^n は急速に増加します)
-
ハードウェア実行
- 必ず最初にシミュレーターでテストします
- キャリブレーションデータを使って最適な量子ビットを選択します
- 対象ハードウェアのゲートセットに合わせて回路を最適化します
- 本番実行ではエラー緩和を実装します
- コストの高いハードウェア実行の結果は、すぐに保存します
-
回路の最適化
- 高水準の組み込みトランスフォーマーから始めます
- 複数の最適化を順番に組み合わせます
- 回路の深さとゲート数の削減を追跡します
- 変換後に正しさを検証します
-
ノイズモデリング
- キャリブレーションデータに基づく現実的なノイズモデルを使用します
- すべてのエラー源(ゲート、デコヒーレンス、読み出し)を含めます
- 緩和を行う前に特性を評価します
- ノイズの蓄積を最小限に抑えるため、回路を浅く保ちます
-
実験
- 実験を明確に分離して構成します(データ生成、収集、分析)
- 再現性を確保するため、ReCirq のパターンを使用します
- 中間結果をこまめに保存します
- 独立したタスクを並列化します
- メタデータを含め、十分に文書化します
追加リソース
- 公式ドキュメント:https://quantumai.google/cirq
- API リファレンス:https://quantumai.google/reference/python/cirq
- チュートリアル:https://quantumai.google/cirq/tutorials
- 例:https://github.com/quantumlib/Cirq/tree/main/examples
- バージョンポリシー:https://quantumai.google/cirq/dev/versions
- ReCirq:https://github.com/quantumlib/ReCirq
よくある問題
回路がハードウェアに対して深すぎる場合:
- 回路最適化トランスフォーマーを使って深さを削減します
- 最適化手法については
transformation.mdを参照してください
シミュレーションでメモリの問題が発生する場合:
- 密度行列シミュレーターから状態ベクトルシミュレーターに切り替えます
- 量子ビット数を減らすか、クリフォード回路にはスタビライザーシミュレーターを使用します
デバイス検証エラーが発生する場合:
- device.metadata.nx_graph で量子ビットの接続性を確認します
- ゲートをデバイス固有のゲートセットに分解します
- デバイス固有のコンパイルについては
hardware.mdを参照してください
ノイズシミュレーションが遅すぎる場合:
- 密度行列シミュレーションは O(2^2n) です。量子ビット数を減らすことを検討してください
- 重要な操作のみにノイズモデルを選択的に適用します
- パフォーマンスの最適化については
simulation.mdを参照してください
エージェントの運用手順
- 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
- 入力を明確にします。 データまたはユーザーから形式、識別子、パラメーターを確認します。結果を左右する値は推測せず、質問してください。
- まず小規模に実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当か確認します。
- 上記の手順と参考資料に従って、タスク全体を実行します。
- 結果を検証します。 単位と次元の整合性、保存則または既知の極限、数値的な収束を確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未解決の不確実性を示します。
| 次のような場合 | 対応 |
|---|---|
| 結果が既知の物理的限界に反する | 報告する前に、単位、境界条件、ソルバーの許容誤差を確認します。 |
| これらの手順にある関数、フラグ、またはエンドポイントがインストール済みのバージョンに存在しない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API をでっち上げてはいけません。 |
| 必須の入力、識別子、またはパラメーターが曖昧 | ユーザーに確認するか、実行前に仮定を明示します。 |
整合性に関するルール
- 結果、パラメーター、識別子、引用、統計値を決して捏造しないでください。実行または検証できない場合は、その旨を明確に伝えます。
- 定量的な結果には必ず、不確実性と数値許容誤差を併記します。
- ここに記載されたバージョン固有の情報は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する操作、共有 GPU やクラウドのクォータを消費する操作、個人データや患者データに触れる操作、または取り消せない操作を行う前に、ユーザーに確認します。
関連スキル
pennylane:自動微分機能を備えた、ハードウェアに依存しない量子機械学習フレームワークです。qiskit:Qiskit および IBM Quantum Runtime を使用して、量子回路を構築、シミュレーション、トランスパイル、実行します。