冷蔵庫にある食材のリストがすぐになくなると思います。さまざまな食材を使い切っているレシピのリストもあります。 (私が現在持っていないものもあります。)
最適なセットのレシピを生成するアルゴリズムはありますか?最適なセットは、冷蔵庫内の食材の数を最大にし、使用する食材の数を最小限に抑えます。ストアから購入する必要があります。
(別の定式化:カードゲームでは、さまざまなルールに従っていくつかのカードを組み合わせることができます。また、さまざまな方法で新しいカードを取得することもできます。最小限の労力で最も多くのカードを使い切るための最良のルールセットを見つけるにはどうすればよいですか。新しいカードを取得する際に?)
これは 厳密なカバー問題 であり、KarpがNP完全性の重要性を確立した彼の古典的な1972年の論文でNP完全であることを示した元の21の問題の1つです。
ウィキペディアの説明は次のとおりです。
セットXのサブセットのコレクションSが与えられた場合、正確なカバーはSのサブコレクションS *であり、Xの各要素はS *の正確に1つのサブセットに含まれます。
基本的な問題は、SとXを前提として、SにXの正確なカバーが含まれているかどうかです。
ここで、Xは冷蔵庫の内容のセット、Sはレシピのコレクションです。タスクは、レシピのサブセットS *を見つけて、Xの各成分が1つのレシピだけで使用されるようにすることです。
Exact Coverは、すべてのレシピに必要な成分が3つ以下であっても、NP完全であることが知られています。すべてのレシピに2つ以下の成分がある場合、2部グラフで最大の一致を見つけることに基づく多項式時間アルゴリズムがあります。
Xの少なくともn個の要素をカバーするカバーS *があるかどうかという類似の問題もNP完全です。同様に、これを最適化問題として言い換えることができます。可能な最大要素数をカバーするサブセットS *を見つけます。この最適化問題の効率的な解決策はNP完全な決定問題を解決するため、少なくとも決定問題と同じくらい困難です。
NP完全問題の場合と同様に、次のように言うことができます。
問題のすべてのインスタンスに対して機能する優れたアルゴリズムは、確かに現時点では手の届かないものであり、おそらく存在しません。
ブランチアンドバウンドツリー検索は、問題の多くのインスタンスと小規模なインスタンスに適したソリューションをすばやく見つけます。
簡単なアプローチ(たとえば、常に利用可能な材料の数が最も多いレシピを選択する)は、決して最適とはほど遠くない結果をもたらす可能性があります。この種のものについては多くの研究があり、いくつかを明らかにすることは難しくありません。
ウィキペディアでは、レシピを行列の行として表すことにより、解空間(非常に大きい場合がある)の徹底的な検索を効率的に実行する ドナルドクヌースのアルゴリズム についても言及しています。
経路探索の問題のように聞こえます。ノードX
から始めて、最小のコストでいくつかのステップを移動したいとします。
物を買うとコストが上がり、買わないと変わらない。
冷蔵庫が空のノードが見つかるまで、フラッドフィルまたは minimax でアルファベータカリングをお勧めします。 (その後、とにかく購入する必要があります)
私が採用するアプローチは、エラーが最も少ないアプローチです。
1)各食品を表す一連のシンボルを作成します。
2)冷蔵庫の内容を記号の文字列として表します。文字列は順序付けされ、複数のアイテムは複数のシンボルとして表されます。液体などは、複数のカップ画分(つまり、6 x 1/4カップのミルク)で表す必要があります。
3)各レシピを同じように表現します。
次に、各レシピ文字列と冷蔵庫の文字列のエラーのパターンマッチングを最小にします。
私はかつて、アーリーレコグナイザーとの経験がありました。それが役立つかどうかはわかりません。
解釈論的アプローチを使用することについてはどうですか?すべてのレシピエントに異なる基準に基づいて特定のポイントを与えます。たとえば、食材を購入するごとに、食材ごとに5ポイント。最も低いポイントの勝者