式クラス
PyQBPPは式を表現するために内部的に3つのクラスを使用しています:
| クラス | 内容 | 詳細 |
|---|---|---|
Var | 変数 | 32ビットのIDと表示用の文字列 |
Term | 積の項 | 0個以上の変数と整数係数 |
Expr | 式 | 0個以上の項と整数定数項 |
C++ QUBO++とは異なり、PyQBPPではこれらのクラスの違いを意識する必要はありません。 Pythonの動的型付けが必要に応じて自動的に型変換を行います。 例えば、2 * x * y は内部的に Term を生成しますが、+= 等の演算子を使えば自動的に Expr に変換されます。
以下のプログラムは式の構築と簡約化を示しています:
import pyqbpp as qbpp
x = qbpp.var("x")
y = qbpp.var("y")
f = (x + y - 2) * (x - 2 * y + 3)
print("f =", f)
f.simplify()
print("simplified f =", f)
このプログラムの出力は以下の通りです:
f = -6 +x*x +y*x -2*x*y -2*y*y +3*x +3*y -2*x +4*y
simplified f = -6 +x +7*y +x*x -x*y -2*y*y
整数から始めてインクリメンタルに式を構築することもできます:
import pyqbpp as qbpp
x = qbpp.var("x", 4)
f = -1
for i in range(len(x)):
f += x[i]
print(f)
このプログラムの出力は以下の通りです:
-1 +x[0] +x[1] +x[2] +x[3]