Ⅰ matlab优化工具箱中遗传算法的问题
ga就是在穷举不可能完成时,用一种方式找到最优解
ga工具的完整形式如下表示
[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORES] =
GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options)
X是最优自变量
FVAL是求得的最优值
其他以此是推出标志,结构体,终止时的总群,终止时种群函数值
后半部分以此是目标函数,目标函数自变量个数
A和b是线性约束不等式AX〈b
Aeq和beq是一对线性等式约束,AeqX=beq
lb是X值下限,ub是X值下限
NONLCON是非线性约束函数 options是运行方式。这两个可以写函数自己完成,也可默认
函数默认计算最小值,计算最大值要加负号
非线性约束条件的写法
function [c,ceq]=nonlcon(x) 定义函数自变量是x,x可以是一列矩阵
c=[]; c表示非线性等式约束,以为没有,所以为空
ceq=[x(1)-2*(x(2))^2;
x(1)+X(2) ] ceq是非线性不等式约束,默认ceq<=0,ceq可以为一列矩阵.
>>
Ⅱ 求解:怎样使用MATLAB中的遗传算法计算器Optimization Tool中的GA——Genetic Algorithm,如图,重谢
比如通过MATLAB遗传算法的思想求解f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值问题,结果精确版到3位小数。
首先在matlab命令权窗口输入f=@(x)-(x*sin(10*pi*x)+2) 输出结果为
>> f=@(x)-(x*sin(10*pi*x)+2)
f =
@(x)-(x*sin(10*pi*x)+2)
接着输入gatool会打开遗传算法工具箱
显示51代之后算法终止,最小结果为-3.85027334719567,对应的x为1.851,由于自定义函数加了负号,所以原式的最大值为3.85027334719567,对应的x为1.851。
不过这是遗传算法得到的结果,每次运行的结果可能会有所不同,而且不一定是确切的最大值。
遗传算法适合应用在一些求最优解比较复杂的问题(常规的算法运算时间过长,甚至无法解决)。