最优化方法(统筹学)及其MATLAB实现-chapter1

第一章核心内容的最优化概要:


1. 什么是“最优化”问题?

最优化研究的是在满足一定约束条件下,如何寻找最优的决策方案,使得某个指标达到最大或最小。

优化模型的三要素

一个标准的最优化问题通常可以表示为:

  1. 决策变量 ():你需要控制的变量(如投资额、生产数量、坐标位置)。
  2. 目标函数 ():你想优化的指标(如成本最小、利润最大、误差最小)。
  3. 约束条件 ():你必须遵守的限制(如原材料总量、预算范围、物理定律)。

2. 最优化问题的分类

了解分类有助于你在后续章节中选择正确的算法:

  • 线性规划 (LP) vs. 非线性规划 (NLP)

  • 如果 全是线性的,就是线性规划(Simple & Efficient)。

  • 只要有一个是非线性的,就是非线性规划(复杂,可能存在局部最优)。

  • 无约束优化 vs. 有约束优化

  • 无约束优化是基础,很多有约束问题最终会转化为无约束问题来求解。

  • 连续优化 vs. 离散/整数规划

  • 变量是连续取值还是只能取整数。


3. 局部最优与全局最优

这是第一章中最核心的概念之一,决定了算法的成败:

  • 局部极小点 (Local Minimum):在它周围的一小圈范围内,它是最小的。
  • 全局极小点 (Global Minimum):在整个可行域内,它是最小的。

注意: 大多数传统算法(如梯度下降法)只能找到局部极小点。只有当函数是凸函数时,局部极小点才一定是全局极小点。


4. 算法的基本结构

几乎所有的数值优化算法都遵循一个通用的迭代框架

  1. **给出初始点 **:猜一个可能的答案。
  2. **确定搜索方向 **:往哪边走能让函数值下降?(比如沿着梯度的反方向)。
  3. **确定步长 **:往这个方向走多远?(通过一维搜索确定)。
  4. 更新点:。
  5. 检查停止准则:如果改变量足够小或梯度接近 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%。


posted @ 2026-01-29 06:59  kkman2000  阅读(32)  评论(0)    收藏  举报