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
# ナップサック問題を定義v = jm.Placeholder("v", ndim=1) # アイテムの価値w = jm.Placeholder("w", ndim=1) # アイテムの重さW = jm.Placeholder("W") # ナップサックの容量N = v.len_at(0, latex="N") # アイテム数x = jm.BinaryVar("x", shape=(N,)) # 決定変数i = jm.Element("i", belong_to=(0, N))
problem = jm.Problem("Knapsack", sense=jm.ProblemSense.MAXIMIZE)problem += jm.sum(i, v[i] * x[i]) # 目的関数:価値の最大化problem += jm.Constraint("weight", jm.sum(i, w[i] * x[i]) <= W) # 重量制約
# インスタンスデータinstance_data = { "v": [10, 13, 18, 31, 7, 15], # アイテムの価値 "w": [11, 15, 20, 35, 10, 33], # アイテムの重さ "W": 47, # ナップサックの容量}
# OMMX インスタンスを作成interpreter = jm.Interpreter(instance_data)instance = interpreter.eval_problem(problem) 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をご利用ください。
関連リソース
JijZept SDKの関連リソースをご確認いただけます。
今すぐインストールする
無料で最適化に必要なパッケージを入手しましょう。
以下のコマンドでパッケージをインストールできます。
pip install "jijzept_sdk[all]"