【线性化】绝对值项的线性化

今天优化里面又碰到绝对值了。无论是目标函数里头的绝对值还是约束条件里头的绝对值,处理起来都一样:把绝对值项换成非绝对值项(好像有点废话)。

假设有绝对值项如下,其中 R j      j ∈ S L {R_j}{\rm{ }} \ \ \ \ j \in {S_L} Rj    jSL 是自变量。

O s = 1 N ∑ j ∈ S L ∣ R j − ∑ j ∈ S L R j N ∣ {O_s} = {1 \over N}\sum\limits_{j \in {S_L}} {\left| {{R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N}} \right|} Os=N1jSLRjNjSLRj

O s {O_s} Os可用如下四个式子进行替换:
O s = 1 N ∑ j ∈ S L U j {O_s} = {1 \over N}\sum\limits_{j \in {S_L}} {{U_j}} Os=N1jSLUj

R j − ∑ j ∈ S L R j N ≤ U j ≤ R j − ∑ j ∈ S L R j N + M δ j (1) {R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} \le {U_j} \le {R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} + M{\delta _j} \tag{1} RjNjSLRjUjRjNjSLRj+Mδj(1)

∑ j ∈ S L R j N − R j ≤ U j ≤ ∑ j ∈ S L R j N − R j + M ε j (2) {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} - {R_j} \le {U_j} \le {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} - {R_j} + M{\varepsilon _j} \tag{2} NjSLRjRjUjNjSLRjRj+Mεj(2)

δ j + ε j = 1 (3) {\delta _j} + {\varepsilon _j} = 1 \tag{3} δj+εj=1(3)

式中: M M M为一个极大数, δ j {\delta _j} δj ε j {\varepsilon _j} εj 均为0-1变量。

观察一下,其实就是用 U j {U_j} Uj 替换了 ∣ R j − ∑ j ∈ S L R j N ∣ \left| {{R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N}} \right| RjNjSLRj

下面稍加分析。

首先明确一点:绝对值 ∣ m − n ∣ \left| {m - n} \right| mn 其实就是取 m − n m-n mn n − m n-m nm 二者中的较大值。

看式(1)和式(2)的左半边,已经确保了 U j {U_j} Uj大于等于 R j − ∑ j ∈ S L R j N {R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} RjNjSLRj ∑ j ∈ S L R j N − R j {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} - {R_j} NjSLRjRj中的较大值。下面再需要让这个大于等于能够取等。这就是式(1)和式(2)的右半边的作用。

由于有0-1变量和大M的作用,再加上左半边已经确保 U j {U_j} Uj 能大于较大值,右半边的最终效果则是 U j {U_j} Uj小于等于二者中 R j − ∑ j ∈ S L R j N {R_j} - {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} RjNjSLRj ∑ j ∈ S L R j N − R j {{\sum\limits_{j \in {S_L}} {{R_j}} } \over N} - {R_j} NjSLRjRj中的较大值。

此处 δ j + ε j = 1 {\delta _j} + {\varepsilon _j} = 1 δj+εj=1的作用就是确保式(1)和式(2)右半边两个式子只有一个能起作用,也就是0-1变量取0的那个式子,取1的那个式子由于大M的存在会被松弛,因为等价于小于等于一个极大数。

大于等于较大值,小于等于较大值,综合效果就是等于较大值。

总结

由于上述线性化是直接把绝对值项用非绝对值项+一些不含绝对值的约束替换掉,所以无论绝对值项出现在目标函数中还是约束条件中都是可以顺利操作的。

但是如果约束条件是 ∣ x − m ∣ ≤ n \left| {x - m} \right| \le n xmn 这种,直接把绝对值拆开就可以了,但如果是 ∑ i = 1 N ∣ x i − m ∣ ≤ n \sum\limits_{i = 1}^N {\left| {{x_i} - m} \right|} \le n i=1Nximn 这种稍微不那么一般的形式,貌似就只能通过上述这种稍微繁琐一些的操作来进行线性化了。

另外这种线性化的操作应该不是唯一的,上面给出的只是我自己看到的并且觉得比较好理解的一种。

参考文献

孙田, 邹鹏, 杨知方, 等. 动态无功优化的多阶段求解方法[J]. 电网技术, 2016, 40(06): 1804–1810.

在Python中解决非线性规划问题时,若涉及绝对值函数,则需要对其进行适当的数学转换以适配优化算法的要求。由于大多数优化库(如`scipy.optimize`)更倾向于处理平滑、连续可导的目标函数和约束条件,因此我们需要将含有绝对值的问题转化为等价的标准形式。 ### 绝对值转换的基本思路 假设我们有一个简单的带绝对值的目标函数: \[ f(x) = |g(x)| \] 为了消除绝对值的影响并保持目标函数的形式不变,我们可以引入辅助变量 \( z_i \),将其视为每个单独的绝对值: #### 示例转化过程 给定目标是最小化下面这个含绝对值表达式的情况: \[ \min Z = |x_1 - a| + |x_2 - b| \] **步骤一:引入新变量** 设新的决策变量\( t_1, t_2 \geq 0\) 来表示各个绝对值部分,并添加相应的限制条件: \[ t_1 \geq x_1 - a,\quad t_1 \geq -(x_1-a) \] \[ t_2 \geq x_2 - b,\quad t_2 \geq -(x_2-b) \] 于是原问题变为无直接“绝对值”的标准形式: \[ \min (Z)= t_1+t_2 \] s.t. \[ \begin{cases} t_1 \geq x_1 -a\\ t_1 \geq a-x_1 \\ t_2 \geq x_2 -b \\ t_2 \geq b-x_2 \end{cases} \] 通过上述变换后即可利用支持一般约束优化求解器完成计算了! --- ### 使用`SciPy`示例代码 ```python from scipy.optimize import minimize import numpy as np # 定义目标函数以及对应的约束条件 def objective(vars): # vars 包括 [x1,x2,t1,t2], 其实真正需要优化的是前两者。 return vars[2] + vars[3] def constraint1(vars):return vars[2]-vars[0]+5 # 对应于第一个绝对值相关的不等式组的第一条:t >= x+a def constraint2(vars):return vars[2]+vars[0]-5 # 第二条 : t>=-(x+a) def constraint3(vars):return vars[3]-vars[1]+7 # 类似定义第二个绝对值约束... def constraint4(vars):return vars[3]+vars[1]-7 constraints=[{'type': 'ineq', 'fun':constraint1}, {'type': 'ineq', 'fun':constraint2}, {'type': 'ineq', 'fun':constraint3}, {'type': 'ineq', 'fun':constraint4}] initial_guess=np.array([0.,0.,abs(-5), abs(7)]) result=minimize(objective, initial_guess, method='SLSQP', constraints=constraints) print("结果:", result.x[:2]) # 只关心原始变量[x1,x2]的结果。 ``` 此段程序演示了一个最简单版本下如何借助额外松弛变量来绕过绝对值运算符操作的例子。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值