JijZept SDK
数理最適化のための開発キット
無料の最適化パッケージをまとめた開発キットです。
JijZept SDKをインストールするだけで、最適化に必要なツールを簡単にセットアップできます。
pip install "jijzept_sdk[all]"
JijZept SDKに含まれるパッケージ
JijModeling
最適化問題を直感的に定式化
JijModelingにより、数式を書くような感覚で定式化できます。数式の構造を解析する機能により、ソルバーの性能をさらに引き出すことができます。
Qamomile
古典に限らない、量子最適化もサポート
Qamomileにより、JijModelingやOMMXで定式化した問題に量子最適化を適用できます。ここでいう「量子」とは、ゲート型量子コンピュータを指します。
クイックスタート
JijZept SDKを使った最適化の実行は以下の4ステップです。
1 インストール
1
インストール
JijZept SDKをインストールして、最適化を行うのに必要なパッケージをすべてセットアップします。
pip install "jijzept_sdk[all]"インストールオプションの詳細はこちらから確認できます。
2 モデリング
2
モデリング
JijModelingを使って数理モデルを記述します。以下はナップサック問題を定式化する例です。
import jijmodeling as jm
problem = jm.Problem("Knapsack", sense=jm.ProblemSense.MAXIMIZE)w = problem.Float("w", ndim=1) # アイテムの重さN = problem.NamedExpr("N", w.len_at(0)) # アイテム数v = problem.Float("v", shape=(N,)) # アイテムの価値W = problem.Float("W") # ナップサックの容量x = problem.BinaryVar("x", shape=(N,)) # 決定変数
problem += (v * x).sum() # 目的関数:価値の最大化problem += problem.Constraint("weight", (w * x).sum() <= W) # 重量制約
# インスタンスデータinstance_data = { "v": [10, 13, 18, 31, 7, 15], # アイテムの価値 "w": [11, 15, 20, 35, 10, 33], # アイテムの重さ "W": 47, # ナップサックの容量}
# OMMX インスタンスを作成instance = problem.eval(instance_data) 3 ソルバーの選択と求解
3
ソルバーの選択と求解
最適化問題をソルバーで求解します。OMMX Adapterを使えば、ソルバーに依らず同じインターフェースで求解することができます。
from ommx_highs_adapter import OMMXHighsAdapter
solution = OMMXHighsAdapter.solve(instance)from ommx_openjij_adapter import OMMXOpenJijSAAdapter
solution = OMMXOpenJijSAAdapter.solve(instance)from ommx_python_mip_adapter import OMMXPythonMIPAdapter
solution = OMMXPythonMIPAdapter.solve(instance)from ommx_pyscipopt_adapter import OMMXPySCIPOptAdapter
solution = OMMXPySCIPOptAdapter.solve(instance)OMMX Adapterがサポートしているソルバーの一覧はこちらをご覧ください。
4 結果の分析
4
結果の分析
以下のように、求解した結果から目的関数・決定変数の値を簡単に取得できます。
目的関数
# Value of the objective functionprint(f"Value of the objective function: {solution.objective}")Value of the objective function: 41.0
決定変数
dv_df = solution.decision_variables_df
# Drop unnecessary columns for displaydv_df.drop(columns=["description", "substituted_value"])| id | kind | lower | upper | name | subscripts | value |
|---|---|---|---|---|---|---|
| 0 | Binary | 0.0 | 1.0 | x | [0] | 1.0 |
| 1 | Binary | 0.0 | 1.0 | x | [1] | 1.0 |
| 2 | Binary | 0.0 | 1.0 | x | [2] | 1.0 |
| 3 | Binary | 0.0 | 1.0 | x | [3] | 0.0 |
| 4 | Binary | 0.0 | 1.0 | x | [4] | 0.0 |
| 5 | Binary | 0.0 | 1.0 | x | [5] | 0.0 |
データ管理をさらに効率的に行いたい場合はMINTOをご利用ください。
相談 無料