Power Point - LOG OPT HOME

Download Report

Transcript Power Point - LOG OPT HOME

出
版
記
念
セ
ミ
ナ
ー
あ
た
ら
し
い
数
理
最
適
化
二
千
十
三
年
五
月
主催
近代科学社
オクトーバースカイ
http://www.logopt.com/book/gurobi.htm
共催
構造計画研究所
まずは自己紹介
久保幹雄
東京海洋大学
サプライ・チェイン最適化工学
フェイスブック:
http://www.facebook.com/mikio.kubo.737
ホームページ:
http://www.logopt.com/mikiokubo/
アジェンダ
13:00-13:50
「あたらしい数理最適化」概説
16:00-16:50
数理最適化の応用例
と実験的解析
前半
「あたらしい数理最適化」概説
1. この本のどこが新しいのか
2. 数理最適化の基本の基本
3. 定式化のコツ
あたらしい
数理最適化って
本が出たらしいけど
何があたらしいの?
あたらしいこと 0
数理最適化
(Mathematical Optimization)
Since 2010
昔は...
数理計画
(Mathematical
Programming)
Up to 2010 its name
was "Mathematical Programming Society
みんなの投票で改名!(最適化に1票!)
Dantzig (1947)
Programming in linear structure
Koopmans (1948)
Linear Programming
Dorfman (1949)
Mathematical Programming
あたらしいこと 1
他のテキストとは違って
解法の中身より
使いこなすためのテク
ピボット選択
有限収束の証明
改訂単体法
などは一切なし
双対性
分枝限定法
列生成
分枝カット法
そして二次錘最適化まで!
きちんと解説
あたらしいこと 2
Python言語ですぐ解ける
原案:PythonとGurobi
でぐんぐん解ける!(小山社長)
Pythonとは
When he began implementing Python, Guido van Rossum
was also reading the published scripts from “Monty
Python’s Flying Circus”, a BBC comedy series from the
1970s. Van Rossum thought he needed a name that was
short, unique, and slightly mysterious, so he decided to
call the language Python.
MITの講義の
表紙
http://xkcd.com/353
/
import すれば何でもできる!
import gurobipy #数理最適化
import scop
#制約最適化
import optseq
#スケジューリング
import antigravity (空を飛ぶ?)
あたらしいこと 3
色々なソルバーを紹介
数理最適化
Gurobi
制約最適化
SOCP
スケジューリング OptSeq
Gurobiとは
Zonghao Gu, Edward Rothberg,Robert Bixby
Gurobiとは
Robert Bixby
Zonghao Gu
Edward Rothberg
なぜGurobi ?
(他にもたくさんあるじゃない)
混合整数 線形,凸二次,二次錘最適化
において(たぶん)最速
(MIPソルバーの限界を見極めたい!)
これでダメなら,他でもダメ
なぜGurobi ?
マルチコア対応
長時間まわしても壊れない(安定性抜群)
Pythonからの呼び出しが“容易”
(他のソルバーは,呼び出し“可”レベル)
会議中でも実装可能!
SCOPとは
野々部先生,茨木先生作
Tabu Searchに基づく制約最適化ソルバー
Gurobiでダメな問題でも大丈夫
(でも最適性の保証はなし!)
SCOP & OptSeq
野々部先生
茨木先生
時間割作成
看護婦スケジューリングの
国際コンペで好成績!
後で,野々部先生が詳しくお話
してくれると思います
Shift Master (構造計画研究所様)でも採用!
OptSeqとは
野々部先生,茨木先生作
Tabu Searchに基づく
汎用」スケジューリング最適化ソルバー
Gurobiでダメな問題でも大丈夫
モデル化の工夫で実務問題の多くをカバー
SCOP, OptSeqともに
Pythonインターフェイスあり!
(しかもPythonのソース開示!)
上手なメタヒューリスティクス
=> 汎用なのに高性能!
あたらしいこと 4
色々な実用的+代表的な
問題例で比較
後半の講演でお話しします.
あたらしいこと 5
二次錘最適化
(second order
cone optimization )
後で,村松先生が詳
しくお話してくれると
思います
数理最適化とは?
お金を儲けたいんだよね-
でも,色々としがらみがあってね-.
数理最適化とは?
maximize お金
subject to
しがらみ
制約条件
目的関数
数理最適化とは?
maximize f(x)
subject to g(x)≧0
x∈X
線形最適化とは?
max. cx
s.t. Ax≦b
x は実数
解法
目的関数
内点法
単体法
使い分け
基本はデフォルト(双対単体法)で
単体法が遅いときには,内点法!
どこまで解ける?
-- GUROBI-5.5.0 内点法
秒
L1_d10_40
80477行
420366列
2062656非ゼロ
rail4284
4284行
1092610列
12372358非ゼロ
非ゼロ要素数
http://plato.asu.edu/bench.html (Mittelmannによる実験)
整数最適化とは?
max. cx
s.t. Ax≦b
x は整数
目的関数
解法:分枝限定法=基本は線形最適化
目的関数
上界
分枝操作
整数解
実行可能解
下界
コツ 1
整数最適化に対しては,
良い定式化をしよう!
上界と下界のギャップが
小さい定式化
そのためには
大きな数Mを用いた
実数変数≦M・整数変数
はなるべく避ける!
コツ 2
解が対称性をもつ場合
には注意!
対称性とは?
グラフ彩色問題
「点」に色を塗る!枝の両端点は別色.
対称性とは?
グラフ彩色問題の解(の1つ)
「点」に色を塗る!枝の両端点は別色.
対称性とは?
赤,青,黄を交換しても同じ解!
分枝限定法の基本
緩和問題
点1は黄色
に塗る
X1,黄色 = 1
X1,黄色 = 0.5
点1は黄色に
塗らない
X1,黄色 = 0
分枝しても限定できない!
点1は黄色に塗らない
分枝しても限定できない!
点1は青色に塗らない
やっと限定操作
点1は黄色に塗らない
点1は赤色に塗らない
解決法:対称性を除去
無記名の「色」に優先順序を付加
例:
赤使用 ≧ 青使用 ≧ 黄使用
でも,あまり効かない(実験は後ほど)
対称性の例2
ビンパッキング問題
色々なアイテムを「同じ大きさ」の箱(ビン)に詰める!
箱の数を最小に!(=すきまを最小に!)
対称性の例2
最適解(の1つ)
箱の番号を変えても同じ解!
分枝限定法を使うと...
緩和問題
アイテム1は
箱1に入れる
X1,箱1 = 1
X1,箱1 = 0.5
アイテム1は
箱1に入れない
X1,箱1 = 0
分枝しても限定できない!
箱1 アイテム1
アイテム1
アイテム1
アイテム1は箱1に入れない
アイテム1は箱2に入れない
解決法:パターンの列挙
・・・・
アイテムをちょうど1つ含むように
(たくさんの)パターンから選択
コツ 3
(パターン)変数の数が
非常に多い
=> 列生成法
列生成法
min. cx
s.t. Ax=b
c
A
行列 Aが超横長
必要な「列」だけ生成!
コツ 4
制約の数が非常に
多い=>
切除平面法
もしくは分枝カット法
切除平面法
行列 Aが超縦長
必要な「行」だけ生
成!
切除平面(カット)
min. cx
s.t. Ax=b
A
b
分枝カット法
A
分枝する度にカットを追加!
b
例:
巡回セールスマン問題
すべての点をちょうど1回通過する最短巡回路
巡回セールスマン問題
の最適解
すべての点をちょうど1回通過する最短巡回路
定式化
点に接続する枝の本数=2 for all 点
(次数制約)
定式化
点に接続する枝の本数=2 for all 点
(次数制約)
足りない制約を付加
枝の本数<点の数 for all 点の部分集合
(部分巡回路除去制約)
この中の枝の本数 2本以下!
コツ 5
特殊順序集合
Special Ordered Setを
使いこなそう!
SOS Type 1
変数のうちの高々1つが正
特殊な分枝操作で高速化
A>0 or B>0 or C>0 =>
変数 A,B,C はSOSと宣言
SOS Type 2
連続する高々2つの変数が正
[0 0 0 0.5 0.4 0 0] => OK
[0.5 0 0 0 0 0.4 0] => NG
[0 0 1 0 0 0 0] => OK
区分的線形関数の宣言で使用
線分の表現
区分的線形関数の表現
はSOS Type 2
コツ 6
最大値を最小化する
目的関数には注意!
線形最適化での
常套手段
min. max. f(x,y)
x
y
線形最適化での
常套手段
min. max. f(x,y)
x
y
=zと置いて
線形最適化での
常套手段
min. max. f(x,y)
x
y
=zと置いて
min. z s.t. f(x,y)≦z
(混合)整数最適化では,
これをやると終わらない!
問題に応じた工夫(二分探索)
もしくは他の手法を用いる!
謝辞
Acknowledgement
主催
近代科学社
小山社長,大塚様
オクトーバースカイ
和多田社長,中村様
共催 & 会場提供
構造計画研究所 斉藤 様
池水 様
SCOP & OptSeq
野々部先生
茨木先生
All Python Codes
Experimental Analysis
ジョアン(ジョン)・ペドロ・ペドロソ先生
「ジョア」ではないらしい
村松先生@電通大
Another Co-Author Abdur Rais@Porto
樋口(ペドロソ)真美さん
綺麗な表紙をありがとう!
ご来場の皆様
懇親会もあります!