MATLAB遗传算法求函数最值

本文介绍了使用MATLAB实现遗传算法来寻找函数y=(x(1)2+x(2)2)0.25*(sin((50*(x(1)2+x(2)^2 ))^0.1 )+1)最小值的过程。内容涵盖遗传算法的基本原理,以及MATLAB代码的各个部分,包括Cross.m、Mutation.m、select.m和Genetic.m等函数。参考了相关博客和视频资源。
摘要由CSDN通过智能技术生成

MATLAB遗传算法求函数最值

问题

求 y=(x(1)2+x(2)2)0.25*(sin((50*(x(1)2+x(2)^2 ))^0.1 )+1) 的最小值。

遗传算法

遗传算法
简单说,就是通过模拟种群遗传繁殖与自然选择找到最好的个体。
一般情况,我们只要能把数据转化成矩阵、把自然语言转化成函数即可,并需要调整以下参数:

%% 遗传算法参数
maxgen=30;                         %进化代数
sizepop=100;                       %种群规模
pcross=[0.6];                      %交叉概率
pmutation=[0.1];                  %变异概率
lenchrom=[1 1 1 1 1];              %变量字串长度
bound=[0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi];  %变量范围
    x=fmincon(inline('-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))'),chrom(i,:)',[],[],[],[],[0 0 0 0 0],[2.8274 2.8274 2.8274 2.8274 2.8274]);  %目标函数

合理情况:合理情况
代数太小:代数太小
种群太小:种群太小
但代数或种群太大,程序运行会很慢。
交叉概率太小:交叉概率太小
变异概率太大(变异要存在,以防使进化方向错误):变异概率太大

MATLAB代码

Code.m

function ret=Code(lenchrom,bound)
%本函数将变量编码成染色体,用于随机初始化一个种群
% lenchrom   input : 染色体长度
% bound      input : 变量的取值范围
% ret        output: 染色体的编码值
 
flag=0;
while flag==0
    pick=rand(1,length(lenchrom));
    ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值
    flag=test(lenchrom,bound,ret);             %检验染色体的可行性
end

fun.m

function y = fun(x)
 
y=(x(1)^2+x(2)^2)^0.25*(sin((50*(x(1)^2+x(2)^2))^0.1)+1);

test.m

function flag=test
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li.MC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值