1、遗传算法,遗传算法是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是一类随机算法通过作用于染色体上的基因,寻找好的染色体来求解问题。遗传算法对求解问题的本身一无所知,它所需要的仅是对算法所产生的每个染色体进行评价,并基于适应值来选择染色体,使适应性好的染色体比适应性差的染色体有更多的繁殖机会。遗传算法通过有组织地而且是随机地信息交换来重新结合那些适应性好的串,在每一个新的串的群体中作为额外增添,偶尔也要在串结构中尝试用新的位和段来代替原来的部分。,遗传算法,遗传算法从初始串群体开始,按照下面的步骤迭代搜索:使用目标函数计算每个串的适应度。使用选择策略,选择一些适应度最高的串。按照步骤的选择
2、策略,应用遗传算子生成新的串。随机变异这些新串。变异一个串的方法是,随机选择单个位,然后按随机取样方式反转该位,换句话说,就是使用随机方式决定选择的位是否被求反。使用再插入策略,将步骤与步骤生成的新串替换存在的一些串生成下一代群体。若得到解,则停止;否则返回步骤。,遗传算法,一个假设表示为一个二进制串这些串通常称为染色体染色体含有称为基因的子串,基因表示属性值染色体的集合构成一个群体,010110111000010000,基因0表示年龄,基因1表示高度,遗传算法,群体是染色体的集合染色体表示求解问题的当前假设从群体中提取父代染色体进行运算,通过应用遗传算子达到运算目的,010001110010
3、,010001110111,011100110111,011100110010,遗传算法,选择:其目的是为了从当前群体中选出优良的个体,使它们有机会作为父代产生后代个体交叉:随机地选取一个截断点,将父代的染色体在截断点断开,并交换其后半部分变异:对于群体中的某个染色体,随机选取某一位,将该位取反适应度:每个个体对应于优化问题的一个解,每个解对应于一个函数值,函数值越大(小),则表明该解越好,遗传算法,设想一个游戏。你必须进入地牢解救一位公主。为了进入地牢,你必须闯过几道难关,其中一道关口是一扇很重的大门,要求必须将其抬起,而唯一可以抬起这扇门的是一种称为“citegen”的生物。现在有很多ci
4、tegen陪伴着你,每个citegen都试图抬起这扇门,抬起这扇门最高的citegen产生新的后代,这些后代也试图抬起这扇门,重复这个过程。在规定的时间内,若这扇门没有被抬起,游戏将结束。,遗传算法,所有的染色体都用4位数表示,每位数字表示一个基因,可以是0,1,2,3中之一。 抬门获得成功的citegen具有编码为0133的染色体。所有其他citegen具有其他的编码,它们要么抬起一点,要么完全抬不动,因此编码表示citegen的力气,即适应度。,建模,遗传算法,适应度按照下面的规则计算:适应度0若染色体含有0,则适应度适应度+ 1若染色体含有1,则适应度适应度+ 1若染色体含有3,则适应度
5、适应度+ 1若gene0具有0,则适应度适应度+ 1若gene1具有1,则适应度适应度+ 1若gene2具有3,则适应度适应度+ 1若gene3具有3,则适应度适应度+ 1,遗传算法,要做的第一件事是将染色体转换成二进制串, 00表示0 01表示1 10表示2 11表示3 交叉位置:6,即父代染色体被复制下来产生两个后代 然后两个后代交换他们的最后两位 变异:由随机选择一位、求反,遗传算法,例如,染色体0223的适应度为4。若所有7个规则都满足(也就是当染色体是0133),则适应度为7。适应度值可以求负操作,以使任务成为最小化搜索。因此,目标染色体具有-7的适应度。要做的第一件事是将染色体转换
6、成二进制串,这可通过由00表示0,01表示1,10表示2,11表示3来完成。现在每个基因由两位表示,目标染色体有00011111表示。为了简化例子,总是在位置6处应用单点交叉。父染色体被复制下来产生两个后代,然后两个后代交换他们的最后两位。变异由随机选择一位且对他求反组成。,遗传算法,学习过程如下:,生成一个初始随机群体,0000101001101101001110010000110000011011011011100011100001101101,1256891011,-2-3-4-4-6-3-3-3,每个染色体给一个标号(左边的整数值),最右边的列显示的是适应度。当具有相同的适应度时,采用
7、任意方式选择父代,遗传算法,学习过程如下:,选择适应度最好的4个,00111001000011000001101101101101,56811,-4-4-6-3,5与6交叉,0011100000001101,1213,-3-5,8与11交叉,0001100101101111,1415,-4-4,遗传算法,学习过程如下:,整个群体变异,00111001000011000001101101101101 00111000000011010001100101101111,5681112131415,-4-4-6-3-3-5-4-4,00101001010011000011101101001101 00
8、111010010011010011100100101111,5681112131415,-3-4-4-4-3-4-4-5,遗传算法,学习过程如下:,选择适应度最好的4个,01001101010011010011100100101111,11131415,-4-4-4-5,11与13交叉,0100110101001101,1617,-4-4,14与15交叉,0011101100101101,1819,-4-5,遗传算法,学习过程如下:,整个群体变异,0100110101001101001110010010111101001101010011010011101100101101,11131415
9、16171819,-4-4-4-5-4-4-4-5,0101110100001101000110010000111101001111000011010001101101101101,1113141516171819,-4-5-4-5-5-5-6-3,遗传算法,学习过程如下:,选择适应度最好的4个,00001111010011110000110100011011,15161718,-5-5-5-6,15与16交叉,0000111101001111,2021,-5-5,17与18交叉,0000111100011001,2223,-5-4,遗传算法,学习过程如下:,整个群体变异,0000111101
10、001111000011010001101100001111010011110000111100011001,1516171820212223,-5-5-5-6-5-5-5-4,0001111100001111001011010011101100001101000011110010111101011001,1516171820212223,-7-5-5-4-5-5-5-2,遗传算法,对于单点交叉,掩码是一系列连续1直到交换点,串的剩余部分为0,掩码与父串的长度相同。若掩码中的位为0,则在parent1中相应的位传递给offspring1,在parent2中相应的位传递给offspring2。若
11、掩码中的位为1,则在parent1中相应的位传递给offspring2,在parent2中相应的位传递给offspring1。,010001110010,010001110111,011100110111,011100110010,111111110000,掩码,遗传算法,两点交叉使用的掩码具有指定数目的前导0,跟随指定数目的前导1,剩余的为0。,010001110010,011001110111,011100110111,010100110010,000111100000,掩码,遗传算法,均匀交叉,使用随机的、独立于其它位的方法来设置每位从而构造掩码。,010001110010,010001
12、110011,011100110111,011100110110,101101010100,掩码,遗传算法,000101110101,111100011100,练习给12位串两点交叉的一个掩码,000111111000使用这个掩码计算下面父代的两个后代,遗传算法,A 0110010101100000,B 0111110110011010,练习若最优染色体的适应度由如下表示, 0111010111100010使用汉明距离计算下面各串的适应度,C 1111010101100010,D 0010111101101010,E 0111110010101110,遗传算法,遗传算法求解旅行商问题(TSP)
13、问题描述:已知n个城市的地理位置(x,y),求经过所有城市、回到出发城市,并且每个城市只访问一次的最短路径。,遗传算法,1、编码每条路经对应一个个体,个体表示为R=CityNoCityNo互不重复n,n为城市数。例如,n=10,其中一个个体3 1 5 7 8 9 10 4 2 6,2、适应函数:评估路径的长度,越短越好,3.1 交叉采用部分匹配交叉策略例如,对个体A和B:A= 9 8 4 5 6 7 1 3 2 10B= 8 7 1 4 10 3 2 9 6 5 两个个体交叉段互换,而且对个体A,交叉段中由B换来的数,如4 10 3,在A中其它位相同的数进行反换位,即4换为5,10换为6,3换
14、为7;对个体B,交叉段中由A换来的数,如5 6 7,在B中其它位相同的数进行反换位,即5换为4,6换为10,7换为3。这样,得到:A= 9 8 5 4 10 3 1 7 2 6B= 8 3 1 5 6 7 2 9 10 4,遗传算法,3.2 交叉采用有序交叉策略例如,对个体A和B:A= 9 8 4 5 6 7 1 3 2 10B= 8 7 1 4 10 3 2 9 6 5首先,中间部分复制A1= X X X 5 6 7 1 X X XB1= X X X 4 10 3 2 X X X其次,从第2交叉点开始、顺序复制A2= 3 2 10 9 8 4 5 6 7 1B2= 9 6 5 8 7 1 4
15、 10 3 2再次,移出与另一双亲交叉部分的重复基因A3= 3 2 10 9 8 4 5 6 7 1B3= 9 6 5 8 7 1 4 10 3 2,遗传算法,3.2 交叉采用有序交叉策略再次,移出与另一双亲交叉部分的重复基因A3= 3 2 10 9 8 4 5 6 7 1B3= 9 6 5 8 7 1 4 10 3 2得到:A4= 9 8 5 6 7 1B4= 9 8 4 10 3 2最后,将交叉部分插入到对应位置,结果为A5= 9 8 5 4 10 3 2 6 7 1B5= 9 8 4 5 6 7 1 10 3 2,遗传算法,遗传算法,4、变异 随机在个体上选出两个变异位置,然后将两个位置上的城市序号进行交换。如:A= 9 8 4 5 6 7 1 3 2 10变异为:A= 9 7 4 5 6 8 1 3 2 10,