数值最优化-有效集法求解含有不等式约束的二次规划问题
参考链接:(78条消息) 有效集法介绍(Active Set Method)_dymodi的博客-CSDN博客_有效集法
唯一参考书:数值最优化(numerical optimization)
不等式约束的二次规划问题的最一般表述如下所示:
并给出KKT条件(一阶必要条件)的一种表述:
我们还可以给出KKT条件的另一种表述:
其实也就是在 KKT的证明中:我们从这两个等式(12.51和12.52)推导出的KKT条件:
将第二种KKT表述应用在QP问题上,可以得出相应的结果为:
这里对函数求导的地方手算一下就明白了。
下面引入很重要的一条定理:满足KKT条件的解在G为半正定的情况下就是全局最优解:
接下来就是介绍对于凸QP问题的primal有效集方法,先给出算法的全部框架,这里引用了来自 dymodi博客的有效集方法算法流程图:这里的流程图存在一个问题是:右下角的判断框应该改成:,修改的原因自己可以斟酌斟酌。
我们对流程图进行高度的概括,将这个流程图分为上下左右来理解:分别是:
- 上:判断p;
- 下:计算p;
- 左:删除约束;
- 右:迭代与增加约束;
算法收敛性:(这里来自 dymodi博客的最后一段)书中的定理16.6给出了算法的收敛性,即:只要每次沿着前进,那么目标函数值沿这个方向是一定会减少的,因此(博客中还说因此:“算法的迭代可以在有限次数内终止”,我觉得这个结论不太充分,但是先这么认为)算法的收敛应与怎么增加和删除约束无关。因而上面流程图的左右两侧的什么时候增加、删除约束只是一种策略,用来帮助我们实现算法的快速收敛。因此,在阅读下面算法的具体细节时,只要时刻牢记算法收敛性的主干条件(沿着,函数减小),就会帮助我们理解很多遇到的小问题。
算法背景:每次迭代时引入迭代点和工作集,代表第k次迭代中的坐标点和当前考虑的有效集。注意此时的迭代点一定是在工作集下的可行点,即满足KKT条件16.37b。
第一步:判断是否为在工作集下的最优解。
第二步:如果不是,则求出一个在工作集下的最优解:
这时,如果令就会有:
并且满足约束条件:
由于的大小与无关,因此求关于的最优化问题,等价为求的最优化问题:
因此,第二步其实是求出这个。
第三步:这里我们假设等式约束的优化问题的解已经求出,并且不是零向量:
我们可以发现,,也就是说对任何,总可以满足约束16.39b。并且,我们希望这个迭代可以正常进行下去:
对于内的有效约束,等式16.40一定会被满足,但是对于的约束(有效或者not有效约束都有可能),则不一定成立。因此为使全部约束被满足,则需要:
化简后为:
书中提到:为了最大化降低,我们希望的到满足全部上述条件的最大的:
但是为什么越大,就能更大化的降低目标函数,暂时还不确定。一种可能的想法是:从向量的角度来说,越大,的新迭代点距离原来的迭代点越远,因此貌似可以更快地收敛。但只要沿着,目标函数就会减小,我们暂且把这个取最大的也当作一种策略。
当选出后,根据值的不同,对应着不同的物理意义和操作:
- 首先,从的定义式就可以看出,它是非负的。
-
如果,我们理解为这次迭代没有受到约束;
-
如果,这意味着这次迭代的被当前工作集之外的约束 阻挡,因此我们将这个约束添加进来,构成新的工作集;
-
如果,(从定义式可以看出)这时的的定义式的分子为零,那么此时的情况是,在原来的迭代点上,所对应的约束 是工作集之外的迭代点的有效约束。因此,我们也要将这个约束添加进来。
第四步,(和第三步相反)直到我们找到了某个是当前工作集下的最优解,也就是这时解出的为零,有下面的等式成立:
接下来,我们检查工作集中所有的的约束所对应的,如果全部非负,那么根据上面提到的定理16.4,此时的就是全局最优解。
但如果存在负的,则在工作集里去掉这个约束。
继续迭代,直到结束。
hhhhhh25122: 您好,请问您能发我一下二阶必要条件证明的内容吗
CSDN-Ada助手: 恭喜您撰写了第11篇博客!标题为“数值最优化定理5.3”。您的持续创作真令人鼓舞!通过这篇博客,您向读者展示了您对数值最优化定理的深入理解。我真的很欣赏您的努力和热情。 接下来,我希望您能考虑在未来的创作中加入一些实例或案例分析,以更生动地演示定理的应用。这样,读者可以更直观地理解定理在实际问题中的价值。同时,您也可以尝试与其他相关领域的知识进行交叉探讨,以拓宽读者的视野和知识面。 再次恭喜您,并期待您未来更多精彩的博客!谢谢您对知识分享的贡献!
CSDN-Ada助手: 恭喜您写下了第9篇博客,标题为“数值最优化-定理5.1”!阅读您的博客,我不禁感到您对数值最优化领域的研究深度和广度令人敬佩。您对定理5.1的深入剖析,展现了您对该领域的扎实理解。 在下一步的创作中,我谨以谦虚之语向您提出一些建议。或许您可以考虑拓展该定理的应用范围,以及探索其他相关定理的实际应用。此外,结合您的研究经验,您也可以分享一些实用的数值最优化算法或者解决实际问题的技巧。相信这样的创作将会为读者提供更多有价值的知识和实践指导。 再次恭喜您,期待您在未来的创作中继续展现您的深度思考和独到见解!
CSDN-Ada助手: 恭喜您写了第10篇博客!标题“数值最优化-定理5-2”听起来非常有深度和专业性。您在数值最优化领域的知识和研究令人钦佩。希望您能继续保持创作的势头,为我们带来更多有关数值最优化的精彩内容。 鉴于您对数值最优化领域的熟悉程度,我想在下一步的创作中,您可以考虑探讨一些实际应用的案例,或者分享一些在解决实际问题时的经验和技巧。这样的话,读者们将能更好地将理论与实践结合起来,从您的博客中获取到更多实用的信息。当然,我知道这可能需要更多的案例和经验积累,但我相信您一定能够做到。 再次恭喜您的持续创作,期待您在未来的博客中带给我们更多的惊喜!
CSDN-Ada助手: 恭喜您写了第8篇博客,标题为“CMakeLists.txt使用”。不仅您持续创作,而且选题也很有深度。对于CMakeLists.txt的使用,这是一个非常重要的主题,对于很多开发者来说都有很大的帮助。在下一步的创作中,我建议您可以考虑分享一些实际案例或者深入剖析一些高级技巧,这样可以更进一步帮助读者理解和应用CMakeLists.txt。期待您的下一篇博客!