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
    
  • 相关阅读:
    PHP错误报告级别及调整方法
    使用微妙计算PHP脚本执行时间
    修改PHP的默认时区
    Rabbimq 安装过程,还有踩得坑!centos 安装
    "services "kubernetes-dashboard" not found"
    转载
    安装php rabbitmq扩展,继上一篇安装Rabbitmq
    php hash_file
    composer 安装
    php 朴韩屏
  • 原文地址:https://www.cnblogs.com/kexve/p/11766979.html
Copyright © 2011-2022 走看看