分布估计算法(Estimation of Distribution Algorithm,EDA)介绍及MATLAB代码(求解背包问题KP)

EDA算法

EDA算法原理

      通过一个概率模型描述候选解在空间得分布,采用统计学习手段从群体宏观的角度建立一个描述解分布得概率模型,然后对概率模型随机采样产生新的种群,如此反复进行,实现种群得进化,直到终止条件。(—建模-采用-建模-采样----循环)

EDA的不同变体

      EDA有很多不同的变体,包括如下一些,想详细了解可以参照参考文献。
      变量无关:PBIL、UMDA、cGA算法
      双变量相关:MIMIC、BMDA算法
      多变量相关:ECGA、FDA、BOA算法

EDA算法流程

通用算法步骤为:
      Step1 随机生成M个个体作为初始种群 ;
      Step2 对第L代种群计算个体适应度,判断是否满足终止条件,若满足,终止循环;若不满足,继续进行。
      Step3 根据适应度数值从种群中选出前N个(N≤M)优势个体,组成第L+1代的优势子种群 ;
      Step4 根据优势子种群更新概率模型 ;
      Step5 对概率模型进行随机采样,生成新种群(规模M),返回Step2.

具体介绍两个变体UMDA(Univariate marginal distribution algorithm)和PBIL(Population based incremental learning),主要区别在于更新概率模型的公式不同

EDA算法变体UMDA

      由德国学者Muhlenbein在1996年提出,算法描述:
      Step1 随机产生M个个体作为初始种群;
      Step2 然后计算M个个体的适应值,如果符合终止条件,算法结束,否则继续进行;
      Step3 选择最优的N个个体用来更新概率向量p(x), N <= M
更新过程:
p_l (x)=p(x│D_l^S )=1/N ∑_(k=1)N▒x_lk
      Step4 由新的概率模型采样M次,得到新一代群体,返回Step2

EDA算法变体PBIL

     由美国卡耐基梅隆大学的Baluja在1994年提出,算法描述:
     Step1 随机产生M个个体作为初始种群;
     Step2 然后计算M个个体的适应值,如果符合终止条件,算法结束,否则继续进行;
     Step3 选择最优的N个个体用来更新概率向量p(x), N <= M
更新过程:
在这里插入图片描述
     Step4 由新的概率模型采样M次,得到新一代群体,返回Step2

测试算例:KP

     本测试算例为背包问题,来源自https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
算例如下表:
在这里插入图片描述

MATLAB代码

UMDA代码

function [bestFit]=binaryUMDA(weightMax,weight_Individual,value_Individual)
%EDA_UMDA Algorithm,二进制编程
%参数
iterations = 500;%迭代最大次数
populationSize = 200;%种群规模
dimensionality = size(weight_Individual,2);%维度
dominantNum = 20;%优势群体个数
% weightMax             背包最大容量/重量
% weight_Individual     每个变量的体积/重量
% value_Individual      每个变量的价值
  
%初始化种群
probability = 0.5*ones(1,dimensionality);%初始化概率0.5
Best_Individual=zeros(iterations,dimensionality+1);%每次迭代中的最优解,(:,1)存储适应度值

%循环迭代
for I=1:iterations
    %按照概率模型创建样本
    flag = 0;i=1;
    while i<=populationSize
        r=rand(1,dimensionality);
        Species(i,:)=1.*(r<probability);
        %判断是否超出容量范围
        weightSum = sum(Species
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值