欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)

基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)

2025/5/7 18:32:37 来源:https://blog.csdn.net/RRACC/article/details/145789911  浏览:    关键词:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)

 基于范围选择的进化多目标优化 PESA-II(Pareto Envelope-Based Selection Algorithm II)是一种经典的多目标遗传算法,以下是对它的详细介绍:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布

算法背景

PESA-II 由 Corne 等人在 2001 年提出,是 PESA 的改进版本。多目标优化问题中通常存在多个相互冲突的目标函数,不存在单一的最优解,而是有一个 Pareto 最优解集,PESA-II 就是为有效找到该解集而设计的算法。

算法核心组件

  • 外部存档:用于存储当前找到的非支配解。进化过程中,内部种群中的非支配个体将被添加到外部存档,而外部存档中的支配个体将被淘汰。当外部存档达到预设上限时,删除拥挤系数最小的个体以保持多样性。
  • 范围选择:将目标空间划分为多个超立方体,每个超立方体代表一个范围。选择父代个体时,优先考虑占据较少超立方体的个体,即拥挤系数较小的个体,以鼓励解的多样性;若多个个体拥挤系数相同,则随机选择。
  • 遗传操作:对选定的父代个体进行交叉和变异操作,生成新的个体并添加到内部种群,用于下一轮进化。
  • 适应度分配:个体的适应度基于其占据的超立方体数量分配,占据超立方体越多,适应度越低,即压缩因子越大,促使选择过程优先考虑占据较少超立方体的个体。

算法流程

  1. 初始化:随机生成初始内部种群和外部存档。
  2. 评估:计算内部种群中每个个体的目标函数值,根据 Pareto 支配关系分为非支配解和支配解。
  3. 更新外部存档:将内部种群中的非支配解添加到外部存档,淘汰外部存档中的支配解;若外部存档达到上限,删除拥挤系数最小的个体。
  4. 选择父代:根据范围选择机制从外部存档中选择父代个体。
  5. 遗传操作:对选定的父代个体进行交叉和变异操作,生成新的个体。
  6. 更新内部种群:将新生成的个体添加到内部种群,并清空内部种群中的旧个体。
  7. 重复:重复步骤 2 至 6,直到满足停止条件,如达到最大迭代次数或找到满意的解集。
  8. 输出:最终,外部存档中的个体即为算法找到的 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:nPoppop(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=[archivendpop]; %#ok% 确定存档中每个个体的支配关系archive=DetermineDomination(archive);% 从存档中删除被支配的个体archive=archive(~[archive.IsDominated]);% 创建网格,用于范围选择[archive, grid]=CreateGrid(archive,nGrid,InflationFactor);% 如果存档中的个体数量超过存档大小,进行截断操作if numel(archive)>nArchiveE=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>=MaxItbreak;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=[popcpopm];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 前沿上解的分布情况,以及不同目标函数之间的权衡关系。例如,较小的标准差表示解在该目标函数上的分布较为集中,而较大的范围则表示解在该目标函数上的变化较大。

需要注意的是,上述代码中的 MOP2DetermineDominationCreateGridTruncatePopulationSelectFromPopulationCrossoverMutate 和 PlotCosts 等函数需要根据具体实现进行定义,代码本身假设这些函数已经存在。

具体完整算法请跳转:基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词