当前位置:首页 » 操作系统 » 遗传算法精英保留

遗传算法精英保留

发布时间: 2022-07-30 02:19:47

Ⅰ 遗传算法工具箱中设置了elite count不为零的,但是算法运行过程中为什么还会出现目标值下降

我最近也是刚刚看了一点这方面的东西,可能回答得也不对,就给你提供一个思路吧……精英保留指的是在复制过程中保留最优个体,之后染色体组还要经历重组和变异,在这个过程中经营染色体可能被破坏。不知道你是不是把重组和变异的概率设置得比较大,如果概率比较小并且世代数不特别大的话应该不会总是出现这样的情况吧。我觉得你也不用太担心这个,毕竟如果目标函数比较光滑GA还是能找到解的

Ⅱ sorting algorithm的作用,及其包括哪些算法

一、插入排序:直接插入排序、希尔排序
二、交换排序:冒泡排序、快速排序
三、选择排序:直接选择排序、堆排序
四、归并排序
五、分配排序:箱排序、基数排序

Ⅲ 遗传算法执行策略的改进的具体方法(详细)

GA最典型的应用之一是解决行商问题,行商问题是这样的:
已知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短?

GA的思路是,先随机排序产生n条路线,这些路线当然长短不一,然后从中选出路径最短的若干条路线(优胜劣汰),再基于他们产生新的路线(杂交),同时引入一些新的路线(防止最初的基因不好,怎么遗传都产生不了精英),当然,还要保留其中最短的那条(那可是目前来说最nb的精英哦),再取其中最短的若干条路线(优胜劣汰)。。。。一直到我们最nb的精英基本上不能更好为止。整个过程符合进化论观点。

GA是不保证结果最优的,但按照性价比的观点来说,它通常能在较短的时间内获得一个较优结果。

http://www.longen.org/e-k/GA.htm
http://www.wikilib.com/wiki/%e9%81%97%e4%bc%a0%e7%ae%97%e6%b3%95 (这个比较详尽^_^)

很遗憾,这两天国外网站访问不了,不然可以帮你分析个例程

Ⅳ 如何使用遗传算法或神经网络在MATLAB 中求二元函数最小值

% 2008年4月12日修改
%**********************%主函数*****************************************
function main()
global chrom lchrom oldpop newpop varible fitness popsize sumfitness %定义全局变量
global pcross pmutation temp bestfit maxfit gen bestgen length epop efitness val varible2 varible1
global maxgen po pp mp np val1
length=18;
lchrom=30; %染色体长度
popsize=30; %种群大小
pcross=0.6; %交叉概率
pmutation=0.01; %变异概率
maxgen=1000; %最大代数
mp=0.1; %保护概率
%
initpop; % 初始种群
%
for gen=1:maxgen
generation;
end
%
best;
bestfit % 最佳个体适应度值输出
bestgen % 最佳个体所在代数输出
x1= val1(bestgen,1)
x2= val1(bestgen,2)
gen=1:maxgen;
figure
plot(gen,maxfit(1,gen)); % 进化曲线
title('精英保留');
%
%********************** 产生初始种群 ************************************
%
function initpop()
global lchrom oldpop popsize
oldpop=round(rand(popsize,lchrom)); %生成的oldpop为30行12列由0,1构成的矩阵
%其中popsize为种群中个体数目lchrom为染色体编码长度

%
%*************************%产生新一代个体**********************************
%
function generation()
global epop oldpop popsize mp
objfun; %计算适应度值
n=floor(mp*popsize); %需要保留的n个精英个体
for i=1:n
epop(i,:)=oldpop((popsize-n+i),:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end
select; %选择操作
crossover;
mutation;
elite; %精英保留

%
%************************%计算适应度值************************************
%
function objfun()
global lchrom oldpop fitness popsize chrom varible varible1 varible2 length
global maxfit gen epop mp val1
a1=-3; b1=3;
a2=-2;b2=2;
fitness=0;
for i=1:popsize
%前一未知数X1
if length~=0
chrom=oldpop(i,1:length);% before代表节点位置
c=decimal(chrom);
varible1(1,i)=a1+c*(b1-a1)/(2.^length-1); %对应变量值

%后一未知数
chrom=oldpop(i,length+1:lchrom);% before代表节点位置
c=decimal(chrom);
varible2(1,i)=a2+c*(b2-a2)/(2.^(lchrom-length)-1); %对应变量值
else
chrom=oldpop(i,:);
c=decimal(chrom);
varible(1,i)=a1+c*(b1-a1)/(2.^lchrom-1); %对应变量值
end
%两个自变量
fitness(1,i)=4*varible1(1,i)^2-2.1*varible1(1,i)^4+1/3*varible1(1,i)^6+varible1(1,i)*varible2(1,i)-4*varible2(1,i)^2+4*varible2(1,i)^4;
%fitness(1,i) = 21.5+varible1(1,i)*sin(4*pi*varible1(1,i))+varible2(1,i) *sin(20*pi*varible2(1,i));
%一个自变量
%fitness(1,i) = 20*cos(0.25*varible(1,i))-12*sin(0.33*varible(1,i))+40 %个体适应度函数值
end
lsort; % 个体排序
maxfit(1,gen)=max(fitness); %求本代中的最大适应度值maxfit

val1(gen,1)=varible1(1,popsize);
val1(gen,2)=varible2(1,popsize);
%************************二进制转十进制**********************************
%
function c=decimal(chrom)
c=0;
for j=1:size(chrom,2)
c=c+chrom(1,j)*2.^(size(chrom,2)-j);
end
%
%************************* 个体排序 *****************************
% 从小到大顺序排列
%
function lsort()
global popsize fitness oldpop epop efitness mp val varible2 varible1
for i=1:popsize
j=i+1;
while j<=popsize
if fitness(1,i)>fitness(1,j)
tf=fitness(1,i); % 适应度值
tc=oldpop(i,:); % 基因代码
fitness(1,i)=fitness(1,j); % 适应度值互换
oldpop(i,:)=oldpop(j,:); % 基因代码互换
fitness(1,j)=tf;
oldpop(j,:)=tc;
end
j=j+1;
end
val(1,1)=varible1(1,popsize);
val(1,2)=varible2(1,popsize);
end

%*************************转轮法选择操作**********************************
%
function select()
global fitness popsize sumfitness oldpop temp mp np
sumfitness=0; %个体适应度之和
for i=1:popsize % 仅计算(popsize-np-mp)个个体的选择概率
sumfitness=sumfitness+fitness(1,i);
end
%
for i=1:popsize % 仅计算(popsize-np-mp)个个体的选择概率
p(1,i)=fitness(1,i)/sumfitness; % 个体染色体的选择概率
end
%
q=cumsum(p); % 个体染色体的累积概率(内部函数),共(popsize-np-mp)个
%
b=sort(rand(1,popsize)); % 产生(popsize-mp)个随机数,并按升序排列。mp为保护个体数
j=1;
k=1;
while j<=popsize % 从(popsize-mp-np)中选出(popsize-mp)个个体,并放入temp(j,:)中;
if b(1,j)<q(1,k)
temp(j,:)=oldpop(k,:);
j=j+1;
else
k=k+1;
end
end
%
j=popsize+1; % 从统一挪过来的(popsize-np-mp)以后个体——优秀个体中选择
for i=(popsize+1):popsize % 将mp个保留个体放入交配池temp(i,:),以保证群体数popsize
temp(i,:)=oldpop(j,:);
j=j+1;
end
%
%**************************%交叉操作***************************************
%
function crossover()
global temp popsize pcross lchrom mp
n=floor(pcross*popsize); %交叉发生的次数(向下取整)
if rem(n,2)~=0 % 求余
n=n+1; % 保证为偶数个个体,便于交叉操作
end
%
j=1;
m=0;
%
% 对(popsize-mp)个个体将进行随机配对,满足条件者将进行交叉操作(按顺序选择要交叉的对象)
%
for i=1:popsize
p=rand; % 产生随机数
if p<pcross % 满足交叉条件
parent(j,:)=temp(i,:); % 选出1个父本
k(1,j)=i;
j=j+1; % 记录父本个数
m=m+1 ; % 记录杂交次数
if (j==3)&(m<=n) % 满足两个父本(j==3),未超过交叉次数(m<=n)
pos=round(rand*(lchrom-1))+1; % 确定随机位数(四舍五入取整)
for i=1:pos
child1(1,i)=parent(1,i);
child2(1,i)=parent(2,i);
end
for i=(pos+1):lchrom
child1(1,i)=parent(2,i);
child2(1,i)=parent(1,i);
end
i=k(1,1);
j=k(1,2);
temp(i,:)=child1(1,:);
temp(j,:)=child2(1,:);
j=1;
end
end
end
%
%****************************%变异操作*************************************
%
function mutation()
global popsize lchrom pmutation temp newpop oldpop mp
m=lchrom*popsize; % 总的基因数
n=round(pmutation*m); % 变异发生的次数
for i=1:n % 执行变异操作循环
k=round(rand*(m-1))+1; %确定变异位置(四舍五入取整)
j=ceil(k/lchrom); % 确定个体编号(取整)
l=rem(k,lchrom); %确定个体中变位基因的位置(求余)
if l==0
temp(j,lchrom)=~temp(j,lchrom); % 取非操作
else
temp(j,l)=~temp(j,l); % 取非操作
end
end
for i=1:popsize
oldpop(i,:)=temp(i,:); %产生新的个体
end
%
%*********************%精英选择%*******************************************
%
function elite()
global epop oldpop mp popsize
objfun; %计算适应度值
n=floor(mp*popsize); %需要保留的n个精英个体
for i=1:n
oldpop(i,:)=epop(i,:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end;

%
%*********************%最佳个体********************************************
%
function best()
global maxfit bestfit gen maxgen bestgen
bestfit=maxfit(1,1);
gen=2;
while gen<=maxgen
if bestfit<maxfit(1,gen)
bestfit=maxfit(1,gen);
bestgen=gen;
end
gen=gen+1;
end
%**************************************************************************

Ⅳ 请问遗传算法精英保留策略就是指精英选择吗怎么在联赛选择中加入精英策略,请问大致思想是什么

不管采用哪种选择方法,目的是将对结果有利的基因选出来,参加下一次进化。

如果,算法中采用概率类的选择方法,可能会导致本次计算最优的基因(精英)没有被选上。

通常,采用精英保留策略,就是直接将这些(或这个)最优基因,不通过选择,直接参加下一次进化。

理解了,其实是比较好实现的。

但是一定要选择合适的比例。比例太大,进化太慢。

Ⅵ 遗传算法中的排序选择策略选择最优的复制到下一代是不是已经包含了精英保留策略的作用

这得看你的排序选择策略是怎样的。
一种排序是只对当代种群进行排序,这种排序选择方式并不包含精英保留策略的作用。
另一种排序是把上一次种群放一直排序,这种方式包含了精英保留策略的作用。
例如有初始种群包含个体为A1,A2,A3,A4,经过适应度计算后得知最优个体为顺序为A2,A1,A3,A4,经过排序选择后为A2,A2,A1,A3,然后经过交叉和变异后的变为B1,B2,B3,B4,而B1,B2,B3,B4的适应度均没有A2大,那么如果采用第一种排序方式,只对B1-B4排序选择,那么将丢失A2这一优良个体,所以并不包含精英保留作用。如果将B1-B4与A1-A2一起排序,那么由于A2适应度最大,因此必然会选到A2,等效于精英保留策略。

Ⅶ 遗传算法精英保留策略

我认为你的做法是对的,虽然每个人的做法有所不同。《遗传算法原理及应用》这本书中介绍的最优保存策略是这样的:即当前种群中适应度最高的个体不参与交叉运算和变异运算,而是用它来替换掉本代群体中经过交叉、变异等遗传操作后所产生的适应度最低的个体。
如果是在遗传操作之后再采取最优保存,那么上一代的最优个体没准就在操作过程中被破坏了、丢失了。

热点内容
入侵php 发布:2025-01-18 19:01:09 浏览:801
存储的下标范围 发布:2025-01-18 19:00:57 浏览:337
文件夹怎么打开 发布:2025-01-18 18:47:07 浏览:296
杉德卡卡号和密码看哪里 发布:2025-01-18 18:43:27 浏览:712
android返回退出 发布:2025-01-18 18:43:26 浏览:601
linux采集视频 发布:2025-01-18 18:38:38 浏览:638
差异度算法 发布:2025-01-18 18:34:27 浏览:698
电脑全套配置有哪些 发布:2025-01-18 18:32:39 浏览:145
新项目源码 发布:2025-01-18 18:14:48 浏览:517
脚本设计图 发布:2025-01-18 18:06:17 浏览:601