天天看点

遗传算法matlab工具箱及其应用

前言

为了省略艰深难懂的遗传算法数学理论和降低程序开发的难度,MATLAB软件已经将遗传算法命令进行了封装,做成专门的遗传算法工具箱(GA Toolbox),方 便用户调用

1.ga函数

ga函数是对目标函数进行遗传计算,其格式如下:

其中,fitnessfun为适应度句柄函数; nvars 为目标函数自变量的个数; options 为算法的属性设置,该属性是通过函数gaoptimset赋予的;x为经过遗传进化以后自变量最佳染色体返回值;fval为最佳染色体的适应度;exitflag为算法停止的原因;output为输出的算法结构;population为最终得到种群适应度的列向量;scores为最终得到的种群。

例1 已知不等式

遗传算法matlab工具箱及其应用

使用ga函数求x1,x2的值。

clear all;
clc;
A=[1 1;-1 2;2 1];
b =[2;2; 3];
lb = zeros(2,1);
[x,fval,exitflag] = ga(@lincontest6,2,A, b,[],[],lb)
           
遗传算法matlab工具箱及其应用

2.gaoptimset函数

gaoptimset函数是设置遗传算法的参数和句柄函数,如表介绍常用的11种属性。

属性名 默认值 实现功能
PopInitRange [0;1] 初始种群生成空间
PopulationSize 20 种群规模
CrossoverFraction 0.8 交配概率
MigrationFraction 0.2 变异概率
Generations 100 超过进化代数时算法停止
TimeLimit Inf 超过运算时间限制时算法停止
FitnessLimit Inf 最佳个体等于或小于适应度阈值时算法停止
StallGenLimit 50 超过连续代数不进化则算法停止
StallTimeLimit 20 超过连续时间不进化则算法停止
InitialPopulation [ ] 初始化种群
PlotFens [ ] 绘图函数

其使用格式如下:

由于遗传算法本质上是一种启发式的随机运算,算法程序经常重复运行多次才能得到理想结果。鉴于此,可以将前一次运行得到的最后种群作为下一次运行的初始种群,如此操作会得到更好的结果:

最后一个输出变量final_pop返回的就是本次运行得到的最后种群。再将final_pop作为ga函数的初始种群,语法格式如下:

options = gaoptimset( 'InitialPopulation', finnal_ pop) ;
[x, fval, reason, output, finnal_pop2] = ga(@fitnessfcn, nvars, options) ;
           

遗传算法和直接搜索工具箱中的ga函数是求解目标函数的最小值,所以求目标函数最小值的问题,可直接令目标函数为适应度函数。编写适应度函数,语法格式如下:

function f = fitnessfen(x)	%x为自变量向量
f=f(x);
           

如果有约束条件(包括自变量的取值范围),对于求解函数的最小值问题,可以使用如下语法格式:

function f= fitnessfcn(x)
if( x<= -1|x>3)
%表示有约束x>-1和x<-3,其他约束条件类推
	f= inf;
else
	f= f(x); 	
end
           

如果有约束条件(包括自变量的取值范围),对于求解函数的最大值问题,可以使用如下语法格式:

function f= fitnessfcn(x)
if(x<=-1|x>3)
	f= inf;
else
	f= -f(x);
%这里 f=-f(x),而不是f=f(x)
end
           

若目标函数作为适应度函数,则最终得到的目标函数值为 -fval 而不是fval。

3.gaoptimget函数

该函数用于得到遗传算法参数结构中的参数具体值。其调用格式如下:

其中,options为结构体变量;name为需要得到的参数名称,返回值为val。

例2 利用遗传算法求解函数

f(x,y) = (cos(x2 +y2)-0.1)/(1+0.3(x2+y2)2)+3的最大值。

解:首先创建遗传算法 的适应度函数。

function y= ga43(x)
	y= (cos(x(1)^2 + x(2)^3)-0.1)/(1+0.3* (x(1)^2+ x(2)^2)^2) + 3;
end
           

然后利用遗传算法寻找函数最大值,在MATLAB命令行窗口输人代码如下:

结果:

遗传算法matlab工具箱及其应用

继续阅读