一、排队论
优化服务体系
1.1主要是基于“蒙特卡罗思想”,求解"单坑位"排队等待时间问题
'''
Part1 设置随机值
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
arrivingtime = np.random.uniform(0,10,size = 20)
arrivingtime.sort()
workingtime = np.random.uniform(1,3,size = 20)
# np.random.uniform 随机数:均匀分布的样本值
startingtime = [0 for i in range(20)]
finishtime = [0 for i in range(20)]
waitingtime = [0 for i in range(20)]
emptytime = [0 for i in range(20)]
# 开始时间都是0
print('arrivingtime\n',arrivingtime,'\n')
print('workingtime\n',workingtime,'\n')
print('startingtime\n',startingtime,'\n')
print('finishtime\n',finishtime,'\n')
print('waitingtime\n',waitingtime,'\n')
print('emptytime\n',emptytime,'\n')
'''
Part2 第一人上厕所时间
'''
startingtime[0] = arrivingtime[0]
# 第一个人之前没有人,所以开始时间 = 到达时间
finishtime[0] = startingtime[0] + workingtime[0]
# 第一个人完成时间 = 开始时间 + “工作”时间
waitingtime[0] = startingtime[0]-arrivingtime[0]
# 第一个人不用等待
print(startingtime[0])
print(finishtime[0])
print(waitingtime[0])
'''
Part3 第二人之后
'''
for i in range(1,len(arrivingtime)):
if finishtime[i-1] > arrivingtime[i]:
startingtime[i] = finishtime[i-1]
else:
startingtime[i] = arrivingtime[i]
emptytime[i] = arrivingtime[i] - finishtime[i-1]
# 判断:如果下一个人在上一个人完成之前到达,则 开始时间 = 上一个人完成时间,
# 否则 开始时间 = 到达时间,且存在空闲时间 = 到达时间 - 上一个人完成时间
finishtime[i] = startingtime[i] + workingtime[i]
waitingtime[i] = startingtime[i] - arrivingtime[i]
print('第%d个人:到达时间 开始时间 “工作”时间 完成时间 等待时间\n' %i,
arrivingtime[i],
startingtime[i],
workingtime[i],
finishtime[i],
waitingtime[i],
'\n')
print('arerage waiting time is %f' %np.mean(waitingtime))
"""
数据统计
"""
sns.set(style = 'ticks',context = "notebook")
fig = plt.figure(figsize = (8,6))
arrivingtime, = plt.plot(arrivingtime,label = 'arrivingtime')
startingtime, = plt.plot(startingtime,label = 'startingtime')
workingtime, = plt.plot(workingtime,label = 'workingtime')
finishtime, = plt.plot(finishtime,label = 'finishtime')
waitingtime, = plt.plot(waitingtime,label = 'waitingtime')
plt.title(("Queuing problem random simulation experiment").title())
plt.xlabel("Arriving Time(min)")
plt.ylabel("Total Time(min)")
plt.legend(handles=[arrivingtime,startingtime,workingtime,finishtime,waitingtime],
loc = 'upper left')
plt.show()
1.2主要是基于“蒙特卡罗思想”,求解"多坑位"排队等待时间问题
较复杂自行了解
二、马尔可夫算法
2.1相关概念
已知现在,且来与过去无关描述这类随机现象的数学模型称为马尔可夫模型
看例题
基本方程
又看不懂上题
例题二
例题三
%第一种方法
p=[0.8 0.1 0.1;0.5 0.1 0.4;0.5 0.3 0.2]; p=sym(p);
a=[p'-eye(3);ones(1,3)]; %构造方程组ax=b的系数矩阵
b=[zeros(3,1);1]; %构造方程组ax=b的常数项列
p_limit=a\b %求方程组的解
%第二种:利用求转移矩阵P的转置矩阵P^T的最大特征值1对应的特征概率向量,求得极限概率;
clc,clear, format rat
p=[0.8 0.1 0.1;0.5 0.1 0.4;0.5 0.3 0.2];
[v,d]=eigs(p',1) %求最大特征值及对应的特征向量
p=v/sum(v) %把最大特征值对应的特征向量化成概率向量
format %恢复到短小数的显示格式