函数重现采用3个参数:
病毒(病毒列表)。 variantProb(仅在重现时浮点数为0-1的机会发生变异)和replicationProb(在重生时浮点数为0-1的机会重现)。因此,浮点数为0.2、0.4会使它有40%的繁殖率,如果它产生20%的变异机会。

我已经写了mutate函数,它可以正常工作:

def mutate(virus):
    # choose random index to change
    index = random.randint(0, len(virus) - 1)

    # make sure you are not using the previous char by removing it from
    # the mutations to choose from
    mutations = [i for i in 'ATCG' if i != virus[index]]

    # swap out the char at index with a random mutation
    return virus[:index] + random.choice(mutations) + virus[index+1:]


但是,如果病毒繁殖(基于繁殖),我的繁殖不会将新病毒添加到列表中,应该将新病毒添加到已经存在的,已突变或未突变的病毒列表中(基于mutationProb进行突变)。

每种病毒都有各自的繁殖机会

def reproduce(viruses, mutationProb, reproductionProb):
    for virus in viruses:
        if random.random() < reproductionProb:
            if random.random() < mutationProb:
                mutate(virus)
                viruses.append(virus)
            else:
                viruses.append(virus)
    return viruses


任何人都知道为什么我的功能还没有做到这一点?如我所见,它附加了基于mutationProb的突变病毒,否则它附加了它而没有突变。

最佳答案

正如Carcigenicate所说,您要确保random.random() < reproductionProb的计算结果符合预期,即10次中的4次(或其他次数)。

就您的代码而言,如果您总是想复制满足复制条件(40%概率)的病毒,然后仅对其进行变异(如果满足突变标准(20%概率)),那么您可以稍微简化您的代码。

def reproduce(viruses, mutationProb, reproductionProb):
for virus in viruses:

    if random.random() < reproductionProb:
        if random.random() < mutationProb:
            mutate(virus)

        viruses.append(virus)

return viruses

关于python - 复制项目并根据机会将其添加到列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47715465/

10-11 22:57