差分进化算法(python实现
差分进化算法
概述
最优化方法分为传统优化方法和启发式优化方法两大类。传统优化方法大多利用目标函数的梯度 (或导数)信息实现单可行解的惯序、确定性搜索;启发式优化方法以仿生算法为主,通过启发式搜索策略实现多可行解的并行、随机优化。启发式搜索算法不要求目标函数连续、可微等信息,具有较好的全局寻优能力。
在众多启发式优化方法中,差分进化算法是一种基于群体差异的启发式随机搜索算法,该算法是R.Store和K.Price为求解Chebyshev多项式而提出的。差分进化算法具有原理简单、受控参数少、鲁棒性强等优点。
差分进化算法来源于早期提出的遗传算法(Genetic Algorithm,GA)。而差分进化算法引入了利用当前群体中个体差异来构造变异个体的差分变异模式,是其独特的进化方式。
总而言之,差分进化算法(DE)是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。
就是遗传算法在变异那边改进了一下
但以防有人还不太懂遗传算法,我再稍微讲一下原理
算法过程
1.种群初始化
设解空间内存在NP个个体(即种群大小为NP),每个个体是D维向量。
初始种群随机产生:
2.变异 (跟遗传算法不同的点就在于这)
差分进化算法使用种群中两个不同向量来干扰一个现有向量,进行差分操作,来实现变异。
第g代变异个体
在进化过程中,为了保证解的有效性,必须判断变异个体中各分量是否满足边界条件,如果不满足边界条件,则变异个体用随机方法重新生成。
3. 交叉
对于每个个体和它所生成的子代变异向量进行交叉,具体的说就是对每一个分量按照一定的概率选择子代变异向量(否则就是原向量)来生成试验个体。
4.选择
差分进化算法使用贪婪算法,根据适应度函数的值,从目标个体和试验个体中选择更优的作为下一代。
通过以上的变异、交叉和选择操作,种群进化到下一代并反复循环,直到算法迭代次数达到预定最大次数,或种群最优解达到预定误差精度时算法结束。
算法流程图
算法参数控制
DE 算法的控制参数主要有种群规模 NP、缩放因子 F 以及交叉概率 CR。
在经典 DE 算法中采用的是参数固定设置的方式,即参数在搜索之前预先设置好并且在整个迭代过程中保持不变。
(1)种群规模
种群规模(NP)主要影响种群的多样性以及收敛速度。它的取值范围一般在[5D,10D]之间(D为每个个体的维度)。
增大NP 可以提高种群的多样性,使得DE 算法更能收敛于最优解,但是会增加算法运行的时间复杂度。
减小NP 可以提高收敛速度,但易陷入局部最优,即早熟收敛。
当NP<20 时,还容易发生停滞现象,停滞现象发生后算法不能收敛和继续向最优解方向搜索寻优,但种群继续保持着多样性以及非收敛状态。
(2)变异因子
变异因子(F)决定种群个体差分步长大小,影响算法最优解的搜索。它的取值范围一般在[0.4,0.95]之间。
增大F 可以加大算法的搜索空间,提高种群多样性,有利于算法搜索最优解,但会降低收敛速率。
减小F 可以增加算法的开发能力,提高算法的收敛速度,但同时增加陷入早熟收敛的风险。
(3)交叉概率因子
交叉概率因子(CR)起着平衡算法全局与局部搜索能力的作用。它的取值范围一般在[0.3, 0.9]之间。
增大CR 可以提高种群多样性,但可能会造成算法后期收敛速度变慢。
减小CR 有利于分析个体各维可分离问题。
总结
近年来针对 DE 算法的理论研究主要集中在如何提高算法的寻优能力、收敛速度以及克服启发式算法常见的早熟收敛以及搜索停滞等缺陷方面。 而改进差分进化算法可以朝着控制参数设置、差分策略选择、种群结构以及与其他最优化算法混合四大方向前进。
python代码实现
def obj_func(p):x1, x2, x3 = preturn x1 ** 2 + x2 ** 2 + x3 ** 2constraint_eq = [lambda x: 1 - x[1] - x[2]
]constraint_ueq = [lambda x: 1 - x[0] * x[1],lambda x: x[0] * x[1] - 5
]
from sko.DE import DEde = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)best_x, best_y = de.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)
差分进化算法(python实现相关推荐
- 差分进化算法python_差分进化算法Python实现
本文you清华大学硕士大神金天撰写,欢迎大家转载,不过请保留这段版权信息,对本文内容有疑问欢迎联系作者微信:jintianiloveu探讨,多谢合作~ 导语 差分进化算法是一种寻优算法,提出时间比遗传 ...
- 差分进化算法python 指派问题_多目标优化算法
本书实用性强,摒弃工具书中难懂的理论讲解,通过使用具体数值实例进行浅显易懂的讲解,保证大学低年级学生凭借现有的数学基础知识也可以完全理解书中介绍的网络数学模型和遗传算法的解法.书中丰富的数值实例能够加 ...
- 差分进化算法python 指派问题_一类指派问题的改进矩阵解法
一 类 指 派 问 题 的 改 进 矩 阵 解 法 孙 静 (广州科技职业技术学院 电子信息系,广东 广州 510550) 摘 要 :本 文介绍 了求历 时最短的 指派 问题 ,给 出 了改 进矩阵解 ...
- 【进阶一】Python实现MDCVRP常见求解算法——差分进化算法(DE)
基于python语言,实现差分进化算法(DE)对多车场车辆路径规划问题(MDCVRP)进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6 ...
- Python实现VRP常见求解算法——差分进化算法(DE)
基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解. 目录 1. 适用场景 2. 求解效果 3. 问题分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 ...
- 【进阶二】Python实现VRPTW常见求解算法——差分进化算法(DE)
基于python语言,实现经典差分进化算法(DE)对带有时间窗的车辆路径规划问题( VRPTW )进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. ...
- 【进阶四】Python实现(MD)HVRP常见求解算法——差分进化算法(DE)
差分进化算法+Split 求解异构车辆路径规划问题 碧海蓝天 吹吹风 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 p ...
- python差分进化算法_Python实现的差分进化算法源代码
使用Python实现的差分进化算法,引用到Numpy和Scipy,可以支持多核与集群并行计算.使用时只需继承DESolver并定义函数def error_func(self, indiv, *args ...
- Python实现DE差分进化算法优化支持向量机分类模型(SVC算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 差分进化算法(Differential Evolution,DE ...
- 差分进化算法_特邀嘉宾 | 科普差分进化算法(创新奇智运筹优化算法工程师朱小龙博士)...
文案:段克邪 排版:随心390 hello,大家好.各位可点击此处,访问公众号官方店铺.谨防上当受骗,感谢各位支持! 今天我们有幸请到创新奇智运筹优化算法工程师朱小龙博士为大家科普差分进化算法,本次推 ...
最新文章
- 开源软件5大常见问题及解决方法
- python 拓扑排序正确版
- leetcode算法题--求1+2+…+n
- 哪些是MySQL用于放置一些头文件的目录_在古希腊的知识体系中,两大部分是( )。...
- JEECG常见问题大全征集
- 【script】python3中的docx、win32com和openpyxl模块
- (31)FPGA面试题系统最高速度计算方法
- oracle表ddl,七、Oracle中DDL改变表结构操作
- 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...
- 无领导小组讨论(LGD)九大经典案例3
- 三人表决器Verilog
- coap 返回版本信息_CoAP协议学习笔记——CoAP格式详解
- Sql Server数据库的作用与概述
- 【电脑自检后无法进入电脑系统的搞定妙方】
- 速学TypeScript-精简划重点手册-下册
- 什么原因导致芯片短路_PCB电路板短路的原因及解决方法-EDA/PCB-与非网
- 让人又爱又恨的C语言
- 《AngularJS深度剖析与最佳实践》一1.5 实现更多功能:主题
- 快速实现-简单分页器(上)
- 2015年全国谷歌卫星地图离线数据存储方案
热门文章
- 五笔字根表识别码图_王码86版五笔字根表口诀助记词(完整大图)
- centos7设置键盘类型_CentOS7设置中文输入法
- Python基础总结
- 如何将ThinkPad T490拆机加内存条
- matlab图像处理Lena大作业
- [软件更新]影拓三代 PTZ系列 系列 驱动程序 V6.1.1-3{链接已修复}
- ctfmon是什么启动项_win10系统启动项中没有ctfmon进程的图文方法
- jade的基本使用方法
- 智能陈桥五笔7.8试用编号是多少_如何设计和编写软件测试用例
- 无盘服务器秒卡 锐起0359,锐起无盘系统问题汇集