ナップサック問題#

ナップサック問題(knapsack problem)は価値piやサイズviが様々なn個の品物が与えられた時、合計重量がナップサックの許容重量を超えない範囲で合計の価値が最大化するように品物を詰める問題。整数計画問題(Integer programming)のひとつで0-1整数計画問題という。

Maximizexi i=1npixisubject to  i=1nvixiV
  • xi{0,1}:ナップサックに入れるかどうか

  • vi:サイズ

  • pi:価値

  • V:ナップサックの容量

貪欲法#

ナップサックの有名な近似解は

  1. サイズあたりの価値pi/viが高い順に品物の添字を並べかえる

  2. 品物を1から順にナップザックに詰め込んでいき詰め込めなければストップする

というもの。

貪欲法の例

Amazon.comにおいて空輸してでも「翌日配送」の表示を出すかどうかのレコメンド問題(Mondal et al, 2022)で使われていたもの。

問題

argmaxλiE(Revenuei)s. t. iE(Costi)Budget
  • λi{0,1}:商品iを表示するときに「翌日配送」の表示をするかどうか

    • 翌日配送は売上を高める可能性があるが空輸するのでコストも掛かる

  • E(Ri):商品iの推定売上

    • E(Ri)=λipriceiΔi

    • Δi:speed sensitivity。翌日配送でupliftする売上

アルゴリズム

  1. 利益スコア(benefit score)を計算して、商品をbenefit scoreの降順に並べる

benefit scorei=priceiΔiweighticostiflyi
  1. 予算内なら順にレコメンド対象にしていく

  • FLY:=,k:=1,Budgetres:=B

  • while (Budgetresdkweightkcostkfly)0 do

    • FLY:=FLY{productk}

    • Budgetres:=Budgetresdkweightkcostkfly

    • k:=k+1

  • end

参考:Mondal, A., Majumder, A., & Chaoji, V. (2022, August). ASPIRE: Air Shipping Recommendation for E-commerce Products via Causal Inference Framework. In Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (pp. 3584-3592).

線形計画問題への近似と貪欲法#

貪欲法のとき、最初に詰め込めなくなる品物の番号をiとして、

xi={1 if  i=1,,i11vi(Vi=1i1vi) if  i=i0 if  i=i+1,,n

とおくと、これはxi{0,1}という制約を0xi1に置き換えた線形計画問題の最適解になる(寒野, 2019)

これは整数計画問題であるナップサック問題の実行可能解ではないため、

xi={1 if  i=1,,i10 if  i=i,,n

とすると、これは貪欲法になる

(※貪欲法は最適解とは限らない)

分岐限定法#

離散最適化問題の厳密解法。

xi{0,1},i=1,,nなら、解は2n個の組み合わせのうちにある。それを列挙木で列挙して解いていく

動的計画法#

典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~ - Qiita

参考文献#

  • 寒野善博(2019)『最適化手法入門』、講談社サイエンティフィック

(reading list)