利用遗传算法计算函数最值
在对人工智能的学习过程中,初次接触到遗传算法,在这里记录一下我的学习过程和一些思考。
以下是我学习和参考的资料,下文中涉及的问题、内容和求解方法均来源于以下资料:
关于利用遗传算法解决函数最值问题的相关博客
关于遗传算法原理的讲解
刚开始接触遗传算法时,我觉得很抽象,难以理解,但经过实际问题的演练后,逐渐明白了其中的一点点原理。特别是函数最值问题,可以形象地类比为种群在环境中的生存问题。在遗传算法中,确定适应度函数是非常关键的。针对函数最值问题,适应度函数可以简单地选择原函数,自变量则对应种群中的个体。在求最大值的问题中,函数值即对应个体的适应度,适应度越高的个体就越容易存活。每一轮的迭代过程中,适应度低的个体会被淘汰。同时,为了削减初始值对最终结果的影响,需设定个体突变的概率。简单来说,适应度对应函数值,适应度函数对应目标函数,个体染色体编码对应自变量的值,生存环境对应我们设计的筛选规则。下面开始解决一个小问题。
考虑以下函数:
在区间(0,9)求函数最大值。
以下是我学习参考的代码,在原代码(上文第一个链接)基础上做了一点点修改:
import numpy as np
import matplotlib.pyplot as plt
# 适应度函数,即目标函数
def fitness(x):
return x + 10 * np.sin(5 * x) + 7 * np.cos(4 * x)
# 个体类
class indivdual:
def __init__(self): #初始化定义
self.x = 0 # 染色体编码,自变量
self.fitness = 0 # 适应度值,因变量
def __eq__(self, other): #赋值定义
self.x = other.x
self.fitness = other.fitness
# 初始化种群函数,N为种群内个体数,pop为种群
def initPopulation(pop, N):
for i in range