通过matlab的遗传算法工具求解规划问题

matlab的Optimization工具中有遗传算法工具箱,可利用该界面工具求解规划问题。

   界面定义:

@fun            目标函数(最后小化问题)
   A*x<=b          不等式约束
   Aeq * x = beq   等式约束
   lb<=x<=ub       未知数范围  ,约束了每一个变量的范围
   @nonlcon        非线性约束
   [c,ceq] = con_fun(x) 其中 c代表c<=0 ceq代表 ceq=0

intcon          变量的输入是否为整数 (输入为一个矩阵)当输入[1 2]表示第一个变量和第二个变量为整数

 目标函数格式:

function f = fun(x)
    f=-5*sin(x(1)) * sin(x(2)) *sin(x(3)) *sin(x(4)) *sin(x(5))-...
    sin(5*x(1)) *sin(5*x(2))*sin(5*x(3))*sin(5*x(4))* sin(5*x(5))+8;
end

 目标函数和约束条件设置好后,点击start开始迭代运算,还可以在右侧选项里勾选绘图。

运行后,就可以在工具左下方看到迭代出的结果。 

 

 在高版本的matlab中取消了Optimization工具,可以直接用ga函数来实现遗传算法,示例如下,

%%
A=[];
b=[];
Aeq=[];
beq=[];
lb=0*ones(1,5);
ub=0.9*pi*ones(1,5);
intcon=[1 2 3 4 5];
options =  optimoptions('ga');
options.PlotFcn ={@gaplotbestf,@gaplotmaxconstr}; %绘制迭代图

 [x,fval,exitflag,output,population,scores]=ga(@fun,5,A,b,Aeq,beq,lb,ub,[],intcon,options);

%% 目标函数
function f = fun(x)
    f=-5*sin(x(1)) * sin(x(2)) *sin(x(3)) *sin(x(4)) *sin(x(5))-...
    sin(5*x(1)) *sin(5*x(2))*sin(5*x(3))*sin(5*x(4))* sin(5*x(5))+8;
end

 参数定义与工具箱的定义相同。

采用函数更加方便,方便存储规划问题 与求解过程,至于算法的收敛程度可以在options中进行设置,可以参考matlab的官方介绍

matlab实现遗传算法函数icon-default.png?t=N176https://ww2.mathworks.cn/help/gads/ga.html?searchHighlight=ga&s_tid=srchtitle_ga_1

猜你喜欢

转载自blog.csdn.net/QUACK_G/article/details/129613540
今日推荐