如何在Python中对列表中的二进制值执行变异操作

发布于 2025-01-20 06:11:31 字数 277 浏览 3 评论 0原文

假设我有下面给出的染色体。我想对其进行突变操作。 我想将两个基因从0更改为零。但是我必须随机选择这两个基因。如何在染色体上执行它:1?

Chromosome:1=['0001010010011001111100111101101110111001011011111010011011000110100010100011011100011000101100111011110000011101100000000010110001010100011100001001001110101111']

Suppose I have a chromosome given below. I want to perform a mutation operation on it.
I want to change two genes from 0 to 1 or 1 to zero. But I have to select these two genes at random. How can i perform it on chromosome:1?

Chromosome:1=['0001010010011001111100111101101110111001011011111010011011000110100010100011011100011000101100111011110000011101100000000010110001010100011100001001001110101111']

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

-柠檬树下少年和吉他 2025-01-27 06:11:31

使用示例随机标准库的包装>参数k = 2以选择 unique 随机位置绳子,然后进行一些切片。

chromo = '0001010010011001111100111101101110111001011011111010011011000110100010100011011100011000101100111011110000011101100000000010110001010100011100001001001110101111'

import random

chromo_indexed = list(enumerate(chromo))

# get random pair
ch1, ch2 = random.sample(chromo_indexed, k=2)
while ch1[1] == ch2[1]:
    ch1, ch2 = random.sample(chromo_indexed, k=2)

# replace
g1 = '1' if ch1[1] == '0' else '0'
g2 = '1' if ch2[1] == '0' else '0'
#
new_chromo = chromo[:ch1[0]] + g1 + chromo[ch1[0]+1:]
new_chromo = new_chromo[:ch2[0]] + g2 + new_chromo[ch2[0]+1:]


print(f'{ch1} -> {g1}')
# (46, '1') -> 0
print(f'{ch2} -> {g2}')
# (60, '0') -> 1
print(new_chromo)

Use sample from the random package of the standard library with parameter k=2 to select unique random positions in the string, then make some slice.

chromo = '0001010010011001111100111101101110111001011011111010011011000110100010100011011100011000101100111011110000011101100000000010110001010100011100001001001110101111'

import random

chromo_indexed = list(enumerate(chromo))

# get random pair
ch1, ch2 = random.sample(chromo_indexed, k=2)
while ch1[1] == ch2[1]:
    ch1, ch2 = random.sample(chromo_indexed, k=2)

# replace
g1 = '1' if ch1[1] == '0' else '0'
g2 = '1' if ch2[1] == '0' else '0'
#
new_chromo = chromo[:ch1[0]] + g1 + chromo[ch1[0]+1:]
new_chromo = new_chromo[:ch2[0]] + g2 + new_chromo[ch2[0]+1:]


print(f'{ch1} -> {g1}')
# (46, '1') -> 0
print(f'{ch2} -> {g2}')
# (60, '0') -> 1
print(new_chromo)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文