一个二进制字符串上的突变(遗传算法)-python-3.x
问题描述:
我正在使用python-3.x,并且我正尝试在一个二进制字符串上进行突变,这个二进制字符串将从0翻转为1的元素或通过随机1比0,我尝试了一些方法,但没有工作,我不知道问题出在哪里:一个二进制字符串上的突变(遗传算法)-python-3.x
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 XOR preference: bitwise operator vs. boolean operators
+0
伟大的想法谢谢, – azeez
用'类型是什么(X [1])(不是X [1])'...? –
x [i] – azeez
的值但是你为什么要'type(x [i])(...)'? –