def selYourSelectionRoutine(individuals, k):
"""Select the *k* best individuals among the input *individuals*.
:param individuals: A list of individuals to select from.
:param k: The number of individuals to select.
:returns: A list containing the k best individuals.
"""
return sorted(individuals, key=attrgetter("fitness"), reverse=True)[:k]
from scipy.spatial import distance_matrix
def sharing(distance, sigma, alpha):
res = 0
if distance<sigma:
res += 1 - (distance/sigma)**alpha
return res
def shared_fitness(individual, population, sigma, alpha):
num = fitness(individual)[0]
dists = distance_matrix([individual], population)[0]
tmp = [sharing(d, sigma, alpha) for d in dists]
den = sum(tmp)
return num/den,
编写你自己的选择程序。 默认例程在deap/tools/selection.py处,可以作为入门指南
例如:
然后按照他们的处方与其他deap一起使用:
^{pr2}$我有一个更像是基于相对适合度的概率选择,我没有这个权限,它只有大约10-15行python代码,所以它可以完成,而且不太难。在
我不知道这个特定的选择例程的任何实现都是公开的。在
要进行健身共享,您必须定义自己的共享健身函数,该函数取决于整个人群。在
假设已经定义了
fitness
函数,可以执行以下操作:这种共享的健身方式将有利于邻居较少的个人。
sigma
是邻居惩罚个体共享适应度的半径。如果sigma
更大,那么你的利基将离你更远,你有可能错过一个局部最大值。如果sigma
较小,则需要更大的填充,并且您的算法将需要更长的运行时间。alpha
表示对邻近邻居的惩罚力度有多大。在这种共享健身可以像常规健身一样注册到工具箱中。在
^{pr2}$之后,您可以使用一个标准算法,如$\mu+\lambda$,它将根据后代的适应度来选择后代,以获得小生境。在
相关问题 更多 >
编程相关推荐