遗传算法应用实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题2:
求Schaffer函数的最大值点:
222121222212sin0.5(,)0.5,55,1,2[10.001()]ixxfxxxixx
..
......
..
根据遗传算法的一般运算过程编写MATLAB程序如下:
L = 32;
N = 60;
M = 80;
T = 100;
Pc = 0.6;
Pm = 0.02;
11,1,1iiibiabbi.
..
..
...
从格雷编码到二进制编码的变换为。
1()mod2iijjba
.
..
例如,0-15的格雷码如下表所示:
0
1
2
3
4
5
6
7
0000
0001
0011
0010
0110
0111
0101
0100
8
9
10
11
12
13
14
15
1100
1101
1111
1110
1010
1011
y3 = 11 * sin(6 * x3) + 7 * cos(5 * x3);
for i = 1 : 1 : N
[a, b] = min(y3);
x1(1, i) = x3(1, b);
grayCode(i, :) = grayCodeNew(b, :);
y3(1, b) = inf;
end
end
x2(1, i) = uint16(x1(1, i) / (2 * pi) * 65535);
grayCode(i, :) = num2gray(x2(1, i), L);
end
for t = 1 : 1 : T
y1 = 11 * sin(6 * x1) + 7 * cos(5 * x1);
for i = 1 : 1 : M / 2
M
3.4.选择(子代)从上述所形成的个候选个体中依据适应度
选择出个个体组成新一代种群。N
步4(终止检验)
如已满足终止准则,则输出中具有最大适应度的个体作为
最优解,终止计算,否则置并转步2。1tt..
以上运算过程只是遗传算法的多种实现方式中的一种,根据实际
问题的不同,遗传算法的实现也是多种多样的。
遗传算法具有通用、并行、稳健、简单与全局优化能力强等突出
穷多点用间隔足够小的有限点来代替,以降低计算量同时保证精度损
失不大。如用16位二进制数来表示该区间的点,相邻点的间隔仅为
,相邻点的函数值的变化幅度已经很小,由此带来
的精度损失完全可以接受。
516209.58751021
...
..
.
另一个问题是普通的二进制编码方式可能具有较大的汉明
(Hamming)距离,例如15和16的二进制表示为01111和10000,
从15到16必须改变所有位,这种缺陷将降低遗传算法的搜索效率。
采用格雷编码(Gray Encoding)可以避免这一缺陷。格雷码的特点是
任意两个连续的两个整数的编码值之间只有一个位是不同的,其他位
都完全相同。格雷编码的原理如下:
设有二进制串,对应的格雷串,则从二进制编码
到格雷编码的变换为。
12nbbb12naaa
陷入局部最小点,而不能搜寻到真正的全局最小点,但遗传算法可以
较好地弥补这个缺陷。遗传算法的具体实现如下:
1.问题分析。对于本问题,自变量可以抽象为个体的基因组,
即用二进制编码表示;函数值可以抽象为个体的适应度,函数
值越小,适应度越高。
x
x()fx
关于二进制编码方式,在精度允许的范围下,可以将区间内的无
意过大的会增大运算量。
L
(2)种群规模。种群规模表示每一代种群中所含个体数目。
当取值较小时,可提高遗传算法的运算速度,但却降低种群的多样
性,容易引起遗传算法早熟,出现假收敛;而当取值较大时,又会
使得遗传算法效率降低。一般建议的取值范围是。
NN
N
N
20~100
(3)交叉概率。在遗传算法中交叉算子被认为是主要搜索算
if rand() < Pm
grayCodeNew(i, j) = 1 - grayCodeNew(i, j);
end
end
end
for i = 1 : 1 : M
x4(1, i) = gray2num(grayCodeNew(i, :));
end
x3 = double(x4) * 2 * pi / 65535;
所选择的每一对母体,以一定的交叉概率交换它们之间的部分基
因。
(3)变异算子:是模拟基因突变的遗传操作,它对种群中
的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基
因值为其他的等位基因。
交叉算子与变异算子的作用都在于重组染色体基因,以生成新的
个体。
遗传算法的运算过程如下:
步1(初始化)
确定种群规模,交叉概率,变异概率和终止进化准则;随
1001
1000
2.根据遗传算法的运算过程编写程序。
% f(x) = 11sin(6x) + 7cos(5x), 0 <= x <= 2 * pi
L = 16;
N = 32;
M = 48;
T = 100;
Pc = 0.8;
Pm = 0.03;
for i = 1 : 1 : N
x1(1, i) = rand() * 2 * pi;
优点,适用于解决复杂、困难的全局优化问题。
一个优化问题被称为是复杂的,通常指它具有下述特征之一:
(1)目标函数没有明确解析表达(如非数值优化问题)。
(2)目标Fra Baidu bibliotek数虽有明确表达,但不可能恰好估值(如大部分最
优控制问题、金融优化问题)。
(3)目标函数有极多的峰值(如计算、组合优化问题)。DNA
(4)多目标优化,即目标函数是向量值。
x1
y1 = 11 * sin(6 * x1) + 7 * cos(5 * x1)
3.结论分析。程序运行结果为:
最小值点为。1.8486,()17.8340xfx...
下面针对上面的问题,讨论遗传算法中一些初始化参数的设定方
法及其影响。
(1)编码长度。使用二进制编码时,通常由对问题的求解精
度决定,编码长度越长,可期望的最优解的精度也就越高,但应注
grayCode1(1, i, :) = num2gray(x10(1, i), L);
grayCode1(2, i, :) = num2gray(x10(2, i), L);
end
for i = 1 : 1 : M
[a, b] = max(y1);
grayCode2(1, i, :) = grayCode1(1, b, :);
grayCode2(2, i, :) = grayCode1(2, b, :);
y1(1, b) = -inf;
end
for i = 1 : 1 : M / 2
p = unidrnd(L);
if rand() < Pc
for j = p : 1 : L
temp = grayCode2(1, i, j);
[a, b] = min(y1);
grayCodeNew(i, :) = grayCode(b, :);
grayCodeNew(i + M / 2, :) = grayCode(b, :);
y1(1, b) = inf;
end
for i = 1 : 1 : M / 2
p = unidrnd(L);
if rand() < Pc
mP0.4~1
0.0001~0.5
(5)终止进化代数。遗传算法不同于传统优化算法,它很难
有明确的搜索终止准则(特别是对于非数值优化问题),于是通常需
指定一个终止进化代数来终止算法,一般设。一般来说,
事先指定通常只能找到给定问题的在给定时限内所能寻求的相对
满意解,但不一定是问题的最优解或较高精度的近似解。为了获得较
一个优化问题被称为是困难的,则通常是指:或者目标函数不
连续、不可微、高度非线性,或者优化问题是困难的组合问题。
f
对于这些复杂、困难的优化问题,已知的优化方法或者根本不可
用,或者可用但不有效。相比之下,遗传算法不但保证可用,而且常
常显得更为有效。
但是,我们必须注意到,一个通用而又较少依赖于目标函数值与
其他辅助信息的算法不可能比专用且充分利用目标函数值与相关辅
助信息的算法更为有效,而当一个问题有某些辅助信息可供使用时,
舍弃应用本来可供应用的信息而去应用于这些信息无关的算法也不
是一个聪明的选择。所以,遗传算法一般来说并不适宜应用于通常的
数值优化问题(例如连续可微的数学规划问题),或者说,当应用于
这样的问题时,遗传算法并不总能显示其优越性。
grayCode2(1, i, j) = grayCode2(1, M - i + 1, j);
grayCode2(1, M - i + 1, j) = temp;
temp = grayCode2(2, i, j);
grayCode2(2, i, j) = grayCode2(2, M - i + 1, j);
交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群
。()Xt
(1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原
理。它根据每一个个体的适应度,按照一定规则或方法,从代种群
中选择出一些优良的个体(或作为母体,或让其遗传到下一代种
群)。
t
(1)Xt.
(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群
机生成个个体作为初始种群;置。
NcPmP
(0)X0t.
步2(个体评价)
计算评估中各个体的适应度。
步3(种群进化)
3.1.选择(母体)从中运用选择算子选择出对母体
()。
/2M
MN.
3.2.交叉对所选择的对母体,以概率执行交叉,形成
个中间个体。
M
3.3.变异对个中间个体分别独立以概率执行变异,形成
个候选个体。
遗传算法及其应用实例
遗传算法(Genetic Algorithm)是由美国Michigan大学的Holland
教授(1969)提出,后经由De Jong(1975),Goldberg(1989)等归
纳总结所形成的一类模拟进化算法。
遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择
与染色体之间的交叉和变异来完成的。遗传算法主要使用选择算子、
01234567-20-15-10-505101520
接下来,我们通过一个求解简单函数的最小值点的问题来初步展
示遗传算法的具体实现方法:
问题1:
求函数在区间上的最小值点。()11sin(6)7cos(5)fxxx..[0,2]x..
上图为函数在区间上的曲线图像,
可以看出,该函数有多个极值点,如果使用其他的搜寻方法,很容易
子,因而一般取较大值。一般说,较大的容易破坏群体中已形成的
优良模式,是搜索的随机性太大,而较小的使发现新个体(特别是
优良新个体)的速度太慢。一般建议的取值范围是。另外,
比较理想的的方式是非一致地使用交叉概率,例如在遗传算法的前期
使用较大的,后期降低以保留优良个体。
cP
cP
cP
0.4~0.99
(4)变异概率。较大的变异概率使遗传算法在整个搜索空
间中大步跳跃,而小的变异概率使遗传算法聚焦于特别区域作局部搜
mPmP
索。一般在不使用交叉算子的情形(演化策略(Evolution Strategy)
算法,进化程序(Evolution Programming)算法),变异算子作主要搜
索算子,取较大值();而在与交叉算子联合使用的情形(遗
传算法),通常取较小值()。
高精度解,通常可依据种群适应度的稳定情况来实时调整的设置。
T
[100,1000]T.
T
总体来说,以上参数的确定并没有明确的准则可依据,需要根据
实际问题的特点以及算法的运行情况进行实时的调整,以搜索获得更
为满意的最优解。
-505-50500.20.40.60.81
接下来,我们用遗传算法来求解一个更为复杂的函数最值问题。
for j = p : 1 : L
temp = grayCodeNew(i, j);
grayCodeNew(i, j) = grayCodeNew(M - i + 1, j);
grayCodeNew(M - i + 1, j) = temp;
end
end
end
for i = 1 : 1 : M
for j = 1 : 1 : L
end
for t = 1 : 1 : T
for i = 1 : 1 : N
temp1(1, i) = x11(1, i) ^ 2 + x11(2, i) ^ 2;
y1(1, i) = 0.5 - (sin(sqrt(temp1(1, i))) ^ 2 - 0.5) / (1 + 0.001
* temp1(1, i));
for i = 1 : 1 : N
x10(1, i) = unidrnd(2 ^ L - 1);
x10(2, i) = unidrnd(2 ^ L - 1);
x11(1, i) = double(x10(1, i)) / (2 ^ L - 1) * 10 - 5;
x11(2, i) = double(x10(2, i)) / (2 ^ L - 1) * 10 - 5;
求Schaffer函数的最大值点:
222121222212sin0.5(,)0.5,55,1,2[10.001()]ixxfxxxixx
..
......
..
根据遗传算法的一般运算过程编写MATLAB程序如下:
L = 32;
N = 60;
M = 80;
T = 100;
Pc = 0.6;
Pm = 0.02;
11,1,1iiibiabbi.
..
..
...
从格雷编码到二进制编码的变换为。
1()mod2iijjba
.
..
例如,0-15的格雷码如下表所示:
0
1
2
3
4
5
6
7
0000
0001
0011
0010
0110
0111
0101
0100
8
9
10
11
12
13
14
15
1100
1101
1111
1110
1010
1011
y3 = 11 * sin(6 * x3) + 7 * cos(5 * x3);
for i = 1 : 1 : N
[a, b] = min(y3);
x1(1, i) = x3(1, b);
grayCode(i, :) = grayCodeNew(b, :);
y3(1, b) = inf;
end
end
x2(1, i) = uint16(x1(1, i) / (2 * pi) * 65535);
grayCode(i, :) = num2gray(x2(1, i), L);
end
for t = 1 : 1 : T
y1 = 11 * sin(6 * x1) + 7 * cos(5 * x1);
for i = 1 : 1 : M / 2
M
3.4.选择(子代)从上述所形成的个候选个体中依据适应度
选择出个个体组成新一代种群。N
步4(终止检验)
如已满足终止准则,则输出中具有最大适应度的个体作为
最优解,终止计算,否则置并转步2。1tt..
以上运算过程只是遗传算法的多种实现方式中的一种,根据实际
问题的不同,遗传算法的实现也是多种多样的。
遗传算法具有通用、并行、稳健、简单与全局优化能力强等突出
穷多点用间隔足够小的有限点来代替,以降低计算量同时保证精度损
失不大。如用16位二进制数来表示该区间的点,相邻点的间隔仅为
,相邻点的函数值的变化幅度已经很小,由此带来
的精度损失完全可以接受。
516209.58751021
...
..
.
另一个问题是普通的二进制编码方式可能具有较大的汉明
(Hamming)距离,例如15和16的二进制表示为01111和10000,
从15到16必须改变所有位,这种缺陷将降低遗传算法的搜索效率。
采用格雷编码(Gray Encoding)可以避免这一缺陷。格雷码的特点是
任意两个连续的两个整数的编码值之间只有一个位是不同的,其他位
都完全相同。格雷编码的原理如下:
设有二进制串,对应的格雷串,则从二进制编码
到格雷编码的变换为。
12nbbb12naaa
陷入局部最小点,而不能搜寻到真正的全局最小点,但遗传算法可以
较好地弥补这个缺陷。遗传算法的具体实现如下:
1.问题分析。对于本问题,自变量可以抽象为个体的基因组,
即用二进制编码表示;函数值可以抽象为个体的适应度,函数
值越小,适应度越高。
x
x()fx
关于二进制编码方式,在精度允许的范围下,可以将区间内的无
意过大的会增大运算量。
L
(2)种群规模。种群规模表示每一代种群中所含个体数目。
当取值较小时,可提高遗传算法的运算速度,但却降低种群的多样
性,容易引起遗传算法早熟,出现假收敛;而当取值较大时,又会
使得遗传算法效率降低。一般建议的取值范围是。
NN
N
N
20~100
(3)交叉概率。在遗传算法中交叉算子被认为是主要搜索算
if rand() < Pm
grayCodeNew(i, j) = 1 - grayCodeNew(i, j);
end
end
end
for i = 1 : 1 : M
x4(1, i) = gray2num(grayCodeNew(i, :));
end
x3 = double(x4) * 2 * pi / 65535;
所选择的每一对母体,以一定的交叉概率交换它们之间的部分基
因。
(3)变异算子:是模拟基因突变的遗传操作,它对种群中
的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基
因值为其他的等位基因。
交叉算子与变异算子的作用都在于重组染色体基因,以生成新的
个体。
遗传算法的运算过程如下:
步1(初始化)
确定种群规模,交叉概率,变异概率和终止进化准则;随
1001
1000
2.根据遗传算法的运算过程编写程序。
% f(x) = 11sin(6x) + 7cos(5x), 0 <= x <= 2 * pi
L = 16;
N = 32;
M = 48;
T = 100;
Pc = 0.8;
Pm = 0.03;
for i = 1 : 1 : N
x1(1, i) = rand() * 2 * pi;
优点,适用于解决复杂、困难的全局优化问题。
一个优化问题被称为是复杂的,通常指它具有下述特征之一:
(1)目标函数没有明确解析表达(如非数值优化问题)。
(2)目标Fra Baidu bibliotek数虽有明确表达,但不可能恰好估值(如大部分最
优控制问题、金融优化问题)。
(3)目标函数有极多的峰值(如计算、组合优化问题)。DNA
(4)多目标优化,即目标函数是向量值。
x1
y1 = 11 * sin(6 * x1) + 7 * cos(5 * x1)
3.结论分析。程序运行结果为:
最小值点为。1.8486,()17.8340xfx...
下面针对上面的问题,讨论遗传算法中一些初始化参数的设定方
法及其影响。
(1)编码长度。使用二进制编码时,通常由对问题的求解精
度决定,编码长度越长,可期望的最优解的精度也就越高,但应注
grayCode1(1, i, :) = num2gray(x10(1, i), L);
grayCode1(2, i, :) = num2gray(x10(2, i), L);
end
for i = 1 : 1 : M
[a, b] = max(y1);
grayCode2(1, i, :) = grayCode1(1, b, :);
grayCode2(2, i, :) = grayCode1(2, b, :);
y1(1, b) = -inf;
end
for i = 1 : 1 : M / 2
p = unidrnd(L);
if rand() < Pc
for j = p : 1 : L
temp = grayCode2(1, i, j);
[a, b] = min(y1);
grayCodeNew(i, :) = grayCode(b, :);
grayCodeNew(i + M / 2, :) = grayCode(b, :);
y1(1, b) = inf;
end
for i = 1 : 1 : M / 2
p = unidrnd(L);
if rand() < Pc
mP0.4~1
0.0001~0.5
(5)终止进化代数。遗传算法不同于传统优化算法,它很难
有明确的搜索终止准则(特别是对于非数值优化问题),于是通常需
指定一个终止进化代数来终止算法,一般设。一般来说,
事先指定通常只能找到给定问题的在给定时限内所能寻求的相对
满意解,但不一定是问题的最优解或较高精度的近似解。为了获得较
一个优化问题被称为是困难的,则通常是指:或者目标函数不
连续、不可微、高度非线性,或者优化问题是困难的组合问题。
f
对于这些复杂、困难的优化问题,已知的优化方法或者根本不可
用,或者可用但不有效。相比之下,遗传算法不但保证可用,而且常
常显得更为有效。
但是,我们必须注意到,一个通用而又较少依赖于目标函数值与
其他辅助信息的算法不可能比专用且充分利用目标函数值与相关辅
助信息的算法更为有效,而当一个问题有某些辅助信息可供使用时,
舍弃应用本来可供应用的信息而去应用于这些信息无关的算法也不
是一个聪明的选择。所以,遗传算法一般来说并不适宜应用于通常的
数值优化问题(例如连续可微的数学规划问题),或者说,当应用于
这样的问题时,遗传算法并不总能显示其优越性。
grayCode2(1, i, j) = grayCode2(1, M - i + 1, j);
grayCode2(1, M - i + 1, j) = temp;
temp = grayCode2(2, i, j);
grayCode2(2, i, j) = grayCode2(2, M - i + 1, j);
交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群
。()Xt
(1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原
理。它根据每一个个体的适应度,按照一定规则或方法,从代种群
中选择出一些优良的个体(或作为母体,或让其遗传到下一代种
群)。
t
(1)Xt.
(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群
机生成个个体作为初始种群;置。
NcPmP
(0)X0t.
步2(个体评价)
计算评估中各个体的适应度。
步3(种群进化)
3.1.选择(母体)从中运用选择算子选择出对母体
()。
/2M
MN.
3.2.交叉对所选择的对母体,以概率执行交叉,形成
个中间个体。
M
3.3.变异对个中间个体分别独立以概率执行变异,形成
个候选个体。
遗传算法及其应用实例
遗传算法(Genetic Algorithm)是由美国Michigan大学的Holland
教授(1969)提出,后经由De Jong(1975),Goldberg(1989)等归
纳总结所形成的一类模拟进化算法。
遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择
与染色体之间的交叉和变异来完成的。遗传算法主要使用选择算子、
01234567-20-15-10-505101520
接下来,我们通过一个求解简单函数的最小值点的问题来初步展
示遗传算法的具体实现方法:
问题1:
求函数在区间上的最小值点。()11sin(6)7cos(5)fxxx..[0,2]x..
上图为函数在区间上的曲线图像,
可以看出,该函数有多个极值点,如果使用其他的搜寻方法,很容易
子,因而一般取较大值。一般说,较大的容易破坏群体中已形成的
优良模式,是搜索的随机性太大,而较小的使发现新个体(特别是
优良新个体)的速度太慢。一般建议的取值范围是。另外,
比较理想的的方式是非一致地使用交叉概率,例如在遗传算法的前期
使用较大的,后期降低以保留优良个体。
cP
cP
cP
0.4~0.99
(4)变异概率。较大的变异概率使遗传算法在整个搜索空
间中大步跳跃,而小的变异概率使遗传算法聚焦于特别区域作局部搜
mPmP
索。一般在不使用交叉算子的情形(演化策略(Evolution Strategy)
算法,进化程序(Evolution Programming)算法),变异算子作主要搜
索算子,取较大值();而在与交叉算子联合使用的情形(遗
传算法),通常取较小值()。
高精度解,通常可依据种群适应度的稳定情况来实时调整的设置。
T
[100,1000]T.
T
总体来说,以上参数的确定并没有明确的准则可依据,需要根据
实际问题的特点以及算法的运行情况进行实时的调整,以搜索获得更
为满意的最优解。
-505-50500.20.40.60.81
接下来,我们用遗传算法来求解一个更为复杂的函数最值问题。
for j = p : 1 : L
temp = grayCodeNew(i, j);
grayCodeNew(i, j) = grayCodeNew(M - i + 1, j);
grayCodeNew(M - i + 1, j) = temp;
end
end
end
for i = 1 : 1 : M
for j = 1 : 1 : L
end
for t = 1 : 1 : T
for i = 1 : 1 : N
temp1(1, i) = x11(1, i) ^ 2 + x11(2, i) ^ 2;
y1(1, i) = 0.5 - (sin(sqrt(temp1(1, i))) ^ 2 - 0.5) / (1 + 0.001
* temp1(1, i));
for i = 1 : 1 : N
x10(1, i) = unidrnd(2 ^ L - 1);
x10(2, i) = unidrnd(2 ^ L - 1);
x11(1, i) = double(x10(1, i)) / (2 ^ L - 1) * 10 - 5;
x11(2, i) = double(x10(2, i)) / (2 ^ L - 1) * 10 - 5;