import random
import numpy as np
def differential_evolution(func, bounds, popsize=20, mutation=0.5, recombination=0.7, maxiter=100, tol=1e-7):
"""
差分进化算法
参数:
- func: 目标函数
- bounds: 变量边界,一个列表,每个元素是一个二元组,表示该变量的取值范围
- popsize: 种群大小
- mutation: 变异率
- recombination: 交叉概率(交叉算子)
- maxiter: 最大迭代次数
- tol: 收敛阈值
返回值:
- best_solution: 最优解
- best_fitness: 最优解的适应度值
"""
dim = len(bounds) # 粒子的维度
pop = np.random.rand(popsize, dim) # 随机生成20个个体对应的20个0-1之间的随机数
print(pop,"随机数")
min_b, max_b = np.array(bounds).T # [-20 -20] min-b [20 20] max-b 求出每个个体每一维的最大最小值
diff = max_b - min_b
pop_denorm = min_b + pop * diff # 种群初始化的公式,用于将种群的解向量进行反归一化处理
print(pop_denorm,"初始种群")
fitness = np.asarray([func(ind) for ind in pop_denorm]) # 计算每个个体的适应度值
差分进化代码
最新推荐文章于 2024-04-07 06:36:48 发布