目录
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
更新过程:

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

最低0.47元/天 解锁文章
4535





