変数と式のクラス
VarクラスとExprクラス
PyQBPPはQUBO/HUBO式を構築するための2つの主要なクラスを提供します:
Var: バイナリ変数を表し、表示用の名前が関連付けられます。Expr: 整数の定数と0個以上の積の項からなる式を表します。
Var オブジェクトは qbpp.var() で作成し、イミュータブル(不変)です。 式は変数から算術演算子(+, -, *)を使って構築し、+= などの複合代入演算子で更新可能です。
以下のプログラムは、変数と式の作成を示しています:
import pyqbpp as qbpp
x = qbpp.var("x")
y = qbpp.var("y")
f = 2 * x * y - x + 1
f += 3 * y
print("f =", f)
このプログラムは以下を出力します:
f = 1 -x +2*x*y +3*y
NOTE PyQBPPはバックエンドとしてC++ QUBO++ライブラリを使用しており、内部的には
Term(2*x*yのような単一の積の項)とExpr(項の和)を区別しています。 しかしPyQBPPでは、この区別を意識する必要はありません。 Pythonの動的型付けが必要に応じて自動的に型変換を行うため、自然に式を記述できます。
係数型とエネルギー型
デフォルトの import pyqbpp では、係数に 32ビット整数、エネルギーに 64ビット整数(c32e64)を使用します。 これは大半の問題に最適な最速の型バリアントです。
大規模な係数や任意精度が必要な場合は、サブモジュールをインポートして別の型バリアントを選択できます:
import pyqbpp as qbpp # デフォルト: c32e64 (32ビット係数、64ビットエネルギー)
import pyqbpp.cppint as qbpp # 任意精度 (cpp_int) — 非常に大きな係数向け
以下の型バリアントが利用可能です:
| インポート | 係数 | エネルギー | 用途 |
|---|---|---|---|
import pyqbpp | 32ビット | 64ビット | デフォルト・最も一般的 |
import pyqbpp.c16e32 | 16ビット | 32ビット | 小規模問題 |
import pyqbpp.c32e64 | 32ビット | 64ビット | デフォルトと同じ |
import pyqbpp.c64e64 | 64ビット | 64ビット | 大きな係数 |
import pyqbpp.c64e128 | 64ビット | 128ビット | 大きなエネルギー範囲 |
import pyqbpp.c128e128 | 128ビット | 128ビット | 非常に大規模な問題 |
import pyqbpp.cppint | 無制限 | 無制限 | 任意精度 |
NOTE 型バリアントはインポート時に選択し、後から変更することはできません。 プログラム内の全ての変数、式、ソルバーが同じ型を使用します。
任意精度の例
import pyqbpp.cppint as qbpp
x = qbpp.var("x")
f = 123456789012345678901234567890 * x + 987654321098765432109876543210
print("f =", f)
このプログラムは以下の出力を生成します:
f = 987654321098765432109876543210 +123456789012345678901234567890*x