如何使用带有约束的lpSolve来最大化销售

时间:2019-05-09 10:03:47

标签: r optimization lpsolve

比方说,我正在尝试使销售最大化,并且有两个变量,即以adsads2为单位的两种广告的花费金额,它们会影响{​​{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。

1 个答案:

答案 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("<", "<")