数值实验的设计与目的,以及算法几种性能指标的含义与区别

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

此外,欢迎添加算法交流群进行交流:912369858

先说明一下,这篇推文针对的是进化算法的常见文章来讨论的。什么叫常见文章呢?就是三大件:算法改进+跑CEC测试集+简单应用(工程案例、WSN节点覆盖优化、PID参数整定、特征选择等)。或者:提新算法+跑CEC测试集+简单应用。这种文章在进化算法领域是非常常见的,八股文。在这类文章的基础上,我们讨论一下数值实验的设计,以及博主的一些建议(仅代表个人观点)。此外,阐述进化算法的一些常用性能指标的含义和它们彼此的区别。

Part1 数值实验设计

这里分两种情况进行阐述。第一种情况是改进别人的算法,第二种情况是自己提出新算法。这两种情况下的数值实验分别怎么设计,博主给出自己的看法。注意是博主自己的建议,仅代表个人观点,不要来抬杠。

1.1 改进算法类文章

第一种情况:改进算法类文章。假设原始算法是GWO,自己改进的算法取名为IGWO。它的数值实验可以如图1这样设计:

图片

图1

这幅图是去年我作报告时候的一张PPT,4.1、4.2……是因为数值实验一般是第4章,即Section 4。这个不重要。下面对这些实验进行解释:

这里面4.2的意思是,如果你改进的算法设计了新的参数,并且这个参数是需要人为赋值的,那么审稿人有可能问你:你这个参数的赋值为什么是0.9,这个参数的最优设置值有没有被网格搜索过?所以,你可以增加一个这样的实验,找出最优的参数设置值。当然,如果这个实验做不了,就要好好解释你为什么设置参数值为0.9,有理有据,而不是直接给出,容易被怼。如果4.2不需要做(新算法没有参数),或者4.2做不了,那么就把这个实验换成:策略有效性验证。比如IGWO包含三个改进策略A、B、C,那就分别验证这几个策略的有效性,看一下是不是都对算法性能的提升有贡献。即:GWO+策略A、GWO+策略B、GWO+策略C。或者:IGWO缺少策略A、IGWO缺少策略B、IGWO缺少策略C。

4.3、4.4、4.5的实验应该不用过多解释,一方面是堆工作量,一方面是验证算法有效性必须有的实验。当然,你可以合成一个实验,跑不同的测试集,这样也是可行的。

4.6是可以增加的实验,一方面也是堆工作量,另一方面是为了更全面的分析算法在进化过程中的收敛状态。这个可以参考文章10.1109/TCYB.2019.2925015,里面进行了详细介绍和实验说明。如图2所示,是这篇文章改进算法和原始PSO的种群多样性在进化过程中的变化曲线。

图片

图2

注意,图2的这种种群多样性变化曲线和平均收敛曲线是相对应的。意思就是,平均收敛曲线有波动,种群多样性曲线也会波动。这是有对应的,前者有什么变化,后者也会作出相应的反应。至于什么原因,大家可以自己分析,也欢迎在下面讨论。

4.7是可增加的实验,算法在收敛过程中,种群的勘探和开发的占比变化曲线。关于这个实验,可以仔细阅读我之前的推文:种群的勘探(Exploration)与开发(Exploitation)(含MATLAB代码)。里面有详细的解释。

4.8是算法的应用。实际上,现在那几十个工程应用也可以理解为测试集。4.8的实验就是套一些应用案例进去,验证一下算法在实际问题上的实用性。这里需要特别注意:如果应用的问题是约束优化问题(比如工程案例),而你的算法是针对无约束优化问题设计的(就是你前面跑的测试集是CEC2005、CEC2013、CEC2014、CEC2017、CEC2020或CEC2022等),这里一定要说明一下对于约束条件的处理方法。这个不用太详细,但是要有,阐明你是怎么处理的约束条件。不然容易被怼。

4.9是建议写的。因为算法没有最好,只有更好!这个是写来感动审稿人的。这孩子实事求是,勇于承认自己的缺点,那就让他过吧~


最后是关于对比算法组成,我一般建议是:原始算法、6-8个同类算法、6-8个其他EA。4.8的对比算法则多多益善,可以直接去找文献。

1.2 提出新算法类文章

第二种情况:提出新算法类文章。就是提出一个新的算法,别人都没有提过的。假如我们把这个算法命名为牛马算法(Ox & horse algorithm, OHA)。(这是随便取的名字,是没有这个算法的哈~)。它的数值实验可以如图3这样设计:

图片

图 3

除了4.3、4.4和4.5外,其他和上面的改进算法类文章差不多。4.3、4.4和4.5的测试集可以自己挑选,但肯定是要跑多个测试集的。提出新算法,如果前面的创新性不够,那后面的工作量一定要堆够,做大量的实验。所以多跑几个测试集、多对比一些算法,并且每个测试集要跑不同的维度。

Part2 算法几种性能指标的含义与区别

2.1 常见的几种性能指标

灵敏性。也叫灵敏度,就是算法对参数的灵敏程度。是不是参数稍微动一下,算法的性能就会受到很大的影响。

收敛性。一般针对具体问题而言。比如针对问题A,这个算法的收敛性如何。不能脱离问题去讨论算法的收敛性。收敛性在数值实验结果上从两个方面表现:收敛速度、收敛精度

稳定性。算法在同一个问题上多次运行的结果差异是否较大。比如A算法在CEC2017的F4上运行30次,这30次结果的方差很大,那就说明这个算法在这个函数上稳定性较差。

鲁棒性。算法在不同问题上的求解结果。比如问题A、B、C的最优值都是0,维度都是20,但算法只在A上求得最优值,在B和C上的效果都很差。这就说明这个算法的鲁棒性较差。鲁棒性是用来验证算法的通用性,是不是只适合某个问题或者某一类问题,而换一个问题就不行了。

延展性。算法在同一个问题不同维度上表现出的性能。比如在30维上性能优越,在50维上就收敛效果很差,那么它的延展性较低。


多样性,即种群多样性。有专门的计算公式,可以参考文章10.1109/TCYB.2019.2925015,里面进行了详细介绍。反映的是种群的分散程度和解的相似程度。

2.2 区别

这个主要从数值实验层面来说:

收敛速度与收敛精度:算法在某个测试函数上得到的最优值只能展示算法的收敛精度,显示不出收敛速度;收敛曲线既可以显示算法的收敛速度,也可以展示收敛精度。在进行实验描述时注意区分。

稳定性与鲁棒性:算法在测试函数上多次运行得到的标准差、方差或箱线图展示的是算法在这个问题上的稳定性,而不是鲁棒性。鲁棒性目前好像是没有专门的指标,这个可以自己查一下。鲁棒性一般是观察算法在整个测试集所有基准函数上的实验结果来进行说明的。比如测试集包含20个基准函数,算法在20个函数上的误差都是0,或者很小,算法鲁棒性就较优,在不同问题上的性能没有太大差异。

稳定性和延展性:这个是最容易混淆的。算法在测试函数上多次运行得到的标准差、方差或箱线图展示的是算法在这个问题上的稳定性,而不是延展性。延展性是算法在同一个函数上跑不同的维度反映出来的性能。比如CEC2017测试集的F5,算法在30维、50维和100维上跑的结果没有太大的差异,那么算法在F5上的延展性就较好。换言之,延展性衡量的是维度变化对算法性能的影响,稳定性衡量的是算法多次求解同一个问题时,结果的变化大小。在进行实验描述时注意区分。

最后要说明的是,算法是不具备普适性的。如果算法具备普适性,就和没有免费午餐定理矛盾了。如果算法具备普适性,就不需要改进算法了~

近几年网络环境不太好,希望大家多多讨论和文明评论,少些酸言酸语~

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

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

相关文章

Qt 窗口居中显示

Qt 窗口居中显示 引言一、窗体的setGeometry函数二、计算屏幕中心然后move三、借助QRect计算四、补充知识点 引言 窗口居中可以提供良好的视觉效果、突出重点内容、提升用户导航和操作的便利性,有助于改善用户体验。 Qt一般情况下,其Mainwindow或弹出的…

python调用excel的demo

在本地安装Pycharm之后,新建工程,在main.py中键入如下代码,即可实现Python调用excel: import pandas as pd sheet pd.read_excel(test.xlsx) data sheet.loc[0].values print("读取指定行的数据:\n{0}".format(data)) 第一次编…

传统的老程序员转向人工智能需要准备好这三件事情,你知道吗?

前言 人类文明的进步有时候快的吓人,在我们父辈上街买菜还是以一毛为计量买菜的时代,其实过去了也没有多长时间。现在买菜接近10块为准了,正常在集市上喊着怎么卖?摊主喊着三斤,包含的意思是10块钱三斤。相隔这么多年…

MyEclipse中properties文件中文乱码(Unicode字符)解决办法

程序代码园发文地址:MyEclipse中properties文件中文乱码(Unicode字符)解决办法-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,MyEclipse中properties文件中文乱码(Unicode字符)解决办法htt…

TMC5160步进电机驱动芯片

TMC5160步进电机驱动芯片 特点和优势静止态自动降电流stealthChop2 & spreadCycle 驱动stealthChop2 & spreadCycle 驱动1.7 stallGuard2 – 机械负载传感1.8 coolStep –负载自适应电流控制1.9 dcStep –负载相关速度控制1.10 编码器接口 TMC5160工作模式模式 1&#…

【Pytorch】深入Pytorch模型的训练、log、可视化

文章目录 模型训练的模板综合案例-Pytorch 官网demo优化记录日志解析日志增加tensorboard数据记录保存训练曲线模型参数可视化增加wandb数据记录模型训练的模板 综合案例-Pytorch 官网demo pytorch 官网tutorial-quickstart https://blog.csdn.net/weixin_39107270/article/de…

Day30 登录界面设计

​ 本章节,实现了登录界面窗口设计 一.准备登录界面图片素材(透明背景图片) 把准备好的图片放在 Images 文件夹下面,格式分别是 .png和 .icoico 图片,右键属性,生成操作选 内容 png 图片,右键属性,生成操作选 资源 选中 login.png图片鼠标右键,选择属性。生成的操作选…

[学习笔记]知乎文章-PyTorch的Transformer

参考资料: PyTorch的Transformer register_buffer的作用是:登记成员变量,它会自动成为模型中的参数,随着模型移动(gpu/cpu)而移动,但是不会随着梯度进行更新。 参考资料:【Torch API…

Vue3-Vite-ts 前端生成拓扑图vis,复制即用

完整代码&#xff0c;复制即可用&#xff0c;样式自调 试过 jointjs dagre-d3 vis&#xff0c;好用一点&#xff0c;可添加同层的双向箭头 方法1&#xff1a;Vis.js npm install vis-network <template><div id"mynetwork" class"myChart" :st…

C++11:列表初始化 初始化列表initializer_list

前言 2003年C标准委员会曾经提交了一份技术勘误表&#xff08;简称TC1&#xff09;&#xff0c;使得C03这个名字取代了C98成为了C11前最新的C标准名称。不过由于C03主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准…

HiveQL性能调优-概览

一、铺垫 1、HiveQL 在执行时会转化为各种计算引擎的能够运行的算子&#xff0c;这里以mr引擎为切入点&#xff0c;要想让HiveQL 的效率更高&#xff0c;就要理解HiveQL 是如何转化为MapReduce任务的 2、hive是基于hadoop的&#xff0c;分布式引擎采用mr、spark、tze&#x…

游戏《酒店业领袖》

为快餐连锁店麦当劳&#xff0c;我们创建了一款名为“好客领袖”的游戏。麦当劳的员工可以在网站上注册&#xff0c;并测试自己是否扮演酒店领导的角色&#xff0c;在餐厅可能出现的各种情况下快速做出决定。奖品等待着那些在比赛中表现最好的人。 对于该项目&#xff0c;我们&…

反转链表的三种方法--面试必考(图例超详细解析,小白一看就会!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&…

在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办

1.先查看Python版本 首先我们先去打开终端就是先widr再输入cmd 然后进去在输入Python -V要注意大小写 我的版本是3.9.7版本但是我使用的PyCharm 是 2021.1.1 x64版本没有办法主动去识别因为这个版太低了你的Python版本很高所以无法识别 2.解决方法 只需要把你的Python现版…

矩阵链相乘(动态规划法)

问题分析 矩阵链相乘问题是一个经典的动态规划问题。给定一系列矩阵&#xff0c;目标是找到一种最优的乘法顺序&#xff0c;使得所有矩阵相乘所需的标量乘法次数最少。矩阵链相乘问题的关键在于利用动态规划来避免重复计算子问题。 算法设计 定义子问题&#xff1a;设 &…

作业6.6

练习1:用预处理指令#define声明一个常数&#xff0c;用于表明1年有多少秒?(不需要考虑润年) #define SECONDS_PER_YEAR (365 * 24 * 60 * 60) 练习2:如何判断一个数是unsigned格式 如果一个数是unsigned类型的&#xff0c;那么它总是大于等于0。因此&#xff0c;可以通过判断一…

Kruskal算法求最小生成树

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define MAX 100 #define NO INT_MAX//NO表示没有边&#xff0c;相当于INFtypedef struct Graph {int arcnum;int vexnum;char vextex[MAX][20];int martrix[MAX][MA…

使用node将页面转为pdf?(puppeteer实现)

本文章适合win系统下实验&#xff08;linux&#xff0c;mac可能会出现些莫名其妙的bug我也不会解决&#xff09; 具体过程 首先了解什么时无头浏览器启动无头浏览器打开指定的url页面设置导出pdf格式开始转化完整基础代码 首先了解什么时无头浏览器 没有界面的浏览器下载pupp…

SLC Flash SD芯片:高性能存储的优选

SLC Flash SD芯片是一种采用单阶存储单元&#xff08;SingleLevel Cell&#xff0c;SLC&#xff09;技术的Secure Digital&#xff08;SD&#xff09;存储卡。SLC技术以其快速的传输速度、低功耗和较长的存储单元寿命而闻名。 MK米客方德 SLC Flash的优势 1. 快速的传输速度&a…

如何确定一段文字的语言?(语种识别模型推荐)

个人用下来&#xff0c;感觉fasttext很好用&#xff0c;相对比较准确。 https://pypi.org/project/fasttext-langdetect/