【问题标题】:R for solving linear programming marketing problemR 用于解决线性规划营销问题
【发布时间】:2018-12-19 14:55:11
【问题描述】:

我有这个问题,我知道答案,但我需要能够通过 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

为什么我在露营 C 上得到 65.8 而在 A 上得到 34.2,应该是在 E 上吗?我假设我的目标函数不正确,对于目标函数,我将 ROI 乘以最大预算并使用这些系数。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 您为什么选择使用线性规划?正如您在问题中指出的那样,最好按投资回报率排序并从列表中向下直到您的预算用完为止。

标签: r linear-programming lpsolve


【解决方案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)

【讨论】:

    【解决方案2】:

    我认为在这里使用一个完整的方程求解模型是多余的,因为在活动之间没有什么可以平衡的。

    如果我理解正确的话,您想在投资回报率最高的广告系列上花费尽可能多的钱,第二高还剩下什么,然后剩下什么......等等。直到所有的钱都花光。

    我的方法是按投资回报率排序,然后计算累积总和以了解您的目标。如果您的数据位于名为dfdata.frame 中:

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

    并行化,您可以在每个广告系列上花费尽可能多的金额,或者在为所有“更有价值”的广告系列提供资金后剩余的金额,以较少者为准。并且“剩下的”被定义为什么都没有,或者TotalMoney 减去所有更高活动的总和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2015-05-31
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多