老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

遺傳算法vb.net 遺傳算法的優(yōu)缺點(diǎn)

遺傳算法出來(lái)的結(jié)果不穩(wěn)定

有兩種可能:1.有多種組合等于X,因此組合有多種

目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、蓮都網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

2.你的遺傳算法容易局部收斂

對(duì)于2解決辦法:增加判斷,當(dāng)種群最優(yōu)染色體一直不變持續(xù)N代,重新初始化一個(gè)種群,或者往種群中注入新的隨機(jī)染色體來(lái)跳出局部收斂區(qū)域。

對(duì)補(bǔ)充的回答:

遺傳算法本身就是一種智能尋優(yōu)的隨機(jī)算法,搜索過(guò)程中存在隨機(jī)性,在具有多個(gè)最優(yōu)解的情況下,很難每次都尋優(yōu)到同一組參數(shù)組合,因?yàn)槊看蔚乃阉髀窂绞遣煌摹?/p>

如果樓主真是尋求最后結(jié)果一樣的效果的話,可以先得到一組最優(yōu)組合數(shù)字集合S,按從小到大排列處理后變?yōu)镾'(n1,n2...ni)

然后搜索過(guò)程中的某組數(shù)字集合Q的目標(biāo)函數(shù)

既滿足:

相加的和最接近X,

還要滿足:

1.數(shù)字個(gè)數(shù)=i

2.臨時(shí)將Q從小達(dá)到排列,各個(gè)位置上的元素和S'的元素最接近

這樣可能會(huì)增加很多計(jì)算時(shí)間,但理論上是可以每次都得到S

請(qǐng)問(wèn)什么是遺傳算法,并給兩個(gè)例子

遺傳算法(Genetic Algorithm, GA)是近幾年發(fā)展起來(lái)的一種嶄新的全局優(yōu)化算法,它借

用了生物遺傳學(xué)的觀點(diǎn),通過(guò)自然選擇、遺傳、變異等作用機(jī)制,實(shí)現(xiàn)各個(gè)個(gè)體的適應(yīng)性

的提高。這一點(diǎn)體現(xiàn)了自然界中"物競(jìng)天擇、適者生存"進(jìn)化過(guò)程。1962年Holland教授首次

提出了GA算法的思想,從而吸引了大批的研究者,迅速推廣到優(yōu)化、搜索、機(jī)器學(xué)習(xí)等方

面,并奠定了堅(jiān)實(shí)的理論基礎(chǔ)。 用遺傳算法解決問(wèn)題時(shí),首先要對(duì)待解決問(wèn)題的模型結(jié)構(gòu)

和參數(shù)進(jìn)行編碼,一般用字符串表示,這個(gè)過(guò)程就將問(wèn)題符號(hào)化、離散化了。也有在連續(xù)

空間定義的GA(Genetic Algorithm in Continuous Space, GACS),暫不討論。

一個(gè)串行運(yùn)算的遺傳算法(Seguential Genetic Algoritm, SGA)按如下過(guò)程進(jìn)行:

(1) 對(duì)待解決問(wèn)題進(jìn)行編碼;

(2) 隨機(jī)初始化群體X(0):=(x1, x2, … xn);

(3) 對(duì)當(dāng)前群體X(t)中每個(gè)個(gè)體xi計(jì)算其適應(yīng)度F(xi),適應(yīng)度表示了該個(gè)體的性能好

壞;

(4) 應(yīng)用選擇算子產(chǎn)生中間代Xr(t);

(5) 對(duì)Xr(t)應(yīng)用其它的算子,產(chǎn)生新一代群體X(t+1),這些算子的目的在于擴(kuò)展有限

個(gè)體的覆蓋面,體現(xiàn)全局搜索的思想;

(6) t:=t+1;如果不滿足終止條件繼續(xù)(3)。

GA中最常用的算子有如下幾種:

(1) 選擇算子(selection/reproduction): 選擇算子從群體中按某一概率成對(duì)選擇個(gè)

體,某個(gè)體xi被選擇的概率Pi與其適應(yīng)度值成正比。最通常的實(shí)現(xiàn)方法是輪盤(pán)賭(roulett

e wheel)模型。

(2) 交叉算子(Crossover): 交叉算子將被選中的兩個(gè)個(gè)體的基因鏈按概率pc進(jìn)行交叉

,生成兩個(gè)新的個(gè)體,交叉位置是隨機(jī)的。其中Pc是一個(gè)系統(tǒng)參數(shù)。

(3) 變異算子(Mutation): 變異算子將新個(gè)體的基因鏈的各位按概率pm進(jìn)行變異,對(duì)

二值基因鏈(0,1編碼)來(lái)說(shuō)即是取反。

上述各種算子的實(shí)現(xiàn)是多種多樣的,而且許多新的算子正在不斷地提出,以改進(jìn)GA的

某些性能。系統(tǒng)參數(shù)(個(gè)體數(shù)n,基因鏈長(zhǎng)度l,交叉概率Pc,變異概率Pm等)對(duì)算法的收斂速度

及結(jié)果有很大的影響,應(yīng)視具體問(wèn)題選取不同的值。

GA的程序設(shè)計(jì)應(yīng)考慮到通用性,而且要有較強(qiáng)的適應(yīng)新的算子的能力。OOP中的類的繼

承為我們提供了這一可能。

定義兩個(gè)基本結(jié)構(gòu):基因(ALLELE)和個(gè)體(INDIVIDUAL),以個(gè)體的集合作為群體類TP

opulation的數(shù)據(jù)成員,而TSGA類則由群體派生出來(lái),定義GA的基本操作。對(duì)任一個(gè)應(yīng)用實(shí)

例,可以在TSGA類上派生,并定義新的操作。

TPopulation類包含兩個(gè)重要過(guò)程:

FillFitness: 評(píng)價(jià)函數(shù),對(duì)每個(gè)個(gè)體進(jìn)行解碼(decode)并計(jì)算出其適應(yīng)度值,具體操

作在用戶類中實(shí)現(xiàn)。

Statistic: 對(duì)當(dāng)前群體進(jìn)行統(tǒng)計(jì),如求總適應(yīng)度sumfitness、平均適應(yīng)度average、最好

個(gè)體fmax、最壞個(gè)體fmin等。

TSGA類在TPopulation類的基礎(chǔ)上派生,以GA的系統(tǒng)參數(shù)為構(gòu)造函數(shù)的參數(shù),它有4個(gè)

重要的成員函數(shù):

Select: 選擇算子,基本的選擇策略采用輪盤(pán)賭模型(如圖2)。輪盤(pán)經(jīng)任意旋轉(zhuǎn)停止

后指針?biāo)赶騾^(qū)域被選中,所以fi值大的被選中的概率就大。

Crossover: 交叉算子,以概率Pc在兩基因鏈上的隨機(jī)位置交換子串。

Mutation: 變異算子,以概率Pm對(duì)基因鏈上每一個(gè)基因進(jìn)行隨機(jī)干擾(取反)。

Generate: 產(chǎn)生下代,包括了評(píng)價(jià)、統(tǒng)計(jì)、選擇、交叉、變異等全部過(guò)程,每運(yùn)行一

次,產(chǎn)生新的一代。

SGA的結(jié)構(gòu)及類定義如下(用C++編寫(xiě)):

[code] typedef char ALLELE; // 基因類型

typedef struct{

ALLELE *chrom;

float fitness; // fitness of Chromosome

}INDIVIDUAL; // 個(gè)體定義

class TPopulation{ // 群體類定義

public:

int size; // Size of population: n

int lchrom; // Length of chromosome: l

float sumfitness, average;

INDIVIDUAL *fmin, *fmax;

INDIVIDUAL *pop;

TPopulation(int popsize, int strlength);

~TPopulation();

inline INDIVIDUAL Individual(int i){ return pop[i];};

void FillFitness(); // 評(píng)價(jià)函數(shù)

virtual void Statistics(); // 統(tǒng)計(jì)函數(shù)

};

class TSGA : public TPopulation{ // TSGA類派生于群體類

public:

float pcross; // Probability of Crossover

float pmutation; // Probability of Mutation

int gen; // Counter of generation

TSGA(int size, int strlength, float pm=0.03, float pc=0.6):

TPopulation(size, strlength)

{gen=0; pcross=pc; pmutation=pm; } ;

virtual INDIVIDUAL Select();

virtual void Crossover(INDIVIDUAL parent1, INDIVIDUAL parent2,

INDIVIDUAL child1, INDIVIDUAL child2);

child1, INDIVIDUAL child2);

virtual ALLELE Mutation(ALLELE alleleval);

virtual void Generate(); // 產(chǎn)生新的一代

};

用戶GA類定義如下:

class TSGAfit : public TSGA{

public:

TSGAfit(int size,float pm=0.0333,float pc=0.6)

:TSGA(size,24,pm,pc){};

void print();

}; [/code]

由于GA是一個(gè)概率過(guò)程,所以每次迭代的情況是不一樣的;系統(tǒng)參數(shù)不同,迭代情況

也不同。在實(shí)驗(yàn)中參數(shù)一般選取如下:個(gè)體數(shù)n=50-200,變異概率Pm=0.03, 交叉概率Pc=

0.6。變異概率太大,會(huì)導(dǎo)致不穩(wěn)定。

參考文獻(xiàn)

● Goldberg D E. Genetic Algorithm in Search, Optimization, and machine

Learning. Addison-Wesley, Reading, MA, 1989

● 陳根社、陳新海,"遺傳算法的研究與進(jìn)展",《信息與控制》,Vol.23,

NO.4, 1994, PP215-222

● Vittorio Maniezzo, "Genetic Evolution of the Topology and Weight Distri

bution of the Neural Networks", IEEE, Trans. on Neural Networks, Vol.5, NO

.1, 1994, PP39-53

● Xiaofeng Qi, Francesco Palmieri, "Theoretical Analysis of Evolutionary

Algorithms with an Infinite Population Size in Continuous Space. Part Ⅰ

l Networks, Vol.5, NO.1, 1994, PP102-119

● Xiaofeng Qi, Francesco Palmieri, "Theoretical Analysis of Evolutionary

Algorithms with an Infinite Population Size in Continuous Space. Part Ⅱ

al Networks, Vol.5, NO.1, 1994, PP102-119

● Gunter Rudolph, Convergence Analysis of Canonical Genetic Algorithms, I

EEE, Trans. on Neural Networks, Vol.5, NO.1, 1994, PP96-101

● A E Eiben, E H L Aarts, K M Van Hee. Gloable convergence of genetic alg

orithms: A Markov chain analysis. in Parallel Problem Solving from Nat

ure. H.-P.Schwefel, R.Manner, Eds. Berlin and Heidelberg: Springer, 1991

, PP4-12

● Wirt Atmar, "Notes on the Simulation of Evolution", IEEE, Trans. on Neu

ral Networks, Vol.5, NO.1, 1994, PP130-147

● Anthony V. Sebald, Jennifer Schlenzig, "Minimax Design of Neural Net Co

ntrollers for Highly Uncertain Plants", IEEE, Trans. on Neural Networks, V

ol.5, NO.1, 1994, PP73-81

● 方建安、邵世煌,"采用遺傳算法自學(xué)習(xí)模型控制規(guī)則",《自動(dòng)化理論、技術(shù)與應(yīng)

用》,中國(guó)自動(dòng)化學(xué)會(huì) 第九屆青年學(xué)術(shù)年會(huì)論文集,1993, PP233-238

● 方建安、邵世煌,"采用遺傳算法學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)控制器",《控制與決策》,199

3,8(3), PP208-212

● 蘇素珍、土屋喜一,"使用遺傳算法的迷宮學(xué)習(xí)",《機(jī)器人》,Vol.16,NO.5,199

4, PP286-289

● M.Srinivas, L.M.Patnaik, "Adaptive Probabilities of Crossover and Mutat

ion", IEEE Trans. on S.M.C, Vol.24, NO.4, 1994 of Crossover and Mutation",

IEEE Trans. on S.M.C, Vol.24, NO.4, 1994

● Daihee Park, Abraham Kandel, Gideon Langholz, "Genetic-Based New Fuzzy

Reasoning Models with Application to Fuzzy Control", IEEE Trans. S. M. C,

Vol.24, NO.1, PP39-47, 1994

● Alen Varsek, Tanja Urbancic, Bodgan Filipic, "Genetic Algorithms in Con

troller Design and Tuning", IEEE Trans. S. M. C, Vol.23, NO.5, PP1330-13

39, 1993

遺傳算法具體應(yīng)用

1、函數(shù)優(yōu)化

函數(shù)優(yōu)化是遺傳算法的經(jīng)典應(yīng)用領(lǐng)域,也是遺傳算法進(jìn)行性能評(píng)價(jià)的常用算例,許多人構(gòu)造出了各種各樣復(fù)雜形式的測(cè)試函數(shù):連續(xù)函數(shù)和離散函數(shù)、凸函數(shù)和凹函數(shù)、低維函數(shù)和高維函數(shù)、單峰函數(shù)和多峰函數(shù)等。

2、組合優(yōu)化

隨著問(wèn)題規(guī)模的增大,組合優(yōu)化問(wèn)題的搜索空間也急劇增大,有時(shí)在目前的計(jì)算上用枚舉法很難求出最優(yōu)解。對(duì)這類復(fù)雜的問(wèn)題,人們已經(jīng)意識(shí)到應(yīng)把主要精力放在尋求滿意解上,而遺傳算法是尋求這種滿意解的最佳工具之一。

此外,GA也在生產(chǎn)調(diào)度問(wèn)題、自動(dòng)控制、機(jī)器人學(xué)、圖象處理、人工生命、遺傳編碼和機(jī)器學(xué)習(xí)等方面獲得了廣泛的運(yùn)用。

3、車(chē)間調(diào)度

車(chē)間調(diào)度問(wèn)題是一個(gè)典型的NP-Hard問(wèn)題,遺傳算法作為一種經(jīng)典的智能算法廣泛用于車(chē)間調(diào)度中,很多學(xué)者都致力于用遺傳算法解決車(chē)間調(diào)度問(wèn)題,現(xiàn)今也取得了十分豐碩的成果。

從最初的傳統(tǒng)車(chē)間調(diào)度(JSP)問(wèn)題到柔性作業(yè)車(chē)間調(diào)度問(wèn)題(FJSP),遺傳算法都有優(yōu)異的表現(xiàn),在很多算例中都得到了最優(yōu)或近優(yōu)解。

擴(kuò)展資料:

遺傳算法的缺點(diǎn)

1、編碼不規(guī)范及編碼存在表示的不準(zhǔn)確性。

2、單一的遺傳算法編碼不能全面地將優(yōu)化問(wèn)題的約束表示出來(lái)。考慮約束的一個(gè)方法就是對(duì)不可行解采用閾值,這樣,計(jì)算的時(shí)間必然增加。

3、遺傳算法通常的效率比其他傳統(tǒng)的優(yōu)化方法低。

4、遺傳算法容易過(guò)早收斂。

5、遺傳算法對(duì)算法的精度、可行度、計(jì)算復(fù)雜性等方面,還沒(méi)有有效的定量分析方法。

參考資料來(lái)源:百度百科-遺傳算法

遺傳算法怎么調(diào)用神經(jīng)網(wǎng)絡(luò)訓(xùn)練好的模型

遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)建模借鑒別人的程序做出的仿真,最近才有時(shí)間整理。

目標(biāo):

對(duì)y=x1^2+x2^2非線性系統(tǒng)進(jìn)行建模,用1500組數(shù)據(jù)對(duì)網(wǎng)絡(luò)進(jìn)行構(gòu)建網(wǎng)絡(luò),500組數(shù)據(jù)測(cè)試網(wǎng)絡(luò)。由于BP神經(jīng)網(wǎng)絡(luò)初始神經(jīng)元之間的權(quán)值和閾值一般隨機(jī)選擇,因此容易陷入局部最小值。本方法使用遺傳算法優(yōu)化初始神經(jīng)元之間的權(quán)值和閾值,并對(duì)比使用遺傳算法前后的效果。

步驟:

未經(jīng)遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)建模

1、 隨機(jī)生成2000組兩維隨機(jī)數(shù)(x1,x2),并計(jì)算對(duì)應(yīng)的輸出y=x1^2+x2^2,前1500組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)input_train,后500組數(shù)據(jù)作為測(cè)試數(shù)據(jù)input_test。并將數(shù)據(jù)存儲(chǔ)在data中待遺傳算法中使用相同的數(shù)據(jù)。

2、 數(shù)據(jù)預(yù)處理:歸一化處理。

3、 構(gòu)建BP神經(jīng)網(wǎng)絡(luò)的隱層數(shù),次數(shù),步長(zhǎng),目標(biāo)。

4、 使用訓(xùn)練數(shù)據(jù)input_train訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)net。

5、 用測(cè)試數(shù)據(jù)input_test測(cè)試神經(jīng)網(wǎng)絡(luò),并將預(yù)測(cè)的數(shù)據(jù)反歸一化處理。

6、 分析預(yù)測(cè)數(shù)據(jù)與期望數(shù)據(jù)之間的誤差。

遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)建模

1、 讀取前面步驟中保存的數(shù)據(jù)data;

2、 對(duì)數(shù)據(jù)進(jìn)行歸一化處理;

3、 設(shè)置隱層數(shù)目;

4、 初始化進(jìn)化次數(shù),種群規(guī)模,交叉概率,變異概率

5、 對(duì)種群進(jìn)行實(shí)數(shù)編碼,并將預(yù)測(cè)數(shù)據(jù)與期望數(shù)據(jù)之間的誤差作為適應(yīng)度函數(shù);

6、 循環(huán)進(jìn)行選擇、交叉、變異、計(jì)算適應(yīng)度操作,直到達(dá)到進(jìn)化次數(shù),得到最優(yōu)的初始權(quán)值和閾值;

7、 將得到最佳初始權(quán)值和閾值來(lái)構(gòu)建BP神經(jīng)網(wǎng)絡(luò);

8、 使用訓(xùn)練數(shù)據(jù)input_train訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)net;

9、 用測(cè)試數(shù)據(jù)input_test測(cè)試神經(jīng)網(wǎng)絡(luò),并將預(yù)測(cè)的數(shù)據(jù)反歸一化處理;

10、 分析預(yù)測(cè)數(shù)據(jù)與期望數(shù)據(jù)之間的誤差。

關(guān)于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的問(wèn)題

程序:

1、未經(jīng)遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)建模

clear;

clc;

%%%%%%%%%%%%%輸入?yún)?shù)%%%%%%%%%%%%%%

N=2000; %數(shù)據(jù)總個(gè)數(shù)

M=1500; %訓(xùn)練數(shù)據(jù)

%%%%%%%%%%%%%訓(xùn)練數(shù)據(jù)%%%%%%%%%%%%%%

for i=1:N

input(i,1)=-5+rand*10;

input(i,2)=-5+rand*10;

end

output=input(:,1).^2+input(:,2).^2;

save data input output

load data.mat

%從1到N隨機(jī)排序

k=rand(1,N);

[m,n]=sort(k);

%找出訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)

input_train=input(n(1:M),:)';

output_train=output(n(1:M),:)';

input_test=input(n((M+1):N),:)';

output_test=output(n((M+1):N),:)';

%數(shù)據(jù)歸一化

[inputn,inputs]=mapminmax(input_train);

[outputn,outputs]=mapminmax(output_train);

%構(gòu)建BP神經(jīng)網(wǎng)絡(luò)

net=newff(inputn,outputn,5);

net.trainParam.epochs=100;

net.trainParam.lr=0.1;

net.trainParam.goal=0.0000004;

%BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練

net=train(net,inputn,outputn);

%測(cè)試樣本歸一化

inputn_test=mapminmax('apply',input_test,inputs);

%BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)

an=sim(net,inputn_test);

%%網(wǎng)絡(luò)得到數(shù)據(jù)反歸一化

BPoutput=mapminmax('reverse',an,outputs);

figure(1)

%plot(BPoutput,':og');

scatter(1:(N-M),BPoutput,'rx');

hold on;

%plot(output_test,'-*');

scatter(1:(N-M),output_test,'o');

legend('預(yù)測(cè)輸出','期望輸出','fontsize',12);

title('BP網(wǎng)絡(luò)預(yù)測(cè)輸出','fontsize',12);

xlabel('樣本','fontsize',12);

xlabel('優(yōu)化前輸出的誤差','fontsize',12);

figure(2)

error=BPoutput-output_test;

plot(1:(N-M),error);

xlabel('樣本','fontsize',12);

ylabel('優(yōu)化前輸出的誤差','fontsize',12);

%save net net inputs outputs

2、遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)建模

(1)主程序

%清空環(huán)境變量

clc

clear

%讀取數(shù)據(jù)

load data.mat

%節(jié)點(diǎn)個(gè)數(shù)

inputnum=2;

hiddennum=5;

outputnum=1;

%訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)

input_train=input(1:1500,:)';

input_test=input(1501:2000,:)';

output_train=output(1:1500)';

output_test=output(1501:2000)';

%選連樣本輸入輸出數(shù)據(jù)歸一化

[inputn,inputps]=mapminmax(input_train);

[outputn,outputps]=mapminmax(output_train);

%構(gòu)建網(wǎng)絡(luò)

net=newff(inputn,outputn,hiddennum);

%% 遺傳算法參數(shù)初始化

maxgen=10; %進(jìn)化代數(shù),即迭代次數(shù)

sizepop=30; %種群規(guī)模

pcross=[0.3]; %交叉概率選擇,0和1之間

pmutation=[0.1]; %變異概率選擇,0和1之間

%節(jié)點(diǎn)總數(shù)

numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;

lenchrom=ones(1,numsum);

bound=[-3*ones(numsum,1) 3*ones(numsum,1)]; %數(shù)據(jù)范圍

%------------------------------------------------------種群初始化------------------------------%------------------

--------

individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %將種群信息定義為一個(gè)結(jié)構(gòu)體

%avgfitness=[]; %每一代種群的平均適應(yīng)度

bestfitness=[]; %每一代種群的最佳適應(yīng)度

bestchrom=[]; %適應(yīng)度最好的染色體

%初始化種群

for i=1:sizepop

%隨機(jī)產(chǎn)生一個(gè)種群

individuals.chrom(i,:)=Code(lenchrom,bound); %編碼

x=individuals.chrom(i,:);

%計(jì)算適應(yīng)度

individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn); %染色體的適應(yīng)度

end

%找最好的染色體

[bestfitness bestindex]=min(individuals.fitness);

bestchrom=individuals.chrom(bestindex,:); %最好的染色體

%avgfitness=sum(individuals.fitness)/sizepop; %染色體的平均適應(yīng)度

% 記錄每一代進(jìn)化中最好的適應(yīng)度和平均適應(yīng)度

%trace=[avgfitness bestfitness];

%% 迭代求解最佳初始閥值和權(quán)值

% 進(jìn)化開(kāi)始

for i=1:maxgen

i

% 選擇

individuals=Select(individuals,sizepop);

% avgfitness=sum(individuals.fitness)/sizepop;

%交叉

individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);

% 變異

individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);

% 計(jì)算適應(yīng)度

for j=1:sizepop

x=individuals.chrom(j,:); %解碼

individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);

end

%找到最小和最大適應(yīng)度的染色體及它們?cè)诜N群中的位置

[newbestfitness,newbestindex]=min(individuals.fitness);

[worestfitness,worestindex]=max(individuals.fitness);

% 代替上一次進(jìn)化中最好的染色體

if bestfitnessnewbestfitness

bestfitness=newbestfitness;

bestchrom=individuals.chrom(newbestindex,:);

end

individuals.chrom(worestindex,:)=bestchrom;

individuals.fitness(worestindex)=bestfitness;

%avgfitness=sum(individuals.fitness)/sizepop;

% trace=[trace;avgfitness bestfitness]; %記錄每一代進(jìn)化中最好的適應(yīng)度和平均適應(yīng)度

end

%% 遺傳算法結(jié)果分析

%figure(3)

%[r c]=size(trace);

%plot([1:r]',trace(:,2),'b--');

%title(['適應(yīng)度曲線 ' '終止代數(shù)=' num2str(maxgen)]);

%xlabel('進(jìn)化代數(shù)');ylabel('適應(yīng)度');

%legend('平均適應(yīng)度','最佳適應(yīng)度');

disp('適應(yīng)度 變量');

x=bestchrom;

%% 把最優(yōu)初始閥值權(quán)值賦予網(wǎng)絡(luò)預(yù)測(cè)

% %用遺傳算法優(yōu)化的BP網(wǎng)絡(luò)進(jìn)行值預(yù)測(cè)

w1=x(1:inputnum*hiddennum);

B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);

w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);

B2=x

(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net.iw{1,1}=reshape(w1,hiddennum,inputnum);

net.lw{2,1}=reshape(w2,outputnum,hiddennum);

net.b{1}=reshape(B1,hiddennum,1);

net.b{2}=B2;

%% BP網(wǎng)絡(luò)訓(xùn)練

%網(wǎng)絡(luò)進(jìn)化參數(shù)

net.trainParam.epochs=100;

net.trainParam.lr=0.1;

%net.trainParam.goal=0.00001;

%網(wǎng)絡(luò)訓(xùn)練

[net,per2]=train(net,inputn,outputn);

%% BP網(wǎng)絡(luò)預(yù)測(cè)

%數(shù)據(jù)歸一化

inputn_test=mapminmax('apply',input_test,inputps);

an=sim(net,inputn_test);

test_simu=mapminmax('reverse',an,outputps);

error=test_simu-output_test;

%figure(4);

hold on;plot(1:500,error,'r');

legend('優(yōu)化前的誤差','優(yōu)化后的誤差','fontsize',12)

(2)編碼子程序code.m

function ret=Code(lenchrom,bound)

%本函數(shù)將變量編碼成染色體,用于隨機(jī)初始化一個(gè)種群

% lenchrom input : 染色體長(zhǎng)度

% bound input : 變量的取值范圍

% ret output: 染色體的編碼值

flag=0;

while flag==0

pick=rand(1,length(lenchrom));

ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %線性插值,編碼結(jié)果以實(shí)數(shù)向量存入ret中

flag=test(lenchrom,bound,ret); %檢驗(yàn)染色體的可行性

end

(3)適應(yīng)度函數(shù)fun.m

function error = fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)

%該函數(shù)用來(lái)計(jì)算適應(yīng)度值

%x input 個(gè)體

%inputnum input 輸入層節(jié)點(diǎn)數(shù)

%outputnum input 隱含層節(jié)點(diǎn)數(shù)

%net input 網(wǎng)絡(luò)

%inputn input 訓(xùn)練輸入數(shù)據(jù)

%outputn input 訓(xùn)練輸出數(shù)據(jù)

%error output 個(gè)體適應(yīng)度值

%提取

w1=x(1:inputnum*hiddennum);

B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);

w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);

B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net=newff(inputn,outputn,hiddennum);

%網(wǎng)絡(luò)進(jìn)化參數(shù)

net.trainParam.epochs=20;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00001;

net.trainParam.show=100;

net.trainParam.showWindow=0;

%網(wǎng)絡(luò)權(quán)值賦值

net.iw{1,1}=reshape(w1,hiddennum,inputnum);

net.lw{2,1}=reshape(w2,outputnum,hiddennum);

net.b{1}=reshape(B1,hiddennum,1);

net.b{2}=B2;

%網(wǎng)絡(luò)訓(xùn)練

net=train(net,inputn,outputn);

an=sim(net,inputn);

error=sum(abs(an-outputn));

(4)選擇操作Select.m

function ret=select(individuals,sizepop)

% 該函數(shù)用于進(jìn)行選擇操作

% individuals input 種群信息

% sizepop input 種群規(guī)模

% ret output 選擇后的新種群

%求適應(yīng)度值倒數(shù)

[a bestch]=min(individuals.fitness);

%b=individuals.chrom(bestch);

%c=individuals.fitness(bestch);

fitness1=10./individuals.fitness; %individuals.fitness為個(gè)體適應(yīng)度值

%個(gè)體選擇概率

sumfitness=sum(fitness1);

sumf=fitness1./sumfitness;

%采用輪盤(pán)賭法選擇新個(gè)體

index=[];

for i=1:sizepop %sizepop為種群數(shù)

pick=rand;

while pick==0

pick=rand;

end

for i=1:sizepop

pick=pick-sumf(i);

if pick0

index=[index i];

break;

end

end

end

%index=[index bestch];

%新種群

individuals.chrom=individuals.chrom(index,:); %individuals.chrom為種群中個(gè)體

individuals.fitness=individuals.fitness(index);

%individuals.chrom=[individuals.chrom;b];

%individuals.fitness=[individuals.fitness;c];

ret=individuals;

(5)交叉操作cross.m

function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)

%本函數(shù)完成交叉操作

% pcorss input : 交叉概率

% lenchrom input : 染色體的長(zhǎng)度

% chrom input : 染色體群

% sizepop input : 種群規(guī)模

% ret output : 交叉后的染色體

for i=1:sizepop %每一輪for循環(huán)中,可能會(huì)進(jìn)行一次交叉操作,染色體是隨機(jī)選擇的,交叉位置也是隨機(jī)選擇的,%但該輪for循環(huán)中是否進(jìn)行交叉操作則由交叉概率決定(continue控制)

% 隨機(jī)選擇兩個(gè)染色體進(jìn)行交叉

pick=rand(1,2);

while prod(pick)==0

pick=rand(1,2);

end

index=ceil(pick.*sizepop);

% 交叉概率決定是否進(jìn)行交叉

pick=rand;

while pick==0

pick=rand;

end

if pickpcross

continue;

end

flag=0;

while flag==0

% 隨機(jī)選擇交叉位

pick=rand;

while pick==0

pick=rand;

end

pos=ceil(pick.*sum(lenchrom)); %隨機(jī)選擇進(jìn)行交叉的位置,即選擇第幾個(gè)變量進(jìn)行交叉,注意:兩個(gè)染色體交叉的位置相同

pick=rand; %交叉開(kāi)始

v1=chrom(index(1),pos);

v2=chrom(index(2),pos);

chrom(index(1),pos)=pick*v2+(1-pick)*v1;

chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉結(jié)束

flag1=test(lenchrom,bound,chrom(index(1),:)); %檢驗(yàn)染色體1的可行性

flag2=test(lenchrom,bound,chrom(index(2),:)); %檢驗(yàn)染色體2的可行性

if flag1*flag2==0

flag=0;

else flag=1;

end %如果兩個(gè)染色體不是都可行,則重新交叉

end

end

ret=chrom;

(6)變異操作Mutation.m

function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound)

% 本函數(shù)完成變異操作

% pcorss input : 變異概率

% lenchrom input : 染色體長(zhǎng)度

% chrom input : 染色體群

% sizepop input : 種群規(guī)模

% opts input : 變異方法的選擇

% pop input : 當(dāng)前種群的進(jìn)化代數(shù)和最大的進(jìn)化代數(shù)信息

% bound input : 每個(gè)個(gè)體的上屆和下屆

% maxgen input :最大迭代次數(shù)

% num input : 當(dāng)前迭代次數(shù)

% ret output : 變異后的染色體

for i=1:sizepop %每一輪for循環(huán)中,可能會(huì)進(jìn)行一次變異操作,染色體是隨機(jī)選擇的,變異位置也是隨機(jī)選擇的,

%但該輪for循環(huán)中是否進(jìn)行變異操作則由變異概率決定(continue控制)

% 隨機(jī)選擇一個(gè)染色體進(jìn)行變異

pick=rand;

while pick==0

pick=rand;

end

index=ceil(pick*sizepop);

% 變異概率決定該輪循環(huán)是否進(jìn)行變異

pick=rand;

if pickpmutation

continue;

end

flag=0;

while flag==0

% 變異位置

pick=rand;

while pick==0

pick=rand;

end

pos=ceil(pick*sum(lenchrom)); %隨機(jī)選擇了染色體變異的位置,即選擇了第pos個(gè)變量進(jìn)行變異

pick=rand; %變異開(kāi)始

fg=(rand*(1-num/maxgen))^2;

if pick0.5

chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg;

else

chrom(i,pos)=chrom(i,pos)-(chrom(i,pos)-bound(pos,1))*fg;

end %變異結(jié)束

flag=test(lenchrom,bound,chrom(i,:)); %檢驗(yàn)染色體的可行性

end

end

ret=chrom;

遺傳算法-總結(jié)

最近在做遺傳算法的項(xiàng)目,簡(jiǎn)單記錄一下。

遺傳算法是模擬自然界生物進(jìn)化機(jī)制的一種算法,在尋優(yōu)過(guò)程中有用的保留無(wú)用的去除。包括3個(gè)基本的遺傳算子:選擇(selection)、交叉(crossover)和變異(mutation)。遺傳操作的效果與上述3個(gè)遺傳算子所取的操作概率、編碼方法、群體大小、初始群體,以及適應(yīng)度函數(shù)的設(shè)定密切相關(guān)。

1、種群初始化

popsize 種群大小,一般為20-100,太小會(huì)降低群體的多樣性,導(dǎo)致早熟;較大會(huì)影響運(yùn)行效率;迭代次數(shù)一般100-500;交叉概率:0.4-0.99,太小會(huì)破壞群體的優(yōu)良模式;變異概率:0.001-0.1,太大搜索趨于隨機(jī)。編碼包括實(shí)數(shù)編碼和二進(jìn)制編碼,可以參考遺傳算法的幾個(gè)經(jīng)典問(wèn)題,TSP、背包問(wèn)題、車(chē)間調(diào)度問(wèn)題。

2、選擇

目的是把優(yōu)化個(gè)體直接遺傳到下一代或通過(guò)配對(duì)交叉產(chǎn)生新的個(gè)體再遺傳到下一代,我大部分采用了輪盤(pán)賭的方法。具體可參考 輪盤(pán)賭方法各個(gè)個(gè)體的選擇概率和其適應(yīng)值成比例,個(gè)體適應(yīng)值越大,被選擇的概率也越高,反之亦然。在實(shí)際問(wèn)題中,經(jīng)常需要最小值作為最優(yōu)解,有以下幾種方法進(jìn)行轉(zhuǎn)換

a、0-1之間的數(shù)據(jù),可以用1-該數(shù)值,則最小值與最大值互換;

b、 求倒數(shù);

c、求相反數(shù);

以上幾種方法均可以將最大值變?yōu)樽钚≈担钚≈底優(yōu)樽畲笾担阌诶幂啽P(pán)賭選擇最優(yōu)個(gè)體,根據(jù)實(shí)際情況來(lái)確定。

3、交叉

交叉即將兩個(gè)父代個(gè)體的部分結(jié)構(gòu)加以替換重組而生成新個(gè)體的操作,通過(guò)交叉,遺傳算法的搜索能力得以飛躍提高。根據(jù)編碼方法的不同,可以有以下的算法:

a、實(shí)值重組

離散重組、中間重組、線性重組、擴(kuò)展線性重組

b、二進(jìn)制交叉

單點(diǎn)交叉、多點(diǎn)交叉、均勻交叉、洗牌交叉、縮小代理交叉

4、變異

基本步驟:對(duì)群中所有個(gè)體以事先設(shè)定的變異概率判斷是否進(jìn)行變異;對(duì)進(jìn)行變異的個(gè)體隨機(jī)選擇變異位進(jìn)行變異。根據(jù)編碼表示方法的不同,有實(shí)值變異和二進(jìn)制變異

變異的目的:

a、使遺傳算法具有局部的隨機(jī)搜索能力。當(dāng)遺傳算法通過(guò)交叉算子已接近最優(yōu)解鄰域時(shí),利用變異算子的這種局部搜索能力可以加速向最優(yōu)解收斂。顯然該情況下變異概率應(yīng)取較小值,否則接近最優(yōu)解的積木塊會(huì)因?yàn)樽儺愒獾狡茐摹?/p>

b、使遺傳算法可維持多樣性,以防止未成熟收斂現(xiàn)象。此時(shí)收斂概率應(yīng)取較大值。

變異概率一般取0.001-0.1。

5、終止條件

當(dāng)最優(yōu)個(gè)體的適應(yīng)度達(dá)到給定的閾值,或者最優(yōu)個(gè)體的適應(yīng)度和群體適應(yīng)度不再上升時(shí),或者迭代次數(shù)達(dá)到預(yù)設(shè)的代數(shù)時(shí),算法終止。預(yù)設(shè)代數(shù)一般為100-500。

6、其它

多變量:將多個(gè)變量依次連接

多目標(biāo):一種方法是轉(zhuǎn)化為單目標(biāo),例如按大小進(jìn)行排序,根據(jù)排序和進(jìn)行選擇,可以參考


分享題目:遺傳算法vb.net 遺傳算法的優(yōu)缺點(diǎn)
新聞來(lái)源:http://www.xueling.net.cn/article/doocjjj.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 国产高清av | 啄木鸟系列在线 | 91产国在线观看动作片喷水 | 精品久久久久久无码AV | xxx黄色片 | 国产AV办公室丝袜秘书 | 国产二级av| 日韩免费视频网站 | 男人激烈吮乳吃奶动态图 | 国产色黄视频 | 色婷丁香 | 国产精品二区二区三区 | 日韩在线视频网 | 性夜夜春夜夜爽AA片A | 国产精久久久久久久妇剪断 | 欧美一区二区三区四区视频 | 蜜桃在线播放 | 亚洲国产欧美日韩另类 | 777米奇色888狠狠俺去啦 | 伊人成人在线视频 | 伊人网在线免费视频 | 日本高清www色视频总站免费 | 国产精品18久久久久久久 | 91热热| 美淫在线 | 免费国产小视频 | 亚洲精品无码MA在线观看 | 热99精品里视频精品 | 在线看午夜福利片国产 | 亚洲成人偷拍 | 强行糟蹋人妻HD中文 | 国产午夜福利精品一区二区三区 | 狠狠操狠狠搞 | 一级片久久久久 | 午夜剧场91| 成人免费视频一区 | 91久久偷偷做嫩草影院 | 久久avav| 国产老女人高潮大全 | 超爱碰在线资源 | 视频一区视频二区欧美 |