求解线性规划营销问题的R

求解线性规划营销问题的R,r,linear-programming,lpsolve,R,Linear Programming,Lpsolve,我有这个问题,我知道答案,但我需要能够通过R解决它 有5个活动称为A、B、C、D、E。每个活动都有一个最大可能的预算,每个活动花费的每一美元都有一个投资回报率 看起来像这样 Campaign Max Budget ROI A 156.09 0.77 B 73.92 1.46 C 65.8 2.14 D 43.68 0.77 E 41

我有这个问题,我知道答案,但我需要能够通过R解决它

有5个活动称为A、B、C、D、E。每个活动都有一个最大可能的预算,每个活动花费的每一美元都有一个投资回报率

看起来像这样

Campaign   Max Budget    ROI
  A         156.09       0.77
  B         73.92        1.46
  C         65.8         2.14
  D         43.68        0.77
  E         41.01        1.81
有两个限制,你只能在所有活动中总共花费100英镑,并且你在每次露营上的花费不能超过你的最高预算,你正在努力使你的利润最大化,这就是你的投资回报率乘以你在活动中花费的预算

我知道答案是在活动C上花费65.8美元,因为它的投资回报率较高,然后在活动E上花费34.2美元,因为你的投资回报率第二高,因此你将达到最大花费100美元的限制

如果有人能帮我用lpSolveAPI或lpsolve设置,请提前感谢

这就是我迄今为止所尝试的

 library("lpSolveAPI")

 model<-make.lp(ncol=5)
 m1<-lp.control(model, sense="max", verbose="neutral")

 m2<-set.objfn(model, obj=c(120.1893,107.9232,140.812,33.6336,74.2462))

 m3<-set.bounds(model, upper =c(156.09,73.92,65.8,43.68,41.02))

 m4<-add.constraint(model, c(1,1,1,1,1), "<=",100)

 solve(model)


 get.variables(model)
 34.2  0.0 65.8  0.0  0.0
库(“lpSolveAPI”)

模型我认为在这里使用一个完整的方程求解模型是过分的,因为在战役之间没有任何平衡

如果我理解正确的话,你想在投资回报率最高的活动上花费尽可能多的钱,剩下的钱在第二高,剩下的钱在……等等,直到所有的钱都花光

我的方法是根据投资回报率进行排序,并计算一个累计总和,以了解您的收益。如果数据位于名为
df
data.frame
中:

df <- df[order(df$ROI, decreasing=TRUE), ]
df$spend <- pmin(df$MaxBudget,
                 pmax(TotalMoney-cumsum(c(0, df$MaxBudget[-nrow(df)]),
                      0)

df使用以下注释中的
dat
尝试此操作:

library(lpSolveAPI)

n <- nrow(dat)
model <- make.lp(0, n)
control <- lp.control(model, sense = "max")

set.objfn(model, dat$ROI)

set.bounds(model, upper = dat$Max_Budget)
add.constraint(model, rep(1, n), "<=", 100)

solve(model)
## [1] 0

get.variables(model)
## [1]  0.0  0.0 65.8  0.0 34.2
库(lpSolveAPI)

到目前为止,您尝试了什么?为什么选择使用线性规划?正如您在问题中所指出的那样,最好按投资回报率排序,并在预算完全用完之前将其列在列表中。
Lines <- "
Campaign   Max_Budget    ROI
  A         156.09       0.77
  B         73.92        1.46
  C         65.8         2.14
  D         43.68        0.77
  E         41.01        1.81"
dat <- read.table(text = Lines, header = TRUE)