當前位置:首頁 » 操作系統 » 遺傳演算法精英保留

遺傳演算法精英保留

發布時間: 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,等效於精英保留策略。

Ⅶ 遺傳演算法精英保留策略

我認為你的做法是對的,雖然每個人的做法有所不同。《遺傳演算法原理及應用》這本書中介紹的最優保存策略是這樣的:即當前種群中適應度最高的個體不參與交叉運算和變異運算,而是用它來替換掉本代群體中經過交叉、變異等遺傳操作後所產生的適應度最低的個體。
如果是在遺傳操作之後再採取最優保存,那麼上一代的最優個體沒准就在操作過程中被破壞了、丟失了。

熱點內容
matlab遺傳演算法約束 發布:2025-01-18 15:31:33 瀏覽:909
果凍java 發布:2025-01-18 15:25:59 瀏覽:695
電腦與時間伺服器同步間隔 發布:2025-01-18 15:21:28 瀏覽:54
蘋果手機apple登錄密碼在手機哪裡 發布:2025-01-18 15:13:43 瀏覽:380
吃雞去哪裡下手游安卓 發布:2025-01-18 15:10:59 瀏覽:668
東方財富dk指標源碼 發布:2025-01-18 14:45:53 瀏覽:435
陌陌登陸密碼是什麼 發布:2025-01-18 14:36:54 瀏覽:848
海龜編譯器代碼 發布:2025-01-18 14:16:51 瀏覽:34
大閘蟹網站源碼 發布:2025-01-18 14:12:19 瀏覽:105
電腦伺服器日期怎麼改 發布:2025-01-18 14:05:03 瀏覽:687