R用于解决线性规划营销问题

时间:2018-12-19 14:55:11

标签: 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.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乘以最大预算,然后使用这些系数。

2 个答案:

答案 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) 减去所有高级广告系列的总和。