ナップサック問題

概要

ナップサック問題とは、容量があるナップサックの中にいくつかの品物を詰め込み、入れた品物の総価値を最大にするという問題です。
ナップサック問題の例

定式化

入力として品物の集合 I={1,2,,N} ~I=\{1,2,\ldots,N\}~とナップサックの容量 W ~W~が与えられるものとします。 各品物 iI ~i \in I~には重み wi ~w_{i}~と価値 vi ~v_{i}~があるものとします。選択する品物を表す決定変数 xi ~x_{i}~を定義します。xi x_{i}~は品物 iI ~i \in I~を選択する場合に 1~1、それ以外の場合に 0 ~0~を取るように設定します。
xi={1 (品物 i を選択する)0 (それ以外)x_{i}=\begin{cases}1~&(\text{品物}~i~\text{を選択する}) \\0~&(\text{それ以外})\end{cases}
このとき、ナップサック問題を数式で表現すると以下のようになります。
max    iIvixi\max~~~~\sum_{i \in I} v_i x_i
s.t.    iIwixiW\textrm{s.t.}~~~~\sum_{i \in I} w_i x_i \leq W
上記の式を満たす場合に最小値をとるように、 イジングモデルのエネルギー関数 H ~H~を以下のように定義します。
H=iIvixi+(1n=1Wyn)2+(n=1WnyniIwixi)2H = -\sum_{i \in I} v_i x_i + \left(1-\sum_{n=1}^{W} y_n\right)^2 + \left(\sum_{n=1}^{W}ny_n - \sum_{i \in I} w_i x_i\right)^2

シミュレーション

ここでは、ナップサックの容量を設定してシミュレーションを体験できます。