r - 如何使用带约束的 lpSolve 最大化销售额
问题描述
假设我正在尝试最大化销售额,并且有两个变量,在两种类型的广告上花费的金额ads
和ads2
美元,这会影响sales
.
在计算了销售影响的线性模型后,我提取了系数以获得预测销售的公式。然后我尝试通过优化广告数量来最大化预测销售额。
问题是广告类型也应该有预算。如果没有这个限制,所有的广告预算都将花在ads
而不是ads2
.
这导致销售额约为 140 美元,但可以牺牲一点销售额来满足此约束。
我不知道如何实现这一点。我尝试调整 const 矩阵中的约束,但优化尝试强制所有广告仅使用其中一种类型的广告。
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
optimum$solution
对于任何一种广告类型都不应为 0,它应返回例如 50 100 而不是 300 0 或 0 300。
解决方案
该问题已通过添加新约束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("<", "<")
推荐阅读
- windows - DropBox 和 OneDrive 如何在 Windows 文件资源管理器中显示为文件系统
- python - 在没有 Anaconda 的情况下更新 Spyder IDE
- forms - 搜索框旁边的浮动/对齐响应表单按钮
- html - 如何强制表单标签正确对齐?
- azure - Application Insights 中的自适应采样是否会影响遥测相关性?
- java - StorageException:“服务器已终止上传会话”,但仅在模拟器上?
- python-3.x - 在 setup.py 中使用 scripts 参数后,我在哪里可以找到我的脚本?
- reactjs - 我应该依赖 react useEffect 钩子的依赖列表检查吗?
- javascript - 是否可以在 ApexCharts 中创建目标线?
- javascript - 如何使用 axios 在 gatsby useStaticQuery 中获取数据?