文档库 最新最全的文档下载
当前位置:文档库 › Matlab环境下的遗传算法程序设计及优化问题求解

Matlab环境下的遗传算法程序设计及优化问题求解

Matlab环境下的遗传算法程序设计及优化问题求解
Matlab环境下的遗传算法程序设计及优化问题求解

本栏目责任编辑:谢媛媛

开发研究与设计技术

遗传算法(GA)是借鉴生物界自然选择和群体进化机制而形成的一种全局寻优算法,其本质上是一种基于概率的随机搜索算法。与其它的优化算法相比较,遗传算法具有以下优点:(1)通用性;(2)并行性;(3)简单性和可操作性;(4)稳定性和全局性。

1遗传算法概述

在遗传算法中,首先将空间问题中的决策变量通过一定的编码表示成遗传空间的一个个体,它是一个基因型串结构数据;然后将目标函数转换成适应度值,用来评价每个个体的优劣,并将其作为遗传操作的依据。遗传操作包括三个算子:选择、重组和变异。选择是从当前群体中选择适应值高的个体以生成交配池的过程,交配池是当前代与下一代之间的中间群体。选择算子的作用是用来提高群体的平均适应度值。重组算子的作用是将原有的优良基因遗传给下一代个体,并生成包含更复杂基因的新个体,它先从交配池中的个体随机配对,然后将两两配对的个体按一定方式相互交换部分基因。变异算子是对个体的某一个或几位按某一较小的概率进行反转其二进制字符,模拟自然界的基因突变现象。

遗传算法的基本程序实现流程如下:

(1)先确定待优化的参数大致范围,然后对搜索空间进行编码;(2)随机产生包含各个个体的初始种群;

(3)将种群中各个个体解码成对应的参数值,用解码后的参数求代价函数和适应度函数,运用适应度函数评估检测各个个体适应度;

(4)对收敛条件进行判断,如果已经找到最佳个体,则停止,否则继续进行遗传操作;

(5)进行选择操作,让适应度大的个体在种群中占有较大的比例,一些适应度较小的个体将会被淘汰;

(6)随机交叉,两个个体按一定的交叉概率进行交叉操作,并产生两个新的子个体;

(7)按照一定的变异概率变异,使个体的某个或某些位的性质发生改变;

(8)重复步骤(3)至(7),直至参数收敛达到预定的指标。使用遗传算法需要确定的运行参数有:编码串长度、交叉和变异概率、种群规模。编码串长度由问题的所要求的精度来决定。交叉概率控制着交叉操作的频率,交叉操作是遗传算法中产生新

个体的主要方法,所以交叉概率通常应取较大值,但如果交叉概率太大的话又可能反过来会破坏群体的优良模式,一般取0.4-

0.99。变异概率也是影响新个体产生的一个因素,如果变异概率

太小,则产生新个体较少;如果变异概率太大,则又会使遗传算法变成随机搜索,为保证个体变异后与其父体不会产生太大的差异,通常取变异概率为0.0001-0.1以保证种群发展的稳定性。种群规模太大时,计算量会很大,使遗传算法的运行效率降低,种群规模太小时,可以提高遗传算法的运行速度,但却种群的多样性却降低了,有可能找不出最优解,通常取种群数目20-100。从理论上讲,不存在一组适用于所有问题的最佳参数值,随着问题参数的变化,有效问参数的差异往往是十分显著的。

2用Matlab语言来实现遗传算法

Matlab是一个高性能的计算软件,配备有功能强大的数学函

数支持库,适用范围大,编程效率高,语句简单,功能齐备,是世界上顶级的计算与仿真程序软件。利用Matlab来编写遗传算法程序简单而且易于操作。

2.1编码

编码就是把一个问题的可行解从其解空间转换到遗传算法能够处理的搜索空间的转化方法,编码形式决定了重组算子的操作。遗传算法是对编码后的个体作选择与交叉运算,然后通过这些反复运算达到优化目标。遗传算法首要的问题是通过编码将决策变量表示成串结构数据。我们常用的是二进制编码,即用二进制数构成的符号串来表示每个个体。通常根据搜索精度(sca_var)、决策变量上界(range(2))的和下界(range(1))来确定各个二进制字符串的长度(bit_n),

搜索精度为sca_var=(range(2)-range(1))./

(2^bit_n—1),然后再随机产生一个的初始种群(be_gen),其规模为popusize。下面用encoding函数来实现编码和产生初始的种群:

function[be_gen,bit_n]=encoding(sca_var,range(1),range(2),popusize)

bit_n=ceil(log2((range(2)-range(1))./sca_var));be_gen=randint(popusize,sum(bit_n));2.2译码

决策变量经过编码之后,各个个体构成的种群be_gen要通过解码才能转换成原问题空间的决策变量构成的种群vgen,这样才

收稿日期:2006-01-05

作者简介:梁科(1981-),硕士研究生,研究方向:智能计算与优化方法;夏定纯(1963-),教授,研究方向:人工智能,计算机在线检测。

Matlab 环境下的遗传算法程序设计及优化问题求解

梁科,夏定纯

(武汉科技学院计算机科学学院,湖北武汉430073)

摘要:本文介绍了遗传算法的流程及几个算子,给出了在matlab语言环境下实现编码、译码、选择、重组和变异各算子的编程方法,最后用一个实例来说明遗传算法在寻找全局最优解中的应用。

关键词:遗传算法;matlab;程序设计中图分类号:TP312

文献标识码:A

文章编号:1009-3044(2007)04-11049-03

GeneticAlgorithmProgrammingByMatlabAndOptimizingProblemSolving

LIANGKe,XIADing-chun

(DepartmentofComputerscience,WuhanUniversityofScience&Engineering,Wuhan430073,China)

Abstract:Theseveralfactorsofgeneticalgorithmhavebeenpresentedinthispaper,andtheprogrammingofencoding、decoding、choice、crossoverandmutationofmatlabhavebeengiven,finally,afunctionoptimizingproblemhasbeenpresentedtodemonstratedtheapplicationaboutglobaloptimizingofgeneticalgorithm.

Keywords:GA;matlab;programming

1049

本栏目责任编辑:谢媛媛

开发研究与设计技术

电脑知识与技术

能计算其相应的各个适应度值。另外,译码首先要求出二进制数对应的十进制数decimal,然后根据下面的公式求出实际决策变量

X:X=range(1)+decimal*sca_dec.通常可以用decoding函数来实现

译码的过程:

function[vgen,fitness]=decoding(fcn,be_gen,bit_n,range(1),range(2))

popusize=size(be_gen,1);n_var=length(bit_n);

sca_dec=(range(2)-range(1))./(2^bit_n-1);bit_n=cumsun(bit_n);bit_n=[0bit_n];fori=1:n_var

be_var(i)=be_gen(:,bits(i)+1:bit_n(i+1));

var(i)=range(1)(i)+sum(ones(popusize,1)*2.^(size(be_var(i),2)-1:-1:0).*be_var(i),2).*sca_dec(i);end

vgen=[var(1,:)];fori=1:popusize

fitness(i)=eval([fcn,’(var_gene(i,:))’]);end

2.3选择

选择就是利用码后求得的各个个体的适应度的大小,从中选出一些适应度高的个体,并淘汰一些适应度较小的个体以生成交配池的过程。然后再对优良的个体进行交叉和变异操作。在选择算子中,先找出当前群体中适应度最高和最低的个体,将最佳个体bes_ind保留并替换最差个体,直接进入下一代,将剩余个体

evol_gen按适应值比例选择法进行操作,即采用轮盘赌(roulette

wheel)方式来实现。

这种方式首先计算每个个体的适应值,然后计算出该适应值在群体适应值总和中所占的比例,来表示该个体被选中的概率,这样既能保证最佳个体的适应度值不会减小,最佳个体不会被交叉变异操作所破坏,也能不断提高该群体的平均适应度值。比例选择法体现了生物进化过程中“优胜劣汰,适者生存”的思想,并且保证将优良的基因遗传给下一代。

我们可以用下面的函数来实现选择算子:

function[evol_gen,bes_ind,max_fitness]=selection(old_gen,fit-ness)

[min_fitn,expo(b)]=min(fitn);[max_fitn,expo(a)]=max_(fitn);popusize=length(fitness);bes_ind=old_gen(expo(a),:);

expo=[1:popusize];expo(expo(a))=0;expo(expo(b))=0;expo=nonzeros(expo);evol_gen=old_gen(expo,:);evol_fitness=fitness(expo,:);evol_popusize=popusize-2;

posel=evol_fitness/sum(evol_fitness);poselcum=cusum(posel);r=rand(1,evol_popusize);

selected=1+sum(poselcum*ones(1,evol_popusize)<ones(evol_po-pusize,1)*r);

evol_gen=evol_gen(selection,:);2.4重组

重组算子是产生新个体的主要方法,它决定了遗传算法的全局搜索能力。重组操作的作用是将原有的优良基因遗传给下一代个体,并生成包含更优良基因的新个体。通常使用的遗传算子是

一点交叉法,就是按交叉概率pc(0<pc1)实施交叉操作,两个个体编码串(string)在交叉位置处(crossp)相互交换各自的部分编码,从而形成新的一对个体。程序如下:

function[new_gen]=recombination(old_gen,pc)[nouse,match]=sort(rand(size(old_gen,1),1));match_gen=old_gen(match,:);pairs=size(match-gen,1)/2;bit_n=size(match_gene,2);string=rand(pairs,1)<pc;

crossp=randint(string,1,[1,bit_n]);crossp=string.*crossp;fori=1:pairs

new_gen([2*i-12*i],:)=[match_gen([2*i-12*i],1:crossp(i))match_gen([2*i2*i-1],crossp(i)+1:bin_n)];end

另外,一点交叉法操作的信息比较小,交叉点的位置的选择可能会带来较大的偏差,一点交叉算子不利于长距离的保留和重组。

2.5变异

变异算子是模拟自然界生物进化的中染色体的基因突变现象,从而改变染色体的结构和物理性状。变异算子是产生新个体的辅助方法,它决定了遗传算法的局部搜索能力。变异操作通过按照变异概率(mp)随机反转某位等位基因的二进制字符的值来实现。程序如下:

function[new_gen]=mutation(old_gen,pm)

mpoints=find(rand(size(old_gen))<pm);new_gen=old_gen;

new_gen(mpoints)=1-old_gen(mpoints);end

当重组操作发生早熟收敛时,这时引入变异算子会有很好的效果。一方面,变异算子可以使群体进化中丢失的等位基因信息得以恢复,保持群体基因中的差异性,防止发生早熟收敛;另一方面,当种群规模较大时,在重组操作基础上引入适度的变异,也能够提高遗传算法的局部搜索效率。

3实际应用例子

在这里我们以一个函数为例来验证遗传算法程序的全局搜索能力,设函数为z=3*(1-x)^2*exp(-(x^2)-(y+1)^2)-10*(x/5-x^3-

y^5)*exp(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2),x∈[-3,3],y∈[-3,3]。

图1函数图形示意图图2最佳适应度值示意图

如果取种群的规模popusize=20,搜索精度sca_var=0.000001,交叉率pc=0.98,变异概率mp=0.01。图1是函数图形示意图,图2中给出了遗传generation=30代之后的适应度值。另外,由于采用了每一代的最优个体直接进入下一代的方法,所以不会出现最佳适应度值减小的情况,可以发现在第12代以后,最佳适应度值变换就很小了,到26代之后,最佳适应度值已经不再发生变化,这时可以认为已经找到了全局最优解:x=0.011765,y=1.588235,z=

1050

本栏目责任编辑:谢媛媛

开发研究与设计技术

(上接第981页)

在技术上各有特点。因此,用户是从广义总线的角度出发,采用按系统的不同部分选用不同的总线即多层次总线呢还是在条件成熟时选用单一总线,是一个需要慎重考虑的问题。

4现场总线控制系统的优越性

一般人们在论述FCS的优点时总是对DCS来说的。与DCS相比,FCS具有以下几个方面的优点:

4.1FCS的可靠性比DCS高

这包括两方面的内容:

(1)FCS的系统的可靠性比DCS高。

(2)FCS传输出数字信号,抗干扰能力强、可靠性高。由于现场总线设备的智能化、数字化,与模拟信号相比,它从根本上提高了测量和控制的精确度,减少了传送误差。同时由于系统的结构简化,设备与连线减少,现场仪表内部功能加强,减少了信号的往返传输,提高了系统工作的可靠性,

4.2结构性好

FCS可以把智能技术分散现场各点。把控制功能彻底下放到现场,依靠现场智能设备实现基本控制功能。

4.3可控性强

FCS有较强的自诊断功能,数字通信使用户从控制室中查索所有设备的数据、组态、运行和诊断信息已成为现实。自诊断功能可以及时帮助用户分析问题是否发生在变法器。无需亲临现场观察后才得出结论。这样,即使设备发生故障,也可以很快地恢复生产。

4.4互操作性和互换性

标准化的智能仪表可方便互连、互组态和互换。互操作性是实现互连设备间、系统问的信息传送与沟通。互换性是指不同生产厂家功能类似的设备之间可以进行相互替换。互操作和互换性是将系统升级为现场总线的关键动力之一。

4.5统一组态

现场总线采用功能块方式组态。现场总线已有大量可满足各种过程控制的功能模块。如输入、输出、PID调节等,一些模块还具有报警功能。

4.6开放性好

标准化的网络互连。在FCS中,用户可以把遵循相同协议不同品牌的产品集成到一个规模随意的系统里,使用户真正具有系统集成的主动权。可以说现场总线控制系统就是自动化领域的开设互联系统,它从根本上打破了DCS系统的封闭性,使企业与外界信息的沟通范围不断扩大,为企业实现信息化控制与管理创造了条件。

4.7数据库的一致性

现场总线采用完全分散的数据库概念,任何同现场总线接口的人机界面都可显示有关仪表与控制回路的信息。这样,便不会产生重复的、不一致的数据。在DCS系统中,操作站与仪表数据库之间的同步化无法保证。现场总线只使用一个数据库,也就是分散于现场仪表中的数据库,人机界面就是从该数据库中获取定标数据的,手持终端所查索的也是同一个数据库。

4.8节省开支

节省电缆和控制室面积,降低安装及维护的费用。与传统设备间点对点的接线方式相比,让多台设备共享一条总线的现场总线系统自然能够节省大量的电缆、端子、槽盒、桥架。连线设计与接头校对的工作量也大大减少。当需要增加现场控制设备时,无需增设新的电缆,可就近连接在原有的电缆上。这样既节省了投资,也减少了设计、安装的工作量。

5现场总线标准的统一是必然的

这种预言也许为时尚早,但无论如何从用户角度看,多种总线并立决不是一件好事。由于现场总线采用完全不同的通信协议,要解决这些不同标准系统之间的相互兼容和互操作问题,就必然会增加用户的投资和使用维护的复杂性。统一的TCP/IP协议使得Internet网络快速发展的经验和以太网标准的许多进步,使一直为不同协议的兼容问题所困扰的工业界看到一线希望,许多现场总线组织正致力于发展Ethernet/IP技术,以太网以其廉价高速方便的特性被引入底层网络不仅使现场层、控制层和管理层在垂直面的集成获得方便,更能降低不同厂家在水平层面的集成成本。当然,要使工业以太网最终成为统一的总线标准还有许多技术问题有待解决(如总线供电、本征安全等),但并非是不可能的。

6结束语

综上所述,现场总线技术适应了控制向智能化、分散化、网络化以及标准化发展的潮流,是建立企业信息网络,实现管控一体化的基础,因此成为自动化技术发展的热点。但多种总线的利益之争,实际上已阻碍和延缓了FCS技术在我国的应用。我国工控界应如何迎接自控领域这场变革的到来呢?这个问题可从分析我国工控业的发展历程和现状中找到答案。我国民族工控产品如PLC、DCS长期落后于国外,根本原因是国外少数几家大公司为保证其垄断经营的地位对其工控产品采用封闭式结构,我国对其关键核心技术只有通过引进消化后方可掌握,因此贻误了市场时机而总是落后于人家,受制于人。现场总线技术的开放性策略无疑为我国工控界在国际市场上的发展带来了一个千载难逢的平等竞争机遇,当游戏规则的变更使大家站在同一起跑线上时,就看谁捷足先登,抢先占领市场,把握主动权,最终领导市场。因此,我们应当紧紧抓住这一契机,率先推出有中国特色的现场总线产品,开创中国自己的国际工控产品的名牌,从而翻开中国工控界发展的新篇章。从目前来看,我国在现场总线的开发和应用方面都紧跟了世界潮流,其发展速度超出预料。但同时我们希望政府和企业应拿出更多的资金,投入这一领域,这是大有希望的事业。

参考文献:

[1]于常友.等.IEC61158中不同现场总线的评价和选择[M].电气自动化,2001,23(2):4-6.

[2]李嘉.等.引入以太网技术是现场总线技术发展的一个必然趋势[M].自动化仪表,2001,22(5):1-4.

[3]常弘.等.现场总线中三种基本通信模式分析[J].电工技术杂志,2001,6:19-21.

[4]郭凤文.水工业自动化控制技术的发展趋势[M].中国给水排水,2001,17(3):32-35.

8.101909。

4结束语

用matlab语言编写了遗传算法程序,并通过了调试,用一个实际例子来对问题进行了验证,这对在matlab环境下用遗传算法来解决优化问题有一定的意义。

参考文献:

[1].李敏强,寇纪松,林丹,李书全.遗传算法的基本理论与应用[M].北京:科学出版社,2004.

[2].张志涌,徐彦琴,matlab教程[M],北京航空航天大学出版社.北京,2003.

[3].CoelloCarlosACoelloCortesNareliCruzHybirdizingAGeneticAlgorithmwithArtificialInmuneSystemforGlobalOptimiza-tion.[J].EngineeringOptimization.2004,36(5):607-634.

1051

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

MATLAB课程遗传算法实验报告及源代码

硕士生考查课程考试试卷 考试科目: 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点最短路径,其中没有连接端点表示没有路径。要求设计遗传算法对该问题求解。 a e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 一、问题分析(10分) 这是一个简单的三元函数求最小值的函数优化问题,可以利用遗传算法来指导性搜索最小值。实验要求必须以matlab 为工具,利用遗传算法对问题进行求解。 在本实验中,要求我们用M 函数自行设计遗传算法,通过遗传算法基本原理,选择、交叉、变异等操作进行指导性邻域搜索,得到最优解。 二、实验原理与数学模型(20分) (1)试验原理: 用遗传算法求解函数优化问题,遗传算法是模拟生物在自然环境下的遗传和进化过程而形成的一种自适应全局优化概率搜索方法。其采纳了自然进化模型,从代表问题可能潜在解集的一个种群开始,种群由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体;初始种群产生后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的解:在每一代,概据问题域中个体的适应度大小挑选个体;并借助遗传算子进行组合交叉和主客观变异,产生出代表新的解集的种群。这一过程循环执行,直到满足优化准则为止。最后,末代个体经解码,生成近似最优解。基于种群进化机制的遗传算法如同自然界进化一样,后生代种群比前生代更加适应于环境,通过逐代进化,逼近最优解。 遗传算法是一种现代智能算法,实际上它的功能十分强大,能够用于求解一些难以用常规数学手段进行求解的问题,尤其适用于求解多目标、多约束,且目标函数形式非常复杂的优化问题。但是遗传算法也有一些缺点,最为关键的一点,即没有任何理论能够证明遗传算法一定能够找到最优解,算法主要是根据概率论的思想来寻找最优解。因此,遗传算法所得到的解只是一个近似解,而不一定是最优解。 (2)数学模型 对于求解该问题遗传算法的构造过程: (1)确定决策变量和约束条件;

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

遗传算法Matlab程序

% f(x)=11*sin(6x)+7*cos(5x),0<=x<=2*pi; %%初始化参数 L=16;%编码为16位二进制数 N=32;%初始种群规模 M=48;%M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异 T=100;%进化代数 Pc=0.8;%交叉概率 Pm=0.03;%%变异概率 %%将十进制编码成16位的二进制,再将16位的二进制转成格雷码 for i=1:1:N x1(1,i)= rand()*2*pi; x2(1,i)= uint16(x1(1,i)/(2*pi)*65535); grayCode(i,:)=num2gray(x2(1,i),L); end %% 开始遗传算子操作 for t=1:1:T y1=11*sin(6*x1)+7*cos(5*x1); for i=1:1:M/2 [a,b]=min(y1);%找到y1中的最小值a,及其对应的编号b grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体y1(1,b)=inf;%用来排除已找到的最小值 end for i=1:1:M/2 p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置if rand()

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

遗传算法的MATLAB程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

遗传算法的原理及MATLAB程序实现

1 遗传算法的原理 1.1 遗传算法的基本思想 遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。 遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。 1.2 遗传算法的特点 1.2.1 遗传算法的优点 遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点: 1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。 2. 遗传算法具有内在的本质并行性。它的并行性表现在两个方面,一是遗传

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

简单的遗传算法MATLAB实现

遗传算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理。遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制,种群经过若干代以后,总是达到最优(或近最优)的状态。 自从遗传算法被提出以来,其得到了广泛的应用,特别是在函数优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法更是发挥了重大的作用,大大提高了问题求解的效率。遗传算法也是当前“软计算”领域的重要研究课题。 本文首先结合MATLAB对遗传算法实现过程进行详细的分析,然后通过1个实际的函数优化案例对其应用进行探讨。 1. 遗传算法实现过程 现实生活中很多问题都可以转换为函数优化问题,所以本文将以函数优化问题作为背景,对GA的实现过程进行探讨。大部分函数优化问题都可以写成求最大值或者最小值的形式,为了不是一般性,我们可以将所有求最优值的情况都转换成求最大值的形式,例如,求函数f(x)的最大值,

若是求函数f(x)的最小值,可以将其转换成 g(x)=-f(x),然后求g(x)的最大值, 这里x可以是一个变量,也可是是一个由k个变量组成的向量,x=(x1, x2, …, x k)。每个x i,i=1,2,…,k, 其定义域为D i,D i=[a i, b i]。 一般规定f(x)在其定义域内只取正值,若不满足,可以将其转换成以下形式, 其中C是一个正常数。 1.1 编码与解码 要实现遗传算法首先需要弄清楚如何对求解问题进行编码和解码。对于函数优化问题,一般来说,有两种编码方式,一是实数编码,一是二进制编码,两者各有优缺点,二进制编码具有稳定性高、种群多样性大等优点,但是需要的存储空间大,需要解码过程并且难以理解;而实数编码直接用实数表示基因,容易理解并且不要解码过程,但是容易过早收敛,从而陷入局部最优。本文以最常用的二进制编码为例,说明遗传编码的过程。

遗传算法求函数极大值(matlab实现)

遗传算法求函数最大值(matlab实现) 一、题目: 寻找f(x)=x2,,当x在0~31区间的最大值。 二、源程序: %遗传算法求解函数最大值 %本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些 Close all; Clear all; figure(1); fplot('variable*variable',[0,31]); %画出函数曲线 %以下定义遗传算法参数 GTSM=40; %定义个体数目 ZDYCDS=20; %定义最大遗传代数 EJZWS=5; %定义变量的二进制位数 DG=0.9; %定义代沟 trace=zeros(2, ZDYCDS); %最优结果的初始值

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异 Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定 规模的二进制种群和结构gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换 ObjV=variable*variable; %计算目标函数值f(x)=x2 while gen

使用MATLAB遗传算法工具实例(详细) (1)【精品毕业设计】(完整版)

最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。 本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。 8.1 遗传算法与直接搜索工具箱概述 本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。 8.1.1 工具箱的特点 GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。 使用语句 type function_name 就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。 工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。 遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。 遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。 8.1.1.1 功能特点 遗传算法与直接搜索工具箱的功能特点如下: 图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。 具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。 直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决方法和搜索方法。 遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的MATLAB程序结合使用。 支持自动的M代码生成。 8.1.1.2 图形用户界面和命令行函数 遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。 133

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab遗传算法程序

matlab遗传算法程序共13个.m文件。 1、B2F.m function [B,len,v]=B2F(sol,bounds) %[B,len]=B2F(x,bounds) 二进制编码函数 %x 编码向量如x=[6 8 9]; %bounds 边界约束ru如bounds=[4 8 ;3 11;6 12;]; %B 二进制编码串 %编码长度L由bounds(2)-bounds(1)决定 %以上为例: % 编码长度向量L=[4 8 6]编成二进制L=[11 1000 110],则len=[2 4 3] % 计算B=x-bound(1)=[2 5 3]编成二进制B=[10 0101 011] n=length(sol); len=[];B=[];v=[]; L=bounds(:,2)-bounds(:,1); L=de2bi(L); for i=1:n len(i)=length(L(i,:)); end v=sol-bounds(:,1)'; for i=1:n B=[B de2bi(v(i),len(i))]; end

2、changes.m function [pops]=changes(cpop,bounds,len,p) %基因突变函数 %function [pops]=changes(pop,bounds,len,p) %pop 种群数目 %bounds 边界约束 %len 每个变量的编码长度 % 如len为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推%p 突变概率 %pops 返回突变后的基因 %p1 基因突变数目 if isempty(p) p=0.01; end [n,m]=size(cpop); pop=cpop; p1=round(sum(len)*n*p); k=0;q=[];v=[]; while(k

遗传算法MATLAB实现代码

%%以下代码可直接复制粘贴到m文档运行 clc; clear all; %输入数据 for i=1:4000 input(i,:)=10*rand(1,2)-5; output(i)=input(i,1)^2+input(i,2)^2; end output=output'; k = rand(1,4000); [m,n] = sort(k);%m是数值排序,n是对应的位置 %找出训练数据和预测数据 input_train = input(n(1:3900),:)'; output_train = output(n(1:3900),:)'; input_test = input(n(3901:4000),:)'; output_test = output(n(3901:4000),:)'; %%数据归一化 [gui_1_input,gui_1_inputs] = mapminmax(input_train);%gui_1_inputs是一个包含最大最小值等信息的结构体 [gui_1_output,gui_1_outputs] = mapminmax(output_train); %构建神经网络 net = newff(gui_1_input,gui_1_output,5); %5是隐含层节点数net.trainParam.epochs = 100;%训练次数 net.trainParam.lr = 0.1;%学习速率 net.trainParam.goal = 0.0000004;%训练目标最小误差 %%bp神经网络训练 net = train(net,gui_1_input,gui_1_output); %测试样本归一化 gui_1_input_test = mapminmax('apply',input_test,gui_1_inputs);%"apply"根据

遗传算法及其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)。后代是由前一代染色体通过交 叉(crossover)或者变异(mutation)运算形成的。 在新一代形成过程中,根据适度的大小选择部分后代,淘 汰部分后代。从而保持种群大小是常数。适值高的染色体 被选中的概率较高,这样经过若干代之后,算法收敛于最 好的染色体,它很可能就是问题的最优解或次优解。 主要步骤如下所示: (1)编码:GA在进行搜索之前先将解空间的解数据表示成 遗传空间的基因型串结构数据,这些串结构数据的不同组 合便构成了不同的点。 (2)初始群体的生成:随机产生N个初始串结构数据,每个 串结构数据称为一个个体,N个个体构成了—个群体。 GA以这N个串结构数据作为初始点开始迭代。

关于遗传算法的matlab程序

matlab遗传算法工具箱函数及实例讲解(转引) gaotv5 核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。

相关文档
相关文档 最新文档