X算法
Ⅰ 谁能解释基因演算法
基因算法 1975年 John Holland 学者所提出
成为非常着名的算法
Genetic Algorithm (GA)
基因算法 又称: 遗传算法
基因算法的概念
将问题编码成 染色体的型式
基因: 0 or 1
染色体: x = 0 1 0 0 1 1 0
设计 适应函数 (fitness function)
f(x) :适应函数,给一 x 可得一 适应值 f(x)
适应值愈高, 表愈适应环境
基因算法三个基本动作
选择(Selection)与复制 (Reproction):
X = 0 1 0 0 1 1 0
选择 适应值高 之染色体
复制成多个染色体
基因算法三个基本动作
交换 (crossover):
父:0 1 0 0 1 1 0 0 1 1 1 0 1 0
母:1 0 1 1 0 0 1 1 0 0 0 1 0 1
交换 基因算法三个基本动作
突变 (mutation):
0 1 0 0 1 1 0
1 选择 产生初始族群
计算适应値 复制 交换
突变 产生下一子代
是否满足 停止条件
产生最适个体
否是 基因算法 基本架构图
取材自:辅仁大学资管系林文修老师
选择与 基因操作阶段
评估阶段 初始阶段 生成下一世代
问题否是 生成母体
评估适应函数
符合停止条件?
选择 复制 交换 突变
开始 结束 编码 适应函数
领域知识 表现型 基因型
解码 基因算法 之流程图
取材自:辅仁大学资管系林文修老师
算法步骤 Step1:随机产生N个染色体
Step2:利用适应函数算出每个染色体的适应值
Step3 : 选择与复制: 选择 适应值高 之染色体 复制成多个染色体
Step4:利用交换及突变的动作产生新的染色体
Step5:测试新染色体的适应值是否达到门槛值
是:则 停止
否:则 Go to Step3
范例1 假设 x 在 (0,31) 之间,y = x ,求 x = ,y 可得最大值
将问题编码成 基因的型式
x : 0 0 0 0 0~1 1 1 1 1
设计 适应函数 (fitness function)
f (x) = y = x
范例1 <Step 1, 2, 3>
取4组染色体 x f (x) f (x) /m 复制个数
0 1 1 1 0 (14) 196 0.71 1
1 1 0 0 0 (24) 576 2.07 2
1 0 0 0 1 (17) 289 1.04 1
0 0 1 1 1 ( 7) 49 0.18 0
m = = 278
196+576+289+49
4 范例1 <Step 4.1> 交换
x f (x)
0 1 1 1 0 0 1 0 0 0 (8) 8 = 64
1 1 0 0 0 1 1 1 1 0 (30) 30 = 900
1 1 0 0 0 1 1 0 0 1 (25) 25 = 625
1 0 0 0 1 1 0 0 0 0 (16) 16 = 256
交换 交换 范例1 <Step 4.1> 交换
交换点 下一子代 x f (x)
0 1 1 1 0 2 0 1 0 0 0 8 64
1 1 0 0 0 2 1 1 1 1 0 30 900
1 1 0 0 0 4 1 1 0 0 1 25 625
1 0 0 0 1 4 1 0 0 0 0 16 256
范例1 <Step4.2>突变 (机率0.1)
4个染色体× 5个基因 = 20个基因
20 × 0.1 = 2 有2个基因要突变
1 st:0 1 0 0 0 0 1 1 0 0 (12)
第一个染色体之第3基因突变
3 rd:1 1 0 0 1 1 0 0 0 1 (17)
第三个染色体之第2基因突变
范例1 <Step5>
停止条件有三种可能方法:
设定繁衍代数 (ex:1000代)
收敛 (ex:最佳适应值已50代未改进)
适应值达到门槛
否则,Go to Step3
编码(coding)-1
运用基因演化算法的目的是求问题的解,在初始阶段的编码步骤是把与问题相关变数的值(或称为问题解)以特定编码的方式将其组合成一条染色体 (chromosome,或称为字串string),每一条染色体即代表一可能的问题解答,
最简单而且被广泛使用的是标准二进位编码法(Standard binary encoding)。这种编码法是将染色体内的每个基因用二进位码{0,1}来表示,而编码后的染色体即是一串由01组合字串(string)。
Ⅱ 基因遗传算法是个啥求详解
基因遗传算法主要理论就是优胜劣汰的进化论。
它的主要精神是透过每次迭代都能比上次更进步,逐步演化,表现出针对一个目标函数寻求最佳解的过程。但是因为是随机搜索,所以虽然基因算法设置如交配、突变等来避免,却仍可能会陷入区域最佳解;也有可能最后得到的不是最佳解,只是在结束条件之前找到的最好的解。
基本的基因算法流程:
1.初始化族群:假定这个族群中有4条染色体,每条染色体有5个基因。
基因 -从目标函数的角度来看,就是自变数。
例如:用基因算法解目标函数 f(X,Y,Z)=2X+3Y-Z,
限制式为“X,Y,Z={1,0}”※,
求目标函数的最大值。
此题目对应到染色体的概念,就有3个基因,
三个基因分别代表X、Y、Z三个自变数的值。
染色体 -单一组解
例如:有很多符合目标函数限制式的(X,Y,Z),
其中一组是(x1,y1,z1)=(1,0,0),
函数值 f(x1,y1,z1)为2*1+3*0-0=2。
此例中,这组解当然不是最佳解,但它是这个题目的一个可行解。
*想象我们用直觉解题,拿张计算纸,把所有可行解都列出来,
然后比较所有我们想得到的可行解,最后可以得
到最佳的一组(X,Y,Z),因为它的f(X,Y,Z)为最大值。
族群 -多组解的集合
例如:族群中有四条染色体,这四条染色体就是四组可行解。
2.设定交配率和突变率:假定交配率a为0.6,突变率b为0.1。
交配率 -每个世代中,族群内有多少比率的染色体会互相交配。
突变率 -每个世代中,族群内的染色体有多少机率会突变。
3.迭代世代。
For iter=10 -假定做十次优胜劣汰。
3.1. 天择:在这个世代中,根据每条染色体的权重,随机选择母代来产生后代,
用以做下一个运算。
通常使用轮盘法来作天择,也就是说,
如果染色体甲的解是这个族群中最好的,
那么甲的权重就是最高的。反之则是最低的。
*轮盘法:假定这次族群为“[1,1,1],[0,1,1],[1,0,1],[1,0,0]”,
四条染色体的适应值分别是“4,2,1,2”,
适应值总和为4+2+1+2=9,
则四条染色体被选到的机会为“4/9,2/9,1/9,2/9”
=“0.4,0.2,0.1,0.2”。这个机会就是权重。
为了不让每次选择都选到同一条染色体,所以只是
“有比较高的机会”选择到“有更好适应值的染色体”,
而不是一定会选择这个好适应值的染色体。
3.2. 交配:母代产生后,依照交配率a,随机选择染色体来作交配。
比较交配前的子代1和交配后的子代2,在8条染色体中,
选择适应值最好的4条染色体留下来。
最简单的交配方式就是交换两条染色体的某个基因。
*例如,染色体S=[0,1,0],染色体Q=[1,1,1],交配位于首位的基因,
则可以得到新的两条染色体S'=[1,1,0]、Q'=[0,1,1]。
3.3. 突变:交配完后,依照突变率b,决定这一个世代要不要突变。
假设要突变,则若突变后子代3的适应值比突变前子代2好,就用子代3取代子代2。
最简单的突变方式就是随机选择某条染色体的某个基因,改变它。
*例如,随机选中染色体M=[1,0,1],随机突变中间的基因,
得到新染色体M'=[1,1,1] 。
3.4. 更新:最后得到的族群中,所有染色体的适应值。
END For
4. 比较所有染色体的适应值,列出最好的那一个染色体为算法最后的解。
※一般使用二元染色体,限制染色体的基因只会等于零或壹。
在此处只是方便解说,所以直接把限制式设成零和壹。
假设我们用二元染色体来解目标函数f(x)=x^2的最大值,限制式为0<=x<=7,x为整数。
用基因算法求解,则需要产生log_2(8)=3个基因,
简单说来,就是用二进位表示一个有限整数值。
(也可以把基因想成电脑的位元数,我们用三个位元来表示一个有限的整数值。)
这样做的话,突变的方法就是直接把某个基因转成零或壹,
不用设定要更改多少值(例如加3、加100或减0.8)(基因算法应该一般不会这样做);
计算适应值时,互相转换二进位与十进位。
基因三个,则可以表达:
111=2^2+2^1+2^0=4+2+1=7
110=2^2+2^1=4+2=6
101=2^2+2^0=4+1=5
100=4
001=1
000=0
011=3
010=2