首页 > 其他分享 >《概率机器人》课后习题 第2章

《概率机器人》课后习题 第2章

时间:2022-09-02 10:56:35浏览次数:83  
标签:wea frac sum 机器人 mid sync 课后 习题 day

这是Jupyter Notebook转换成的markdown。
部分内容参考了这里的答案。

import numpy as np
from sympy import Matrix

第一题

假设传感器并不会在使用过程中损坏,只可能一开始就是坏的或者好的。令随机变量\(X\),其值为1表示传感器是好的,为0表示传感器是坏的

\[\begin{aligned} p(X=0\mid z_{1:n} < 1)&=\frac{p(z_{1:n} < 1\mid X=0)p(X=0)}{p(z_{1:n} < 1)}\\ &=\frac{1\times 0.01}{p(z_{1:n} < 1\mid X=0)p(X=0) + p(z_{1:n} < 1\mid X=1)p(X=1)}\\ &=\frac{0.01}{0.01 + \frac{1}{3^N} \times 0.99} \end{aligned} \]

第二题

第1问

查查表很容易得到:
\(0.2\times0.4\times0.2=0.016\)

第2、3问

要随机生成天气,只要取出每天概率分布中概率最大的天气就好,现在主要求一求随着天数增加,分布会不会稳定:

tran_mat = np.array(
    [[0.8, 0.4, 0.2],
    [0.2, 0.4, 0.6],
    [0, 0.2, 0.2]]
)

weathers = np.diag([1, 1, 1], 0)
wea_str = ["sunny", "cloudy", "rainy"]

for idx in range(3):
    print("Let 1st day's weather to be ", wea_str[idx], "!", sep='')
    print("day", "sunny", "cloudy", "rainy", "predict", sep="\t")
    weather = np.reshape(weathers[idx], (3, 1))
    for day in range(12):    # 输出10天的结果
        weather = np.matmul(tran_mat, weather)
        if (day >= 8):
            print(day+2, end='\t')
            for w in weather:
                print("%.3f" % w, end='\t')
            print(wea_str[np.argmax(weather)])
    print("================")
Let 1st day's weather to be sunny!
day	sunny	cloudy	rainy	predict
10	0.643	0.285	0.071	sunny
11	0.643	0.286	0.071	sunny
12	0.643	0.286	0.071	sunny
13	0.643	0.286	0.071	sunny
================
Let 1st day's weather to be cloudy!
day	sunny	cloudy	rainy	predict
10	0.642	0.286	0.072	sunny
11	0.642	0.286	0.072	sunny
12	0.643	0.286	0.072	sunny
13	0.643	0.286	0.071	sunny
================
Let 1st day's weather to be rainy!
day	sunny	cloudy	rainy	predict
10	0.642	0.286	0.072	sunny
11	0.642	0.286	0.072	sunny
12	0.643	0.286	0.072	sunny
13	0.643	0.286	0.071	sunny
================

第4问

这是一个马尔科夫过程(我并不是不是很了解这个问题),要求闭式解主要是要求状态转移矩阵的幂,需要用到线性代数中关于相似对角化的知识,此处就直接用Python的包求解啦:

from sympy import Matrix

# 还是原来的状态转移矩阵,只不过换一个数据类型
sympy_tran = Matrix(3, 3, 
    [0.8, 0.4, 0.2,
    0.2, 0.4, 0.6,
    0, 0.2, 0.2])
# 求相似对角化矩阵和
(diagonalize_mat, diag_mat) = sympy_tran.diagonalize()
diag_mat

\(\displaystyle \left[\begin{matrix}1.0 & 0 & 0\\0 & 0.482842712474619 & 0\\0 & 0 & -0.082842712474619\end{matrix}\right]\)

假设第\(t\)天的状态为\(A_t\),状态转移矩阵\(M\)可以相似对角化得到\(D=P^{-1}MP\)。观察上边的计算结果可得:

\[\lim_{N\to\infty}D^N= \begin{bmatrix} 1&0&0\\0&0&0\\0&0&0 \end{bmatrix} \]

sta_tran = diagonalize_mat * Matrix(3, 3, [1, 0, 0, 0, 0, 0, 0, 0, 0])\
    * diagonalize_mat.inv()
sta_tran

\(\displaystyle \left[\begin{matrix}0.642857142857143 & 0.642857142857143 & 0.642857142857143\\0.285714285714286 & 0.285714285714286 & 0.285714285714286\\0.0714285714285714 & 0.0714285714285714 & 0.0714285714285714\end{matrix}\right]\)

故有:

\[\begin{aligned} A_t &= (PDP^{-1})^NA_0\\ &=PD^NP^{-1}A_0\\ &=\begin{bmatrix} 0.643&0.643&0.643\\0.286&0.286&0.286\\0.071&0.071&0.071& \end{bmatrix}A_0 \end{aligned} \]

又因为A_0各元素和为1,所以无论\(A_0\)如何取值,最后的稳态分布都是\(\begin{bmatrix}0.643\\0.286\\0.071\end{bmatrix}\)

第5问

sta_distrib = np.array([sta_tran[0, 0], sta_tran[1, 0], sta_tran[2, 0]], dtype=float)
entropy = -np.sum(np.log2(sta_distrib) * sta_distrib)
entropy
1.1981174211304033

故熵是1.198。

第6问

设某一天的天气是A,其后一天的天气是B,则已知\(p(B\mid A)\),求\(p(A\mid B)\)。

\[\begin{aligned} p(A\mid B) &= \frac{p(B\mid A) p(A)}{p(B)}\\ \end{aligned} \]

其中\(p(A)\)、\(p(B)\)即是稳态分布,有

def reverse_transition(a2b, p_a, p_b):
    '''求状态转移矩阵的反过来的转移矩阵'''
    b2a = np.zeros((3, 3))
    for a in range(3):
        for b in range(3):
            b2a[a, b] = a2b[b, a] * p_a[a] / p_b[b]
    return b2a

rev_tran_mat = reverse_transition(tran_mat, sta_distrib, sta_distrib)

print("to->ye", "sunny", "cloudy", "rainy", sep="\t")
for idx in range(3):
    print(wea_str[idx]+"\t", "%.4f\t%.4f\t%.4f"
        %(rev_tran_mat.T[idx, 0], 
        rev_tran_mat.T[idx, 1],
        rev_tran_mat.T[idx, 2]))
to->ye	sunny	cloudy	rainy
sunny	 0.8000	0.1778	0.0222
cloudy	 0.4500	0.4000	0.1500
rainy	 0.0000	0.8000	0.2000

第6问

马尔可夫过程要求对当下的状态能够充分估计未来的状态,所以在只知道当前天气的条件下添加天气变量将使得以上推导不再有效,解决方法是在当前状态中再加上天气。

第三题

注意这题是建立在第2题的基础上的
记号约定:

  • 晴天、多云和雨天分别记为1~3
  • \(X_n=s\)(或\(X_n=c\)、\(X_n=r\))简写为\(x_n\)

已知今天天气到明天天气的状态转移矩阵\(P_1\)和天气到传感器测量结果的转移矩阵\(P_2\):

\[P_1= \begin{bmatrix} 0.8&0.4&0.2\\0.2&0.4&0.6\\0&0.2&0.2 \end{bmatrix},\ P_2= \begin{bmatrix} 0.6&0.3&0\\0.4&0.7&0\\0&0&1 \end{bmatrix} \]

第1问

等价于在\(n=5,X_1=1,z_{2:n}=\{2,2,3,1\},i=1\)时求下式的值:

\[p(X_n=i\mid z_{2:n},x_1),\quad n\ge2 \]

将该式化简可得

\[\begin{aligned} p(X_n=i\mid z_{2:n},x_1) &=\eta p(z_n\mid z_{2:n-1}, X_n=i, x_1)p(X_n=i\mid z_{2:n-1},x_1)\\ &=\eta p(z_n\mid X_n=i)\sum\limits_{j=1}^3p(X_n=i\mid z_{2:n-1}, X_{n-1}=j, x_1)p(X_{n-1}=j\mid z_{2:n-1}, x_1)\\ &=\eta p(z_n\mid X_n=i)\sum\limits_{j=1}^3p(X_n=i\mid X_{n-1}=j)p(X_{n-1}=j\mid z_{2:n-1}, x_1)\\ &=\eta p(z_n\mid X_n=i)\sum\limits_{j=1}^3p(X_n=i\mid X_{n-1}=j)p(X_{n-1}=j\mid z_{2:n-1}, x_1) \end{aligned} \]

其中\(p(X_{n-1}=j\mid z_{2:n-1}, x_1)\)与\(p(X_n=i\mid z_{2:n},x_1)\)结构一致,可见可以按\(n=2\sim5\)的顺序求的该题的答案。
首先求迭代的初始条件

\[\begin{aligned} p(X_2=i\mid z_2, x_1) &=\eta p(z_2\mid X_2=i, x_1)p(X_2=i\mid x_1)\\ &=\eta p(z_2\mid X_2=i)p(X_2=i\mid x_1) \end{aligned} \]

SUNNY = 0
CLOUDY = 1
RAINY = 2
# 当天天气到传感器的转移矩阵
wea2sen = np.array(
    [[0.6, 0.3, 0],
    [0.4, 0.7, 0],
    [0, 0, 1]]
)
# 当天天气到后一天的天气的转移矩阵
wea2tom = np.array(
    [[0.8, 0.4, 0.2],
    [0.2, 0.4, 0.6],
    [0, 0.2, 0.2]]
)
# 传感器天气序列,从第2天开始
sensor_data = [CLOUDY, CLOUDY, RAINY, SUNNY]
# 初始天气,第1天的真实天气
wea_init = SUNNY
# 本题条件下第2、3、4、5天的真实天气的概率分布
p_sync = np.zeros((3, 4))
# 第二天的真实天气概率分布
for wea in range(3):
    p_sync[wea, 0] = wea2sen[sensor_data[0], wea] * wea2tom[wea, wea_init]
# 归一化,从而避免求p(z_n|z_{n-1})
p_sync[:, 0] /= np.sum(p_sync[:, 0])
p_sync
array([[0.69565217, 0.        , 0.        , 0.        ],
       [0.30434783, 0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        ]])

最后迭代即可得到第五天的概率分布,满足的公式如下(上边推的此处再写一遍):

\[p(X_n=i\mid z_{2:n},x_1)=\eta p(z_n\mid X_n=i)\sum\limits_{j=1}^3p(X_n=i\mid X_{n-1}=j)p(X_{n-1}=j\mid z_{2:n-1}, x_1) \]

for day in range(3, 6):
    for wea in range(3):
        for sum_wea in range(3):
            p_sync[wea, day-2] += wea2tom[wea, sum_wea] * p_sync[sum_wea, day-3]
        p_sync[wea, day-2] *= wea2sen[sensor_data[day-2], wea]
    p_sync[:, day-2] /= np.sum(p_sync[:, day-2])
p_sync
array([[0.69565217, 0.59770115, 0.        , 0.4       ],
       [0.30434783, 0.40229885, 0.        , 0.6       ],
       [0.        , 0.        , 1.        , 0.        ]])

第2问

方式1

此时每一天只能知道截止到当天的传感器信息,这和第1问求的结果形式一样,直接套用一遍:

# 传感器天气序列,从第2天开始
sensor_data_2 = [SUNNY, SUNNY, RAINY]
# 初始天气,第1天的真实天气
wea_init_2 = SUNNY
# 本题条件下第2、3、4天的真实天气的概率分布
p_sync_2 = np.zeros((3, 3))
# 第二天的真实天气概率分布
for wea in range(3):
    p_sync_2[wea, 0] = wea2sen[sensor_data[0], wea] * wea2tom[wea, wea_init_2]
# 归一化,从而避免求p(z_n|z_{n-1})
p_sync_2[:, 0] /= np.sum(p_sync_2[:, 0])
# 迭代求各天的分布
for day in range(3, 5):
    for wea in range(3):
        for sum_wea in range(3):
            p_sync_2[wea, day-2] += wea2tom[wea, sum_wea] * p_sync_2[sum_wea, day-3]
        p_sync_2[wea, day-2] *= wea2sen[sensor_data[day-2], wea]
    p_sync_2[:, day-2] /= np.sum(p_sync_2[:, day-2])
p_sync_2
array([[0.69565217, 0.59770115, 0.        ],
       [0.30434783, 0.40229885, 0.        ],
       [0.        , 0.        , 1.        ]])

方式2

首先还是弄清楚要求什么,并将其化简:

\[\begin{aligned} p(X_k=i\mid z_{2:n},x_1) &=\sum\limits_{j=1}^3p(X_k=i\mid z_{2:n}, X_{k-1}=j,x_1)p(X_{k-1}=j\mid z_{2:n}, x_1)\\ &=\sum\limits_{j=1}^3p(X_k=i\mid z_{k:n}, X_{k-1}=j)p(X_{k-1}=j\mid z_{2:n}, x_1) \end{aligned} \]

可以发现\(p(X_{k-1}=j\mid z_{2:n}, x_1)\)与待求的目标形式是相同的,所以思路遇上题一样,求出初始条件然后迭代。而初始条件$$p(X_2=i\mid z_{2:n},x_1)$$又和上式中的另一项\(p(X_k=i\mid z_{k:n}, X_{k-1}=j)\)是同构的,因此关键在于求得\(p(X_k=i\mid z_{k:n}, X_{k-1}=j)\)。将其化简:

\[\begin{aligned} p(X_k=i\mid z_{k:n}, X_{k-1}=j) &=\eta p(z_{k:n}\mid X_k=i, X_{k-1}=j)p(X_k=i\mid X_{k-1}=j)\\ &=\eta p(z_{k:n}\mid X_k=i)p(X_k=i\mid X_{k-1}=j) \end{aligned} \]

故首先要求\(p(z_{k:n}\mid X_k=i)\)。

def get_sen_seq_prob(sen_seq, init_wea):
    '''已知第一天的天气,求一组从第二天开始的天气序列发生的概率'''
    prob = 1
    wea = np.reshape(np.zeros(3), (3, 1))
    wea[init_wea] = 1
    for day in range(0, len(sen_seq)):
        sen = np.matmul(wea2sen, wea)
        prob *= sen[sen_seq[day], 0]
        wea = np.matmul(wea2tom, wea)
    return prob

p_sync_3 = np.zeros((3, 3))
# 得到第2天的分布
for wea in range(3):
    p_sync_3[wea, 0] = get_sen_seq_prob(sensor_data_2, wea) * wea2tom[wea, wea_init]
p_sync_3[:, 0] /= np.sum(p_sync_3[:, 0])
# 得到随后几天的分布
for day in range(3, 5):
    # 求$p(X_k=i\mid z_{k:n}, X_{k-1}=j)$
    p_temp = np.zeros((3, 3))
    for wea_sum in range(3):
        for wea in range(3):
            p_temp[wea, wea_sum] = get_sen_seq_prob(sensor_data_2[day-2:], wea) \
                * wea2tom[wea, wea_sum]
        # 有的序列无论初始天气如何,都不可能达成,这时不能进行归一化
        if (p_temp[:, wea_sum].any() > 1e-8):
            p_temp[:, wea_sum] /= np.sum(p_temp[:, wea_sum])
    # 求结果
    for wea in range(3):
        for wea_sum in range(3):
            p_sync_3[wea, day-2] += p_temp[wea, wea_sum] * p_sync_3[wea_sum, day-3]
p_sync_3

array([[0.8, 0. , 0. ],
       [0.2, 1. , 0. ],
       [0. , 0. , 1. ]])

第3问

上一问已经求出每一天的概率分布了,第3和4天都是一定的,只有第2天可能是晴天或多云,所以结果显然是晴天、多云、雨天,概率是0.8。

第四题

第1问

\[p(x) = \frac{1}{\sqrt{2\pi}\sigma_1}e^{-\frac{(x-\mu_1)^2}{2\sigma_1^2}}\\ p(z\mid x) = \frac{1}{\sqrt{2\pi}\sigma_2}e^{-\frac{(z-x)^2}{2\sigma_2^2}} \]

第2问

首先求\(p(z)\):

\[\begin{aligned} p(z) &=\int_{-\infty}^{\infty}p(z\mid x)p(x)\mathrm{d}x\\ &=\frac{1}{{2\pi\sigma_1\sigma_2}}\int_{-\infty}^{\infty}\exp\left(-\frac{(x-\mu_1)^2}{2\sigma_1^2}-\frac{(z-x)^2}{2\sigma_2^2}\right)\mathrm{d}x\\ &=\frac{1}{{6\pi\sigma_2^2}}\int_{-\infty}^{\infty}\exp\left(\frac{-(x-\mu_1)^2+9(z-x)^2}{18\sigma_2^2}\right)\mathrm{d}x\\ &=\frac{1}{{6\pi\sigma_2^2}}\int_{-\infty}^{\infty}\exp\left(\frac{-10(x-\frac{9z+\mu_1}{\sqrt{10}})^2+\frac{9}{10}(z-\mu_1)^2}{18\sigma_2^2}\right)\mathrm{d}x\\ &=\frac{1}{\sqrt{2\pi}\sigma_3}e^{-\frac{(z-\mu_1)^2}{2\sigma_3^2}}\int_{-\infty}^{\infty}\frac{1}{\sqrt{2\pi}(3\sigma_2/\sqrt{10})}\exp\left(-\frac{(x-\frac{9z+\mu_1}{\sqrt{10}})^2}{2(3\sigma_2/\sqrt{10})^2}\right)\mathrm{d}x\\ &=\frac{1}{\sqrt{2\pi}\sigma_3}e^{-\frac{(z-\mu_1)^2}{2\sigma_3^2}} \end{aligned} \]

其中\(\sigma_3=\sqrt{10}\sigma_2\)。进一步化简即可得\(p(x\mid z)\):

\[\begin{aligned} p(x\mid z) &=\frac{p(z\mid x)p(x)}{p(z)}\\ &=\frac{1}{\sqrt{2\pi}(\frac{3}{\sqrt{10}}\sigma_2)}\exp\left[\frac{(x-\frac{9z+\mu_1}{10})^2}{2\cdot(\frac{3}{\sqrt{10}}\sigma_2)^2}\right] \end{aligned} \]

\(z\)已知的条件下,则就是个正态分布。

第3问

0,因为对于连续的概率分布来说观测值等于某个具体的值的概率都是0。

第五题

使用\(p(a)=p(a\mid b)p(b)\)化简2.16:

\[\begin{aligned} p(x,y\mid z) &=p(x\mid y, z)p(y\mid z)\\ &=p(y\mid x, z)p(x\mid z)\\ &=p(x\mid z)p(y\mid z) \end{aligned} \]

即可得2.17和2.18。

第六题

\[\begin{aligned} \operatorname{Cov}[X] &=E[X-E[X]]^2 &=\int(x-E[X])^2p(x)\mathrm{d}x\\ &=\int(x^2-2E[X]+E^2[X])p(x)\mathrm d x\\ &=E[X^2]-2E^2[X]+E^2[X]\\ &=E[X^2]-E^2[X] \end{aligned} \]

标签:wea,frac,sum,机器人,mid,sync,课后,习题,day
From: https://www.cnblogs.com/harold-lu/p/16649039.html

相关文章

  • 用 Python 编写傅立叶级数机器人(第 2 部分——为什么选择 Python?)
    用Python编写傅立叶级数机器人(第2部分——为什么选择Python?)自然,在编写傅立叶级数机器人时可能会问一个问题,“我应该使用哪种编码语言?”,在我看来,唯一的答案是Python......
  • 扫地机器人的软件组成
    扫地机器人的整体组成:结构 硬件 软件这些也是组成所有产品的基石,大部分的消费类电子 这里主要阐述软件的组成部分,机器人是基于激光雷达不带视觉的扫地机器人我......
  • 机器人组成
    机器人组成部分:一个机器人从产生想法到设计出来,中间会经过很多步骤产品原型,产生想法,如我在家里扫地,但是觉得很累,想办法能用机器替代人的劳动吗,基于这样的想法,产生出机器......
  • jenkins 钉钉机器人插件
    官方文档:https://jenkinsci.github.io/dingtalk-plugin/guide/getting-started.html#%E6%B3%A8%E6%84%8F注意:系统配置时可收到通知,但是在构建项目时没有收到通知,不确定......
  • 随机过程习题知识
    1第一章习题1.1第一次作业1.1.1两个随机变量的函数的概率密度求解法1:先求解概率分布函数,再由分布函数求导得到概率密度。例题:已知随机变量\(X\)服从参数为1的指数......
  • 操作系统自测复习题01
    列出并简要定义计算机的主要4个部分定义处理寄存器的两种主要类型一般而言,一条机器指令能指定的4种不同操作是什么什么是中断多个中断的处理方式是什么内......
  • 嵌入式系统原理及应用教程课后习题(未完持续更新中)
    第一章:嵌入式系统概述1.1嵌入式系统的概念是什么?  以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的......
  • 数字电子技术基础(阎石)课后习题(未完持续更新中)
    第一章:数制和码制1.1为了将600份文件顺序编码,如果采用二进制代码,最少需要用几位?如果改用八进制或十六进制代码,则最少各需要用几位?1.2将下列二进制整数转换为等值的......
  • 《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式
    《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式视频讲解【第1季】2.第2章_C++编程范式-视频讲解【第1季】2.1.第2章_C++编程范式-C++工程的组织结构-视频......
  • zxb2022习题班26
    (1)购买日是2x21年12月31日,理由:从该日起,甲公司能够控制乙公司的财务和经营决策;该项交易后续不存在实质性障碍。商誉=10*10000-100000*80%=20000 相关会计分录:借:长投(1......