非线性约束的分类

说实话,非线性约束这个词,刚入行的时候听着挺唬人的。但干久了你会发现,它就是把现实世界中那些「不是直线」的关系,用数学语言描述出来而已。

我这些年做项目,碰到的非线性约束五花八门。但归纳起来,无非就四大类:多项式、三角函数、指数对数、分段线性。今天咱们就一个一个掰扯清楚。

1. 多项式约束

多项式约束是最常见的一类。说白了,就是变量之间是幂次关系。

一般形式长这样:

a₁x₁ⁿ¹ + a₂x₂ⁿ² + ... + aₖxₖⁿᵏ ≤ b

其中 n₁, n₂, ..., nₖ 是正整数。当 n=1 时就是线性,n≥2 就是非线性。

我在项目中遇到过一个典型的例子:某化工产品的产量与成本关系。产量翻倍,成本不是翻倍,而是呈二次增长。因为设备磨损、能耗增加这些因素,都是非线性的。

重点记忆:

  • 二次约束(n=2):最常见,比如面积、功率计算
  • 三次约束(n=3):体积、力矩相关场景
  • 高次约束(n≥4):一般出现在物理模型或经济模型中

我的小技巧:处理多项式约束时,我习惯先判断次数。二次的可以用SOCP(二阶锥规划)转化,高次的就得考虑分段线性化了。别一上来就上SQP(序列二次规划),那玩意儿收敛性不一定好。

2. 三角函数约束

三角函数约束,说白了就是角度、旋转、周期这些场景。

常见形式:

sin(θ) + cos(φ) ≤ 1
tan(α) ≥ 0.5

你想想看,机器人关节的角度限制、卫星的姿态控制、天线的覆盖范围……这些全是三角函数约束的天下。

我曾经踩过一个坑:做机械臂路径规划时,直接用了 sin(θ) 作为约束。结果求解器报错说非凸。后来才意识到,sin(θ) 在 [0, 2π] 上既有凸区又有凹区。嗯,这里要注意——三角函数天然是非凸的,除非你限定在单调区间。

避坑指南:

  • sin/cos 在 [0, π/2] 区间是单调的,可以近似处理
  • tan 在接近 π/2 时会爆炸,数值稳定性差
  • 我建议用泰勒展开或分段线性化来近似

3. 指数与对数约束

指数和对数约束,说白了就是增长或衰减不是线性的。

指数形式:

e^(ax) + e^(by) ≤ c

对数形式:

ln(x) + ln(y) ≥ d

这类约束在金融、通信、生物领域特别多。比如信号衰减模型、种群增长模型、复利计算……

我个人习惯是把指数约束转成对数形式来处理。为什么呢?因为对数函数是凹函数,在某些情况下可以保持凸性。举个例子:

原约束:e^(x) + e^(y) ≤ 10
等价于:ln(e^(x) + e^(y)) ≤ ln(10)

但注意,这个转化并不总是让问题变简单。有时候反而会引入更复杂的非线性。

实用建议:

  • 指数约束:优先考虑取对数,看能否变成线性
  • 对数约束:注意定义域,x 必须大于 0
  • 实在不行就用指数锥(exponential cone)建模

4. 分段线性约束

分段线性约束,说白了就是用多段直线去逼近一条曲线。

形式:

f(x) = max(a₁x + b₁, a₂x + b₂, ..., aₖx + bₖ)

或者:

f(x) = min(a₁x + b₁, a₂x + b₂, ..., aₖx + bₖ)

为什么会有分段线性?因为很多实际问题中,关系不是一条直线能描述的。比如阶梯电价、批量折扣、税率计算……

我记得有一次做供应链优化,运输成本是阶梯式的:0-100吨一个价,100-500吨另一个价,500吨以上再一个价。这就是典型的分段线性约束。

处理技巧:

  • 引入二进制变量,用大M法建模
  • 或者用SOS2(特殊有序集)约束
  • 我更喜欢SOS2,因为数值稳定性更好

知识体系总览

下面这张图,是我自己总结的分类体系。你看一眼就能记住:

非线性约束 多项式约束 幂次关系,n≥2 三角函数约束 角度、旋转、周期 指数与对数约束 增长/衰减模型 分段线性约束 多段直线逼近曲线 虚线表示:三角函数常通过分段线性化处理 二次 三次/高次 sin/cos tan/cot 指数 对数 大M法 SOS2

各类约束的对比

类型 凸性 求解难度 常见场景 我的建议
多项式 取决于次数和系数 中等 物理模型、经济模型 二次优先用SOCP
三角函数 非凸(全局) 机器人、卫星、天线 分段线性化
指数/对数 指数凸,对数凹 中等 金融、通信、生物 尝试指数锥建模
分段线性 可凸可凹 低(但变量多) 阶梯定价、批量折扣 优先用SOS2

最后提醒一句:别被「非线性」三个字吓到。实际项目中,80%的非线性约束都可以通过某种方式转化成线性或凸问题。关键是你要识别出它属于哪一类,然后对症下药。

我见过太多人一上来就上遗传算法、粒子群这些启发式方法。其实很多时候,换个角度建模,问题就简单了。

专注资料整理