首页 > 解决方案 > 基于统一顺序的交叉实现

问题描述

我正在尝试实现基于统一顺序的交叉,它应该使用随机播放逻辑,例如:

最初的:

a =[5, 1, 4, 6, 7, 8, 2, 3]
b =[6, 7, 5, 2, 8, 3, 4, 1]

随机选择不再变化的位置。剩余的位置用缺失的元素填充,这些元素按照它们在另一个父元素中出现的顺序复制

a' =[ , 7,  , 2, 8,  , , 1]
b' =[ , 1,  , 6, 7,  , , 3]

从第二个交叉站点开始,在来自替代父代(其值在初始阶段被后代复制的父代除外)的后代中尚不存在的值按它们出现的顺序输出:

a = [5, 7, 4, 2, 8, 6, 3, 1]
b = [5, 1, 2, 6, 7, 8, 4, 3] 

我试图实现这一点,但我的代码无法保存固定索引。

交叉.py

import random
def uniformCrossover(indA, indB):
    """
    Your Uniform Crossover Implementation
    """
    crossprob = 0.1
    size = min(len(indA), len(indB))
    for i in range(size):
        if random.random() < crossprob:
            indA[i], indB[i] = indB[i], indA[i]
        return indA, indB

a,b = uniformCrossover([5, 1, 4, 6, 7, 8, 2, 3], [6, 7, 5, 2, 8, 3, 4, 1])

标签: pythonpython-3.xlist

解决方案


推荐阅读