爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5103|回复: 0

[讨论] matlab中绘图没出现线条

[复制链接]

新浪微博达人勋

发表于 2018-10-13 13:31:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 lixiaoping 于 2018-10-13 14:00 编辑

2018-10-13 13-30-54屏幕截图.png

function DE(Gm,F0)

t0 = cputime;
%差分进化算法程序

Gm = 10000; %Gm 最大迭代次数
F0 = 0.5;  %F0是变异率
Np = 100; %种群规模
CR = 0.9;  %交叉概率
G= 1; %初始化代数
D = 10; %所求问题的维数
Gmin = zeros(1,Gm); %各代的最优值
best_x = zeros(Gm,D); %各代的最优解
value = zeros(1,Np);

%产生初始种群
%xmin = -10; xmax = 100;%带负数的下界
xmin = -5.12;
xmax = 5.12;
function y = f(v)
    %Rastrigr 函数
y = sum(v.^2 - 10.*cos(2.*pi.*v) + 10);
end

X0 = (xmax-xmin)*rand(Np,D) + xmin;  %产生Np个D维向量
XG = X0;

%%%%%%%%%%%%%----这里未做评价,不判断终止条件----%%%%%%%%%%%%%%%%%%%%%%%%

XG_next_1= zeros(Np,D); %初始化
XG_next_2 = zeros(Np,D);
XG_next = zeros(Np,D);

while G <= Gm
%G
%%%%%%%%%%%%%%%%%%%%%%%%----变异操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i = 1:Np
        %产生j,k,p三个不同的数
        a = 1;
        b = Np;
        dx = randperm(b-a+1) + a- 1;
        j = dx(1);
        k = dx(2);
        p = dx(3);
        %要保证与i不同
        if j == i
            j  = dx(4);
            else if k == i
                 k = dx(4);
                else if p == i
                    p = dx(4);
                    end
                end
         end
        
        %变异算子
        suanzi = exp(1-Gm/(Gm + 1-G));
        F = F0*2.^suanzi;
        %变异的个体来自三个随机父代
      
        son = XG(p,:) + F*(XG(j,:) - XG(k,:));      
        for j = 1: D
            if son(1,j) >xmin  & son(1,j) < xmax %防止变异超出边界
                XG_next_1(i,j) = son(1,j);
            else
                XG_next_1(i,j) = (xmax - xmin)*rand(1) + xmin;
            end
        end
    end
   %%%%%%%%%%%%%%%%%%%%%%%---交叉操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
   
    for i = 1: Np
        randx = randperm(D);% [1,2,3,...D]的随机序列   
        for j = 1: D
            
            if rand > CR & randx(1) ~= j % CR = 0.9
                XG_next_2(i,j) = XG(i,j);
            else
                XG_next_2(i,j) = XG_next_1(i,j);
            end
        end
    end
   
    %%%%%%%%%%%%%%%%%%----选择操作---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i = 1:Np
        if f(XG_next_2(i,:)) < f(XG(i,:))
            
            XG_next(i,:) = XG_next_2(i,:);
        else
            XG_next(i,:) = XG(i,:);
        end
    end
   
    %找出最小值
    for i = 1:Np
        value(i) = f(XG_next(i,:));
    end
    [value_min,pos_min] = min(value);
   
    %第G代中的目标函数的最小值
    Gmin(G) = value_min;   
    %保存最优的个体
    best_x(G,:) = XG_next(pos_min,:);   
   
    XG = XG_next;   
    trace(G,1) = G;
    trace(G,2) = value_min;
    G = G + 1;
  
end
  [value_min,pos_min] = min(Gmin);
  best_value = value_min
  best_vector =  best_x(pos_min,:)  
  fprintf('DE所耗的时间为:%f \n',cputime - t0);
  %画出代数跟最优函数值之间的关系图  
  plot(trace(:,1),trace(:,2));
  
end


运行结果:best_value =

     0


best_vector =

   1.0e-08 *

    0.1601   -0.0599   -0.0493    0.0997    0.0757    0.1429    0.0466   -0.0062   -0.0757    0.1296

DE所耗的时间为:19.810000
Caught unexpected fl::except::IInternalException


密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表