HRO

function [Gbest,GbestScore,Obj]=HROFCM(C,inDim,Data,maxIter,pop,x_min,x_max)
N = pop;               %水稻群个数
D = C*inDim;               %基因维度
maxTime=50;               %最大杂交次数
Xmax=1;        %位置最大值
Xmin=0;        %位置最小值
lb = x_min;
ub = x_max;
maxIteration=maxIter;
iteration=1;
maleSterile = zeros(N/3,D);
maintainer = zeros(N/3,D);
restoreLine = zeros(N/3,D);
%初始化种群个体,
x = rand(N,D)*(Xmax-Xmin)+Xmin;
%计算各个体的适应度函数值
Obj=zeros(1,maxIteration);
while(iteration<maxIteration+1)
     %calculate the fitness
for i=1:N
    pbest(i)=fcmFitness(x(i,:),C,Data);
end
%Sort the population from best to worst by f(X).
[Spbest,index]= sort(pbest);%
Gbest=x(index(1),:);%%%谁让你在这找索引的最后一个了
Obj(iteration)=Spbest(1);

for j=1:N/3
 
% maleSterile(j,:)=x(index(j),:);%
% restoreLine(j,:)=x(index(N/3+j),:);%
% maintainer(j,:)=x(index(N/3+j+N/3),:);%
maintainer(j,:)=x(index(j),:);%
restoreLine(j,:)=x(index(N/3+j),:);%
maleSterile(j,:)=x(index(N/3+j+N/3),:);%
  
end
%%%%随机杂交形式
for i=1:N/3
    xa=randperm(N/3,1);
    xb=randperm(N/3,1);
    x_new = zeros(1,D);%

    %for j=1:D
            r1 = -1+2*rand(1,D);%生成-1到1之间的随机数
    r2 = -1+2*rand(1,D);%生成-1到1之间的随机数
%     while(r1+r2==0)
%         r2 = -1+2*rand(1,1);%r1+r2!=0
%     end
        %x_new(1,j)=(r1*maleSterile(i,j)+maintainer(xb,j)*r2)/(r1+r2);
        x_new(1,:)=(r1.*maleSterile(i,:)+maintainer(xb,:).*r2)/(r1+r2);
%         x1=limitedArrange(x_new(1,j),Xmin,Xmax);
%          x_new(1,j)=x1;
        Flag4ub=x_new>ub;
        Flag4lb=x_new<lb;
        x_new=(x_new.*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;  
%          x1=limitedArrange(x_new(1,:),Xmin,Xmax);
%          x_new=x1;
   % end
    if(fcmFitness(x_new,C,Data) < fcmFitness(maleSterile(i,:),C,Data))%%如果新产生的个体适应度值比
        maleSterile(i,:)=x_new;
    end
end
%%%%%自交过程
selfingTimes=zeros(1,N/3);%初始化所有恢复系水稻自交次数
% w=wMax-iter*((wMax-wMin)/Max_iteration);
for k=1:N/3   
if(selfingTimes(k)<maxTime)
    sr=randperm(N/3,1);
    r3 = rand(1,D);
    new_Restore=restoreLine(k,:)+r3.*(Gbest-restoreLine(sr,:));
        Flag4ub=new_Restore>ub;
        Flag4lb=new_Restore<lb;
        x_new=(new_Restore.*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;  
    if(fcmFitness(new_Restore,C,Data)<fcmFitness(restoreLine(k,:),C,Data))
        restoreLine(k,:)=new_Restore;
             if(fcmFitness(new_Restore,C,Data)<fcmFitness(Gbest,C,Data))
         Gbest=new_Restore;
             end
            selfingTimes(k)=0;
    else
        selfingTimes(k)=selfingTimes(k)+1;
    end
else
%%%%%%重置
restoreLine(k,:)=restoreLine(k,:)+rand(1,D)*(Xmax-Xmin)+Xmin;
end
end

iteration=iteration+1
%         break
%     end
x=[maintainer;restoreLine;maleSterile];
end
GbestScore=Obj(maxIteration);


         %最优值
% figure
% x=1:iteration-1;
% plot(x,Obj(1,1:iteration-1))
% xlabel('迭代次数');
% ylabel('适应度值');
% title('适应度进化曲线');    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值