%
%
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
没有合适的资源?快使用搜索试试~ 我知道了~
基于PESA-II实现多目标优化求解附Matlab代码
共14个文件
m:14个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 140 浏览量
2022-10-16
10:14:10
上传
评论
收藏 5KB ZIP 举报
温馨提示
1.版本:matlab2019a,不会运行可私信 2.领域:【智能优化算法-PESA-II】 3.内容:基于PESA-II实现多目标优化求解附Matlab代码 4.适合人群:本科,硕士等教研学习使用
资源推荐
资源详情
资源评论
收起资源包目录
【智能优化算法-PESA-II】基于PESA-II实现多目标优化求解附Matlab代码 上传1.zip (14个子文件)
main.m 11B
Dominates.m 186B
MOP2.m 131B
PlotCosts.m 167B
Mutate.m 271B
DetermineDomination.m 382B
pesa2.m 3KB
Crossover.m 345B
TruncatePopulation.m 538B
RouletteWheelSelection.m 118B
CreateGrid.m 1KB
FindPositionInGrid.m 614B
SelectFromPopulation.m 260B
ZDT.m 173B
共 14 条
- 1
资源评论
天天Matlab科研工作室
- 粉丝: 3w+
- 资源: 7251
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功