基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)
基于范围选择的进化多目标优化 PESA-II(Pareto Envelope-Based Selection Algorithm II)是一种经典的多目标遗传算法,以下是对它的详细介绍:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布
算法背景
PESA-II 由 Corne 等人在 2001 年提出,是 PESA 的改进版本。多目标优化问题中通常存在多个相互冲突的目标函数,不存在单一的最优解,而是有一个 Pareto 最优解集,PESA-II 就是为有效找到该解集而设计的算法。
算法核心组件
- 外部存档:用于存储当前找到的非支配解。进化过程中,内部种群中的非支配个体将被添加到外部存档,而外部存档中的支配个体将被淘汰。当外部存档达到预设上限时,删除拥挤系数最小的个体以保持多样性。
- 范围选择:将目标空间划分为多个超立方体,每个超立方体代表一个范围。选择父代个体时,优先考虑占据较少超立方体的个体,即拥挤系数较小的个体,以鼓励解的多样性;若多个个体拥挤系数相同,则随机选择。
- 遗传操作:对选定的父代个体进行交叉和变异操作,生成新的个体并添加到内部种群,用于下一轮进化。
- 适应度分配:个体的适应度基于其占据的超立方体数量分配,占据超立方体越多,适应度越低,即压缩因子越大,促使选择过程优先考虑占据较少超立方体的个体。
算法流程
- 初始化:随机生成初始内部种群和外部存档。
- 评估:计算内部种群中每个个体的目标函数值,根据 Pareto 支配关系分为非支配解和支配解。
- 更新外部存档:将内部种群中的非支配解添加到外部存档,淘汰外部存档中的支配解;若外部存档达到上限,删除拥挤系数最小的个体。
- 选择父代:根据范围选择机制从外部存档中选择父代个体。
- 遗传操作:对选定的父代个体进行交叉和变异操作,生成新的个体。
- 更新内部种群:将新生成的个体添加到内部种群,并清空内部种群中的旧个体。
- 重复:重复步骤 2 至 6,直到满足停止条件,如达到最大迭代次数或找到满意的解集。
- 输出:最终,外部存档中的个体即为算法找到的 Pareto 最优解集。
算法特点与优势
- 多样性保持:通过维护外部存档和基于范围的选择机制,能保持解的多样性,避免早熟收敛。
- 解的质量:优先考虑占据较少超立方体的个体,可找到更接近 Pareto 前沿的解。
- 易于实现:算法流程相对简单,易于理解和实现,且基于 Matlab 等编程语言的模块化实现使其易于修改和扩展。
应用领域
- 工程设计:在机械设计、电子电路设计等领域,用于优化多个相互冲突的性能指标。
- 生产调度:在生产计划、车间调度等问题中,可寻找最优的生产计划和资源分配方案。
- 金融优化:在金融投资、风险管理等领域,用于优化投资组合的风险和收益。
- 能源管理:在智能电网、能源分配等问题中,可优化能源的使用效率和成本。
汽车发动机多目标优化设计
- 多目标特征:汽车发动机的设计存在多个相互冲突的目标。例如,为了提升车辆的动力性能,需要提高发动机的功率输出;但从降低使用成本和减少对环境影响的角度,又要降低燃油消耗和尾气污染物排放。这些目标之间难以同时达到最优,需要进行权衡。
- PESA - II 适用性:PESA - II 是一种多目标优化算法,能够处理多个相互冲突的目标。它可以在搜索过程中同时考虑功率、油耗、排放等多个目标,通过不断迭代找到一组帕累托最优解,为设计者提供多种不同的设计方案,使其能根据实际需求在不同目标之间进行权衡和选择。
飞机机翼多目标外形优化
- 多目标特征:飞机机翼的设计需要综合考虑多个性能指标。升力系数大可以保证飞机有良好的起飞、巡航和降落性能;而阻力系数小则能降低飞行过程中的能量消耗,提高燃油效率。同时,为了减轻飞机整体重量、降低制造成本,还希望机翼结构重量尽可能轻。这些目标之间相互制约,例如增加机翼面积可能提高升力,但也会增加阻力和结构重量。
- PESA - II 适用性:PESA - II 能够同时对升力系数、阻力系数和结构重量等多个目标进行优化。它通过对机翼的几何外形参数(如翼型、展弦比等)进行搜索和调整,找到一组在不同目标之间达到较好平衡的最优外形设计方案,满足飞机设计的多方面要求。
电动汽车充电设施布局优化
- 多目标特征:在规划电动汽车充电设施布局时,存在多个需要优化的目标。建设成本最低是一个重要目标,包括土地购置、设备安装等费用;同时要保证电动汽车用户的充电便利性最高,即充电设施的分布要合理,使车主能够方便快捷地找到充电桩;此外,还需要考虑电网的负荷均衡,避免局部区域充电设施过于集中导致电网压力过大。这些目标之间存在一定的矛盾,例如增加充电设施数量可以提高便利性,但会增加建设成本。
- PESA - II 适用性:PESA - II 可以同时考虑建设成本、充电便利性和电网负荷均衡等多个目标。通过对充电设施的位置、数量等决策变量进行优化,找到一组帕累托最优解,为充电设施的布局规划提供多种可行方案,帮助决策者在不同目标之间做出合理的选择。
具体代码及实验结果
% 清除命令窗口、工作区变量并关闭所有图形窗口
clc;
clear;
close all;
%% Problem Definition
% 定义目标函数,这里使用 MOP2 函数作为多目标优化问题的目标函数
CostFunction=@(x) MOP2(x);
% 决策变量的数量,这里设定为 3 个
nVar=3;
% 决策变量矩阵的大小
VarSize=[nVar 1];
% 决策变量的下限
VarMin=0;
% 决策变量的上限
VarMax=1;
% 计算目标函数的数量,通过生成一个随机的决策变量向量并调用目标函数得到
nObj=numel(CostFunction(unifrnd(VarMin,VarMax,VarSize)));
%% PESA-II Settings
% 最大迭代次数,算法最多运行 100 次迭代
MaxIt=100;
% 种群大小,即每一代中个体的数量
nPop=50;
% 存档大小,用于存储非支配解的存档的最大容量
nArchive=50;
% 每个维度上的网格数量,用于范围选择机制
nGrid=7;
% 网格膨胀因子,用于扩大网格范围以处理边界情况
InflationFactor=0.1;
% 删除个体时的参数,控制删除个体的策略
beta_deletion=1;
% 选择个体时的参数,控制选择个体的策略
beta_selection=2;
% 交叉操作的概率
pCrossover=0.5;
% 交叉操作生成的子代数量,确保是偶数
nCrossover=round(pCrossover*nPop/2)*2;
% 变异操作的概率
pMutation=1-pCrossover;
% 变异操作生成的子代数量
nMutation=nPop-nCrossover;
% 交叉操作的参数,gamma 控制交叉的程度,VarMin 和 VarMax 为决策变量的上下限
crossover_params.gamma=0.15;
crossover_params.VarMin=VarMin;
crossover_params.VarMax=VarMax;
% 变异操作的参数,h 控制变异的步长,VarMin 和 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
% 当前存档中的个体即为 Pareto 前沿
PF=archive;
% 绘制当前的 Pareto 前沿
figure(1);
PlotCosts(PF);
pause(0.01);
% 显示当前迭代次数和 Pareto 前沿的个体数量
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(' ');
% 提取 Pareto 前沿个体的成本矩阵
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
实验结果简述
- Pareto 前沿可视化:在每次迭代中,代码会绘制当前找到的 Pareto 前沿。随着迭代次数的增加,Pareto 前沿通常会逐渐收敛到真实的 Pareto 前沿,并且解的分布会更加均匀。
- Pareto 前沿个体数量:在迭代过程中,会显示当前 Pareto 前沿的个体数量。这个数量可能会随着迭代而变化,但最终会趋于稳定。
- 目标函数统计信息:最后,代码会输出每个目标函数的最小值、最大值、范围、标准差和均值。这些统计信息可以帮助我们了解 Pareto 前沿上解的分布情况,以及不同目标函数之间的权衡关系。例如,较小的标准差表示解在该目标函数上的分布较为集中,而较大的范围则表示解在该目标函数上的变化较大。
需要注意的是,上述代码中的 MOP2
、DetermineDomination
、CreateGrid
、TruncatePopulation
、SelectFromPopulation
、Crossover
、Mutate
和 PlotCosts
等函数需要根据具体实现进行定义,代码本身假设这些函数已经存在。
具体完整算法请跳转:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布