【发布时间】:2015-10-30 01:15:01
【问题描述】:
我有一个困扰我的组合问题。如果我遗漏了一些我可能忽略的明显解决方案,我希望有人给我他们的想法并指出。
假设有一家商店从一个供应商处购买其所有用品。供应商有一份待售物品清单。每个项目都有以下属性:
size, cost, quantity, m, b
m 和 b 是以下等式中的常数:
sales = m * (price) + b
这条线向下倾斜。该等式告诉我,如果我收取该特定价格,我将能够出售多少该商品。每个项目都有自己的 m 和 b 值。
假设商店的存储空间有限,资金有限。这家商店希望在其仓库中装满利润最高的商品。
(顺便说一下,利润密度 = 利润/尺寸。我将利润密度定义为仅与商品尺寸有关。我可以使用与尺寸有关的密度和成本,但要做到这一点,我必须知道仓库空间的成本。这不是我目前知道的数字,所以我只使用大小。)
购买越多,商品的利润密度就会下降(见下文。)
如果我翻转线方程,我可以看到在给定时间段内出售给定数量的物品需要收取的价格。
price = (sales-b)/m
所以如果我买了 n 件商品,想全部卖掉,我就得收费了
price = (n-b)/m
由此产生的收入将是
price*n = n*(n-b)/m
利润是
price*n-n*cost = n*(n-b)/m - n*cost
利润密度为
(n*(n-b)/m - n*cost)/(n*size)
或者,等价
((n-b)/m - cost)/size
假设我有一个表格,其中包含每个可用项目以及每个项目的利润密度。
问题是,为了最大化商店的利润,我应该购买每件商品的数量?
一种可能性是在成本和空间的范围内生成所有可能的项目组合,并选择具有最高盈利能力的组合。在 1000 个项目的列表中,这需要很长时间。 (我试过这个,1000 个列表花了 17 秒。太可怕了。)
我尝试过的另一个选择(在纸上)是选择列表中最赚钱的两个项目。让我们称最有利可图的项目 A、第二高利润的项目 B 和第三高利润的项目 C。我尽可能多地购买项目 A,直到它的利润低于项目 B。然后我使用 B 重复此过程和 C,对于列表中的每个项目。
但是,可能是这样的,在购买 B 项之后,A 再次成为最有利可图的项目,比 C 更多。所以这将涉及从当前最有利可图的项目跳到下一个,直到资源耗尽。我可以这样做,但这似乎是一种丑陋的方式。
我考虑过动态规划,但由于商品的利润密度会根据您购买的数量而变化,因此我无法对此提出解决方案。
我考虑过多元线性回归,“考虑”是指我对自己说“多元线性回归是一种选择吗?”然后什么也没做。
我的蜘蛛侠感觉告诉我,有一种更明显的方法在盯着我看,但我没有看到。请帮我同时踢自己和打脸。
【问题讨论】:
标签: algorithm recursion combinations dynamic-programming