Python非线性全局优化

news2025/6/21 5:55:15

文章目录

    • 全局优化函数简介
    • 详解
    • 性能测试

全局优化函数简介

scipy的optimize模块非常强大,也是我个人使用最多的scipy模块,这里面封装的都是成熟且高效的算法,久经考验。对于参加数学竞赛的同学来说,辛辛苦苦撸出来的遗传算法、模拟退火算法,在scipy所实现的双退火或是差分进化算法面前,就显得十分稚嫩。

其中中封装了6个全局非线性优化函数,这些函数的统一要求是,得到一组值 x x x,使得 func(x, *args) 的值达到最小。故而这些参数统一具备的输入参数是待优化函数func,除了basinhopping之外,都有args参数。

这六个函数分别是

  • brute 即暴力求解,类似于穷举
  • differential_evolution 差分进化算法,后文统称de
  • basinhopping 盆地跳跃算法
  • shgo算法 单形同调优化
  • dual_annealing 双退火算法,后文统称da
  • direct算法

其中,de, shgo, da, direct算法除了需要func之外,还要输入参数bounds,表示定义域区间。在brute函数中,区间参数为ranges,为非必要参数。而在basinhopping算法中,需要指定一个初值x0

算法执行完成后,这些函数提供了一个接下来要执行的函数的接口,其中brute用参数finish,其他函数用callback来调用。

考虑到算法在执行过程中往往需要引入随机数,故而设置随机数种子有利于成果复现,在de, da以及basinhopping中提供了seed参数,用于设置随机数种子。

在搜索全局最优值时,不可避免地要考虑到局部的优化情况,从而调用局部最小值函数minimize,所以basinshopping, shgo, da函数提供了minimizer_kwargs参数,作为调用minimize时的参数字典。

任何算法至少都要有一个终止条件,其中最粗暴的条件就是最大迭代次数,de, da, direct这三个函数用参数maxiter来声明最大迭代次数; basinshopping中则用参数niter

brutede算法提供了多进程开关workers

brute, de, basinhopping中,提供了disp开关,当为True时,会打印算法运行中的某些信息。

详解

这六种算法的详细讲解见下表所示

算法链接
brute这个没什么好讲的
direct矩形分割算法
de差分进化算法
da双模拟退火算法
basinhopping跳盆算法
shgo算法SHGO算法

性能测试

下面对五种非线性优化算法进行测试,测试函数为

y = ∑ i = 0 8 ( i + 1 ) cos ⁡ i x i 5 y=\sum_{i=0}^8 (i+1)\cos\frac{ix_i}{5} y=i=08(i+1)cos5ixi

写为Python程序为

import numpy as np
def test(xs):
    _sum = 0.0
    for i in range(len(xs)):
        _sum = _sum + np.cos((xs[i]*i)/5)*(i+1)
    return _sum

下面是测试代码

from time import time
import scipy.optimize as so

funcDct = {
"de": so.differential_evolution,
"basinhopping": so.basinhopping,
"shgo": so.shgo,
"da": so.dual_annealing,
"direct": so.direct,
}

bounds = [[0,15] for _ in range(8)]
x0 = [0 for _ in range(8)]

for key in funcDct:
    para = bounds if key!= "basinhopping" else x0
    t0 = time()
    ret = funcDct[key](test, para)
    msg = f"{key}算法耗时{time()-t0},优化结果为:\n" 
    msg += ", ".join([f"{x:.4f}" for x in ret.x])
    msg += f"\nf(x)={ret.fun:.4f}"
    print(msg)

测试结果如下


de算法耗时0.595804,优化结果为:
5.9084, 15.0000, 7.8540, 5.2360, 3.9270, 3.1416, 13.0900, 6.7320
f(x)=-33.9800
basinhopping算法耗时1.666373,优化结果为:
-1.6063, -15.7080, -7.8540, -5.2360, 3.9270, 3.1416, 2.6180, -6.7320
f(x)=-34.0000
shgo算法耗时2.203928,优化结果为:
7.5000, 15.0000, 7.8540, 5.2360, 3.9270, 15.0000, 7.8540, 6.7320
f(x)=-32.5381
da算法耗时0.398701,优化结果为:
4.3058, 15.0000, 7.8540, 5.2359, 3.9270, 3.1416, 7.8540, 11.2200
f(x)=-33.9800
direct算法耗时0.009508,优化结果为:
7.5000, 14.9074, 7.8704, 5.2778, 11.7593, 3.0556, 2.6235, 2.2531
f(x)=-33.9494


列表如下

在这里插入图片描述
可见,direct算法最快,由于没有边界的限制,basinhopping得到了最优解,而其他函数表现各异,以差分进化算法和双退火算法表现最佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eudic欧路词典 for Mac v4.4.5增强版

欧路词典 (Eudic)是一个功能强大的英语学习工具,它包含了丰富的英语词汇、短语和例句,并提供了发音、例句朗读、单词笔记等功能。 多语种支持:欧路词典支持多种语言,包括英语、中文、日语、法语等等,用户可以方便地进…

Kubernetes 调度 约束

调度约束 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。 APIServer…

python——案例14:斐波那契数列

兔子生殖为例子而引入,故又称“兔子数列”, 其数值为:1、1、2、3、5、8、13、21、34……在数学上, 这一数列以如下递推的方法定义: F(0)1,F(1)1, F(n)F(n - 1)F(n - 2)(n ≥ 2,n ∈ …

液体神经网络:LNN是个啥概念?

一、说明 在在人工智能领域,神经网络已被证明是解决复杂问题的非常强大的工具。多年来,研究人员不断寻求创新方法来提高其性能并扩展其能力。其中一种方法是液体神经网络(LNN)的概念,这是一个利用动态计算功能的迷人框…

Simpack助力中国铁路创新发展

中国铁路尤其是高铁的迅速发展是中国装备制造业走向世界一张名片,不仅为人们出行提供了便利,也为中国经济的快速增长提供了有力的支撑。同时,高速铁路的发展给产品研发带来了新的课题和挑战。尤其在动力学领域,各部件或子系统之间…

DP(区间DP)

石子合并 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆…

远程通信-RPC

项目场景: 在分布式微服务架构中,远程通信是最基本的需求。 常见的远程通信方式,有基于 REST 架构的 HTTP协议、RPC 框架。 下面,从三个维度了解一下 RPC。 1、什么是远程调用 2、什么是 RPC 3、RPC 的运用场景和优 什么是远程调用…

树莓派第一次开机

文章目录 基于树莓派的OpenEuler基础实验一一、树莓派介绍树莓派较普通电脑的优势1、廉价便携可折腾2、树莓派运行开源的Linux操作系统3、编程好平台4、开源大社区5、引脚可编程6、便携随身带7、灵活可扩展 二、openEuler embedded介绍三、树莓派开机指南1. 硬件准备2. 软件准备…

ROS入门-使用常用的ROS命令行工具:操作节点、话题、服务、消息和参数

目录 使用常用的ROS命令行工具:操作节点、话题、服务、消息和参数 1. rosnode:操作节点 2. rostopic:操作话题 3. rosservice:操作服务 4. rosmsg:操作msg消息 5. rossrv:操作srv消息 6. rosparam&am…

MySQL 存储过程、函数、触发器、事件

​ 目录 存储过程 创建存储过程 调用存储过程 查看存储过程 删除存储过程 进阶 变量 if条件判断 传递参数 case结构 while循环 repeat结构 loop语句 leave语句 游标/光标 存储函数 触发器 创建触发器 删除触发器 查看触发器 事件 查看事件调度器是否开启…

eNSP:ebgp和bgp的基础运用

实验要求&#xff1a; 拓扑图&#xff1a; 命令操作&#xff1a; r1: <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24[r2]ospf 1 router-id 2.2.2.2 [r2…

肉豆蔻酰五肽-8——祛眼袋和黑眼圈

肉豆蔻酰五肽-8 简介 眼袋和黑眼圈形成的原因&#xff1a; 1. 随着年龄的增大眼部皮肤会失去弹性, 眼部肌肉同时也会松弛, 从而在眼脸形成皱褶。衬垫在眼眶的脂肪从眼腔转移出并在眼脸聚集。袋状眼脸医学上称为皮肤松垂, 通常可以通过眼脸成形术得到改善。 2. 眼袋形成另外一…

【2023年11月第四版教材】《第2章-信息技术发展(合集篇)》

《第2章-信息技术发展&#xff08;第一部分&#xff09;》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 3 存储和数据库3.1 存储系统架构3.2 存…

能化校对软件:提高招标文件质量的创新解决方案

智能化校对软件是一种创新的解决方案&#xff0c;可以进一步提高招标文件的质量和准确性。 以下是一些智能化校对软件的创新功能和优势&#xff1a; 1.自然语言处理(NLP)技术&#xff1a;智能化校对软件利用NLP技术来理解和分析文本&#xff0c;识别和纠正更复杂的语法和语义错…

Linux系统性能调优及调试课:Linux Kernel Printk

🚀返回专栏总目录 文章目录 0、printk 说明1、printk 日志等级设置2、屏蔽等级日志控制机制3、printk打印常用方式4、printk打印格式0、printk 说明 在开发Linux device Driver或者跟踪调试内核行为的时候经常要通过Log API来trace整个过程,Kernel API printk()是整个Kern…

需要数电发票接口的,先熟悉下数电发票基本常识

最近有一些技术小伙伴来咨询数电发票接口的时候&#xff0c;对数电发票的一些常识不太了解&#xff0c; 导致沟通起来比较困难。比较典型的这三个问题&#xff1a; 一、开具数电票时&#xff0c;如何设置身份认证频次&#xff1f; 请公司的法定代表人或财务负责人登录江苏省电…

什么是回归测试?回归测试的类型和方法?

随着软件开发进程的进行&#xff0c;每一次的修改和更新都有可能引入新的问题和错误。为了确保产品质量和稳定性&#xff0c;需要进行回归测试。那么&#xff0c;什么是回归测试&#xff1f;本文将为您解答。 回归测试是指在软件代码、使用环境或产品需求发生改变时&#xff0…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)

文章目录 一、简介1. MinGW 和 MinGW-W64 区别和联系2. MSVCRT 和 UCRT 介绍 二、下载1. 从 sourceforge.net 下载2. 从 github 下载3. 从 镜像站点 下载4. 自己编译 三、安装与配置1. 在线安装2. 离线安装3. 环境配置 四、总结 一、简介 1. MinGW 和 MinGW-W64 区别和联系 M…

Linux系统之使用cmatrix实现数字雨效果

Linux系统之使用cmatrix实现数字雨效果 一、cmatrix介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、环境准备工作3.1 安装开发环境3.2 安装基本软件3.3 安装 ImageMagick等工具 四、安装aalib工具4.1 新建目录4.2 下载aalib安装包4.3 解压软件包4.4 编译安装aalib …

9篇论文速览 ICML 2023 测试时自适应(TTA)最新研究进展

测试时自适应对于领域转移下真实机器感知应用的成功至关重要&#xff0c;近年来&#xff0c;研究者们仍然在不断优化现有的方法。在今年的ICML中&#xff0c;TTA相关的研究也有了最新进展。 1.Uncovering Adversarial Risks of Test-Time Adaptation 标题&#xff1a;揭示测试…