歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

遺傳算法C語(yǔ)言源代碼(一元函數(shù)和二元函數(shù))

  • 資源ID:12939708       資源大?。?span id="hzx2q7u" class="font-tahoma">22.15KB        全文頁(yè)數(shù):15頁(yè)
  • 資源格式: DOCX        下載積分:10積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

遺傳算法C語(yǔ)言源代碼(一元函數(shù)和二元函數(shù))

.C語(yǔ)言遺傳算法代碼以下為遺傳算法的源代碼,計(jì)算一元代函數(shù)的代碼和二元函數(shù)的代碼以+為分割線分割開(kāi)來(lái),請(qǐng)自行選擇適合的代碼,使用時(shí)請(qǐng)略看完代碼的注釋,在需要更改的地方更改為自己需要的代碼。+一元函數(shù)代碼+#include <stdio.h>#include<stdlib.h>#include<time.h>#include<math.h>#define POPSIZE 1000#define maximization 1#define minimization 2#define cmax 100#define cmin 0#define length1 20#define chromlength length1 /染色體長(zhǎng)度 /注意,你是求最大值還是求最小值 int functionmode=minimization; /變量的上下限的修改開(kāi)始 float min_x1=-2;/變量的下界 float max_x1=-1;/變量的上界 /變量的上下限的修改結(jié)束 int popsize; /種群大小int maxgeneration; /最大世代數(shù) double pc; /交叉率 double pm; /變異率struct individual char chromchromlength+1;double value; double fitness; /適應(yīng)度;int generation; /世代數(shù)int best_index;int worst_index;struct individual bestindividual; /最佳個(gè)體struct individual worstindividual; /最差個(gè)體struct individual currentbest;struct individual populationPOPSIZE;/函數(shù)聲明 void generateinitialpopulation(); void generatenextpopulation();void evaluatepopulation();long decodechromosome(char *,int,int);void calculateobjectvalue();void calculatefitnessvalue();void findbestandworstindividual();void performevolution();void selectoperator();void crossoveroperator();void mutationoperator();void input();void outputtextreport();void generateinitialpopulation( ) /種群初始化int i,j;for (i=0;i<popsize; i+)for(j=0;j<chromlength;j+)populationi.chromj=(rand()%20<10)?0:1;populationi.chromchromlength=0;void generatenextpopulation() /生成下一代selectoperator();crossoveroperator();mutationoperator();void evaluatepopulation() /評(píng)價(jià)個(gè)體,求最佳個(gè)體calculateobjectvalue();calculatefitnessvalue();findbestandworstindividual();long decodechromosome(char *string ,int point,int length) /給染色體解碼int i;long decimal=0;char*pointer;for(i=0,pointer=string+point;i<length;i+,pointer+)if(*pointer-0)decimal +=(long)pow(2,i);return (decimal);void calculateobjectvalue() /計(jì)算函數(shù)值int i;long temp1,temp2; double x1;for (i=0; i<popsize; i+) temp1=decodechromosome(populationi.chrom,0,length1); x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1; /目標(biāo)函數(shù)修改開(kāi)始 populationi.value=(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1); /目標(biāo)函數(shù)修改結(jié)束void calculatefitnessvalue()/計(jì)算適應(yīng)度int i;double temp; for(i=0;i<popsize;i+) if(functionmode=maximization) if(populationi.value+cmin)>0.0) temp=cmin+populationi.value; else temp=0.0; else if (functionmode=minimization) if(populationi.value<cmax) temp=cmax-populationi.value; else temp=0.0;populationi.fitness=temp;void findbestandworstindividual( ) /求最佳個(gè)體和最差個(gè)體int i;double sum=0.0;bestindividual=population0;worstindividual=population0;for (i=1;i<popsize; i+)if (populationi.fitness>bestindividual.fitness)bestindividual=populationi;best_index=i;else if (populationi.fitness<worstindividual.fitness)worstindividual=populationi;worst_index=i; sum+=populationi.fitness;if (generation=0)currentbest=bestindividual;elseif(bestindividual.fitness>=currentbest.fitness)currentbest=bestindividual;void performevolution() /演示評(píng)價(jià)結(jié)果if (bestindividual.fitness>currentbest.fitness)currentbest=populationbest_index;elsepopulationworst_index=currentbest;void selectoperator() /比例選擇算法int i,index;double p,sum=0.0;double cfitnessPOPSIZE;struct individual newpopulationPOPSIZE;for(i=0;i<popsize;i+)sum+=populationi.fitness;for(i=0;i<popsize; i+)cfitnessi=populationi.fitness/sum;for(i=1;i<popsize; i+)cfitnessi=cfitnessi-1+cfitnessi;for (i=0;i<popsize;i+)p=rand()%1000/1000.0;index=0;while (p>cfitnessindex)index+;newpopulationi=populationindex;for(i=0;i<popsize; i+)populationi=newpopulationi;void crossoveroperator() /交叉算法int i,j;int indexPOPSIZE;int point,temp;double p;char ch;for (i=0;i<popsize;i+)indexi=i;for (i=0;i<popsize;i+)point=rand()%(popsize-i);temp=indexi;indexi=indexpoint+i;indexpoint+i=temp;for (i=0;i<popsize-1;i+=2)p=rand()%1000/1000.0;if (p<pc)point=rand()%(chromlength-1)+1;for (j=point; j<chromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;void mutationoperator() /變異操作int i,j;double p;for (i=0;i<popsize;i+)for(j=0;j<chromlength;j+)p=rand()%1000/1000.0;if (p<pm)populationi.chromj=(populationi.chromj=0)?1:0;void input() /數(shù)據(jù)輸入 /printf("初始化全局變量:n");/printf(" 種群大小(50-500):"); /scanf("%d", &popsize);popsize=500; if(popsize%2) != 0) /printf( " 種群大小已設(shè)置為偶數(shù)n");popsize+; /printf(" 最大世代數(shù)(100-300):"); /scanf("%d", &maxgeneration);maxgeneration=200; /printf(" 交叉率(0.2-0.99):"); /scanf("%f", &pc);pc=0.95; /printf(" 變異率(0.001-0.1):"); /scanf("%f", &pm);pm=0.03;void outputtextreport()/數(shù)據(jù)輸出int i;double sum;double average;sum=0.0;for(i=0;i<popsize;i+)sum+=populationi.value;average=sum/popsize;printf("當(dāng)前世代=%dn當(dāng)前世代平均函數(shù)值=%fn當(dāng)前世代最優(yōu)函數(shù)值=%fn",generation,average,populationbest_index.value);void main() /主函數(shù) int i;long temp1,temp2; double x1,x2; generation=0; input(); generateinitialpopulation();evaluatepopulation();while(generation<maxgeneration)generation+;generatenextpopulation();evaluatepopulation();performevolution();outputtextreport(); printf("n");printf(" 統(tǒng)計(jì)結(jié)果: "); printf("n");/printf("最大函數(shù)值等于:%fn",currentbest.fitness);printf("其染色體編碼為:");for (i=0;i<chromlength;i+)printf("%c",currentbest.chromi); printf("n"); temp1=decodechromosome(currentbest.chrom,0,length1); x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1; printf("x1=%lfn",x1); /這是需要修改的地方 printf("最優(yōu)值等于:%fn",(pow(x1,5)-3*x1-1)*(pow(x1,5)-3*x1-1);+二元函數(shù)代碼+#include <stdio.h>#include<stdlib.h>#include<time.h>#include<math.h>#define POPSIZE 500#define maximization 1#define minimization 2#define cmax 100#define cmin 0#define length1 20#define length2 20#define chromlength length1+length2 /染色體長(zhǎng)度/-求最大還是最小值int functionmode=maximization;/-/-變量上下界float min_x1=0;float max_x1=3;float min_x2=1;float max_x2=5;/- int popsize; /種群大小int maxgeneration; /最大世代數(shù) double pc; /交叉率 double pm; /變異率struct individual char chromchromlength+1;double value; double fitness; /適應(yīng)度;int generation; /世代數(shù)int best_index;int worst_index;struct individual bestindividual; /最佳個(gè)體struct individual worstindividual; /最差個(gè)體struct individual currentbest;struct individual populationPOPSIZE;/函數(shù)聲明 void generateinitialpopulation(); void generatenextpopulation();void evaluatepopulation();long decodechromosome(char *,int,int);void calculateobjectvalue();void calculatefitnessvalue();void findbestandworstindividual();void performevolution();void selectoperator();void crossoveroperator();void mutationoperator();void input();void outputtextreport();void generateinitialpopulation( ) /種群初始化int i,j;for (i=0;i<popsize; i+)for(j=0;j<chromlength;j+)populationi.chromj=(rand()%40<20)?0:1;populationi.chromchromlength=0;void generatenextpopulation() /生成下一代selectoperator();crossoveroperator();mutationoperator();void evaluatepopulation() /評(píng)價(jià)個(gè)體,求最佳個(gè)體calculateobjectvalue();calculatefitnessvalue();findbestandworstindividual();long decodechromosome(char *string ,int point,int length) /給染色體解碼int i;long decimal=0;char*pointer;for(i=0,pointer=string+point;i<length;i+,pointer+)if(*pointer-0)decimal +=(long)pow(2,i);return (decimal);void calculateobjectvalue() /計(jì)算函數(shù)值int i;long temp1,temp2; double x1,x2;for (i=0; i<popsize; i+) temp1=decodechromosome(populationi.chrom,0,length1); temp2=decodechromosome(populationi.chrom,length1,length2); x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1; x2=(max_x2-min_x2)*temp2/(1024*1024-1)+min_x2; /-函數(shù)populationi.value=x1*x1+sin(x1*x2)-x2*x2;/-void calculatefitnessvalue()/計(jì)算適應(yīng)度int i;double temp; for(i=0;i<popsize;i+) if(functionmode=maximization) if(populationi.value+cmin)>0.0) temp=cmin+populationi.value; else temp=0.0; else if (functionmode=minimization) if(populationi.value<cmax) temp=cmax-populationi.value; else temp=0.0;populationi.fitness=temp;void findbestandworstindividual( ) /求最佳個(gè)體和最差個(gè)體int i;double sum=0.0;bestindividual=population0;worstindividual=population0;for (i=1;i<popsize; i+)if (populationi.fitness>bestindividual.fitness)bestindividual=populationi;best_index=i;else if (populationi.fitness<worstindividual.fitness)worstindividual=populationi;worst_index=i; sum+=populationi.fitness;if (generation=0)currentbest=bestindividual;elseif(bestindividual.fitness>=currentbest.fitness)currentbest=bestindividual;void performevolution() /演示評(píng)價(jià)結(jié)果if (bestindividual.fitness>currentbest.fitness)currentbest=populationbest_index;elsepopulationworst_index=currentbest;void selectoperator() /比例選擇算法int i,index;double p,sum=0.0;double cfitnessPOPSIZE;struct individual newpopulationPOPSIZE;for(i=0;i<popsize;i+)sum+=populationi.fitness;for(i=0;i<popsize; i+)cfitnessi=populationi.fitness/sum;for(i=1;i<popsize; i+)cfitnessi=cfitnessi-1+cfitnessi;for (i=0;i<popsize;i+)p=rand()%1000/1000.0;index=0;while (p>cfitnessindex)index+;newpopulationi=populationindex;for(i=0;i<popsize; i+)populationi=newpopulationi;void crossoveroperator() /交叉算法int i,j;int indexPOPSIZE;int point,temp;double p;char ch;for (i=0;i<popsize;i+)indexi=i;for (i=0;i<popsize;i+)point=rand()%(popsize-i);temp=indexi;indexi=indexpoint+i;indexpoint+i=temp;for (i=0;i<popsize-1;i+=2)p=rand()%1000/1000.0;if (p<pc)point=rand()%(chromlength-1)+1;for (j=point; j<chromlength;j+)ch=populationindexi.chromj;populationindexi.chromj=populationindexi+1.chromj;populationindexi+1.chromj=ch;void mutationoperator() /變異操作int i,j;double p;for (i=0;i<popsize;i+)for(j=0;j<chromlength;j+)p=rand()%1000/1000.0;if (p<pm)populationi.chromj=(populationi.chromj=0)?1:0;void input() /數(shù)據(jù)輸入 /printf("初始化全局變量:n");/printf(" 種群大小(50-500):"); /scanf("%d", &popsize);popsize=200; if(popsize%2) != 0) /printf( " 種群大小已設(shè)置為偶數(shù)n");popsize+; /printf(" 最大世代數(shù)(100-300):"); /scanf("%d", &maxgeneration);maxgeneration=200; /printf(" 交叉率(0.2-0.99):"); /scanf("%f", &pc);pc=0.9; /printf(" 變異率(0.001-0.1):"); /scanf("%f", &pm);pm=0.003;void outputtextreport()/數(shù)據(jù)輸出int i;double sum;double average;sum=0.0;for(i=0;i<popsize;i+)sum+=populationi.value;average=sum/popsize;printf("當(dāng)前世代=%dn當(dāng)前世代平均函數(shù)值=%fn當(dāng)前世代最優(yōu)函數(shù)值=%fn",generation,average,populationbest_index.value);void main() /主函數(shù) int i;long temp1,temp2; double x1,x2; generation=0; input(); generateinitialpopulation();evaluatepopulation();while(generation<maxgeneration)generation+;generatenextpopulation();evaluatepopulation();performevolution();outputtextreport(); printf("n");printf(" 統(tǒng)計(jì)結(jié)果: "); printf("n");/printf("最大函數(shù)值等于:%fn",currentbest.fitness);printf("其染色體編碼為:");for (i=0;i<chromlength;i+)printf("%c",currentbest.chromi); printf("n"); temp1=decodechromosome(currentbest.chrom,0,length1); temp2=decodechromosome(currentbest.chrom,length1,length2); x1=(max_x1-min_x1)*temp1/(1024*1024-1)+min_x1; x2=(max_x2-min_x2)*temp2/(1024*1024-1)+min_x2; printf("x=%lf,y=%lfn",x1,x2); /-修改函數(shù) printf("最大值=%fn",x1*x1+sin(x1*x2)-x2*x2);/-.

注意事項(xiàng)

本文(遺傳算法C語(yǔ)言源代碼(一元函數(shù)和二元函數(shù)))為本站會(huì)員(y****3)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!