python 在笛卡儿平面上运动的概率

jv2fixgn  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(105)

我正在处理下面的编码问题,它看起来更像是一个概率问题,而不是编码问题
由5个顶点组成的平台。顶点的坐标为:(-1,0),(0.-1)。(0,0),(0.1)。(1.0)。从顶点(xs,ys)开始,并保持向左(即x坐标减1)、向右(即x坐标增1)、向上或向下随机移动。后续移动的方向是独立的。你到达顶点(xe,ye)然后从平台上掉下来的概率是多少?制约因素:(xs,ys)in [(-1.0),(0.-1),(0.0),(0.1),(1,0)](xe,ye)in [(-1,0),(0.-1),(0,0),(0,1),(1.0)] xs!= xend或ys!= yend
下面是我实现的,它适用于我分享的案例,但对所有其他案例都失败了

def calculate_probability(xs, ys, xe, ye):
    edges = [[-1, 0], [0, -1], [0, 1], [1, 0]]
    if [xs, ys] in edges:
        if xe == 0 and ye == 0:
            return 0.25
        elif xs == xe and ys == ye:
            return 1.0
        elif [xe, ye] in edges:
            return 0.075
    
    if xs == 0 and ys == 0:
        if [xe, ye] in edges:
            return 0.3
        elif xe == 0 and ye == 0:
            return 1
    return 0
jogvjijk

jogvjijk1#

如果我们处理从目的地开始的边缘情况,或者从边缘开始而目的地是中心,我们只剩下一个简单的场景:找到去中心的路,然后到达目的地。到达原点是一个平坦的0.25概率,然后它只是一个到达正确边缘的问题。如果你随机走错了方向,你总是可以以0.25的成功概率回溯。这可以重复任何次数,然后才能走在正确的方向(目的地)。
这意味着从原点开始,我们有1/4的机会选择错误的方向,有3/4的机会选择错误的方向。如果我们选对了方向,我们就完了,如果选错了方向,我们就得选相反的方向回到原点,避免掉下去,这是1/4的几率。把这些组合成一个,我们有1/4的机会在第一次是正确的,3/16的机会在第二次。重复这个过程,我们最终得到一个公式:

1/4 + 1/4 * (3/16) + 1/4 * (3/16)^2 + 1/4 * (3/16)^3 + ...
= 1/4 * (1 + (3/16) + (3/16)^2 + (3/16)^3 + ...)
= 1/4 * (16/13)
= 4/13

因此,从原点开始,我们有4/13的机会走到正确的边缘图块而不会脱落。
在代码中:

def solve(xs, ys, xe, ye):
    # already at destination
    if xs == xe and ys == ye:
        return 1

    # if destination is the origin, the probability is a flat 0.25
    if xe == 0 and ye == 0:
        return 0.25

    # first move must take you to the origin if not already there
    prob = 0.25 if xs != 0 or ys != 0 else 1

    # multiply by probability of walking from origin to destination
    return prob * 4 / 13

相关问题