コンテンツにスキップ

イントロダクション

組合せ最適化問題を解くためのソルバーには様々な種類があります。 本資料で紹介するソルバーは以下の通りです。

観点量子アニーリングシミュレーテッドアニーリングGurobi
対象とする形式QUBO(イジング)QUBO含むコスト関数全般MIPなど様々な形式
解の性質近似解近似解厳密解
スケール今後に期待大規模に強い制約構造次第で強力
得意領域局所障壁の突破ヒューリスティック探索厳密最適化・制約問題

量子アニーリングでは、どんな問題でも 「QUBO(キューボ)」 と呼ばれる以下の数式形式に変換する必要があります。

H=i,jQijxixjH = \sum_{i,j} Q_{ij} x_i x_j

難しい式に見えますが、要するに 「二値変数 xx 同士の掛け算(二次式)と足し算だけで書いてね」 というルールです。 (※ xx は 0 か 1 の値しか取れません)

例えば、「必ず1つ選ぶ」という制約を表すには (x1+x2+x31)2(x_1 + x_2 + x_3 - 1)^2 という式を使いますが、これをマシンに渡すには x12+x22++2x1x2x_1^2 + x_2^2 + \dots + 2x_1x_2 \dots のように展開する必要があります。

QUBO形式に定式化をすることさえできれば、上記のソルバーに問題を投げ込み解を得ることができるようになります。

元々の問題からQUBOへ変換するために、制約項を引っ張りだし、スラック変数で不等式制約を書いて、整数変数はバイナリ表現に変換し……ということを手でやることは(理解には重要ですが)大変な作業です。そんな種々の作業をサポートしてくれるライブラリを紹介します。