matlab多目标优化算法_多目标优化算法有哪些[通俗易懂]

matlab多目标优化算法_多目标优化算法有哪些[通俗易懂]一、简介基于范围选择的进化多目标优化PESA-II摘要:这篇文章对进化多目标优化算法提出了一个新的选择技术—目标空间中的选择单元是一个超立方体

一、简介

基于范围选择的进化多目标优化PESA-II

摘要:这篇文章对进化多目标优化算法提出了一个新的选择技术—目标空间中的选择单元是一个超立方体。在这项技术中,与给每个个体分配一个选择适应度不同的是,适应度值被分配给被当前至少一个接近帕累托前沿的个体占据的当前目标空间中的超立方体。然后从这块空间中随机选择个体作为结果。

第二部分简要介绍现代进化多目标算法中的选择方案以及基于区域选择的概念。第三部分算法测试;第五部分描述结果,第六部分得出结论。

图1将会解释在当前多目标进化算法中的主要选择方案。对于在目标空间中假定的两个目标问题,我们在图中画出了许多点,想象目标是沿着两个轴线的最小化问题。目标空间被分割成许多正方形,通常情况下我们的超立方体是在高维问题中的。在PAES和PESA中,算法都被分割成目标空间中的一小部分到超长方体。

在PESA中超立方体的相关占据信息被用作选择方案。一个持续只包含非支配解的存档,作为算法的当前接近帕累托前沿,只从存档中选择。每个个体的选择适应度仅仅只是其它解的数量(个体占据相同的超立方体),被叫做压缩因子。然后用二项锦标赛选择方法朝压缩因子小的方向选择父代双亲。

在PAES中,选择是不同的事情,PAES相当于是一个局部搜索方法。在任何时候都只有一个当前解,因此它常常被选作突变的父代。然而,当变体和当前解都是非支配的时候,就得决定将谁看作新的当前解(在下一次的迭代中直接被选择的父代)了。我们指出提出的目的,PESA利用了超立方体占据。

SPEA中的选择方法是通过强度帕累托方案产生的。这是一种给基于当前种群中个体的数量的个体分配选择适应度的方法。在SPEA中有两个种群一个内部一个外部。外部种群仅包含非支配个体,内部种群包括通过遗传算子产生的最后的子代,可能包含被外部种群中支配的个体。图一可能代表在一次运行中的组合种群。点X是非支配的,因此是在外部种群里边,它支配了外部种群中的两个个体(成员)。对非支配个体的强度测量仅仅是它包含的内部种群中的个体数目。而内部种群成员的强度测量是通过包含它们的外部种群中的个体强度和推导出的。图1中Y可能比X有一个更好的选择强度。

NSGA-II使用了比其它方案表现良好的不同选择方案,既高效又表现良好。通过朝高隔离值靠近的。图1中Y比A的隔离值高。

基于区域的选择提供了一个可选择的,前面的目标是更直接地完成。基于范围的选择:选择单元是一个超立方体而不是一个个体。选择适应度是通过超长方体推导出的,选择任意的标准选择方法,用遗传算子选择的最终结果个体是从超立方体中随机选择的。例如图1中,超立方体区域C要比B有更好的选择适应度。

下面简要分析下为什么基于区域的选择要比基于个体的选择要好。假设我们采用二进制锦标赛来根据选择适应度选择个体。无论这些选择适应度是否是基于个体的还是基于超立方体的。首先要考虑的特殊案例是占据当前靠近帕累托前沿近似值的超长方体只有两个,其中一个超立方体被9个个体占据,另一个被一个个体占据。那么这个一个个体就是我们认为最被隔离的那一个。在基于个体选择的方案中,使用二进制锦标赛选择,那我们最好的个体(也就是最被隔离的那个)被选择的概率是1-(9/10)^2=0.19.那么我们选择过度拥挤的那9个个体的概率就是0.81.这似乎没有朝产生低拥挤区域提供合适的高偏移。然而,在基于区域的选择中,被选择的单元是两个被占据的超立方体。那么最不被占据的区域被选择的概率是1-(1/2) ^ 2=0.75,那么选择更拥挤个体的概率就是0.25.由此可见,基于个体选择的方案我们更可能选择不被隔离的个体,而基于区域的选择方案我们更可能选择被隔离的个体。

那么更一般地,我们仍然关注选择一个最被隔离的个体的相关概率,然后继续使用二进制锦标赛的选择方案。假设帕累托前沿的近似值有b个被占据的超立方体,在第i个超立方体中有ni个个体,所有被占据的超立方体的个体总数为P。不失一般性,假设现在一个超立方体j有最大的bi,另一个超立方体有最小的ni,最不拥挤和最拥挤的超立方体中的个体数分别是l和m。

当使用基于个体的选择时,从最不拥挤的超立方体中选择一个个体的概率是1-((P-l)/P)^2.同理,最拥挤的超立方体中的个体被选中的概率是(m/P) ^2

当m高于l时,选择拥挤区域的个体的可能性就较高了,看起来不太合理。

相比之下,基于区域的选择方式相应的比率就是2b-1.当超过1个被占据的超长方体时,一般不会小于1,至少是3.也就是说选择不拥挤区域的概率高。

当锦标赛的规模很大时,收敛非常快,而且种群间的个体分布非常平坦,在这种情况下基于个体的选择方式在选择最不拥挤的区域选择个体的可能性就比较小了。

二、代码

%
%

clc;
clear;
close all;

%% Problem Definition

CostFunction = @(x) ZDT(x);

nVar = 3;             % Number of Decision Variables

VarSize = [nVar 1];   % Decision Variables Matrix Size

VarMin = 0;           % Decision Varibales Lower Bound
VarMax = 1;           % Decision Varibales Upper Bound

nObj = numel(CostFunction(unifrnd(VarMin, VarMax, VarSize)));   % Number of Objectives


%% PESA-II Settings

MaxIt = 100;      % Maximum Number of Iterations

nPop = 50;        % Population Size

nArchive = 50;    % Archive Size

nGrid = 7;        % Number of Grids per Dimension

InflationFactor = 0.1;    % Grid Inflation

beta_deletion = 1;
beta_selection = 2;

pCrossover = 0.5;
nCrossover = round(pCrossover*nPop/2)*2;

pMutation = 1-pCrossover;
nMutation = nPop-nCrossover;

crossover_params.gamma = 0.15;
crossover_params.VarMin = VarMin;
crossover_params.VarMax = VarMax;

mutation_params.h = 0.3;
mutation_params.VarMin = VarMin;
mutation_params.VarMax = VarMax;


%% Initialization

empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.IsDominated = [];
empty_individual.GridIndex = [];

pop = repmat(empty_individual, nPop, 1);

for i = 1:nPop
    pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
    pop(i).Cost = CostFunction(pop(i).Position);
end

archive = [];

%% Main Loop

for it = 1:MaxIt
   
    pop = DetermineDomination(pop);
    
    ndpop = pop(~[pop.IsDominated]);
    
    archive = [archive
             ndpop]; %#ok
    
    archive = DetermineDomination(archive);
    
    archive = archive(~[archive.IsDominated]);

    [archive, grid] = CreateGrid(archive, nGrid, InflationFactor);
    
    if numel(archive)>nArchive
        E = numel(archive)-nArchive;
        archive = TruncatePopulation(archive, grid, E, beta_deletion);
        [archive, grid] = CreateGrid(archive, nGrid, InflationFactor);
    end
    
    PF = archive;
    
    figure(1);
    PlotCosts(PF);
    pause(0.01);
    
    disp(['Iteration ' num2str(it) ': Number of PF Members = ' num2str(numel(PF))]);
    
    if it >= MaxIt
        break;
    end
    
    % Crossover
    popc = repmat(empty_individual, nCrossover/2, 2);
    for c = 1:nCrossover/2
        
        p1 = SelectFromPopulation(archive, grid, beta_selection);
        p2 = SelectFromPopulation(archive, grid, beta_selection);
        
        [popc(c, 1).Position, popc(c, 2).Position] = Crossover(p1.Position, ...
                                                           p2.Position, ...
                                                           crossover_params);
        
        popc(c, 1).Cost = CostFunction(popc(c, 1).Position);
        
        popc(c, 2).Cost = CostFunction(popc(c, 2).Position);
        
    end
    popc = popc(:);
    
    % Mutation
    popm = repmat(empty_individual, nMutation, 1);
    for m = 1:nMutation
        
        p = SelectFromPopulation(archive, grid, beta_selection);
        
        popm(m).Position = Mutate(p.Position, mutation_params);
        
        popm(m).Cost = CostFunction(popm(m).Position);
        
    end
    
    pop = [popc
         popm];
         
end

%% Results

disp(' ');

PFC = [PF.Cost];
for j = 1:size(PFC, 1)
    
    disp(['Objective #' num2str(j) ':']);
    disp(['      Min = ' num2str(min(PFC(j, :)))]);
    disp(['      Max = ' num2str(max(PFC(j, :)))]);
    disp(['    Range = ' num2str(max(PFC(j, :))-min(PFC(j, :)))]);
    disp(['    St.D. = ' num2str(std(PFC(j, :)))]);
    disp(['     Mean = ' num2str(mean(PFC(j, :)))]);
    disp(' ');
    
end

matlab多目标优化算法_多目标优化算法有哪些[通俗易懂]

 

今天的文章matlab多目标优化算法_多目标优化算法有哪些[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/64736.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注