进化算法程序
完整的遗传算法函数Matlab程序

完整的遗传算法函数Matlab程序遗传算法是一种模拟自然进化过程的算法,通过遗传代数操作来搜索最优解。
它是一种优化算法,可以用于解决复杂问题,例如函数优化、组合优化、机器学习等。
在Matlab 中,遗传算法可以通过使用内置函数进行实现,也可以编写自己的遗传算法函数。
以下是一个完整的遗传算法函数Matlab程序的示例:function [x_best, f_best] = GA(fit_func, nvars)% fit_func: 适应度函数句柄% nvars: 变量个数% 遗传算法参数设置pop_size = 100; % 种群大小prob_crossover = 0.8; % 交叉概率prob_mutation = 0.02; % 变异概率max_gen = 1000; % 最大迭代次数% 初始化种群pop = rand(pop_size, nvars);for i = 1:max_gen% 计算适应度for j = 1:pop_sizefitness(j) = feval(fit_func, pop(j,:));end% 找到最优个体[f_best, best_idx] = max(fitness);x_best = pop(best_idx,:);% 交叉操作for j = 1:2:pop_sizeif rand < prob_crossover% 随机选择父代idx_parent1 = randi(pop_size);idx_parent2 = randi(pop_size);parent1 = pop(idx_parent1,:);parent2 = pop(idx_parent2,:);% 交叉idx_crossover = randi(nvars-1);child1 = [parent1(1:idx_crossover) parent2(idx_crossover+1:end)];child2 = [parent2(1:idx_crossover) parent1(idx_crossover+1:end)];% 更新种群pop(j,:) = child1;pop(j+1,:) = child2;endend% 变异操作for j = 1:pop_sizeif rand < prob_mutation% 随机选择变异个体idx_mutation = randi(nvars);pop(j,idx_mutation) = rand;endendendend在上述程序中,遗传算法的参数通过设定变量的值进行设置,包括种群大小、交叉概率、变异概率和最大迭代次数等。
用MATLAB实现遗传算法程序

用MATLAB实现遗传算法程序一、本文概述遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。
由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。
本文旨在介绍如何使用MATLAB实现遗传算法程序。
MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。
我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。
通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。
二、遗传算法基础遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。
遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。
在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。
每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。
通过选择(Selection)、交叉(Crossover)和变异(Mutation)等操作,生成新一代的个体,并重复这一过程,直到找到满足条件的最优解或达到预定的迭代次数。
选择操作是根据个体的适应度,选择出适应度较高的个体作为父母,参与下一代的生成。
常见的选择算法有轮盘赌选择(Roulette Wheel Selection)、锦标赛选择(Tournament Selection)等。
差异进化算法中影响进化过程的参数研究

1 基本差异进化算法
差异进 化是基 于实数 编码 的进化 算法 , 主要 包括 变异 、 叉 试 函数在 交叉 因子和变异因子取不同值情况下 的进化过程 。 交 1 p ee函 数 和选择三个基本步骤 。对于 函数 厂( l , , ( , 足 z ≤ 2. S h r - , … z )z 满 z 2
0 1 0 4 进 化依 次 出现 早熟 , . , . .- . , 0 5 0 6时 进 化最 快 , . 0 7次之 ,
1 1 形 成初始群 .
设定种群 规模 N P和最 大进化代 数 I E MA T R X。群 规模 N P
为差异进化算法 的主要 控 制参 数 之一 , 保证 进 化个 体 的多 样 为 近似 目标 函数 最优 值定为 10×1 I . 0 4 种群 规模 NP=30 0, 性, 同时减少 内存消耗及 运算 时间 , 通常 取变量 个数 的 5倍 ~1 0 最大进化代迭代 次数 I E MA T R X=3 0 C 和F按照前述方 法变 0 ,R 倍, 且最少 为变量个数的 4倍【 。 化 。C R=0 1 , . 时 整体进化平稳 , 到达最 优解 的时间基本 随 F值 用随机的方法产生第一代群 : 增加而增加 ; 3 0代时 , 到 0 F取 0 1 . . ~0 6的情 况下都能达 到最优 z =z 十rn( —z ) i , , , 1 a d , =12 … NP。 值 , 0 7 . 况 下进 化较慢 , 并 未停 止 进化 。C =0 4 在 . ~0 9情 但 R . 其中 ,a (,j rn 01之间 的随机 数 ; 和 分别为 第J个变量 的 d 时, F取 O 8 0 9 前期进 化缓慢 的趋 势越 发明显 ; . ,., F=0 1时 , . 进 上界和下界 。 化迅速 早熟 , 0 2~0 5时 前期 进化 较快 , 在 . . 但后 期 0 2 0 3早 . ,.
自适应差分进化算法在设计洪水过程线推求中的应用

般而言, 在洪峰附近的典型洪水模式改变相对较
大, 远离洪峰的位置相对较/ [。基于此, J6 \] 可将优化 目 标表示为设计洪水过程与典型洪水过程流量斜率
的离 差加权 平方和最小 , 约束表示为设计 洪水过程 的
时段放大倍 比相差较大而在两个时段衔接处的洪水 过程线上 出现 突变现象… 1。采 用传统 的徒手修匀 法往往要进行反复多次试算 , 工作量大且会改变典
黄燕荣(9 2 , 广西贵港人 , 18 一) 男, 学士学位, 主要从事水文水资源工作 , m ih ag ar g 1nem。 E— a :un yno @2 e. l n o 2 1
红水 河 2 1 年第 1 00 期
向量如 下产生 :
w = d £= w
,
G 1 Xr, += 1 G+F ×( .。 3 ) ( ) 义rG一 2 , G 6
2 洪水过程线放 大优化模 型
设计洪水过程既要保持设计洪峰值、 特定时段的 设计洪量值, 又要尽量保持原典型洪水 的分配模式。
一
法 有同频率 和同倍 比两种。同频率法 一般选取 J 洪峰和年最大次洪总量并规定洪峰和洪量的频率相 等, 从而确定洪峰设计值和洪量设计值 。同倍 比放
大 法选取 洪峰或 控制 时段 的洪量 进行 放大 。对 防洪 起 控制作用 的水利 工 程经常 采用 分时 段 同频 率放大 法 。当峰量关 系 不好 时采 用 同 频 率法 放 大 , 因各 会
据 。在生 产实 践 中一般采用 放 大典 型洪水 过程线 的 方法推求 设计 洪水过 程线 。设计 洪水 过程 线放大 方
试采用 自 适应差分进化算法求解 , 在满足洪峰洪量
约束的条件下推求出满意的设计洪水过程线, 避免
基于两阶段变异交叉策略的差分进化算法

基于两阶段变异交叉策略的差分进化算法张大斌1,2,江华1,徐柳怡1,张文生2【摘要】摘要:针对差分进化算法存在的收敛速度慢、稳健性差等问题,借鉴多种变异优化策略,提出一种基于两阶段不同变异交叉策略的差分进化算法。
引入反向混沌搜索的初始化方法,将初始种群分为较好和较差2 个子种群,两阶段依次对上一阶段改进的较好和较差2 个子种群采用不同的差分进化策略,并定期将较好和较差2 个子种群重新按适应值排列组合进入下一阶段,以提高种群的质量,同时克服单一差分策略的缺陷。
函数仿真结果表明,与其他差分进化算法相比,该算法的收敛速度和寻优精度均得到明显改善。
【期刊名称】计算机工程【年(卷),期】2014(040)008【总页数】7【关键词】关键词:差分进化;差分策略;反向学习;混沌搜索;两阶段变异交叉;函数优化问题1 概述差分进化(Differential Evolution,DE)算法是由Rainer Stoorn 和Kenneth Price[1]在1995 年共同提出的,它是一种简单、快速、基于全局的并行直接搜索优化算法。
其原理简单、鲁棒性强、受控参数少、易于实现。
由于差分进化算法对函数的可导性甚至连续性要求较低,近年来被广泛地应用于解决复杂的、离散的、非线性的优化问题,且具有良好的效果。
DE 与传统的遗传算法(GA)不同,它采用实数编码、基于简单变异交叉操作和一对一的贪婪竞争生存策略,同时保有独特的记忆能力进行动态搜索,并可以不断调整其搜索策略,最后使种群个体趋于一致。
标准的DE 算法在低维度函数寻优问题上能够使种群收敛于全局最优解,并且寻优速度快、求解质量高。
但是在求解高维度、多峰值这些复杂函数问题过程中,很容易出现早熟现象,即算法经过多次迭代之后,个体间的差异变小,种群多样性降低并陷入局部收敛;后期收敛速度较慢并且缺乏稳健性。
此外,在差分进化模式和参数取值上缺乏普遍的指导原则。
为了提高差分进化算法搜索和开发能力及算法的收敛速度,许多学者对标准的DE 算法进行了一些研究和改进。
遗传算法简介及sga流程【精品毕业设计】(完整版)

遗传算法:遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。
遗传算法(Genetic Algorithms简称GA)是由美国Michigan大学的John Holland教授于20世纪60年代末创建的。
它来源于达尔文的进化论和孟德尔、摩根的遗传学理论,通过模拟生物进化的机制来构造人工系统。
遗传算法作为一种全局优化方法,提供了一种求解复杂系统优化问题的通用框架,它不依赖于问题的具体领域,对优化函数的要求很低并且对不同种类的问题具有很强的鲁棒性,所以广泛应用于计算机科学、工程技术和社会科学等领域。
John Holland教授通过模拟生物进化过程设计了最初的遗传算法,我们称之为标准遗传算法。
标准遗传算法流程如下:1)初始化遗传算法的群体,包括初始种群的产生以及对个体的编码。
2)计算种群中每个个体的适应度,个体的适应度反映了其优劣程度。
3)通过选择操作选出一些个体,这些个体就是母代个体,用来繁殖子代。
4)选出的母代个体两两配对,按照一定的交叉概率来进行交叉,产生子代个体。
5)按照一定的变异概率,对产生的子代个体进行变异操作。
6)将完成交叉、变异操作的子代个体,替代种群中某些个体,达到更新种群的目的。
7)再次计算种群的适应度,找出当前的最优个体。
8)判断是否满足终止条件,不满足则返回第3)步继续迭代,满足则退出迭代过程,第7)步中得到的当前最优个体,通过解码,就作为本次算法的近似最优解。
早熟收敛:一般称之为“早熟”,是遗传算法中的一种现象。
指在遗传算法早期,在种群中出现了超级个体,该个体的适应值大大超过当前种群的平均个体适应值。
从而使得该个体很快在种群中占有绝对的比例,种群的多样性迅速降低,群体进化能力基本丧失,从而使得算法较早收敛于局部最优解的现象。
早熟收敛的本质特征是指群体中的各个个体非常相似,群体的多样性急剧减少,当前群体缺乏有效等位基因(最优解位串上的等位基因),在遗传算子作用下不能生成高阶竞争模式。
基于远缘杂交的精英进化算法

基于远缘杂交的精英进化算法 周飞;罗杰 【摘 要】文中主要以提高进化算法求解TSP问题的效率为研究目标,借鉴人类社会进化中具有远缘杂交优势的理论和进化算法中的精英策略,提出一种基于远缘杂交的精英进化算法。该算法在初始阶段将种群分为精英种群和普通种群,对精英种群则不经过交叉直接进入下一代,对普通种群则基于远缘杂交原则进行交叉,并将子代与精英种群一同组成新子代。仿真实验证明算法能增强优秀个体遗传的机会,提高种群基因的多样性,在深度搜索和广度寻优之间取得了平衡。针对TSP实验结果表明,算法具有可靠的全局收敛性及较快的收敛速度。%In this paper,the aim of the research is to improve the efficience of solving TSP with evolutionary algorithm. The elite evolu-tionary algorithm which is based on distant hybridization was proposed on the distant hybridization theory and elitist strategy. At the initial stage,the algorithm population is divided into elite populations which are directly into the next generation without crossover and general populations who deliver the offspring by crossover based on the principle of distant hybridization. And the total offspring is made by the elite population and the offspring which is delivered by general populations. The simulation results show that the opportunities for elite in-dividual genetic,and the population diversity of genetic was enhanced by the algorithm. And the balance between in the depth and breadth of the search optimizing was acquired. The TSP experimental results show that the algorithm has reliable global convergence and faster convergence rate. 【期刊名称】《计算机技术与发展》 【年(卷),期】2013(000)002 【总页数】4页(P93-96) 【关键词】进化算法;远缘杂交;精英策略;TSP 【作 者】周飞;罗杰 【作者单位】南京邮电大学 自动化学院,江苏 南京 210046;南京邮电大学 自动化学院,江苏 南京 210046
进化设计模式

分类号:密级:专业学位研究生学位论文论文题目(中文)进化程序设计模式研究和生命进化现象的程序模拟论文题目(外文)The study on "Evolutionary Programming Model"and the programming simulation on the phenomenon of the life evolution研究生姓名范玫学位类别工程硕士专业学位领域计算机应用学位级别硕士校内导师姓名、职称马义忠教授校外导师单位、姓名甘肃省冶金设计院郎宪录高工论文工作起止年月2011 年1月至2012年3月论文提交日期2012年 3月论文答辩日期2012年 5月学位授予日期2012年 5月校址:甘肃省兰州市原创性声明本人郑重声明:本人所呈交的学位论文,是在导师的指导下独立进行研究所取得的成果。
学位论文中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。
除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。
对本文的研究成果做出重要贡献的个人和集体,均已在文中以明确方式标明。
本声明的法律责任由本人承担。
论文作者签名:日期:关于学位论文使用授权的声明本人在导师指导下所完成的论文及相关的职务作品,知识产权归属兰州大学。
本人完全了解兰州大学有关保存、使用学位论文的规定,同意学校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和借阅;本人授权兰州大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存和汇编本学位论文。
本人离校后发表、使用学位论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为兰州大学。
本学位论文研究内容:□可以公开□不易公开,已在学位办公室办理保密申请,解密后适用本授权书。
(请在以上选项内选择其中一项打“√”)论文作者签名:导师签名:日期:日期:进化程序设计模式研究和生命进化现象的程序模拟摘要目前在计算机程序设计领域,对软件的动态自适应能力的需求越来越强烈,它要求软件在运行过程中能够根据运行环境的情况动态地改变行为,从而更好地适应环境,这就要求我们的程序和软件能够自动地进化,能够动态适应不同的运行环境。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进化算法作业1全局优化问题(1) minf1x 4x:2.1x: 1 x f x1x24x f 4x;st . 5 x i5,i 1,2一.程序(1)主函数:mai n.mclear all;clc;popsize=60; %种群规模chromlength=34; %二进制编码,编码精度为0.0001,所以串长I为17pc=0.7; %杂交概率pm=0.1; %变异概率t=0; %进化代数初始为0pop=in itpop(popsize,chromle ngth); % 随机产生初始种群while t<500 %迭代次数t=t+1;[objvalue]=calobjvalue(pop); % 计算目标函数值fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度[best in dividual,bestfit]=best(pop,fitvalue); %求出群体中适应度最大的个体及其适应度值x1仁decodechrom(besti ndividual,1,14); % 将二进制数转换为十进制数x22=decodechrom(besti ndividual,15,14);x1(t)=-5+10*x11/(pow2(14)-1); %将二值域中的数转换为变量域的数x2(t)=-5+10*x22/(pow2(14)-1);y(t)=4*x1(t)A2-2.1*x1(t)A4+1/3*x1(t)A6+x1(t)*x2(t)-4*x2(t)A2+4*x2(t)A4; % 计算最佳个体的目标函数值[n ewpop1]=select ion( pop,fitvalue); % 选择算子[n ewpop2]=crossover( newpop1,pc); % 交叉算子[n ewpop3]=mutati on(n ewpop2,pm); % 变异算子objvalue1=calobjvalue (n ewpop3(1,:));if objvalue1>y(t)newpop3(1,:)=best in dividual; % 保留最佳个体endpop=newpop3; %产生新种群endy; %每代的最佳目标函数值x1; %每代的最佳目标函数值对应的自变量x2;[gy,k]=min(y) %gy 为全局最优值,k 为最优值对应的进化代数此问题的全局最优值f min 1.0316。
gx1=x1(k) %全局最优值对应的自变量gx2=x2(k)plot(y) %最优值收敛曲线title(' 收敛性曲线');xlabel(' 进化代数');ylabel(' 函数值'); axis([0,500,-1.5,1.5]);(2)初始种群:initpop.mfunction pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength)); %rand 随机产生[0,1] 区间的一个小数,rand 四舍五入取整end(3)计算目标函数值::calobjvalue.m function [objvalue] =calobjvalue( pop )temp1=decodechrom(pop,1,14);temp2=decodechrom(pop,15,14); x1=-5+(10*temp1)/(pow2(14)-1); %将二值域中的数转化为变量域中的数x2=-5+(10*temp2)/(pow2(14)-1);0bjvalue=4*x1.A2-2.1*x1.A4+1/3*x1.A6+x1.*x2-4*x2.A2+4*x2.A4; % 计算目标函数enda.二进制转换为十进制:decodechrom.mfuncti0n temp=dec0dechr0m(p0p,sp0int,length )pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint 为起始点,length 为一个变量的长度temp=decodebinary(pop1);endb.求二进制串对应的十进制数:decodeb in ary.mfunction temp =decodebinary( pop)[px,py]=size(pop); %求pop 行数和列数for i=1:pypop1(:,i)=24(py-i).*pop(:,i);endtemp=sum(pop1,2); %每一行求和end(4)计算个体适应度:calfitvalue.m function fitvalue= calfitvalue( objvalue )fitvalue=1./(1+exp(objvalue));end(5)种群中最大适应度个体及其值:best.m function [bestindividual,bestfit] = best(pop,fitvalue ) [px,py]=size(pop);bestindividual=pop(1,:); bestfit=fitvalue(1);for i=2:px;if fitvalue>bestfitbestindividual=pop(i,:); best=fitvalue(i);endendend(6)选择算子:selection.mfunction [newpop1]=selection(pop,fitvalue) totalfit=sum(fitvalue); % 适应度和ps=fitvalue./totalfit; %单个个体被选择的概率pss=cumsum(ps); % 前几项累积和[px,py]=size(pop); ms=sort(rand(px,1)); %随机产生px 个0,1 之间的数,并按升序排列fitin=1; newin=1;while newin<=px if(ms(newin)<pss(fitin))newpop1(newin,:)=pop(fitin,:); newin=newin+1;elsefitin=fitin+1;endendend(7)交叉算子:crossover.mfunction [newpop2] = crossover( pop,pc ) [px,py]=size(pop);newpop2=ones(size(pop));for i=1:2:px-1if rand<pc cpoint=round(rand*py); %随机产生一个交叉位newpop2(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; %交换相邻两个个体交叉位之后的基因newpop2(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];elsen wepop2(i,:)=pop(i,:); n ewpop2(i+1,:)=pop(i+1,:); end end end(8) 变异算子:mutatio n.mfunction [n ewpop3] = mutati on( pop,pm ) [px,py]=size(pop); n ewpop3=pop; for i=1:pxif(ra nd<pm)mpoi nt=rou nd(ra nd*py); %随机产生一个变异位 if mpoin t<=0mpoin t=1; endif (n ewpop3(i,mpoi nt)==O) % 变为等为基因n ewpop3(i,mpo in t)=1; elsen ewpop3(i,mpo in t)=0; end end end end.独立运行程序 30次的结果最好目标函数值:-1.0316 平均目标函数值:-0.9914最差目标函数值:-0.9751标准方差:0.0286最好解:x1=0.0919 x2=-0.7126最好值:-1.0316运行结果及收敛性曲线如下图:5 1 2 5 2 1(x2 2x" x1 6)2 10 1 cos x14 28st. 5 X i 5 , i 1,2(1)主函数:mai n.mclear all;clcpopsize=40; %种群规模chromlength=28; %二进制编码,编码精度为0.001,所以串长I为14pc=0.8; %杂交概率pm=0.2; %变异概率t=0;pop=in itpop(popsize,chromle ngth); % 随机产生初始种群while t<500 %迭代次数t=t+1;[objvalue]=calobjvalue(pop); % 计算目标函数值fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度[best in dividual,bestfit]=best(pop,fitvalue); %求出群体中适应度最大的个体及其适应度值x1仁decodechrom(besti ndividual,1,14); % 将二进制数转换为十进制数SOT—cs. cm m□ . 71 EU运行结果收敛性曲线此问题的全局最优值min 0.398。
(2) min f2 x 10x22=decodechrom(besti ndividual,15,14);x1(t)=-5+10*x11/(pow2(14)-1); % 将二值域中的数转换为变量域的数x2(t)=-5+10*x22/(pow2(14)-1);y(t)=(x2(t)-5.1/(4*pi*pi).*x1(t)A2+5/pi.*x1(t)-6)A2+10.*(1-1/(8*pi)).*cos(x1(t))+10; 算最佳个体的目标函数值[newpop1]=selection(pop,fitvalue); %选择算子[newpop2]=crossover(newpop1,pc); %杂交算子[newpop3]=mutation(newpop2,pm); %变异算子objvalue1=calobjvalue(newpop3(1,:));if objvalue1>y(t) newpop3(1,:)=bestindividual; %保留最佳个体endpop=newpop3; %产生新种群endy; % 每代的最佳目标函数值x1; %每代的最佳目标函数值对应的自变量x2;[gy,k]=min(y); %全局最优值gy=vpa(gy,3) %设置输出精度gx1=x1(k); %全局最优值对应的自变量x1=vpa(gx1,4)gx2=x2(k);x2=vpa(gx2,4)plot(y) %最优值收敛曲线title(' 收敛性曲线');xlabel(' 进化代数');ylabel(' 函数值');axis([0,500,0.2,1.5]);(2 )初始种群:initpop.mfunction pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength)); %rand 随机产生[0,1] 区间的一个小数,取整end(3)计算目标函数值::calobjvalue.m function [objvalue] =calobjvalue( pop ) temp1=decodechrom(pop,1,14); temp2=decodechrom(pop,15,14);x1=-5+(10*temp1)/(pow2(14)-1); %将二值域中的数转化为变量域中的数x2=-5+(10*temp2)/(pow2(14)-1);objvalue=(x2-5.1/(4*pi*pi).*x1.A2+5/pi.*x1-6).A2+10.*(1-1/(8*pi)).*cos(x1)+10; enda.二进制转换为十进制:decodechrom.m%计rand 四舍五入function temp=decodechrom(pop,spoint,length ) pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint 为起始点,length 为一个变量的长度temp=decodebinary(pop1);endb.求二进制串对应的十进制数:decodeb in ary.mfunction temp =decodebinary( pop)[px,py]=size(pop); %求pop 行数和列数for i=1:pypop1(:,i)=24(py-i).*pop(:,i);endtemp=sum(pop1,2); %每一行求和end(4)计算个体适应度:calfitvalue.mfunction fitvalue= calfitvalue( objvalue ) fitvalue=1./(1+exp(objvalue));end(5)种群中最大适应度个体及其值:best.mfunction [bestindividual,bestfit] = best(pop,fitvalue ) [px,py]=size(pop);bestindividual=pop(1,:); bestfit=fitvalue(1);for i=2:px;if fitvalue>bestfitbestindividual=pop(i,:); best=fitvalue(i);endendend(6)选择算子:selection.mfunction [newpop1]=selection(pop,fitvalue)totalfit=sum(fitvalue); %适应度和ps=fitvalue./totalfit; %单个个体被选择的概率pss=cumsum(ps); %前几项累积和[px,py]=size(pop);ms=sort(rand(px,1)); %随机产生px个0,1之间的数,并按升序排列fitin=1;newin=1;while newin<=pxif(ms(newin)<pss(fitin))newpop1(newin,:)=pop(fitin,:); newin=newin+1;else fitin=fitin+1;endendend(7)交叉算子:crossover.m function [newpop2] = crossover( pop,pc ) [px,py]=size(pop); newpop2=ones(size(pop));for i=1:2:px-1if rand<pc cpoint=round(rand*py); %随机产生一个交叉位newpop2(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; 后的基因%交换相邻两个个体交叉位之newpop2(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)]; elsenwepop2(i,:)=pop(i,:); newpop2(i+1,:)=pop(i+1,:);endendend(8)变异算子:mutation.m function [newpop3] = mutation( pop,pm ) [px,py]=size(pop); newpop3=pop;for i=1:pxif(rand<pm) mpoint=round(rand*py); %随机产生一个变异位if mpoint<=0mpoint=1;endif (newpop3(i,mpoint)==0) %变为等为基因newpop3(i,mpoint)=1;else newpop3(i,mpoint)=0;endendendend.独立运行程序 30次的结果最差目标函数值:0.445标准方差:1.886e-004三•最好的一次结果最好解: x1=3.145 x2=2.265 最好值: 0.398 运行结果及收敛性曲线如下图:10(3) min f 3 x X :i 1st. 100 X i 100,i 1,2,,10此问题的全局最优值 f min 0。