NSGA-Ⅲ源代码

news/2024/4/23 15:57:57/文章来源:https://blog.csdn.net/qq_44246618/article/details/129261464

NSGA-Ⅲ源代码如下,供大家学习和应用。该算法在梯级水电-火电的应用订阅专栏即可查看:
在这里插入图片描述

1、主函数

% 
% Copyright (c) 2016, Mostapha Kalami Heris & Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "LICENSE" file for license terms.
% 
% Project Code: YPEA126
% Project Title: Non-dominated Sorting Genetic Algorithm III (NSGA-III)
% Publisher: Yarpiz (www.yarpiz.com)
% 
% Implemented by: Mostapha Kalami Heris, PhD (member of Yarpiz Team)
% 
% Cite as:
% Mostapha Kalami Heris, NSGA-III: Non-dominated Sorting Genetic Algorithm, the Third Version — MATLAB Implementation (URL: https://yarpiz.com/456/ypea126-nsga3), Yarpiz, 2016.
% 
% Contact Info: sm.kalami@gmail.com, info@yarpiz.com
% 
% Base Reference Paper:
% K. Deb and H. Jain, "An Evolutionary Many-Objective Optimization Algorithm 
% Using Reference-Point-Based Nondominated Sorting Approach, Part I: Solving
% Problems With Box Constraints, "
% in IEEE Transactions on Evolutionary Computation, 
% vol. 18, no. 4, pp. 577-601, Aug. 2014.
% 
% Reference Paper URL: http://doi.org/10.1109/TEVC.2013.2281535
% nsga3;

2、NSGA-Ⅲ函数

clc;
clear;
close all;%% Problem DefinitionCostFunction = @(x) MOP2(x);  % Cost FunctionnVar = 5;    % Number of Decision VariablesVarSize = [1 nVar]; % Size of Decision Variables MatrixVarMin = -1;   % Lower Bound of Variables
VarMax = 1;   % Upper Bound of Variables% Number of Objective Functions
nObj = numel(CostFunction(unifrnd(VarMin, VarMax, VarSize)));%% NSGA-II Parameters% Generating Reference Points
nDivision = 10;
Zr = GenerateReferencePoints(nObj, nDivision);MaxIt = 50;  % Maximum Number of IterationsnPop = 80;  % Population SizepCrossover = 0.5;       % Crossover Percentage
nCrossover = 2*round(pCrossover*nPop/2); % Number of Parnets (Offsprings)pMutation = 0.5;       % Mutation Percentage
nMutation = round(pMutation*nPop);  % Number of Mutantsmu = 0.02;     % Mutation Ratesigma = 0.1*(VarMax-VarMin); % Mutation Step Size%% Colect Parametersparams.nPop = nPop;
params.Zr = Zr;
params.nZr = size(Zr, 2);
params.zmin = [];
params.zmax = [];
params.smin = [];%% Initializationdisp('Staring NSGA-III ...');empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.Rank = [];
empty_individual.DominationSet = [];
empty_individual.DominatedCount = [];
empty_individual.NormalizedCost = [];
empty_individual.AssociatedRef = [];
empty_individual.DistanceToAssociatedRef = [];pop = repmat(empty_individual, nPop, 1);
for i = 1:nPoppop(i).Position = unifrnd(VarMin, VarMax, VarSize);pop(i).Cost = CostFunction(pop(i).Position);
end% Sort Population and Perform Selection
[pop, F, params] = SortAndSelectPopulation(pop, params);%% NSGA-II Main Loopfor it = 1:MaxIt% Crossoverpopc = repmat(empty_individual, nCrossover/2, 2);for k = 1:nCrossover/2i1 = randi([1 nPop]);p1 = pop(i1);i2 = randi([1 nPop]);p2 = pop(i2);[popc(k, 1).Position, popc(k, 2).Position] = Crossover(p1.Position, p2.Position);popc(k, 1).Cost = CostFunction(popc(k, 1).Position);popc(k, 2).Cost = CostFunction(popc(k, 2).Position);endpopc = popc(:);% Mutationpopm = repmat(empty_individual, nMutation, 1);for k = 1:nMutationi = randi([1 nPop]);p = pop(i);popm(k).Position = Mutate(p.Position, mu, sigma);popm(k).Cost = CostFunction(popm(k).Position);end% Mergepop = [poppopcpopm]; %#ok% Sort Population and Perform Selection[pop, F, params] = SortAndSelectPopulation(pop, params);% Store F1F1 = pop(F{1});% Show Iteration Informationdisp(['Iteration ' num2str(it) ': Number of F1 Members = ' num2str(numel(F1))]);% Plot F1 Costsfigure(1);PlotCosts(F1);pause(0.01);end%% Resultsdisp(['Final Iteration: Number of F1 Members = ' num2str(numel(F1))]);
disp('Optimization Terminated.');

3、其他函数

3.1 AssociateToReferencePoint

function [pop, d, rho] = AssociateToReferencePoint(pop, params)Zr = params.Zr;nZr = params.nZr;rho = zeros(1, nZr);d = zeros(numel(pop), nZr);for i = 1:numel(pop)for j = 1:nZrw = Zr(:, j)/norm(Zr(:, j));z = pop(i).NormalizedCost;d(i, j) = norm(z - w'*z*w);end[dmin, jmin] = min(d(i, :));pop(i).AssociatedRef = jmin;pop(i).DistanceToAssociatedRef = dmin;rho(jmin) = rho(jmin) + 1;endend

3.2 Crossover

function [y1 y2] = Crossover(x1, x2)alpha = rand(size(x1));y1 = alpha.*x1+(1-alpha).*x2;y2 = alpha.*x2+(1-alpha).*x1;end

3.3 Dominate

function b = Dominates(x, y)if isstruct(x)x = x.Cost;endif isstruct(y)y = y.Cost;endb = all(x <= y) && any(x<y);end

3.4 GenerateReferencePoints

function Zr = GenerateReferencePoints(M, p)Zr = GetFixedRowSumIntegerMatrix(M, p)' / p;endfunction A = GetFixedRowSumIntegerMatrix(M, RowSum)if M < 1error('M cannot be less than 1.');endif floor(M) ~= Merror('M must be an integer.');endif M == 1A = RowSum;return;endA = [];for i = 0:RowSumB = GetFixedRowSumIntegerMatrix(M - 1, RowSum - i);A = [A; i*ones(size(B, 1), 1) B];endend

3.5 MOP2

function z = MOP2(x)n = numel(x);z1 = 1-exp(-sum((x-1/sqrt(n)).^2));z2 = 1-exp(-sum((x+1/sqrt(n)).^2));z = [z1 z2]';end

3.6 Mutate

function y = Mutate(x, mu, sigma)nVar = numel(x);nMu = ceil(mu*nVar);j = randsample(nVar, nMu);y = x;y(j) = x(j)+sigma*randn(size(j));end

3.7 NonDominatedSorting

function [pop, F] = NonDominatedSorting(pop)nPop = numel(pop);for i = 1:nPoppop(i).DominationSet = [];pop(i).DominatedCount = 0;endF{1} = [];for i = 1:nPopfor j = i+1:nPopp = pop(i);q = pop(j);if Dominates(p, q)p.DominationSet = [p.DominationSet j];q.DominatedCount = q.DominatedCount+1;endif Dominates(q.Cost, p.Cost)q.DominationSet = [q.DominationSet i];p.DominatedCount = p.DominatedCount+1;endpop(i) = p;pop(j) = q;endif pop(i).DominatedCount == 0F{1} = [F{1} i];pop(i).Rank = 1;endendk = 1;while trueQ = [];for i = F{k}p = pop(i);for j = p.DominationSetq = pop(j);q.DominatedCount = q.DominatedCount-1;if q.DominatedCount == 0Q = [Q j];q.Rank = k+1;endpop(j) = q;endendif isempty(Q)break;endF{k+1} = Q;k = k+1;endend

3.8 NormalizePopulation

function [pop, params] = NormalizePopulation(pop, params)params.zmin = UpdateIdealPoint(pop, params.zmin);fp = [pop.Cost] - repmat(params.zmin, 1, numel(pop));params = PerformScalarizing(fp, params);a = FindHyperplaneIntercepts(params.zmax);for i = 1:numel(pop)pop(i).NormalizedCost = fp(:, i)./a;endendfunction a = FindHyperplaneIntercepts(zmax)w = ones(1, size(zmax, 2))/zmax;a = (1./w)';end

3.9 PerformScalarizing

function params = PerformScalarizing(z, params)nObj = size(z, 1);nPop = size(z, 2);if ~isempty(params.smin)zmax = params.zmax;smin = params.smin;elsezmax = zeros(nObj, nObj);smin = inf(1, nObj);endfor j = 1:nObjw = GetScalarizingVector(nObj, j);s = zeros(1, nPop);for i = 1:nPops(i) = max(z(:, i)./w);end[sminj, ind] = min(s);if sminj < smin(j)zmax(:, j) = z(:, ind);smin(j) = sminj;endendparams.zmax = zmax;params.smin = smin;endfunction w = GetScalarizingVector(nObj, j)epsilon = 1e-10;w = epsilon*ones(nObj, 1);w(j) = 1;end

3.10 SortAndSelectPopulation

function [pop, F, params] = SortAndSelectPopulation(pop, params)[pop, params] = NormalizePopulation(pop, params);[pop, F] = NonDominatedSorting(pop);nPop = params.nPop;if numel(pop) == nPopreturn;end[pop, d, rho] = AssociateToReferencePoint(pop, params);newpop = [];for l = 1:numel(F)if numel(newpop) + numel(F{l}) > nPopLastFront = F{l};break;endnewpop = [newpop; pop(F{l})];   %#okendwhile true[~, j] = min(rho);AssocitedFromLastFront = [];for i = LastFrontif pop(i).AssociatedRef == jAssocitedFromLastFront = [AssocitedFromLastFront i]; %#okendendif isempty(AssocitedFromLastFront)rho(j) = inf;continue;endif rho(j) == 0ddj = d(AssocitedFromLastFront, j);[~, new_member_ind] = min(ddj);elsenew_member_ind = randi(numel(AssocitedFromLastFront));endMemberToAdd = AssocitedFromLastFront(new_member_ind);LastFront(LastFront == MemberToAdd) = [];newpop = [newpop; pop(MemberToAdd)]; %#okrho(j) = rho(j) + 1;if numel(newpop) >= nPopbreak;endend[pop, F] = NonDominatedSorting(newpop);end

3.11 UpdateIdealPoint

function zmin = UpdateIdealPoint(pop, prev_zmin)if ~exist('prev_zmin', 'var') || isempty(prev_zmin)prev_zmin = inf(size(pop(1).Cost));endzmin = prev_zmin;for i = 1:numel(pop)zmin = min(zmin, pop(i).Cost);endend

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75245.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端经典react面试题及答案

为什么 React 元素有一个 $$typeof 属性 目的是为了防止 XSS 攻击。因为 Synbol 无法被序列化&#xff0c;所以 React 可以通过有没有 $$typeof 属性来断出当前的 element 对象是从数据库来的还是自己生成的。 如果没有 $$typeof 这个属性&#xff0c;react 会拒绝处理该元素。…

C++plog库,轻量级日志框架(日志库)

文章目录主要头文件及使用方法解释plog/Log.hplog/Appenders/ColorConsoleAppender.hplog/Appenders/RollingFileAppender.hplog/Formatters/TxtFormatter.h三个核心概念Formatter&#xff1a;格式化程序格式化程序举例TxtFormatterJsonFormatterCsvFormatterSyslogFormatterAp…

真的,MyBatis 核心源码入门看这个就够了(四)

4 SQL执行 再次回到demo的示例代码&#xff0c; org.junit.jupiter.api.Testvoid queryBySn() throws IOException {//1 读取配置文件InputStream in Resources.getResourceAsStream("mybatis-config.xml");//2 加载解析配置文件并获取SqlSessionFactory对象SqlSes…

华为OD机试模拟题 用 C++ 实现 - 寻找连续区间(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

华为OD机试题,用 Java 解【求解连续数列】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

大数据算法自检

1 大数据亚线性空间算法 1.1 流模型的计数问题 问题定义&#xff1f;用什么算法&#xff1f;算法步骤&#xff1f;(提示&#xff1a;三层递进) 切比雪夫不等式&#xff1f;怎么证明&#xff1f;期望&#xff0c;方差&#xff0c;空间复杂度&#xff1f; 极其有限的空间存储极…

数据结构与算法(六):图结构

图是一种比线性表和树更复杂的数据结构&#xff0c;在图中&#xff0c;结点之间的关系是任意的&#xff0c;任意两个数据元素之间都可能相关。图是一种多对多的数据结构。 一、基本概念 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#x…

每日分享(免登录积分商城系统 动力商城 兑换商城源码)

​demo软件园每日更新资源,请看到最后就能获取你想要的: 1.Python教程2022&#xff1a;100天从新手到大师 完整版 Python 100天从新手到大师是一个Python入门教程&#xff0c;Python从入门到精通&#xff0c;专门为热爱python的新手量身定做的学习计划&#xff0c;100天速成pyt…

OOM的俩种情况---主动kill/被动kill

出现OOM, 有两种处理方式&#xff1a;1. 主动Kill; 2. 被动Kill 例&#xff1a;HBase Region Server OOM定位问题复盘 现象 在HBase资源隔离项目中&#xff0c;对测试集群进行压测时&#xff0c;发现region server会出现崩溃的情况&#xff0c;单机请求量从>200到~50每秒都…

【Git使用教程】从入门到学废

文章目录1. 基础git流程图常用命令基本配置快捷指令解决GitBash乱码获取本地仓库基础操作指令查看修改的状态&#xff08;status&#xff09;添加工作区到暂存区(add)提交暂存区到本地仓库(commit)查看提交日志(log)版本回退添加文件至忽略列表总结2. 分支查看本地分支创建本地…

程序员多赚20k的接私活必备网站

为什么都是程序员&#xff0c;就有人能多赚20k&#xff1f;那是因为副业搞得那么溜啊&#xff01; 今天分享一些程序员搞钱必备的接私活网站&#xff0c;让更多程序员们在工作之余能有另外一份收入。 1.程序员客栈&#xff1a;http://proginn.com 专为程序员服务的软件外包对…

超级品牌符号怎么设计?大咖有方法

怎么设计超级LOGO图标&#xff1f;有方法&#xff01; LOGO设计大趋势&#xff1a;卡通化、拟人化 抽象符号已经泛滥 但卡通形象也已经泛滥 趣讲大白话&#xff1a;设计容易出名难 【安志强趣讲信息科技89期】 ******************************* 别以为设计一个卡通就牛X闪闪 比…

React Native使用echart——wrn-echarts

这里写自定义目录标题前言Tips详细使用过程如下1、开发环境搭建2、准备RN工程3、build App包4、 安装相关依赖5、试用Skia模式6、试用Svg模式7、封装Chart组件8、多个图表使用总结前言 平时写图表相关需求&#xff0c;用得最多的图表库就是echarts。echarts在web端的表现已经相…

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

机器学习&#xff1a;基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者&#xff1a;AOAIYI 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;AOAIYI首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞…

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 dht11温湿度检测电路设计2.3 NRF24L01无线通信电路设计3、部分代码展示3.1 NRF24L01初始化3.2 NRF24L01的SPI写时序3.…

【数据库】数据库基本概念和类型

一、数据库基本概念 1、数据 所谓数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;这些符号是可识别的、抽象的。它不仅仅指狭义上的数字&#xff0c;而是有多种表现形式&#xff1a;字母、文字、文本、图形、音频、视频等。现在…

STM32开发(16)----CubeMX配置DMA

CubeMX配置DMA前言一、什么是DMA&#xff1f;二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对DMA进行配置的方法&#xff0c;DMA的原理、概念和特点&#xff0c;配置各个步骤的功能&#xff0c;并通过串口DMA传输实验方式验证。 一、什么是…

【学习笔记汇总】Github Note

本科毕业设计 Internet of Things environmental monitoring system based on STM32 STM32系列单片机工程模板 【STM32F103_Libary】基于STM32F103开发板的工程模板 ST7735屏幕【STM32F103Template】基于STM32F103开发板的工程模板 ILI9341屏幕【STM32F103_LibaryFinalVersio…

服务拆分及远程调用

目录 服务拆分 服务拆分注意事项 服务间调用 步骤一&#xff1a;注册RestTemplate 步骤二&#xff1a;修改业务层代码 总结&#xff1a; 提供者和消费者 思考 服务调用关系 服务拆分 服务拆分注意事项 单一职责&#xff1a;不同微服务&#xff0c;不要重复开发相同业…

电压放大器和电流放大器的区别是什么意思

在日常电子实验测试中&#xff0c;很多电子工程师都会使用到电压放大器和电流放大器&#xff0c;但是很多新手工程师却无法区分两者的区别&#xff0c;下面就让安泰电子来为我们讲解电压放大器和电流放大器的区别是什么意思。 一、电压放大器介绍&#xff1a; 电压放大器是一种…