假设我有这个数据框。
library(dplyr)
library(lpSolve)
a <- seq(from=-0.5, to=0.5, by=.01)
success_rate <- sample(a, size=945, replace=TRUE)
attempts <- sample(1:800, 945, replace = TRUE)
df <- data.frame(success_rate,attempts)
我想找到最大化以下功能的X1和X2:
{X1*df$attempts[1] + X2*df$success_rate[1]}/{X1*max(df$attempts) + X2*max(df$success_rate)}
但是,应在以下约束条件下进行最大化:
对于数据框内的所有观察,该函数的结果必须为<= 1,X1 + X2 = 1,并且X1和X2不等于0。
我使用lpsolve来解决它,但是即使我指定Xs不能等于0,它也始终为我提供1和0作为解决方案。这是我所拥有的:
df$success_rate <- (df$success_rate-min(df$success_rate))/(max(df$success_rate)-min(df$success_rate))
df$attempts <- (df$attempts-min(df$attempts))/(max(df$attempts)-min(df$attempts))
aux <- cbind(inputs, outputs)
f.obj <- c(df2$pass_snapsscale[2], df2$pass_perscale[2])
f.con <- rbind(aux, c(1,1), c(1,1), c(0,1), c(1,0))
f.dir <- c(rep("<=",946),">=",">", ">" )
f.rhs <- c(rep(1,946),0,0,0)
model <- lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens = TRUE)
我得到的是:
Success: the objective function is 0.753689
df $ attempts [1]的值是哪个。还有其他方法可以最大化此功能,还是可以指出我的代码出了什么问题?
答案 0 :(得分:0)
您似乎正在尝试使用线性编程库来解决非线性问题。尝试重新定义文档中提出的问题。 http://lpsolve.sourceforge.net/5.5/ 希望能帮助到你。