ナックパック問題についてのタスクがあります。しかし、knackpack の各サブジェクトには、2 セットの重み値パラメーターがあります。例えば:
- ビール 1kg 15$、2kg 20$
- 水 5kg 30$、10kg 40$
...等
また、アイテムごとに 1 セットの重み値パラメーターのみを選択できます。
だから、私が見る解決策:
- 2 つの配列からペアの重量と値の一意の組み合わせをすべて生成しました。2 n 個の組み合わせがあります。
- すべての組み合わせについて、knackpack アルゴリズムを適用し、最大値を持つソリューションを選択します。これが最適なソリューションです。
問題について - アイテムが 10 ~ 15 個程度あれば正常です。しかし、このタスクを 1000 個のアイテムで解決する必要があるため、2 1000 個のユニークな組み合わせになります。
一意の結合を生成:
E=[[],[]]
weight1 = [1 2 3 4 5]
weight2 = [6 7 8 9 10]
for choices in itertools.product([0, 1], repeat=len(off)):
E[0].append([(on[j] if choice else off[j]) for j, choice in enumerate(choices)])
value1 = [10 20 30 40 50]
value2 = [60 70 80 90 100]
for choices in itertools.product([0, 1], repeat=len(off)):
E[1].append([(on[j] if choice else off[j]) for j, choice in enumerate(choices)])
30 個のアイテムに対してこれを行うと、VDS がダウンします。
この問題の解決策を提案してください。