二千十三年五月 あたらしい数理最適化 出版記念セミナー
DESCRIPTION
二千十三年五月 あたらしい数理最適化 出版記念セミナー. 主催 近代科学社 オクトーバースカイ 共催 構造計画研究所. 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 - PowerPoint PPT PresentationTRANSCRIPT
二千十三年五月あたらし
い数理最適化
出版記念セミナー
主催近代科学社オクトーバースカイ
共催構造計画研究所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.
http://xkcd.com/353/
MIT の講義の表紙
import すれば何でもできる!
import gurobipy # 数理最適化import scop # 制約最適化import optseq # スケジューリング
import antigravity ( 空を飛ぶ ?)
あたらしいこと 3色々なソルバーを紹介
数理最適化 Gurobi制約最適化 SOCPスケジューリング OptSeq
Zonghao Gu, Edward Rothberg , Robert Bixby
Gurobi とは
Gurobi とは
Zonghao GuEdward RothbergRobert Bixby
混合整数 線形,凸二次,二次錘最適化において(たぶん)最速( MIP ソルバーの限界を見極めたい!)
これでダメなら,他でもダメ
なぜ Gurobi ? (他にもたくさんあるじゃない)
マルチコア対応長時間まわしても壊れない(安定性抜群)Python からの呼び出しが“容易”(他のソルバーは,呼び出し“可”レベル)
会議中でも実装可能!
なぜ Gurobi ?
SCOP とは野々部先生,茨木先生作
Tabu Search に基づく制約最適化ソルバー
Gurobi でダメな問題でも大丈夫(でも最適性の保証はなし!)
野々部先生 茨木先生
SCOP & OptSeq
時間割作成看護婦スケジューリングの国際コンペで好成績!
後で , 野々部先生が詳しくお話してくれると 思います
Shift Master (構造計画研究所様)でも採用!
OptSeq とは野々部先生,茨木先生作
Tabu Search に基づく汎用」スケジューリング最適化ソルバー
Gurobi でダメな問題でも大丈夫モデル化の工夫で実 務問題の多くをカバー
SCOP, OptSeq ともにPython インターフェイスあり!(しかも Python のソース開示!)
上手なメタヒューリスティクス => 汎用なのに高性能!
あたらしいこと 4
色々な実用的+代表的な問題例で比較
後半の講演でお話しします.
二次錘最適化(second order cone optimization )後で ,村松先生が詳しくお 話してくれると思います
あたらしいこと 5
数理最適化とは?
お金を儲けたいん だよね-
でも,色々としがらみがあって ね-.
数理最適化とは?
maximize お金
subject to しがらみ
目的関 数
制約条件
数理最適化とは?
maximize f(x)subject to g(x) 0≧ x ∈ X
線形最適化とは?max. cxs.t. Ax≦b x は実数
単体法内点法
目的関 数
解法
基本はデフォルト(双対単体法)で単体法が遅いときには, 内点法!
使い分け
どこまで解ける? -- GUROBI-5.5.0 内点法
非ゼロ要素数
秒
http://plato.asu.edu/bench.html (Mittelmann による実験 )
rail4284 4284行1092610列12372358 非ゼロ
L1_d10_4080477行420366列2062656 非ゼロ
整数最適化とは?max. cxs.t. Ax≦b x は整数
目的関数
解法:分枝限定法=基本は線形最適化
分枝操作
目的関数
整数解実行可能解下界
上界
コツ 1整数最適化に対しては,良い定式化良い定式化 をしよ う!
上界と下界のギャップが小さい定式化
そのためには大きな数 M を用いた実数 変数 ≦M ・整数 変数はなるべく避ける!
コツ 2
解が対称性をもつ場合には注意!
対称性とは?グラフ彩色問題
「点」に色を塗る!枝の両端点は別色.
対称性とは?グラフ彩色問題の解(の1つ)
「点」に色を塗る!枝の両端点は別色.
対称性とは?
赤,青,黄を交換しても 同じ解!
分枝限定法の基本
点1は黄色に塗る
点1は黄色に塗らない
X1,黄色 = 0.5 緩和問題
X1,黄色 = 1 X1,黄色 = 0
分枝しても限定できない!
点1は黄色に塗らない
分枝しても限定できない!
点1は青色に塗らない
やっと限定操作
点1は黄色に塗らない
点1は赤色に塗らない
解決法:対称性を除去
例:赤使用 ≧ 青使用 ≧ 黄使用
無 記名の「色」に 優先順序を付加
でも,あまり 効かない(実験は 後ほど)
対称性の例2ビンパッキング問題
色々なアイテムを「同じ大きさ」の箱(ビン)に詰める!箱の数を最小に!( =すきまを最小に!)
対称性の例2
最適解(の1 つ)
箱の番号を変えても同じ解!
分枝限定法を使うと...
アイテム1は箱1に入れる
アイテム1は箱1に入れない
X1,箱1 = 0.5 緩和問題
X1,箱1 = 1 X1,箱1 = 0
分枝しても限定できない!アイテム1箱1
アイテム1は箱1に入れない
アイテム1
アイテム1
アイテム1は箱2に入れない
解決法:パターンの列挙
アイテムをちょうど1つ含むように(たくさんの) パターンから選択
・・・・
コツ 3
(パターン)変数の数が非常に多い => 列生成法
列生成法
c
A
行列 A が超横長 必要な「列」だけ生成!
min. cxs.t. Ax=b
コツ 4制約の数が 非常に多い=>切除平面法もしくは分枝カット法
切除平面法
A行列 A が超縦長 必要な「行」だけ生成!
min. cxs.t. Ax=b
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
樋口(ペドロソ)真美さん綺麗な表紙をありがと う!
ご来場の皆様
懇親会もあります!