JijZept SDK

数理最適化のための開発キット

無料の最適化パッケージをまとめた開発キットです。 JijZept SDKをインストールするだけで、最適化に必要なツールを簡単にセットアップできます。

pip install "jijzept_sdk[all]"

JijZept SDKに含まれるパッケージ

JijModeling

最適化問題を直感的に定式化

JijModelingにより、数式を書くような感覚で定式化できます。数式の構造を解析する機能により、ソルバーの性能をさらに引き出すことができます。

OMMX

最適化ツール群との連携を実現

OMMXにより、各種ソルバーや可視化・分析のためのツールとの連携が容易になります。

MINTO

煩雑になりがちな実験データの管理を簡単に

MINTOにより、最適化の結果を実行時のパラメータと合わせて保存・管理できます。実験データの整理・比較が容易になります。

Qamomile

古典に限らない、量子最適化もサポート

Qamomileにより、JijModelingやOMMXで定式化した問題に量子最適化を適用できます。ここでいう「量子」とは、ゲート型量子コンピュータを指します。

クイックスタート

JijZept SDKを使った最適化の実行は以下の4ステップです。

1

インストール

JijZept SDKをインストールして、最適化を行うのに必要なパッケージをすべてセットアップします。

pip install "jijzept_sdk[all]"
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

ソルバーの選択と求解

最適化問題をソルバーで求解します。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

結果の分析

以下のように、求解した結果から目的関数・決定変数の値を簡単に取得できます。

目的関数

# Value of the objective function
print(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 display
dv_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をご利用ください。

今すぐインストールする

無料で最適化に必要なパッケージを入手しましょう。
以下のコマンドでパッケージをインストールできます。

pip install "jijzept_sdk[all]"

お気軽にお問い合わせください

JijZept SDKや含まれる各種パッケージについて、ご不明点や技術的なご質問を承っております。