通过matlab的遗传算法工具求解规划问题
创始人
2025-05-29 19:41:38

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

相关内容

热门资讯

三生制药拟分拆脱发治疗领域附属... 近日,三生制药发布公告,建议将公司附属公司蔓迪国际分拆并于联交所主板独立上市。三生制药持有蔓迪国际8...
全钢巨胎龙头海安集团 今日深主... 11月25日,海安集团成功登陆深市主板,本次发行价为48.00元/股,市盈率13.94倍。资料显示,...
恒邦股份:未依规按时完成独立董... 11月25日,山东恒邦冶炼股份有限公司(恒邦股份,002237.SZ)发布公告称,公司当日收到中国证...
万润股份:实控人拟增持3.65... 【V观财报|万润股份实控人拟增持3.65亿元至7.30亿元公司股份】万润股份公告,公司于11月24日...
V观财报|2天跌超47%大鹏工... 【V观财报|2天跌超47%大鹏工业:不涉及热点概念事项】大鹏工业公告,未发现可能或已经对公司股票交易...