用于推导连续系列随机数的函数

时间:2015-09-08 06:17:31

标签: function random random-walk

我曾经读过一篇关于函数的文章,我认为它有一个像Piersen或Poisson这样的名字,用于得到与前一个函数接近的随机数。显然,它被用于某些设备,并广泛用于机器人中,如本文所述。这是最初的例子:

假设你要用两个轮子建造一个机器人。你希望这个机器人遵循房间周围的一些随机路径,而不是特别去任何地方,随机时间随机变量。如果你要将一个真正的随机数发生器送入每个轮子,那么机器人很可能会在一个路径上猛拉并旋转到位。目标不是让机器人以一条直线行进,而只是看起来它的动作背后有一些逻辑。

因此存在这个功能,这是一个连续但随机变化的功能,可随意上下弯曲。通过从函数以设定的间隔获取输出(例如,从234.198开始,间隔为0.01),可以保证发送到车轮的每个值是随机的,但是遵循一些路径以及先前和未来的值。通过选择更大或更小的间隔,可以改变连续值之间的关系程度,从而基本上形成一个或多或少中毒的机器人。

此功能的名称是什么?

2 个答案:

答案 0 :(得分:1)

Autoregressive型号可能正是您所寻找的。这是一类模型,它使用加权过去历史和一些漂移/随机性来确定下一个值。

答案 1 :(得分:0)

我知道Poisson 发行版,但我不确定它是否与此相关。

如果你想在主街上随意走一下,我建议你只需要在当前值上添加一个小的delta来确保小步骤。

def nextValue(n):
    return n + random(7) - 3

这样的东西总是会给你一个+/- 3的当前值,不过你可以使用random(4) - 1来调整偏差的表达式,例如,如果你喜欢一段时间的前向运动。

对于想要平滑前进的机器人,您可以设置整体距离,然后在运动的整个生命周期中定期向特定的轮子添加额外的前向运动,如:

def meander():
    distance = random(10,25)       # 10-25 units
    skip = distance / random(3,5)  # curve at 33/25/20% points
    direction = random(1,3)        # curve left, right or not at all
    for i = 1 to distance:
        leftdelta = rightdelta = 1 # Default to one unit forward

        if i is multiple of skip:  # Periodically adjust one wheel only
            case direction:
                1: leftdelta--
                3: rightdelta--

        leftwheel += leftdelta     # Turn wheels
        rightwheel += rightdelta

def drunken_monkey():
    while true:
        meander()

在调整下一步的运动曲线之前,像这样的东西应该让你沿着平缓但随机的曲线前进一段时间。