ネットワーク理論講義補助資料 Text. 組合せ最適化とアルゴリズム 4.4 節 動的計画 pp. 123-131 補助資料:組合せ最適化短編集(朝倉書店) ナップサック問題(クマさん人形泥棒のお話) 動的計画は,3.1.3 節(pp.67-71) で最短路問題 に対するBellman-Ford法で用いた. ここでは,ナップサック問題を例として動的計画 の設計法を解説. 4.4 節 動的計画 1 整数ナップサック問題 16万円 19万円 16 23万円 28万円 28 23 クマさん人形は4種類. 各種類ごとに在庫は豊富. 7kg 2kg 3kg 4kg 5kg 極小 小 中 大 4.4 節 動的計画 ナップサックの重量制約を 破らないように,なるべく 価値の高いものを盗もう! 2 動的計画 ナップサックの重量上限をθとして,θを0,1,2,・・・,7と順に 計算. クマさんの種類の集合N={極小,小,中,大} クマさんの種類iの重量si,価値vi 重量上限θのときの最適値(クマさんの価値の合計)をf(θ) 関数 f(θ) には以下の関係が成立(Bellman方程式) f ( ) max f ( si ) vi クマさんiの価値 iN 重量上限θのときの最適値 4.4 節 上限がθーsiのときの最適値 動的計画 3 動的計画アルゴリズム f(θ) :=0 for all θ=0,1,2,...,b for θ =0 to b-min{si} for all i ∈ N do if f(θ+si) < f(θ)+vi then f(θ+si) := f(θ)+vi 4.4 節 動的計画 4 for theta in range(b-min(s)+1): for i in range(len(s)): if theta+s[i]>b: b=7 continue s=[2,3,4,5] v=[16,19,23,28] f={} for theta in range(b+1): f[theta]=0 if f[theta+s[i]] < f[theta]+v[i]: f[theta+s[i]] = f[theta]+v[i] for theta in range(b+1): print f[theta], 4.4 節 動的計画 5 整数ナップサック問題に対する動的計画 θ 0 1 0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 0 0 4.4 節 2 0 16 16 16 16 16 16 3 0 19 19 19 19 19 19 動的計画 4 0 23 23 32 32 32 32 5 0 28 28 35 35 35 35 6 0 0 28 39 42 48 48 7 0 0 0 44 47 51 51 6 動的計画のネットワーク表現 (閉路をもたない最短路問題への帰着) 可能なθを状態とよび点で表す. ある状態(点)をもとに別の状態(点)のfを計算できるとき枝を引き,付加される 価値を枝の費用とする.->閉路をもたないネットワーク上の最短路問題(3.1.5 節の方法で解ける!);0から7までの最短路が解となる. 23 0 23 23 16 16 16 16 16 16 1 2 3 4 5 6 19 4.4 節 23 19 28 19 28 動的計画 19 28 7 19 7 0-1ナップサック問題に対する動的計画 ナップサックの重量θだけでは状態を表現できな い! クマさんの品揃えを 1..k 種類に限定したときの 最適値 f(k ,θ) Bellman方程式 f (k , ) max f (k 1, sk ) vk , f (k 1, ) 品揃え1..k, 重量上限θの ときの最適値 4.4 節 第k番目のクマさんをもって 第k番目のクマさんをもって 逃げない場合の価値の合計 逃げる場合の価値の合計 動的計画 8 0-1ナップサック問題に対する動的計画 k θ 0 1 2 3 4 4.4 節 0 1 2 3 4 5 6 7 0 0 16 0 16 19 19 35 0 16 19 23 35 39 42 0 16 19 23 35 39 44 動的計画 9 f={} for theta in range(b+1): if theta>=s[0]: f[0,theta]=v[0] else: f[0,theta]=0 for k in range(len(s)-1): for theta in range(b+1): f[k+1,theta]=f[k,theta] for theta in range(b-s[k+1]+1): if f[k+1,theta+s[k+1]] < f[k,theta]+v[k+1]: f[k+1,theta+s[k+1]] = f[k,theta]+v[k+1] 4.4 節 動的計画 10 0-1ナップサック問題に対する動 的計画のネットワーク表現 0 1 2 16 0 16 1 16 2 1 2 0 1 3 2 0 4.4 節 1 4 4 23 3 4 28 2 3 動的計画 6 7 6 7 6 7 6 7 6 7 16 5 19 19 3 28 5 16 19 23 23 4 16 19 19 0 3 5 23 5 28 4 5 11
© Copyright 2024 ExpyDoc