我需要为正值 0→∞ 创建一个归一化的适应度函数。我想进行实验,从(输入→输出)开始,例如 0→0、1→1、∞→0。我的数学有点弱,如果你不知道的话,这真的不难。
因此,函数的输出应该严重偏向 0,我需要能够更改产生最大输出 1 的输入值。
我可以制作一个线性函数,类似于三角分布,但是我需要设置一个最大值,在该最大值处输入可以被区分(在该值之上,一切看起来都一样。)我还可以将两个简单的表达式与类似的东西合并在一起:
from matplotlib import pyplot as plt
import numpy as np
from math import exp
def frankenfunc(x, mu):
longtail = lambda x, mu: 1 / exp((x - mu))
shortail = lambda x, mu: pow(x / mu, 2)
if x < mu:
return shortail(x, mu)
else:
return longtail(x, mu)
x = np.linspace(0, 10, 300)
y = [frankenfunc(i, 1) for i in x]
plt.plot(x, y)
plt.show()
这没关系,应该可以工作,特别是因为它返回的实际值并不重要,因为它们将用于二元锦标赛。仍然很难看,如果可能的话,我希望灵活地使用 scipy 或类似的统计分布。