allchrs代码matlab,遗传算法解非线性方程组的Matlab程序

if InfN>0 || NaNN>0

isP='Fail';

p=0;

return

else

isP='True';

errorReciprocal=1./x_Error;

sumReciprocal=sum(errorReciprocal);

p=errorReciprocal/sumReciprocal;%p:可能解所对应的染色体的概率

end

函数(7):按概率选择染色体函数:

function chromosome=selecteChromosome(chromosomeGroup,p)

cumuP=cumsum(p);%累积概率,也就是把每个染色体的概率映射到0~1的区间[chromosomeSum,chromosomeLength]=size(chromosomeGroup);

for i=1:chromosomeSum%这个循环产生概率值

rN=rand(1);

if rN==1

chromosome(i,:)=chromosomeGroup(chromosomeSum,:);

elseif (0<=rN) && (rNchromosome(i,:)=chromosomeGroup(1,:);%第1条染色体被选中

else

for j=2:chromosomeSum%这个循环确定第1条以后的哪一条染色体被选中

if (cumuP(j-1)<=rN) && (rNchromosome(i,:)=chromosomeGroup(j,:);

break

end

end

end

end

函数(8):父代染色体杂交产生子代染色体函数

function sonChromosome=crossChromosome(fatherChromosome,parameter) [chromosomeSum,chromosomeLength]=size(fatherChromosome);

%chromosomeSum:染色体的条数;chromosomeLength:染色体的长度

switch parameter

case 1%随机选择父染色体进行交叉重组

for i=1:chromosomeSum/2

crossDot=fix(rand(1)*chromosomeLength);%随机选择染色体的交叉点位randChromosomeSequence1=round(rand(1)*chromosomeSum);

%随机产生第1条染色体的序号

randChromosomeSequence2=round(rand(1)*chromosomeSum);

%随机产生第2条染色体的序号,这两条染色体要进行杂交

if randChromosomeSequence1==0%防止产生0序号randChromosomeSequence1=1;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值