遗传算法(Genetic Algorithm—GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的.遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位。
遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程.它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体.这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代.后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程。
群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解.值得注意的一点是,现在的遗传算法是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身是否完全正确并不重要(目前生物界对此学说尚有争议)。
序号 |
遗传学概念 |
遗传算法概念 |
数学概念 |
1 |
个体 |
要处理的基本对象、结构 |
也就是可行解 |
2 |
群体 |
个体的集合 |
被选定的一组可行解 |
3 |
染色体 |
个体的表现形式 |
可行解的编码 |
4 |
基因 |
染色体中的元素 |
编码中的元素 |
5 |
基因位 |
某一基因在染色体中的位置 |
元素在编码中的位置 |
6 |
适应值 |
个体对于环境的适应程度,或在环境压力下的生存能力 |
可行解所对应的适应函数值 |
7 |
种群 |
被选定的一组染色体或个体 |
根据入选概率定出的一组可行解 |
8 |
选择 |
从群体中选择优胜的个体,淘汰劣质个体的操作 |
保留或复制适应值大的可行解,去掉小的可行解 |
9 |
交叉 |
一组染色体上对应基因段的交换 |
根据交叉原则产生的一组新解 |
10 |
交叉概率 |
染色体对应基因段交换的概率(可能性大小) |
闭区间[0,1]上的一个值,一般为0.65~0.90 |
11 |
变异 |
染色体水平上基因变化 |
编码的某些元素被改变 |
12 |
变异概率 |
染色体上基因变化的概率(可能性大小) |
开区间(0,1)内的一个值, 一般为0.001~0.01 |
13 |
进化、 适者生存 |
个体进行优胜劣汰的进化,一代又一代地优化 |
目标函数取到最大值,最优的可行解 |
个体与种群
● 个体就是模拟生物个体而对问题中的对象 (一般就是问题的解)的一种称呼,一个个体也就是搜索空间中的一个点。
● 种群(population)就是模拟生物种群而由若干个体组成的群体, 它一般是整个搜索空间的一个很小的子集。
适应度与适应度函数
● 适应度(fitness)就是借鉴生物个体对环境的适应程度,而对问题中的个体对象所设计的表征其优劣的一种测度。
● 适应度函数(fitness function)就是问题中的全体个体与其适应度之间的一个对应关系。它一般是一个实值函数。该函数就是遗传算法中指导搜索的评价函数。
染色体与基因
染色体(chromosome)就是问题中个体的某种字符串形式的编码表示。字符串中的字符也就称为基因(gene)。
例如:
个体 染色体
9 ---- 1001
(2,5,6)---- 010 101 110
遗传操作
亦称遗传算子(genetic operator),就是关于染色体的运算。遗传算法中有三种遗传操作:
● 选择-复制(selection-reproduction)
● 交叉(crossover,亦称交换、交配或杂交)
● 变异(mutation,亦称突变)
选择-复制 通常做法是:对于一个规模为N的种群S,按每个染色体xi∈S的选择概率P(xi)所决定的选中机会, 分N次从S中随机选定N个染色体, 并进行复制。
这里的选择概率P(xi)的计算公式为
交叉 就是互换两个染色体某些位上的基因。
例如, 设染色体 s1=01001011, s2=10010101, 交换其后4位基因, 即
s1′=01000101, s2′=10011011可以看做是原染色体s1和s2的子代染色体。
变异 就是改变染色体某个(些)位上的基因.
例如, 设染色体 s=11001101将其第三位上的0变为1, 即
s=11001101 →11101101= s′。
s′也可以看做是原染色体s的子代染色体。
遗传算法基本流程框图
算法中的一些控制参数:
■ 种群规模
■ 最大换代数
■ 交叉率(crossover rate)就是参加交叉运算的染色体个数占全体染色体总数的比例,记为Pc,取值范围一般为0.4~0.99。
■ 变异率(mutation rate)是指发生变异的基因位数所占全体染色体的基因总位数的比例,记为Pm,取值范围一般为0.0001~0.1。
例、利用遗传算法求解区间[0,31]上的二次函数y=x2的最大值。
分析 原问题可转化为在区间[0, 31]中搜索能使y取最大值的点a的问题。那么,[0, 31] 中的点x就是个体, 函数值f(x)恰好就可以作为x的适应度,区间[0, 31]就是一个(解)空间 。这样, 只要能给出个体x的适当染色体编码, 该问题就可以用遗传算法来解决。
解
(1) 设定种群规模,编码染色体,产生初始种群。
将种群规模设定为4;用5位二进制数编码染色体;取下列个体组成初始种群S1:
s1= 13 (01101), s2= 24 (11000)
s3= 8 (01000), s4= 19 (10011)
(2) 定义适应度函数,
取适应度函数:f (x)=x2
(3) 计算各代种群中的各个体的适应度, 并对其染色体进行遗传操作,直到适应度最高的个体(即31(11111))出现为止。
首先计算种群S1中各个体
s1= 13(01101), s2= 24(11000)
s3= 8(01000), s4= 19(10011)
的适应度f (si) 。
容易求得
f (s1) = f(13) = 132 = 169
f (s2) = f(24) = 242 = 576
f (s3) = f(8) = 82 = 64
f (s4) = f(19) = 192 = 361
再计算种群S1中各个体的选择概率。
选择概率的计算公式为
由此可求得
P(s1) = P(13) = 0.14
P(s2) = P(24) = 0.49
P(s3) = P(8) = 0.06
P(s4) = P(19) = 0.31
在算法中赌轮选择法可用下面的子过程来模拟:
① 在[0, 1]区间内产生一个均匀分布的随机数r。
② 若r≤q1,则染色体x1被选中。
③ 若qk-1<r≤qk(2≤k≤N), 则染色体xk被选中。 其中的qi称为染色体xi (i=1, 2, …, n)的积累概率, 其计算公式为
选择-复制
设从区间[0, 1]中产生4个随机数如下:
r1 = 0.450126, r2 = 0.110347
r3 = 0.572496, r4 = 0.98503
染色体 |
适应度 |
选择概率 |
积累概率 |
选中次数 |
s1=01101 |
169 |
0.14 |
0.14 |
1 |
s2=11000 |
576 |
0.49 |
0.63 |
2 |
s3=01000 |
64 |
0.06 |
0.69 |
0 |
s4=10011 |
361 |
0.31 |
1.00 |
1 |
于是,经复制得群体:
s1’ =11000(24), s2’ =01101(13)
s3’ =11000(24), s4’ =10011(19)
交叉
设交叉率pc=100%,即S1中的全体染色体都参加交叉运算。
设s1’与s2’配对,s3’与s4’配对。分别交换后两位基因,得新染色体:
s1’’=11001(25), s2’’=01100(12)
s3’’=11011(27), s4’’=10000(16)
变异
设变异率pm=0.001。
这样,群体S1中共有
5×4×0.001=0.02
位基因可以变异。
0.02位显然不足1位,所以本轮遗传操作不做变异。
于是,得到第二代种群S2:
s1=11001(25), s2=01100(12)
s3=11011(27), s4=10000(16)
第二代种群S2中各染色体的情况
染色体 |
适应度 |
选择概率 |
积累概率 |
估计的 选中次数 |
s1=11001 |
625 |
0.36 |
0.36 |
1 |
s2=01100 |
144 |
0.08 |
0.44 |
0 |
s3=11011 |
729 |
0.41 |
0.85 |
2 |
s4=10000 |
256 |
0.15 |
1.00 |
1 |
假设这一轮选择-复制操作中,种群S2中的
4个染色体都被选中,则得到群体:
s1’=11001(25), s2’= 01100(12)
s3’=11011(27), s4’= 10000(16)
做交叉运算,让s1’与s2’,s3’与s4’ 分别交换后三位基因,得
s1’’ =11100(28), s2’’ = 01001(9)
s3’’ =11000(24), s4’’ = 10011(19)
这一轮仍然不会发生变异。
于是,得第三代种群S3:
s1=11100(28), s2=01001(9)
s3=11000(24), s4=10011(19)
第三代种群S3中各染色体的情况
染色体 |
适应度 |
选择概率 |
积累概率 |
估计的 选中次数 |
s1=11100 |
784 |
0.44 |
0.44 |
2 |
s2=01001 |
81 |
0.04 |
0.48 |
0 |
s3=11000 |
576 |
0.32 |
0.80 |
1 |
s4=10011 |
361 |
0.20 |
1.00 |
1 |
设这一轮的选择-复制结果为:
s1’=11100(28), s2’=11100(28)
s3’=11000(24), s4’=10011(19)
做交叉运算,让s1’与s4’,s2’与s3’ 分别交换后两位基因,得
s1’’=11111(31), s2’’=11100(28)
s3’’=11000(24), s4’’=10000(16)
这一轮仍然不会发生变异。
于是,得第四代种群S4:
s1=11111(31), s2=11100(28)
s3=11000(24), s4=10000(16)
显然,在这一代种群中已经出现了适应度最高的染色体s1=11111。于是,遗传操作终止,将染色体“11111”作为最终结果输出。
然后,将染色体“11111”解码为表现型,即得所求的最优解:31。
将31代入函数y=x2中,即得原问题的解,即函数y=x2的最大值为961。
◆遗传算法的主要特点
—遗传算法一般是直接在解空间搜索, 而不像图搜索那样一般是在问题空间搜索, 最后才找到解。
—遗传算法的搜索随机地始于搜索空间的一个点集, 而不像图搜索那样固定地始于搜索空间的初始节点或终止节点, 所以遗传算法是一种随机搜索算法。
—遗传算法总是在寻找优解, 而不像图搜索那样并非总是要求优解, 而一般是设法尽快找到解, 所以遗传算法又是一种优化搜索算法。
—遗传算法的搜索过程是从空间的一个点集(种群)到另一个点集(种群)的搜索,而不像图搜索那样一般是从空间的一个点到另一个点地搜索。 因而它实际是一种并行搜索, 适合大规模并行计算,而且这种种群到种群的搜索有能力跳出局部最优解。
—遗传算法的适应性强, 除需知适应度函数外, 几乎不需要其他的先验知识。
—遗传算法长于全局搜索, 它不受搜索空间的限制性假设的约束,不要求连续性, 能以很大的概率从离散的、多极值的、 含有噪声的高维问题中找到全局最优解。
◆遗传算法的应用