参考官网: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优化使用教程】三、全局优化相关推荐

  1. 树莓派4B系列教程三 :优化配置

    树莓派4B系列教程三 :优化配置 写在前面 树莓派4B内存增加 CPU温度控制 显存优化 Chromuim缓存转移 优化自启程序 Chromium插件安装 离线安装插件时遇到的问题 结语 写在前面 不 ...

  2. MongoDB 教程三: 高级查询

    视频:MongoDB 教程三: 高级查询 MongoDB支持的查询语言非常强大,语法规则类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能,并且由于 MongoDB可以支持复杂的数 ...

  3. 区块链教程(三):Solidity编程基础

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  4. 抖音SEO优化详教程

    抖音SEO-初级教程 抖音SEO优化详教程 ①完播率:视频从头到尾播放完毕 ②点赞量.评论量.转发量.复播率:双击点赞.对视频进行评论.转发该视频.再次播放视频 ③标题.话题.定位:上线视频时内容标题 ...

  5. 零基础学前端之SEO 基础知识学习--SEO优化学习教程【学习笔记】

    [前端总路线学习笔记] 本笔记的参考视频–SEO 基础知识学习视频 SEO优化学习教程学习笔记 SEO用到的网站 1.百度指数 2.站长之家 1.什么是SEO – 搜索引擎优化 Search Engi ...

  6. Win11 22H2怎么退回之前版本?Win11回滚Win10系统教程(三种方法)

    最近,新的Windows11 22H2正式版已经推送了,有不少更新到新系统的朋友出现了问题,想要退回之前的系统版本,本文就针对Win11 22H2怎么退回之前版本的问题,带来了三种Win11回滚Win ...

  7. python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )

    2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...

  8. SEO 搜索引擎优化入门教程

    搜索引擎优化入门教程 总目录 第一章 SEO 入门........................................................................... ...

  9. Spring认证中国教育管理中心-Spring Data Neo4j教程三

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心) 6.2.处理和提供唯一 ID 6.2.1.使用内部 Neo4j id 为您的域类提供 ...

最新文章

  1. android ExpandableListView
  2. C语言中用栈实现进制转换,利用栈实现进制转换问题
  3. linux oracle手动启动两个实例
  4. LeetCode 729. 我的日程安排表 I(set 二分查找)
  5. 作者:王玲玲(1978-),女,中国科学院上海天文台高级工程师
  6. 一个突变基因保护了欧洲人祖先
  7. JavaScript函数作用域
  8. 商品翻牌效果(纯css)
  9. MAC删除自带ABC输入法
  10. 输出大于某个正整数n的最小的质数
  11. oracle minus连接条件,oracle及sqlserve中MINUS 的使用方法
  12. 第0篇日记 先立一个flag——开始有了做阅读器的想法
  13. golang cpuprofile分析
  14. 【云栖大会】马云口中创造未来的年轻人,把数据+环保玩出了新花样
  15. 使用python求解特征值与特征向量
  16. 微信小程序自定义键盘|仿微信支付数字键盘
  17. java 二进制 2个字节 高位 低位_高位字节、低位字节
  18. Some selectors are not allowed in component wxss, including tag name selectors, ID selectors,and...
  19. Successfully deployed.Backed up previous deployment.
  20. 颜值爆棚:大朋VR E3基础版真实体验评测

热门文章

  1. 关于态势感知,客户到底需要些什么?
  2. 个人理财第八课-指数基金长期上涨趋势
  3. Java零基础学习记录11(抽象方法、接口、内部类)
  4. 飞机大战-Cocos Creator 碰撞系统实践
  5. 2022-2028全球与中国高灵敏度呼吸机市场现状及未来发展趋势
  6. 在敏捷项目管理中质量为什么重要?
  7. 罗马时钟 基于前端CSS、JS 实现
  8. 第3章 Hadoop 2.x分布式集群搭建
  9. 31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表
  10. 利用zc序列进行简单的帧同步