1.等式约束二次规划问题

(1)

其中  且为对称矩阵,. 求解等式约束二次规划问题一般有直接消元法,正交分解法和拉格朗日法。

拉格朗日法

构建Eq.(1)的拉格朗日乘子函数,得

由KKT条件可得:

写成矩阵的形式得

系数矩阵称为Lagrange矩阵,它是对称不定的。如果Lagrange矩阵的逆存在

可得最优解为.如果存在,可得

如果Lagrange矩阵的逆不存在,可以求伪逆。

2.等式和不等式约束二次规划问题

由于带有等式约束的二次规划问题已经有成熟的解法,所以要求解带有不等式约束的二次规划问题,一种很自然的想法就是将不等式约束转换成等式约束。有效集法(Active Set Method)是求解带不等式约束的二次规划问题的一种经典算法。首先看下问题的几何表述

  • 可行域:目标问题的可行域是空间中的一个凸多面体(包括边界和内部)。例如上图中的绿色多边形区域。
  • 等值面:如果矩阵G正定,那么目标函数的等值面是空间中的一族同心超椭球面,所有椭球面相似且同向(各轴同向重合)。例如上图中的同心椭圆曲线族。越内层的椭球面,目标函数在其上的取值越优(低)。
  • 优化问题:在几何表述下,我们的目标就是在可行域内找到达到同心椭圆曲线族最内层的点。例如上图中,P是无约束最优解,Q是约束最优解。

显然加入约束之后,最优解必定出现在某个或某几个不等式约束的边界上。

  • 有效集:任给一个可行解,其有效集就是满足等号成立的约束条件的集合。显然,有效集必然包含所有等式约束,同时包含不等式约束的一个子集。注意这里是等号成立,也就是说,当前解让一个不等式约束的等号成立时,这个不等式约束才会被纳入有效集。
  • 最优有效集:最优解的有效集称为最优有效集只需把最优有效集中的约束全部改写为等式约束,并扔掉其它约束,然后用Lagrange乘子法直接求解即可。

由于约束条件数目是有限的,而最优有效集是其子集,进而最优有效集只有有限多种可能。于是很自然地就想到了下面大名鼎鼎的暴力破解法——穷举法。

每次,我们从全体约束中选出一个子集(包含全部等式约束和部分不等式约束),称之为本次尝试的工作集,并求解该工作集对应的子优化问题。一个工作集对应的子优化问题是这样定义的:在原问题中,将工作集中的约束全部改为等式约束,同时扔掉工作集之外的约束。由于这是一个等式约束问题,所以可以用Lagrange法轻松求解。之后检查该解是否是原问题的可行解(即它是否也满足工作集之外的约束)。如果是,则记录下来,否则就扔掉。遍历全部可能的子集之后,在记录下来的所有解中,选一个使目标函数值最优的即可。

穷举法虽然已经可以确保在有限步内获得目标问题的解,但其运算量常常超乎想象(尤其是控制标量和不等式约束条件个数较多时),所以我们在以下两方面寻求改进:

  • 改进最优解的识别方式:利用凸二次规划的特点,建立一组识别规则(实际上就是KKT条件),可直接判断一个可行解是否是最优解,因此算法一旦试出最优解就立即停止,不必遍历剩余可能性
  • 改进尝试各种可能性的顺序:不再随机选取下一次尝试的工作集,而是通过求解子优化问题找到能使目标函数值有效下降的新工作集和迭代点。

经过以上两项改进,就形成了效率大幅提高的有效集法。

有效集法

  1. 初始可行解:有效集法需要一个初始可行解  作为迭代的起点。由于可行解与目标函数无关,所以获得初始可行解的方法与线性规划完全一致,典型方法有两阶段法和大M法,,因此我们假设已经获得一个初始可行解 x0 ,并得到有效集为W0
  2. 迭代求解。迭代的过程主要包括两个部分,一个寻找当前有效集中的最优解,另一个是更新有效集以得到最优集。假设迭代k(k=1,2,3,...)步后,当前解为xk,工作集为wk,根据xk落在可行域上的位置,可以划分出四种情形。
  • 情形1: 若xk  满足KKT条件,则它就是最优解,算法停止。
  • 情形2:若 xk  在当前工作集(等式约束集)下已达最优,但工作集中存在至少一个约束,它原来是不等式约束,而且当 xk  朝该不等式约束的可行一侧移动时,可以使目标函数值进一步下降,那么我们令迭代点不动(即 xk+1=xk并从工作集中去掉那个约束(即将它还原放松成不等式约束)。
  • 情形3:若 xk在当前工作集(等式约束集)下还可以改进,但步长不能走满(否则会走出原始问题的可行域),那么就取 xk 延改进方向恰走到原始可行域边界处的位置为下一个迭代点 xk+1 ,同时把碰到的边界处对应的不等式约束加入工作集。情形3的例子请参见下图中x3
  • 情形4:若 xk在当前工作集(等式约束集)下还可以改进,并且步长能够走满(即改进到最优仍未出原始可行域),那么就取这个最优点作为下一个迭代点 xk+1,并保持工作集不变。情形4的例子请参见下图中 x1和 x4。

下面是使用有效集求解带不等式约束优化问题的经典例子。

G = eye(2,2)*2;
d = [-2 -5]';
A = [-1 2; 1 2; 1 -2; -1 0; 0 -1];
b = [2;6;2;0;0];
Aeq = [-1 1];
beq = [0.03];
MaxIterations = 100;
Tolerance = 1.0e-6;
x0 = [0;1]; workset0= [3;5];
x = active_set_method(x0,G,d, A, b, Aeq, beq, MaxIterations, Tolerance)
%
options = optimoptions(@quadprog,'Algorithm','active-set','MaxIterations',500);
y = quadprog(G, d, A, b, Aeq, beq, [], [], x0, options)function x = active_set_method(x0,G,d, Ai, bi, Aeq, beq, MaxIterations, Tolerance)
%min 1/2*x'Gx+d'x
%st. A*x <= b
%    Aeq*x = bne = size(Aeq,1);ni = size(Ai,1);workset = zeros(ni,1);x = x0;%给定初始解for i = 1:ni%将满足初始解的不等式都加入有效集if abs(Ai(i,:)*x0 -bi(i)) <= Toleranceworkset(i) = 1;endendfor k = 1:MaxIterations%迭代求解   a = [Aeq; Ai(workset == 1,:)];b_ = [beq; bi(workset == 1,:)];[x1, lambda]=kkt(G, d, a, b_);s = x1 - x;if norm(s,2) < Tolerance%得到的解是本次有效集中的最优解x = x1; min_lambda = 0;if length(lambda) > ne[min_lambda,index] = min(lambda(ne+1:end));endif min_lambda >= 0 %满足KKT条件,得到最优解break;else%寻找新的有效集for i=1:niif workset(i)&&sum(workset(1:i))==indexworkset(i)=0;break;endend endelse%得到的解不是本次有效集中的最优解,继续优化[alpha, index] = Alpha(workset, x, s, Ai, bi);x = x + alpha*s;if alpha <1workset(index) = 1;endendendfunction [s, lambda]=kkt(G, g, Ae, be)ws = size(Ae,1);kkt_A = [G, Ae'; Ae, zeros(ws,ws)];kkt_B = [-g;be];slambda = pinv(kkt_A)*kkt_B; %kkt_A不一定可逆,需要求伪逆dim = size(G,2);s = slambda(1:dim);lambda = slambda(dim+1:end);endfunction [alpha, index] = Alpha(workset, x, s, Ai, bi)outset = find(workset == 0);Atp = Ai(outset,:)*s;Atp_index = Atp>0;out_plus_ind = outset(Atp_index);alphatset = (bi(out_plus_ind) - Ai(out_plus_ind,:)*x)./Atp(Atp_index);[alpha, index] = min([alphatset;1]);if alpha < 1index = out_plus_ind(index);endend
end

参考:

https://zhuanlan.zhihu.com/p/29525367

https://zhuanlan.zhihu.com/p/26514613

https://blog.csdn.net/dymodi/article/details/50358278

https://zhuanlan.zhihu.com/p/50906541

二次规划--积极集法(active set method)相关推荐

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

    不等式约束二次规划--有效集法 预备知识:有效不等式约束是等式约束 总体思路 如何寻找有效集 1.x0∗=x0,λ≥0x_0^*=x_0,λ≥0x0∗​=x0​,λ≥0 2.x0∗=x0,λj≤0x_ ...

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

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

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

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

  4. active set method(激活集方法)

    在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 g_1(x)\geq 0,\ldots, g_k(x)\geq 0 约束条件定义着 ...

  5. R语言层次聚类:通过内平方和(Within Sum of Squares, WSS)选择最优的聚类K值、以内平方和(WSS)和K的关系并通过弯头法(elbow method)获得最优的聚类个数

    通过内平方和(Within Sum of Squares, WSS)选择最佳的聚类K值.以内平方和(WSS)和K的关系并通过弯头法(elbow method)获得最佳的聚类个数 目录

  6. 机器学习数据预处理之离群值/异常值:箱图法(boxplot method)

    机器学习数据预处理之离群值/异常值:箱图法(boxplot method) garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的 ...

  7. 文献记录(part84)--A nearest neighbor-based active learning method and its application to time ...

    学习笔记,仅供参考,有错必纠 A nearest neighbor-based active learning method and its application to time series cl ...

  8. 二阶偏微分方程组 龙格库塔法_有限单元法(Finite Element Method)实现声波方程模拟(Part 2)...

    2.1 前言 承接上一篇文章,前面我们已经介绍了一维声波方程有限元求解: 蓝不是蓝:有限单元法(Finite Element Method)实现声波方程模拟(Part 1)​zhuanlan.zhih ...

  9. R语言第九讲 验证集法

    目的 为了更好的熟悉分析定性变量的逻辑斯谛回归分析的应用和验证集法(评估拟合拟合模型的一种方法),用一个简单的示例来介绍一下它们在分析数据中的应用. 题目 在 Default 数据集上用income ...

  10. 同伦法(Homotopy Method)

    题目:同伦法(Homotopy Method) 学习压缩感知重构算法,经常能见到同伦法,但这里首先要特别说明的是,今天这里讨论的同伦法仅仅是一种思想,而不是一个具体的算法,类似于Majorizatio ...

最新文章

  1. Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)
  2. C++类的信息隐藏机制
  3. 通过扩展RandomAccessFile类使之具备Buffer改善I/O性能--转载
  4. 分块试水--CODEVS5037 线段树练习4加强版
  5. 0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项
  6. [转]揭开正则表达式的神秘面纱
  7. 索尼Xperia 5前置拍照斩获DxOMark得79分
  8. Chrome 将不再允许 https:// 页面加载 HTTP 资源
  9. 联想a850 android 5.0 lollipop,手机资讯导报:全新纯净款MotoX运行Android5.0Lollipop视频曝光...
  10. Centos 6.5下NIS服务安装配置
  11. 集合、哈希表、泛型集合、字典
  12. 所谓周末,就是在家好好做饭、好好睡觉、好好玩游戏
  13. matches php,PHP 正则表达式 推荐
  14. 人文社科课题中计算机知识的作用,人文社科类项目申请书模板.doc
  15. Mac读写NTFS驱动程序神器Tuxera NTFS2022
  16. vlc播放器linux编译,linux安装vlc视频播放器
  17. 图片信息用浏览器显示:data:image/png;base64,+图片内容
  18. ESP32 入门笔记06: WIFI时钟 + FreeRTOS+《两只老虎》 (ESP32 for Arduino IDE)
  19. xposed android 4.4.2,xposed新版54
  20. keras val_categorical_accuracy: 0.0000e+00问题

热门文章

  1. 【图像去雾】基于Retinex算法实现图像去雾matlab代码
  2. L298N电机驱动模块的简单介绍
  3. c语言程序设计 姜书浩,Access 数据库实践教程
  4. 关于老黄的DW2XLS一些小bug
  5. QT中widget相关控件
  6. 计算机信息技术身边的具体应用案例,2016信息技术案例分析.doc
  7. 北京理工大学大学计算机课各章节答案,北京理工大学 材料力学课本答案 第一次课(1[1]5+05学.pdf...
  8. Autojs简单脚本dex卡密破解方法
  9. 软碟通UltraISO刻录系统启动光盘使用教程
  10. 织梦dedecms蓝色培训机构模板教育学校学院整站php网站源码,织梦学校教育网 DEDECMS蓝色教育培训企业网站模板(成品整站源码)...