进化算法程序
- 格式:docx
- 大小:69.85 KB
- 文档页数:22
完整的遗传算法函数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实现遗传算法程序一、本文概述遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。
由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。
本文旨在介绍如何使用MATLAB实现遗传算法程序。
MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。
我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。
通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。
二、遗传算法基础遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。
遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。
在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。
每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。
通过选择(Selection)、交叉(Crossover)和变异(Mutation)等操作,生成新一代的个体,并重复这一过程,直到找到满足条件的最优解或达到预定的迭代次数。
选择操作是根据个体的适应度,选择出适应度较高的个体作为父母,参与下一代的生成。
常见的选择算法有轮盘赌选择(Roulette Wheel Selection)、锦标赛选择(Tournament Selection)等。
基于两阶段变异交叉策略的差分进化算法张大斌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 算法进行了一些研究和改进。
遗传算法:遗传算法(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月校址:甘肃省兰州市原创性声明本人郑重声明:本人所呈交的学位论文,是在导师的指导下独立进行研究所取得的成果。
学位论文中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。
除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。
对本文的研究成果做出重要贡献的个人和集体,均已在文中以明确方式标明。
本声明的法律责任由本人承担。
论文作者签名:日期:关于学位论文使用授权的声明本人在导师指导下所完成的论文及相关的职务作品,知识产权归属兰州大学。
本人完全了解兰州大学有关保存、使用学位论文的规定,同意学校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和借阅;本人授权兰州大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存和汇编本学位论文。
本人离校后发表、使用学位论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为兰州大学。
本学位论文研究内容:□可以公开□不易公开,已在学位办公室办理保密申请,解密后适用本授权书。
(请在以上选项内选择其中一项打“√”)论文作者签名:导师签名:日期:日期:进化程序设计模式研究和生命进化现象的程序模拟摘要目前在计算机程序设计领域,对软件的动态自适应能力的需求越来越强烈,它要求软件在运行过程中能够根据运行环境的情况动态地改变行为,从而更好地适应环境,这就要求我们的程序和软件能够自动地进化,能够动态适应不同的运行环境。
遗传算法及其MATLAB程序代码遗传算法及其MATLAB实现主要参考书:MATLAB 6.5 辅助优化计算与设计飞思科技产品研发中⼼编著电⼦⼯业出版社2003.1遗传算法及其应⽤陈国良等编著⼈民邮电出版社1996.6主要内容:遗传算法简介遗传算法的MATLAB实现应⽤举例在⼯业⼯程中,许多最优化问题性质⼗分复杂,很难⽤传统的优化⽅法来求解.⾃1960年以来,⼈们对求解这类难解问题⽇益增加.⼀种模仿⽣物⾃然进化过程的、被称为“进化算法(evolutionary algorithm)”的随机优化技术在解这类优化难题中显⽰了优于传统优化算法的性能。
⽬前,进化算法主要包括三个研究领域:遗传算法、进化规划和进化策略。
其中遗传算法是迄今为⽌进化算法中应⽤最多、⽐较成熟、⼴为⼈知的算法。
⼀、遗传算法简介遗传算法(Genetic Algorithm, GA)最先是由美国Mic-hgan⼤学的John Holland于1975年提出的。
遗传算法是模拟达尔⽂的遗传选择和⾃然淘汰的⽣物进化过程的计算模型。
它的思想源于⽣物遗传学和适者⽣存的⾃然规律,是具有“⽣存+检测”的迭代过程的搜索算法。
遗传算法以⼀种群体中的所有个体为对象,并利⽤随机化技术指导对⼀个被编码的参数空间进⾏⾼效搜索。
其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定等5个要素组成了遗传算法的核⼼内容。
遗传算法的基本步骤:遗传算法是⼀种基于⽣物⾃然选择与遗传机理的随机搜索算法,与传统搜索算法不同,遗传算法从⼀组随机产⽣的称为“种群(Population)”的初始解开始搜索过程。
种群中的每个个体是问题的⼀个解,称为“染⾊体(chromos ome)”。
染⾊体是⼀串符号,⽐如⼀个⼆进制字符串。
这些染⾊体在后续迭代中不断进化,称为遗传。
在每⼀代中⽤“适值(fitness)”来测量染⾊体的好坏,⽣成的下⼀代染⾊体称为后代(offspring)。
PBIL进化算法在考试系统中的应用【摘要】针对程序设计基础(C语言)网络课程的在线测试,开发了基于B/S技术的程序设计基础智能考试系统。
利用了PBIL进化算法实现了组卷,很好的保证了试卷的结构、知识点、难度等属性的智能分配,设计了一个主观题评阅算法。
【关键词】PBIL进化算法;智能考试系统;主观题评阅算法0 引言随着计算机应用的迅猛发展,人们迫切要求利用现代信息技术来进行在线考试。
在线考试系统极大地提高了教学的灵活性,它在许多领域已经有了广泛的应用。
现阶段在线考试系统种类繁多,但目前已有的网上考试系统题型单一,没有真正通用的集自动组卷、在线答卷、自动评卷、成绩管理与统计分析、题库管理、用户管理、记录查询、在线审批于一体的综合考试系统,为了积极适应新形势的发展和信息网络化的发展趋势,科学有效地利用信息网络的资源和技术优势,开发一个在线考试系统是非常必要和可行的。
1 国内外研究现状目前大多数考试系统的系统结构:比较流行的是C/S结构和B/S结构。
C/S结构,即Client/Server(客户机/服务器)结构。
它通过将任务合理分配到Client端和Server端,降低了系统的通讯开销。
这种结构的考试系统要求在服务器和客户端单机上都安装考试应用软件,客户端软件具有考题的显示,考试计时及与服务器通信联络等功能。
服务器端软件则负责维护题库、抽取试题及考后的阅卷、成绩的收取、统计、汇总等工作。
考生在单机上参加考试,考试结果被系统收集到服务器中的指定目录下。
B/S结构,即Browser/Server(浏览器/服务器)结构。
该结构的核心是WEB 服务器,它负责接收浏览器的WEB页请求和数据请求,并处理WEB页请求,同时将数据请求通过数据库接口程序转换成数据库服务器能够接受的形式,之后送到数据库服务器,数据库服务器执行相应的数据库操作,并将结果通过数据库接口程序的转换送回WEB服务器,WEB服务器将结果处理成浏览器能够接受的形式后,送回发出请求的浏览器,显示结果。
编程语言中的自然语言生成与文本生成技巧在当今信息技术高度发达的时代,编程语言早已成为连接人类与计算机的桥梁。
而在编程语言的发展中,自然语言生成(Natural Language Generation, NLG)和文本生成技巧扮演着重要的角色。
本文将着重讨论编程语言中的自然语言生成与文本生成技巧,并探讨其应用和挑战。
一、自然语言生成的定义与原理自然语言生成是一种通过计算机程序产生自然语言文本的技术,其目的是使计算机能够以人类可理解的方式与人进行交流。
自然语言生成的关键是将非结构化数据转化为自然语言文本,这需要程序根据给定的输入和规则生成相应的文本。
自然语言生成的原理主要包括语法分析、语义理解和语言生成三个阶段。
语法分析阶段通过分析句子的结构和词法规则,将输入的非结构化数据转换为语法树。
语义理解阶段将语法树转化为表示原始意思的逻辑形式。
最后,在语言生成阶段,程序根据逻辑形式和规则生成自然语言文本。
二、文本生成技巧的分类与应用文本生成技巧是自然语言生成的重要组成部分,根据生成文本的方式和应用场景,可以分为以下几类。
1. 模板生成模板生成是一种简单而常用的文本生成技巧。
通过定义一系列含有占位符的文本模板,根据输入的数据替换占位符,生成最终的文本。
模板生成常用于生成简单句子或段落,例如系统生成的邮件回复、通知等。
2. 随机生成随机生成是指通过挑选一系列预定义的规则和句法结构,然后随机选择其中的一种生成结果。
这种技巧常用于生成创意文本、游戏内容等,通过随机性可以获得多样化的结果。
3. 机器学习生成机器学习在文本生成领域有着广泛的应用。
通过训练模型,计算机可以学习输入的文本数据,并生成与输入文本相似的新内容。
例如,通过训练神经网络模型,可以实现自动写诗、文章摘要生成等功能。
4. 进化算法生成进化算法是另一种用于文本生成的技巧。
通过不断迭代和进化,选择性地生成新的文本,并根据事先定义的评估函数对生成的结果进行筛选和改进,以得到更好的文本生成效果。
有约束多目标粒子群算法matlab程序约束多目标粒子群算法(Constrained Multi-Objective Particle Swarm Optimization,CMOPSO)是一种用于处理多目标优化问题的进化算法。
以下是一个简单的MATLAB 示例程序,演示了如何实现CMOPSO。
请注意,这只是一个基本的框架,你可能需要根据你的具体问题进行适当的修改。
```matlabfunction [paretoFront, paretoSet] = cmopso(objectiveFunction, constraintFunction, nParticles, nIterations, nObjectives)% 参数设置nVariables = 2; % 例子中假设有两个变量w = 0.5; % 权重因子c1 = 2; % 学习因子1c2 = 2; % 学习因子2vMax = 0.2; % 最大速度nConstraints = 2; % 约束数量% 初始化粒子群particles.position = rand(nParticles, nVariables);particles.velocity = rand(nParticles, nVariables);particles.bestPosition = particles.position;particles.bestValue = inf(nParticles, nObjectives);% 迭代优化for iteration = 1:nIterations% 更新粒子位置和速度for i = 1:nParticles% 计算适应值fitness = objectiveFunction(particles.position(i, :));% 计算约束违反度constraintViolation = constraintFunction(particles.position(i, :));% 更新粒子最优解if all(constraintViolation <= 0) && dominates(fitness, particles.bestValue(i, :))particles.bestPosition(i, :) = particles.position(i, :);particles.bestValue(i, :) = fitness;end% 更新全局最优解if all(constraintViolation <= 0) && dominates(fitness, globalBestValue)globalBestPosition = particles.position(i, :);globalBestValue = fitness;end% 更新粒子速度和位置r1 = rand(1, nVariables);r2 = rand(1, nVariables);particles.velocity(i, :) = w * particles.velocity(i, :) + ...c1 * r1 .* (particles.bestPosition(i, :) - particles.position(i, :)) + ...c2 * r2 .* (globalBestPosition - particles.position(i, :));% 速度限制particles.velocity(i, :) = min(max(particles.velocity(i, :), -vMax), vMax);% 更新粒子位置particles.position(i, :) = particles.position(i, :) + particles.velocity(i, :);endend% 获取Pareto 前沿和Pareto 集paretoFront = [];paretoSet = [];for i = 1:nParticlesif all(constraintFunction(particles.position(i, :)) <= 0)isDominated = false;for j = 1:size(paretoFront, 1)if dominates(particles.bestValue(i, :), paretoFront(j, :))isDominated = true;break;elseif dominates(paretoFront(j, :), particles.bestValue(i, :))paretoFront(j, :) = [];break;endendif ~isDominatedparetoFront = [paretoFront; particles.bestValue(i, :)];paretoSet = [paretoSet; particles.bestPosition(i, :)];endendendendfunction result = dominates(a, b)% 判断a 是否支配bresult = all(a <= b) && any(a < b);end```请注意,这只是一个简单的示例,具体问题的约束函数和目标函数需要根据你的应用进行修改。
SFL算法的流程图和算法摘要:本文主要介绍sfl算法的流程图和算法,并总结出sfl 算法的易于理解、参数较少、收敛速度较快、寻优能力强、易于实现等优点。
关键词:sfl;算法;参数;优点中图分类号:m774 文献标识码:a 文章编号:1006-3315(2011)3-176-001混合蛙跳算法(shuffled frog leaping algorithm, sfla)是2000年由eusuff等人提出的一种基于群体智能的后启发式计算技术。
sfl作为一种生物进化算法, 它结合了基因进化的模因演算法(memetic algorithm)和群体行为的粒子群算法( particle swarm optimization)两者的优点,具有概念易于理解、参数较少(比pso 算法更少的参数)、收敛速度快、全局寻优能力强、易于实现等优点。
一、sfl的编码和参数1.frog的编码在sfl算法中,frog的编码决定了解的形式和结果。
和传统的ga算法相比,sfl算法最突出的特点是frog可以使用实值进行编码,frog的每一个基因都可以使用实值,减少了二进制转换时间。
2.sfl算法中的参数2.1种群规模:种群中青蛙的个数,即解的个数。
2.2族群个数:族群个数决定了sfl算法的搜寻范围,族群个数越多,搜索范围越广,利于可行解的全局搜索。
2.3最大步长:当更新族群中的frog时,需要设定最大的更新步长,避免更新过快,找不到最优解。
步长的设定决定了frog的局部搜索能力,步长越小,局部搜索能力越强,但时间也越长。
2.4阈值:用于控制算法挑出的参数。
通常是残差、精度等数值。
二、sfl算法流程图和算法在sfl算法执行过程中,当群体中的frog的适应度函数达到优化要求时,程序挑出、结束,否则继续执行算法,直到有可行解的出现。
在sfl算法执行过程中使用了分组融合的概念,每次根据适应度值的不同,对整个群体进行分组,分组后进行组内更新,即每组中适应度函数最差的frog。
遗传编程算法
遗传编程算法是一种计算机算法,由欧洲的John Koza教授于
1990年提出。
它的目的是在计算机程序中,自动演化出能够解决复杂
问题的程序代码。
这种算法是一种基于仿生学思想的计算模拟,它模
仿了生物遗传进化的过程,通过对程序代码进行“基因组合”、“基
因交叉”和“基因变异”等遗传操作,不断“进化”出更优化的程序,最终得到满足特定要求的解决方案。
与其他优化算法不同的是,遗传编程不需要用户给出一个具体的
数学模型,而是根据问题本身的逻辑、特点和输入输出的要求,自动
演化出适合的程序代码。
这种算法可以有效地解决一些复杂的问题,
如电力系统的优化、信号处理、模式识别、机器学习等。
同时,遗传
编程算法的应用范围非常广泛,不仅可以用于单个程序的设计,还可
以用于组合多个程序生成更复杂的系统。
在遗传编程算法的实现过程中,需要用到三个关键步骤:种群初
始化、适应度评估和遗传操作。
首先,需要初始化一批随机的程序代码,即为输入数据构建初始的种群基因池。
然后,需要对每个程序代
码进行适应度评估,以确定哪个程序的性能最好,从而选择出优秀的
个体进入下一步的遗传操作。
在遗传操作中,通过随机的基因组合、
基因交叉和基因变异操作,生成新的程序代码,并将其中性能最好的
程序添加到种群中,持续迭代,直到找到最优解。
总的来说,遗传编程算法是一种既高效又可靠的计算机算法,可用于求解各种问题。
然而,在实际应用中,使用该算法需要具备一定的数学与编程技能,需要根据具体问题进行调整和优化,以提高算法的效率和穷尽解空间。
随机变异差分进化算法欧阳海滨;高立群;孔祥勇【摘要】为了避免差分进化算法陷入早熟,提出了一种随机变异差分进化算法(RMDE).这种算法改进了差分进化算法的变异操作,采用随机选择的方式进行变异和扰动操作,增加种群的多样性,平衡算法的局部搜索和全局搜索.对几种标准的函数进行了测试,结果表明RMDE算法优于其他5种算法.并将该算法应用于13机组的电力系统经济调度问题,与文献其他算法相比,RMDE算法取得的结果优于最近文献所报道的结果.【期刊名称】《东北大学学报(自然科学版)》【年(卷),期】2013(034)003【总页数】5页(P330-334)【关键词】差分进化算法;随机选择;变异;扰动;多样性【作者】欧阳海滨;高立群;孔祥勇【作者单位】东北大学信息科学与工程学院,辽宁沈阳110819;东北大学信息科学与工程学院,辽宁沈阳110819;东北大学信息科学与工程学院,辽宁沈阳110819【正文语种】中文【中图分类】TP301.6函数优化问题一直是测试算法优化性能的经典问题,它具有广泛的应用背景,在商业、农业和工程等领域的各个分支几乎都存在这类问题.差分进化(differentialevolution,DE)算法[1]是一种基于群体差异的智能进化方法,对于解决函数优化问题具有一定的优势.本质上DE是一种基于实数编码的具有保优思想的遗传算法,不同点在于DE利用父代不同个体之间的变异及贪婪选择策略产生子代.但DE同其他进化算法一样,存在易早熟,收敛精度不高的缺陷.为提高DE的性能,一些学者提出了一些经典的改进DE算法.Rahnamayan等[2]提出了反向差分进化算法(ODE),该算法引入了一种反向学习(opposition-based learning,OBL)技术,一定程度上能够防止算法陷入局部最优.Qin和Suganthan[3]提出了一种自适应差分进化算法(SaDE),利用均匀分布对变异率和交叉率进行了调整,并引入拟牛顿局部搜索,增强算法的全局搜索能力.Zhang和Sanderson[4]提出了一种带有外部最优存档的自适应差分进化算法(JADE).该算法对搜索过程中最优解进行存档,并自适应地调整了变异率和交叉率.这些经典的改进算法改善了DE的优化性能,但仍存在易陷入局部最优的不足.本文提出了一种随机变异差分进化算法(RMDE).采用不确定随机的形式来选择是否需要进行变异,并在变异过程中引入一定的扰动,增加种群的多样性,进一步改善差分进化算法的优化性能.函数优化问题的测试以及13机组电力系统经济调度问题的求解,验证了本文算法的有效性.1 DE算法DE算法的具体流程如下[1]:Step 1 种群初始化.DE采用N个D维向量作为每一代的种群,xi,g=(xi1,g,…,xiD,g),i=1,2,…,N.采用随机方式进行种群初始化,以第i个向量的第j位初始参数值为例,可取xi,j,0=rand·(xjmax-xjmin)+xjmin,(1)其中rand表示(0,1)区间均匀分布的随机数.Step 2 变异.对于每个目标向量xi,g,变异向量通过以下方式产生:vi,g=xr0,g+F·(xr1,g-xr2,g).(2)式中:r0,r1,r2为{1,2,…,N}中两两互异的3个随机整数;F为变异率. Step 3 交叉.目标向量xi,g和它相应的变异向量vi,g进行交叉,进而产生试验向量ui,g=(ui1,g,ui2,g,…,uiD,g),具体操作如下:(3)其中:CR为交叉率;r为[1,2,…,D]的随机整数.Step 4 选择.DE采用贪婪原则对试验向量和当前种群中的目标向量进行选择,具体表达式如下:(4)Step 5 终止判断.若循环代数g超过最大迭代次数Gmax或者精度达到要求,停止搜索,输出结果;否则返回step 2,重新对种群执行变异、交叉和选择等操作.2 RMDE算法在DE算法的基础上,RMDE算法主要有两点不同,分别是随机变异操作和扰动策略.下面将对这两点进行详细描述.2.1 随机变异操作变异操作是DE算法关键的步骤,对算法的种群多样性及搜索空间的开发起到重要作用.在DE算法和改进DE算法中,每一子代个体的产生都经过固定的变异操作,经过多次迭代,个体之间的差异性将变得很小,容易导致算法过早聚集,大大减少了种群的多样性.为了更好地开发解空间和改善算法种群的多样性,本文借助DE/rand/1的变异操作有利于全局搜索的优点和DE/best/1的变异操作有利于局部精确搜索,提高算法的收敛速度的优点,提出了一种随机变异操作,具体表达式如式(5)所示:(5)其中:rand1,rand2和rand都为[0,1]区间均匀分布的随机数;xri,g,i=0,1,2为当前种群中随机选取的个体;xbest,g为当前种群中最优个体,且xri,g≠xbe st,g.由式(5)可知,随机变异操作改变了原始变异操作的固定模式,结合了DE/rand/1算法和DE/best/1算法的变异操作,对变异操作进行随机选择,有效地扩大了算法的解空间,增强了算法的大范围搜索.2.2 扰动策略DE算法通过变异、交叉和选择,使得整个群体向着当前最优解进化,但当前最优解可能是全局最优解,也可能是局部最优解.如果是全局最优解,则在选择操作中不会被淘汰,得以在种群中存活;如果是局部最优解,将会导致整个种群陷入局部最优的现象,即通过变异、交叉和选择的循环,产生的新解处于局部最优解的邻域,而在此邻域中不存在比当前局部最优解更好的解,此时就迫切需要跳出局部最优.针对此种现象,本文提出一种带有小概率的扰动策略,具体表达式如下:xr,g=xmin+rand·(xmax-xmin).(6)其中:xr,g为当前种群中随机选取的个体;xmax和xmin分别为解的上限和下限.在迭代过程中,当随机数满足一个小概率时,则从种群中随机的选取个体进行扰动,增强算法跳出局部最优的能力.同时考虑到有效地结合随机变异操作和扰动策略,将设置一个调和参数Mr,对随机变异操作和扰动策略进行随机的选择,具体流程如下:if rand<Mrif rand>0.5vi,g=xbest,g+rand1·(xr1,g-xr2,g)elsevi,g=xr0,g+rand2·(xr1,g-xr2,g)end ifelsevi,g=xmin+rand·(xmax-xmin)end.其中扰动的发生是小概率事件,因此Mr一般取大于0.9的值.2.3 RMDE算法流程RMDE算法跟DE算法主要的不同在于变异过程.具体的RMDE算法的伪代码如下所示:1.initialize the problem and algorithm parameters2.variable initialization and object function value calculation3.to start evolution operationfor g=1∶Gmax3.1 random mutationif rand<Mrif rand>0.5vi,g=xbest,g+rand1·(xr1,g-xr2,g)elsevi,g=xr0,g+rand2·(xr1,g-xr2,g)end ifelsevi,g=rand·(xmax-xmin)+xminend if3.2 crossover operation3.3 selection and updatingend for4.displaying result3 仿真结果与分析3.1 测试函数及仿真结果本次实验选取了5个标准测试函数对RMDE算法进行测试.并选取经典的DE/rand/1算法、DE/best/1算法、PSO算法、SaDE算法、JADE算法与本文算法相比较,以验证本文算法的有效性.5个测试函数的具体表达式如下所示:f2:Rastrigrin functionf3:Rosenbrock functionf4:Ackley functionf5:Schwefel’s problem 2.2本次实验利用Matlab 7.1编程实现,在Intel (R) Pentium(R) 4 CPU 2.93 GHz 的电脑上独立运行30次.算法参数的设置如下:DE/rand/1及DE/best/1算法中F=0.5,CR=0.9;PSO算法、SaDE算法及JADE算法的参数值根据文献[3-4]设置;本文算法参数CR=0.9,Mr=0.99,种群大小都为100.函数优化结果如表1所示,其中最优结果通过加粗显示.从表1可以看出:RMDE算法跟DE/rand/1算法、DE/best/1算法、PSO算法、SaDE算法和JADE算法相比较,RMDE算法在最优值、最差值、平均最优值和标准差四个方面都是最好的.平均最优值和标准差说明了一个算法的寻优能力和稳定性,而最差值和最优值指标从另一角度说明了算法的有效性.综上所述,RMDE算法要优于其他5种算法,为优化问题的解决提供了选择.3.2 13机组电力系统经济调度优化3.2.1 电力系统经济调度数学模型电力系统经济调度问题(EDP)是在各运转发电机组电力输出上、下限不等式约束及机组电力输出总和与负载需求相等的等式约束前提下,使发电成本最小化的优化问题.其数学模型如下:(7)其中:n代表电力系统中机组的总数;Fi(Pi)为机组i的非凸集的发电成本函数,Pi 为电力系统中机组i的电力输出;PD为电力系统总的负载需求;PL为电力系统总的网损,本文的模型忽略系统总的网损,即PL=0;Pimin为机组i的输出的下限值;Pimax为机组i的输出的上限值;ai,bi,ci是发电成本的特征系数;ei,fi为阀点效应所增加的发电成本系数.其中各个参数的具体取值范围详见参考文献[5].3.2.2 约束处理方法电力系统经济调度问题包含了等式约束和不等式约束,外部罚函数法是处理约束优化问题的经典算法.但本文采用实用的程序方法对约束进行处理.表1 函数优化结果Table 1 The results of function optimization函数算法迭代次数最优值最差值平均最优值标准差f1DE/rand/115008.27e-0128.25e-0091.41e-0092.24e-009DE/best/115002.26e-0295.15e-0278.54e-0281.01e-027PSO15001.36e-0411.74e-0318.05e-0333.34e-032SaDE15002.43e-0463.08e-0424.98e-0441.19e-043JADE15009.83e-0659.36e-0598.04e-0602.24e-059RMDE15005.16e-1182.17e-1057.28e-1073.96e-106f2DE/rand/130008.95e+0003.08e+0011.72e+0012.86e+001DE/best/13 0003.28e+0002.85e+0011.50e+0012.09e+001PSO30002.89e-0122.87e-0081.87e-0111.08e-011SaDE30001.88e-0131.14e-0112.89e-0124.01e-012JADE30003.08e-0132.90e-0128.95e-0125.08e-012RMDE30000.00e-0002.84e-0146.80e-0156.64e-015f3DE/rand/120003.57e+0008.79e+0013.64e+0012.88e+001DE/best/12 0002.43e+0001.57e+0013.00e+0003.77e+000PSO20001.08e+0002.85e+00 12.09e+0004.03e+000SaDE20004.85e-0049.08e-0039.75e-0045.98e-004JADE20003.67e-0224.98e-0204.97e-0219.75e-021RMDE20001.52e-0282.42e-0242.27e-0264.74e-026f4DE/rand/120001.85e-0082.94e-0073.86e-0083.05e-008DE/best/120003.98e+0015.05e+0013.09e+0012.95e+001PSO20001.02 e-0083.02e-0072.90e-0083.75e-008SaDE20004.03e-0131.24e-0133.00e-0132.40e-013JADE20008.75e-0159.00e-0147.95e-0156.43e-015RMDE20003.55e-0157.10e-0154.50e-0151.59e-015f5DE/rand/120001.23e-0193.08e-182.78e-0183.97e-018DE/best/120001.63e-0092.05e-0088.90e-0091.05e-008PSO20001.92e-0146.49e-0124.03e-0132.84e-013SaDE20009.30e-0213.08e-0207.93e-0205.93e-020JADE20003.97e-0358.04e-0342.78e-0343.90e-035RMDE20005.01e-0433.04e-0414.98e-0427.85e-0421) 不等式约束处理.当Pi<Pimin或Pi>Pimax时,违反了不等式约束条件,因此采用式(8)对其进行修正,修正后判断是否违反约束条件,如果是则继续进行修正,直到Pimin≤Pi≤Pimax.(8)2) 等式约束处理.对于等式约束,进行适当的调整,具体的调整程序如下所示:r∈(1,2,…,n),PL=0;if Pr-g<Prmin,Pr=Prmin else Pr=Pr-g end ifif Pr+g>Prmax,Pr=Prmax else Pr=Pr+g end ifend if.3.2.3 仿真结果及分析利用RMDE算法进行30次独立实验,其中种群大小为100,最大迭代数为5000次,并且将30次独立实验的最优解与其他参考文献进行比较,30次独立实验中RMDE算法得到最优解P,P=(628.318 546 16,149.598 977 41,222.755 286 80,109.865 034 16,109.866 177 07,109.866 495 64,60,109.866 177 07,109.864 016 79,40,40,55,55),最优解的目标函数值是:17 960.384 8.如表2所示,本文算法与其他9篇文献算法相比较,结果表明本文算法优化出既满足系统的负载需求和输出限制,又使系统发电成本最小的较好解. 表2 13单元电力系统经济调度问题的对比结果Table 2 Comparison of results for the economic dispatch problems of power system with 13 units算法13机组优化结果进化规划[6]17994.07混沌差分进化算法[7]17963.94混合差分进化算法[8]17975.73模式搜索[9]17969.17混沌粒子群[10]17963.96量子粒子群[5]17963.95遗传算法[11]17963.83差分进化[12]17963.83一种改进粒子群算法[13]17968.90本文算法17960.384 结论本文修正了差分进化算法的单一变异策略,采用随机选择方式的变异策略,并引入了小概率的扰动操作,提出了一种随机变异差分进化算法.几个测试函数的仿真实验,同经典的DE/rand/1,DE/best/1,SaDE和JADE算法及PSO算法相比较,表明RMDE算法较好地改善了DE算法的优化性能.并用RMDE算法求解13机组的电力系统经济调度问题,结果显示出RMDE算法能够求得较好的解,为解决复杂优化问题提供了选择.参考文献:[1] Storn R,Price K.Differential evolution:a simple and efficient adaptive scheme for global optimization over continuous spaces[J].Journal of Global Optimization,1997(11):341-359.[2] Rahnamayan S,Tizhoosh H R,Salama M M A.Opposition-based differential evolution[J].IEEE Transactions on Evolutionary Computation,2008,12(1):64-79.[3] Qin A K,Suganthan P N.Self-adaptive differential evolution algorithm for numerical optimization[C]//IEEE Congress on Evolution Computation.Edinburgh:IEEE,2005:1785-1791.[4] Zhang J Q,Sanderson A C.JADE:adaptive differential evolution with optional external archive[J].IEEE Transactions on Evolutionary Computation,2009,13(5):945-958.[5] Coelho L S,Mariani V C.Particle swarm approach based on quantum mechanic and harmonic oscillator potential well for economic load dispatch with value-point effects[J].Energy Conveys Manage,2008,49(11):3080-3085.[6] Sinha N,ChakrabartiR R,Chattopadhyay P K.Evolutionary programming techniques for economic load dispatch[J].IEEE Transactions on Evolutionary Computation,2003,7(1):82-94.[7] Coelho L S,Mariani V bining of chaotic differential evolution and quadratic programming for economic dispatch optimization with value point effect[J].IEEE Transactions on Power Systems,2006,21(2):989-996.[8] Wang S K,Chi J P,Liu C W.Non-smooth/non-convex economic dispatch by a novel hybrid differential evolution algorithm[J].IET Generation Transmission & Distribution,2007,1(5):793-803.[9] Al-Sumait J S,Al-Othman A K,Sykulski J K.Application of pattern search method to power system value-point economic loaddispatch[J].Electrical Power & Energy Systems,2007,29(10):720-730.[10]Coelho L S,Mariani V C.Economic dispatch optimization using hybrid chaotic particle swarm optimizer[C]//Proceedings of IEEE International Conference on Systems Man and Cybernetics (SMC).Montreal,2007:1963-1968.[11]He D,Wang F,Mao Z.A hybrid genetic algorithm approach based on differential evolution for economic dispatch with value-pointeffect[J].Electric Power Energy System,2008,30(1):31-38.[12]Noman N,Iba H.Differential evolution for economic load dispatch problems[J].Electric Power System Research,2008,78(8):1322-1331.[13]吴沛锋,高立群,邹德旋,等.一种改进粒子群优化算法[J].东北大学学报:自然科学版,2011,32(2):1692-1695.(Wu Pei-feng,Gao Li-qun,Zou De-xuan,et al.An improved particle swarm optimization algorithm[J].Journal of Northeastern University:Natural Science,2011,32(2):1692-1695.)。
进化算法作业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。