zoukankan      html  css  js  c++  java
  • 分布估计法+Matlab代码

    算法原理

    在遗传算法的基础上的改进

    Matlab代码

    clear;
    N = 4; %种群规模
    M= 2; %变量个数
    V0 = [-8,3;-2,9;0,-5;6,1]; %初始种群
    K = 2;
    alpha = 0.3;
    
    %%
    [mu,sigma] = canShu(V0); %求均值方差
    mark = [];
    
    for i = 1:50
        p = f(V0); %求适应值
        [mu,sigma] = update(V0,p,K,alpha,mu,sigma);
        V0 = sig2Mat(mu,sigma,N,M);
        mark = [mark,max(p)];
    end
    plot(mark);
    
    %%
    function [mu,sigma] = canShu(V)
    mu = mean(V);
    sigma = std(V,1); %按照N的个数求标准差
    end
    
    function y = f(x) %计算适应值,x为矩阵
    y = x(:,1).^2-2*x(:,2)+5;
    end
    
    function [mu,sigma] = update(V,p,K,alpha,miu0,sigma0) %更新
    [~,i] = sort(p,'descend');
    mu = (1-alpha).*miu0+alpha.*(sum(V(i(1:K),:))-V(i(end),:));
    sigma = (1-alpha)*sigma0+alpha*std(V(i(1:K),:),1);
    end
    
    function [V0] = sig2Mat(mu,sigma,N,M) %根据均值方差生成数据
    sigMat = diag(sigma);
    R = chol(sigMat);
    V0 = repmat(mu,N,1) + randn(N,M)*R; %to-do,2?
    id = sum(V0>=-10 & V0 <=10,2)==size(V0,2);
    V0 = V0(id,:);
    while size(V0,1) < N
        V1 = repmat(mu,N,1) + randn(N,M)*R;
        id = sum(V1>=-10 & V1 <=10,2)==size(V1,2);
        V0 = [V0;V1(id,:)];
    end
    V0 = V0(1:N,:);
    end
    
  • 相关阅读:
    Python推导式(Comprehension)
    mysql中文乱码
    入门学习hibernate
    什么是ORM?
    Java网站中的权限管理
    Java的8中基本数据类型
    Python获取文件夹大小
    Python技巧
    Python中取整的方法floor,ceil,round
    Python线程join和setDaemon
  • 原文地址:https://www.cnblogs.com/kexve/p/11766979.html
Copyright © 2011-2022 走看看