More Related Content More from Takami Sato (12) Kaggle Santa 2019で学ぶMIP最適化入門2. アジェンダ
• 線形計画問題(Linear Programming: LP)おさらい
• 混合整数計画問題(Mixed Integer Programming: MIP)ざっくり解説
• モデリング言語とMIPソルバー
• Kaggle Santa 2019コンペ解法解説
• 実装解説
– Gurobi
– CPLEX
– PuLP + CBC
• 雑談
1/22/20kaggle santa 2019で学ぶMIP入門 2
6. 双対定理とLP解法
1/22/20kaggle santa 2019で学ぶMIP入門 6
• 主単体法
• 主問題の実行性と相補性条件(最適性)を満たしながら
双対問題の実行可能性を満たす解を探す
• 双対単体法
• 双対問題の実行性と相補性条件(最適性)を満たしながら
主問題の実行可能性を満たす解を探す
• 主双対内点法
• 主問題と双対問題を実行性と(徐々に)相補性条件(最適性)を解く
• 弱双対定理
• 主問題の実行可能解の目的関数値は
双対問題の実行可能解の目的関数値より常に大きい
• 強双対定理
• 主問題に最適解が存在するならば、
双対問題にも最適解が存在し、最適値は一致する
双対定理
代表的なLP解法
7. 混合整数計画法(Mixed Integer Programming: MIP)ざっくり解説
1/22/20kaggle santa 2019で学ぶMIP入門 7
線形計画問題に整数制約がついた問題
元の線形計画問題は整数制約のない緩和問題とみなせる
=> とりあえず元の線形計画問題を解く
でも解が整数になってないよね?
=>分枝限定法で解く
(例) 変数がx=3.3だった場合
x <= 3を加えた問題と x >= 4を加えた2個の小問題に分岐
8. 混合整数計画法(Mixed Integer Programming: MIP)ざっくり解説
• 分枝限定法の末にすべて解が整数になれば終了
– 緩和解と現在の最良実行可能解の差がMIPギャップ
– Gurobiの定義
– (ObjBound-ObjVal)/|ObjVal| (where ObjBound and ObjVal are the
MIP objective bound and incumbent solution objective, respectively
• ぶっちゃけかなり力技
• 分枝限定法だけでなく
– MIPの最適解は除かないけど、緩和問題には効く制約を追加
• カットと呼ばれる
– 妥当不等式と呼ばれる。詳しくは切除平面法でググって
1/22/20kaggle santa 2019で学ぶMIP入門 8
9. モデリング言語とMIPソルバー
1/22/20kaggle santa 2019で学ぶMIP入門 9
STEP1: 最適化モデリング言語を使ってモデル化
Gurobi、 CPLEXには専用のものが付属
STEP2: 混合整数計画ソルバに解いてもらう
AMPL
有償の最適化モデリング専用言語。
Pythonでのモデリングが主流になってからは下火
PuLP
無償のPythonの最適化モデリングモジュール
今回はこれでサンプルを作成。
Pythonで出来るのが最大の利点だが、商用利用に不安アリ
JuliaOpt
最近出てきたJuliaの最適化モデリングモジュール。無償
MITのチームが頑張って開発しているらしく、今後に期待
10. Kaggle Santa 2019コンペ解法解説
• 5,000組の家族がいて、
• クリスマス前の100日間でイベントにアサインする
– 各日125-300人をアサイン
• Preference cost
– サンタさんは10種類のプレゼントのどれかを各家族に贈る
– ただし各種のプレゼントは家族毎に贈れる日が決まっている
• それ以外の日にアサインした場合は一番高額なプレゼントになる
– プレゼントの値段は家族人数にもよる
• Accounting penalty
– 日毎の人数のばらつきが大きいとペナルティ(次ページ)
1/22/20kaggle santa 2019で学ぶMIP入門 10
16. ライブ実装&デモ
• デモ
• sudo apt install coinor-cbc
• Pip install pulp
• pip install docplex
1/22/20kaggle santa 2019で学ぶMIP入門 16