91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 11KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-16
  • 語言: C/C++
  • 標簽: 遺傳算法??

資源簡介

用C++實現(xiàn)的遺傳算法求函數(shù)的最大值,可運行

資源截圖

代碼片段和文件信息

#include???
#include???
#include???
#include???
#include???
??
typedef?struct?Chrom???????????????????????????//?結構體類型,為單個染色體的結構;??
{??
????short?int?bit[6];//一共6bit來對染色體進行編碼,其中1位為符號位。取值范圍-64~+64??
????int?fit?;//適應值??
????double?rfit;//相對的fit值,即所占的百分比??
????double?cfit;//積累概率??
}chrom;?????????????????????????????????????????
//定義將會用到的幾個函數(shù);??
void?*evpop?(chrom?popcurrent[4]);//進行種群的初始化??
int?x?(chrom?popcurrent);??
int?y?(int?x);??
void?*pickchroms?(chrom?popcurrent[4]);//選擇操作??
void?*pickchroms_new?(chrom?popcurrent[4]);?//?基于概率分布??
void?*crossover?(chrom?popnext[4]);//交叉操作??
void?*mutation?(chrom?popnext[4]);//突變??
double?r8_uniform_ab?(?double?a?double?b?int?&seed?);//生成a~b之間均勻分布的數(shù)字??
chrom?popcurrent?[4];????????????????????????//?初始種群規(guī)模為;??
chrom?popnext?[4];???????????????????????????//?更新后種群規(guī)模仍為;??
void?main?()????????????????????????????????????//?主函數(shù);??
{??
????int?num?;????????????????????????????????????//?迭代次數(shù);??
????int?i?j?lMax?k;??
????Max=0;??????????????????????????????????????//?函數(shù)最大值??
??
????printf(“\nWelcome?to?the?Genetic?Algorithm!\n“);??//???
????printf(“The?Algorithm?is?based?on?the?function?y?=?-x^2?+?5?to?find?the?maximum?value?of?the?function.\n“);??
??
enter:printf?(“\nPlease?enter?the?no.?of?iterations\n請輸入您要設定的迭代數(shù)?:?“);??
????scanf(“%d“?&num);???????????????????????????//?輸入迭代次數(shù),傳送給參數(shù)?num;??
??
????if(num?<1)????????????????????????????????????
????????goto?enter?;?????????????????????????????????//?判斷輸入的迭代次數(shù)是否為負或零,是的話重新輸入;??
????//不同的隨機數(shù)可能結果不同??那是當所設置的迭代次數(shù)過少時,染色體的基因型過早地陷入局部最優(yōu)??
????srand(time(0));????
????evpop(popcurrent?);????//?隨機產(chǎn)生初始種群;??
????//是否需要指定x的取值范圍呢?6bit來表示數(shù)字,第一位為符號位,5bit表示數(shù)字大小。所以,取值范圍為-32~+31??
????Max?=?popcurrent[0].fit;//對Max值進行初始化??
??
????for(i?=0;i????{??
??
????????printf(“\ni?=?%d\n“?i);?????????????????//?輸出當前迭代次數(shù);??
??
????????for(j?=0;j<4;?j++)??
????????{??
????????????popnext[j?]=popcurrent[?j];???????????//?更新種群;??
????????}??
??
????????pickchroms(popnext?);????????????????????//?挑選優(yōu)秀個體;??
????????crossover(popnext?);?????????????????????//?交叉得到新個體;??
????????mutation(popnext?);??????????????????????//?變異得到新個體;??
??
????????for(j?=0;j<4;?j++)???
????????{??
????????????popcurrent[j?]=popnext[?j];??????????????//?種群更替;??
????????}??
??
????}??//?等待迭代終止;??
//對于真正隨機數(shù)是需要注意取較大的迭代次數(shù)??
????for(l?=0;l<3;?l++)??
????{??
????????if(popcurrent?[l].?fit?>?Max?)??
????????{??
????????????Max=popcurrent?[l].?fit;??
????????????k=x(popcurrent?[l]);//此時的value即為所求的x值??
????????}??
??
????}??
????printf(“\n?當x等于?%d時,函數(shù)得到最大值為:?%d?“k?Max);??
????printf(“\nPress?any?key?to?end?!?“?);??
??
????flushall();?????????????????????????????????//?清除所有緩沖區(qū);??
????getche();???????????????????????????????????//?從控制臺取字符,不以回車為結束;??
??
}???????????????????????????????????????????????
??
??
??
void?*evpop?(chrom?popcurrent[4])???//?函數(shù):隨

評論

共有 條評論