あたらしい数理最適化 -GurobiとPython言語で解く- サポートページ

久保幹雄,ジョア(ジョアン)・ペドロ・ペドロソ,村松正和,アブドル・レイス 著
近代科学社  2012年

 

ダウンロード

ソースコード zipファイル
第1章のスライド (Power Pointファイル) 前半 後半
記念セミナースライド
  1. 数理最適化の基本とPython言語によるインターフェイス (PPT) 久保幹雄
  2. 制約最適化ソルバー SCOP とメタヒューリスティクス (PDF) 野々部宏司
  3. 錐計画の基本と応用  (PDF) 村松正和
  4. 数理最適化の応用例と実験的解析 (PPT) 久保幹雄
  5. スケジューリング最適化ソルバー OptSeqとその応用 (PDF) 野々部宏司

誤植等 (数式はLaTeXで記述)

p.67 10行目:(2次関数を二次関数に直す!) を消す.
14,15行目: 後ろから:「ここでグラフとは,「点」と「枝」から構成される抽象概念である.グラフは,現実の問題をわかりやすく表すのに非常に便利な道具である.」 を省く を消す.
p.68 図の下から4行目から5行目: 「ここでグラフとは,「点」と「枝」から構成される抽象概念である.グラフは,現実の問題をわかりやすく表すのに非常に便利な道具である.」を消す.
p.111 プログラム内の11,12,13行目を以下に変更(以下,文番号が1つずれる).11 for t in range(1,T+1): 12 ind = [(j,t2) for j in J for t2 in range(t-p[j]+1,t+1) if (j,t2) in X] 13 if ind != []: 14 model.addConstr(quicksum(X[j,t2] for (j,t2) in ind) <= 1, “MachineUB(%s)”%t)

2刷

p.12 下から4行目(プログラム内): I=[1,2,3,4] => I=[1,2,3,4,5]
p.18 下から1行目: 図1.6 (a) に示した  => p.36の図1.6 (a) に示した
p.24 4行目: i=1,2,3,4x => i=1,2,3,4 (xをとる)
p.27 (プログラムは除いて)5行目:鶴が2匹 =>鶴が24匹
p.30 下側のプログラムの10行目: model.update()を除く(同時に11行目の行番号を10に修正)
p.31 下から1行目:”mkp.mp s” => “mkp.mps”
p.33 欄外ゼミナール内 6行目:Alison Doing => Alison Doig
p.45 下から5行目(メイン関数のプログラムj内): d, c,f, M =make_data() => I, J, d, c, f, M =make_data()
p.45 下から4行目(メイン関数のプログラムj内): model=flp(d, c,f, M) => model=flp(I, J, d, c, f, M)
p.52 3行目:\sum_{i \in I} \xi_i (ギリシア文字のクシイ) => \sum_{i \in I} z_i
p.75 モデリングのコツ6内の6行目の数式:y => 1-y
p.75 モデリングのコツ6 内7行目:特性順序集合=>特殊順序集合
p.81 下から6行目(数式内):x_e \in \{0,1 => x_e \in \{0,1\}
p.82 5行目:以下では,カットセット制約のみを考える.=>省く!
p.104 14-15行目(プログラムの上の3-4行目):「制約ごとに異なるMを設定するならば,$r_j+\sum s_j -s_k$,」をとり,その後の $\max (r_j) +\sum s_j$ を  $\max (r_j) +\sum p_j$ に変更
p. 105 1行目:$\max (r_j) +\sum s_j$ =>  $\max (r_j) +\sum p_j$
p.105 下から2行目(数式内の右側の式):x1 => x_1(添え字にする)
p.119 下から8行目:\forall t < b_r または t>f_r の不等式(2つ)をちゃんとした不等式にする.
p.127 9行目: \forall p in P をとる.
p. 135 5,6行目:数式内の;(セミコロン)を半角にする.
p.157 下から6行目(数式内1行目): f(x_i) => f_i (x_i)
p.157 下から5行目(数式内2行目): subject to と $x_i$ の間にスペースを入れる.
p.269 5行目: t=1,8 => t=1,7
p.170: プログラムの下から4行目から10行目までを以下に変更
for t in range(1,T):
for j in J:
if j != 0:
model.addConstr(x[i,t,j] + quicksum(x[i,t+1,k] for k in J if k != j and k != 0) <= 1,”Require(%s,%s,%s)” % (i,t,j))
for t in Ts:
for j in S:
if t==1:
model.addConstr(x[i,t+1,j] >= x[i,t,j], “SameShift(%s,%s,%s)” % (i,t,j))
elif t==T:
model.addConstr(x[i,t-1,j] >= x[i,t,j], “SameShift(%s,%s,%s)” % (i,t,j))
else:
model.addConstr(x[i,t-1,j] + x[i,t+1,j] >= x[i,t,j], “SameShift(%s,%s,%s)” % (i,t,j))
p.171 5行目 花文字(カリグラフ) K の添え字 を 3 に変更(2ヶ所)
p.180 中断の制約式の中: *1zwc を除く.
p.198 3行目:リストL[4,5,6,3 =>リスト[4,5,6,3]

3刷

p.50 5行目の数式:c_{ij} x_{ij} \leq z \forall i \in I; j \in J  を
\sum_{j \in J}  c_{ij} x_{ij} \leq z    \forall i \in I  に変更(式を強化できる)
p.50 プログラム内の11行目と12行目の間に以下を挿入:
model.addConstr(quicksum(c[i,j]* x[i,j] for j in J) <= z,”Max_x(%s)”%(i))
p.50 プログラム内の14行目をとる. p.173 下から7行目:を最小にする(x,y)を求めよ.=>を最小にする(X,Y)を求めよ.
p.183 表10.3:0.07, => 0.07(カンマをとる)
p.195 下から3行目:中括弧 の中に => 中括弧 { } の中に
p.199 8行目:リスト包括表記 => リスト内包表記
p.234 12行目: もしくは文字列”source”を与える. 文字列”source”はすべての活動に先行する開始時刻0のダミー活動を定義するときにもちいられる. => もしくは文字列”sink”を与える. 文字列”sink”はすべての活動に後続するダミー活動を定義するときにもちいられる.
p.82 15行目の数式:minimize \sum_{j}f_{1j}   を maximize \sum_{j}f_{1j}   に変更
p.82 16行目の数式:subject to \sum_{j:i<j}f_{ij}-\sum_{j:i<j}f_{ij}=0   \forall i=2,3,…,n,i \neq k   を subject to \sum_{j:i<j}f_{ij}-\sum_{j:i<j}f_{ji}=0   \forall i=2,3,…,n,i \neq k   に変更

リンク

実験的解析の結果 (Results obtained using Python/Gurobi)
数理最適化ソルバーGurobi関連
日本総代理店オクトーバースカイ  Gurobi
フリーのpulp (pip install pulp) をインストールした後,pip install mypulp でGurobiと同様のインターフェイスが使用可能
制約最適化ソルバー SCOP
スケジューリング最適化ソルバー  OptSeq