差分进化算法
算法思路:
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

最低0.47元/天 解锁文章
2164

被折叠的 条评论
为什么被折叠?



