はじめに
量子ゲート方式の組合せ最適化でさらに一歩進んだテクで探索の空間を制限するテクがあります。IBMのAquaに収録されてるQAOAはこのテクをきちんと含んでたので、みてみます。
IBMのAqua
IBMのQiskitという量子コンピュータ向けのSDKのライブラリとしてアルゴリズムが搭載されています。その中でQAOAという最適化計算用のアルゴリズムがあります。
QAOA
QAOAは最適化アルゴリズムで、
https://qiskit.org/documentation/locale/ja_JP/api/qiskit.aqua.algorithms.QAOA.html
に収録されています。
classQAOA(operator, optimizer, p=1, initial_state=None, mixer=None, initial_point=None, max_evals_grouped=1, aux_operators=None, callback=None, auto_conversion=True)
様々な引数を設定できるクラスとして設定されています。そのなかに、
mixer=None
を見つけました。
operator (BaseOperator) – Qubit operator
p (int) – the integer parameter p as specified in https://arxiv.org/abs/1411.4028
initial_state (InitialState) – the initial state to prepend the QAOA circuit with
mixer (BaseOperator) – the mixer Hamiltonian to evolve with. Allows support of optimizations in constrained subspaces as specified in https://arxiv.org/abs/1709.03489
optimizer (Optimizer) – the classical optimization algorithm.
initial_point (numpy.ndarray) – optimizer initial point.
max_evals_grouped (int) – max number of evaluations to be performed simultaneously.
aux_operators (list) – aux operators
いろんなパラメータがありますが、
mixer (BaseOperator) – the mixer Hamiltonian to evolve with. Allows support of optimizations in constrained subspaces as specified in https://arxiv.org/abs/1709.03489
があります。ハミルトニアンの時間発展のミキサーを変更することで、制約部分空間の内部に制限して解の探索ができます。これはとてもありがたいです。
通常のQAOAステップは、
1、初期ハミルトニアンと初期状態を準備する。
2、最終ハミルトニアンを準備する。
3、時間発展させる。
この際にミキサーは初期ハミルトニアンの時間発展を利用しますが、初期状態と初期ハミルトニアンを自由に変更でき、特に、swap演算子を利用することで効率的に部分空間を活用できます。
IBM Qiskit
QAOA使うなら是非このmixer機能は使って欲しいです。時間があるときに実際のコードで実行してみたいと思います。