IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【M/M/m/∞/∞/FCFS的排队系统仿真】 -> 正文阅读

[Python知识库]【M/M/m/∞/∞/FCFS的排队系统仿真】

基于python的M/M/m/∞/∞/FCFS的排队系统仿真

使用python模拟负指数分布的到达时间间隔以及服务时间

import math
import random
import numpy as np
import matplotlib.pyplot as plt
def expntl(L):
    """
    negative exponential distribution
    return a double random number, L is the mean value
    """
    u = random.random()
    return -L * math.log(u)

# 参数初始化
Total_time = 20
lam = 4
mu = 3
N = 1000000  # 系统可容纳的队列最大长度
arr_mean = 1/lam
ser_mean = 1/mu
arr_num = int(Total_time*lam*2)  # 到达的顾客总数仿真
events = np.zeros((5, arr_num))
services = 2  # 系统中有两台服务器在提供服务

# 第0行为顾客的到达时间
# 第1行为顾客的服务时间
# 第2行为顾客的等待时间
# 第3行为顾客的离开时间
# 第4行为每个顾客的标志位

arr = np.array([expntl(arr_mean) for i in range(arr_num)])  # 产生每个顾客的到达间隔时间,累加后即得每个顾客的到达时间
events[0, :] = np.cumsum(arr)  # 得到每个顾客的到达时间
events[1, :] = np.array([expntl(ser_mean) for i in range(arr_num)])  # 产生每个顾客的服务时间
print(events.shape)
numbers = 2  # 该系统已经服务过的顾客的数量
member = [0, 1]  # 正在接受服务的顾客
# 用for循环产生每个顾客的等待时间
events[2, :2] = 0  # 前两个顾客的等待时间为0
events[3, 0] = events[0, 0] + events[1, 0]  # 计算前两个顾客的离开时间
events[3, 1] = events[0, 1] + events[1, 1]
events[4, :2] = 1  # 已经服务完的前两个顾客标志位置1

# 记录正在服务的两个顾客的离开时间
leave_time = np.array([events[3, 0], events[3, 1]])
ser_num = 0
# print(leave_time)

# print(events[:, :4])
for k in range(2, arr_num):
    # 首先判断是否第k个顾客的到达时间超出了总的仿真时间,是则跳出循环
    if events[0, k] >= Total_time:
        ser_num = k
        break
    else:  # 首先获取此顾客的到达时间并判断是否需要等待
        if events[0, k] <= np.min(leave_time):  # 需要等待
            events[2, k] = np.min(leave_time) - events[0, k]
            # 计算这个顾客的离开时间,为到达时间+等待时间+服务时间
            events[3, k] = sum(events[[0, 1, 2], k])
        else:  # 无需等待
            events[2, k] = 0
            # 计算这个顾客的离开时间,为到达时间+等待时间+服务时间
            events[3, k] = sum(events[[0, 1, 2], k])
        leave_time = np.array([np.max(leave_time), events[3, k]])
        numbers += 1  # 已经服务完的顾客数量加1
        events[4, k] = 1  # 标志位置1
# events_reverse = np.transpose(events)
# print(events_reverse[100:120, :])
# 画出所有顾客的到达时间

c = lam/mu
p = lam/(2*mu)
p0 = 1/(1+c+c**2/(2*(1-p)))
Lq = math.pow(services*p, services)*p*p0/(math.factorial(services)*math.pow(1-p, 2))
Ls = Lq + c
Ws = Ls/lam
Wq = Lq/lam
print("经公式计算所得的顾客的平均排队长为:", Lq)
print("经公式计算所得的顾客的平均队长为:", Ls)
print("经公式计算所得的顾客的平均逗留时间为:", Ws)
print("经公式计算所得的顾客的平均等待时间为:", Wq)
print("仿真所得的顾客的平均等待时间为:", np.mean(events[2, :ser_num]))
plt.figure(figsize=(14, 16))

plt.subplot(211)
plt.plot(np.arange(k), events[0, :k], label='arrive time')
plt.plot(np.arange(k), events[3, :k], label='leave time')
plt.xlabel('t![在这里插入图片描述](https://img-blog.csdnimg.cn/7ebe8d32b4034166ad85e77d95fcd2e2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zuq5a-76Iqx,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
he number of customers')
plt.ylabel('Times')
plt.legend()
ax1 = plt.gca()
ax1.spines['right'].set_color('none')
ax1.spines['top'].set_color('none')
plt.subplot(212)
plt.plot(np.arange(k), events[2, :k], label='wait time')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()

第一次写博客,研一某选修课的project,分享给大家,创作不易,点个赞哦
在这里插入图片描述
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:13:24  更:2021-11-28 11:14:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:36:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码