Python 具有概率的简单变异
根据下面的代码部分,我正在尝试实现一个自动和随机的变异过程Python 具有概率的简单变异,python,random,probability,genetic-algorithm,mutate,Python,Random,Probability,Genetic Algorithm,Mutate,根据下面的代码部分,我正在尝试实现一个自动和随机的变异过程 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替换,因此输出不会发生变化,因此我想将
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之间切换 恢复 以选择的概率对任何值进行变异 随机选择职位 选择位置后,在0和1之间切换
您可以执行以下操作: 对于数据中的每个元素,仅当随机函数生成的随机值小于定义的变异概率时,才将其变异为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]
您可以执行以下操作: 对于数据中的每个元素,仅当随机函数生成的随机值小于定义的变异概率时,才将其变异为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]
请用您尝试过的代码更新您的问题。天哪。。。您不仅在应该使用randrange的地方使用了randint,而且在应该使用randint的时候也使用了randrange。你总是写一个零。此外,通常0被0替换,因此输出没有变化,所以我想限制它,使0只会变为1,而1会变为0。大约一半的时间,是吗?也许你可以想出一个规则,告诉你用什么概率来设置值,这就解释了设置值实际上不会翻转它的可能性。不管怎样,你有没有试着找到你想要的东西?或者你可以想出一种方法,例如,将0到1之间的一个随机数转换成某件事发生的X概率?提示:概率的最大可能值是什么?“概率的最小可能值是多少?”superbrain感谢你让我注意到这一点。一般来说,我对编码相当陌生,即使在文档的帮助下,我的理解也相当基本,所以我想在尝试改编其他代码时,我把它们混在了一起。我会更深入地研究它并牢记在心。干杯请用您尝试过的代码更新您的问题。天哪。。。您不仅在应该使用randrange的地方使用了randint,而且在应该使用randint的时候也使用了randrange。你总是写一个零。此外,通常0被0替换,因此输出没有变化,所以我想限制它,使0只会变为1,而1会变为0。大约一半的时间,是吗?也许你可以想出一个规则,告诉你用什么概率来设置值,这就解释了设置值实际上不会翻转它的可能性。不管怎样,你有没有试着找到你想要的东西?或者你可以想出一种方法,例如,将0到1之间的一个随机数转换成某件事发生的X概率?提示:概率的最大可能值是什么?“概率的最小可能值是多少?”superbrain感谢你让我注意到这一点。一般来说,我对编码相当陌生,即使在文档的帮助下,我的理解也相当基本,所以我想在尝试改编其他代码时,我把它们混在了一起。我会更深入地研究它并牢记在心。干杯在这里,每个位置都有5%的几率变异,而不仅仅是一个随机位置。不过,这方面的问题并不完全清楚。这可能正是他们想要的。@Wups我想说,如果这是他们想要的,他们就不会麻烦地选择一个随机索引来更改…@Wups更改了我对这两种情况的解决方案。谢谢你的反馈!我感谢您提供并解释这两个选项,@Wups这是一个非常好的观点-感谢您提出它!第一种方法与我所追求的差不多,因为我只想单独更改索引,而不是整个数据集。在这里,每个位置都有5%的机会发生变异,而不仅仅是一个随机位置。不过,这方面的问题并不完全清楚。这可能正是他们想要的。@Wups我想说,如果这是他们想要的,他们就不会麻烦地选择一个随机索引来更改…@Wups更改了我对bo的解决方案
例。谢谢你的反馈!我感谢您提供并解释这两个选项,@Wups这是一个非常好的观点-感谢您提出它!第一种方法就是我想要的,因为我只想单独更改索引,而不是整个数据集。谢谢你的回答!你能解释一下range10的功能吗?@Gfizz这只是为了演示,展示10种可能的变异尝试谢谢你的回答!你能解释一下range10的功能吗?@Gfizz这只是为了演示,展示10种可能的突变尝试