【发布时间】:2021-07-06 19:47:59
【问题描述】:
我在 SO 上查看了几个类似的问题,但仍然无法解决。但我希望添加一个限制,即音量变化(新音量/旧音量 - 1 >= -10%)不能小于 -10%。
示例
| Customer | Old_volume | Elasticity | Price |
|---|---|---|---|
| X | 100 | -0.68 | 15.00 |
#example dataset
df <- data.frame(customer = c("X"),
old_volume = c(100),
elasticity = c(-0.68),
price = c(15.00))
#function
f3 <- function(x) {
new_vol = 100 * (1+(-0.68 * x))
new_rev = new_vol * (15.00 * (1+x))
new_cost = new_vol * 11.25
return(new_rev - new_cost) }
n_vol <- function(x) {
new_vol = 100 * (1+(-0.68 * x))
return(new_vol) }
#example run function
f3(0.25)
>>>[1] 622.5
#running the optimization
res <- optimize(f3, lower=0, upper=10, maximum = TRUE)
res$maximum
>>>0.6102941
res$objective
>>>[1] 754.9081
n_vol(0.6102941)
>>> 58.5
因此 vol change % = 58.5/100-1 = -0.415,但我想将其限制为 -0.1。
现在我想添加 new_vol/old_vol-1 >= -0.1 的约束。但是,我不确定如何使用Optimize()、optim() 或lpsolve() 添加它。我正在阅读lpsolve() 文档,这似乎是要走的路,但我对objective.in 中的系数向量是什么感到困惑。还看看其他包,如 constrOptim,对于一维的东西来说似乎太复杂了。
谢谢
例如,通常在 Excel 上,我会有一堆包含这些计算的列,并在体积变化 >= -0.1 的约束下运行求解器。但是,如果行数 > 1,000,则运行宏需要很长时间
编辑:添加输入示例
【问题讨论】:
-
感谢@G.Grothendieck。添加了一个输入示例
标签: r optimization statistics