DEAP中具有多个权重的健身函数

问题描述 投票:0回答:1

我正在学习使用Python DEAP模块,并且创建了最小化适应度函数和评估函数。我用于健身功能的代码如下:

ct.create("FitnessFunc", base.Fitness, weights=(-0.0001, -100000.0))

注意重量差异很大。这是因为the DEAP documentation for Fitness说:

权重也可以用来改变每个目标彼此之间的重要性。这意味着权重可以是任何实数,并且仅使用符号来确定是否进行了最大化或最小化。

对我来说,这是您可以通过增大权重来使一个权重优先。


我正在使用algorithms.eaSimple(带有HallofFame)进行进化,并且使用tools.selTournament选择了人口中最好的个体。

评估功能返回abs(sum(input)), len(input)。运行后,我从HallOfFame中获取值并进行评估,但是,输出类似于以下内容(行末的数字由我添加):

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(390.50576340000003, 14)    4
(417.37616340000005, 4)     5

让我感到困惑的是,我认为文档指出,较大的第二权重意味着len(input)会产生较大的影响,并导致类似以下的输出:

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(417.37616340000005, 4)     5
(390.50576340000003, 14)    4

注意,第4行和第5行已交换。这是因为第4行的权重远大于第5行的权重。

看来,首先实际上是根据第一个元素评估适应性,然后仅在第一个元素之间存在联系时才考虑第二个元素。如果是这种情况,那么设置除-1或+1以外的权重的目的是什么?

python machine-learning deap
1个回答
2
投票

[从Pareto-optimality的角度来看,无论权重如何,A=(390.50576340000003, 14)B=(417.37616340000005, 4)两种解决方案都不优于另一种;总是f1(A) > f1(B)f2(A) < f2(B),因此两者都不占主导地位(source):

Source: Wikipedia

[如果它们位于相同的边界,则现在可以基于第二个指标来选择获胜者:边界中每个解决方案周围的解决方案密度,现在考虑了权重(拥挤距离)。实际上,如果您选择合适的运算符,例如selNSGA2。您正在使用的selNSGA2运算符仅基于第一个目标进行选择:

selTournament

如果仍要使用它,则可以考虑更新评估函数,以返回目标加权总和的单个输出。但是,在非凸目标空间的情况下,此方法将失败(有关详细信息,请参见第12页selTournament)。

def selTournament(individuals, k, tournsize, fit_attr="fitness"): chosen = [] for i in xrange(k): aspirants = selRandom(individuals, tournsize) chosen.append(max(aspirants, key=attrgetter(fit_attr))) return chosen

© www.soinside.com 2019 - 2024. All rights reserved.