code de programmation python filtrage bayésien discrète pratique

Des exemples de fond

Supposons que vous avez un robot coincé dans un tuyau à son intérieur, et ne peut aller de l'avant ou vers l'arrière. La longueur du tube est de 20 cm. Après le robot recevoir un « avant » commande a trois possibles « il y a une probabilité de 25% ne sont pas mis en œuvre, il y a un 1cm avant de probabilité de 50%, il y a une probabilité de 25% avant 2cm ». Bien sûr, il y a des circonstances particulières lorsque le robot est seulement 1cm de la fin quand il «n'exécute pas commande 25% de probabilité de 75% de probabilité de seulement 1 cm de distance. » Lorsque le robot aux extrémités de celui-ci coincé. Maintenant 11cm robot dans ce lieu, j'ai envoyé 9 commande « avant » pour le contrôler. Après avoir posé le robot exécute cette commande de la probabilité de chaque neuf est le nombre de positions (par exemple, la détermination de la distribution de probabilité situé à différents endroits du robot).

analyse

Il est 11cm position initiale à cet endroit, ce qui signifie que le robot situé à 19 autres endroits probabilité est 0, et la probabilité endroit est 11cm 1. Note: Ce robot se trouve dans 20 endroits et les probabilités ajouter à égalité 1 (parce que ils sont à l' intérieur d' une distribution de probabilité).
Représente la probabilité que le réseau Jiangzi suivant:
[0 0,000,000,001,000,000,000]

Ensuite, nous analysons lui conféraient la première commande avant comment faire fonctionner

Devant les informations de base du robot peut être vu aujourd'hui à la 11ème place donc il y a trois cas (que près de la fin, il peut être inférieur à trois types)

25% de probabilité ne soit pas exécuter
la probabilité de 50% avant une
probabilité de 25% passe 2 de
sorte tableau de probabilité est mise à jour
[00000000001 0,25 1 0,5 1 * 0,25 0000000] = [0000000000 0,25 0,5 0,25 0000000]

Consultez ensuite la commande en avant il a reçu une deuxième façon dont les changements dans
ce cas particulier , il est toujours pas à proximité du point de terminaison. Mais un peu compliqué. Parce qu'il ya trois positions (11, 12, 13) doivent être pris en considération.
Tout d' abord considéré que lorsque le robot est en position 11 du boîtier (substituts 0 valeur sur 12 bits et la probabilité de 13 bits)
[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]
maintenant considéré seulement lorsque le robot est dans la première 12 bits (un 0 au lieu de la valeur de l' impact 11 et 13 probabilité)
[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]
maintenant considéré que lorsque le robot est dans les 13 cas (0 substituts valeur de probabilité 11 et 12)
[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] Par
conséquent , la matrice finale modifie la probabilité de recevoir la deuxième commande passe avant de probabilité de la matrice de trois cas et:
[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]

Derrière le changement est plus complexe que nous atteignons avec un code Python (chèque mauvais code standard ne correspondait pas au nombre 20 est égal à 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 peut être vu à travers l'exécution du robot de commande est une grande probabilité au 20 (indice inférieur à ce chiffre est égal à zéro).
Insérer ici l'image Description
Lien original: https: //blog.csdn.net/varyshare/article/details/100098979

Publié 34 articles originaux · louange gagné 2 · Vues 2303

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44088559/article/details/105390067
conseillé
Classement