Python scipy实现差分进化算法

 更新时间:2023年08月11日 09:42:25   作者:微小冷  
差分进化算法是广义的遗传算法的一种,核心思想是变异,这篇文章主要为大家介绍的则是著名的scipy库中对差分进化算法的实现,希望对大家有所帮助

差分进化算法

差分进化算法是广义的遗传算法的一种,核心思想是变异,具体原理可见:Python实现差分进化算法,本文将要介绍的则是著名的scipy库中对差分进化算法的实现。

在scipy.optimize中实现了差分进化算法,其函数的封装形式为

scipy.optimize.differential_evolution(func, bounds, args=(), 
strategy='best1bin', maxiter=1000, popsize=15, tol=0.01, mutation=(0.5, 1), 
recombination=0.7, seed=None, callback=None, disp=False, polish=True, 
init='latinhypercube', atol=0, updating='immediate', workers=1, constraints=(), 
x0=None, *, integrality=None, vectorized=False)

其中,只有func和bound为必选参数,代表将要优化的函数和解的范围。由于differential_evolution太长,后文统一用加粗的de表示。

func:格式为func(x, *args)的函数,其中args即为de中输入的args

bounds为随机数的生成范围

strategy为变异策略

maxiter 最大代数

popsize 总体大小

tol 容忍度

atol 绝对容忍度

mutation 突变常数,当为元组**(a,b)时,表示突变常数是a,b**之间的随机数

recombination 交叉常数

seed 随机数种子,设置之后可保证结果的可复现性

disp 为True时可输出迭代信息

callback 算法执行完成后的迭代函数

polish 为True时,在迭代的最后,会调用L-BFGS-B算法对最优参数进一步优化

变异策略是差分进化算法的核心,在de函数中,共提供了12种方案:

向量选择方式binexp
bestbest1bin,best2binbest2exp, best1exp
randrand1bin,rand2binrand1exp, rand2exp
randtobestrandtobest1binrandtobest1exp,
currenttobestcurrenttobest1bincurrenttobest1exp

向量选择方式,选择的是在哪个向量的基础上进行变异,best表示在当前最佳样本上变异;rand表示随机选择个体进行变异;current-to-best表示对父个体进行偏向最佳值的修正,然后在此基础上进行变异;同理,rand-to-best表示在随机个体上进行偏向最佳值的修正,然后再变异。

bin和exp为随机数的生成方案,前者表示生成二项分布随机数,后者表示指数分布随机数。

中间的数字表示用于产生突变的个体数。

测试

接下来,测试一下

import numpy as np
from scipy.optimize import differential_evolution as de
def test(xs):
    _sum = 0.0
    for i in range(len(xs)):
        _sum = _sum + np.cos((xs[i]*i)/5)*(i+1)
    return _sum
bounds = [[-15,15] for _ in range(5)]
ret = de(test, bounds)
msg = f"全局最小值" + ", ".join([f"{x:.4f}" for x in ret.x])
msg += f"\nf(x)={ret.fun:.4f}"
print(msg)

结果为

全局最小值-1.6584, -15.0000, -7.8540, -5.2360, -3.9270
f(x)=-12.9800

到此这篇关于Python scipy实现差分进化算法的文章就介绍到这了,更多相关Python scipy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python密码学黑客攻击RSA密码

    python密码学黑客攻击RSA密码

    这篇文章主要为大家介绍了python密码学黑客攻击RSA密码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 使用Django启动命令行及执行脚本的方法

    使用Django启动命令行及执行脚本的方法

    今天小编就为大家分享一篇使用Django启动命令行及执行脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python 操作 Excel 之 openpyxl 模块

    Python 操作 Excel 之 openpyxl 模块

    这篇文章主要介绍了Python 操作 Excel 之 openpyxl 模块,文章基于python的相关资料展开对 openpyxl 模块的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python hashlib模块与哈希算法保护数据完整性教程

    Python hashlib模块与哈希算法保护数据完整性教程

    hashlib模块为Python提供了一种简便的方式来使用各种哈希算法,如MD5、SHA-1、SHA-256等,哈希函数广泛用于密码学、数据完整性验证和安全存储等领域
    2024-01-01
  • pandas中实现将相同ID的字符串进行合并

    pandas中实现将相同ID的字符串进行合并

    这篇文章主要介绍了pandas中实现将相同ID的字符串进行合并问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python 删除列表里所有空格项的方法总结

    python 删除列表里所有空格项的方法总结

    下面小编就为大家分享一篇python 删除列表里所有空格项的方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 利用Fn.py库在Python中进行函数式编程

    利用Fn.py库在Python中进行函数式编程

    这篇文章主要介绍了利用Fn.py库在Python中进行函数式编程,基于Scala中的类似风格,需要的朋友可以参考下
    2015-04-04
  • 使用pytorch完成kaggle猫狗图像识别方式

    使用pytorch完成kaggle猫狗图像识别方式

    今天小编就为大家分享一篇使用pytorch完成kaggle猫狗图像识别方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python自动化测试selenium操作下拉列表实现

    python自动化测试selenium操作下拉列表实现

    这篇文章主要为大家介绍了python自动化测试selenium操作下拉列表实现方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python如何实现爬取B站视频

    Python如何实现爬取B站视频

    这篇文章主要介绍了Python如何实现爬取B站视频,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论