クイックリファレンス: 解

Sol クラスは QUBO 問題の解を表します。 変数の割り当てとエネルギー値、求解時間を格納します。

Sol の作成

説明
Sol(expr) expr に対するすべてゼロの解を作成

変数値の取得

戻り値の型 説明
sol(x) int Var x を評価(0 または 1 を返す)
sol(t) int Term t を評価
sol(f) int Expr f を評価

配列の場合は要素ごとにアクセスします:

for i in range(n):
    print(sol(x[i]))

変数値の設定

説明
sol.set(x, value) 変数 xvalue(0 または 1)に設定
sol.set(other_sol) 別の Sol からすべての変数値をコピー
sol.set([(x, val), ...]) ペアのリストから変数値を設定
sol.set([other_sol, [(x, val), ...]]) Sol からコピーし、ペアリストを適用
sol.set([(x[0], 1), (x[1], 0), (vi, 5)])

set メソッドは self を返すため、チェーンが可能です:

full_sol = Sol(f).set([sol, [(x[0], 1)]])

エネルギーと評価

戻り値の型 説明
sol.energy int 格納されたエネルギー値を返す
sol.comp_energy() int 現在の変数値からエネルギーを再計算して格納
sol.tts float 求解時間(秒)

sol.energy はソルバーが解を見つけた時点で格納されたエネルギー値を返すプロパティです。 エネルギーの再計算は行いませんsol.set() で変数値を変更した後は、格納されたエネルギーは無効になります。 この状態で sol.energy にアクセスするとエラーが発生します。 sol.comp_energy() を呼んでエネルギーを再計算・更新してからアクセスしてください。

解からの整数の抽出

onehot_to_int() — ワンホットデコード

戻り値の型 説明
qbpp.onehot_to_int(sol(x)) Array 最後の軸に沿ってワンホットをデコード(デフォルト)
qbpp.onehot_to_int(sol(x), k) Array 軸 $k$ に沿ってワンホットをデコード

指定された軸に沿ってデコードし、次元が1つ少ない配列を返します。 出力形状は入力形状から軸 $k$ を除いたもので、各要素はその軸に沿った1のインデックスです。 負のインデックスもサポートされています(例: -1 = 最後の軸)。 有効なワンホットベクトルでないスライスに対しては $-1$ を返します。

詳細と例については ワンホットから整数への変換 を参照してください。

ソルバー情報

ソルバーの結果クラス(EasySolverSolExhaustiveSolverSolABS3SolverSol)は Sol を継承し、 info で追加情報を提供します。

戻り値の型 説明
sol.info dict ソルバー情報のキーバリューペア
sol.sols() list[Sol] 収集された全解
sol.size() int 収集された解の数
sol[i] Sol $i$ 番目の解にアクセス

info 辞書はソルバーのメタデータを文字列のキーバリューペアとして格納しています。 代表的なキー:

キー 説明
"flip_count" 実行された変数フリップの総数
"var_count" モデルの変数数
"term_count" モデルの項数
"version" QUBO++ のバージョン
"cpu_name" CPU モデル名
"hostname" マシンのホスト名
for k, v in sol.info.items():
    print(f"{k} = {v}")

出力

print(sol)

Back to top

Page last modified: 2026.04.04.