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

More Related Content

What's hot

[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction
[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction
[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured PredictionDeep Learning JP
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)Masahiro Suzuki
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用Yasunori Ozaki
 
[DL輪読会]1次近似系MAMLとその理論的背景
[DL輪読会]1次近似系MAMLとその理論的背景[DL輪読会]1次近似系MAMLとその理論的背景
[DL輪読会]1次近似系MAMLとその理論的背景Deep Learning JP
 
数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理Taiji Suzuki
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE広樹 本間
 
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習Eiji Uchibe
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2Preferred Networks
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)Masahiro Suzuki
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and EditingDeep Learning JP
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理Taiji Suzuki
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門hoxo_m
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習Deep Learning JP
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健Preferred Networks
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)Kota Matsui
 
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向ohken
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 

What's hot (20)

[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction
[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction
[DL輪読会]Reward Augmented Maximum Likelihood for Neural Structured Prediction
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
 
[DL輪読会]1次近似系MAMLとその理論的背景
[DL輪読会]1次近似系MAMLとその理論的背景[DL輪読会]1次近似系MAMLとその理論的背景
[DL輪読会]1次近似系MAMLとその理論的背景
 
数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE
 
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 

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

S03 t1 python_learningdiary#3
S03 t1 python_learningdiary#3S03 t1 python_learningdiary#3
S03 t1 python_learningdiary#3Takeshi Akutsu
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画Kazufumi Ohkawa
 
[DL輪読会]It's not just size that maters small language models are also few sho...
[DL輪読会]It's not just size that maters  small language models are also few sho...[DL輪読会]It's not just size that maters  small language models are also few sho...
[DL輪読会]It's not just size that maters small language models are also few sho...Deep Learning JP
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkankyon mm
 
CIが分からない PE(SETエンジニア)の1年生がWebAPIの負荷テストを 背伸びしてCI運用した
CIが分からないPE(SETエンジニア)の1年生がWebAPIの負荷テストを背伸びしてCI運用したCIが分からないPE(SETエンジニア)の1年生がWebAPIの負荷テストを背伸びしてCI運用した
CIが分からない PE(SETエンジニア)の1年生がWebAPIの負荷テストを 背伸びしてCI運用したssuser0be501
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習Hori Tasuku
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 
Pug(Jade)を使って コンテンツ書き出しの 時短をしよう
Pug(Jade)を使って コンテンツ書き出しの 時短をしようPug(Jade)を使って コンテンツ書き出しの 時短をしよう
Pug(Jade)を使って コンテンツ書き出しの 時短をしようToshimichi Suekane
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎真哉 杉野
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テストryohji ikebe
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦urasandesu
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テストryohji ikebe
 
20190722 Building handy CI with zuul and OpenStack
20190722 Building handy CI with zuul and OpenStack20190722 Building handy CI with zuul and OpenStack
20190722 Building handy CI with zuul and OpenStackAkihiro Motoki
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようKoichi Sasada
 
20190701トリーズ9画面法で企業分析@東大授業の事前課題
20190701トリーズ9画面法で企業分析@東大授業の事前課題20190701トリーズ9画面法で企業分析@東大授業の事前課題
20190701トリーズ9画面法で企業分析@東大授業の事前課題芳徳 高木
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おうKazufumi Ohkawa
 
Python 学習教材
Python 学習教材Python 学習教材
Python 学習教材Jun MITANI
 

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

PFI Christmas seminar 2009
PFI Christmas seminar 2009PFI Christmas seminar 2009
PFI Christmas seminar 2009
 
S03 t1 python_learningdiary#3
S03 t1 python_learningdiary#3S03 t1 python_learningdiary#3
S03 t1 python_learningdiary#3
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
[DL輪読会]It's not just size that maters small language models are also few sho...
[DL輪読会]It's not just size that maters  small language models are also few sho...[DL輪読会]It's not just size that maters  small language models are also few sho...
[DL輪読会]It's not just size that maters small language models are also few sho...
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkan
 
CIが分からない PE(SETエンジニア)の1年生がWebAPIの負荷テストを 背伸びしてCI運用した
CIが分からないPE(SETエンジニア)の1年生がWebAPIの負荷テストを背伸びしてCI運用したCIが分からないPE(SETエンジニア)の1年生がWebAPIの負荷テストを背伸びしてCI運用した
CIが分からない PE(SETエンジニア)の1年生がWebAPIの負荷テストを 背伸びしてCI運用した
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
Pug(Jade)を使って コンテンツ書き出しの 時短をしよう
Pug(Jade)を使って コンテンツ書き出しの 時短をしようPug(Jade)を使って コンテンツ書き出しの 時短をしよう
Pug(Jade)を使って コンテンツ書き出しの 時短をしよう
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
20190722 Building handy CI with zuul and OpenStack
20190722 Building handy CI with zuul and OpenStack20190722 Building handy CI with zuul and OpenStack
20190722 Building handy CI with zuul and OpenStack
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
20190701トリーズ9画面法で企業分析@東大授業の事前課題
20190701トリーズ9画面法で企業分析@東大授業の事前課題20190701トリーズ9画面法で企業分析@東大授業の事前課題
20190701トリーズ9画面法で企業分析@東大授業の事前課題
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おう
 
Python 学習教材
Python 学習教材Python 学習教材
Python 学習教材
 

Recently uploaded

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 

Recently uploaded (7)

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 

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

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