Qamomile v0.12.5では、PCEConverterとPCEEncoderによるPauli Correlation Encoding(PCE)を追加しました。これにより、二次の最適化ワークフローでスピン変数をk-body Pauli correlatorとしてエンコードし、各スピン変数に1量子ビットを割り当てる方法より少ない量子ビットで扱える場合があります。QURI Partsのサンプリングには再現性のためのseedを渡せるようになりました。さらに、制御ゲート、測定結果を使う条件分岐、Vector要素の期待値計算まわりの不具合も修正しています。
pip install qamomile==0.12.5新機能¶
Pauli Correlation Encoding(PCE)¶
PCEConverterを使うと、ommx.v1.InstanceまたはQamomileのBinaryModelとして与えた二次QUBO/Ising最適化問題にPauli Correlation Encodingを適用できます。PCEは各スピン変数を異なるk-body Pauli correlatorへエンコードします。これにより、各スピン変数に1量子ビットを割り当てる方法より少ない量子ビットで最適化問題を扱える場合があります。num_qubitsを指定しない場合、C(n, k) * 3**k >= num_variablesを満たす最小のn >= kを使います。割り当てられたobservableはget_encoded_pauli_list()で取得でき、correlator期待値はdecode(...)で復号できます(#369)。
from qamomile.optimization.binary_model import BinaryModel
from qamomile.optimization.pce import PCEConverter
ising = BinaryModel.from_ising(
linear={0: 1.0, 1: -1.0, 2: 0.5},
quad={(0, 1): 2.0},
constant=0.0,
)
converter = PCEConverter(ising, correlator_order=2)
observables = converter.get_encoded_pauli_list()
sampleset = converter.decode([0.8, -0.4, 0.2])
print(converter.num_qubits, len(observables))
print(sampleset.samples, sampleset.energy)2 3
[{0: 1, 1: -1, 2: 1}] [0.5]Pauli Correlation Encoding(PCE)のドキュメントも参照してください。
QURI Partsサンプリングの再現性¶
既定のQulacsベースサンプラーでは、QuriPartsExecutor(seed=...)とQuriPartsTranspiler().executor(seed=...)で乱数seedを固定できるようになりました。同じseedで作ったExecutorを同じ回路に対してサンプリングすると、同一のショットカウントが得られます。seedを省略すると従来どおり非決定的に動作します(#441)。
from qamomile.quri_parts import QuriPartsTranspiler
transpiler = QuriPartsTranspiler()
executor = transpiler.executor(seed=42)バグ修正¶
測定済み
Vector[Bit]要素を使う条件分岐を修正しました。s = qmc.measure(register)の後に書くif s[i]:、if s[0] & s[1]:、while s[i]:のようなパターンや、if s[j:j+1][0]:のようなスライスビュー上の条件は、これまでトランスパイル時に失敗することがありました。v0.12.5では、dynamic control flow対応SDKで正しいclassical bitアドレスへloweringされるようになりました(#443)。Vector要素に対するqmc.expvalの挙動を修正しました。qmc.expval(q[1], obs)やqmc.expval((q[1],), obs)が、親Vector、スライスビュー、composite gateの結果、制御ゲートの結果でも正しい量子ビットを参照するようになりました(#450)。制御ゲートの実行が対応SDK間でより一貫しました。QURI PartsとCUDA-Qでは、それぞれのSDKが対応している範囲で、より多くの
qmc.control(...)パターンをend-to-endで扱えるようになりました。対象には、制御化した量子カーネル、parameterized composite、powered control、broadcast target、選択されたcontrol indexのケースが含まれます。一方、サポートされない形は引き続き明確なエラーになります(#442、#444、#447)。Vectorスライスのrefreshとborrow checkのサポート範囲を広げました。同じスライスのrefresh、隣接するsymbolic sliceのborrow、スライス代入のrefresh経路のうち安全性を証明できるものは扱えるようになりました。一方、サポートされないsymbolic overlapのケースは引き続き拒否され、リポジトリ内の制限事項として明示されています(#444)。
ドキュメント¶
新しいPauli Correlation Encoding(PCE)の記事は、
PCEConverter、hardware-efficient ansatz、SciPy最適化、sign-rounding decodeを使ってPCE MaxCutワークフローを構築します(#369)。新しいOMMX Quantum Benchmarksの活用(1):Qamomileによる量子アルゴリズムの実装とベンチマークの統合記事は、OMMX Quantum BenchmarksからLABSインスタンスを読み込み、QamomileのQAOAワークフローを実行し、OMMX adapter経由のSCIPと比較します(#393)。
QURI Partsサポートでは、seed付きQulacsサンプリングと、チュートリアルを繰り返し実行したときの再現性を示しています(#441)。
水素分子に対するVQEでは、より明確な"Hardware Efficient SU(2)"というansatz名を使うようになりました(#414)。