可扩展的有偏数生成器Python

2024-03-28 21:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个随机数发生器,它将有偏见,因为它采取一个数字,并打印一个可能接近。我现在的情况是:

def biasedRandom(rangen, rangex, target, biaslevel=1):
    if rangen > rangex:
        raise ValueError("Min value is less than max value.")
        return
    if not target in range(rangen, rangex):
        raise ValueError("Bias target not inside range of random.")
        return

    num = random.randint(rangen, rangex)
    for i in range(biaslevel):
        distance = abs(num - target)
        num -= random.randint(0, distance)

    return num

这是很好的工作,但有时它给出了完全离谱的数字;例如,它曾经给出-246174068358作为(1,100,30,60)。我觉得里面有个虫子我没看到。在

提前谢谢。在


Tags: intargetreturnifvaluenotrange数字
2条回答

raise退出函数-您不需要跟随raise和return

范围内的目标(lo,hi)效率低下;为什么不lo<;=target<;hi?在

编辑:

import random
def biasedRandom(lo, hi, target, steps=1):
    if lo >= hi:
        raise ValueError("lo should be less than hi")
    elif target < lo or target >= hi:
        raise ValueError("target not in range(lo, hi)")
    else:
        num = random.randint(lo, hi)
        for i in range(steps):
            num += int(random.random() * (target - num))
        return num

随着步骤的增加,这将非常迅速地集中到目标上;您可能需要进行一些试用发行版,以确保您获得了预期的结果,或者尝试使用随机高斯相反。在

在计算num的最后一行,你是不是在想这样的事情?在

    num = abs(num - random.randint(0,distance))

相关问题 更多 >