NSGA-II改进之种群初始化

这篇具有很好参考价值的文章主要介绍了NSGA-II改进之种群初始化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原NSGA-II的算法在初始化种群的时候采用的是随机生成。随机代表着不确定,且随机生成的种群在整个空间上表现为不均匀;为消除随机初始化带来的不确定,和种群在空间上分布不均匀问题,由此引出新的初始化种群方式:佳点集生成种群

注:种群的初始化结果是否对种群的进化是否有影响,个人并没有做太大的研究,仁者见仁智者见智。

1-什么是佳点集

佳点集最初是由华罗庚等提出,基本定义和构造为:
假设 G s 是 s 维的欧式几何空间,那么 r ∈ G s , 那么 P n ( i ) = ( r 1 i i , r 2 i 2 , r 3 i 3 , . . . r n i n ) , i = 1 , 2 , 3 , . . . n 。 n 表示样本数量, P n ( i ) 表示佳点集,而 r 指的是佳点,一般取 r = { 2 c o s ( 2 π j k ) i , 1 ≤ i ≤ n ; 1 ≤ j ≤ s } 或者取 r = { e j i } 。其中 k 是满足 ( k − 3 ) / 2 ≥ 的最小素数。 \begin{aligned} &假设Gs是s维的欧式几何空间,那么r\in Gs,那么P_n(i)=(r_1i_i,r_2i_2,r_3i_3,...r_ni_n),i=1,2,3,...n。 \\&n表示样本数量,P_n(i)表示佳点集,而r指的是佳点,一般取 r=\begin{Bmatrix} 2cos(\frac{2\pi j}{k})i, 1\leq i\leq n;1\leq j\leq s \end{Bmatrix} 或者取 \\&r=\begin{Bmatrix} e^ji \end{Bmatrix}。其中k是满足( k − 3 ) / 2 ≥ 的最小素数。 \end{aligned} 假设Gss维的欧式几何空间,那么rGs,那么Pn(i)=(r1ii,r2i2,r3i3,...rnin),i=1,2,3,...nn表示样本数量,Pn(i)表示佳点集,而r指的是佳点,一般取r={2cos(k2πj)i,1in;1js}或者取r={eji}。其中k是满足(k3)/2的最小素数。

2-佳点集初始化种群的方法

已知:种群所在的空间维度为n,种群数量为m

s t e p 1 : 计算 r 值, r = ( r 1 , r 2 , . . . r n ) , 其中 r j = m o d ( 2 c o s ( 2 π j 7 ) m i , 1 ) , 1 ≤ j ≤ n 。 m i 表示第 i 个个体 s t e p 2 :构造数量 m 的佳点集: P n ( i ) = { ( r 1 i 1 , r 2 i 2 , . . . r n i n ) } , i = 1 , 2 , 3 , . . . n s t e p 3 : 将 P n 映射到种群所在的可行域上: X i j = a j + P n ( i ) ( b j − a j ) 其中 a j 表示当前维度的下限, b j 表示当前维度的上限 \begin{aligned} &step1:计算r值,r=(r_1,r_2,...r_n),其中r_j=mod(2cos(\frac{2\pi j}{7})m_i,1),1\leq j\leq n。m_i表示第i个个体\\ \\&step2:构造数量m的佳点集: \\& P_n(i)=\begin{Bmatrix} (r_1i_1,r_2i_2,...r_ni_n) \end{Bmatrix} ,i=1,2,3,...n\\ \\&step3:将P_n映射到种群所在的可行域上:\\ &X_i^j=a_j+P_n(i)(b_j-a_j) \\&其中a_j表示当前维度的下限,b_j表示当前维度的上限 \end{aligned} step1:计算r值,r=(r1,r2,...rn),其中rj=mod(2cos(72πj)mi,1),1jnmi表示第i个个体step2:构造数量m的佳点集:Pn(i)={(r1i1,r2i2,...rnin)},i=1,2,3,...nstep3:Pn映射到种群所在的可行域上:Xij=aj+Pn(i)(bjaj)其中aj表示当前维度的下限,bj表示当前维度的上限

3-佳点集初始化种群与随机初始化种群的对比

假设种群规模为100

NSGA-II改进之种群初始化

佳点集生成

NSGA-II改进之种群初始化

随机生成

4-佳点集初始化种群代码(matlab)

% pop_size:种群数量
% dimension:维度
% bound:取值范围
function pop = init_pop(pop_size,dimension,bounds)
%佳点集生成初始种群
p = zeros(pop_size,dimension);
prime_number_min = dimension*2 +3;
% 找到(prime_number_min-3)/2>=dimension的最小素数prime_number_min
while 1
    if isprime(prime_number_min)==1
        break;
    else
       prime_number_min = prime_number_min + 1;
    end
end

for i = 1:pop_size
    for j = 1:dimension
        r = mod(2*cos(2*pi*j/prime_number_min)*i,1);% 对应维度的r
%         r = mod(exp(j)*i,1);
        p(i,j) = bounds(j,1)+r*(bounds(j,2)-bounds(j,1));
    end
end
pop = p;
end

% %随机i生成定义域范围内种群
% p = rand(pop_size,dimension);%生成popsize*dimension的0-1矩阵
% for i = 1:dimension
%     p(:,i) = bounds(i,1)+p(:,i)*(bounds(i,2)-bounds(i,1));
% end

5-画图对比

function test_plot_pop()
% 分别画出2维,3维情况下采用佳点集和随机生成图的对比
% 定于种群大小
pop_size = 100;
% 定义种群的取值范围 
dimension_2 = 2;
dimension_3 = 3;
bounds_2 = [ones(dimension_2,1)*0,ones(dimension_2,1)*1];
bounds_3 = [ones(dimension_3,1)*0,ones(dimension_3,1)*1];
% 二维、三维的佳点集种群
pop2 = init_pop(pop_size,dimension_2,bounds_2);
pop3 = init_pop(pop_size,dimension_3,bounds_3);
% 二维、三维随机生成的种群
pop2_rand = init_pop_rand(pop_size,dimension_2,bounds_2);
pop3_rand = init_pop_rand(pop_size,dimension_3,bounds_3);

% 画出二维下图形佳点集种群,和随机种群
subplot(2,2,1)
plot(pop2(:,1),pop2(:,2),'*')
subplot(2,2,2)
plot(pop2_rand(:,1),pop2_rand(:,2),'*')
subplot(2,2,3)
plot3(pop3(:,1),pop3(:,2),pop3(:,3),'*')
subplot(2,2,4)
plot3(pop3_rand(:,1),pop3_rand(:,2),pop3_rand(:,3),'*')
end

%%
% pop_size:种群数量
% dimension:维度
% bound:取值范围
function pop = init_pop(pop_size,dimension,bounds)
%佳点集生成初始种群
p = zeros(pop_size,dimension);
prime_number_min = dimension*2 +3;
% 找到(prime_number_min-3)/2>=dimension的最小素数prime_number_min
while 1
    if isprime(prime_number_min)==1
        break;
    else
       prime_number_min = prime_number_min + 1;
    end
end

for i = 1:pop_size
    for j = 1:dimension
        r = mod(2*cos(2*pi*j/prime_number_min)*i,1);% 对应维度的r
%         r = mod(exp(j)*i,1);
        p(i,j) = bounds(j,1)+r*(bounds(j,2)-bounds(j,1));
    end
end
pop = p;
end
%%
function pop = init_pop_rand(pop_size,dimension,bounds)
%随机i生成定义域范围内种群
p = rand(pop_size,dimension);%生成popsize*dimension的0-1矩阵
for i = 1:dimension
    p(:,i) = bounds(i,1)+p(:,i)*(bounds(i,2)-bounds(i,1));
end
pop = p;
end

NSGA-II改进之种群初始化
可以把图画出来之后旋转不同视角下的分布对比。文章来源地址https://www.toymoban.com/news/detail-402105.html

到了这里,关于NSGA-II改进之种群初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NSGA-II 遗传多目标算法(python示例)

            最近在准备毕业论文,研究了一下主流的多目标算法,对于NSGA-II,网上大部分代码是全部是面向过程来实现的,本人更喜欢采用面向对象的方式,故采用python面向对象实现了一个示例,实现了对于二元多目标问题的求解。 1、非支配排序 这个简单的例子说明了 帕

    2024年01月18日
    浏览(32)
  • [多目标优化算法]1.NSGA-II——非支配排序遗传算法

    笔者最近在学习有关多目标优化的内容,并对内容进行一些整理。这篇文章算是笔者的一篇个人学习笔记,也希望能对他人提供一定的帮助,若有不足之处,也欢迎指正和建议。 注:本文中所举例子均为最小化问题。            一个多目标优化问题可以用下面的数学形式来

    2023年04月08日
    浏览(36)
  • NSGA-II:快速精英多目标遗传算法(论文+代码解读)

    按照本文梳理的算法各个模块实现,NSGA-II完整代码见GitHub - bujibujibiuwang/NSGA-II-in-python: 《A fast and elitist multi-objective genetic algorithm: NSGA-II》   目录 1.介绍 2. NSGA-II 2.1 快速非支配排序 2.1.1 NSGA的传统非支配排序 2.1.2 NSGA-II的快速非支配排序 2.2 多样性保护(Diversity Preservation) 2.2

    2023年04月16日
    浏览(49)
  • 多目标最优化模型及算法应用(NSGA-II)

    一.大纲 多目标最优化模型概论 传统最优化解决方法 现代最优化算法 样例示范 二.多目标最优化模型概论 1.对于多余一个的目标函数在给定区域内的最优化问题称为多目标优化问题。 ​ 例如:在给定条件下,设计一款汽车,既要满足安全(重量大),又要满足经济(耗油量

    2024年02月03日
    浏览(43)
  • 多目标优化NSGA-II的实现(MATLAB完整代码)

    由于历史原因,没有整理好完整的代码,所以在【多目标优化NSGA-II的实现和测试(MATLAB实现)】中只放了部分代码。 现在已经整理好了代码,此部分的代码测试内容为:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6。 目录 主要内容 代码模块 其他内容 运行注意事项  代码 nsga2_test nsga2_main get_

    2024年02月05日
    浏览(51)
  • 数据结构与算法——顺序表(顺序存储结构)及初始化详解

    顺序表 ,全名 顺序存储结构 ,是线性表的一种。通过《什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。 顺序表存储数据时,会提前申请一整块足够大小的物理

    2024年02月16日
    浏览(39)
  • MATLAB初始化智能算法编码-产生随机不重复整数序列矩阵

    产生随机不重复整数序列矩阵是智能算法最常用的操作之一,以下给出具体方法: clc;close all;clear all;warning off;%清除变量 rand(\\\'seed\\\', 100); randn(\\\'seed\\\', 100); format long g; N=10; % 设定优化问题维数 lb=0*ones(1,N);% 自变量上限 ub=1*ones(1,N);% 自变量下限 popsize=10;% 种群数 Chrom=mygenfun(popsize,N,lb,u

    2024年01月24日
    浏览(42)
  • ORB-SLAM2算法12之单目初始化Initializer

    ORB-SLAM2算法7详细了解了 System 主类和多线程、

    2024年02月10日
    浏览(46)
  • Pytorch权重初始化/参数初始化

    refer: 【Pytorch】各网络层的默认初始化方法 https://blog.csdn.net/guofei_fly/article/details/105109883 其实Pytorch初始化方法就在各自的层的 def reset_parameters(self) - None: 方法中。 有人可能会问 为什么这个方法和Pytorch直接出来的权重初始值不一样 ?单步调试会发现其实这个方法运行了至少两

    2024年02月11日
    浏览(62)
  • Linux内存初始化-启动阶段的内存初始化

    本文代码基于ARM64平台, Linux kernel 5.15 在加载kernel 之前, kernel对于系统是有一定要求的,明确规定了boot阶段必须要把MMU关闭: 那么在进入kernel之后, 就必须有一个使能MMU, 建立映射的过程, 本文描述kernel启动阶段进行内存初始化相关的操作。 在初始化阶段,我们mapping二段

    2024年02月08日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包