一、实验目的
熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解流程并测试主要参数对结果的影响。
二、实验原理
遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和个体组成的群体。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程,群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。
三、实验条件
Python3,Anaconda3,PyCharm
四、实验内容
import matplotlib.pyplot as plt
import random
import math
#计算函数
def f(args):
return f2(args)
def f1(args):
return (3 - (math.sin(2\*args\[0\]))\*\*2 - (math.sin(2\*args\[1\]))\*\*2)
def f2(args):
x = 1
for i in range(len(args)):
z = 0
for j in range(5):
z += (j+1) \* math.cos(((j+1)+1)\*args\[i\]+(j+1))
x \*= z
return x
#适应函数
def s(x):
return s2(x)
def s1(x):
return math.exp(-abs(x-1))
def s2(x):
return math.exp(-abs(x+187))
# 计算2进制序列代表的数值
'''
解码并计算值
group 染色体
chrom\_length 染色体长度
max\_value, min\_value 上下限
div 分界点
'''
def b2d(b, chrom\_length, max\_value, min\_value, div):
rwno = \[\]
#因为染色体里面有多个变量,所以需要div来分割
for i in range(len(div)):
if i == 0:
star = 0
end = div\[i\]
else: