使用 R 进行优化:概念、起源、应用与案例研究

发布: (2025年12月3日 GMT+8 17:44)
7 min read
原文: Dev.to

Source: Dev.to

优化的起源

数学优化领域可以追溯到 17 世纪,当时牛顿和莱布尼茨等数学家奠定了微积分的基础。早期的优化问题涉及寻找函数的最大值或最小值,随后逐步扩展到更复杂的多变量约束问题。

到 20 世纪初,优化通过运筹学获得了显著关注,尤其是在二战期间,各国需要有效分配有限的军事资源。线性规划由乔治·丹齐格在 1947 年提出 simplex 方法正式化,彻底改变了工业界处理资源分配的方式。

随着计算能力的提升,优化从理论数学转向广泛的实际应用。借助 R 等编程语言,优化变得对分析师、数据科学家和各领域研究者更加易用。

什么是优化?

优化指的是从一组可用备选方案中选择最佳解的过程。它包括:

  • 目标函数 – 例如,最大化利润、最小化成本
  • 决策变量 – 我们可以操控的输入
  • 约束条件 – 资源、时间等限制
  • 最优解 – 满足约束并产生最佳结果

优化问题通常分为两类:

  • 无约束优化 – 决策变量可以在其定义域内取任意值。
  • 有约束优化 / 线性规划 (LP) – 对变量施加限制或约束。

R 通过 optim() 函数以及 lpSolvelpSolveAPI 等包同时支持这两类优化。

R 中的无约束优化

无约束优化是在没有限制条件的情况下寻找函数的最小值或最大值。R 提供了内置的 optim() 函数来求解此类问题。

示例

# Define the objective function
f <- function(x) 4 * (x[1] - 1)^2 + 7 * (x[2] - 3)^2 + 30

# Starting point
c0 <- c(1, 1)

# Run optimization
result <- optim(c0, f)

# Display results
result$par          # Optimal parameters
result$value        # Minimum value of the function
result$convergence  # 0 indicates successful optimization

输出显示最优参数接近 (1, 3),函数最小值为 30,收敛状态为 0(表示优化成功)。

线性规划简介

线性规划(LP)专注于在线性约束下优化线性目标函数。它广泛用于资源分配、生产计划、运输、能源管理和排程等领域。

LP 问题的结构如下:

  • 目标函数 – 最大化或最小化
  • 决策变量 – 如 y1, y2, …
  • 约束条件 – 线性不等式或等式
  • 非负性y1 ≥ 0, y2 ≥ 0

lpSolve 这样的包使得在 R 中实现 LP 既简单又直观。

优化的实际应用

1. 供应链与物流

  • 仓库选址
  • 配送路线规划
  • 库存管理
  • 运输成本最小化

2. 制造业

  • 生产排程
  • 减少废料
  • 机器利用率最大化

3. 金融

  • 在收益、风险和市场约束之间平衡的投资组合构建(二次规划)

4. 农业

  • 考虑土地面积、作物价格、资源约束和劳动力的种植策略

5. 医疗保健

  • 护士排班
  • 病人等待时间缩短
  • 医院床位分配

案例研究 1:产品组合优化

某公司生产两种产品 A 和 B,售价分别为 $25 和 $20。资源和时间约束如下:

  • 可用资源:1800 单位
  • 可用时间:8 小时(480 分钟)
  • 产品 A 需要 20 单位资源;B 需要 12 单位资源
  • 两者均需 4 分钟的生产时间

目标: 最大化收入

[ \text{Revenue} = 25y_1 + 20y_2 ]

约束条件

[ \begin{aligned} 20y_1 + 12y_2 &\le 1800 \ 4y_1 + 4y_2 &\le 480 \ y_1, y_2 &\ge 0 \end{aligned} ]

在 R 中求解(lpSolve)

library(lpSolve)

objective.in <- c(25, 20)                     # Coefficients of the objective
const.mat   <- matrix(c(20, 12, 4, 4), nrow = 2, byrow = TRUE)
rhs         <- c(1800, 480)
dir         <- c("<=", "<=")

optimum <- lp("max", objective.in, const.mat, dir, rhs)

# Results
optimum$solution   # Production quantities (y1, y2)
optimum$objval     # Maximum revenue

最优生产方案

  • 产品 A:45 单位
  • 产品 B:75 单位
  • 最大收入:$2,625

案例研究 2:农业优化问题

一位农民拥有 75 英亩土地,想要种植小麦 (x) 和大麦 (y)。LP 模型考虑了种植成本、每蒲式耳利润、每英亩产量以及储存约束。

目标: 最大化利润

[ \text{Profit} = 143x + 60y ]

约束条件

[ \begin{aligned} 120x + 210y &\le 15000 \quad \text{(种植成本)}\ 110x + 30y &\le 4000 \quad \text{(储存限制)}\ x + y &\le 75 \quad \text{(土地限制)}\ x, y &\ge 0 \end{aligned} ]

在 R 中求解(lpSolveAPI)

library(lpSolveAPI)

lprec <- make.lp(0, 2)               # 0 constraints, 2 decision variables
lp.control(lprec, sense = "max")    # Maximization problem

set.objfn(lprec, c(143, 60))         # Objective coefficients

add.constraint(lprec, c(120, 210), "<=", 15000)  # Planting cost
add.constraint(lprec, c(110, 30),  "<=", 4000)   # Storage limit
add.constraint(lprec, c(1, 1),    "<=", 75)      # Land limit

solve(lprec)                        # Solve the model
get.variables(lprec)                # Optimal acres (x, y)

最优耕种面积

  • 小麦:21.875 英亩
  • 大麦:53.125 英亩
  • 最大利润:$6,315.63

为什么使用 R 进行优化?

  • 内置函数(optim())和强大的库(lpSolvelpSolveAPIROInloptr 等)
  • 可使用 ggplot2 等工具直观展示约束和解
  • 与统计建模、数据处理流水线无缝集成
  • 开源、跨平台,拥有庞大的社区支持

结论

优化在现代决策中扮演关键角色,涉及制造、物流、农业、金融等众多行业。借助 R,实施优化模型变得更加便捷和实用,得益于其数学计算能力和友好的软件包。通过掌握核心概念、学习真实案例并进行实践,你即可自信地解决自己的优化问题。无论是最大化利润、最小化成本,还是在资源受限的情况下进行分配,R 中的优化工具都能帮助你做出更聪明、更高效的决策。

Back to Blog

相关文章

阅读更多 »

函数式四叉树

请提供您希望翻译的具体摘录或摘要文本,我才能为您进行简体中文翻译。