基于统一顺序的交叉实现

2024-09-28 01:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现基于统一顺序的交叉,应该使用洗牌逻辑,如:

首字母:

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])

Tags: 对象元素sizelen顺序random逻辑交叉

热门问题