参考官网: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. Shell基础命令之echo
  2. Cisco PT模拟实验(12) 路由器静态路由的配置
  3. 【PAT乙级】1045 快速排序 (25 分)
  4. 公有云:美酒or毒药?--【软件和信息服务】2014.12
  5. SAP AMDP介绍 - ABAP托管的HANA数据库过程
  6. 【Python】有效资源爬取并集
  7. docker 目录 挂载
  8. InfluxDB 简介、安装和简单使用
  9. 【VBA编程】10.自定义集合
  10. linux2.4内核下载,升级到Linux 2.4内核
  11. 【项目管理】IT项目成功
  12. Android 系统(74)---Android手势触摸事件的分发和消费机制
  13. hdu 1059 Dividing(多重DP)
  14. 前端开发 —— js 常用工具函数(utilities)
  15. scrum敏捷开发项目管理工具必备
  16. 区块链开发基础知识学习
  17. 扒一扒那些叫欧拉的定理们(四)——平面几何欧拉定理美学鉴赏
  18. Android真香系列,再也不用数据线就能真机调试啦
  19. 数据分析师的任职要求——阿里巴巴
  20. 微信小程序-菜谱APP

热门文章

  1. 为什么要做抖音短视频搜索排名
  2. win7开机启动项设置
  3. Haskell:写一个漂亮的快排
  4. STM32的下载及调试模式 接口
  5. python编程导论_Python编程导论(第2版)
  6. 6.数值微积分与方程求解
  7. vb用txt打开html文件,VB打开记事本程序源码,即用VB调用记事本,或用记事本打开一个txt文本文件。...
  8. html文字素材怎么加,〖HTML教程素材〗文字及贴图代码
  9. Zotero | Zutilo | 利用标签功能管理及查询文献
  10. 爱迪生、云计算、大数据与海信