不等式约束二次规划——有效集法

  • 预备知识:有效不等式约束是等式约束
  • 总体思路
  • 如何寻找有效集
    • 1.x0∗=x0,λ≥0x_0^*=x_0,λ≥0x0∗​=x0​,λ≥0
    • 2.x0∗=x0,λj≤0x_0^*=x_0,λ_j≤0x0∗​=x0​,λj​≤0
    • 3.x0∗≠x0x_0^*≠x_0x0∗​​=x0​,x0∗x_0^*x0∗​在可行域中
    • 4.x0∗≠x0x_0^*≠x_0x0∗​​=x0​,x0∗x_0^*x0∗​不在可行域中
  • 算法框架

预备知识:有效不等式约束是等式约束

这个其实很好理解,通过以下两张图片就可以很清晰的明白这句画的意思:

黑色箭头是约束的区域,蓝色五角星是是全局最优点。对于左边的图,最优点在不等式范围之内,但是这个最优点有没有这个约束都可以求出来,所以这个约束可以看成无效的约束,也就是加不加这个约束,都可以通过无约束的全局解法求出来。相反,右边的不等式约束范围求出来的最优解在绿色点上,可以看到,这个绿色最优点在不等式约束的等式约束上,所以我们完全可以将不等式约束变成等式约束,然后将其看作等式约束QP问题进行求解。所以有效的不等书约束是等式约束。

总体思路

因为不等式中真正起作用的是等式约束,所以我们的思路是:把这些真正起作用的约束找出来,将不等号换成等号,其他的无效不等式直接抛弃掉。之后将这些人为更改出来的等式约束和原问题的等式约束放在一起,将其从不等式约束二次规划问题变成一个等式约束二次规划问题。详细的解法见:等式约束二次规划——变量消除法和KKT法
可以看到,上述思想最重要的就是寻找有效集,也即有效不等式约束到底是哪些?一般情况我们肯定不可能一下子就全部找到,所以会使用一些算法对有效集进行寻找。
下面以
x12+x22s.t.x1+x2≥1x1−x2≥−5x1≥0x2≥0x1≤2\begin{aligned} x_1^2&+x_2^2\\ s.t.  x_1&+x_2≥1\\ x_1&-x_2≥-5\\ &x_1≥0\\ &x_2≥0\\ &x_1≤2\\ \end{aligned} x12​s.t. x1​x1​​+x22​+x2​≥1−x2​≥−5x1​≥0x2​≥0x1​≤2​

为例,做一个不严格的寻找方法图解:

这里红色方框内部是可行集,黑色五角星是理论上的最优点。

如何寻找有效集

我们可以首先随便选择一个点,这个点能让不等式约束集中的一个或多个约束变成等式。在图中表示就是我们一开始可以先在红色的线上任意选择一个点作为迭代的起始点,这个起始点我们记作x0x_0x0​,有了起始点也就相当于选择了将一些不等式约束变成等式约束,那我们就可以使用KKT法对这个问题求解,这里我们将求解出来的最优点记作x0∗x_0^*x0∗​.这里总体分为两种情况,第一种是比较幸运,你选起始点正好是这个新等式QP问题的最优点,即x0∗=x0x_0^*=x_0x0∗​=x0​,

1.x0∗=x0,λ≥0x_0^*=x_0,λ≥0x0∗​=x0​,λ≥0

这种情况一般就是天选之子,拿阳寿在求解的那种,选的初始点(图中橙色的原点)正好是五角星的那个点,这样一下子就算出来了,具体来说就是只让下图的红色线变成了等式,其他的都不要了,这样进行KKT法求解之后直接就可以算出来最优解:
x12+x22s.t.x1+x2=1\begin{aligned} x_1^2&+x_2^2\\ s.t.  x_1&+x_2=1\\ \end{aligned} x12​s.t. x1​​+x22​+x2​=1​
这种情况基本遇不到,遇到了好好珍惜活着的时光。

2.x0∗=x0,λj≤0x_0^*=x_0,λ_j≤0x0∗​=x0​,λj​≤0

虽然选择的初始点是当前的最优点,但是拉格朗日乘子中有小于零的,根据拉格朗日乘子的含义,说明之前将那个约束变成等式效果会变差,那说明放宽小于零的这个约束我们会获得更好的值。这里举下图这个例子:

我们选择的点是(2,0)(2,0)(2,0),这样能变等式的不等式有两个,也就是我们要求解如下问题:
x12+x22s.t.x2=0x1=2\begin{aligned} x_1^2&+x_2^2\\ s.t.  &x_2=0\\ &x_1=2\\ \end{aligned} x12​s.t. ​+x22​x2​=0x1​=2​
因为比较简单,这里可以快速推导一下:
x12+x22+λ1(x1−2)+λ2x2\begin{aligned} x_1^2&+x_2^2+λ_1(x_1-2)+λ_2x_2 \end{aligned} x12​​+x22​+λ1​(x1​−2)+λ2​x2​​
求导的结果为:
x1=2x2=0λ1=−4λ2=0\begin{aligned} x_1 = 2\\ x_2 = 0\\ λ_1 = -4\\ λ_2 = 0 \end{aligned} x1​=2x2​=0λ1​=−4λ2​=0​
可以看到,λ1=−4<0λ_1 = -4<0λ1​=−4<0,这个时候就需要将第一个等式抛弃:

之后重新求解。

3.x0∗≠x0x_0^*≠x_0x0∗​​=x0​,x0∗x_0^*x0∗​在可行域中

第三种情况是一开始选的点不是该问题的最优点,当我们求出最优点的时候,发现这个最优点是在可行域的范围之内的,如图:

橙色1号点是选择的初始点,2号点是使用KKT计算之后的当前最优点,且在原问题的红色框之内。这个时候就可以把x0∗x_0^*x0∗​当作初始点,扩大一下有效集,之后再次进行迭代:

4.x0∗≠x0x_0^*≠x_0x0∗​​=x0​,x0∗x_0^*x0∗​不在可行域中

如果我们使用KKT法求解出来的最优点不在可行域之内:

如上图的点2,超出了原问题的红色边框。
我们的想法是让他沿着从1到2的方向不变,步长选择不超出可行域的最大步长,也就是下图中的点3:

那这个步长要如何选取呢?这其实和一维搜索的格式一样,我们设方向为d=x2−x1d=x_2-x_1d=x2​−x1​,我们希望寻求
x3=x1+αdx_3=x_1+αd x3​=x1​+αd
中的ααα。
从图中我们可以清楚的看到点2不在可行域内,就是点2(x2,y2)(x_2,y_2)(x2​,y2​)不满足上图的四个红色线。
讨论一般情况,对于不满足的约束:
aix+bi≤0a_ix+b_i≤0 ai​x+bi​≤0
将x3x_3x3​带入得到:
aiT(x1+αd)−bi≤0αaiTd≤bi−aiTx1\begin{aligned} a_i^T(x_1+αd)-b_i≤0\\ αa_i^Td≤b_i-a_i^Tx_1\\ \end{aligned} aiT​(x1​+αd)−bi​≤0αaiT​d≤bi​−aiT​x1​​
当aiTd≠0a_i^Td≠0aiT​d​=0的时候,有:
α≤bi−aiTx1aiTd\begin{aligned} α≤\frac{b_i-a_i^Tx_1}{a_i^Td}\\ \end{aligned} α≤aiT​dbi​−aiT​x1​​​
恒成立,那么就就要小于等于最小的那个:
α=minbi−aiTx1aiTd\begin{aligned} α=min  \frac{b_i-a_i^Tx_1}{a_i^Td} \\ \end{aligned} α=min aiT​dbi​−aiT​x1​​​

当理解了以上四种问题的处理情况之后,就基本理解了有效集算法。

算法框架

找到一个初始可行解x_0
取I(x_0)为x_0的有效集
k = 0
进入for循环:
step1:  求解原等式约束加有效集约束的子优化问题,获得最优解x_1,乘子为λ
step2:  if x_1=x_0:if λ≥0:x_opt = x_1breakelse:计算λ_min := min{λ_i,i∈I(x_0)}将计算出来的值重新作为初始变量x_0 = x_1将此约束从有效集中删除I(x_0) = I(x_0)\{min}goto step1
step3:  if x_1≠x_0:if x_1是QP问题的可行点:将计算出来的值重新作为初始变量x_0 = x_1更新有效集I(x_0)else:d_k := x_1-x_0计算α_k = (b_i-a_i^Tx_1}/a_i^Td   i∈I(x_0)\I(x_1)x_0 = x_0 +α_kd_k更新有效集I(x_0)goto step1

不等式约束二次规划——有效集法相关推荐

  1. 不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式

    根据支架的建模基础.几何和网格划分.单元选择.材料和截面属性.分析步设置.载荷接触和约束.收敛调整,以及后处理.参数优化等内容.接着Abaqus血管支架仿真|建模基础.Abaqus血管支架仿真|几何和 ...

  2. 用初中数学题理解SVM中不等式约束、拉格朗日乘子法、kkt条件、对偶

    先把kkt条件列出来: 注意上面照片中的a就相当于高等数学中的lambda ############################################################## ...

  3. 等式约束与不等式约束问题

    针对特殊约束条件下的优化问题,有着不同类别适应不同条件的求解算法.包括梯度法.求解线性等式约束问题的投影梯度法.适用于含有等式约束规划和含有不等式规划的拉格朗日乘子法.针对不等式约束的KKT条件法.罚 ...

  4. 数值最优化-有效集法求解含有不等式约束的二次规划问题

    参考链接:(78条消息) 有效集法介绍(Active Set Method)_dymodi的博客-CSDN博客_有效集法 唯一参考书:数值最优化(numerical optimization) 不等式 ...

  5. 不等式约束的序列二次规划(SQP)

    讲完等式约束的SQP,接下来就是不等式约束的SQP,其实两者的算法是完全没有区别的,唯一的就是因为引入了不等式约束,再推导上面就会去考虑近似KKT条件,从这个角度进行思考.解当前的问题就是解这个问题的 ...

  6. 机器学习中的数学——拉格朗日乘子法(二):不等式约束与KKT条件

    分类目录:<算法设计与分析>总目录 相关文章: ·拉格朗日乘子法(一):等式约束的拉格朗日乘子法 ·拉格朗日乘子法(二):不等式约束与KKT条件 现在接着<拉格朗日乘子法(一):等式 ...

  7. 等式与不等式约束的序列二次规划(SQP)

    最后介绍同时有等式约束和不等式约束的SQP解法.这里面的解法比之前的稍微复杂一点,用到了line search method以及BFGS下降.使用line search是为了增加搜索的鲁棒性,确保在任 ...

  8. 拉格朗日乘子法-KKT不等式约束

    文章目录 不等式约束 极小值点落在可行域内(不包含边界) 极小值点落在可行域外(包含边界) 总结 不等式约束 对于不等式约束g(x)<=0,和等式约束h(x)=0不一样,h(x)=0可以在平面上 ...

  9. 有效集法介绍(Active Set Method)

    单纯性法(Simplex Method)是"线性规划之父"George Dantzig 最著名的成果,也是求解线性规划最有力的算法之一.而这一算法在求解二次规划(Quadratic ...

最新文章

  1. Swift 值类型和引用类型的内存管理
  2. Python基础(10)--数字
  3. idea改成c盘_解决IDEA占用C盘空间过大的问题
  4. 阿加莎·克莉丝蒂与我们
  5. HTTP清晰的学习笔记
  6. AlarmManager使用注意事项
  7. 修改 JSON 对象的值
  8. 清北考前刷题day6下午好
  9. 过几天就退休了,目前情况下可不可以请同事们吃饭呢?
  10. HelloDjango 第 04 篇:Django 迁移、操作数据库
  11. linux下文件管理方式iscsi-ipsan
  12. 电子工程师私藏的一个网站
  13. sqlserver200864位下载_microsoft sql server 2008官方下载|Microsoft SQL Server 200832/64位 完整版_ - 极光下载站...
  14. 计算机pcu,pcu(veh与pcu有啥区别)
  15. python xlrd pandas_Python:Pandas pd.read_excel提供ImportError:为Excel supp安装xlrd = 0.9.0
  16. 主流浏览器有哪些?这些浏览器的内核分别是什么?
  17. java 自动转 golang_JAVA转Golang
  18. Linux内核的删除
  19. Php设计模式之【适配器模式 Adapter Pattern】
  20. MySQLStudy——Mac 下 Navicat Premium 12.1破解教程

热门文章

  1. 前端知识点总结(三)
  2. C#混音同时录制采集声卡和麦克风话筒
  3. Algorithm——常用拉式变换表
  4. 前端数据可视化ECharts使用指南——制作时间序列数据的可视化曲线
  5. windows无法访问指定设备 路径或文件(100%解决)
  6. (186)Verilog HDL:3位线性反馈移位寄存器
  7. 纽约时报stem竞赛备赛
  8. 概率语言模型 Probabilistic Language Modeling (一) --- 整体简介
  9. auto盘病毒清除器.bat
  10. java catch中抛出异常_简单了解Java编程中抛出异常的方法