algorithm - 遗传算法

标签 algorithm mathematical-optimization genetic-algorithm nonlinear-functions

我有一个简单的遗传算法,它必须达到陷阱函数的最佳点,定义如下:

def R(x):
    n = len(x)
    m = int(math.ceil(n/3))
    s = sum(x)

    if (s==n):
        return 2*n*n,
    elif (s<(n-m)):
        return n*s-B(x),
    else:
        return 0,

def B(x):
    i = 0
    n = len(x)
    mbs = 0

    # loops over all the variables
    while (i<n):

        k = i
        while (k<n and x[k]==0):
            k = k + 1

        #print("k="+str(k))

        j = k
        while (j<n and x[j]==1):
            j = j + 1

        if (j-k>mbs):
            mbs = j-k

        #print("j="+str(j))

        i = j

    return mbs

我考虑过大幅增加pop的大小,并“希望”使用random.seed()生成第一代中的最佳个体,然后传播它。为此,我只会考虑一个具有“大”锦标赛窗口的锦标赛选择。

此解决方案仅适用于 5 和 10 个属性,但不适用于 30 个属性。关键是我不知道如何解决 30 个属性的情况。 希望有人能够帮助我。

最佳答案

I can use only a simple GA with some elitism...

鉴于此限制,您可以在不使用精英主义的情况下增加人口规模,但它不会很好地扩展。

zegkljan 使用新颖性搜索的想法似乎更好,并且可以在不改变搜索引擎的情况下遵循。

只需更改适应度函数:

score(i) = (1 − ρ) · fit(i) + ρ · nov(i)

fit(i) 是标准化的 R 函数:

fit(i) = (R(i) - Rmin) / (Rmax - Rmin)

nov(i) 是标准化的新颖性函数(您必须保留已经见过的个体的文件,但这不需要对“引擎”进行修改)。

ρ ∈ [0,1] 控制适应性和新颖性的相对重要性。

有关此技术的更多详细信息:When Novelty is not Enough (朱塞佩·库库、福斯蒂诺·戈麦斯)

关于algorithm - 遗传算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36023259/

相关文章:

algorithm - 从现有数据生成样本数据 - 算法?

algorithm - 0 1 矩阵平衡

genetic-algorithm - 为什么需要遗传算法中的适应度缩放?

javascript - 在javascript中堆叠值

math - 检测三角形与三角形相交的最有效方法是什么?

python - 使用曲线拟合的 Scipy 奇怪结果

python - scipy.optimize.leastsq 使用 NaN 调用目标函数

algorithm - 在 C# 中为 0-1 背包编写模拟退火算法

c++ - 我怎样才能避免编译器错误:std::transform?

algorithm - 从 N 个数中找出最大和第二大的数