比较两种遗传算法


9

我有两种遗传算法的实现方式,它们应该表现相同。但是,由于无法解决的技术限制,在给定相同输入的情况下,它们的输出并不完全相同。

我仍然想证明没有明显的性能差异。

对于两种算法,我使用相同的配置进行了20次运行,并使用了不同的初始随机数种子。对于每次运行一代,记录总体中最佳个体最小误差 适用度该算法采用了精英保留机制,因此最佳个人的适合度单调下降。一次运行包含1000代,因此每次运行我都有1000个值。我无法获得更多数据,因为计算非常昂贵。

我应该使用哪种测试?一种简单的方法可能是只比较最后几代中的错误(再次,我将在此处使用哪种测试)?但人们可能还会考虑比较一般的收敛行为。


正如一个澄清:遗传算法是否不是随机搜索解决方案的情况,因此任何运行的初始片段都不太可能产生任何有价值的解决方案?另外,“总体误差最小”到底是什么意思?如果您是指一次运行中1000个值中的已知真实值与任何解决方案之间的最小差,那么这不是对运行结果的偏见吗?毕竟,实际上,您将在每次运行中接受最终解决方案,并拒绝之前的所有解决方案,对吗?
ub

我所说的错误基本上是1 / fitness,所以我说的是一代人中最好的人的价值。我记录了每一代最优秀的人的健身价值。因此,我有1000 * 20 * 2个数字,每个数字对应于特定跑步的特定世代中最佳个人的“适应性”。
nisc

我想最初的问题是不恰当的,我已经添加了一些说明..
nisc

Answers:


9

测试随机算法可能非常棘手!

我从事系统生物学工作,可以使用许多随机模拟器来模拟模型。测试这些模拟器非常棘手,因为来自单个模型的任何两个实现通常都将不同。

dsmts中,我们已经(解析地)计算了特定模型的期望值和方差。然后,我们执行假设检验,以确定模拟器是否不同于真实情况。在第3节userguide给出了细节。本质上,我们对平均值进行t检验,对方差进行卡方检验。

在您的情况下,您正在比较两个模拟器,因此您应该只使用两次采样的t检验。


我将如何使用各代人的信息?
nisc

最简单的方法是进行多次测试,即每一代进行测试,然后使用Bonferroni或fdr校正。
csgillespie 2010年

在每一代进行比较时,我都必须以1/1000 * 0.05的显着性水平进行测试。难道不是很苛刻吗?
nisc

没错,但是您还要进行大量测试-不能拥有所有内容;)您可以对p值进行排名,将其用作指导,以查看可能发生错误的地方。
csgillespie 2010年

1
除了使用bonferroni校正外,您始终可以使用功能更强大的bonferroni holm。看到这里我anyswer:stats.stackexchange.com/questions/575/...
亨里克·

4

也许您可以测量同一算法的两次运行之间的平均差异与不同算法的两次运行之间的平均差异。不能解决如何测量差异的问题,但可能是更容易解决的问题。而且时间序列的各个值将输入到差异计算中,而不必视为要相互评估的单个数据点(我也不认为第n步中的特定差异就是您真正想要的发表声明)。

更新 有关详细信息-除了最终错误,您还对时间序列的哪些功能感兴趣?我想您实际上要解决三个不同的问题:

  1. 对您而言,什么构成相似性,即当您说您不相信这两种方法是不同的时,您是什么意思?
  2. 您如何量化-可以在1之后回答
  3. 如何测试两种方法之间的显着差异?

我在第一篇文章中所说的只是(1)的答案可能没有考虑1000代中每个个体的个体差异。而且我建议您为每个时间序列或至少在时间序列之间的相似度得出一个标量值。只有到那时,您才能了解实际的统计问题(我对这三点都不了解,但是建议我在每个元素都具有标量值的情况下,在刚刚问过的类似问题中使用配对t检验)。


听起来很合理,还有其他细节吗?
nisc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.