Wolfram 语言

代数和数论

解答背包问题

新函数 KnapsackSolve 提供了简单且便于使用的方法求解如背包问题 (knapsack problem) 的组合最优化问题. 背包问题在很多不同领域都存在,如二维切割问题和资本预算,并且可被用来构建密码系统.

以下为一个食品列表,其中还指定了每个水果的热量含量、平均价格和最大数量.

In[1]:=
Click for copyable input
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}|>;

确定每种水果的数量以最大化给定金额的水果的热量含量.

In[2]:=
Click for copyable input
counts = KnapsackSolve[fruits, Quantity[25, "Euros"]]
Out[2]=

以下为每种水果提供的热量与热量总和.

In[3]:=
Click for copyable input
fruits[[All, 1]] counts
Out[3]=
In[4]:=
Click for copyable input
fruits[[All, 1]] counts; Total[%]
Out[4]=

以下为每种水果的价格和价格总和.

In[5]:=
Click for copyable input
fruits[[All, 2]] counts
Out[5]=
In[6]:=
Click for copyable input
fruits[[All, 2]] counts; Total[%]
Out[6]=

相关范例

de en es fr ja ko pt-br ru