Discreta filtrado bayesiano pitón Práctica código de programación

Ejemplos de Antecedentes

Suponga que tiene un robot atrapado en un tubo en su interior, y sólo puede ir hacia delante o hacia atrás. La longitud del tubo es de 20 cm. Después de que el robot recibir un "hacia adelante" comando tiene tres posibles "hay una probabilidad de 25% no se ha implementado, hay un 50% de probabilidad de 1 cm hacia adelante, hay un 25% de probabilidad de 2 cm hacia adelante". Por supuesto, hay circunstancias especiales en las que el robot sólo 1 cm desde el extremo cuando "no ejecuta comandos 25% de probabilidad de 75% de probabilidad de tan sólo 1 cm de distancia." Cuando el robot en los extremos de la misma pegada. Ahora 11cm robot en ese lugar, me envió 9 comando "hacia adelante" para controlarlo. Después de pedir se ejecuta el robot este comando en la probabilidad de cada nueve es el número de posiciones (es decir, la determinación de la distribución de probabilidad se encuentra en varios lugares del robot).

análisis

Es 11cm posición inicial en ese lugar, que significa que el robot se encuentra en otros 19 lugares probabilidad es 0, y la probabilidad de que el lugar es 11cm 1. Nota: Este robot se encuentra en 20 lugares y las probabilidades se suman a la igualdad de 1 (porque que están dentro de una distribución de probabilidad).
Representa la probabilidad de que la matriz de Jiangzi siguiente:
[0 0,000,000,001,000,000,000]

A continuación, analizamos que recibió bajo el primer comando hacia adelante la forma de operar

Delante de la información de fondo del robot se puede ver ahora en el puesto 11 por lo que hay tres casos (sólo cerca del final puede ser inferior a tres tipos)

25% de probabilidad no se ejecuta
el 50% de probabilidad hacia adelante una
probabilidad del 25% procede 2
de modo matriz de probabilidad se actualiza para
[00000000001 0,25 1 0,5 1 * 0.25 0000000] = [0000000000 0,25 0,5 0,25 0000000]

Después consulte mando avanzado que recibió un segundo cómo los cambios en
este caso particular, todavía no está cerca del punto final. Pero un poco complicado. Debido a que hay tres posiciones (11, 12, 13) deben ser considerados.
Primero considerarse sólo cuando el robot está en la posición 11 de la caja (sustitutos 0 valor de 12 bits y 13 bits de probabilidad)
[0 0 0 0 0 0 0 0 0 0 0,25 0,25 0,25 0,5 0,25 0,25 0 0 0 0 0 0 0]
ahora se considera únicamente cuando el robot está en los primeros 12 bits de (a 0 en lugar del valor de impacto 11 y 13 de probabilidad)
[0 0 0 0 0 0 0 0 0 0 0 0,5
0,25 0,5 0,5 0,5 0,25 0 0 0 0 0 0]
ahora se considera únicamente cuando el robot está en los 13 casos (sustitutos 0 valor en 11 y 12 de probabilidad)
[0 0 0 0 0 0 0 0 0 0 0 0 0,25 0,25 0,25 0,5 0,25 0,25 0 0 0 0 0]
Por lo tanto la matriz última cambia la probabilidad de recibir el segundo comando procede frente probabilidad de la matriz de tres casos y:
[0000000000 0.25
0.25 0.25 0.5 0.25 0.25 0000000 ] + [00000000000 0,5 0,25 0,5 0,5 0,50,25 0 0 0 0 0 0] + [0 0 0 0 0 0 0 0 0 0 0 0 0,25 0,25 0,25 0,5 0,25 0,25 0 0 0 0 0]

Detrás del cambio es más compleja que logramos con un poco de código Python (criterio erróneo código de verificación no agregar hasta el número 20 es igual a 1).

#coding=utf-8

import numpy as np
# hstack	水平堆叠序列中的数组(列方向)
#一共20个数据,在第11位的地方写1
prob = np.hstack((np.zeros(10),1,np.zeros(9)))
prob_update = np.zeros(20)#待更新的数列
# _ 是一个临时变量,前进9次,当前位置是11,距离终点20还有9
for _ in range(9):
    for i in range(prob.shape[0]):# shape输出维度
        if i == (prob.shape[0]-1):#如果就是在端点那就会100%不执行任何操作
            prob_update[i] += prob[i]
            pass
        elif i == (prob.shape[0]-2):
            #如果是离端点只有一位,那25%不执行任何操作,75%跳到下一位
            prob_update[i] += prob[i]*0.25
            prob_update[i+1] += prob[i]*0.75
            pass
        else:
            #只要i不是靠近端点,就有三种情况
            prob_update[i] += prob[i]*0.25
            prob_update[i+1] += prob[i]*0.5
            prob_update[i+2] += prob[i]*0.25
            pass
        pass
    prob = prob_update
    print(np.sum(prob))
    prob_update = np.zeros(20)
    
import matplotlib.pyplot as plt
plt.xticks(np.arange(0, 20, 1))
plt.imshow(np.expand_dims(prob,axis=0),cmap=plt.get_cmap('Greys'))
plt.show()

9 se puede ver a través de la ejecución del robot comando es una gran probabilidad en el 20 (subíndice debajo de esta cifra es cero).
Aquí Insertar imagen Descripción
fuente original: https: //blog.csdn.net/varyshare/article/details/100098979

Publicado 34 artículos originales · ganado elogios 2 · Vistas 2303

Supongo que te gusta

Origin blog.csdn.net/weixin_44088559/article/details/105390067
Recomendado
Clasificación