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プロパティを通じてアクセス可能なさまざまなアノテーションが含まれています。
アノテーション |
プロパティ |
説明 |
|---|---|---|
|
|
インスタンスの名前 |
|
|
データセットのライセンス |
|
|
このインスタンスが属するデータセットの名前 |
|
|
インスタンスの著者 |
|
|
インスタンス内の決定変数の総数 |
|
|
インスタンス内の制約条件の総数 |
解も同様です。
アノテーション |
プロパティ |
説明 |
|---|---|---|
|
|
この解が適用されるインスタンスのダイジェスト |