クイックリファレンス: 変数と式
使用されるデータ型 qbpp::Expr
coeff_t: オブジェクトの係数
に使用される整数データ型qbpp::Termオブジェクトの
係数に使用される整数データ型。 デフォルトの型はint32_tです。 この
型を変更するには、COEFF_TYPEマクロをコンパイル時に定義します。例:-DCOEFF_TYPE=int16_tenergy_t: オブジェクトのエネルギー値を計算するために使用される整数データ型
。qbpp::Exprオブジェクトのエネルギー値を計算するために使用される整数データ型、
およびqbpp::Exprの整数定数項にも使用される。
デフォルトの型はint64_tです。 この
型を変更するには、コンパイル時にENERGY_TYPEコンパイル時にマクロを定義します。例:-DENERGY_TYPE=int32_tのビット幅は
energy_tは、以下のビット幅以上であることが保証されます:coeff_t.vindex_t:
として定義されuint32_tと定義され、各qbpp::Varオブジェクトに固有の整数IDを格納するために使用されます
。ほとんどの場合、このデータ型を変更する必要はありません。
利用可能な整数データ型
-
標準整数型 :
int8_t,int16_t,int32_t,int64_t -
多精度整数型 (Boost.Multiprecisionライブラリで実装):
qbpp::int128_t,qbpp::int256_t,qbpp::int612_t,qbpp::int1024_t,qbpp::cpp_int -
qbpp::cpp_int: 精度
制限のない整数型。
警告: パフォーマンス
を最大化するため、QUBO++ は算術オーバーフローをチェックしません。
開発およびテスト時には、より広いビット幅を使用することを推奨します。coeff_tおよびenergy_tのビット幅を広く設定することを推奨します。 必要なビット
幅が不明な場合は、qbpp::cpp_intを使用して正確性を確保し、 検証後に固定幅整数型に切り替えてください。
クラスオブジェクトの出力
QUBO++ のほとんどのクラスは << 演算子と std::ostreamデバッグに有用です。
例えば、QUBO++内のオブジェクト obj は以下のように出力できます std::cout 次のように出力できます:
std::cout << obj << std::endl;
これにより、 obj.str() または str(obj)を呼び出し、objのテキスト表現を含む
std::stringを返します。
この設計により、デバッガーに依存せずに内部状態を簡単に確認できます。
変数クラス
qbpp::Var: 一意の32ビット整数IDと変数名を表す文字列を保持するクラス。
注記
オブジェクトqbpp::Varオブジェクトは変数を記号的に表現します。特定のデータ
型は関連付けられていません。バイナリ、スピン、その他のタイプの変数を表現するために使用できます
。
変数作成関数
変数を作成するために以下の関数が提供されています:
-
qbpp::var("name"):
指定された名前のqbpp::Varオブジェクトを作成します"name". -
qbpp::var("name", s1): 基底
名を持つqbpp::Varオブジェクトの1次元配列(ベクトル)を作成します"name"を基底名とする オブジェクトの1次元配列(ベクトル)を作成します。
各要素はname[i]で表されます。
結果の型はqbpp::Vector<qbpp::Var>. -
qbpp::var("name", s1, s2): 基底
名を持つqbpp::Varオブジェクトの基底名を持つ"name"を持つオブジェクトの二次元配列(行列)を作成します。
各要素はname[i][j]で表されます。
結果の型はqbpp::Vector<qbpp::Vector<qbpp::Var>>. -
qbpp::var("name", s1, s2, ...): 基底
名を持つqbpp::Varオブジェクトの多次元配列を作成します。"name"を持つオブジェクトの多次元配列を作成します。
各要素はname[i][j]....
結果の型はネストされたqbpp::Vector.
注記
もし"name"が省略された場合、番号付きの名前(例:"{0}","{1}", … などの番号付き名前が作成順に自動的に割り当てられます。
qbpp::Var メンバ関数
インスタンスに対して qbpp::Var インスタンス xに対して、以下のメンバ関数が利用可能です:
-
std::string x.str(): の名称
を返しますx. -
vindex_t x.index(): 一意の
整数IDを返しますx.
通常、QUBO++プログラムではこれらのメンバ関数を明示的に呼び出す必要はありません。
整数変数クラス
qbpp::VarInt: 指定された範囲を持つ
整数変数を表すqbpp::Expr指定された範囲を持つ整数変数を表すクラス。
整数変数作成関数
整数変数を作成するために以下の関数が提供されます:
-
qbpp::var_int("name"): 内部で使用される
ヘルパーオブジェクトを返すのみで、qbpp::VarIntそれ自体では作成しません。
整数変数を定義するにはqbpp::VarIntを定義するには、以下に示すように<=演算子を使用して範囲を指定する必要があります。 -
l <= qbpp::var_int("name") <= u:
ここで、lとuは整数でなければならない。
この式はqbpp::VarIntオブジェクトを作成します。"name"という名前の
オブジェクトを作成します。 内部的には、qbpp::Expr範囲内の全ての整数を表すオブジェクトを内部的に保持している。[l, u]のすべての整数を表す オブジェクトを内部的に含む。
内部的には、これによってqbpp::Varオブジェクトも作成します。 -
l <= qbpp::var_int("name", s1) <= u: 1次元配列(ベクトル)を作成します
。qbpp::VarIntオブジェクトの1次元配列(ベクトル)を作成します。"name"
を持つオブジェクトの1次元配列(ベクトル)を作成します。[l, u]を持つオブジェクトの1次元配列(ベクトル)を作成します。
各要素はname[i]で表されます。
結果の型はqbpp::Vector<qbpp::VarInt>となります。
より高次元のqbpp::VarIntオブジェクトの多次元配列はqbpp::Varオブジェクトと同様の方法で作成できる。
整数変数メンバー関数
qbpp::VarInt 例えば xに対して、以下のメンバ関数が利用可能です:
-
std::string x.name():
返り値:x. -
std::string x.str(): 基底となる式の
文字列表現を返します。 -
energy_t x.min_val():
最小値を返しますlを返しますx. -
energy_t x.max_val():
最大値を返しますuのx. -
const qbpp::Vector<qbpp::Var>& x.vars(): 整数変数を
表現するために使用されるオブジェクトベクトルのqbpp::Var整数変数を表すオブジェクトベクトルの const 参照を返します。 -
const qbpp::Vector<energy_t>& x.coeffs(): 整数係数ベクトルの
const 参照を返します。
次の式は、 x:
x.min_val() + qbpp::sum(x.coeffs() * x.vars())