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

如何在R中求解约束下的最优生产数量以最大化利润?

约束条件下利润最大化的R语言求解问题修正

问题背景

  • 产品原料需求:
    • 户外产品X:每单位需消耗原料M1=5、M2=2、M3=3
    • 室内产品Y:每单位需消耗原料M1=6、M2=1、M3=3
  • 原料总量限制:
    • M1总量不超过26,M2不超过12,M3不超过15
  • 利润计算规则:
    • 室内产品Y每单位利润70000,总利润为70000*y
    • 户外产品X利润分段计算:前4单位每单位60000,超过4的部分每单位80000,总利润为60000*min(4,x) + 80000*max(x-4,0)

原代码的核心问题

  1. 约束判断逻辑完全搞反:原代码用|(或)判断,且条件写反了——应该是任何约束不满足时返回-Inf,但原代码是满足约束就返回-Inf
  2. 目标函数错误:原函数返回的是总产量production,但我们要最大化的是总利润total_profit
  3. 原料需求计算错误:Y的M3需求被写成了2,实际应为3
  4. 约束逻辑混乱:原代码里的y ≤5和prod_vec[1]>0、prod_vec[2]>0逻辑错误,生产数量应为非负(x≥0、y≥0),y≤5需作为约束正确加入

修正后的代码

# 定义目标函数:最大化总利润,不满足约束则返回-Inf
total_profit_fun <- function(prod_vec){
  x <- prod_vec[1]  # X的生产数量
  y <- prod_vec[2]  # Y的生产数量
  
  # 计算总利润
  profit_indoor <- 70000 * y
  profit_outdoor <- 60000 * min(4, x) + 80000 * max(x - 4, 0)
  total_profit <- profit_indoor + profit_outdoor
  
  # 计算原料总需求
  m1_needed <- x * 5 + y * 6
  m2_needed <- x * 2 + y * 1
  m3_needed <- x * 3 + y * 3  # 修正Y的M3需求为3
  
  # 约束检查:违反任何一项则返回-Inf
  # 约束包括:原料不超限、x≥0、y≥0、y≤5
  if(m1_needed > 26 || m2_needed > 12 || m3_needed > 15 || x < 0 || y < 0 || y > 5){
    return(-Inf)
  } else {
    return(-total_profit)  # optim默认最小化,最大化利润需返回负利润
  }
}

# 测试可行解
feasible_sol <- c(2, 2)
cat("可行解(2,2)的总利润:", -total_profit_fun(feasible_sol), "\n")

# 测试不可行解
infeasible_sol <- c(10, 12)
cat("不可行解(10,12)的返回值:", total_profit_fun(infeasible_sol), "\n")

# 使用L-BFGS-B方法求解,设置变量边界(x≥0,y≥0且y≤5)
result <- optim(par = feasible_sol, fn = total_profit_fun, 
                method = "L-BFGS-B", lower = c(0, 0), upper = c(Inf, 5))

# 输出最优结果
cat("最优生产数量:X=", round(result$par[1], 2), ", Y=", round(result$par[2], 2), "\n")
cat("最大总利润:", -result$value, "\n")

关键修正点说明

  1. 约束逻辑修正:用||判断是否违反约束,只要有一项约束不满足就返回-Inf,保证只有合法解才会输出有效利润
  2. 目标函数对齐:因为optim默认是最小化问题,所以要最大化利润,就返回负的总利润,让optim找到最小值对应的负利润,也就是最大的实际利润
  3. 原料计算修正:把Y的M3需求从2修正为3,匹配问题描述
  4. 优化方法选择:选用L-BFGS-B方法,支持设置变量的上下边界,更适合有非负约束和y≤5约束的优化场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:20:42