改進的遺傳演算法程序
❶ matlab遺傳演算法改進bp神經網路
你提供的代碼是一個基本的BP神經網路訓練過程。一般都是用GA訓練,之後再用改進動量法繼續訓練,直至最後達到目標。
遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。遺傳演算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(indivial)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。
❷ 遺傳演算法執行策略的改進的具體方法(詳細)
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 (這個比較詳盡^_^)
很遺憾,這兩天國外網站訪問不了,不然可以幫你分析個常式
❸ 遺傳演算法的優缺點
優點:
1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。
另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。
2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。
3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。
另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。
4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。
5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。
缺點:
1、遺傳演算法在進行編碼時容易出現不規范不準確的問題。
2、由於單一的遺傳演算法編碼不能全面將優化問題的約束表示出來,因此需要考慮對不可行解採用閾值,進而增加了工作量和求解時間。
3、遺傳演算法效率通常低於其他傳統的優化方法。
4、遺傳演算法容易出現過早收斂的問題。
(3)改進的遺傳演算法程序擴展閱讀
遺傳演算法的機理相對復雜,在Matlab中已經由封裝好的工具箱命令,通過調用就能夠十分方便的使用遺傳演算法。
函數ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最優解,fval是最優值,@fitnessness是目標函數,nvars是自變數個數,options是其他屬性設置。系統默認求最小值,所以在求最大值時應在寫函數文檔時加負號。
為了設置options,需要用到下面這個函數:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通過這個函數就能夠實現對部分遺傳演算法的參數的設置。
❹ c語言實現*/遺傳演算法改進BP神經網路原理和演算法實現怎麼弄
遺傳演算法有相當大的引用。遺傳演算法在游戲中應用的現狀在遺傳編碼時, 一般將瓦片的坐標作為基因進行實數編碼, 染色體的第一個基因為起點坐標, 最後一個基因為終點坐標, 中間的基因為路徑經過的每一個瓦片的坐標。在生成染色體時, 由起點出發, 隨機選擇當前結點的鄰居節點中的可通過節點, 將其坐標加入染色體, 依此循環, 直到找到目標點為止, 生成了一條染色體。重復上述操作, 直到達到指定的種群規模。遺傳演算法的優點:1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。遺傳演算法的缺點:遺傳演算法在進行編碼時容易出現不規范不準確的問題。
❺ 基本遺傳演算法和改進的遺傳演算法以概率多少收斂
這個沒有確定的數值,對不同的問題概率也不一樣,只能定性地說「以接近於1的概率全局收斂」。
❻ 遺傳演算法改進的模糊C-均值聚類MATLAB源碼範例
function [BESTX,BESTY,ALLX,ALLY]=GAFCM(K,N,Pm,LB,UB,D,c,m)
%% 此函數實現遺傳演算法,用於模糊C-均值聚類
%% 輸入參數列表
% K 迭代次數
% N 種群規模,要求是偶數
% Pm 變異概率
% LB 決策變數的下界,M×1的向量
% UB 決策變數的上界,M×1的向量
% D 原始樣本數據,n×p的矩陣
% c 分類個數
% m 模糊C均值聚類數學模型中的指數
%% 輸出參數列表
% BESTX K×1細胞結構,每一個元素是M×1向量,記錄每一代的最優個體
% BESTY K×1矩陣,記錄每一代的最優個體的評價函數值
% ALLX K×1細胞結構,每一個元素是M×N矩陣,記錄全部個體
% ALLY K×N矩陣,記錄全部個體的評價函數值
%% 第一步:
M=length(LB);%決策變數的個數
%種群初始化,每一列是一個樣本
farm=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:)=x;
end
%輸出變數初始化
ALLX=cell(K,1);%細胞結構,每一個元素是M×N矩陣,記錄每一代的個體
ALLY=zeros(K,N);%K×N矩陣,記錄每一代評價函數值
BESTX=cell(K,1);%細胞結構,每一個元素是M×1向量,記錄每一代的最優個體
BESTY=zeros(K,1);%K×1矩陣,記錄每一代的最優個體的評價函數值
k=1;%迭代計數器初始化
%% 第二步:迭代過程
while k<=K
%% 以下是交叉過程
newfarm=zeros(M,2*N);
Ser=randperm(N);%兩兩隨機配對的配對表
A=farm(:,Ser(1));
B=farm(:,Ser(2));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];%產生子代a
b=[B(1:P0,:);A((P0+1):end,:)];%產生子代b
newfarm(:,2*N-1)=a;%加入子代種群
newfarm(:,2*N)=b;???
for i=1:(N-1)
A=farm(:,Ser(i));
B=farm(:,Ser(i+1));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*i-1)=a;
newfarm(:,2*i)=b;
end
FARM=[farm,newfarm];
%% 選擇復制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
fitness=zeros(1,N);
for i=1:(3*N)
Beta=FARM(:,i);
FITNESS(i)=FIT(Beta,D,c,m);
end
for i=1:N
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
if f1<=f2&&f1<=f3
farm(:,i)=FARM(:,SER(3*i-2));
fitness(:,i)=FITNESS(:,SER(3*i-2));
elseif f2<=f1&&f2<=f3
farm(:,i)=FARM(:,SER(3*i-1));
fitness(:,i)=FITNESS(:,SER(3*i-1));
else
farm(:,i)=FARM(:,SER(3*i));
fitness(:,i)=FITNESS(:,SER(3*i));
end
end
%% 記錄最佳個體和收斂曲線
X=farm;
Y=fitness;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;???
%% 變異
for i=1:N
if Pm>rand&&pos(1)~=i
AA=farm(:,i);
BB=GaussMutation(AA,LB,UB);
farm(:,i)=BB;
end
end
disp(k);
k=k+1;
end
%% 繪圖
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
TempY=BESTY(1:k);
minTempY=min(TempY);
posY=find(TempY==minTempY);
BESTY2(k)=minTempY;
BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函數值')
xlabel('迭代次數')
grid on
忘記寫了,這個是源代碼!謝謝謝謝!
❼ 遺傳演算法的改進
你到的要問什麼?
❽ 誰有用於數據預測的用遺傳演算法改進的BP神經網路程序
給你來一段
%主程序
%數據歸一化預處理
nntwarn off
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
%建立BP網路
net=newff(minmax(pp),[15,1],{'logsig','purelin'},'trainlm');
%應用遺傳演算法對優化網路初始值
in=size(pn,1);
out=size(tn,1);
hi=15;%隱含層節點數
L=in*hi+hi*out+hi+out;%遺傳演算法編碼長度
aa=ones(L,1)*[-1,1];
popu=50;%種群規模
initPpp=initializega(popu,aa,'ISeval');%初始化種群
gen=100;%遺傳世代
%調用GAOT工具箱,其中目標函數定義為ISeval
[x,endPop,bPop,trace]=ga(aa,'ISeval',[],initPpp,[1e-6 1 1],'maxGenTerm',…
,gen,'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%繪收斂曲線圖
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
ylabel('Fittness');
%將得到的權值矩陣賦給尚未開始訓練的BP網路
[w1,b1,w2,b2,a1,a2,se,eval]=IScode(x); %調用自定義編解碼函數
%創建網路
net.iW{1,1}=w1;
net.LW{2,1}=w2;
net.b{1,1}=b1;
net.b{2,1}=b2;
%設置訓練參數
net.trainParam.show=10;
net.trainParam.epochs=5000;
net.trainParam.goal=0.05;
%訓練網路
net=train(net,pp,t);
%自定義目標函數
function [sol, eval] = ISeval(sol,options)
% eval - the fittness of this indivial
% sol - the indivial, returned to allow for Lamarckian evolution
% options - [current_generation]
p=[];%原始輸入數據
t=[];%原始輸出數據
in=size(p,1);
out=size(t,1);
hi=15;%隱含層節點數
L=in*hi+hi*out+hi+out;%遺傳演算法編碼長度
for i=1:L,
x(i)=sol(i);
end;
[w1, b1, w2, b2, a1, a2, se, eval]=IScode(x);
%自定義編解碼函數
function [w1, b1, w2, b2, a1, a2, se, eval]=IScode(x)
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
in=size(pn,1);%輸入層結點數
out=size(tn,1);%隱含層結點數
hi=15;%隱含層結點數
L=in*hi+hi*out+hi+out;%遺傳演算法編碼長度
% 前in*hi個編碼為w1
for i=1:hi,
for j=1:in,
w1(i,j)=x(in*(i-1)+j);
end
end
% 接著的hi*out個編碼為w2
for i=1:out,
for j=1:hi,
w2(i,j)=x(hi*(i-1)+j+in*hi);
end
end
% 接著的hi個編碼為b1
for i=1:hi,
b1(i,1)=x((in*hi+hi*out)+i);
end
% 最後的out個編碼b2
for i=1:out,
b2(i,1)=x((in*hi+hi*out+hi)+i);
end
% 計算hi層與out層的輸出
a1=tansig(w1*pp,b1);
a2=purelin(w2*a1,b2);
% 計算誤差平方和
se=sumsqr(t-a2);eval=1/se; % 遺傳演算法的適應值
❾ 有關遺傳演算法這段程序需要改進的地方
不知道你的問題有多復雜,不過你到CSDN下載頻道或者程序員聯合開發網等網站應該可以搜到你要的程序。
❿ 遺傳演算法的改進研究,先做一個具體應用在用改進演算法對比
我不知道你具體做的是什麼,你的問題我試著讀了幾次,沒讀懂,哈哈!不過遺傳演算法的改進。。。本科畢業設計。。。我的理解是具體可以改進一下「變異」的幾率。。。