You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用lpSolve带约束最大化销售额?二元广告投放优化问题

解决线性规划优化广告预算时全投单一广告的问题

我明白你现在遇到的困扰了——当用线性规划优化广告预算时,因为线性目标函数的最优解往往落在约束区域的顶点上,所以会出现把全部预算投给单一广告的情况。要解决这个问题,我们只需要给两类广告添加最小投放金额的约束,确保每类广告都有至少一点预算投入。

问题根源分析

你的现有代码已经完成了线性回归拟合和基础的预算约束,但约束条件只有总预算的上下限。线性规划在这种情况下,会直接选择单位回报率更高的广告(也就是回归系数更大的那个)把预算全投进去——这是线性目标函数在凸约束集上的固有特性,最优解必然出现在顶点。

解决方案:添加非零投放约束

我们需要在原有的约束基础上,新增两个条件:

  • ads ≥ 最小投放金额(比如设为1美元,你可以根据实际需求调整)
  • ads2 ≥ 最小投放金额

这样就能强制两类广告都获得预算,同时保持总预算在250-300美元的范围内。

修改后的完整代码

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

# 目标函数:最大化销售额,对应ads和ads2的回归系数
obj <- coef[2:3]

# 构建约束矩阵:
# 行1: ads + ads2 ≥ 250(总预算下限)
# 行2: ads + ads2 ≤ 300(总预算上限)
# 行3: ads ≥ 1(强制ads非零投放)
# 行4: ads2 ≥ 1(强制ads2非零投放)
const <- matrix(
  c(1, 1,   # 总预算下限
    1, 1,   # 总预算上限
    1, 0,   # ads最小投放约束
    0, 1),  # ads2最小投放约束
  nrow = 4,
  byrow = TRUE
)

# 约束右侧的数值
rhs <- c(250, 300, 1, 1)

# 约束方向:≥, ≤, ≥, ≥
direction <- c(">", "<", ">", ">")

# 求解线性规划问题
optimum <- lp(direction = "max", objective.in = obj, const.mat = const, const.dir = direction, const.rhs = rhs)

# 输出结果
cat("优化后的广告投放金额(ads, ads2):", optimum$solution, "\n")
cat("预测销售额:", optimum$objval + coef[1], "\n")

代码说明

  • 新增的两行约束分别强制ads和ads2的投放金额至少为1美元,你可以根据业务需求把这个最小值调整为5、10等任意合理数值。
  • 对应的rhs(约束右侧值)和direction(约束方向)也同步扩展,确保新约束生效。

运行这段代码后,你会得到一个两类广告金额均不为0的最优解,比如类似120 180这样符合预算约束的组合,不会再出现全投单一广告的情况。

内容的提问来源于stack exchange,提问作者kkz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:31:49