yx2函数问题文档格式.docx
- 文档编号:20440517
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:11
- 大小:19.03KB
yx2函数问题文档格式.docx
《yx2函数问题文档格式.docx》由会员分享,可在线阅读,更多相关《yx2函数问题文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
z,z1;
temp,temp1;
temp=x.code&
0x3;
temp1=y.code&
z.code=x.code-temp+temp1;
z1.code=y.code-temp1+temp;
Judge(z);
Judge(z1);
if(x.degree<
y.degree)
if(z.degree>
=x.degree)
//如果新个体不如双亲,淘汰之
x=z;
else
=y.degree)
y=z;
if(z1.degree>
x=z1;
y=z1;
main()
indidest;
i,j,best,x,y,c;
sum,strick,SUM=0;
static
n=0;
srand(time(NULL));
for(i=0;
i<
40;
++i)//随机得到初始种群
group[i].code=rand()%32;
Judge(group[i]);
for(i=1;
=10;
++i)//固定进化10代
for(sum=0,best=0,j=0;
j<
++j)
sum+=group[j].degree;
//求总的适应度sum
if(group[j].degree>
group[best].degree)
best=j;
//求当前最优个体
printf("
第%2d代中
最优个体为
%d
(%d)
平均适应度为
%10f\n"
i,group[best].code,group[best].degree,sum/40.0);
for(c=40;
c;
--c)
strick=(int)((float)rand()/RAND_MAX*sum);
//赌盘中的色子,选择个体x,y
for(x=0;
x<
40&
strick>
=group[x].degree;
++x)
strick-=group[x].degree;
for(y=0;
y<
=group[y].degree;
++y)
strick-=group[y].degree;
if(happened(0.9))
Cross(group[x],group[y]);
//交叉
一个非常简单的遗传算法源代码,是由DenisCormier(NorthCarolinaStateUniversity)开发的,SitaS.Raghavan(UniversityofNorthCarolinaatCharlotte)修正。
代码保证尽可能少,实际上也不必查错。
对一特定的应用修正此代码,用户只需改变常数的定义并且定义“评价函数”即可。
注意代码的设计是求最大值,其中的目标函数只能取正值;
且函数值和个体的适应值之间没有区别。
该系统使用比率选择、精华模型、单点杂交和均匀变异。
如果用Gaussian变异替换均匀变异,可能得到更好的效果。
代码没有任何图形,甚至也没有屏幕输出,主要是保证在平台之间的高可移植性。
读者可以从ftp.uncc.edu,目录coe/evol中的文件prog.c中获得。
要求输入的文件应该命名为‘gadata.txt’;
系统产生的输出文件为‘galog.txt’。
输入的文件由几行组成:
数目对应于变量数。
且每一行提供次序——对应于变量的上下界。
如第一行为第一个变量提供上下界,第二行为第二个变量提供上下界,等等。
/**************************************************************************/
/*Thisisasimplegeneticalgorithmimplementationwherethe*/
/*evaluationfunctiontakespositivevaluesonlyandthe*/
/*fitnessofanindividualisthesameasthevalueofthe*/
/*objectivefunction*/
#include<
math.h>
/*Changeanyoftheseparameterstomatchyourneeds*/
#definePOPSIZE50/*populationsize*/
#defineMAXGENS1000/*max.numberofgenerations*/
#defineNVARS3/*no.ofproblemvariables*/
#definePXOVER0.8/*probabilityofcrossover*/
#definePMUTATION0.15/*probabilityofmutation*/
#defineTRUE1
#defineFALSE0
intgeneration;
/*currentgenerationno.*/
intcur_best;
/*bestindividual*/
FILE*galog;
/*anoutputfile*/
structgenotype/*genotype(GT),amemberofthepopulation*/
doublegene[NVARS];
/*astringofvariables*/
doublefitness;
/*GT'
sfitness*/
doubleupper[NVARS];
svariablesupperbound*/
doublelower[NVARS];
svariableslowerbound*/
doublerfitness;
/*relativefitness*/
doublecfitness;
/*cumulativefitness*/
};
structgenotypepopulation[POPSIZE+1];
/*population*/
structgenotypenewpopulation[POPSIZE+1];
/*newpopulation;
*/
/*replacesthe*/
/*oldgeneration*/
/*Declarationofproceduresusedbythisgeneticalgorithm*/
voidinitialize(void);
doublerand()val(double,double);
voidevaluate(void);
voidkeep_the_best(void);
voidelitist(void);
voidselect()(void);
voidcrossover(void);
voidXover(int,int);
voidswap(double*,double*);
voidmutate(void);
voidreport(void);
/***************************************************************/
/*Initializationfunction:
Initializesthevaluesofgenes*/
/*withinthevariablesbounds.Italsoinitializes(tozero)*/
/*allfitnessvaluesforeachmemberofthepopulation.It*/
/*readsupperandlowerboundsofeachvariablefromthe*/
/*inputfile`gadata.txt'
.Itrand()omlygeneratesvalues*/
/*betweentheseboundsforeachgeneofeachgenotypeinthe*/
/*population.Theformatoftheinputfile`gadata.txt'
is*/
/*var1_lower_boundvar1_upperbound*/
/*var2_lower_boundvar2_upperbound...*/
voidinitialize(void)
FILE*infile;
inti,j;
doublelbound,ubound;
if((infile=fopen("
gadata.txt"
"
r"
))==NULL)
{
fprintf(galog,"
\nCannotopeninputfile!
\n"
);
exit
(1);
}
/*initializevariableswithinthebounds*/
for(i=0;
i<
NVARS;
i++)
fscanf(infile,"
%lf"
&
lbound);
ubound);
for(j=0;
j<
POPSIZE;
j++)
population[j].fitness=0;
population[j].rfitness=0;
population[j].cfitness=0;
population[j].lower[i]=lbound;
population[j].upper[i]=ubound;
population[j].gene[i]=rand()val(population[j].lower[i],
population[j].upper[i]);
fclose(infile);
/***********************************************************/
/*Randomvaluegenerator:
Generatesavaluewithinbounds*/
doublerandval(doublelow,doublehigh)
doubleval;
val=((double)(rand()%1000)/1000.0)*(high-low)+low;
return(val);
/*************************************************************/
/*Evaluationfunction:
Thistakesauserdefinedfunction.*/
/*Eachtimethisischanged,thecodehastoberecompiled.*/
/*Thecurrentfunctionis:
x[1]^2-x[1]*x[2]+x[3]*/
voidevaluate(void)
intmem;
inti;
doublex[NVARS+1];
for(mem=0;
mem<
mem++)
for(i=0;
x[i+1]=population[mem].gene[i];
population[mem].fitness=(x[1]*x[1])-(x[1]*x[2])+x[3];
/*Keep_the_bestfunction:
Thisfunctionkeepstrackofthe*/
/*bestmemberofthepopulation.Notethatthelastentryin*/
/*thearrayPopulationholdsacopyofthebestindividual*/
voidkeep_the_best()
cur_best=0;
/*storestheindexofthebestindividual*/
if(population[mem].fitness>
population[POPSIZE].fitness)
cur_best=mem;
population[POPSIZE].fitness=population[mem].fitness;
/*oncethebestmemberinthepopulationisfound,copythegenes*/
population[POPSIZE].gene[i]=population[cur_best].gene[i];
/****************************************************************/
/*Elitistfunction:
Thebestmemberofthepreviousgeneration*/
/*isstoredasthelastinthearray.Ifthebestmemberof*/
/*thecurrentgenerationisworsethenthebestmemberofthe*/
/*previousgeneration,thelatteronewouldreplacetheworst*/
/*memberofthecurrentpopulation*/
voidelitist()
doublebest,worst;
/*bestandworstfitnessvalues*/
intbest_mem,worst_mem;
/*indexesofthebestandworstmember*/
best=population[0].fitness;
worst=population[0].fitness;
POPSIZE-1;
++i)
if(population[i].fitness>
population[i+1].fitness)
{
if(population[i].fitness>
=best)
best=population[i].fitness;
best_mem=i;
if(population[i+1].fitness<
=worst)
worst=population[i+1].fitness;
worst_mem=i+1;
else
if(population[i].fitness<
worst=population[i].fitness;
worst_mem=i;
if(population[i+1].fitness>
best=population[i+1].fitness;
best_mem=i+1;
/*ifbestindividualfromthenewpopulationisbetterthan*/
/*thebestindividualfromthepreviouspopulation,then*/
/*copythebestfromthenewpopulation;
elsereplacethe*/
/*worstindividualfromthecurrentpopulationwiththe*/
/*bestonefromthepreviousgeneration*/
if(best>
=population[POPSIZE].fitness)
population[POPSIZE].gene[i]=population[best_mem].gene[i];
population[POPSIZE].fitness=population[best_mem].fitness;
population[worst_mem].gene[i]=population[POPSIZE].gene[i];
population[worst_mem].fitness=population[POPSIZE].fitness;
}
/**************************************************************/
/*Selectionfunction:
Standardproportionalselect()ionfor*/
/*maximizationproblemsincorporatingelitistmodel-makes*/
/*surethatthebestmembersurvives*/
voidselect()(void)
intmem,i,j,k;
doublesum=0;
doublep;
/*findtotalfitnessofthepopulation*/
sum+=population[mem].fitness;
/*calculaterelativefitness*/
population[mem].rfitness=population[mem].fitness/sum;
population[0].cfitness=population[0].rfitness;
/*calculatecumulativefitness*/
for(mem=1;
population[mem].cfitness=population[mem-1].cfitness+
population[mem].rfitness;
/*finallyselectsurvivorsusingcumulativefitness.*/
p=rand()%1000/1000.0;
if(p<
population[0].cfitness)
newpopulation[i]=population[0];
j++)
if(p>
=population[j].cfitness&
p<
population[j+1].cfitness)
newpopulation[i]=population[j+1];
/*onceanewpopul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- yx2 函数 问题