QPLIBインスタンスをダウンロードする#
OMMXリポジトリでは、QPLIBの二次計画問題ベンチマークインスタンスをOMMX Artifact形式のデータとして提供しています。
Note
より詳細な説明:QPLIBインスタンスに対応するOMMX ArtifactはOMMXリポジトリのGitHub コンテナーレジストリ (link)で管理されています。
QPLIBは二次計画問題のインスタンスライブラリです。QPLIBの詳細については QPLIB website を参照してください。
GitHub コンテナーレジストリについてはこちらを参照してください。
これらのインスタンスはOMMX SDKで簡単にダウンロードでき、OMMX Adapterの入力としてそのまま利用できます。 例えば、QPLIB_3514インスタンス (参照) をPySCIPOptで解くには、以下の2ステップで実行できます:
OMMX Python SDKの
dataset.qplib
関数で、3514インスタンスをダウンロードする。ダウンロードしたインスタンスを、OMMX PySCIPOpt Adapterを介してPySCIPOptで解く。
具体的なPythonコードは以下の通りです:
# OMMX Python SDK
from ommx import dataset
# OMMX PySCIPOpt Adapter
from ommx_pyscipopt_adapter import OMMXPySCIPOptAdapter
# ステップ1: QPLIBの3514インスタンスをダウンロードする
instance = dataset.qplib("3514")
# ステップ2: OMMX PySCIPOpt Adapterを介してPySCIPOptで解く
solution = OMMXPySCIPOptAdapter.solve(instance)
この機能により、同一のQPLIBインスタンスを使用した二次計画問題ソルバーのベンチマーク測定を効率よく実行できます。
補足:インスタンスに付随するアノテーション#
ダウンロードしたインスタンスには各種アノテーションが含まれており、annotations
プロパティを使って全てのアノテーションにアクセスできます:
import pandas as pd
# アノテーションを pandas を使って表形式で表示する
pd.DataFrame.from_dict(instance.annotations, orient="index", columns=["Value"]).sort_index()
Value | |
---|---|
org.ommx.qplib.conscurvature | indefinite |
org.ommx.qplib.convex | False |
org.ommx.qplib.density | 0.0018696071160533081 |
org.ommx.qplib.laghessianavgblocksize | 1.983607 |
org.ommx.qplib.laghessianmaxblocksize | 61 |
org.ommx.qplib.laghessianminblocksize | 1 |
org.ommx.qplib.nbinvars | 15 |
org.ommx.qplib.nboundedvars | 0 |
org.ommx.qplib.nconcavenlcons | 0 |
org.ommx.qplib.ncons | 1860 |
org.ommx.qplib.ncontvars | 1800 |
org.ommx.qplib.nconvexnlcons | 0 |
org.ommx.qplib.ndiagquadcons | 0 |
org.ommx.qplib.nindefinitenlcons | 900 |
org.ommx.qplib.nintvars | 0 |
org.ommx.qplib.njacobiannlnz | 2700 |
org.ommx.qplib.njacobiannz | 5400 |
org.ommx.qplib.nlaghessianblocks | 915 |
org.ommx.qplib.nlaghessiandiagnz | 900 |
org.ommx.qplib.nlaghessiannz | 2700 |
org.ommx.qplib.nldensity | 0.001652892561983471 |
org.ommx.qplib.nlincons | 960 |
org.ommx.qplib.nlinfunc | 961 |
org.ommx.qplib.nlnz | 2700 |
org.ommx.qplib.nnlbinvars | 15 |
org.ommx.qplib.nnlfunc | 900 |
org.ommx.qplib.nnlintvars | 0 |
org.ommx.qplib.nnlsemi | 0 |
org.ommx.qplib.nnlvars | 1815 |
org.ommx.qplib.nobjnlnz | 0 |
org.ommx.qplib.nobjnz | 915 |
org.ommx.qplib.nobjquaddiagnz | 0 |
org.ommx.qplib.nobjquadnegev | 0 |
org.ommx.qplib.nobjquadnz | 0 |
org.ommx.qplib.nobjquadposev | 0 |
org.ommx.qplib.nquadcons | 900 |
org.ommx.qplib.nquadfunc | 900 |
org.ommx.qplib.nsemi | 0 |
org.ommx.qplib.nsingleboundedvars | 1800 |
org.ommx.qplib.nsos1 | 0 |
org.ommx.qplib.nsos2 | 0 |
org.ommx.qplib.nvars | 1815 |
org.ommx.qplib.nz | 6315 |
org.ommx.qplib.objcurvature | linear |
org.ommx.qplib.objquaddensity | 0 |
org.ommx.qplib.objquadproblevfrac | 0 |
org.ommx.qplib.objsense | min |
org.ommx.qplib.objtype | linear |
org.ommx.qplib.probtype | LMQ |
org.ommx.qplib.solinfeasibility | 2.220446049e-16 |
org.ommx.qplib.solobjvalue | 366.6218167 |
org.ommx.qplib.solsource | Solution found by SCIP |
org.ommx.qplib.url | http://qplib.zib.de/QPLIB_3514.html |
org.ommx.v1.instance.authors | Stefan Vigerske |
org.ommx.v1.instance.constraints | 1920 |
org.ommx.v1.instance.created | 2025-10-02T22:45:08.030992+09:00 |
org.ommx.v1.instance.dataset | QPLIB |
org.ommx.v1.instance.license | CC-BY-4.0 |
org.ommx.v1.instance.title | QPLIB_3514 |
org.ommx.v1.instance.variables | 1815 |
インスタンスには、データセット共通のアノテーションとデータセット固有のアノテーションの2種類があります。
データセット共通のアノテーションには以下の7つがあり、それぞれに専用のプロパティが用意されています:
アノテーション |
プロパティ |
説明 |
---|---|---|
|
|
そのインスタンスの作者 |
|
|
そのインスタンスにある制約条件の数 |
|
|
そのインスタンスがOMMX Artifact形式で保存された日時 |
|
|
そのインスタンスが属するデータセット名 |
|
|
そのデータセットのライセンス |
|
|
そのインスタンスの名前 |
|
|
そのインスタンスにある決定変数の総数 |
QPLIBアノテーション#
QPLIBインスタンスには、二次計画問題の数学的特性を記述する包括的なアノテーションが含まれています。これらのアノテーションは公式のQPLIB仕様に基づいており、org.ommx.qplib.*
プレフィックスを持ちます。
利用可能なすべてのQPLIBアノテーションとその意味の詳細については、公式QPLIBドキュメントを参照してください。
例として、QPLIBインスタンスの問題の種類と目的関数の曲率を確認できます:
# QPLIB固有のアノテーション
print(f"問題の種類: {instance.annotations['org.ommx.qplib.probtype']}")
print(f"目的関数の種類: {instance.annotations['org.ommx.qplib.objtype']}")
print(f"目的関数の曲率: {instance.annotations['org.ommx.qplib.objcurvature']}")
print(f"変数の数: {instance.annotations['org.ommx.qplib.nvars']}")
print(f"制約の数: {instance.annotations['org.ommx.qplib.ncons']}")
問題の種類: LMQ
目的関数の種類: linear
目的関数の曲率: linear
変数の数: 1815
制約の数: 1860