我有这个问题,我知道答案,但是我需要能够通过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,并且您在每个广告系列上的花费都不能超过最大预算,并且您正试图最大限度地提高利润,这就是您的ROI乘以预算您在广告系列上花费了。
我知道答案将是在广告系列C上花费65.8,因为它具有更高的ROI,然后在广告系列E上花费34.2,因为您拥有第二高的ROI,并且您将受到最大支出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
为什么在Camping C上我得到65.8,而在A上我得到34.2,应该在E上得到?我假设我的目标函数不正确,对于目标函数,我将ROI乘以最大预算,然后使用这些系数。
答案 0 :(得分:1)
在下面的注释中使用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
可复制形式的输入:
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)
答案 1 :(得分:0)
我认为这里使用整个方程求解模型是过大的,因为战役之间没有任何平衡。
如果我的理解正确,那么您想在ROI最高的广告系列上花尽可能多的钱,在第二高的广告上剩下多少,然后剩下的……等等,等等。直到花完所有钱。
我的方法是根据投资回报率进行排序,并计算累计金额以了解您所获得的收益。如果您的数据位于名为data.frame
的{{1}}中:
df
与之平行,您可以在每个广告系列上花费最大的金额,也可以在资助所有“更有价值”的广告系列之后,将剩余的金额(少得多)都花在每个广告系列上。而“剩下的”则定义为无,或df <- df[order(df$ROI, decreasing=TRUE), ]
df$spend <- pmin(df$MaxBudget,
pmax(TotalMoney-cumsum(c(0, df$MaxBudget[-nrow(df)]),
0)
减去所有高级广告系列的总和。