SlideShare a Scribd company logo
OR学会2015年秋季研究発表会
2015年9月11日
(株)構造計画研究所
斉藤努
OR学会2015年秋季研究発表会
実務における組合せ最適化
標準問題
数理問題
数理問題と標準問題の関係
最適化問題を解く
最適化に適したソフトウェア
最小全域木問題
ナップサック問題
混合整数最適化問題
まとめ
OR学会2015年秋季研究発表会
実務では組合せ最適化のニーズがいろいろある。
大学と違い、自ら問題を見つけないといけない。
同じ課題であっても、様々な問題としてとらえる
ことができる。
→組合せ最適化に関する全般的な理解が必要
組合せ最適化における体系化が役に立つ
• 問題を分類してとらえる
OR学会2015年秋季研究発表会
「標準問題」と「数理問題」という見方
標準問題とは、よく現れる問題を一般化したもの
• ナップサック問題
• 最短路問題
• …
数理問題とは、変数や制約や目的関数の属性に
よるもの
• 線形最適化問題
• 混合整数最適化問題
• …
OR学会2015年秋季研究発表会
実務でよく現れる標準問題(23個)を厳選した。
似たようなものをまとめて標準問題クラスとした。
• グラフ・ネットワーク問題
• 経路問題
• 集合被覆・分割問題
• スケジューリング問題
• 切出し・詰込み問題
• 配置問題
• 割当・マッチング問題
「組合せ最適化 標準問題」で検索
OR学会2015年秋季研究発表会
連続か離散か
線形か非線形か
制約つきか制約なしか
凸か非凸か
微分可能かどうか
確率的かどうか
…
→ 研究者によって多くの分類がある
OR学会2015年秋季研究発表会
実務者にとっての組合せ最適化という文脈で
• 最初は、ざっくり3分類を覚えればよい
超難しい
難しい
やさしい
OR学会2015年秋季研究発表会
二面的
OR学会2015年秋季研究発表会
1つの課題をいろいろな問題としてとらえるこ
とができる。
• 混合整数最適化問題(0-1変数で割当を表現)
• 集合被覆問題(候補を列挙して選ぶ)
• 最大マッチング問題(割当をマッチングと見る)
OR学会2015年秋季研究発表会
数理問題→汎用ソルバー
標準問題→専用ソルバー
一般的には、標準問題の方が効率よく解ける
可能性がある。
標準問題では、とらえきれないこともある。
→ 数理問題としてとらえる
OR学会2015年秋季研究発表会
問題を定義する(定式化)
ソルバーで実行する
専門知識がなくても、問題を数理モデルで表
せれば解くことができる。
• 数理モデルとは、数式によるモデル
• 混合整数最適化では、数理モデルの作成の仕方が
上手くないと、規模により解けないこともある。
OR学会2015年秋季研究発表会
Pythonをおすすめ
• 無料で始められる
• 記述が簡単
 理解しやすい、早くつくれる、保守しやすい
• 多くのソルバーが扱える
 Gurobi、CPLEX、SCIP、CBC、GLPK、lp_solve、cvxopt等
• 実行速度は、ソルバーにかかるものが大きい
OR学会2015年秋季研究発表会
import pandas as pd, networkx as nx, matplotlib.pyplot as plt
from ortoolpy import graph_from_table, networkx_draw
tbn = pd.read_csv('data/node0.csv')
tbe = pd.read_csv('data/edge0.csv')
g = graph_from_table(tbn, tbe)
t = nx.minimum_spanning_tree(g)
pos = networkx_draw(g)
nx.draw_networkx_edges(t, pos, width=3)
plt.show()
print(t.edges())
[(0, 1),
(0, 3),
(0, 4),
(2, 3),
(4, 5)]
OR学会2015年秋季研究発表会
usage
Signature: knapsack(size, weight, capacity)
Docstring:
ナップサック問題
価値の最大化
入力
size: 荷物の大きさのリスト
weight: 荷物の価値のリスト
capacity: 容量
出力
価値の総和と選択した荷物番号リスト
from ortoolpy import knapsack
size = [21, 11, 15, 9, 34, 25, 41, 52]
weight = [22, 12, 16, 10, 35, 26, 42, 53]
capacity = 100
print(knapsack(size, weight, capacity))
結果
(105.0, [0, 1, 3, 4, 5])
OR学会2015年秋季研究発表会
from ortoolpy import addvar
size = [21, 11, 15, 9, 34, 25, 41, 52]
weight = [22, 12, 16, 10, 35, 26, 42, 53]
capacity = 100
m = LpProblem(sense=LpMaximize)
v = [addvar(cat=LpBinary) for _ in size]
m += lpDot(weight, v)
m += lpDot(size, v) <= capacity
m.solve()
print([i for i in range(len(size)) if value(v[i]) > 0.5])
結果
[0, 1, 3, 4, 5]
モデル
変数
目的関数
制約
OR学会2015年秋季研究発表会
定式化とPythonを なるべく一致させる。
定式化でもクラス(組込とユーザー定義)を扱える
ものとする。
定式化でもforやifも使えるものとする。
定式化でも関数定義ができるものとする。
定式化とPythonプログラムで変数名を統一する。
利用しない一時変数は、「_」とする。
OR学会2015年秋季研究発表会
シンプル
• 覚えやすい、理解しやすい、教育に向いている
多くのプラットフォームで動く
• Windows、Linux、Mac
多くの便利なライブラリが使える
• pulpとpandasを組合わせると変数管理が楽に!
何でもできる
• 全ての処理をPythonにすることも可能
• やりたいこと毎に言語を変える必要がない
OR学会2015年秋季研究発表会
標準問題と数理問題による俯瞰で全体理解
Pythonによる実行のしきいが下がった
→ 組合せ最適化が使えるようになる
→ 「組合せ最適化を使おう」

More Related Content

What's hot

What's hot (20)

最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
 
機械学習の未解決課題
機械学習の未解決課題機械学習の未解決課題
機械学習の未解決課題
 
[DL輪読会]逆強化学習とGANs
[DL輪読会]逆強化学習とGANs[DL輪読会]逆強化学習とGANs
[DL輪読会]逆強化学習とGANs
 
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
 
SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)
 
クラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングクラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリング
 
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
 
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
 
Graph Neural Networks
Graph Neural NetworksGraph Neural Networks
Graph Neural Networks
 
Graph LSTM解説
Graph LSTM解説Graph LSTM解説
Graph LSTM解説
 
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
 
最新リリース: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
 
データサイエンティストのつくり方
データサイエンティストのつくり方データサイエンティストのつくり方
データサイエンティストのつくり方
 
Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較Autoencoderの実装と愉快な仲間との比較
Autoencoderの実装と愉快な仲間との比較
 

Viewers also liked

数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
Yosuke Onoue
 

Viewers also liked (15)

線形計画法入門
線形計画法入門線形計画法入門
線形計画法入門
 
数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
 
201010ksmap
201010ksmap201010ksmap
201010ksmap
 
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
 
ソーシャルコーディング革命後の開発委託の世界〜QA@ITの事例
ソーシャルコーディング革命後の開発委託の世界〜QA@ITの事例ソーシャルコーディング革命後の開発委託の世界〜QA@ITの事例
ソーシャルコーディング革命後の開発委託の世界〜QA@ITの事例
 
非線形データの次元圧縮 150905 WACODE 2nd
非線形データの次元圧縮 150905 WACODE 2nd非線形データの次元圧縮 150905 WACODE 2nd
非線形データの次元圧縮 150905 WACODE 2nd
 
機械学習によるデータ分析 実践編
機械学習によるデータ分析 実践編機械学習によるデータ分析 実践編
機械学習によるデータ分析 実践編
 
PRML Chapter 5
PRML Chapter 5PRML Chapter 5
PRML Chapter 5
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
 
2 3.GLMの基礎
2 3.GLMの基礎2 3.GLMの基礎
2 3.GLMの基礎
 
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
 

Recently uploaded

Recently uploaded (7)

modul belajar bagasa jepang pemula -N5.pdf
modul belajar bagasa jepang pemula -N5.pdfmodul belajar bagasa jepang pemula -N5.pdf
modul belajar bagasa jepang pemula -N5.pdf
 
On community support centres as a sales destination.pdf
On community support centres as a sales destination.pdfOn community support centres as a sales destination.pdf
On community support centres as a sales destination.pdf
 
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
 
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 −	情報科学からのアプローチ −〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 −	情報科学からのアプローチ −
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
 
Key points of the revision of the Inheritance Law Contribution and Special Co...
Key points of the revision of the Inheritance Law Contribution and Special Co...Key points of the revision of the Inheritance Law Contribution and Special Co...
Key points of the revision of the Inheritance Law Contribution and Special Co...
 

OR学会 2015/9/11 組合せ最適化の体系化とフリーソフトによる最適化