-
22-07-2019 - |
题
在另一篇文章中,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
解决方案
该函数简化为:
/ 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
例如
其他提示
由于使用PIN
和ceiling
的,我没有看到一个简单的方法来反转的计算。假设bid
具有固定的精度(I猜点后面两位小数)你总是可以使用二进制搜索(作为函数是单调)。
编辑:考虑这个问题更加一些后,我观察到,服用x = bid*1.02 + 100
,我们有最终成本为x + 15(不包括)和x + 70(含)(即x+15 < final cost < x+70
)之间。鉴于此范围(70-15=55
)和事实的特殊值(见下面的注释)为bid
都相隔比这更多,你可以采取x+15 = final cost
和x+70 = final cost
,获得使用权和案例/值增加的成本,只是大小解决方程式(其不再具有在其任PIN
或ceiling
)。
要说明,让最终成本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
使用费用不10
但bid*0.1
,所以这是不正确的解决方案。
我希望我解释清楚就好了。如果没有,请让我知道。
N.B .:有特殊值I是指那些的量,函数定义使用率的值和增加的成本而改变。例如,对于使用成本这些值100
和500
:下面100
使用10
,上述500
使用50
和在之间使用bid*0.1