比方说,我正在尝试使销售最大化,并且有两个变量,即以ads
和ads2
为单位的两种广告的花费金额,它们会影响{{1}}。 / p>
在计算了销售影响的线性模型之后,我提取了系数以获得用于预测销售的公式。然后,我尝试通过优化广告数量来最大化预测销售额。
问题在于,广告类型也应该有预算。没有这种限制,所有广告预算都将花费在sales
上,而不是ads
上。
这导致销售额约为140美元,但是为了满足这一限制,可能会牺牲一些销售额。
我不知道该如何实现。我尝试调整const矩阵中的约束,但是优化尝试将所有广告强制只投放到其中一种广告类型。
ads2
library(tibble)
library(dplyr)
library(lpSolve)
data <- tribble(~"ads", ~"ads2", ~"sales",
100, 120, 100,
50, 90, 40,
20, 10, 10,
150, 110, 130,
190, 90, 160,
180, 300, 250,
110, 200, 100,
80, 70, 20,
50, 20, 10,
30, 100, 200,
100, 190, 40,
100, 200, 100,
40, 90, 80,
60, 80, 60,
200, 20, 100,
20, 200, 80,
30, 10, 30,
40, 90, 100,
80, 20, 80,
200, 150, 100,
80, 80, 40,
100, 10, 300,
150, 100, 60,
10, 100, 10
)
forecast <- lm(sales ~ ads + ads2, data = data)
coef <- forecast$coefficients
obj <- coef[2:3] # coefficients
const <- matrix(c(1, 1, # ads
1, 1), # ads2
nrow = 2)
min_items <- 250 # minimum total budget
max_items <- 300 # maximum total budget
rhs <- c(min_items, max_items)
direction <- c(">", "<")
optimum <- lp(direction = "max", obj, const, direction, rhs)
optimum$solution # budget spent on ads and ads2
optimum$objval + coef[1] # forecasted sales by using this budget
对于任何一种广告类型均不应为0,例如,应返回50 100,而不是300 0或0 300。
答案 0 :(得分:0)
通过添加新约束max_ads
并将其设置为所需广告的最大值来解决该问题。同样,必须通过将ads2
的对应约束设置为零来更改约束矩阵。方向的标志也必须更改。
const <- matrix(c(1, 1, # ads
0, 1), # ads2
nrow = 2)
max_ads <- 100 # maximum ads budget
max_items <- 300 # maximum total budget
rhs <- c(max_ads, max_items)
direction <- c("<", "<")