QPLIBインスタンスをダウンロードする

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ステップで実行できます:

  1. OMMX Python SDKのdataset.qplib関数で、3514インスタンスをダウンロードする。

  2. ダウンロードしたインスタンスを、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つがあり、それぞれに専用のプロパティが用意されています:

アノテーション

プロパティ

説明

org.ommx.v1.instance.authors

authors

そのインスタンスの作者

org.ommx.v1.instance.constraints

num_constraints

そのインスタンスにある制約条件の数

org.ommx.v1.instance.created

created

そのインスタンスがOMMX Artifact形式で保存された日時

org.ommx.v1.instance.dataset

dataset

そのインスタンスが属するデータセット名

org.ommx.v1.instance.license

license

そのデータセットのライセンス

org.ommx.v1.instance.title

title

そのインスタンスの名前

org.ommx.v1.instance.variables

num_variables

そのインスタンスにある決定変数の総数

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