马尔科夫链的应用问题

2024-09-05 13:38:52 浏览数 (3)

一、问题:

请根据以下描述,计算缝纫机操作员工作中的可休息时间占比

  1. 一个缝纫机操作员每30分钟缝制完成一件衣服;
  2. 每30分钟,将有一个传货员到来;
  3. 传货员会带走缝纫机操作员完成的衣服;并且会带来新需要缝制的衣服;
  4. 其中30%的概率传货员没有带来需要缝制的衣服;50%的概率带来1件;20的概率带来2件。
  5. 如果缝纫机员超过3件以上未完成衣服,传货员必须等待。

补充:

  • 最后剩余未完成衣服(低于3件),将被留给下一个操作员

将上述缝纫机操作过程转换为马尔可夫链模型,需要定义系统的状态和可能的状态转换。

二、状态定义

定义状态S 为缝纫机操作员每30分钟结束时手上未完成的衣服件数。

状态的可能取值可以是0、1、2、3、4件(不会再多)。

三、转移概率

当 S<=3时:

  1. 有30%的概率传货员不带来衣服,同时需要取走一件已完成的衣服,

所以状态转移到 S -1。

2.  有50%的概率传货员带来1件衣服,同时需要取走一件已完成的衣服,所以状态转移到 S(不变)。

3.  有20%的概率传货员带来2件衣服,同时需要取走一件已完成的衣服,所以状态转移到 S 1。

当 S>3 时:

  1. 传货员必须等待,这意味着不会有新的需要缝制的衣服,同时肯定会拿走一件已完成的衣服。所以有100%的概率转移到3

2. 这也意味着最大状态4(最多4件未完成衣服)

四、状态和转换矩阵

假设状态集合为S {0, 1, 2, 3, 4},状态转移矩阵如下图:

五、计算马尔可夫稳态分布

P 为状态转移矩阵

代码语言:javascript复制
import numpy as np


# 定义状态转移矩阵 P
P = np.array([
    [0.3, 0.5, 0.2, 0.0, 0.0],
    [0.3, 0.5, 0.2, 0.0, 0.0],
    [0.0, 0.3, 0.5, 0.2, 0.0],
    [0.0, 0.0, 0.3, 0.5, 0.2],
    [0.0, 0.0, 0.0, 1.0, 0.0]
])


# 计算稳态分布
n = P.shape[0]
I = np.eye(n)
A = (P.T - I)[:-1]
b = np.zeros(n - 1)
A = np.vstack([A, np.ones(n)])  
b = np.append(b, 1) 


# 解线性方程以求稳态分布
stationary_distribution = np.linalg.solve(A, b)
print(stationary_distribution)

六、结果

· 状态0(无未完成衣服)的概率为约 13.64%

· 状态1(1件未完成衣服)的概率为约 31.82%

· 状态2(2件未完成衣服)的概率为约 30.30%

· 状态3(3件未完成衣服)的概率为约 20.20%

· 状态4 (4件或更多未完成衣服)的概率为约 4.04%

所以,操作员有13.64%的时间可以休息

0 人点赞