Lösen Sie das Rucksackproblem
Die neue Funktion KnapsackSolve ermöglicht die einfache und benutzerfreundliche Lösung kombinatorischer Optimierungsprobleme wie das Rucksackproblem. Rucksackprobleme kommen in einer Vielzahl von Feldern vor, wie beim zweidimensionalen Zuschnittproblem und bei der Investitionsrechnung, und können zum Erstellen von Kryptosystemen verwendet werden.
Dies ist eine Einkaufsliste, auf der jede Frucht gemeinsam mit ihrem Kaloriengehalt, durchschnittlichem Preis und maximaler Stückzahl angegeben ist.
In[1]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_72.png)
fruits = <|
Entity["FoodType", "Apple"] -> {Quantity[91, "LargeCalories"],
Quantity[2.36, "Euros"], 3},
Entity["FoodType", "Orange"] -> {Quantity[71, "LargeCalories"],
Quantity[2.12, "Euros"], 3},
Entity["FoodType", "Banana"] -> {Quantity[105, "LargeCalories"],
Quantity[1.89, "Euros"], 5},
Entity["FoodType", "Kiwi"] -> {Quantity[103, "LargeCalories"],
Quantity[3.77, "Euros"], 10},
Entity["FoodType", "Pear"] -> {Quantity[96, "LargeCalories"],
Quantity[2.87, "Euros"], 5}|>;
Bestimmen Sie die Stückzahl pro Frucht, die den maximalen Kaloriengehalt für einen bestimmten Geldbetrag ergibt.
In[2]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_73.png)
counts = KnapsackSolve[fruits, Quantity[25, "Euros"]]
Out[2]=
![](assets.de/solve-the-knapsack-problem/O_65.png)
Dies ist der Kaloriengehalt der einzelnen Früchte sowie der Gesamtbetrag.
In[3]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_74.png)
fruits[[All, 1]] counts
Out[3]=
![](assets.de/solve-the-knapsack-problem/O_66.png)
In[4]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_75.png)
fruits[[All, 1]] counts;
Total[%]
Out[4]=
![](assets.de/solve-the-knapsack-problem/O_67.png)
In[5]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_76.png)
$Failed
Dies sind die Kosten pro Frucht sowie die Gesamtkosten.
In[6]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_77.png)
fruits[[All, 2]] counts
Out[6]=
![](assets.de/solve-the-knapsack-problem/O_68.png)
In[7]:=
![Click for copyable input](assets.de/solve-the-knapsack-problem/In_78.png)
fruits[[All, 2]] counts;
Total[%]
Out[7]=
![](assets.de/solve-the-knapsack-problem/O_69.png)