matlab手写遗传算法解决一元函数最值问题(实例)

问题:找出y=x4-4x3+3x+5 (xÎ[0,6])在[0,6]之间的最小值。

思路:用33位0,1变量来编码x,3位编码整数,30位编码小数。理论上30位编码小数可以将最小值对应的x精确到小数点后九位.

下面是我解决这个问题所有的函数,复制就可以运行了。

交换值的函数:

function [x,y]=exchange(x,y)
   temp=x;
   x=y;
   y=temp;
end

执行交叉:

%交叉操作
function [A,B]=cross(A,B)
  L=length(A);
  if L<10
      W=L;
  elseif((L/10)-floor(L/10))>=rand&&L>10
      W=ceil(L/10)+8;
  else
      W=floor(L/10)+8;
  end
  p=unidrnd(L-W+1);
  for i=1:W
      [A(1,p+i-1),B(1,p+i-1)]=exchange(A(1,p+i-1),B(1,p+i-1));
  end
end

变异过程,通过调节函数的第二个参数来改变每个个体的变异率,这样从一定程度上能对不同问题达到更好的效果

function a=Mutation(A,fitness)
  nnper=randperm(size(A,2));
  if (A(1,nnper(1)))==1
      A(1,nnper(1))=0;
  elseif(A(
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值