ナップサック問題 クマさん人形をめぐる熱いドラマの結 末 二人組の泥棒がクマの人形をナップサックの 最大容量が7kgという条件の下で価値が最 大になるように盗もうとしている • 小さい方から2、3、4、5kg • 同じく16、19、23、28万円 1.まず1kgあたりの価値を計算し、それの大 きい順にナップサックに入れる • しかし、この方法ではクマの人形を分割 しないと価値を最大化することができな い • この計算方法を貪欲アルゴリズムという 2.次に問題を小さく分割して解く方 法を思いつく 持っていく or 持っていかない で2通りに分ける 持っていく 完全列挙法 持っていかない 3.分枝限定法を用いて解くことを思いつく 分枝限定法・・・基本的には完全列挙法 違う点は緩和問題を用いて上界を得ることによって枝き りをすること 貪欲アルゴリズムで出した値は最適値よりも大きくならない このことを下界という 緩和問題・・・問題の条件を緩めて最適値 よりも大きい値を出す これによって得られる値を上界という ・最適値は下界と上界でサンドイッチされて いる 最大化問題の場合 上界(緩和) 最適値 下界(実行可能) となる 上界と下界が一致していれば、それが最適 値である保証が得られる • 実際に上界を得るには?さらにこの場合 の緩和問題とは? 最も簡単な方法は整数条件を外して線形 計画緩和問題を考える 極小クマさん1体 小クマさん1体 中クマさん半分 合計46.5万円 これが上界 46.5万円>貪欲アルゴリズムで出した値35万円 これが下界 上界と下界が一致していないので、これが最適解である保証はない ここでtreeを使う 上界 46.5万円 上界 42万円 分枝限定法による最適解の探索 上界(19+23=42万円)が 下界(44万円)より小さいので 右半分を調べる必要なし 44万円(下界) 兄貴はシャバに出たら工場から100体のクマさんを盗むと 言い出した しかし100体になると分枝限定法が有効になるかどうかわ からない 制限条件が整数である場合には動的計画 法が有効ということに気づく 動的計画法・・・基本的には最適性の原理を用い て、小さな部分問題から解いていく方法 実際にさっきの問題で動的計画法を用いてみると 動的計画法の計算図 0 1 2 3 4 5 6 7 なし 0 0 0 0 0 0 0 0 極小 0 0 16 16 16 16 16 16 極小、小 0 0 16 19 19 35 35 35 極小、小、 中 0 0 16 19 23 35 39 42 極小、小、 中、大 0 0 16 19 23 35 39 44 動的計画法の手順 • 手順1.対象物(クマさん)が1つもない場 合から始める。ナップサックの容量によら ず、持っている価値の合計がすべて0であ る自明な場合からスタートする • 手順2.順に対象物の個数を増やしていき ナップサックの容量別の価値の合計を計 算する ナップサック問題 n個のアイテムから成る有限集合N、おのおのの アイテムi Nの重量 Si と価値 Vi 、およびナッ プサックの重量の上限bが与えられたとき、アイ テムの重量の合計がbを超えないようなアイテム の詰め合わせの中で、価値の合計が最大のもの を求めよ ナップサック問題の定式化 アイテムi(N)をナップサックに詰めるとき1、それ以 外の時0になる0-1変数を使うと x v s iN 最大化 条件 vi xi iN si xi b iN i i i i 0,1 x 0,1 N i i ある制約を満たす整数の組で線形関数を最大化(最小 化)するものを見つける問題を、整数計画問題と呼ぶ 貪欲アルゴリズムはきわめて簡単で、単位重量あた りの価値 vi / i の大きいものから順にbを超えない 限りつめていくだけ この解法では最適解を得られる保証はないが、問題 の制約を満たした解を常に生成する これによって得られた解の値は、最適値より小さいか、 等しいことが保証されているので下界と呼ばれる s 分枝限定法を得るためには、下界の他に常に最適値 より大きいか、等しい値である上界が必要になる 上界は変数 xi の整数条件を緩和した次の問題をとく ことによって得られる 上界を求めるには 最大化 条件 vx s x b 0 x 1 N iN iN i i i i i i ある制約を満たす実数の組で線形関数を最大化(も しくは最小化するものを見つける問題を線形計画問 題と呼ぶ ナップサック問題を線形計画問題に緩和したものは 貪欲アルゴリズムと同じようにして簡単に求まる 単位重量あたりの価値の大きいものから順にbを超 えない限り詰めていく 緩和問題の場合には端数も許す 動的計画法part1 ある物がk種類しかなく、かつナップサックの重量の 上限が しかないような部分問題を考え、そのとき の最大値を f k, とする f k, =最大化 ik1 vi xi 条件 i1 si xi , k xi 0,1 i 1・・・ 部分関係間の関係より、 f k, は次の再帰方 程式によって計算可能である k 動的計画法part2 f k, f k 1, max f k 1, , vi f k 1, si f 1, 0 v 1 0 sk s , 2・・・ k k 0 s1 s b 1 n 動的計画法まとめ 再帰方程式を境界条件のもとで順次解いて いくことによってナップサック問題の最適解を O(nb)時間で求めることができる 多項式オーダーに見えるが実は違う 擬似多項式空間アルゴリズムである ナップサック問題はNP困難ではあるが適切 に設定された分枝限定法を用いることによっ て実用規模の問題も高速に解くことができる
© Copyright 2024 ExpyDoc