两个正变量取min的非线性约束线性化(NLP场景求解困惑)
在非线性规划中处理min(A,B)约束的方案
已知A、B始终为正,以下是无需二进制变量的精确处理方式,不用依赖近似方法:
1. 约束转化法(最常用)
如果是要让min(A,B)满足某个约束(比如min(A,B) ≥ C),直接拆成两个线性约束即可:
- A ≥ C
- B ≥ C
如果是目标函数包含min(A,B)(比如要最大化/minimize min(A,B)),可以引入新变量t,添加以下约束:
- t ≤ A
- t ≤ B
- t ≥ 0
之后将目标函数替换为对t的优化。这种方式完全精确,且约束都是线性的,NLP求解器可以直接处理。
2. 精确光滑函数表达
如果必须将min(A,B)写成单一非线性表达式(比如嵌入复杂方程),可以用以下完全精确的形式:min(A,B) = (A + B - |A - B|)/2
大部分NLP求解器支持绝对值这类分段光滑函数。如果求解器不支持绝对值,可替换为平方开根号的形式:min(A,B) = (A + B - sqrt((A - B)^2))/2
该表达式无任何近似误差,因为sqrt((A-B)^2)等价于|A-B|,对正实数A、B完全适用。
3. 放弃不必要的近似
你之前尝试的带误差项的近似方法完全没必要,上述两种方法都能精确实现min(A,B)的逻辑,不会引入精度损失。
内容的提问来源于stack exchange,提问作者Rogério Rocha
相关产品推荐
相关产品推荐

