最优化方法(统筹学)及其MATLAB实现-chapter1
第一章核心内容的最优化概要:
1. 什么是“最优化”问题?
最优化研究的是在满足一定约束条件下,如何寻找最优的决策方案,使得某个指标达到最大或最小。
优化模型的三要素
一个标准的最优化问题通常可以表示为:
- 决策变量 ():你需要控制的变量(如投资额、生产数量、坐标位置)。
- 目标函数 ():你想优化的指标(如成本最小、利润最大、误差最小)。
- 约束条件 ():你必须遵守的限制(如原材料总量、预算范围、物理定律)。
2. 最优化问题的分类
了解分类有助于你在后续章节中选择正确的算法:
-
线性规划 (LP) vs. 非线性规划 (NLP):
-
如果 全是线性的,就是线性规划(Simple & Efficient)。
-
只要有一个是非线性的,就是非线性规划(复杂,可能存在局部最优)。
-
无约束优化 vs. 有约束优化:
-
无约束优化是基础,很多有约束问题最终会转化为无约束问题来求解。
-
连续优化 vs. 离散/整数规划:
-
变量是连续取值还是只能取整数。
3. 局部最优与全局最优
这是第一章中最核心的概念之一,决定了算法的成败:
- 局部极小点 (Local Minimum):在它周围的一小圈范围内,它是最小的。
- 全局极小点 (Global Minimum):在整个可行域内,它是最小的。
注意: 大多数传统算法(如梯度下降法)只能找到局部极小点。只有当函数是凸函数时,局部极小点才一定是全局极小点。
4. 算法的基本结构
几乎所有的数值优化算法都遵循一个通用的迭代框架:
- **给出初始点 **:猜一个可能的答案。
- **确定搜索方向 **:往哪边走能让函数值下降?(比如沿着梯度的反方向)。
- **确定步长 **:往这个方向走多远?(通过一维搜索确定)。
- 更新点:。
- 检查停止准则:如果改变量足够小或梯度接近 0,则停止。
5. MATLAB 在最优化中的作用
MATLAB 的常用工具箱:
fminunc:用于求解无约束非线性优化。fmincon:用于求解有约束非线性优化(最常用)。linprog:用于求解线性规划。
以下为MATLAB拓展内容:
** 典型模型 + MATLAB 示例 + 讲解要点**。
一、MATLAB 在最优化中的核心作用(一句话定位)
MATLAB 的作用不是“替你建模”,
而是:在建好模型后,可帮“高效、稳定地求解”。
三大函数,对应三类最常见模型:
| 函数 | 解决什么问题 | 是否常用 |
|---|---|---|
fminunc |
无约束非线性优化 | ⭐⭐⭐ |
fmincon |
有约束非线性优化 | ⭐⭐⭐⭐(建模核心) |
linprog |
线性规划 | ⭐⭐⭐⭐(基础必会) |
二、fminunc —— 无约束非线性优化(入门首选)
1️⃣ 问题类型
数学形式:
[
\min f(x), \quad x \in \mathbb{R}^n
]
- 没有任何约束
- 变量连续
- 目标函数是非线性的
2️⃣ 典型建模场景
- 最小二乘拟合
- 参数估计
- 函数最小值搜索
- 机器学习中的 loss 最小化(简化版)
3️⃣ 示例 1:一元函数最小值
数学问题
[
f(x) = (x-2)^2 + 1
]
显然最小值在 (x=2),但我们用 MATLAB 来“数值求”。
MATLAB 实现
f = @(x) (x - 2).^2 + 1; % 目标函数
x0 = 0; % 初始点
[xmin, fval] = fminunc(f, x0);
结果解释
xmin:找到的最优解fval:最小函数值
📌 教学重点:
fminunc是“从初值出发往下爬”,
初值不同,可能路径不同。
4️⃣ 示例 2:二维非线性函数
[
f(x,y) = x^2 + y^2 + xy
]
MATLAB 写法(向量形式)
f = @(x) x(1)^2 + x(2)^2 + x(1)*x(2);
x0 = [1; 1];
[xmin, fval] = fminunc(f, x0);
📌 建模必讲点:
- MATLAB 中 决策变量几乎都是“向量”
- 即使只有一个变量,也建议用向量思维
5️⃣ 什么时候不能用 fminunc?
❌ 有约束
❌ 有整数变量
❌ 明显线性(用 linprog 更好)
三、fmincon —— 有约束非线性优化(建模主力)
这是数学建模最核心的函数之一。
1️⃣ 问题类型
标准形式:
[
\min f(x)
]
[
\text{s.t.}
\begin{cases}
A x \le b
A_{eq} x = b_{eq}
c(x) \le 0
ceq(x) = 0
l \le x \le u
\end{cases}
]
👉 几乎所有实际问题都能往这个框架里塞
2️⃣ 典型建模场景
- 成本最小 + 资源限制
- 能耗最小 + 安全约束
- 参数优化 + 物理约束
- 多目标简化后的单目标
3️⃣ 示例:最简单的约束优化
数学模型
[
\min f(x,y) = x^2 + y^2
]
约束:
[
x + y \ge 1
]
MATLAB 实现
f = @(x) x(1)^2 + x(2)^2;
A = [-1 -1];
b = -1;
x0 = [0; 0];
[xmin, fval] = fmincon(f, x0, A, b);
结果解释
- 最优点在约束边界上
- 数值解体现“几何直觉”
📌 教学重点:
最优解常常出现在“约束边界”,不是内部。
4️⃣ 示例:带上下界的优化(非常常见)
[
\min x^2 + y^2
]
[
0 \le x \le 2,\quad 0 \le y \le 1
]
f = @(x) x(1)^2 + x(2)^2;
lb = [0; 0];
ub = [2; 1];
x0 = [1; 0.5];
[xmin, fval] = fmincon(f, x0, [], [], [], [], lb, ub);
5️⃣ 专职老师一定会强调的点
fmincon依赖初值- 可能是局部最优
- 约束函数写错,比算法选错更致命
四、linprog —— 线性规划(最稳、最干净)
1️⃣ 问题类型
[
\min c^T x
]
[
\text{s.t. } Ax \le b, \quad A_{eq}x = b_{eq}, \quad x \ge 0
]
📌 线性规划是最优化中“最成熟、最稳定”的一类
2️⃣ 典型建模场景
- 生产计划
- 资源分配
- 运输问题
- 投资组合(简化)
3️⃣ 示例:生产计划问题
数学模型
[
\min 3x_1 + 2x_2
]
约束:
[
\begin{cases}
x_1 + x_2 \ge 4
2x_1 + x_2 \ge 5
x_1, x_2 \ge 0
\end{cases}
]
MATLAB 实现
c = [3; 2];
A = [-1 -1;
-2 -1];
b = [-4; -5];
lb = [0; 0];
[xmin, fval] = linprog(c, A, b, [], [], lb);
4️⃣ 为什么能优先用 linprog?
| 对比 | linprog | fmincon |
|---|---|---|
| 是否全局最优 | ✅ | ❌ |
| 速度 | 快 | 较慢 |
| 稳定性 | 极高 | 依赖初值 |
| 建模难度 | 低 | 中 |
👉 能线性,就别非线性
五、三大函数的“选用指南”(必背)
| 问题特征 | 用哪个 |
|---|---|
| 无约束 + 非线性 | fminunc |
| 有约束 + 非线性 | fmincon |
| 全部线性 | linprog |
| 有整数变量 | ❌(用 intlinprog) |
六、建模中常说的“金句”
模型选对一半,
函数用对 80%,
代码写对 100%。

浙公网安备 33010602011771号