介绍如何使用Matlab自带的遗传算法来解决寻优问题
ga函数官方文档
只截取了部分形式的常用函数,详细的可在matlab命令窗口中输入help ga查看
- x = ga(fun,nvars)
- x = ga(fun,nvars,A,b)
- x = ga(fun,nvars,A,b,Aeq,beq)
- x = ga(fun,nvars,A,b,Aeq,beq,lb,ub)
- x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon)
- x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
- x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon)
- x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,options)
参数如下图所示
目标函数代码
function y = fun (t)
y = 目标函数代码;
end
非线性约束函数
function [c,ceq] = nonlconfun(x)
% 入口参数 x:为自变量的行向量
% 出口参数
% c:非线性不等式约束函数值
% ceq:非线性等式约束的函数值,由于本题有两个等式约束,同c一样
% ceq(1,1)为第一个等式约束函数值,ceq(2,1)为第二个等式约束函数值
c(1,1) = 约束函数1;
c(2,1) = 约束函数2;
%假如没有非线性等式约束
ceq = [];
%假如有非线性等式约束
ceq(1,1) = 非线性等式约束1;
ceq(2,1) = 非线性等式约束2;
end
主函数
A = [1, -1, 0, 0; 0, 1, -1, 0; 0, 0, 1, -1;0, 0, 0, 0];
b = [-1, -1, -1, 0]';%保证t1<t2<t3<t4
lb = [t0,t0,t0,t0];
ub = [tn,tn,tn,tn];
% options = gaoptimset;
options = gaoptimset('PopulationSize', 100, 'Generations', 200);
[x,fval] = ga(@fun,4,A,b,[],[],lb,ub,@nonlconfun)