具有概率的简单突变
Simple Mutation with a Probability
根据下面的代码部分,我正在尝试实现一个自动和随机的变异过程。
data = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
data[random.randint(0,len(data)-1)]=random.randrange(0,1)
print(data)
该代码是我发现的其他一些帖子的改编版,尽管它每次都会用 0 或 1 随机改变一个值。我要求这只以一定的概率发生(例如 0.05 的机会)突变)而不是总是得到保证。
此外,通常 0 会被 0 替换,因此输出没有变化,所以我想将其限制为 0 只会变异为 1 而 1 会变异为一个 0.
非常感谢您帮助解决这两个问题。
继续
- 以选定的概率改变任何值
- 随机选择位置
- 选择位置后,在
0
和1
之间切换
def mutate(data, proba=0.05):
if random.random() < proba:
data[random.randrange(len(data))] ^= 1
if __name__ == '__main__':
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
for i in range(10):
mutate(data)
print(data)
您可以进行以下操作:
对于data
中的每个元素,仅当random()
函数生成的随机值小于定义的变异概率时才对其进行变异(1 - val
)。
例如:
import random
mutation_prob = 0.05
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
mutated_data = [1 - x if random.random() < mutation_prob else x for x in data]
如果要将数据作为一个整体来决定突变,你可以这样做:
mutation_prob = 0.05
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
do_mutation = random.random() < mutation_prob
mutated_data = [1 - x if do_mutation else x for x in data]
import random
def changeData(data):
seed = random.randint(0,1000)
# probability of 0.05 (50 / 1000)
if seed <= 50:
indexToChange = random.randint(0,len(data)-1)
# change 0 with 1 and viceversa
data[indexToChange] = 1 if data[indexToChange] == 0 else 0
if __name__== '__main__':
data = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
for i in range(0,100):
changeData(data)
print(data)
根据下面的代码部分,我正在尝试实现一个自动和随机的变异过程。
data = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
data[random.randint(0,len(data)-1)]=random.randrange(0,1)
print(data)
该代码是我发现的其他一些帖子的改编版,尽管它每次都会用 0 或 1 随机改变一个值。我要求这只以一定的概率发生(例如 0.05 的机会)突变)而不是总是得到保证。
此外,通常 0 会被 0 替换,因此输出没有变化,所以我想将其限制为 0 只会变异为 1 而 1 会变异为一个 0.
非常感谢您帮助解决这两个问题。
继续
- 以选定的概率改变任何值
- 随机选择位置
- 选择位置后,在
0
和1
之间切换
def mutate(data, proba=0.05):
if random.random() < proba:
data[random.randrange(len(data))] ^= 1
if __name__ == '__main__':
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
for i in range(10):
mutate(data)
print(data)
您可以进行以下操作:
对于data
中的每个元素,仅当random()
函数生成的随机值小于定义的变异概率时才对其进行变异(1 - val
)。
例如:
import random
mutation_prob = 0.05
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
mutated_data = [1 - x if random.random() < mutation_prob else x for x in data]
如果要将数据作为一个整体来决定突变,你可以这样做:
mutation_prob = 0.05
data = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1]
do_mutation = random.random() < mutation_prob
mutated_data = [1 - x if do_mutation else x for x in data]
import random
def changeData(data):
seed = random.randint(0,1000)
# probability of 0.05 (50 / 1000)
if seed <= 50:
indexToChange = random.randint(0,len(data)-1)
# change 0 with 1 and viceversa
data[indexToChange] = 1 if data[indexToChange] == 0 else 0
if __name__== '__main__':
data = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
for i in range(0,100):
changeData(data)
print(data)