随机翻转二进制列表中的一位
Randomly flip one bit in a binary list
我正在使用 python-3.x,我正在尝试对二进制字符串进行突变,该字符串将随机翻转元素的一位,从 0 到 1 或 1 到 0,我尝试了一些方法但没有用我不知道问题出在哪里:
x=[0, 0, 0, 0, 0]
def mutation (x, muta):
for i in range(len(x)):
if random.random() < muta:
x[i] = type(x[i])(not x[i])
return x,
print (x)
例如输出应该是 x=[0, 0, 0, 1, 0] 或 x=[1, 0, 0, 0, 0] 等等....
另外,我试过这个:
MUTATION_RATE = 0.5
CHROMO_LEN = 6
def mutate(x):
x = ""
for i in range(CHROMO_LEN):
if (random.random() < MUTATION_RATE):
if (x[i] == 1):
x += 0
else:
x += 1
else:
x += x[i]
return x
print(x)
如有任何建议或建议,我们将不胜感激
你确定你在打印之前调用函数吗x
:
def mutation(x):
# your code without the trailing comma
mutation(x)
print(x)
在 Python 中,创建新列表通常比修改旧列表更可取。我会这样写你的第一个函数(我将整数转换为布尔值,因为你只是翻转它们:
x = [False, False, False, False]
def mutation(x, muta):
return [not e if random.random() < muta else e
for e in x]
通过再次分配给它更改 x
:
x = mutation(x, .5)
如果您删除 return
:
后的逗号,您的原始功能将正常运行
def mutation(x, muta):
for i in range(len(x)):
if random.random() < muta:
x[i] = type(x[i])(not x[i])
return x
x = [False, False, False, False]
mutation(x, .5)
Out[8]: [False, False, True, False]
mutation(x, .5)
Out[9]: [True, True, True, False]
您还可以使用 python 的 XOR operator 来翻转位,这将在“1”和“0”之间翻转:
x[1] = x[1] ^ 1
另请参阅:
我正在使用 python-3.x,我正在尝试对二进制字符串进行突变,该字符串将随机翻转元素的一位,从 0 到 1 或 1 到 0,我尝试了一些方法但没有用我不知道问题出在哪里:
x=[0, 0, 0, 0, 0]
def mutation (x, muta):
for i in range(len(x)):
if random.random() < muta:
x[i] = type(x[i])(not x[i])
return x,
print (x)
例如输出应该是 x=[0, 0, 0, 1, 0] 或 x=[1, 0, 0, 0, 0] 等等....
另外,我试过这个:
MUTATION_RATE = 0.5
CHROMO_LEN = 6
def mutate(x):
x = ""
for i in range(CHROMO_LEN):
if (random.random() < MUTATION_RATE):
if (x[i] == 1):
x += 0
else:
x += 1
else:
x += x[i]
return x
print(x)
如有任何建议或建议,我们将不胜感激
你确定你在打印之前调用函数吗x
:
def mutation(x):
# your code without the trailing comma
mutation(x)
print(x)
在 Python 中,创建新列表通常比修改旧列表更可取。我会这样写你的第一个函数(我将整数转换为布尔值,因为你只是翻转它们:
x = [False, False, False, False]
def mutation(x, muta):
return [not e if random.random() < muta else e
for e in x]
通过再次分配给它更改 x
:
x = mutation(x, .5)
如果您删除 return
:
def mutation(x, muta):
for i in range(len(x)):
if random.random() < muta:
x[i] = type(x[i])(not x[i])
return x
x = [False, False, False, False]
mutation(x, .5)
Out[8]: [False, False, True, False]
mutation(x, .5)
Out[9]: [True, True, True, False]
您还可以使用 python 的 XOR operator 来翻转位,这将在“1”和“0”之间翻转:
x[1] = x[1] ^ 1
另请参阅: