遺傳算法求函數(shù)極值_第1頁(yè)
遺傳算法求函數(shù)極值_第2頁(yè)
遺傳算法求函數(shù)極值_第3頁(yè)
遺傳算法求函數(shù)極值_第4頁(yè)
遺傳算法求函數(shù)極值_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.智能優(yōu)化算法第一次作業(yè) -遺傳算法 洪文杰 S151000853問(wèn)題:用遺傳算法求解f(x)=xsin(10*x)+2.0的最大值,x取-1,2.一、分析:遺傳算法基本思路二、實(shí)例簡(jiǎn)介1. 產(chǎn)生初始種群s1= 13 (01101)s2= 24 (11000) s3= 8   (01000)s4= 19 (10011)2. 計(jì)算適應(yīng)度假定適應(yīng)度為f(s)=s2 ,則f (s1) = f(13) = 132 = 169f (s2) = f(24) = 242 = 576f (s3) = f(8) = 82 = 64f (s4) = f(19) = 192 = 3613.

2、60;選擇染色體的選擇概率為:染色體的累計(jì)概率為:根據(jù)上面的式子,可得到:例如設(shè)從區(qū)間0, 1中產(chǎn)生4個(gè)隨機(jī)數(shù):    r1 = 0.450126,    r2 = 0.110347    r3 = 0.572496,    r4 = 0.98503 4. 交叉基本遺傳算法(SGA)中交叉算子采用單點(diǎn)交叉算子。單點(diǎn)交叉運(yùn)算5. 變異6. 至下一代,適應(yīng)度計(jì)算選擇交叉變異,直至滿足終止條件三、解決問(wèn)題初始化輸入種群大小,交叉概率,變異概率等條件根據(jù)精度編碼將區(qū)間-1,

3、2分成Num份,再通過(guò)Num求解種群基因個(gè)數(shù)(-1,2用二進(jìn)制等分)計(jì)算每個(gè)個(gè)體的適應(yīng)度,該題適應(yīng)度函數(shù)就是f(X)根據(jù)適應(yīng)度求解積累概率,并用輪盤賭法選著個(gè)體產(chǎn)生備選種群在備選種群中,利用交叉概率,隨機(jī)選擇個(gè)體,再隨機(jī)選擇交叉點(diǎn)進(jìn)行單點(diǎn)交叉,形成交叉后的種群在交叉后種群中,利用變異概率,隨機(jī)選擇個(gè)體,再隨機(jī)選擇變異點(diǎn)進(jìn)行單點(diǎn)變異,形成變異后的種群是否達(dá)到迭代次數(shù)輸出結(jié)果最大值。是否 四、實(shí)驗(yàn)結(jié)果源代碼:/*問(wèn)題:用遺傳算法求解f(x)=xsin(10*x)+2.0的最大值,x取-1,2.*/*洪文杰 2016-3-9. 智能優(yōu)化算法 第一次作業(yè)*/#include<iostream&g

4、t;/#includ<stdio.h>#include<stdlib.h>#include<math.h>#include<time.h>#include<float.h>using namespace std;#define NUMBER 50/種群規(guī)模#define GENE_NUMBER 10000/迭代次數(shù)int UnitNUMBER30;/初始種群int Unit_chooseNUMBER30;/選擇、交叉、變異后的種群int NumberNUMBER;/被選擇的個(gè)體編號(hào)float FitnessNUMBER;/適應(yīng)度f(wàn)lo

5、at select_probabilityNUMBER;/選擇概率float accumula_probabilityNUMBER ;/積累概率float f_max=0.0;/最大值float f_x=0.0;/最大值對(duì)應(yīng)的自變量int hwj_coding(int start,int end);/編碼void hwj_initial_population(int num);/產(chǎn)生初始種群void hwj_fitness(int num);/適應(yīng)度計(jì)算void hwj_choose();/選擇個(gè)體int hwj_binary_search(int l, int r,float temp);/

6、查找選擇/void hwj_N_M(int a,int b,int N, int M);/從M個(gè)數(shù)中選N個(gè)不一樣的數(shù)void hwj_cross(int num,float cross);/交叉后的得到種群void hwj_aberrance(int num,float aberrance);/變異后的得到的種群void hwj_max(int num);/找到最適應(yīng)的個(gè)體int main()int strat,end;/區(qū)間int Num;/編碼大小float cross=0.8;/交叉概率float aberrance = 0.04;/變異概率int key=1;cout<<&

7、quot;請(qǐng)輸入求解區(qū)間:"<<endl;cin>>strat>>end;Num=hwj_coding(strat,end);cout<<"Num:"<<Num<<endl;/cout<<"-1-"<<endl; hwj_initial_population(Num);/cout<<"-2初始種群-"<<endl;/*for(int i=0;i<NUMBER;i+)for(int j=0;j<N

8、um;j+) cout<<Unitij<<' 'cout<<endl;*/while(key!=GENE_NUMBER)hwj_fitness(Num);/cout<<"-3適應(yīng)度-"<<endl;/for(int i=0;i<NUMBER;i+)/cout<<Fitnessi<<endl;/hwj_choose();/cout<<"-4被選擇的個(gè)體-"<<endl;/*for(int i=0;i<NUMBER;i+)f

9、or(int j=0;j<Num;j+) cout<<Unit_chooseij<<' 'cout<<endl;*/hwj_cross(Num,cross);/*cout<<"-5交叉后的種群-"<<endl;for(int i=0;i<NUMBER;i+)for(int j=0;j<Num;j+) cout<<Unitij<<' 'cout<<endl;*/hwj_aberrance(Num,aberrance);/*cout&

10、lt;<"-6變異后的種群-"<<endl;for(int i=0;i<NUMBER;i+)for(int j=0;j<Num;j+) cout<<Unitij<<' 'cout<<endl;*/key+;hwj_max(Num);cout<<"最大值是對(duì)應(yīng)的x值是:"<<endl;cout<<f_x<<endl;cout<<"最大值為:"<<f_max<<endl;re

11、turn 0;int hwj_coding(int start,int end)/種群編碼float precision;int temp=2;int sum;int N=1;cout<<"請(qǐng)輸入精度范圍:"<<endl;cin>>precision;if(precision=0) cout<<"對(duì)不起精度不能為零:"<<endl; return 0;elsesum=(end-start)/precision;cout<<"sum:"<<sum<

12、<endl;while(temp<sum)temp*=2; N+;return N;void hwj_initial_population(int num)/生成初始種群srand(time(NULL);for(int i=0;i<NUMBER;i+)for(int j=0;j<num;j+)Unitij=rand()%2;void hwj_fitness(int num)/計(jì)算適應(yīng)度f(wàn)loat sum;int temp;for(int i=0;i<NUMBER;i+)temp=1;sum=0.0;for(int j=num-1;j>=0;j-)sum+=U

13、nitij*temp;temp*=2.0;Fitnessi=sum*3/(temp-1.0)-1.0;/cout<<Fitnessi;/cout<<"-+"Fitnessi=Fitnessi*sin(10*3.1415926*Fitnessi)+2.0;/cout<<Fitnessi<<endl;int hwj_binary_search(int l,int r,float temp)for(int i=0;i<NUMBER;i+)if(temp<=accumula_probabilityi&&te

14、mp>accumula_probabilityi-1)return i;return -1; void hwj_choose()/選擇個(gè)體float sum=0.0;float temp;int i;for(i=0;i<NUMBER;i+)sum+=Fitnessi;select_probability0=Fitness0/sum;temp=accumula_probability0=select_probability0;for(i=1;i<NUMBER;i+)select_probabilityi=Fitnessi/sum;temp+=select_probability

15、i;accumula_probabilityi=temp;/cout<<accumula_probabilityi<<endl;for(i=0;i<NUMBER;i+)/srand(time(NULL);temp=(rand()%1000000)/1000000.0;/cout<<temp;Numberi=hwj_binary_search(0,NUMBER,temp);/cout<<Numberi<<endl;for(int j=0;j<NUMBER;j+)Unit_chooseij=UnitNumberij;/*voi

16、d hwj_N_M(int a,int b,int N,int M)/從M個(gè)數(shù)中選N個(gè)不一樣的數(shù) int i=1;srand(time(NULL);a0=rand()%M;ba0=1;while(i!=N) ai=rand()%M; if(bai=0) i+; bai=1; cout<<ai<<endl; / cout<<ai<<' '<<bai<<endl; */void hwj_cross(int num,float cross)/交叉后的得到種群int num_cross=NUMBER*cross;i

17、nt k;/交叉點(diǎn)int i , j;if(num_cross%2!=0)num_cross=num_cross+1;/需要交叉的個(gè)體數(shù)int croNUMBER;/被交叉的個(gè)體編號(hào)int tempNUMBER;/是否交叉數(shù)組一覽for(i=0;i<NUMBER;i+)croi=-1;tempi=0;/hwj_N_M(cro,temp,num_cross,NUMBER); srand(time(NULL); cro0=rand()%NUMBER; tempcro0=1; i=1; while(i!=num_cross) croi=rand()%NUMBER; if(tempcroi=0)

18、 tempcroi=1; i+; /for(int i=0;i<NUMBER;i+)/cout<<tempi<<" "<<croi<<endl;/cout<<num_cross<<endl;for(i=0;i<num_cross/2;i+)srand(time(NULL);k=rand()%num;for(j=0;j<num;j+)if(j<=k)Unitij=Unit_choosecronum_cross-ij; Uniti+num_cross/2j=Unit_choosecr

19、oij;elseUnitij=Unit_choosecroij; Uniti+num_cross/2j=Unit_choosecroij;for(i=0;i<NUMBER;i+)/cout<<tempi<<endl;if(tempi=0)for(j=0;j<num;j+)Unitnum_crossj=Unit_chooseij;num_cross+;void hwj_aberrance(int num,float aberrance)/變異后的得到的種群int num_aberrance=NUMBER*aberrance;/變異的個(gè)體數(shù)int k;/變異點(diǎn)int abeNUMBER;/變異的個(gè)體編號(hào)int tempNUMB

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論