QOBLIB概要#

この例では、このパッケージのqoblibデータセットの操作方法を示します。

現在の状況サマリー#

データセット

モデル数

インスタンス数

状態

Marketsplit

2

モデルごとに120

✅ 利用可能

Labs

2

モデルごとに99

✅ 利用可能

Birkhoff

1

800

✅ 利用可能

Steiner

1

31

✅ 利用可能

Sports

1

0

🚧 定義済み、インスタンスなし

Portfolio

2

0

🚧 定義済み、インスタンスなし

IndependentSet

2

モデルごとに42

✅ 利用可能

Network

1

20

✅ 利用可能

Routing

1

55

✅ 利用可能

Topology

3

モデルごとに16

✅ 利用可能

凡例:

  • ✅ 利用可能:インスタンスが変換されアクセス可能

  • 🚧 定義済み、インスタンスなし:データセットクラスは存在するが、現在利用可能なインスタンスがない

QOBLIBデータセットの共通使用パターン#

全てのQOBLIBデータセットは、この一貫したインターフェースに従います:

from ommx_quantum_benchmarks.qoblib import DatasetName

# 任意のデータセットをインスタンス化
dataset = DatasetName()

# プロパティを確認
print(f"Name: {dataset.name}")
print(f"Models: {dataset.model_names}")
print(f"Available instances: {dataset.available_instances}")

# インスタンスと解を読み込む(利用可能な場合)
if dataset.available_instances[model_name]:
    instance, solution = dataset(model_name, instance_name)

個別のデータセット#

Marketsplit (01_marketsplit)#

問題タイプ:市場分割最適化問題
モデル:バイナリ線形、バイナリ制約なし
インスタンス:モデルごとに120インスタンス(ms_03_050_002 - ms_15_200_003)

from ommx_quantum_benchmarks.qoblib import Marketsplit

dataset = Marketsplit()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("binary_linear", "ms_03_050_002")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['binary_linear', 'binary_unconstrained']
binary_linear: 156 instances
binary_unconstrained: 156 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 23
The number of constraints: 3
Solution available: True
Objective value: 0.0
Feasible: True
Number of variables: 23

Labs (02_labs)#

問題タイプ:低自己相関バイナリシーケンス
モデル:整数、二次制約なし
インスタンス:99インスタンス(labs002 - labs100)

from ommx_quantum_benchmarks.qoblib import Labs

dataset = Labs()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("integer", "labs002")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['integer', 'quadratic_unconstrained']
integer: 99 instances
quadratic_unconstrained: 99 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 3
The number of constraints: 1
Solution available: True
Objective value: 1.0
Feasible: True
Number of variables: 3

Birkhoff (03_birkhoff)#

問題タイプ:最小バーコフ分解
モデル:整数線形
インスタンス:800インスタンス(bhD-3-001 - bhS-6-100)

from ommx_quantum_benchmarks.qoblib import Birkhoff

dataset = Birkhoff()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("integer_linear", "bhD-3-001")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['integer_linear']
integer_linear: 800 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 12
The number of constraints: 16
Solution available: True
Objective value: 5.0
Feasible: True
Number of variables: 12

Steiner (04_steiner)#

問題タイプ:シュタイナー木パッキング問題
モデル:整数線形
インスタンス:31インスタンス(stp_s020_l2_t3_h2_rs24098 - stp_s040_l2_t4_h3_rs123)

from ommx_quantum_benchmarks.qoblib import Steiner

dataset = Steiner()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("integer_linear", "stp_s020_l2_t3_h2_rs24098")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['integer_linear']
integer_linear: 31 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 78476
The number of constraints: 41381
Solution available: True
Objective value: 228.0
Feasible: True
Number of variables: 78476

Sports (05_sports)#

問題タイプ:スポーツスケジューリング問題
モデル:混合整数線形
インスタンス:現在0インスタンス

Portfolio (06_portfolio)#

問題タイプ:ポートフォリオ最適化
モデル:バイナリ二次および二次制約なし
インスタンス:現在0インスタンス

Independent Set (07_independentset)#

問題タイプ:最大独立集合問題
モデル:バイナリ線形、バイナリ制約なし
インスタンス:モデルごとに42インスタンス

from ommx_quantum_benchmarks.qoblib import IndependentSet

dataset = IndependentSet()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("binary_linear", "aves-sparrow-social")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['binary_linear', 'binary_unconstrained']
binary_linear: 42 instances
binary_unconstrained: 42 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 52
The number of constraints: 454
Solution available: True
Objective value: 13.0
Feasible: True
Number of variables: 52

Network (08_network)#

問題タイプ:ネットワーク設計
モデル:整数LP
インスタンス:20インスタンス

from ommx_quantum_benchmarks.qoblib import Network

dataset = Network()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("integer_lp", "network05")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['integer_lp']
integer_lp: 20 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 151
The number of constraints: 130
Solution available: True
Objective value: 65500.0
Feasible: True
Number of variables: 151

Routing (09_routing)#

問題タイプ:車両ルーティング
モデル:整数線形
インスタンス:55インスタンス

from ommx_quantum_benchmarks.qoblib import Routing

dataset = Routing()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("integer_linear", "XSH-n20-k4-01")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['integer_linear']
integer_linear: 55 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 462
The number of constraints: 483
Solution available: True
Objective value: 646.0
Feasible: True
Number of variables: 462

Topology (10_topology)#

問題タイプ:トポロジー設計
モデル:フローMIP、Seidel線形、Seidel二次
インスタンス:モデルごとに16インスタンス

from ommx_quantum_benchmarks.qoblib import Topology

dataset = Topology()
print(f"Available models: {dataset.model_names}")
for model in dataset.model_names:
    instances = dataset.available_instances[model]
    print(f"{model}: {len(instances)} instances")

(instance, solution) = dataset("flow_mip", "topology_15_3")
# Show the info.
print(f"Instance type: {type(instance)}")
print(f"The number of variables: {instance.num_variables}")
print(f"The number of constraints: {instance.num_constraints}")
print(f"Solution available: {solution is not None}")
# If a solution is available, show its details.
if solution:
    print(f"Objective value: {solution.objective}")
    print(f"Feasible: {solution.feasible}")
    print(f"Number of variables: {len(solution.state.entries)}")
Available models: ['flow_mip', 'seidel_linear', 'seidel_quadratic']
flow_mip: 16 instances
seidel_linear: 16 instances
seidel_quadratic: 16 instances
Instance type: <class 'ommx.v1.Instance'>
The number of variables: 51076
The number of constraints: 23850
Solution available: True
Objective value: 3.0
Feasible: True
Number of variables: 51076

アノテーションについての注記#

ダウンロードされたインスタンスには、annotationsプロパティを通じてアクセス可能なさまざまなアノテーションが含まれています。

アノテーション

プロパティ

説明

org.ommx.v1.instance.title

title

インスタンスの名前

org.ommx.v1.instance.license

license

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

org.ommx.v1.instance.dataset

dataset

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

org.ommx.v1.instance.authors

authors

インスタンスの著者

org.ommx.v1.instance.variables

num_variables

インスタンス内の決定変数の総数

org.ommx.v1.instance.constraints

num_constraints

インスタンス内の制約条件の総数

解も同様です。

アノテーション

プロパティ

説明

org.ommx.v1.solution.instance

instance

この解が適用されるインスタンスのダイジェスト