【Scipy优化使用教程】三、全局优化
参考官网:Scipy.
全局优化
- eggholder函数
- 使用全局优化
- 全部代码
全局优化的目的是在可能存在许多局部最小值的情况下,在给定的范围内找到一个函数的全局最小值。通常情况下,全局优化器会有效地搜索参数空间,同时也会使用局部优化器(如最小化)。SciPy包含了许多优秀的全局优化器。在这里,我们将在同一目标函数上使用这些优化器,即 eggholder
函数。
eggholder函数
def eggholder(x):return (-(x[1] + 47) * np.sin(np.sqrt(abs(x[0]/2 + (x[1] + 47))))-x[0] * np.sin(np.sqrt(abs(x[0] - (x[1] + 47)))))bounds = [(-512, 512), (-512, 512)]
查看其形状:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dx = np.arange(-512, 513)
y = np.arange(-512, 513)
xgrid, ygrid = np.meshgrid(x, y)
xy = np.stack([xgrid, ygrid])fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(45, -45)
ax.plot_surface(xgrid, ygrid, eggholder(xy), cmap='terrain')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('eggholder(x, y)')
plt.show()
使用全局优化
我们现在使用全局优化器来获得最小值和最小值的函数值。我们将把结果存储在一个字典里,这样我们以后就可以比较不同的优化结果。
from scipy import optimize
results = dict()
results['shgo'] = optimize.shgo(eggholder, bounds)
print(results['shgo'])
其结果为:
fun: -935.3379515604948funl: array([-935.33795156])message: 'Optimization terminated successfully.'nfev: 47nit: 2nlfev: 42nlhev: 0nljev: 10success: Truex: array([439.48097554, 453.97741501])xl: array([[439.48097554, 453.97741501]])
另一种优化器:
results['DA'] = optimize.dual_annealing(eggholder, bounds)
print(results['DA'])
结果为:
fun: -959.6406627208503message: ['Maximum number of iteration reached']nfev: 4079nhev: 0nit: 1000njev: 26status: 0success: Truex: array([512. , 404.23180442])
所有的优化器都会返回一个OptimizeResult
,除了解决方案之外,它还包含了函数评估的数量、优化是否成功等信息。
还有一种优化器为:
results['DE'] = optimize.differential_evolution(eggholder, bounds)
print(results['DE'])
其结果为:
fun: -894.578900390448jac: array([1.13686748e-05, 1.13686748e-05])message: 'Optimization terminated successfully.'nfev: 588nit: 18success: Truex: array([-465.69411618, 385.71669541])
另外shgo
有第二个方法,它返回所有的局部最小值,而不是只返回它认为是全局最小值的值。
results['shgo_sobol'] = optimize.shgo(eggholder, bounds, n=200, iters=5,sampling_method='sobol')
全部代码
import numpy as np
def eggholder(x):return (-(x[1] + 47) * np.sin(np.sqrt(abs(x[0]/2 + (x[1] + 47))))-x[0] * np.sin(np.sqrt(abs(x[0] - (x[1] + 47)))))bounds = [(-512, 512), (-512, 512)]from scipy import optimize
results = dict()
#results['shgo'] = optimize.shgo(eggholder, bounds)
#print(results['shgo'])
#results['DA'] = optimize.dual_annealing(eggholder, bounds)
#print(results['DA'])
#results['DE'] = optimize.differential_evolution(eggholder, bounds)
#print(results['DE'])
results['shgo_sobol'] = optimize.shgo(eggholder, bounds, n=200, iters=5,sampling_method='sobol')
print(results['shgo_sobol'])
【Scipy优化使用教程】三、全局优化相关推荐
- 树莓派4B系列教程三 :优化配置
树莓派4B系列教程三 :优化配置 写在前面 树莓派4B内存增加 CPU温度控制 显存优化 Chromuim缓存转移 优化自启程序 Chromium插件安装 离线安装插件时遇到的问题 结语 写在前面 不 ...
- MongoDB 教程三: 高级查询
视频:MongoDB 教程三: 高级查询 MongoDB支持的查询语言非常强大,语法规则类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能,并且由于 MongoDB可以支持复杂的数 ...
- 区块链教程(三):Solidity编程基础
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
- 抖音SEO优化详教程
抖音SEO-初级教程 抖音SEO优化详教程 ①完播率:视频从头到尾播放完毕 ②点赞量.评论量.转发量.复播率:双击点赞.对视频进行评论.转发该视频.再次播放视频 ③标题.话题.定位:上线视频时内容标题 ...
- 零基础学前端之SEO 基础知识学习--SEO优化学习教程【学习笔记】
[前端总路线学习笔记] 本笔记的参考视频–SEO 基础知识学习视频 SEO优化学习教程学习笔记 SEO用到的网站 1.百度指数 2.站长之家 1.什么是SEO – 搜索引擎优化 Search Engi ...
- Win11 22H2怎么退回之前版本?Win11回滚Win10系统教程(三种方法)
最近,新的Windows11 22H2正式版已经推送了,有不少更新到新系统的朋友出现了问题,想要退回之前的系统版本,本文就针对Win11 22H2怎么退回之前版本的问题,带来了三种Win11回滚Win ...
- python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )
2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...
- SEO 搜索引擎优化入门教程
搜索引擎优化入门教程 总目录 第一章 SEO 入门........................................................................... ...
- Spring认证中国教育管理中心-Spring Data Neo4j教程三
原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心) 6.2.处理和提供唯一 ID 6.2.1.使用内部 Neo4j id 为您的域类提供 ...
最新文章
- Shell基础命令之echo
- Cisco PT模拟实验(12) 路由器静态路由的配置
- 【PAT乙级】1045 快速排序 (25 分)
- 公有云:美酒or毒药?--【软件和信息服务】2014.12
- SAP AMDP介绍 - ABAP托管的HANA数据库过程
- 【Python】有效资源爬取并集
- docker 目录 挂载
- InfluxDB 简介、安装和简单使用
- 【VBA编程】10.自定义集合
- linux2.4内核下载,升级到Linux 2.4内核
- 【项目管理】IT项目成功
- Android 系统(74)---Android手势触摸事件的分发和消费机制
- hdu 1059 Dividing(多重DP)
- 前端开发 —— js 常用工具函数(utilities)
- scrum敏捷开发项目管理工具必备
- 区块链开发基础知识学习
- 扒一扒那些叫欧拉的定理们(四)——平面几何欧拉定理美学鉴赏
- Android真香系列,再也不用数据线就能真机调试啦
- 数据分析师的任职要求——阿里巴巴
- 微信小程序-菜谱APP