内点法(interior point method)求解二次规划,附python代码
内点法介绍这篇博文写的很好https://blog.csdn.net/dymodi/article/details/46441783,在这篇文章的基础上,本文给出障碍函数法代码和一个算例。
障碍函数内点法的主要思想是:把不等式约束放进目标函数里。以下面的问题为例
不等式约束放进目标函数,变成如下形式:
当 时,函数特别大,我们希望这个函数像下图红虚线的样子,
但那样不可导,所以我们用如下形式的函数去近似。
图中,时由下往上的的3根蓝线,对应的值是依次增大。障碍函数内点法在迭代的时候,t初值给一个小值,t逐渐增大,使可行域越来越接近红虚线。
在 t 的每一步迭代中,原问题转化为如下子问题:
求解子问题,得到一个最优解,这个是 t 下一步迭代的x初值。
子问题的求解可以用拉格朗日乘子法。
拉格朗日乘子法中,通过牛顿迭代法(Newton-Raphson method)求解。
牛顿迭代法解非线性方程组
H(f)是Hessian矩阵。
得到子问题的最优解,然后继续迭代 t
障碍函数内点法的算法步骤如下:(节选自Stephen Boyd的《Convex Optimization》)
迭代终止条件中的m就是不等式约束的个数那个m,为什么以这个条件为终止的原因,参见文章开头提到的博客,Boyd的书里也有详细的证明,是通过原问题的对偶问题证明得到的。是一个大于1的参数,使t每次迭代增大。
算例:
求解如下二次规划问题(解为 x1=0.5,x2=2.25):
转化为如下子问题:
完整python代码如下:
import numpy as np
import timedef grad_f(t, x1, x2):return np.array([[t * (2 * x1 - x2 - 1) + 3 / (6 - 3 * x1 - 2 * x2) - 1 / x1],[t * (-1 * x1 + 4 * x2 - 10) + 2 / (6 - 3 * x1 - 2 * x2) - 1 / x2]])def Hessian_f(t, x1, x2):return np.array([[2*t - 9 / pow((6-3*x1-2*x2), 2) + 1 / pow(x1, 2), -t - 6 / pow((6-3*x1-2*x2), 2)],[-t - 6 / pow((6-3*x1-2*x2), 2), 4*t - 4 / pow((6-3*x1-2*x2), 2) + 1 / pow(x2, 2)]])def NewtonRaphson(t, x1, x2):gf = grad_f(t, x1, x2)Hf = Hessian_f(t, x1, x2)Hf_inv = np.linalg.inv(Hf)deltaX = 0.1 * np.matmul(Hf_inv, gf)res = np.linalg.norm(deltaX, 2)return x1 - deltaX[0, 0], x2 - deltaX[1, 0], resif __name__ == "__main__":time_start = time.time()t = 2x1 = 1x2 = 2while True:while True:x1, x2, res = NewtonRaphson(t, x1, x2)if res < 0.0001:break# print(x1, x2, res)# print("------")if 3.0 / t < 0.0001:time_end = time.time()print('consume time:', time_end - time_start)print("t:{}, x1:{}, x2:{}".format(t, x1, x2))breakt = 2 * t
内点法(interior point method)求解二次规划,附python代码相关推荐
- 未知数数量大于方程数量,如何求解,附Python 代码
未知数如果大于方程数量,意味着限制少于自由度,方程要么无解,要么有无穷个解. 怎么办?我就要部分答案,只要满足方程限制就行? 示例如下: import sympy as sp x, y, z = sp ...
- 材料力学求解器-刚架与桁架杆系的计算机求解(附matlab代码)
材料力学求解器-刚架与桁架杆系的计算机求解(附matlab代码) 1 刚架的计算机求解 1.1位移法与刚度矩阵 1.2 matlab程序 2 桁架的计算机求解 材料力学是一门非常成熟的学科,里面有大量 ...
- XGBoost参数调优完全指南(附Python代码)
XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候,发现我的库无法解析字符串类型的特征,所以只 ...
- 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)
机器学习系列(12)_XGBoost参数调优完全指南(附Python代码) 原文链接:http://blog.csdn.net/han_xiaoyang/article/details/5266539 ...
- python重点知识归纳_一文了解机器学习知识点及其算法(附python代码)
一文了解机器学习知识点及其算法(附python代码) 来源:数据城堡 时间:2016-09-09 14:05:50 作者: 机器学习发展到现在,已经形成较为完善的知识体系,同时大量的数据科学家的研究成 ...
- 教程 | 理解和实现自然语言处理终极指南(附Python代码)
教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文 http://www.jiqizhixin.com/article ...
- 基于TextRank算法的文本摘要(附Python代码)
基于TextRank算法的文本摘要(附Python代码): https://www.jiqizhixin.com/articles/2018-12-28-18
- python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...
Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...
- python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...
原标题:推荐 :一文读懂随机森林的解释和实现(附python代码) 作者:WilliamKoehrsen:翻译:和中华:校对:李润嘉 本文约6000字,建议阅读15分钟. 本文从单棵决策树讲起,然后逐 ...
- Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)
Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...
最新文章
- hdu4267线段树段更新,点查找,55棵线段树.
- 计算机科学类书籍(转)
- python代码 程序员编程艺术 2.1
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
- 闪退没由报错_关于floor()报错注入,你真的懂了吗?
- python的动态参数
- Spark的动态资源分配ExecutorAllocationManager
- 【leetcode 简单】 第六十七题 回文链表
- c++中的enum类
- 功夫小子实践开发-Menu家族学习及开始菜单场景的实现
- cat 大众点评 mysql_大众点评-CAT监控平台
- 数据化、信息化、数字化和智能化之间联系和区别解析
- Nginx不解析PHP,无法打开PHP文件
- 线性代数学习笔记——第六讲——矩阵的转置
- 小米3手机无法打开WLAN ,WIFI 的解决方法,不需刷机
- 辽宁粮食产量438亿斤 农业供给侧结构性改革不断优化
- RaisAjax结合
- 如何批量生成矩阵25码
- 平板电脑 中柏4s pro 重装win10 系统
- SSM与Spring
热门文章
- 使用pyecharts绘制新冠肺炎疫情地图
- WPS简历模板的图标怎么修改_新媒体运营-简历模板范文,【工作经历+项目经验+自我评价】怎么写?...
- 22_多易教育之《yiee数据运营系统》用户画像-消费行为性别预测篇
- 易如意php,易如意网络验证系统1.1【开源】
- 100-网络编程——第五章流式套接字
- 易语言服务器ping,Ping网络IP地址易语言源码
- 佳能MP145/140打印机 出现错误代码“E5”怎么处理
- python编程机械_机器人Python编程与开发
- 大数据Hadoop(一):​​​​​​​Hadoop介绍
- 产品配件类目税目分类_2018商品和服务税收分类编码表