DE差分进化算法--Python代码详解

差分进化算法

算法思路:

1.算法流程图:差分进化算法流程图

2.算法思想:

①确定目标函数    例如求f(x)=x^2+x/2+x^2/3函数的最小值,x的取值范围为(-20,+20)
②初始化一些初始解    也就是先**随机**生成一些x
③求初始解的适应度值    也就是将随机生成的解带入到函数中去求出函数值
④选择适应度最好的解    选择出上述操作之后函数值最好的n(n靠自己定义)个解(也就是x)
⑤对上述选择的解进行交叉、变异操作(这两个操作下面细讲)
⑥对交叉、变异后的新解进行边界处理    因为我们x已经定义了取值范围,x不能超出此范围取值
⑦重新求出经过操作后的解的适应度    也就是求出新解的函数值
⑧判断是否已经满足结束条件,否则返回第四步

3.算法重要参数

①种群大小P(population)    也就是随机生成解的个数
②个体维度D(dimension)    也就是随机生成解的维度大小(维度指的是很可能x并不是单指一个实数,有可能是指一个矢量,也有可能指的是矩阵中的一行或一列)
③变异算子CR1    进行变异操作时需要的参数
④交叉算子CR2    进行交叉操作时需要的参数
⑤迭代次数G(generation)    一共需要循环的次数

变异交叉操作详解

变异:生物学意义上也就是进行基因变异,在该算法中相当于改变个体中的某些部分。例如初始x=[1,2,3,4,5,6]为一个6维,经过变异操作后可能变成[1,21,3,4,56,65]

交叉:生物学上叫做基因交叉,在该算法中相当于两个多维度的个体相互交换某些维度的数值。例如x1=[1,9,8,7,12]  x2=[98,54,63,21,1]对x1、x2进行1、3、5维度的交叉,得出一个新的x1`=[98,9,63,7,1],x2`=[1,54,8,21,12]

变异以及交叉操作技术后得出新的个体,然后带入到操作流程中

代码示例(详细注解)

导入代码所需要的库

import random
import numpy as np
import matplotlib.pyplot as plt   
plt.rc('font',family='KaiTi')  #中文显示问题

定义目标函数(也就是适应度函数)

def f1(x):
    return np.sum((x - 1) **2 )#求(x-1)的平方的最小值

初始化算法所需要参数

population_size = 100  #定义种群规模,也就是一共有多少个个体

dimension = 20  #定义个体维度

#定义个体边界值

lower_band = -100

up
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值