使用Python求解带约束的最优化问题详解


Posted in Python onFebruary 11, 2020

题目:

使用Python求解带约束的最优化问题详解

1. 利用拉格朗日乘子法

#导入sympy包,用于求导,方程组求解等等
from sympy import * 
 
#设置变量
x1 = symbols("x1")
x2 = symbols("x2")
alpha = symbols("alpha")
beta = symbols("beta")
 
#构造拉格朗日等式
L = 10 - x1*x1 - x2*x2 + alpha * (x1*x1 - x2) + beta * (x1 + x2)
 
#求导,构造KKT条件
difyL_x1 = diff(L, x1) #对变量x1求导
difyL_x2 = diff(L, x2) #对变量x2求导
difyL_beta = diff(L, beta) #对乘子beta求导
dualCpt = alpha * (x1 * x1 - x2) #对偶互补条件
 
#求解KKT等式
aa = solve([difyL_x1, difyL_x2, difyL_beta, dualCpt], [x1, x2, alpha, beta])
 
#打印结果,还需验证alpha>=0和不等式约束<=0
for i in aa:
 if i[2] >= 0:
 if (i[0]**2 - i[1]) <= 0:
  print(i)

结果:

(-1, 1, 4, 6)
(0, 0, 0, 0)

2. scipy包里面的minimize函数求解

from scipy.optimize import minimize
import numpy as np 
 
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt 
 
#目标函数:
def func(args):
 fun = lambda x: 10 - x[0]**2 - x[1]**2
 return fun
 
#约束条件,包括等式约束和不等式约束
def con(args):
 cons = ({'type': 'ineq', 'fun': lambda x: x[1]-x[0]**2},
  {'type': 'eq', 'fun': lambda x: x[0]+x[1]})
 return cons 
 
#画三维模式图
def draw3D():
 fig = plt.figure()
 ax = Axes3D(fig)
 x_arange = np.arange(-5.0, 5.0)
 y_arange = np.arange(-5.0, 5.0)
 X, Y = np.meshgrid(x_arange, y_arange)
 Z1 = 10 - X**2 - Y**2
 Z2 = Y - X**2
 Z3 = X + Y
 plt.xlabel('x')
 plt.ylabel('y')
 ax.plot_surface(X, Y, Z1, rstride=1, cstride=1, cmap='rainbow')
 ax.plot_surface(X, Y, Z2, rstride=1, cstride=1, cmap='rainbow')
 ax.plot_surface(X, Y, Z3, rstride=1, cstride=1, cmap='rainbow')
 plt.show()
 
#画等高线图
def drawContour():
 x_arange = np.linspace(-3.0, 4.0, 256)
 y_arange = np.linspace(-3.0, 4.0, 256)
 X, Y = np.meshgrid(x_arange, y_arange)
 Z1 = 10 - X**2 - Y**2
 Z2 = Y - X**2
 Z3 = X + Y
 plt.xlabel('x')
 plt.ylabel('y')
 plt.contourf(X, Y, Z1, 8, alpha=0.75, cmap='rainbow')
 plt.contourf(X, Y, Z2, 8, alpha=0.75, cmap='rainbow')
 plt.contourf(X, Y, Z3, 8, alpha=0.75, cmap='rainbow')
 C1 = plt.contour(X, Y, Z1, 8, colors='black')
 C2 = plt.contour(X, Y, Z2, 8, colors='blue')
 C3 = plt.contour(X, Y, Z3, 8, colors='red')
 plt.clabel(C1, inline=1, fontsize=10)
 plt.clabel(C2, inline=1, fontsize=10)
 plt.clabel(C3, inline=1, fontsize=10)
 plt.show()
 
 
if __name__ == "__main__":
 args = ()
 args1 = ()
 cons = con(args1)
 x0 = np.array((1.0, 2.0)) #设置初始值,初始值的设置很重要,很容易收敛到另外的极值点中,建议多试几个值
 
 #求解#
 res = minimize(func(args), x0, method='SLSQP', constraints=cons)
 #####
 print(res.fun)
 print(res.success)
 print(res.x)
 
 # draw3D()
 drawContour()

结果:

7.99999990708696
True
[-1.00000002 1.00000002]

使用Python求解带约束的最优化问题详解

以上这篇使用Python求解带约束的最优化问题详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python BeautifulSoup使用方法详解
Nov 21 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python中datetime常用时间处理方法
Jun 15 Python
python 全文检索引擎详解
Apr 25 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python使用matplotlib绘制雷达图
Oct 18 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 #Python
使用遗传算法求二元函数的最小值
Feb 11 #Python
Python for循环搭配else常见问题解决
Feb 11 #Python
Python获取二维数组的行列数的2种方法
Feb 11 #Python
使用Puppeteer爬取微信文章的实现
Feb 11 #Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 #Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 #Python
You might like
MYSQL环境变量设置方法
2007/01/15 PHP
写出高质量的PHP程序
2012/02/04 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python 多线程的实例详解
2017/09/07 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python求质数的3种方法
2018/09/28 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
医学生自荐信
2013/12/03 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
师范学院教师自荐书
2014/01/31 职场文书
网站创业计划书
2014/04/30 职场文书
2014年师德承诺书
2014/05/23 职场文书
云冈石窟导游词
2015/02/04 职场文书
工作后的感想
2015/08/07 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android