有效集法(Active Set)

单纯性法(Simplex Method)是“线性规划之父”George Dantzig 最著名的成果,也是求解线性规划最有力的算法之一。而这一算法在求解二次规划(Quadratic Programming, QP)时的升级版就是有效集法(Active Set Method, ASM)。这两种算法的特点都是迭代点会循着约束边界前进,直到达到问题的最优点。

我们首先来讲一下约束部分:

假设

(就是这个向量一共有d个标量组成),则

的几何意象就是d维空间中的 d-1 维曲面,如果函数

是线性的,

则是个 d-1 维的超平面(这是平面中的直线、空间中的平面之推广(n大于3才被称为“超”平面))。那么有约束优化问题就要求在这个 d-1 维的曲面或者超平面上找到能使得目标函数最小的点,这个 d-1 维的曲面就是“可行解区域”。

对于不等式约束条件,

可行解区域从 d-1 维曲面扩展成为 d 维空间的一个子集。我们可以从 d=2 的二维空间进行对比理解。等式约束对应的可行解空间就是一条线;不等式约束对应的则是这条线以及线的某一侧对应的区域。

要说有效集法,首先要说说什么是有效集。有效集就是指那些在最优点有效(active)的不等式约束所组成的集合。

案例一:考虑二次函数:

函数的等高线及两个约束的图像如下(竖着的蓝色虚线为X=0;横着的红色虚线为Y=-1):

目标函数等高线即等值线,在同一条等值线上的点对应的目标函数值相同

通过计算或者从图上可以看出:

1. 当没有约束时,目标函数的最小值在(−1,−0.5) 处取得。

2. 当考虑上述的两条约束时,目标函数的最小值在 (0,−0.5)处取得。这个时候在最优点处,约束 x≥0中的等号被激活,这条约束就被称为有效约束(active constraint)。如果我们记两条约束的编号为 1 和 2,那么在最优点处的有效集就可以记为:

而如果原命题中 y≥−1 这条约束改为 y≥−0.5,即要求解的优化命题变为:

函数的等高线及两个约束的图像如下(竖着的蓝色虚线为X=0;横着的红色虚线为Y=-0.5):

此时优化命题的解仍然是 (0,−0.5) ,但在最优点处两条约束均被激活,即此时的有效集可以记为:

从上面可以看出,如果我们能提前知道在最优点处有效的约束,那我们就可以把那些未有效的不等式约束剔除掉并把原命题转化成更易求解的等式约束命题。

案例二:

目标函数及约束:

结果分析:

1. 如果没有任何约束条件,最优解在坐标原点(0, 0)处(青色X);

2. 如果只有不等式约束条件 ,最优解在坐标(1,0)处(红色X);

3. 如果只有等式约束条件 ,在坐标(1,-1)处(绿色+);

4. 如果两个约束条件都有,最优解在黄色处。

结合案例一,我们在求解之前我们往往对最优点处的有效约束知之甚少。因此如何找到最优点处的有效约束也就是有效集法的主要工作。另外在这里要提一点,其实在一些应用中,我们需要求解一系列类似的 QP 命题,这个时候我们往往对最优点处的有效约束有一个初始猜测,因此通过这种方式可以实现算法的热启动(Warm Start),从而加速算法的收敛

ASM 算法的迭代点都是在可行域内或者可行域的边界上移动,这样的好处是即使你提前终止迭代,那么算法得到的也是一个可行解。而这样的缺点则是在算法启动是需要我们给定一个可行的初始点,而求解这样一个可行的初始点往往也不是一件简单的事情。而初始的工作集往往可以取为空集。

序列二次规划(SQP)

序列二次规划(Sequential Quadratic Programming)对于非线性约束最优化问题是一个非常有效的算法,将原始问题划分为一系列二次规划的子问题进行求解。

我们介绍的SQP都属于激活集算法,有两种类型的激活集SQP算法,第一类是IQP,将原始问题转换为一系列不等式约束二次规划;第二类是EQP,将原始问题转换为一系列等式约束二次规划问题。

大部分的SQP问题分为两个步骤进行求解,第一步通过局部方法寻找有效集;第二步是通过LineSearch或者TR进行最优化。

IPQ 和 EPQ
IPQ:顾名思义将原始问题转换为一系列带有不等式约束的二次规划问题,该方法在实际中效果非常好,问题是对于一般的二次规划问题求解复杂度较高,虽然可以将该次的最优解作为下一次子问题的初始解,仍然存在热启动问题。
EPQ:每次只考虑激活集,即等式约束。相对于IPQ每个子问题相对比较容易求解。

内点法(Interior-Point)

内点法和SQP方法类似对于求解大规模非线性约束非常有效。
内点法可以从对偶问题中获取关键思路,可以结合线搜索和信赖域方法进行求解。

点击下方卡片,加入会员全年无限制学习后台(MPC各矩阵的底层逻辑、MPC纵向控制、模型验证、MPC自适应巡航控制、非线性系统如何线性化及MPC动力学跟踪任何轨迹、约束添加及新求解器的求解、轨迹规划、纵向规划等80个系列)会员专享爆品课程及资源,同时获得分佣资格,可赚回自己的学费!

有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法相关推荐

  1. matlab写的单纯形法二阶段法 大m法,线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(二)...

    在线性规划中的单纯形法与内点法(原理.步骤以及matlab实现)(一)中,我们讨论了单纯形法的原理和普通单纯形法的应用,本文接着讨论大M法.两阶段法和对偶单纯形法 2.2 Big M Method ( ...

  2. 内点法最优潮流matlab程序

    内点法最优潮流matlab程序 一.概述最优潮流问题 1.最优潮流和基本潮流的比较潮流计算可以归结为针对一定的扰动变量p(负荷情况),根据给定的控制变量u(如发电机的有功出力.无功出力或节点电压模值等 ...

  3. python 倒叙 数组_Python函数合集:68个内置函数请收好!

    内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # abs() di ...

  4. Python函数合集:68个内置函数请收好!

    内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到python版本3.6.2 python一共提供了68个内置函数. 很多人学习python,不知道从何学起 ...

  5. 非线性规划求解_突破 | 杉数求解器COPT首发求解内点法

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』转载 作者:杉数科技 北京2020年10月26日,杉数优化求解器COPT公布国内首个线性规划内点法,这是国内运筹学的又一大突破.其性能与单纯形.大规 ...

  6. 惩罚函数内点法c语言,分享:惩罚函数法(内点法、外点法)求解约束优化问题最优值...

    方法一:外点牛顿法: clc m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);%a b为最优点坐标,f0为最优点函数值,f1 f2最优 ...

  7. 外点法、内点法解约束问题matlab

    外点法 clc m=zeros(1,50); a=zeros(1,50); b=zeros(1,50);%最优点坐标 f0=zeros(1,50);%最优点函数值 syms d x1 x2 e; m( ...

  8. C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

    C++内点法求解大规模线性规划问题--对标MATLAB中linprog函数 文章目录 C++内点法求解大规模线性规划问题--对标MATLAB中linprog函数 1. 项目场景 2. 约束的规范化 3 ...

  9. matlab重叠保留法,【matlab实现】重叠相加法与重叠保留法

    两个有限长的序列,当一个序列的长度远大于另外一个序列的时候,如果仍采用常规的处理方法,效率会很低,所以引入了重叠相加法和重叠保留法.下面我们就利用MATLAB来实现这两种方法. 在下面的代码中,我使用 ...

  10. R语言使用seq函数生成数据序列、seq函数在指定范围内生成固定长度的序列、指定数据序列的第一个数值、最后一个数值以及另外一个数据序列(along.with)

    R语言使用seq函数生成数据序列.seq函数在指定范围内生成固定长度的序列.指定数据序列的第一个数值.最后一个数值以及另外一个数据序列(along.with) 目录

最新文章

  1. Day1-dns Extension
  2. Scrapy学习大全
  3. 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
  4. android生命周期_Android开发 View的生命周期结合代码详解
  5. git 忽略文件提交的几种姿势
  6. PAT甲题题解-1070. Mooncake (25)-排序,大水题
  7. Calendar(显示日期)
  8. Failed to decrypt protected XML node DTS:Property with error 0x8009000B 错误的解决
  9. 2021全国大学生数学建模 C题 解题思路和细节展示
  10. Mysql数据库详解
  11. CodeCanyon上的20种最佳WordPress登录表单
  12. 图解电动汽车:电动汽车充电接口
  13. css3 svg 背景图 data:image/svg+xml;base64
  14. python3 + Scrapy爬虫学习之创建项目
  15. set transaction
  16. GPGPU基础(二):GPGPU需要用到的OpenGL概念
  17. fiddler监控手机端https请求显示tunnel to ......443
  18. Vercel和Railway都是云端的平台即服务提供商
  19. 连接型CRM助力医疗企业把“成本中心”变成“利润中心”
  20. 2022年道路运输企业主要负责人特种作业证考试题库及在线模拟考试

热门文章

  1. 《Go语言圣经》阅读笔记:第二章程序结构
  2. web前端设计与开发,css段落首行缩进2字符怎么设置
  3. 直播APP源码网络基础部分处理:
  4. python 执行cmd命令 改变目录_Python 改变当前工作目录
  5. linux系统下查看本机所在局域网中所有设备IP
  6. js 页面跳转并传参
  7. linux rpm解压命令,LINUX下各种解压命令收藏
  8. CrossMap基因坐标转换:hg38和hg37互换
  9. java5 64_java8 64位(官方免费版下载2020)
  10. 二哥杂货铺matlab安装步骤,Matlab2017a软件安装教程