我对这条蟒蛇有点陌生。我正在尝试学习如何修改函数。在这种情况下,我在网上找到了下面的代码。我想学习如何使它仅在概率 = 0.9 的情况下工作。也就是说,如果我有两个像 ('1001001010001','100000001100') 这样的二进制字符串,我只想以 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.