XX 小卖部去进货,原本打算购买图 6-93 所示的产品。突然发现带的现金不够,身上只有1000 元钱,因此只能购买部分产品。现要求计算购买哪些产品、每个产品多少件才能刚好花完这1000元钱。
假设没有任何商品组合等于1000元,一定会产生零钱,那么应尽可能让剩余的零钱更少。
解题步骤
此问题属于通过规划求解获取最优解的应用,步骤如下。
1.在 C1 中输入“购买数量”,在 A8 中输入“总价格”,然后在 A8 单元格中输入公式“=SUMPRODUCT(B2:B6,C2:C6)”,此公式用于计算购买产品的总价格,效果如图6.94所示。
图6.94 补充购货表的数据与公式
2.单击功能区的“数据”→“规划求解”,弹出“规划求解参数”对话框。
3.将目标设置为B8,将可变单元格设置为C2:C6,设置界面如图6.95所示。
图6.95 设置目标和可更改单元格
4.单击右方的“添加”按钮,弹出“添加约束”对话框,然后按图6.96所示的方式设置条件。由于总资金只有1000元,因此B8单元格的值只能是小于等于1000的最大值。
图6.96 设置第一个约束条件
5.单击“添加约束”对话框中的“添加”按钮,继续添加图6.97和图6.98所示的两个条件,其功能是限制C2:C6区域只能生成大于等于0的整数。
图6.97 设置第二个约束条件
图6.98 设置第三个约束条件
6.返回“规划求解参数”对话框,单击“求解”按钮,当弹出“规划求解结果”对话框时直接单击“确定”按钮关闭对话框,然后在工作表中将产生图6.99所示的结果。
从表中可以看出A产品买3件、B产品买1件、C产品买2件、D产品买10件、E产品买11件,其价格之和等于999元,剩下1元,符合实际需求。
图6.99 求解结果
知识扩展
1.产品的购买数量一定是正整数或 0,因此在“规划求解参数”对话框中一定要添加两个条件来约束C2:C6区域的值,否则无法得到正确的解。
2.本例需求是“……假设没有任何商品组合等于1000元,一定会产生零钱,那么应尽可能让剩余的零钱更少”,翻译为程序语言其实就是“小于等于1000的最大值”,因此本例在设置条件时将目标的值设置为“最大值”,然后添加约束条件“<=1000”。