アイテムのセット(1〜100のサイズ)とビンの数(1〜15)が与えられた場合、ビンのサブセットを持つ各アイテムには、アイテムを割り当てることができ、どのビンが最適、2番目に最適、など、それだけです。アイテムには自然な順序もあります。たとえば、item1の前にitem2の名前を付けることで、以下に示します。各ビンの容量は1〜5です(すべてのアイテムの重量は同じ、つまり1です)。
入力の例としては、3つのビンと6つのアイテムがあります(-は、ビンがアイテムの使用可能なセットにない、つまり、ビンをパックできないことを示します)。
| bin1 bin2 bin3 | bin1 bin2 bin3 ------------------------ -------------------------- - item1 | 12-容量| 4 4 5 item2 | --1 2 item3 | 2 1 3 item4 | 1 2 3 item5 | 1-2 item6 | 1 2 3
目標は次のとおりです(競合が発生した場合に、各目標が下位の目標を完全にオーバーライドするために、たとえば、使用されるビンの数や設定が無視される場合でも、5つのアイテムをパックする方が常に4つよりも優れています)。
- 梱包されたアイテムの数を最大化する
- アイテムを自然な順序でパックします。たとえば、ビンの合計容量が1で、アイテムが2つある場合、item1はパックされ、item2はパックされません。
- 使用するビンの数を最小限に抑える
- ビンの設定と自然な順序に従って各アイテムをパックします。つまり、最初の設定のitem1と2番目のitem2は、2番目のitem1と最初のitem2よりも優れています。
- 2つのソリューションがこれらの目標によって区別できない場合、たとえば、実装の副作用または単なる任意のタイブレークとして、どちらのソリューションも上位にランク付けすることができます。
したがって、上記の入力は次のようにパックされます。
| bin1 bin2 bin3 ------------------------ item1 | バツ item2 | バツ item3 | バツ item4 | バツ item5 | バツ item6 | バツ
問題は、最初の段落からの入力サイズと数秒の時間制約、つまりブルートフォース(または少なくともブルート)ではなく、この問題を解決するためのアルゴリズムのアイデアを思い付くのに役立つ、何を読んでレビューするかです。これまでに考えた力です。)私はRubyとCを使用していますが、森のつまずきのこの段階では、言語はあまり関連性がありません。
読書の提案、アルゴリズムの組み合わせに関するアイデア、または問題の説明を明確にするための考えに感謝します...
アップデート1
不明確ではありませんが、これのさまざまな部分をカバーする多くのアルゴリズムがありますが、私の難しさは、すべての基準を一緒に処理する情報を見つける(またはおそらく認識する)ことです。 -ビンセットとアイテム設定。これは、次の例でより明確に示されることを願っています。
| bin1 bin2 bin3 | bin1 bin2 bin3 ------------------------ -------------------------- - item1 | 123容量| 3 2 3 item2 | 1 2 3 item3 | --1 2
bin1が最も優先されますが、item3はまったく配置できません。また、bin2はすべてのアイテムで次に優先されますが、3つのアイテムのうち2つしか保持できません。したがって、割り当ての正しいセット(x)は、実際には最も優先度の低いビンです。
| bin1 bin2 bin3 ------------------------ item1 | バツ item2 | バツ item3 | バツ
更新2 目標がどのように関連しているかに関する情報を使用して説明を作り直し、ビンの優先度の変数を削除しました。これは、回答を見つける可能性が低くなり、作業中のシステムの他の場所で回避できるためです。