当前位置:首页 » 操作系统 » 遗传算法的交叉算子

遗传算法的交叉算子

发布时间: 2022-05-29 17:53:58

❶ matlab遗传算法中的交叉算子函数应该怎么编写

function [xv,fv]=myGA(fitness,a,b,NP,NG,Pc,Pm,eps)
L = ceil(log2((b-a)/eps+1)); %根据离散精度,确定二进制编码需要的码长
x = zeros(NP,L);
for i=1:NP

x(i,:) = Initial(L); %种群初始化

fx(i) = fitness(Dec(a,b,x(i,:),L)); %个体适应值

end
for k=1:NG

sumfx = sum(fx); %所有个体适应值之和

Px = fx/sumfx; %所有个体适应值的平均值
PPx = 0;

PPx(1) = Px(1);

for i=2:NP %用于轮盘赌策略的概率累加

PPx(i) = PPx(i-1) + Px(i);

end
for i=1:NP

sita = rand();

for n=1:NP

if sita <= PPx(n)

SelFather = n; %根据轮盘赌策略确定的父亲

break;

end

end

Selmother = floor(rand()*(NP-1))+1; %随机选择母亲

posCut = floor(rand()*(L-2)) + 1; %随机确定交叉点

r1 = rand();

if r1<=Pc %交叉

nx(i,1:posCut) = x(SelFather,1:posCut);

nx(i,(posCut+1):L) = x(Selmother,(posCut+1):L);

r2 = rand();

if r2 <= Pm %变异

posMut = round(rand()*(L-1) + 1);

nx(i,posMut) = ~nx(i,posMut);

end

else

nx(i,:) = x(SelFather,:);

end

end
x = nx;

for i=1:NP

fx(i) = fitness(Dec(a,b,x(i,:),L)); %子代适应值

end

end
fv = -inf;
for i=1:NP

fitx = fitness(Dec(a,b,x(i,:),L));

if fitx > fv

fv = fitx; %取个体中的最好值作为最终结果

xv = Dec(a,b,x(i,:),L);

end

end
function result = Initial(length) %初始化函数
for i=1:length
r = rand();
result(i) = round(r);
end
function y = Dec(a,b,x,L) %二进制编码转换为十进制编码
base = 2.^((L-1):-1:0);
y = dot(base,x);
y = a + y*(b-a)/(2^L-1);

❷ 遗传算法具体应用

1、函数优化

函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。

2、组合优化

随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在目前的计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。

此外,GA也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。

3、车间调度

车间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。

从最初的传统车间调度(JSP)问题到柔性作业车间调度问题(FJSP),遗传算法都有优异的表现,在很多算例中都得到了最优或近优解。


(2)遗传算法的交叉算子扩展阅读:

遗传算法的缺点

1、编码不规范及编码存在表示的不准确性。

2、单一的遗传算法编码不能全面地将优化问题的约束表示出来。考虑约束的一个方法就是对不可行解采用阈值,这样,计算的时间必然增加。

3、遗传算法通常的效率比其他传统的优化方法低。

4、遗传算法容易过早收敛。

5、遗传算法对算法的精度、可行度、计算复杂性等方面,还没有有效的定量分析方法。

❸ 遗传算法的核心是什么!

遗传操作的交叉算子。

在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。

交叉算子根据交叉率将种群中的两个个体随机地交换某些基因,能够产生新的基因组合,期望将有益基因组合在一起。

(3)遗传算法的交叉算子扩展阅读

评估编码策略常采用以下3个规范:

a)完备性(completeness):问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现。

b)健全性(soundness): GA空间中的染色体能对应所有问题空间中的候选解。

c)非冗余性(nonrendancy):染色体和候选解一一对应。

目前的几种常用的编码技术有二进制编码,浮点数编码,字符编码,变成编码等。

而二进制编码是目前遗传算法中最常用的编码方法。即是由二进制字符集{0,1}产生通常的0,1字符串来表示问题空间的候选解。

❹ 遗传算法中为什么要用交叉算子

因为交叉算子可以有助于将优良个体的染色体片段遗传给后代,同时交叉算子一般起全局搜索的作用,可以开采未知的空间。

❺ 为什么交叉算子决定遗传算法的全局搜索能力,变异算子决定遗传算法的局部搜索能力

因为一般来说变异算子只是按概率对染色体的某一基因位(自变量的某一维)进行一个微扰动或是取反,而交叉算子是对整个染色体操作的,交叉算子的类型有很多,即使是最简单的单点交叉也是要选择一个点之后交叉两边的部分。所以具有全局搜索能力。

❻ 遗传算法中,什么是标准的交叉算子和变异算子

标准的交叉算子和变异算子应该指的是最基本最简单的交叉和变异,比如交叉有单点交叉和两点交叉,变异一般也是单点变异.

❼ 遗传算法中的交叉算子具体怎么实现~跪求文字描述以及算法描述~。详细点

交叉算子分好几种,有单点交叉、两点交叉、多点交叉、融合交叉、均匀交叉等,最简单的是单点交叉,假设个体的长度为N,那么就随机产生一个(1,N)范围内的整数r,然后将要交叉的两个母代个体从r这个地方截为两段,交换母代个体的后半段,就产生了新子代个体。这就是简单的单点交叉。详细可以看《遗传算法——理论、应用与软件实现》这本书中对交叉算子的介绍。参考资料是一个简单遗传算法的C代码及介绍。

❽ 交叉算子是谁提出的

20世纪90年代后,遗传算法的发展迎来了它的兴盛时期,理论研究和应用研究都成了极其热门的课题。尤其是遗传算法的应用研究显得格外活跃,不但它的应用领域扩大,而且利用遗传算法进行优化和规则学习的能力也显着提高,同时产业应用方面的研究也在摸索之中。此外一些新的理论和方法在应用研究中亦得到了迅速的发展,这些无疑均给遗传算法增添了新的活力。遗传算法的应用研究在不断地发展,已从最初的组合优化求解发展到了很多更新、更工程化的应用领域。

由于遗传算法应用领域在不断地扩展,遗传算法的研究引发了几个不得不令人注目的新动向:一是基于遗传算法的机器学习,这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。二是遗传算法正在和神经网络、模糊推理及混沌理论等智能计算方法不断地渗透和结合。这对开拓21世纪中新的智能计算技术将具有重要的意义。三是并行处理的遗传算法的研究非常活跃。这一研究既有利于促进遗传算法本身的发展,又有利于促进新一代智能计算机体系结构的研究。四是遗传算法正和一个人工生命的崭新研究领域不断地渗透。五是它与进化规划以及进化策略等进化计算理论在日益地结合。EP和ES几乎是和遗传算法几乎是同时发展起来的,同遗传算法一样,它们也是模拟自然界生物进化机制的智能计算方法,但这三者也有各自的特点。目前,关于EP、ES和遗传算法三者间的对比研究和彼此间结合的研究和探讨已成了热点。

在20世纪90年代初,D.Whitey提出了基于领域交叉的交叉算子,它是特别针对用序号表示基因的个体的交叉,并将其应用到了TSP问题中,通过实验对其进行了验证。D.H.Ackley等提出了随即迭代遗传爬山法采用了一种复杂的概率选举机制,此机制中由m个“投票者”来共同决定新个体的值(m表示群体的大小)。实验的最终结果表明,与单点交叉、均匀交叉的神经遗传算法相比,在SIGH所测试的六个函数中,其中有四个表现出更好的性能。所以从总体上看,比现存的其他算法相比,在求解速度上SIGH具有更强的竞争力。

后来又有人将遗传算法与单一方法结合了起来,形成了单一操作的多亲交叉算子。该算子在根据两个母体以及一个额外的个体产生新个体,事实上他的交叉结果与对三个个体用选举交叉产生的结果一致。同时,人们还将三者交叉算子和点交叉、均匀交叉做了对比。对比结果表明,前者比后两个表现出了更好的性能。

国内也有不少的专家和学者对遗传算法的交叉算子进行改进。2002年,戴晓明等应用多种群遗传并行进化的思想,对不同种群基于不同的遗传策略,如变异概率,不同的变异算子等来搜索变量空间,同时还利用种群间迁移算子来进行遗传信息交流,以解决经典遗传算法的收敛到局部最优值问题。在2004年又有专家针对简单遗传算法在较大规模组合优化问题上搜索效率不高的现象,提出了一种用基因块编码的并行遗传算法。该方法所依据的基本框架是粗粒度并行遗传算法,在染色体群体中识别出可能的基因块,然后用基因块作为新的基因单位对染色体重新编码,产生长度较短的染色体,在用重新编码的染色体群体作为下一轮以相同方式演化的初始群体。而到了2005年,针对用并行遗传算法求解TSP的这一问题,又有人指出用弹性策略来维持群体的多样性的方法,使得算法突破了局部收敛,向全局最优解的方向发展。

❾ 请问遗传算法中,什么是标准的交叉算子和变异算子

交叉和变异都是有概率的,在一个种群中按照交叉的概率随机选中的个体,那就是交叉算子呗。变异同理~不知道理解对不对哈~欢迎追问~

❿ 遗传算法的运算过程

遗传操作是模拟生物基因遗传的做法。在遗传算法中,通过编码组成初始群体后,遗传操作的任务就是对群体的个体按照它们对环境适应度(适应度评估)施加一定的操作,从而实现优胜劣汰的进化过程。从优化搜索的角度而言,遗传操作可使问题的解,一代又一代地优化,并逼近最优解。
遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。这三个遗传算子有如下特点:
个体遗传算子的操作都是在随机扰动情况下进行的。因此,群体中个体向最优解迁移的规则是随机的。需要强调的是,这种随机化操作和传统的随机搜索方法是有区别的。遗传操作进行的高效有向的搜索而不是如一般随机搜索方法所进行的无向搜索。
遗传操作的效果和上述三个遗传算子所取的操作概率,编码方法,群体大小,初始群体以及适应度函数的设定密切相关。 从群体中选择优胜的个体,淘汰劣质个体的操作叫选择。选择算子有时又称为再生算子(reproction operator)。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的,目前常用的选择算子有以下几种:适应度比例方法、随机遍历抽样法、局部选择法。
其中轮盘赌选择法 (roulette wheel selection)是最简单也是最常用的选择方法。在该方法中,各个个体的选择概率和其适应度值成比例。设群体大小为n,其中个体i的适应度为,则i 被选择的概率,为遗传算法
显然,概率反映了个体i的适应度在整个群体的个体适应度总和中所占的比例。个体适应度越大。其被选择的概率就越高、反之亦然。计算出群体中各个个体的选择概率后,为了选择交配个体,需要进行多轮选择。每一轮产生一个[0,1]之间均匀随机数,将该随机数作为选择指针来确定被选个体。个体被选后,可随机地组成交配对,以供后面的交叉操作。 在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。
交叉算子根据交叉率将种群中的两个个体随机地交换某些基因,能够产生新的基因组合,期望将有益基因组合在一起。根据编码表示方法的不同,可以有以下的算法:
a)实值重组(real valued recombination)
1)离散重组(discrete recombination)
2)中间重组(intermediate recombination)
3)线性重组(linear recombination)
4)扩展线性重组(extended linear recombination)。
b)二进制交叉(binary valued crossover)
1)单点交叉(single-point crossover)
2)多点交叉(multiple-point crossover)
3)均匀交叉(uniform crossover)
4)洗牌交叉(shuffle crossover)
5)缩小代理交叉(crossover with reced surrogate)。
最常用的交叉算子为单点交叉(one-point crossover)。具体操作是:在个体串中随机设定一个交叉点,实行交叉时,该点前或后的两个个体的部分结构进行互换,并生成两个新个体。下面给出了单点交叉的一个例子:
个体A:1 0 0 1 ↑1 1 1 → 1 0 0 1 0 0 0 新个体
个体B:0 0 1 1 ↑0 0 0 → 0 0 1 1 1 1 1 新个体 变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:
a)实值变异
b)二进制变异。
一般来说,变异算子操作的基本步骤如下:
a)对群中所有个体以事先设定的变异概率判断是否进行变异
b)对进行变异的个体随机选择变异位进行变异。
遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。
遗传算法中,交叉算子因其全局搜索能力而作为主要算子,变异算子因其局部搜索能力而作为辅助算子。遗传算法通过交叉和变异这对相互配合又相互竞争的操作而使其具备兼顾全局和局部的均衡搜索能力。所谓相互配合.是指当群体在进化中陷于搜索空间中某个超平面而仅靠交叉不能摆脱时,通过变异操作可有助于这种摆脱。所谓相互竞争,是指当通过交叉已形成所期望的积木块时,变异操作有可能破坏这些积木块。如何有效地配合使用交叉和变异操作,是目前遗传算法的一个重要研究内容。
基本变异算子是指对群体中的个体码串随机挑选一个或多个基因座并对这些基因座的基因值做变动(以变异概率P.做变动),(0,1)二值码串中的基本变异操作如下:
基因位下方标有*号的基因发生变异。
变异率的选取一般受种群大小、染色体长度等因素的影响,通常选取很小的值,一般取0.001-0.1。 当最优个体的适应度达到给定的阈值,或者最优个体的适应度和群体适应度不再上升时,或者迭代次数达到预设的代数时,算法终止。预设的代数一般设置为100-500代。

热点内容
c语言定义函数数组 发布:2024-10-28 19:09:49 浏览:599
算法的艺术 发布:2024-10-28 19:08:58 浏览:833
安卓手机为什么不能用苹果有线耳机 发布:2024-10-28 18:36:06 浏览:208
mvc脚本 发布:2024-10-28 18:29:33 浏览:649
安卓怎么修改版本号 发布:2024-10-28 18:23:39 浏览:728
面向接口编程的理解 发布:2024-10-28 18:18:56 浏览:597
服务器存储备份 发布:2024-10-28 18:15:59 浏览:789
解压整理 发布:2024-10-28 18:10:57 浏览:697
在线源码转换 发布:2024-10-28 18:03:07 浏览:883
吃鸡ios系统怎么转安卓系统 发布:2024-10-28 17:48:31 浏览:412