2

在另一篇文章中,MSN 给了我一个很好的指导来解决我的代数问题(从总成本计算出价)。现在,即使我可以手动计算它,我也完全不知道如何用伪代码或代码编写它。任何人都可以给我一个快速提示?顺便说一句,我想根据最终成本计算出价。

usage cost(bid) = PIN(bid*0.10, 10, 50)
seller cost(bid) = bid*.02
added cost(bid) = PIN(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10)
storing cost(bid) = 100
So the final cost is something like:

final cost(bid) = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 20) + PIN(ceiling((bid - 1000)/2000)*10, 0, 20) + bid*.02 + 100 + bid
Solve for a particular value and you're done.

For example, if you want the total cost to be $2000:

2000 = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10) + bid*.02 + 100 + bid.
Bid must be at least > 1500 and < 2000, which works out nicely since we can make those PIN sections constant:

2000 = 50 + 10 + 5 + 100 + bid*1.02
1835 = bid*1.02
bid = 1799.0196078431372549019607843137
4

2 回答 2

3

该函数简化为:

                  / 1.02 * bid + 115   bid <   100
                  | 1.12 * bid + 105   bid <=  500
final cost(bid) = | 1.02 * bid + 160   bid <= 1000
                  | 1.02 * bid + 165   bid <= 3000
                  \ 1.02 * bid + 170   otherwise

如果您将每个部分视为一个单独的函数,则可以将它们反转:

bid_a(cost) = (cost - 115) / 1.02
bid_b(cost) = (cost - 105) / 1.12
bid_c(cost) = (cost - 160) / 1.02
bid_d(cost) = (cost - 165) / 1.02
bid_e(cost) = (cost - 170) / 1.02

如果您将成本计入每个功能,您将获得该范围的估计出价。您必须检查该值是否确实在该函数的有效范围内。

例子:

cost = 2000

bid_a(2000) = (2000 - 115) / 1.02 = 1848  Too big! Need to be < 100
bid_b(2000) = (2000 - 105) / 1.12 = 1692  Too big! Need to be <= 500
bid_c(2000) = (2000 - 160) / 1.02 = 1804  Too big! Need to be <= 1000
bid_d(2000) = (2000 - 165) / 1.02 = 1799  Good. It is <= 3000
bid_e(2000) = (2000 - 170) / 1.02 = 1794  Too small! Need to be > 3000

Just to check:

final cost(1799) = 1.02 * 1799 + 165 = 2000   Good!

由于原始函数是严格递增的,因此这些函数中最多有一个会给出可接受的值。但是对于某些输入,它们都不会给出很好的价值。这是因为原始函数跳过了这些值。

final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186

因此,例如,没有函数会给出可接受的值cost = 1182

于 2009-03-13T02:32:56.053 回答
2

由于使用PINand ceiling,我看不到一种简单的方法来反转计算。假设它bid具有固定的精度(我猜点后面有两位小数),您总是可以使用二进制搜索(因为函数是单调的)。

编辑:在考虑了更多之后,我观察到x = bid*1.02 + 100,我们发现最终成本在 x+15(不含)和 x+70(含)之间(即x+15 < final cost < x+70)。考虑到这个范围的70-15=55大小(它不再有任何一个或其中)。bidx+15 = final costx+70 = final costPINceiling

为了说明,设最终成本为222。由此可知。x+15 = 222_ bid = 107/1.02 = 104.90然后我们得到使用成本由 给出,bid*0.1而附加成本为5。换句话说,我们得到final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105,因此bid = (222-105)/1.12 = 104.46。由于这个值bid意味着使用和额外成本的正确值,我们知道这就是解决方案。

但是,如果我们首先查看x+70 = 222,我们会得到以下内容。首先我们得到这个假设bid = 52/1.02 = 50.98。这意味着使用成本为10,附加成本为5。所以我们得到final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115和 因此bid = (222-115)/1.02 = 104.90。但是如果bid是,104.90那么使用成本不是10bid*0.1所以这不是正确的解决方案。

我希望我解释得足够清楚。如果没有,请告诉我。

注意:对于特殊值,我指的是那些定义使用值和附加成本的函数发生变化的值。例如,对于使用成本,这些值为100500:在100您使用之下、在您使用10之上以及在您之间使用。50050bid*0.1

于 2009-03-13T01:47:33.963 回答