Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
組合せ最適化を体系的に知って
Pythonで実行してみよう
斉藤努
PyCon 2015 10/10
PyCon JP 2015 10/10
Agenda
• はじめに
• 定式化
• 体系
• 実行例
• 事例
• まとめ
2
PyCon JP 2015 10/10
はじめに(自己紹介)
• 名前:斉藤努
• 仕事:組合せ最適化を使った開発など
• 言語:Python、C#
• 書籍:「組合せ最適化」
10/22 出版記念セミナーをします
「最適化出版セミナー」で検索...
PyCon JP 2015 10/10
はじめに(今日の目的)
• 組合せ最適化を使えるようになること
– 体系を知ること
– 実装を知ること
– 事例を知ること
4
PyCon JP 2015 10/10
はじめに(身近にある組合せ最適化)
• 最適なやり方はどうすればよい?
– 全パターンを調べると組合せ数が爆発!
5
先日、あなたが実家に帰ると、お土産に野菜を
持って帰るよう言われました。東京の野菜は高...
PyCon JP 2015 10/10
はじめに(数理最適化)
• 数理最適化によるアプローチ
– 数理モデル(数式による表現)
6
最大化
𝑖
𝑝𝑖 𝑥𝑖 𝑝𝑖:販売価格
𝑖 𝑤𝑖 𝑥𝑖 ≤ 5 𝑤𝑖:重さ
∀𝑥𝑖 ∈ 0, 1 𝑥𝑖:持って...
PyCon JP 2015 10/10
はじめに(数理最適化)
• 数理最適化
– 連続最適化
– 組合せ最適化 ← 今日のテーマ
7
PyCon JP 2015 10/10
定式化
• 組合せ最適化では、数理モデルを定式化します
• 定式化に必要なのは3つの要素
↓
1. 何を決めたいのか?
「持って帰る野菜を決めたい」
2. どうなるとうれしいのか?
「持って帰る野菜の販売...
PyCon JP 2015 10/10
定式化
• 3つの要素を、変数、目的関数、制約条件と
いいます
9
1. 変数 ∀𝑥𝑖 ∈ 0, 1
2. 目的関数
𝑖
𝑝𝑖 𝑥𝑖 → 最大化
3. 制約条件 𝑖 𝑤𝑖 𝑥𝑖 ≤ 5
PyCon JP 2015 10/10
定式化
• 定式化には、数学的な考え方と慣れが必要
– 体系を知ることにより
• 全体的な理解がしやすくなります
– 実装を知ることにより
• 理解を深めることができます
– 数理モデルは、Pythonで...
PyCon JP 2015 10/10
定式化(ソルバー)
• 定式化された数理モデルは、ソルバー(外部
実行モジュール)を利用して解くことができます。
• ソルバーは、無料や有料でいろいろあります。
• ソルバーの性能が飛躍的に向上!
11
...
PyCon JP 2015 10/10
体系
• 上手に使うには、体系的にとらえることが重要
• 体系的にとらえるために、問題を分類します
• 「標準問題」による分類
• 「数理問題」による分類
12
1つの問題を
2面的にとらえる
PyCon JP 2015 10/10
体系(標準問題)
• 標準問題とは、よくある問題に名前を付け
たもの
• 例えば、先ほどの例は、ナップサック問題
とよばれます
13
容量 C のナップサックが一つと、n 種類の品物(各々、価値 pi, ...
PyCon JP 2015 10/10
体系(標準問題)
1. 最小全域木問題
2. 最大安定集合問題
3. 最大カット問題
4. 最小頂点被覆問題
5. 最短路問題
6. 最大流問題
7. 最小費用流問題
8. 運搬経路問題
9. 巡回セール...
PyCon JP 2015 10/10
体系(標準問題クラス)
1. 最小全域木問題
2. 最大安定集合問題
3. 最大カット問題
4. 最小頂点被覆問題
5. 最短路問題
6. 最大流問題
7. 最小費用流問題
8. 運搬経路問題
9. 巡回...
PyCon JP 2015 10/10
体系(数理問題)
• 単目的か多目的か
• 連続か離散か
• 線形か非線形か
• 制約つきか制約なしか
• 凸か非凸か
• 微分可能かどうか
• 確率的かどうか
• …
• → 研究者によって多くの分類が...
PyCon JP 2015 10/10
体系(数理問題)
• 最初は、ざっくり3分類を覚えましょう
17
超難しい
難しい
やさしい
(NLP)
(MIP)
(LP)
PyCon JP 2015 10/10
体系(標準問題と数理問題の関係)
18
系統樹
PyCon JP 2015 10/10
体系(標準問題と数理問題の関係)
• 1つの課題をいろいろな問題としてとらえる
ことができます。
– 混合整数最適化問題(0-1変数で割当を表現)
– 集合被覆問題(候補を列挙して選ぶ)
– 最大マッチン...
PyCon JP 2015 10/10
体系(標準問題と数理問題の関係)
• 標準問題 → 専用ソルバー
• 数理問題 → 汎用ソルバー
• 一般的には、標準問題の方が効率よく解ける
可能性があります。
• 標準問題では、とらえきれない場合
→...
PyCon JP 2015 10/10
実行例(ソフトウェアのインストール)
• Anaconda
– Pythonおよび科学技術用各種パッケージを統合した
ディストリビューション
– 利用したいバージョンのインストーラーを実行します。
• p...
PyCon JP 2015 10/10
実行例(ナップサック問題 - 標準問題)
• 選択された荷物の価値の総和(105)と選択し
た荷物の順番([0, 1, 3, 4, 5])が得られます。
22
ナップサックに、いくつかの荷物を詰込みます。...
PyCon JP 2015 10/10
実行例(最短路問題 - 標準問題)
• 8 個の点からなるランダムなグラフを作成し、
ノード0 からノード2 への最短路となるノードの
リスト([0, 1, 6, 3, 5, 2]) が得られます。
23...
PyCon JP 2015 10/10
実行例(ナップサック問題 - 数理問題)
24
ナップサックに、いくつかの荷物を詰込みます。詰込む荷物の容量(size)
の和がナップサックの容量(capacity) を超えないように、荷物の価値
(we...
PyCon JP 2015 10/10
事例 1(データベースの最適配置)
• 背景
– コールセンターでは、全国から多くの問い合わせ
が来ます。問い合わせに答えるため個人データ
がデータベースに格納されています。個人データ
は、地方ごとにまと...
PyCon JP 2015 10/10
事例 2(店舗シフトスケジューリング)
• 背景
– 全国の店舗では、店長が毎月末に翌月の社員
の勤務スケジュールを作成しています。様々な制
約があるため、作成には時間がかかっています。
• 問題
– 各...
PyCon JP 2015 10/10
事例 3(ビークル間連携配送最適化)
• 背景
– 物資の保管所から避難場所に物資を運びたい。
輸送手段は、陸海空全て使うことができます。ま
た、フェリーなどの定期便も利用できます。
• 問題
– 品物、...
PyCon JP 2015 10/10
事例 4(航空貨物の最適積み付け)
• 背景
– 航空貨物のほとんどは、パレット上にパッキングし
て、航空機内の形状に合わせて詰め込んでいます。
• 問題
– 様々な大きさの貨物をパレット上に効率よく詰め...
PyCon JP 2015 10/10
事例 5(バスの最適仕業作成)
• 背景
– バスのダイヤを組合わせて仕業(系統や路線)を
作成します。1つの仕業は1人のドライバーが対
応します。労働基準法も満足しなければいけま
せん。
• 問題
– ...
PyCon JP 2015 10/10
事例 6(空箱の輸送コスト最適化)
• 背景
– 物を箱に入れて輸送しているときに、需要地と供
給地に偏りがあると、空箱が需要地に溜まってい
きます。この空箱を供給地に戻さないといけませ
ん。コンテナやパ...
PyCon JP 2015 10/10
まとめ
• 標準問題と数理問題による俯瞰で体系を理解
• Pythonにより簡潔に実行
→ 組合せ最適化が使える!
「組合せ最適化を使おう」で検索!
31
Upcoming SlideShare
Loading in …5
×

組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015

22,327 views

Published on

https://pycon.jp/2015/ja/schedule/presentation/44/

Published in: Education
  • Be the first to comment

組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015

  1. 1. 組合せ最適化を体系的に知って Pythonで実行してみよう 斉藤努 PyCon 2015 10/10
  2. 2. PyCon JP 2015 10/10 Agenda • はじめに • 定式化 • 体系 • 実行例 • 事例 • まとめ 2
  3. 3. PyCon JP 2015 10/10 はじめに(自己紹介) • 名前:斉藤努 • 仕事:組合せ最適化を使った開発など • 言語:Python、C# • 書籍:「組合せ最適化」 10/22 出版記念セミナーをします 「最適化出版セミナー」で検索! 3
  4. 4. PyCon JP 2015 10/10 はじめに(今日の目的) • 組合せ最適化を使えるようになること – 体系を知ること – 実装を知ること – 事例を知ること 4
  5. 5. PyCon JP 2015 10/10 はじめに(身近にある組合せ最適化) • 最適なやり方はどうすればよい? – 全パターンを調べると組合せ数が爆発! 5 先日、あなたが実家に帰ると、お土産に野菜を 持って帰るよう言われました。東京の野菜は高い ので、「儲かった」と喜びましたが、量が多すぎま す。せいぜい5kg しか持って帰れないとします。 (宅配便は使えないことにしてください) また、野菜は切ったりすると傷むので、そのまま 持って帰ることにします。 100円 150g
  6. 6. PyCon JP 2015 10/10 はじめに(数理最適化) • 数理最適化によるアプローチ – 数理モデル(数式による表現) 6 最大化 𝑖 𝑝𝑖 𝑥𝑖 𝑝𝑖:販売価格 𝑖 𝑤𝑖 𝑥𝑖 ≤ 5 𝑤𝑖:重さ ∀𝑥𝑖 ∈ 0, 1 𝑥𝑖:持って帰るかどうか
  7. 7. PyCon JP 2015 10/10 はじめに(数理最適化) • 数理最適化 – 連続最適化 – 組合せ最適化 ← 今日のテーマ 7
  8. 8. PyCon JP 2015 10/10 定式化 • 組合せ最適化では、数理モデルを定式化します • 定式化に必要なのは3つの要素 ↓ 1. 何を決めたいのか? 「持って帰る野菜を決めたい」 2. どうなるとうれしいのか? 「持って帰る野菜の販売価格の合計が高くなるとうれしい」 3. 守らないといけないことは? 「持って帰る野菜を5kg 以下にします」 8
  9. 9. PyCon JP 2015 10/10 定式化 • 3つの要素を、変数、目的関数、制約条件と いいます 9 1. 変数 ∀𝑥𝑖 ∈ 0, 1 2. 目的関数 𝑖 𝑝𝑖 𝑥𝑖 → 最大化 3. 制約条件 𝑖 𝑤𝑖 𝑥𝑖 ≤ 5
  10. 10. PyCon JP 2015 10/10 定式化 • 定式化には、数学的な考え方と慣れが必要 – 体系を知ることにより • 全体的な理解がしやすくなります – 実装を知ることにより • 理解を深めることができます – 数理モデルは、Pythonで記述できます – 事例を知ることにより • 考え方に慣れます 10
  11. 11. PyCon JP 2015 10/10 定式化(ソルバー) • 定式化された数理モデルは、ソルバー(外部 実行モジュール)を利用して解くことができます。 • ソルバーは、無料や有料でいろいろあります。 • ソルバーの性能が飛躍的に向上! 11 問題 数理 モデル ソルバー 解 定式化 実行 出力入力
  12. 12. PyCon JP 2015 10/10 体系 • 上手に使うには、体系的にとらえることが重要 • 体系的にとらえるために、問題を分類します • 「標準問題」による分類 • 「数理問題」による分類 12 1つの問題を 2面的にとらえる
  13. 13. PyCon JP 2015 10/10 体系(標準問題) • 標準問題とは、よくある問題に名前を付け たもの • 例えば、先ほどの例は、ナップサック問題 とよばれます 13 容量 C のナップサックが一つと、n 種類の品物(各々、価値 pi, 容積 ci)が与えられたとき、ナップサックの容量 C を超えない範囲でいくつ かの品物をナップサックに詰め、ナップサックに入れた品物の価値の 和を最大化するにはどの品物を選べばよいか … wikipediaより ナップサック問題
  14. 14. PyCon JP 2015 10/10 体系(標準問題) 1. 最小全域木問題 2. 最大安定集合問題 3. 最大カット問題 4. 最小頂点被覆問題 5. 最短路問題 6. 最大流問題 7. 最小費用流問題 8. 運搬経路問題 9. 巡回セールスマン問題 10. 集合被覆問題 11. 集合分割問題 12. ジョブショップ問題 13. 勤務スケジューリング問題 14. ナップサック問題 15. ビンパッキング問題 16. n次元詰込み問題 17. 施設配置問題 18. 容量制約なし施設配置問題 19. 2次割当問題 20. 一般化割当問題 21. 最大マッチング問題 22. 重みマッチング問題 23. 安定マッチング問題 14 実務でよくでてくる問題を23個厳選 「組合せ最適化 標準問題」で検索!
  15. 15. PyCon JP 2015 10/10 体系(標準問題クラス) 1. 最小全域木問題 2. 最大安定集合問題 3. 最大カット問題 4. 最小頂点被覆問題 5. 最短路問題 6. 最大流問題 7. 最小費用流問題 8. 運搬経路問題 9. 巡回セールスマン問題 10. 集合被覆問題 11. 集合分割問題 12. ジョブショップ問題 13. 勤務スケジューリング問題 14. ナップサック問題 15. ビンパッキング問題 16. n次元詰込み問題 17. 施設配置問題 18. 容量制約なし施設配置問題 19. 2次割当問題 20. 一般化割当問題 21. 最大マッチング問題 22. 重みマッチング問題 23. 安定マッチング問題 15 標準問題クラス:標準問題のグループ グラフ・ネットワーク問題 経路問題 集合被覆・分割問題 スケジューリング問題 切出し・詰込み問題 配置問題 割当・マッチング問題
  16. 16. PyCon JP 2015 10/10 体系(数理問題) • 単目的か多目的か • 連続か離散か • 線形か非線形か • 制約つきか制約なしか • 凸か非凸か • 微分可能かどうか • 確率的かどうか • … • → 研究者によって多くの分類があります 16
  17. 17. PyCon JP 2015 10/10 体系(数理問題) • 最初は、ざっくり3分類を覚えましょう 17 超難しい 難しい やさしい (NLP) (MIP) (LP)
  18. 18. PyCon JP 2015 10/10 体系(標準問題と数理問題の関係) 18 系統樹
  19. 19. PyCon JP 2015 10/10 体系(標準問題と数理問題の関係) • 1つの課題をいろいろな問題としてとらえる ことができます。 – 混合整数最適化問題(0-1変数で割当を表現) – 集合被覆問題(候補を列挙して選ぶ) – 最大マッチング問題(割当をマッチングと見る) 19
  20. 20. PyCon JP 2015 10/10 体系(標準問題と数理問題の関係) • 標準問題 → 専用ソルバー • 数理問題 → 汎用ソルバー • 一般的には、標準問題の方が効率よく解ける 可能性があります。 • 標準問題では、とらえきれない場合 → 数理問題としてとらえます。 20
  21. 21. PyCon JP 2015 10/10 実行例(ソフトウェアのインストール) • Anaconda – Pythonおよび科学技術用各種パッケージを統合した ディストリビューション – 利用したいバージョンのインストーラーを実行します。 • pip install pulp – 数理問題用のモデラーおよびソルバー。 • pip install ortoolpy – 標準問題用。最低限の機能のものや効率の悪いも のも含まれています。(仕事では未使用) 21
  22. 22. PyCon JP 2015 10/10 実行例(ナップサック問題 - 標準問題) • 選択された荷物の価値の総和(105)と選択し た荷物の順番([0, 1, 3, 4, 5])が得られます。 22 ナップサックに、いくつかの荷物を詰込みます。詰込む荷物の容量(size) の和がナップサックの容量(capacity) を超えないように、荷物の価値 (weight) の和を最大にします。 from ortoolpy import knapsack size = [21, 11, 15, 9, 34, 25, 41, 52] weight = [22, 12, 16, 10, 35, 26, 42, 53] capacity = 100 knapsack(size, weight, capacity) >>> (105, [0, 1, 3, 4, 5])
  23. 23. PyCon JP 2015 10/10 実行例(最短路問題 - 標準問題) • 8 個の点からなるランダムなグラフを作成し、 ノード0 からノード2 への最短路となるノードの リスト([0, 1, 6, 3, 5, 2]) が得られます。 23 グラフにおいて、始点から終点までの経路の中で最も短い経路を探します。 import networkx as nx g = nx.fast_gnp_random_graph(8, 0.26, 1) nx.dijkstra_path(g, source=0, target=2) >>> [0, 1, 6, 3, 5, 2]
  24. 24. PyCon JP 2015 10/10 実行例(ナップサック問題 - 数理問題) 24 ナップサックに、いくつかの荷物を詰込みます。詰込む荷物の容量(size) の和がナップサックの容量(capacity) を超えないように、荷物の価値 (weight) の和を最大にします。 from pulp import * size = [21, 11, 15, 9, 34, 25, 41, 52] weight = [22, 12, 16, 10, 35, 26, 42, 53] capacity = 100 r = range(len(size)) m = LpProblem(sense=LpMaximize) # 数理モデル x = [LpVariable('x%d'%i, cat=LpBinary) for i in r] # 変数 m += lpDot(weight, x) # 目的関数 m += lpDot(size, x) <= capacity # 制約条件 m.solve() print((value(m.objective), [i for i in r if value(x[i]) > 0.5])) >>> (105.0, [0, 1, 3, 4, 5]) 再掲 定式化と ほぼ対応
  25. 25. PyCon JP 2015 10/10 事例 1(データベースの最適配置) • 背景 – コールセンターでは、全国から多くの問い合わせ が来ます。問い合わせに答えるため個人データ がデータベースに格納されています。個人データ は、地方ごとにまとめますが、保存先のストレー ジは、複数あります。 • 問題 – 個人データの保存するストレージ先を選択します。 そのときに、ストレージごとのアクセスが平準化さ れるようにします。 25 標準問題 数理問題 アルゴリズム 一般化割当問題 NLP 局所探索法
  26. 26. PyCon JP 2015 10/10 事例 2(店舗シフトスケジューリング) • 背景 – 全国の店舗では、店長が毎月末に翌月の社員 の勤務スケジュールを作成しています。様々な制 約があるため、作成には時間がかかっています。 • 問題 – 各店舗ごとに、社員の勤務スケジュールを作成し ます。勤務スケジュールでは、社員ごと日ごとの シフトを決定します。シフトは、日勤、休み、早番、 遅番などがあります。制約としては、各社員の休 みの希望や各日ごとの最低シフト数やシフトの禁 止パターンなどがあります。 26 標準問題 数理問題 アルゴリズム 勤務スケジューリング問題 MIP 分枝限定法
  27. 27. PyCon JP 2015 10/10 事例 3(ビークル間連携配送最適化) • 背景 – 物資の保管所から避難場所に物資を運びたい。 輸送手段は、陸海空全て使うことができます。ま た、フェリーなどの定期便も利用できます。 • 問題 – 品物、輸送元、輸送先、数量、輸送期限からなる 配送オーダーを満たす配送計画を求めます。配 送計画では、いつ、何を、どうやって運ぶかを決 めます。オーダーは1 回で運んでもよいし、複数 の輸送手段で連携して運んでもよいです。 27 標準問題 数理問題 アルゴリズム 運搬経路問題 MIP 貪欲法
  28. 28. PyCon JP 2015 10/10 事例 4(航空貨物の最適積み付け) • 背景 – 航空貨物のほとんどは、パレット上にパッキングし て、航空機内の形状に合わせて詰め込んでいます。 • 問題 – 様々な大きさの貨物をパレット上に効率よく詰め込 む方法を求めます。一番下に置かないといけない とか上に積んではいけないとか様々な制約があり ます。 28 標準問題 数理問題 アルゴリズム 3次元詰込み問題 MIP 貪欲法
  29. 29. PyCon JP 2015 10/10 事例 5(バスの最適仕業作成) • 背景 – バスのダイヤを組合わせて仕業(系統や路線)を 作成します。1つの仕業は1人のドライバーが対 応します。労働基準法も満足しなければいけま せん。 • 問題 – バスのドライバーの人数を最小になる仕業を 作成します 29 標準問題 数理問題 アルゴリズム マッチング問題 MIP エドモンズ法
  30. 30. PyCon JP 2015 10/10 事例 6(空箱の輸送コスト最適化) • 背景 – 物を箱に入れて輸送しているときに、需要地と供 給地に偏りがあると、空箱が需要地に溜まってい きます。この空箱を供給地に戻さないといけませ ん。コンテナやパレットやレンタカーなど、いろい ろな分野で見られます。 • 問題 – グラフ上において、複数の需要点と複数の供給 点があります。需要点から供給点へ、費用を最 小にするフロー(流量) を求めます。 30 標準問題 数理問題 アルゴリズム 最小費用流問題 LP 負閉路除去法
  31. 31. PyCon JP 2015 10/10 まとめ • 標準問題と数理問題による俯瞰で体系を理解 • Pythonにより簡潔に実行 → 組合せ最適化が使える! 「組合せ最適化を使おう」で検索! 31

×