遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传机制的智能优化算法。
其基本思想是:
- 编码。将待优化问题的参数编码为染色体,形成初始种群。
- 适应度计算。根据目标函数计算每个染色体的适应度值,用于后续选择。
- 选择。根据适应度选择优秀的父代染色体用于产生子代,实现“优胜劣汰”。
- 交叉。随机选择两个父代染色体进行交叉操作,产生新的子代染色体。增加种群的多样性。
- 变异。随机变异染色体中的个别基因,以跳出局部最优解。
- 世代替换。用子代种群替换父代种群,产生新的种群。
- 重复进化。重复第2-6步,直到达到最大进化代数或搜索精度。
- 解码输出。对最终种群进行解码,输出最优解。
GA通过模拟自然进化过程,利用随机搜索和比较选择实现全局优化。它可广泛用于复杂优化问题的求解。
实现代码示例:
python
import random
class GA():
def __init__(self, size_pop, len_chrom, prob_cross, prob_mutate):
self.pop_size = size_pop # 种群大小
self.chrom_len = len_chrom # 染色体长度
self.p_cross = prob_cross # 交叉概率
self.p_mutate = prob_mutate # 变异概率
# 初始化种群
self.X = [[random.uniform(0,1) for j in range(self.chrom_len)] for i in range(self.pop_size)]
self.fit = [0.0 for i in range(self.pop_size)] # 个体适应度
# 计算适应度
def cal_fitness(self):
...
# 选择
def select(self):
...
# 交叉
def crossover(self, chrom1, chrom2):
...
# 变异
def mutate(self, chrom):
...
# 迭代进化
def evolve(self):
for gen in range(self.max_gen):
# 计算适应度
self.cal_fitness()
# 选择
self.select()
# 交叉和变异
for i in range(int(self.pop_size/2)):
if random.random() < self.p_cross:
# 交叉
chrom1, chrom2 = self.crossover(self.X[2*i], self.X[2*i+1])
self.X[2*i] = chrom1
self.X[2*i+1] = chrom2
if random.random() < self.p_mutate:
# 变异
self.mutate(self.X[i])
return self.best_x
GA算法充分利用了生物进化的原理来实现全局优化,具有较强的搜索能力和较广泛的应用范围。理解GA的工作原理可以帮助我们设计更高效稳定的算法,并将其应用于更复杂的实际问题。