Python 如果此运算符低于阈值,如何使其发生

Python 如果此运算符低于阈值,如何使其发生,python,genetic-algorithm,crossover,Python,Genetic Algorithm,Crossover,我对python有点陌生。我正在努力学习如何修改函数。在本例中,我在网上找到了下面的代码。我想学习如何使它只在概率=0.9的情况下工作。也就是说,如果我有两个像('1001001010001','1000000100')这样的二进制字符串,我只想以概率0.9交换它们的一半 这将是概率为0.9的代码将原始字符串分成两半,如('1 | 2','3 | 4'),并像[1 | 4,3 | 2]那样交换它们 这是我目前掌握的代码: def crossover(i1, i2): assert len

我对python有点陌生。我正在努力学习如何修改函数。在本例中,我在网上找到了下面的代码。我想学习如何使它只在概率=0.9的情况下工作。也就是说,如果我有两个像('1001001010001','1000000100')这样的二进制字符串,我只想以概率0.9交换它们的一半

这将是概率为0.9的代码将原始字符串分成两半,如('1 | 2','3 | 4'),并像[1 | 4,3 | 2]那样交换它们

这是我目前掌握的代码:

def crossover(i1, i2):
    assert len(i1) == len(i2)
    n = len(i1); split_index = random.randint(0+1, n-1)
    return '{}{}'.format(i1[:split_index], i2[split_index:]), \
           '{}{}'.format(i1[split_index:], i2[:split_index])

## in: ('00010', '11000') out: ('00|000', '010|11') with split at 2.
我就是这么想的。它看起来一点也不优雅,尽管它能工作。了解其他人会怎么做有什么帮助吗?非常感谢你的帮助

def crossover(i1, i2, threshold):
    assert len(i1) == len(i2)
    n = len(i1); split_index = random.randint(0+1, n-1)
    return '{}{}'.format(i1[:split_index], i2[split_index:]), \
           '{}{}'.format(i1[split_index:], i2[:split_index]) \
           if random.uniform(0, 1) <= threshold \
           else '{}{}'.format(i1[:split_index], i1[split_index:]), \
           '{}{}'.format(i2[split_index:], i2[:split_index]) \

## in: ('00010', '11000') out: ('00|000', '010|11') with split at 2.
def交叉(i1、i2、阈值):
断言len(i1)=len(i2)
n=len(i1);split_index=random.randint(0+1,n-1)
返回“{}{}”。格式(i1[:split_index],i2[split_index:])\
{}{}格式(i1[split_index:],i2[:split_index])\

如果random.uniform(0,1)您的逻辑很好,但是为什么要使用
格式
来进行简单的连接呢? 另外,在非交换的情况下,为什么要拆分每个字符串,然后恢复其原始状态

if random.uniform(0, 1) <= threshold:
    return (i1[:split_index] + i2[split_index:],
            i1[split_index:] + i2[:split_index])
else:
    return (i1, i2)

if random.uniform(0,1)关于格式的问题是因为我自己在学习,我试图用我找到的代码学习,并用它改变我自己论文的内容。因此,我们不太清楚
格式
的作用。关于第二个问题,我这样做是为了让函数只在90%的时间内穿过字符串。我不知道如何以不同的方式执行概率。我强烈建议您遵循简单的课程,而不是使用“我发现的代码”。网上有许多免费课程和可比材料。