0

正の値 0→∞ の正規化されたフィットネス関数を作成する必要があります。0→0、1→1、∞→0のように(入力→出力)から実験してみたいと思います。私の数学は少し苦手で、これが難しいことではないことを期待してください。

そのため、関数の出力は 0 に大きく偏っており、最大出力 1 を生成する入力値を変更できる必要があります。

三角分布のような線形関数を作成できますが、入力が区別される最大値を設定する必要があります (その値を超えると、すべてが同じように見えます)。2 つの単純な式を次のようなものとマージすることもできます。 :

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 などの統計分布を柔軟に使用したいと思います。

4

1 に答える 1

0

では、この形式の pdf で確率分散が必要ですか? 次に、次のことを行う必要があります。

または、scipy.stats に実装されているディストリビューションのリストを参照してください。あなたがスケッチしているこの一般的な形のpdf形状がいくつかあります。

于 2016-08-29T09:34:53.517 に答える