公開ベンチマークを解いて結果を比較する#
dataset のローダーはInstanceを返します。Python SDKとPySCIPOpt Adapterをインストールしてください。初回の取得には公開レジストリへの接続が必要です。どちらのデータセットも同じソルバーで解けます。
from math import isclose
from ommx import dataset
from ommx_pyscipopt_adapter import OMMXPySCIPOptAdapter
mip = dataset.miplib2017("neos-1122047")
result = OMMXPySCIPOptAdapter.solve(mip)
published = float(mip.annotations["org.ommx.miplib.objective"])
assert result.feasible
assert isclose(result.objective, published, abs_tol=1e-6)
MIPLIBの注釈には、その問題の目的値が文字列で記録されています。数値に変換してから求解結果と比較します。QPLIBでは、org.ommx.qplib.* というキーで問題の種類や目的関数の曲率を確認できます。
quadratic = dataset.qplib("3514")
print(quadratic.annotations["org.ommx.qplib.probtype"])
result = OMMXPySCIPOptAdapter.solve(quadratic)
assert result.feasible
手元に候補の値がある場合は、QPLIBの候補を読み込んで評価する例で、求解せずに候補を検査できます。