導讀:遺傳算法中種群大小必須為偶數嗎...
最佳答案
、 首先組成一組候選解;
、 依據某些適應性條件測算這些候選解的適應度;
、 根據適應度保留某些候選解,放棄其他候選解;
④ 對保留的候選解進行某些操作,生成新的候選解。
在遺傳算法中,上述幾個特征以一種特殊的方式組合在一起:基于染色體群的并行搜索,帶有猜測性質的選擇操作、交換操作和突變操作。這種特殊的組合方式將遺傳算法與其它搜索算法區(qū)別開來。
遺傳算法還具有以下幾方面的特點:
(1)遺傳算法從問題解的串集開始嫂索,而不是從單個解開始。這是遺傳算法與傳統(tǒng)優(yōu)化算法的極大區(qū)別。傳統(tǒng)優(yōu)化算法是從單個初始值迭代求最優(yōu)解的;容易誤入局部最優(yōu)解。遺傳算法從串集開始搜索,覆蓋面大,利于全局擇優(yōu)。
(2)許多傳統(tǒng)搜索算法都是單點搜索算法,容易陷入局部的最優(yōu)解。遺傳算法同時處理群體中的多個個體,即對搜索空間中的多個解進行評估,減少了陷入局部最優(yōu)解的風險,同時算法本身易于實現并行化。
(3)遺傳算法基本上不用搜索空間的知識或其它輔助信息,而僅用適應度函數值來評估個體,在此基礎上進行遺傳操作。適應度函數不僅不受連續(xù)可微的約束,而且其定義域可以任意設定。這一特點使得遺傳算法的應用范圍大大擴展。
(4)遺傳算法不是采用確定性規(guī)則,而是采用概率的變遷規(guī)則來指導他的搜索方向。
(5)具有自組織、自適應和自學習性。遺傳算法利用進化過程獲得的信息自行組織搜索時,硬度大的個體具有較高的生存概率,并獲得更適應環(huán)境的基因結構。由于遺傳算法的整體搜索策略和優(yōu)化搜索方法在計算是不依賴于梯度信息或其它輔助知識,而只需要影響搜索方向的目標函數和相應的適應度函數,所以遺傳算法提供了一種求解復雜系統(tǒng)問題的通用框架,它不依賴于問題的具體領域,對問題的種類有很強的魯棒性,所以廣泛應用于許多科學,下面我們將介紹遺傳算法的一些主要應用領域:
1、 函數優(yōu)化。
函數優(yōu)化是遺傳算法的經典應用領域,也是遺傳算法進行性能評價的常用算例,許多人構造出了各種各樣復雜形式的測試函數:連續(xù)函數和離散函數、凸函數和凹函數、低維函數和高維函數、單峰函數和多峰函數等。對于一些非線性、多模型、多目標的函數優(yōu)化問題,用其它優(yōu)化方法較難求解,而遺傳算法可以方便的得到較好的結果。
2、 組合優(yōu)化
隨著問題規(guī)模的增大,組合優(yōu)化問題的搜索空間也急劇增大,有時在目前的計算上用枚舉法很難求出最優(yōu)解。對這類復雜的問題,人們已經意識到應把主要精力放在尋求滿意解上,而遺傳算法是尋求這種滿意解的最佳工具之一。實踐證明,遺傳算法對于組合優(yōu)化中的NP問題非常有效。例如遺傳算法已經在求解旅行商問題、 背包問題、裝箱問題、圖形劃分問題等方面得到成功的應用。
此外,GA也在生產調度問題、自動控制、機器人學、圖象處理、人工生命、遺傳編碼和機器學習等方面獲得了廣泛的運用。
%--------------------------------------------------------------------------
% JSPGA.m
% 車間作業(yè)調度問題遺傳算法
%--------------------------------------------------------------------------
% 輸入參數列表
% M 遺傳進化迭代次數
% N 種群規(guī)模(取偶數)
% Pm 變異概率
% T m×n的矩陣,存儲m個工件n個工序的加工時間
% P 1×n的向量,n個工序中,每一個工序所具有的機床數目
% 輸出參數列表
% Zp 最優(yōu)的Makespan值
% Y1p 最優(yōu)方案中,各工件各工序的開始時刻,可根據它繪出甘特圖
% Y2p 最優(yōu)方案中,各工件各工序的結束時刻,可根據它繪出甘特圖
% Y3p 最優(yōu)方案中,各工件各工序使用的機器編號
% Xp 最優(yōu)決策變量的值,決策變量是一個實數編碼的m×n矩陣
% LC1 收斂曲線1,各代最優(yōu)個體適應值的記錄
% LC2 收斂曲線2,各代群體平均適應值的記錄
% 最后,程序還將繪出三副圖片:兩條收斂曲線圖和甘特圖(各工件的調度時序圖)
%第一步:變量初始化
[m,n]=size(T);%m是總工件數,n是總工序數
Xp=zeros(m,n);%最優(yōu)決策變量
LC1=zeros(1,M);%收斂曲線1
LC2=zeros(1,N);%收斂曲線2
%第二步:隨機產生初始種群
farm=cell(1,N);%采用細胞結構存儲種群
for k=1:N
X=zeros(m,n);
for j=1:n
for i=1:m
X(i,j)=1+(P(j)-eps)*rand;
end
end
farm{k}=X;
end
counter=0;%設置迭代計數器
while counter
%第三步:交叉
newfarm=cell(1,N);%交叉產生的新種群存在其中
Ser=randperm(N);
for i=1:2:(N-1)
A=farm{Ser(i)};%父代個體
B=farm{Ser(i+1)};
Manner=unidrnd(2);%隨機選擇交叉方式
if Manner==1
cp=unidrnd(m-1);%隨機選擇交叉點
%雙親雙子單點交叉
a=[A(1:cp,:);B((cp+1):m,:)];%子代個體
b=[B(1:cp,:);A((cp+1):m,:)];
else
cp=unidrnd(n-1);%隨機選擇交叉點
a=[A(:,1:cp),B(:,(cp+1):n)];%雙親雙子單點交叉
b=[B(:,1:cp),A(:,(cp+1):n)];
end
newfarm{i}=a;%交叉后的子代存入newfarm
newfarm{i+1}=b;
end
%新舊種群合并
FARM=[farm,newfarm];
%第四步:選擇復制
FITNESS=zeros(1,2*N);
fitness=zeros(1,N);
plotif=0;
for i=1:(2*N)
X=FARM{i};
Z=COST(X,T,P,plotif);%調用計算費用的子函數
FITNESS(i)=Z;
end
%選擇復制采取兩兩隨機配對競爭的方式,具有保留最優(yōu)個體的能力
Ser=randperm(2*N);
for i=1:N
f1=FITNESS(Ser(2*i-1));
f2=FITNESS(Ser(2*i));
if f1<=f2
farm{i}=FARM{Ser(2*i-1)};
fitness(i)=FITNESS(Ser(2*i-1));
else
farm{i}=FARM{Ser(2*i)};
fitness(i)=FITNESS(Ser(2*i));
end
end
%記錄最佳個體和收斂曲線
minfitness=min(fitness)
meanfitness=mean(fitness)
LC1(counter+1)=minfitness;%收斂曲線1,各代最優(yōu)個體適應值的記錄
LC2(counter+1)=meanfitness;%收斂曲線2,各代群體平均適應值的記錄
pos=find(fitness==minfitness);
Xp=farm{pos(1)};
%第五步:變異
for i=1:N
if Pm>rand;%變異概率為Pm
X=farm{i};
I=unidrnd(m);
J=unidrnd(n);
X(I,J)=1+(P(J)-eps)*rand;
farm{i}=X;
end
end
farm{pos(1)}=Xp;
counter=counter+1
end
%輸出結果并繪圖
figure(1);
plotif=1;
X=Xp;
[Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif);
figure(2);
plot(LC1);
figure(3);
plot(LC2);
分享到: