搜档网
当前位置:搜档网 › GADS--matlab遗传算法工具箱使用总结

GADS--matlab遗传算法工具箱使用总结

GADS--matlab遗传算法工具箱使用总结
GADS--matlab遗传算法工具箱使用总结

GADS--Matlab遗传算法工具箱使用总结

e-mail:978299005@https://www.sodocs.net/doc/bf8892333.html,

一、GADS简介与启动

MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

在Matlab平台上主要有三个遗传算法(GA)的工具箱,分别是:GAOT,美国北卡罗来纳大学开发;GATBX,英国谢菲尔德大学开发;GADS,Matlab7以后的版本中自带的。GATBX可以包含GAOT,而GADS显然年代又近了一些。这里主要讲的是GADS。

GADS(Genetic Algorithm and Direct Search Toolbox)遗传算法与直接搜索工具箱。可以在命令行中直接使用,在M文件的程序中调用ga函数,或在GUI 界面中使用它来解决实际问题。在不同的Matlab版本中启动方法稍有区别。以笔者的Matlab 2010b为例,启动有两种方法:

1、在Matlab命令行中输入optimtool回车,在出现的对话框左上角找

到Solver,选择ga- Genetic Algorithm即可。

2、Matlab界面中单击左下角Start,选择toolboxes,选择其中的

optimization再点击optimization tool即可打开对话框,然后如1中,

选择ga即可。

二、GADS的具体使用

【1】先介绍ga函数的格式。Ga函数可以在命令行中直接使用。在命令行中键入命令type ga可以打印出ga函数的代码。键入help ga,就打印出ga函数的帮助提示。以下是help ga的输出:

GA Constrained optimization using genetic algorithm.

GA attempts to solve problems of the form:

min F(X) subject to: A*X <= B, Aeq*X = Beq (linear constraints)

X C(X) <= 0, Ceq(X) = 0 (nonlinear constraints)

LB <= X <= ub

X = GA(FITNESSFCN,NVARS) finds a local unconstrained minimum X to the

FITNESSFCN using GA. NVARS is the dimension (number of design

variables) of the FITNESSFCN. FITNESSFCN accepts a vector X of size

1-by-NVARS, and returns a scalar evaluated at X.

X = GA(FITNESSFCN,NVARS,A,b) finds a local minimum X to the function

FITNESSFCN, subject to the linear inequalities A*X <= B. Linear

constraints are not satisfied when the PopulationType option is set to

'bitString' or 'custom'. See the documentation for details.

X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq) finds a local minimum X to the

function FITNESSFCN, subject to the linear equalities Aeq*X = beq as

well as A*X <= B. (Set A=[] and B=[] if no inequalities exist.) Linear

constraints are not satisfied when the PopulationType option is set to

'bitString' or 'custom'. See the documentation for details.

X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub) defines a set of lower and

upper bounds on the design variables, X, so that a solution is found in

the range lb <= X <= ub. Use empty matrices for lb and ub if no bounds

exist. Set lb(i) = -Inf if X(i) is unbounded below; set ub(i) = Inf if

X(i) is unbounded above. Linear constraints are not satisfied when the

PopulationType option is set to 'bitString' or 'custom'. See the

documentation for details.

X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON) subjects the

minimization to the constraints defined in NONLCON. The function

NONLCON accepts X and returns the vectors C and Ceq, representing the

nonlinear inequalities and equalities respectively. GA minimizes

FITNESSFCN such that C(X)<=0 and Ceq(X)=0. (Set lb=[] and/or ub=[] if

no bounds exist.) Nonlinear constraints are not satisfied when the

PopulationType option is set to 'bitString' or 'custom'. See the

documentation for details.

X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options) minimizes

with the default optimization parameters replaced by values in the

structure OPTIONS. OPTIONS can be created with the GAOPTIMSET function.

See GAOPTIMSET for details.

X = GA(PROBLEM) finds the minimum for PROBLEM. PROBLEM is a structure

that has the following fields:

fitnessfcn:

nvars:

Aineq:

bineq:

Aeq:

beq:

lb:

ub:

nonlcon:

options:

rngstate:

[X,FVAL] = GA(FITNESSFCN, ...) returns FVAL, the value of the fitness

function FITNESSFCN at the solution X.

[X,FVAL,EXITFLAG] = GA(FITNESSFCN, ...) returns EXITFLAG which

describes the exit condition of GA. Possible values of EXITFLAG and the

corresponding exit conditions are

1 Average change in value of the fitness function over

options.StallGenLimit generations less than options.TolFun and

constraint violation less than options.TolCon.

3 The value of the fitness function did not change in

options.StallGenLimit generations and constraint violation less

than options.TolCon.

4 Magnitude of step smaller than machine precision and constraint

violation less than options.TolCon. This exit condition applies

only to nonlinear constraints.

5 Fitness limit reached and constraint violation less than

options.TolCon.

0 Maximum number of generations exceeded.

-1 Optimization terminated by the output or plot function.

-2 No feasible point found.

-4 Stall time limit exceeded.

-5 Time limit exceeded.

[X,FVAL,EXITFLAG,OUTPUT] = GA(FITNESSFCN, ...) returns a

structure OUTPUT with the following information:

rngstate:

generations:

funccount:

maxconstraint: , if any

message:

[X,FVAL,EXITFLAG,OUTPUT,POPULATION] = GA(FITNESSFCN, ...) returns the

final POPULATION at termination.

[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORES] = GA(FITNESSFCN, ...) returns

the SCORES of the final POPULATION.

Example:

Unconstrained minimization of 'rastriginsfcn' fitness function of

numberOfVariables = 2

x = ga(@rastriginsfcn,2)

Display plotting functions while GA minimizes

options = gaoptimset('PlotFcns',...

{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping});

[x,fval,exitflag,output] = ga(@rastriginsfcn,2,[],[],[],[],[],[],[],options)

An example with inequality constraints and lower bounds

A = [1 1; -1 2; 2 1]; b = [2; 2; 3]; lb = zeros(2,1);

% Use mutation function which can handle constraints

options = gaoptimset('MutationFcn',@mutationadaptfeasible);

[x,fval,exitflag] = ga(@lincontest6,2,A,b,[],[],lb,[],[],options);

FITNESSFCN can also be an anonymous function:

x = ga(@(x) 3*sin(x(1))+exp(x(2)),2)

If FITNESSFCN or NONLCON are parameterized, you can use anonymous

functions to capture the problem-dependent parameters. Suppose you want

to minimize the fitness given in the function myfit, subject to the

nonlinear constraint myconstr, where these two functions are

parameterized by their second argument a1 and a2, respectively. Here

myfit and myconstr are MATLAB file functions such as

function f = myfit(x,a1)

f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + a1);

and

function [c,ceq] = myconstr(x,a2)

c = [1.5 + x(1)*x(2) - x(1) - x(2);

-x(1)*x(2) - a2];

% No nonlinear equality constraints:

ceq = [];

To optimize for specific values of a1 and a2, first assign the values

to these two parameters. Then create two one-argument anonymous

functions that capture the values of a1 and a2, and call myfit and

myconstr with two arguments. Finally, pass these anonymous functions to

GA:

a1 = 1; a2 = 10; % define parameters first

% Mutation function for constrained minimization

options = gaoptimset('MutationFcn',@mutationadaptfeasible);

x = ga(@(x)myfit(x,a1),2,[],[],[],[],[],[],@(x)myconstr(x,a2),options)

解释如下:

ga函数最完整的格式是[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORES]= GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options)。

输出:

X是最优值所对应的自变量值,如果有多个变量的话,X就是一个vector;

FVAL是求得的最优值;

EXITFLAG是退出标志,代表算法结束的原因。为确保收敛,规定了许多限制,比如总时间不超过30秒,总代数不超过N代,最优值连续多少代没有变化就退出,或连续多少秒没有变化就退出运行等等,这些参数都是可设的,EXITFLAG 就记录了退出的原因。取值-5~5.

OUTPUT是一个结构体。里面包含算法终止时所经历的代数generations,随机数种子的信息rngstate等。

POPULATION是算法终止的时候的种群。记录的是自变量的值。

SCORES是算法终止是种群的函数值,是POPULATION中的个体,经计算得出的结果。

输入:

FITNESSFCN是所要优化的函数句柄。可以写在单独的M文件里。fun_name.m,则FITNESSFCN是@ fun_name。函数的写法有明确的形式规定。

function f=fun_name(x)

f=x(1)+x(2);

就代表y=x1+x2这个函数。注意,输入的x是一个矢量,得到的返回值是标量。或者也可以不写成m文件。可以匿名的写:

ga(@(x) x(1)+x(2),…)

NVARS是自变量的个数,上例中,就是2.

A和b共同构成了对X的一个线性约束,代表A*X<=b.

Aeq和beq也是类似:Aeq*X=beq.这四个如果不存在的话写[]就可以了。

Lb和ub构成了对自变量范围的约束。如NVARS=2,x1属于[0,1],x2属于[-2,2],则lb=[0,-2],ub=[1,2]。

NONLCON是非线性约束的函数句柄。也有参数和返回值的规定。举例说明:function [c,ceq] = myconstr(x)

c = [1.5 + x(1)*x(2) - x(1) - x(2);

-x(1)*x(2)];

% No nonlinear equality constraints:

ceq = [];

显然,这个函数的任务是定义两个数学上的“函数”,即C和ceq,而

C(X)<=0.

Ceq(X)=0.就是我们要处理的问题的数学模型中包含的非线性约束了。

Options是规定了算法运行时的参数,包括交叉和变异的概率,采用何种方式进化等等,具体表现为一些参数和函数的选择。可以用gaoptimget和gaoptimset函数取得和设置这些参数。

也可以采用ga(PROBLEM)的形式,其中PROBLEM包含了一切所需的输入信息。

最后,举例说明:

求Y=100*(x1^2 – x2)^2 + (1-x1)^2;的最大值

X1,x2属于[-2.048, 2.048]

此函数最大值为(-2.048,-2.048)处,值为3905.(小数点后面忘记了)

命令行中输入:

[x, val, flag, output, population, scores]=ga(@(x) -100*(x(1)^2 - x(2))^2 - (1-x(1))^2, 2, [],[],[],[],[-2.048, -2.048], [2.048, 2.048])

改为负号是因为,Matlab默认是求最小值,此处求最大值,因此变正为负。

输出:

Optimization terminated: average change in the fitness value less than options.TolFun.

x =

2.0480 -2.0479

val =

-3.8976e+003

flag =

1

output =

problemtype: 'boundconstraints'

rngstate: [1x1 struct]

generations: 51

funccount: 1040

message: [1x86 char]

maxconstraint: 0

population =

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0460 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0470 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0479

2.0480 -2.0476

2.0480 -2.0479

2.0470 -2.0476

2.0480 -2.0479

2.0480 -2.0470

2.0480 -2.0479

scores =

1.0e+003 *

-3.8976

-3.8976

-3.8976

-3.8976

-3.8976

-3.8876

-3.8976

-3.8976

-3.8976

-3.8926

-3.8976

-3.8976

-3.8976

-3.8976

-3.8972

-3.8976

-3.8922

-3.8976

-3.8964

-3.8976

【2】下面介绍GUI的使用。打开对话框之后,选择ga,就会出现如下界面:

Fitness function就是ga函数的第一个输入参数。同样可以采用M文件的形式或@(x) f(x)的匿名形式。Number of variables就是变量的个数。Constras中的A,b,Aeq,beq,Lower,Upper都是ga的输入参数,容易理解。最后一个是NONLCON,即非线性约束的函数句柄。右边则是options的设置。重点介绍这个区域的部分设置。

Population type:编码方式。有实数编码和二进制编码。默认是double vector.选择二进制的话,输入参数中的A,b,Aeq,beq等就失去作用了。

Population size:种群大小,默认20.

Creation function:可以改变初始化的方式。

Fitness scaling:变换适应度函数值的函数句柄。

Elite count:直接保留上一代的个体的个数。

Crossover fraction:交叉的概率。

Migration中,指定迁移的方向,概率,和频率。

Stopping criteria中,指定结束条件。Generations和time limit指定代数和时间的最大极限。Fitness limit指定fitness值相差小于某一阈值时就可以收敛了。Stall generation和stall time limit指,经历多少代或多久,最优值都没有出现变化时即收敛。

Plot functions与图形输出有关,plot interval指定多少代输出一次,默认为1.best fitness和best invividual表示将最优值和相应个体输出到图像上。

Display 通command window:输出到命令窗口。有off,final,interative,diagnose 4个选择。

不进行设置时,即选用默认值。设好之后,点击左边的start,即开始运算,

并在小窗口中出现结果。

三、gaoptimset和gaoptimget函数的使用

gaoptimset:

1、gaoptimset回车

打印所有gaoptimset相关的参数,及缺省值(花括号内的为缺省值)。

2、option= gaoptimset();创造并返回一个options,里面的值都是[],代表给

的是缺省值。

3、option= gaoptimset(@ga);创造返回一个option,里面的值也是缺省值,

不过是明确给出其值的,不是[].options = gaoptimset(@gamultiobj):返回多目标

遗传算法(MOGA)的默认设置。

4、options = gaoptimset('param1',value1,'param2',value2,...)。其余的变量都

采用默认设置,param1和param2分别采用value1和value2.

5、options = gaoptimset(oldopts,'param1',value1,...)。其余都采用oldopts的

设置,param1处采用value1的值。

6、options = gaoptimset(oldopts,newopts)。newopts中为空的地方采用

oldopts的设置,不为空的地方采用newopts的设置。

gaoptimget:value=gaoptimget(opts, ‘param1’);得到opts在param1处的值。如果param1错误,则返回[]。

opts = gaoptimset('Generations',200);

val = gaoptimget(opts,'Generations');

returns val = 200.

遗传算法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

4遗传算法与函数优化

第四章遗传算法与函数优化 4.1 研究函数优化的必要性: 首先,对很多实际问题进行数学建模后,可将其抽象为一个数值函数的优化问题。由于问题种类的繁多,影响因素的复杂,这些数学函数会呈现出不同的数学特征。除了在函数是连续、可求导、低阶的简单情况下可解析地求出其最优解外,大部分情况下需要通过数值计算的方法来进行近似优化计算。 其次,如何评价一个遗传算法的性能优劣程度一直是一个比较难的问题。这主要是因为现实问题种类繁多,影响因素复杂,若对各种情况都加以考虑进行试算,其计算工作量势必太大。由于纯数值函数优化问题不包含有某一具体应用领域中的专门知识,它们便于不同应用领域中的研究人员能够进行相互理解和相互交流,并且能够较好地反映算法本身所具有的本质特征和实际应用能力。所以人们专门设计了一些具有复杂数学特征的纯数学函数,通过遗传算法对这些函数的优化计算情况来测试各种遗传算法的性能。 4.2 评价遗传算法性能的常用测试函数 在设计用于评价遗传算法性能的测试函数时,必须考虑实际应用问题的数学模型中所可能呈现出的各种数学特性,以及可能遇到的各种情况和影响因素。这里所说的数学特性主要包括: ●连续函数或离散函数; ●凹函数或凸函数; ●二次函数或非二次函数; ●低维函数或高维函数; ●确定性函数或随机性函数; ●单峰值函数或多峰值函数,等等。 下面是一些在评价遗传算法性能时经常用到的测试函数: (1)De Jong函数F1: 这是一个简单的平方和函数,只有一个极小点f1(0, 0, 0)=0。

(2)De Jong 函数F2: 这是一个二维函数,它具有一个全局极小点f 2(1,1) = 0。该函数虽然是单峰值的函数,但它却是病态的,难以进行全局极小化。 (3)De Jong 函数F3: 这是一个不连续函数,对于]0.5,12.5[--∈i x 区域内的每一个点,它都取全局极小值 30),,,,(543213-=x x x x x f 。

遗传算法求解实例

yj1.m :简单一元函数优化实例,利用遗传算法计算下面函数的最大值 0.2)*10sin()(+=x x x f π,∈x [-1, 2] 选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9, 最大遗传代数为25 译码矩阵结构:?????????? ??????? ???? ?=ubin lbin scale code ub lb len FieldD 译码矩阵说明: len – 包含在Chrom 中的每个子串的长度,注意sum(len)=length(Chrom); lb 、ub – 行向量,分别指明每个变量使用的上界和下界; code – 二进制行向量,指明子串是怎样编码的,code(i)=1为标准二进制编码, code(i)=0则为格雷编码; scale – 二进制行向量,指明每个子串是否使用对数或算术刻度,scale(i)=0为算术 刻度,scale(i)=1则为对数刻度; lbin 、ubin – 二进制行向量,指明表示范围中是否包含每个边界,选择lbin=0或 ubin=0,表示从范围中去掉边界;lbin=1或ubin=1则表示范围中包含边界; 注:增加第22行:variable=bs2rv(Chrom, FieldD);否则提示第26行plot(variable(I), Y, 'bo'); 中variable(I)越界 yj2.m :目标函数是De Jong 函数,是一个连续、凸起的单峰函数,它的M 文件objfun1包含在GA 工具箱软件中,De Jong 函数的表达式为: ∑ == n i i x x f 1 2 )(, 512512≤≤-i x 这里n 是定义问题维数的一个值,本例中选取n=20,求解 )(min x f ,程序主要变量: NIND (个体的数量):=40; MAXGEN (最大遗传代数):=500; NV AR (变量维数):=20; PRECI (每个变量使用多少位来表示):=20; GGAP (代沟):=0.9 注:函数objfun1.m 中switch 改为switch1,否则提示出错,因为switch 为matlab 保留字,下同! yj3.m :多元多峰函数的优化实例,Shubert 函数表达式如下,求)(min x f 【shubert.m 】

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)确定决策变量和约束条件;

遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )

GATBX遗传算法工具箱函数及实例讲解 基本原理: 遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概 率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。

Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 运用遗传算法工具箱: 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。 以GATBX为例,运用GATBX时,要将GATBX解压到Matlab下的toolbox文件夹里,同时,set path将GATBX文件夹加入到路径当中。 这块内容主要包括两方面工作:1、将模型用程序写出来(.M文件),即目标函数,若目标函数非负,即可直接将目标函数作为适应度函数。2、设置遗传算法的运行参数。包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

遗传算法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实验遗传算法与优化设计

实验六 遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab 中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别 代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W 、t 分别是上电极的宽度和厚度,D 是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz ),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 {} 28.6821ln 5020.942ln 20.942S W R W D D D t D W D D W W t D W W D e D D παπππ=+++-+++?????? ? ??? ??????????? ??????? (1) 其中πρμ0=S R 为金属的表面电阻率,为电阻率。可见电极的结构参数影响着电极损

耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W 、D 、t ,它们组成决策向量[W, D ,t ] T ,待优化函数(,,)W D t α称为目标函数。 上述优化设计问题可以抽象为数学描述: ()()min .. 0,1,2,...,j f X s t g X j p ????≤=? (2) 其中()T n x x x X ,...,,21=是决策向量,x 1,…,x n 为n 个设计变量。这是一个单目标的数学规划问题:在一组针对决策变量的约束条件()0,1,...,j g X j p ≤=下,使目标函数最小化(有时 也可能是最大化,此时在目标函数()X f 前添个负号即可)。满足约束条件的解X 称为可行解,所有满足条件的X 组成问题的可行解空间。 2. 遗传算法基本原理和基本操作 遗传算法(Genetic Algorithm, GA)是一种非常实用、高效、鲁棒性强的优化技术,广 泛应用于工程技术的各个领域(如函数优化、机器学习、图像处理、生产调度等)。遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法。按照达尔文的进化论,生物在进化过程中“物竞天择”,对自然环境适应度高的物种被保留下来,适应度差的物种而被淘汰。物种通过遗传将这些好的性状复制给下一代,同时也通过种间的交配(交叉)和变异不断产生新的物种以适应环境的变化。从总体水平上看,生物在进化过程中子代总要比其父代优良,因此生物的进化过程其实就是一个不断产生优良物种的过程,这和优化设计问题具有惊人的相似性,从而使得生物的遗传和进化能够被用于实际的优化设计问题。 按照生物学知识,遗传信息基因(Gene)的载体是染色体(Chromosome),染色体中 一定数量的基因按照一定的规律排列(即编码),遗传基因在染色体中的排列位置称为基因

遗传算法的计算性能的统计分析

第32卷 第12期2009年12月 计 算 机 学 报 CH INESE JOURNA L OF COMPU TERS Vol.32No.12 Dec.2009 收稿日期:2008210219;最终修改稿收到日期:2009209227.本课题得到国家自然科学基金(60774084)资助.岳 嵚,男,1977年生,博士研究生,主要研究方向为进化算法.E 2mail:yueqqin@si https://www.sodocs.net/doc/bf8892333.html,.冯 珊,女,1933年生,教授,博士生导师,主要研究领域为智能决策支持系统. 遗传算法的计算性能的统计分析 岳 嵚 冯 珊 (华中科技大学控制科学与工程系 武汉 430074) 摘 要 通过对多维解析函数的多次重复计算并对计算结果进行统计分析来讨论遗传算法的可靠性和可信度,结果表明:遗传算法的计算结果具有一定的稳定性,可以通过采用多次重复计算的方法提高计算结果的可信度,并用以评价算法及其改进的实际效果.关键词 遗传算法;计算可靠性;置信区间 中图法分类号TP 18 DOI 号:10.3724/SP.J.1016.2009.02389 The Statistical Analyses for Computational Performance of the Genetic Algorithms YU E Qin FENG Shan (Dep artment of Contr ol Science and Eng ineering ,H uazhong University of Science and T ech nology ,W u han 430074) Abstr act In this paper,the author s discuss the reliability of the GAs by reiteratively computing the multi 2dimensional analytic functions and statistical analysis of the results.The analysis re 2sults show that the GAs have certain stability;it could improve the reliability by reiteratively computation and estimates the effects of improvements. Keywor ds genetic algorithms;computational stability;confidence interval 1 遗传算法的随机性 遗传算法是将生物学中的遗传进化原理和随机优化理论相结合的产物,是一种随机性的全局优化算法[1].遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高.现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明.遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初始种群对计算结果影响较大.但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题 进行多次重复计算后取平均值的方法,提高遗传算 法在实际计算中的准确性和可信度. 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决.遗传算法对这类问题的计算结果也难达到精确的最优解.这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣. 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数.使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果.本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进

遗传算法程序示例

遗传算法程序示例 %% I. 清空环境变量 %optimtool solver 中选择GA %添加gaot工具箱 clear all clc %% II. 绘制函数曲线 x = 0:0.01:9; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel('自变量') ylabel('因变量') title('y = x + 10*sin(5*x) + 7*cos(4*x)') grid %% III. 初始化种群 initPop = initializega(50,[0 9],'fitness'); %种群大小;变量变化范围;适应度函数的名称 %看一下initpop 第二列代表适应度函数值 %% IV. 遗传算法优化 [x endPop bpop trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,... 'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]); %变量范围上下界;适应度函数;适应度函数的参数;初始种群;精度和显示方式;终止函数的名称; %终止函数的参数;选择函数的名称;选择函数的参数;交叉函数的名称;交叉函数的参数;变异函数的 %名称;变异函数的参数 % X 最优个体endpop 优化终止的最优种群bpop 最优种群的进化轨迹trace 进化迭代过程中 %最优的适应度函数值和适应度函数值矩阵 %% V. 输出最优解并绘制最优点 x hold on plot (endPop(:,1),endPop(:,2),'ro')

matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解 最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。还好用遗传算法的工箱予以实现了,期间也遇到了许多问题。借此与大家分享一下。 首先,我们要熟悉遗传算法的基本原理与运算流程。 基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。 Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 其次,运用遗传算法工具箱。 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS 就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

基于遗传算法的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遗传算法工具箱简介.pdf

Matlab遗传算法工具箱 基于Matlab平台的遗传算法(GA)工具箱主要有:美国北卡罗来纳大学开发的GAOT、英国谢菲尔德大学开发的GATBX以及GADS(Genetic Algorithm and Direct Search Toolbox)遗传算法与直接搜索工具箱。遗传算法与直接搜索工具箱的界面如图所示: GADS工具箱用户界面 (1)Solver(求解器):用于选择需要的算法。 (2)Problem:需要解决的问题。包括: 1)Fitness function:需要最小化的适应度函数,填写的格式为:@objfun,其中objfun.m是编写适应度函数的M文件,返回一个具体数值。 2)Number of variables:适应度函数的自变量的数目,此处表示优化设计的设计变量个数。 (3)Constraints约束。 1)Linear inequalities线性不等式约束,表示为:* ,填写矩阵A和向 A x b 量b的信息。

2)Linear equalities 线性等式约束,表示为:*Aeq x beq ,填写矩阵Aeq 和向量beq 的信息。 3)Bounds :填写独立变量的取值范围。在Lower 中填写变量的取值下界,Upper 中填写变量的取值上界,均以向量形式表示。 4)Nonlinear constraint function 非线性约束函数,编写非线性约束函数的M 文件nonlcon.m ,则在此处填写@nonlcon 。 (4)Run solver and view results 运行求解器并观察结果。点击Start 即可开始运行。Current iteration 中将显示当前运行的代数。Final point 栏中显示最优解对应的变量的取值。 (5)Option 部分是遗传算法参数的设定。 1)Population 种群参数设定。 Population type 种群类型,设定适应度函数的输入数据类型。工具箱提供了 两种输入类型:双精度、串位,用户还可以编写M 文件自定义输入数据的类型。 Population size 种群规模,定义每一代种群的个体数量。种群规模越大,遗传算法的运行速度越慢。 Creation function 创建函数,用于创建初始种群。 Initial population 初始种群,如果不指定初始种群,则系统将运用创建函数创建初始种群。 Initial scores 初始得分,如果此处没有定义初始得分,则系统应用适应度函数来计算初始得分。 Initial range 初始范围,用于指定初始种群中的各变量的上下限。初始范围用一个矩阵表示,该矩阵行数为2,列数为变量的个数。其中第一行描述初始种群中变量的取值下限,第二行描述初始种群中变量的取值上限。 2)Fitness scaling 适应度测量,包括:Rank 排序尺度变换、Proportional 比例尺度变换、Top 顶级尺度变换、Shift linear 线性转换尺度变换以及Custom 用户自定义。 3)Selection 选择,工具箱提供了以下几种选择函数:Stochastic uniform 随机 均匀分布、 Remainder 剩余、Uniform 均匀分布、Roulette 轮盘赌选择、Tournament 锦标赛选项、Custom 用户自定义。 4)Reproduction 再生参数,需设定可生存到下一代的精英个数Elite count ,以及下一代由交叉产生的部分所占比例Crossover fraction 。

三个遗传算法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程序实例

遗传算法的程序实例 如求下列函数的最大值 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函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

相关主题