版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、首先申明,这个程序不是我写的,也是我以前在网上找到的(本科的时候看过,没太看懂,但是测试过了,可以运行的)。这是完整的rosenbrock函数的代码,绝对可用:function f, df, ddf = rosenbrock(x); % rosenbrock.m this function returns the function value, partial derivatives % and hessian of the (general dimension) rosenbrock function, given by: % % f(x) = sum_i=1:d-1 100*(x(i+1)
2、 - x(i)2)2 + (1-x(i)2 % % where d is the dimension of x. the true minimum is 0 at x = (1 1 . 1). % % carl edward rasmussen, 2001-07-21. d = length(x); f = sum(100*(x(2:d)-x(1:d-1).2).2 + (1-x(1:d-1).2); if nargout 1 df = zeros(d, 1); df(1:d-1) = - 400*x(1:d-1).*(x(2:d)-x(1:d-1).2) - 2*(1-x(1:d-1); d
3、f(2:d) = df(2:d) + 200*(x(2:d)-x(1:d-1).2); end if nargout 2 ddf = zeros(d,d); ddf(1:d-1,1:d-1) = diag(-400*x(2:d) + 1200*x(1:d-1).2 + 2); ddf(2:d,2:d) = ddf(2:d,2:d) + 200*eye(d-1); ddf = ddf - diag(400*x(1:d-1),1) - diag(400*x(1:d-1),-1); end 比如说,你可以使用常用的多目标函数的优化来调用: x fx c = minimize(0 1, rosenbr
4、ock, 50) linesearch 1; value 9.801010e-001 linesearch 2; value 7.711174e-001 linesearch 3; value 6.087456e-001 linesearch 4; value 4.170023e-001 linesearch 5; value 3.019709e-001 linesearch 6; value 2.622712e-001 linesearch 7; value 5.074002e-002 linesearch 8; value 4.360344e-002 linesearch 9; value
5、 2.569778e-002 linesearch 10; value 9.313900e-003 linesearch 11; value 2.831055e-003 linesearch 12; value 6.570921e-004 linesearch 13; value 7.260670e-005 linesearch 14; value 2.660941e-007 linesearch 15; value 3.306084e-011 linesearch 16; value 1.640334e-012 linesearch 17; value 4.746897e-014 lines
6、earch 18; value 6.733194e-020 linesearch 19; value 2.144528e-025 linesearch 20; value 1.343529e-030 linesearch 21; value 4.930381e-032 x = 1.0000 1.0000 fx = 101.0000 0.9801 0.7711 0.6087 0.4170 0.3020 0.2623 0.0507 0.0436 0.0257 0.0093 0.0028 0.0007 0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
7、0.0000 0.0000 c = 23 minimize 时多目标优化的函数,你应该不需要的。用遗传算法求解rosenbrock函数源代码2008-05-02 19:49:10| 分类:程序算法|字号大 中小 订阅/* 基本遗传算法实例程序求解 rosenbrock函数version 1.0 programmed by jim zhou,1994.12. */ #include #include #include /* 常量定义*/ #define popsize 500 /群体大小#define maximization 1 /最大标志,寻找最大解#define minimization
8、2 /最小标志,寻找最小解/* 数据定义(对于不同的问题,可能会有少许差别)*/ #define cmax 100 /确定的最大值#define cmin 0 /确定的最小值#define length1 10 /第一个染色体长度#define length2 10 /第二个染色体长度#define chromlength length1+length2 /染色体总长度int functionmode = maximization; /求解最优值类型:最大?最小int popsize = 80; /群体规模m int maxgeneration = 200; /最大代数double pc =
9、0.6; /交叉概率double pm = 0.001; /变异概率/* 数据结构定义*/ struct individual /个体数据结构 char chromchromlength+1; /个体的基因型,用字符串表示double value; /个体的目标值double fitness; /个体的适应度; /* 全局变量定义*/ int generation; /代数int best_index; /最优个体的索引int worst_index; /最坏个体的索引struct individual bestindividual; /当代最优个体struct individual wors
10、tindividual; /当代最坏个体struct individual currentbest; /迄今为止,最好的个体struct individual populationpopsize;/群体/* 函数原型声明*/ void generateinitialpopulation(void); void generatenextpopulation(void); void evaluatepopulation(void); long decodechromosome(char *,int,int); void calculatefitnessvalue(void); void calcu
11、lateobjectvalue(void); void findbestandworstindividual(void); void performevolution(void); void selectionoperator(void); void crossoveroperator(void); void mutationoperator(void); void outputtextreport(void); /* 主程序*/ void main(void) generation =0; generateinitialpopulation(); evaluatepopulation();
12、while(generationmaxgeneration) generation+; generatenextpopulation(); evaluatepopulation(); performevolution(); outputtextreport(); /* 函数:产生第一代个体参数: void */ void generateinitialpopulation(void) int i,j; srand(time(null); for(i=0;ipopsize;i+) for(j=0;jchromlength;j+) populationi.chromj=(rand()%105)?0
13、:1; populationi.chromchromlength=0; /* 函数:初始化第一代个体参数: void */ void generatenextpopulation(void) selectionoperator(); crossoveroperator(); mutationoperator(); /* 函数:通过特定的方程式评估群体参数: void */ void evaluatepopulation(void) calculateobjectvalue(); calculatefitnessvalue(); findbestandworstindividual(); /*
14、函数:将染色体的基因型解码成表现型参数: void 备注:返回值可能是正、或负。对于不同的解码方法,这个值也可能是“ unsigned int ”*/ long decodechromosome(char *string,int point,int length) int i; long decimal=0l; char *pointer; for(i=0,pointer=string+point;ilength;i+,pointer+) decimal+=(*pointer-0)(length-1-i); return decimal; /* 函数:计算目标值参数: void 备注:对于不同
15、的问题,用户需要修改此处代码。该代码实例是求解rosenbrock函数rosenbrock函数定义如下:f(x1,x2)=100*(x1*2-x2)*2+(1-x1)*2 该函数的最大值是:f(-2.048,-2.048)=3905.926227 */ void calculateobjectvalue(void) int i; long temp1,temp2; double x1,x2; for(i=0;ipopsize;i+) temp1=decodechromosome(populationi.chrom,0,length1); temp2=decodechromosome(popul
16、ationi.chrom,length1,length2); x1=4.096*temp1/1023.0-2.048; x2=4.096*temp2/1023.0-2.048; populationi.value=100*(x1*x1-x2)*(x1*x1-x2)+(1-x1)*(1-x1); /* 函数:计算适应度参数: void */ void calculatefitnessvalue(void) int i; double temp; for(i=0;i0.0) temp=cmin+populationi.value; else temp=0.0; else if(functionmo
17、de=minimization) if(populationi.valuecmax) temp=cmax-populationi.value; else temp=0.0; populationi.fitness=temp; /* 函数:查找至今的最优个体参数: void */ void findbestandworstindividual(void) int i; double sum=0.0; bestindividual=population0; worstindividual=population0; for(i=1;ibestindividual.fitness) bestindiv
18、idual=populationi; best_index=i; else if(populationi.fitnesscurrentbest.fitness) currentbest=bestindividual; /* 函数:根据 “ 优胜劣汰 ” 模型对群体进行评估。用迄今为止最好的替代最差的个体参数: void */ void performevolution(void) if(bestindividual.fitnesscurrentbest.fitness) currentbest=populationbest_index; else populationworst_index=c
19、urrentbest; /* 函数:用选择操作重新选择一个染色体参数: void */ void selectionoperator(void) int i,index; double p,sum=0.0; double cfitnesspopsize; struct individual newpopulationpopsize; for(i=0;ipopsize;i+) sum+=populationi.fitness; for(i=0;ipopsize;i+) cfitnessi=populationi.fitness/sum; for(i=1;ipopsize;i+) cfitness
20、i=cfitnessi-1+cfitnessi; for(i=0;icfitnessindex) index+; newpopulationi=populationindex; for(i=0;ipopsize;i+) populationi=newpopulationi; /* 函数:采用单点交叉方式对染色体进行交叉操作参数: void */ void crossoveroperator(void) int i,j; int indexpopsize; int point,temp; double p; char ch; for(i=0;ipopsize;i+) indexi=i; srand(time(null); for(i=0;ipopsize;i+) point=rand()%(popsize-i); temp=indexi; indexi=indexpoint+i; indexpoint+i=temp; for(i=0;ipopsize-1;i+=2) p=rand()%1000/1000.0; if(ppc) point=rand()%(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报书:高等教育促进产教融合型城市建设的机制创新研究
- 上海杉达学院《数字产品研发与设计》2023-2024学年第一学期期末试卷
- 上海农林职业技术学院《经济效益审计》2023-2024学年第一学期期末试卷
- 上海农林职业技术学院《电化学原理及应用》2023-2024学年第一学期期末试卷
- 上海旅游高等专科学校《医学史》2023-2024学年第一学期期末试卷
- 上海立信会计金融学院《康养建筑设计》2023-2024学年第一学期期末试卷
- 上海科技大学《电化学及应用》2023-2024学年第一学期期末试卷
- 上海交通大学《机器人控制系统》2023-2024学年第一学期期末试卷
- 上海建设管理职业技术学院《中级宏观经济学(英语)》2023-2024学年第一学期期末试卷
- 上海济光职业技术学院《框架与应用开发》2023-2024学年第一学期期末试卷
- 电动自行车火灾事故教训警示课件
- 江苏小高考计算机考试题目及答案
- 上海市徐汇区2023-2024学年九年级上学期一模化学试题
- 2024年度初级会计《初级会计实务》模拟试题及答案
- 美容护肤招商方案
- 新概念英语课件NCE1-lesson57-58(共21张)
- 国开2023秋《人文英语3》第5-8单元作文练习参考答案
- 水平四《排球正面双手传球》教学设计
- 黑龙江省黑河北安市2024届中考二模数学试题含解析
- 计算机系统权限修改审批表
- 建标 189-2017 妇幼健康服务机构建设标准
评论
0/150
提交评论