我具有以下功能,可以使用optim()最大化该功能。
Budget = 2000
X = 4
Y = 5
min_values = c(0.3,0)
start_values = c(0.3,0.5)
max_values = c(1,1)
sample_function <- function(z,Spend){
Output = (z[1]*X*Spend) + (z[2]*Y*Spend)
return(Output)
}
MaxFunction <- optim(par=start_values ,fn= sample_function, method = "L-BFGS-B", lower = min_values , upper= max_values ,control=list(maxit=100000 ,fnscale=-1), Spend= Budget)
但是我想在最大化时添加一些约束,例如:
z[1] => 1/3
和
z[1] + z[2] = 1
任何帮助将不胜感激,因为这与我要解决的更复杂的问题有关。 或者如果有其他解决方法而不使用otpim(),请告诉我。
答案 0 :(得分:1)
optim
对于约束优化不是一个好的选择,但是对于您的情况,只要您以另一种方式制定目标函数sample_function
,它仍然可行。
下面是一个例子
min_values = 1/3
start_values = 0.5
max_values = 1
sample_function <- function(z,Spend){
z*X*Spend + (1-z)*Y*Spend
}
MaxFunction <- optim(par=start_values ,
fn= sample_function,
method = "L-BFGS-B",
lower = min_values ,
upper= max_values,
control=list(maxit=100000 ,fnscale=-1),
Spend= Budget)
如果要查看z
和1-z
的元素分布,可以使用
z1 <- MaxFunction$par
z2 <- 1- z1
Zopt <- c(z1,z2)
这样
> Zopt
[1] 0.3333333 0.6666667