2.4K Views
November 07, 24
スライド概要
2024年11月7日に開催した、JijModeling 1.8リリースパーティの発表資料です。
connpass: https://j-ij.connpass.com/event/333758/
Youtube: https://www.youtube.com/live/MToZlbekp0g?si=lek5kfN6lH41Cx6V
JijModelingは数理最適化を実務に応用する過程の一つである「定式化」を支援し、数式にデータを入力することで数理モデルを生成するためのPythonパッケージです。この発表では、数理最適化のワークフローの観点からJijModelingの概要を説明します。
イベントは3部構成になっていて、このスライドは第一部です。
第二部: https://www.docswell.com/s/termoshtt/ZEX8ND-ommx
第三部: https://www.docswell.com/s/termoshtt/5N1VRD-jijmodeling-1.8
株式会社Jij エンジニアリングディレクター
JijModeling データから数理モデルを作る “メタ”モデラー JijModeling 1.8 リリースパーティ したろう (@shitaro2021) 2024/11/07 © 2024 Jij Inc.
About したろう ● ● 経歴 ○ 東京工業大学(現東京科学大学)理学院物理学系物理学コース ■ 博士(理学): 時系列解析による大自由度力学系の不安定性解析の研究 ○ Jij Inc. (2021/4-) ■ エンジニアリングディレクター Commitment ○ OpenJij ■ TMPで高速化 @Shitaro ○ JijModeling ■ Rustで実装 @shitaro2021 https://zenn.dev/shitaro2021 © 2024 Jij Inc.
数理最適化とは? ある条件を満たす解のうち、 ある関数の値を最大 or 最小にするものを求める 数学的な手法のこと 60万 例: ナップサック問題 限られた容量のナップサックに対して、 複数のアイテムを選び、その価値の合計を最大化する 10 kg ❓ 30万 20万 ❓ 7 kg © 2024 Jij Inc. ❓ 11 kg 2 kg
実務における数理最適化のワークフロー 課題の 洗い出し プロジェクト ゴール KPI 制約 文献調査 テスト データ 先行事例 整形 収集 分析 インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
アカデミックの文脈では問題を解く部分に注目されがち 課題の 洗い出し プロジェクト ゴール KPI 制約 文献調査 テスト データ 先行事例 整形 収集 分析 インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
実務では問題を解く前後のプロセスがとても重要! 課題の 洗い出し プロジェクト ゴール KPI 制約 文献調査 テスト データ 先行事例 整形 収集 分析 インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
とにもかくにも情報収集から 課題の 洗い出し プロジェクト ゴール KPI 制約 インタビュー プロジェクト スコープ © 2024 Jij Inc. 「コストを削減したい」 「売上を大きくしたい」 「作業工程Aの後は必ず作業工程Bをする決まりだ」 「休憩を1時間以上取らないとダメ」 「だけど休憩を2時間もしてたら仕事にならない」 「全国20箇所の拠点をなんとかしたい」
とにもかくにも情報収集から 課題の 洗い出し プロジェクト ゴール KPI 制約 インタビュー プロジェクト スコープ 「コストを削減したい」 「売上を大きくしたい」 「作業工程Aの後は必ず作業工程Bをする決まりだ」 「休憩を1時間以上取らないとダメ」 「だけど休憩を2時間もしてたら仕事にならない」 「全国20箇所の拠点をなんとかしたい」 解決したい課題は自然言語 で表現される! ❌プログラミング言語 ❌数式 © 2024 Jij Inc.
数理最適化の第一歩は「定式化」にあり 文献調査 先行事例 定式化 「コストを削減したい」 「売上を大きくしたい」 「作業工程Aの後は必ず作業工程Bをする決まりだ」 「休憩を1時間以上取らないとダメ」 「だけど休憩を2時間もしてたら仕事にならない」 「全国20箇所の拠点をなんとかしたい」 自然言語 解決したい課題は 自然言語で表現される! 定式化 数式 数理最適化は数学的な手法 自然言語で表現された課題を数式に変換する 定式化 が重要! © 2024 Jij Inc.
数式とデータから数理モデルを作る 文献調査 先行事例 テスト データ 整形 収集 分析 定式化 データの準備 数式 統計処理 データ 数理モデルの 数理モデル 実装 数式の係数にデータを入力することで数理モデルを作る © 2024 Jij Inc.
数理最適化のフィードバックループを高速に回せ! 課題の 洗い出し KPI 制約 文献調査 テスト データ 先行事例 整形 収集 数理最適化のフィードバックループをどれだけ高速に回せるかがキモ! 分析 プロジェクト ゴール インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
数理最適化のフィードバックループを高速に回せ! 課題の 洗い出し KPI 制約 文献調査 テスト データ 先行事例 整形 収集 数理最適化のフィードバックループをどれだけ高速に回せるかがキモ! 分析 プロジェクト ゴール インタビュー 定式化 データの準備 プロジェクト スコープ Q. どうやって速くループを回すのか? 可視化 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
数理最適化のフィードバックループを高速に回せ! 課題の 洗い出し KPI 制約 文献調査 テスト データ 先行事例 整形 収集 数理最適化のフィードバックループをどれだけ高速に回せるかがキモ! 分析 プロジェクト ゴール インタビュー 定式化 データの準備 プロジェクト スコープ Q. どうやって速くループを回すのか? 可視化 実行可能性 数理モデルの 実装 結果の分析 数理モデル A. ソフトウェア を使う! ROIの 算出 オペレーション の合意形成 施策の適用 コンピューター による計算 © 2024 Jij Inc. 統計処理
ソフトウェアで最適化問題を速く解くには... 課題の 洗い出し プロジェクト ゴール KPI 制約 文献調査 テスト データ 先行事例 整形 収集 分析 インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 モデラー 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 ソル バー コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
「定式化」に対応するソフトウェアが必要! 課題の 洗い出し プロジェクト ゴール KPI “メタ”モデラー 文献調査 先行事例 制約 テスト データ 整形 収集 分析 インタビュー 定式化 データの準備 プロジェクト スコープ 可視化 モデラー 実行可能性 数理モデルの 実装 結果の分析 ROIの 算出 オペレーション の合意形成 施策の適用 ソル バー コンピューター による計算 © 2024 Jij Inc. 数理モデル 統計処理
係数を含む数式を記述する“メタ”な数理モデラー 解決したい課題は 自然言語で表現される! 「コストを削減したい」 「売上を大きくしたい」 「作業工程Aの後は必ず作業工程Bをする決まりだ」 「休憩を1時間以上取らないとダメ」 「だけど休憩を2時間もしてたら仕事にならない」 「全国20箇所の拠点をなんとかしたい」 自然言語 定式化 数式にはデータを入力するための 係数が含まれている 数式 係数にデータを入力する データ JijModeling 数理モデル 実務における数理最適化のプロセスに着目すると 定式化した数式にデータを入力して数理モデルを生成している これを実現するソフトウェアがJijModelingである! © 2024 Jij Inc.
課題の 洗い出し プロジェクト ゴール KPI 制約 文献調査 テスト データ 先行事例 整形 収集 分析 インタビュー 定式化 データの準備 統計処理 プロジェクト スコープ 数理モデルの 実装 数理モデル JijModelingで定式化してみる © 2024 Jij Inc.
最適化問題の例: ナップサック問題 複数個の品物からいくつかを選び、ナップサックに詰め込む。それぞれの品物に は、重量と価値がそれぞれ定まっている。また、ナップサックには耐荷重が決め られており、詰め込む品物の重量の合計はその容量を超えてはいけない。この条 件を満たしながら、品物の価値の合計が最大になるように、詰め込む品物を選び たい。 解決したい課題は 自然言語で表現される! ❓ ❓ © 2024 Jij Inc. ❓
ナップサック問題を定式化する 複数個の品物からいくつかを選び、ナップサックに詰め込む。それぞれの品物 には、重量と価値がそれぞれ定まっている。また、ナップサックには耐荷重が 決められており、詰め込む品物の重量の合計はその容量を超えてはいけない。こ の条件を満たしながら、品物の価値の合計が最大になるように、詰め込む品物を 選びたい。 データを入力する 係数を探す ❓ ❓ © 2024 Jij Inc. ❓
「品物を詰め込む/詰め込まない」に対応する変数を導入 詰め込む 品物 i 詰め込まない 品物 i 各品物をナップサックに詰める or 詰めない選択を 変数の0と1に対応させる © 2024 Jij Inc.
ナップサック問題を定式化する 数式に変換された最適化問題 解決したい課題は 自然言語で表現される! 複数個の品物からいくつかを選び、ナップサックに 詰め込む。それぞれの品物には、重量と価値がそれ ぞれ定まっている。また、ナップサックには耐荷重 が決められており、詰め込む品物の重量の合計はそ の容量を超えてはいけない。この条件を満たしなが ら、品物の価値の合計が最大になるように、詰め込 む品物を選びたい。 定式化 品物の総数 品物iの価値 品物iの重量 ナップサックの耐荷重 品物iを詰めない 品物iを詰める 数理最適化は数学的な手法 自然言語で表現された課題を数式に変換する 定式化 が重要! © 2024 Jij Inc.
JijModelingでナップサック問題を定式化する 品物の総数 品物iの価値 品物iの重量 ナップサックの耐荷重 品物iを詰めない 品物iを詰める import jijmodeling as jm # 係数の定義 n = jm.Placeholder("n") c = jm.Placeholder("c", ndim=1) a = jm.Placeholder("a", ndim=1) b = jm.Placeholder("b") # 添え字の定義 i = jm.Element("i", belong_to=(0, n)) # 変数の定義 x = jm.BinaryVar("x", shape=(n,)) # 最適化問題の記述 problem = jm.Problem("ナップサック問題", sense=jm.ProblemSense.MAXIMIZE) # 目的関数 problem += jm.sum(i, c[i] * x[i]) # 制約条件 problem += jm.Constraint("容量制限", jm.sum(i, a[i] * x[i]) <= b) © 2024 Jij Inc.
JijModelingでナップサック問題を定式化する 品物の総数 品物iの価値 品物iの重量 ナップサックの耐荷重 品物iを詰めない 品物iを詰める import jijmodeling as jm # 係数の定義 n = jm.Placeholder("n") c = jm.Placeholder("c", ndim=1) a = jm.Placeholder("a", ndim=1) b = jm.Placeholder("b") # 添え字の定義 i = jm.Element("i", belong_to=(0, n)) # 変数の定義 x = jm.BinaryVar("x", shape=(n,)) 係数はPlaceholderクラス で表現する # 最適化問題の記述 problem = jm.Problem("ナップサック問題", sense=jm.ProblemSense.MAXIMIZE) # 目的関数 problem += jm.sum(i, c[i] * x[i]) # 制約条件 problem += jm.Constraint("容量制限", jm.sum(i, a[i] * x[i]) <= b) 数式とJijModelingが1:1に対応する © 2024 Jij Inc.
JijModelingで定式化した結果を視覚的に確認できる 品物の総数 品物iの価値 品物iの重量 ナップサックの耐荷重 品物iを詰めない 品物iを詰める Jupyter Notebook上で確認できる! © 2024 Jij Inc.
データを入力してナップサック問題の数理モデルを作る
数式にはデータを入力するための
係数が含まれている
解決したい課題は
自然言語で表現される!
複数個の品物からいくつかを選び、ナップサッ
クに詰め込む。それぞれの品物には、重量と価
値がそれぞれ定まっている。また、ナップサッ
クには耐荷重が決められており、詰め込む品物
の重量の合計はその容量を超えてはいけない。
この条件を満たしながら、品物の価値の合計が
最大になるように、詰め込む品物を選びたい。
自然言語
60万
30万
10 kg
20万
2 kg
7 kg
11 kg
instance_data = {
"n": 3,
"c": [30, 60, 20],
"a": [7, 10, 2],
"b": 11,
}
データ
import jijmodeling as jm
定式化
# 係数の定義
n = jm.Placeholder("n")
c = jm.Placeholder("c", ndim=1)
a = jm.Placeholder("a", ndim=1)
b = jm.Placeholder("b")
# 添え字の定義
i = jm.Element("i", belong_to=(0, n))
# 変数の定義
x = jm.BinaryVar("x", shape=(n,))
JijModelingで
記述された数式
# 最適化問題の記述
problem = jm.Problem("ナップサック問題", sense=jm.ProblemSense.MAXIMIZE)
# 目的関数
problem += jm.sum(i, c[i] * x[i])
# 制約条件
problem += jm.Constraint("容量制限", jm.sum(i, a[i] * x[i]) <= b)
係数にデータを入力する
# 入力するデータの登録
interpreter = jm.Interpreter(instance_data)
# 数理モデルの生成
instance = interpreter.eval_problem(problem)
OMMXで記述された
数理モデル
この機能はv1.8
で追加された!
てらモス後半パートへ
てらモス前半パートへ
JijModelingで記述された数式にデータを入力することで
ナップサック問題の数理モデルが生成される!
© 2024 Jij Inc.
まとめ © 2024 Jij Inc.
実務のワークフローから導かれたJijModeling 実務における数理最適化のプロセスに着目すると、定式化した数式に データを入力して数理モデルを生成するソフトウェアが必要である。 それこそがJijModelingである! ● ● 数式とJijModelingが対応する ○ Jupyter Notebook上で視覚的に確認できる 他にもご利益がある ○ 数式が持つ情報(1-hot制約など)をパターンマッチで自動検出できる ソフトウェアを使って 数理最適化フィードバックループを 高速で回せ! © 2024 Jij Inc.
JijModelingを使ってみよう! ● JijModelingは無料で使えるPythonパッケージ JijModeling-Tutorialsリポジトリで資料を拡充中! GitHub https://github.com/Jij-Inc/JijModeling-Tutorials ● もっと聞きたい?JijModelingコミュニティで待ってるよ! #jijmodeling_日本語 https://discord.gg/gqs6kgRT © 2024 Jij Inc.