Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将最相似的rand生成的字符串转换为主字符串,通过几代对随机字符串进行变异以获得原始字符串?_Python_Loops_Optimization_Random_Probability - Fatal编程技术网

Python 如何将最相似的rand生成的字符串转换为主字符串,通过几代对随机字符串进行变异以获得原始字符串?

Python 如何将最相似的rand生成的字符串转换为主字符串,通过几代对随机字符串进行变异以获得原始字符串?,python,loops,optimization,random,probability,Python,Loops,Optimization,Random,Probability,我已经生成了N个长度为L的随机序列,字母A,C,G,T(例如N=10,L=21),并创建了一个函数来计算两个21个字母单词之间的距离 正如你所看到的,这个输出包括主基因组和所述基因组的突变,以及突变基因组与原始基因组的不同程度(有多少个字符相似) 问题是,我希望能够选择与21个字母的主序列gatacaattacagatacca有最小距离的随机序列。另一种观点是寻找与主序列重叠最大的随机序列。这是这些随机序列适合度的度量,您可以选择适合度最高的随机序列。编写一个函数,用于测量随机21个字母序列和

我已经生成了N个长度为L的随机序列,字母A,C,G,T(例如N=10,L=21),并创建了一个函数来计算两个21个字母单词之间的距离

正如你所看到的,这个输出包括主基因组和所述基因组的突变,以及突变基因组与原始基因组的不同程度(有多少个字符相似)

问题是,我希望能够选择与21个字母的主序列gatacaattacagatacca有最小距离的随机序列。另一种观点是寻找与主序列重叠最大的随机序列。这是这些随机序列适合度的度量,您可以选择适合度最高的随机序列。编写一个函数,用于测量随机21个字母序列和主序列之间的重叠/适合度

在这一初始步骤之后,创建该最大适应度序列的10个后代副本,但通过使21个字母中的每一个随机转变为字母表中的随机字母(突变)具有一定的概率(例如1/100)来进化它们

在每一代中,从10个后代中选择适合度最高的一个,并在下一代中再次进化

然后我希望能够在G代中重复这一过程,直到原始主基因组通过进化实现——以及经过多少代——它应该是这样的:

master = list('AATTATGTACCGGGAGCTCCG')
mutation = list('GTATCACGATGTCATCATCAA')
nucleotides = ("A", "C", "G", "T")

def hamming_distance(mutation, x = 0):
    list = []
    if mutation != master:
        for i, nuc in enumerate(mutation):
            if nuc != master[i]:
                list.append(i)
        print(f'Mutated: {"".join(mutation)}, {len(mutation) - len(list)}, {x}')
        for num in list:
            y = random.choice(nucleotides)
            mutation[num] = y
        x += 1
        hamming_distance(mutation, x = x)
    elif mutation == master:
        print(f'Mutated: {"".join(mutation)}, {len(mutation) - len(list)}, {x}')
        print("Master sequence has been achieved")

print(f'Master:  {"".join(master)}')
hamming_distance(mutation)

Example output:

Master:  AATTATGTACCGGGAGCTCCG
Mutated: GTATCACGATGTCATCATCAA, 4, 0
Mutated: GGATCGGAAGACCACCCTCTG, 7, 1
Mutated: CTATCAGCAGAAGTTGCTCCG, 10, 2
Mutated: GCCTACGGAGTGGAAGCTCCG, 13, 3
Mutated: GCCTAGGCATGGGGAGCTCCG, 14, 4
Mutated: CTGTAGGAATCGGGAGCTCCG, 15, 5
Mutated: TGGTAAGCACCGGGAGCTCCG, 16, 6
Mutated: ATATATGTACCGGGAGCTCCG, 19, 7
Mutated: AGATATGTACCGGGAGCTCCG, 19, 8
Mutated: AACTATGTACCGGGAGCTCCG, 20, 9
Mutated: AACTATGTACCGGGAGCTCCG, 20, 10
Mutated: AAATATGTACCGGGAGCTCCG, 20, 11
Mutated: AATTATGTACCGGGAGCTCCG, 21, 12
Master sequence has been achieved

这将完成您的第一个任务,并按突变序列、汉明距离和生成编号的顺序获得所需的输出。这将发现突变序列中点突变的所有位置。对于每一个位置,它都用另一个随机核苷酸交换。使用递归,我能够自动进化变异序列。我添加了这个条件,这样一旦两个序列相等,它就会停止。如果你想再增加一次突变的机会,比如说,有1/10的机会你可以在实际交换每个核苷酸的部分之前做类似的事情

    for num in list:
        i = random.randint(1, 10)
        if i == 5: # The 5 is a random number that I chose
            y = random.choice(nucleotides)
            mutation[num] = y
这是一个非常天真的答案,但效果很好。此外,我将序列和随机整数作为用户输入,以使函数更灵活

这将完成您的第一个任务,并按突变序列、汉明距离和生成编号的顺序获得所需的输出。这将发现突变序列中点突变的所有位置。对于每一个位置,它都用另一个随机核苷酸交换。使用递归,我能够自动进化变异序列。我添加了这个条件,这样一旦两个序列相等,它就会停止。如果你想再增加一次突变的机会,比如说,有1/10的机会你可以在实际交换每个核苷酸的部分之前做类似的事情

    for num in list:
        i = random.randint(1, 10)
        if i == 5: # The 5 is a random number that I chose
            y = random.choice(nucleotides)
            mutation[num] = y
这是一个非常天真的答案,但效果很好。此外,我将序列和随机整数作为用户输入,以使函数更灵活