-2

我曾经读过一篇关于函数的文章,我相信它有一个像 Piersen 或 Poisson 这样的名字,用来获取接近前一个的随机数。显然,它被用于某些电器,并广泛用于机器人技术中,如文章中所述。这是原始示例:

假设你要建造一个有两个轮子的机器人。您希望这个机器人沿着房间周围的一些随机路径走,而不是特别去任何地方,在随机时间转动随机数量。如果你将一个真正的随机数生成器输入每个轮子,机器人很可能会在原地猛拉和旋转,而不是沿着某个路径前进。我们的目标不是让机器人沿着一条直线行进,而只是让它看起来有一些动作背后的逻辑。

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

这个函数的名称是什么?

4

2 回答 2

1

自回归模型可能是您正在寻找的。这是一类模型,它使用加权过去历史结合一些漂移/随机性来确定下一个值。

于 2015-09-08T13:07:28.683 回答
0

我知道泊松分布,但我不确定它在这里是否相关。

如果您想在大街上随意走动,我建议您在当前值上添加一个小增量以确保小步。

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()

在为下一步调整运动曲线之前,类似的东西应该让您沿着柔和但随机的曲线向前运动一段时间。

于 2015-09-08T06:24:07.837 回答