Python实现排队论——多坑位仿真(未使用仿真库,纯手写仿真)

2023-11-04

Python实现排队论-多坑位厕所

在一次偶然机会,接触到运筹学的排队论问题,于是简单尝试了一下硬撸代码,纯手打仿真,没有使用仿真库。建议大家可以学习Simpy库,用以仿真。

一、案例:主要是基于“蒙特卡罗思想”,求解"单坑位"排队等待时间问题

场景:厕所排队问题

1、两场电影结束时间相隔较长,互不影响;

2、每场电影结束之后会有20个人想上厕所;

3、这20个人会在0到10分钟之内全部到达厕所;

4、每个人上厕所时间在1-3分钟之间

首先模拟最简单的情况,也就是厕所只有一个位置,不考虑两人共用的情况则每人必须等上一人出恭完毕方可进行。

分析:对于每个人都有如下几个参数:

到达时间 / 等待时间 / 开始上厕所时间 / 结束时间

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Dang

'''
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()

输出结果如下:

在这里插入图片描述以上为该网站内容:(https://www.cnblogs.com/yimengtianya1/p/8946338.html.

下文为我于上文基础上,继续推广到多坑位。

二、案例:主要是基于“蒙特卡罗思想”,求解"多坑位"排队等待时间问题

于一案例的基础假设上:
1.每个人不会插队
2.只有一条排队等待队列
3.不分男女厕所
4.假设从排队等待队列到坑位不需要花费时间
5.排队过程中不会有人放弃进入该厕所
6.排队讲究先来后到
7.每个人严格要求排队时间上厕所,忍耐时间无穷。

# -*- coding:utf-8 -*-
# Author:Xiangyang He
# Coding time: 10h

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns #用于合并绘图
#定义函数
class P(): #建立要上厕所的人对象
    def __init__(self,Num,A,WK,WT,ET,FS,ST,R): 
        self.Num = Num #编号
        self.A = A #到达时间 时间点
        self.WT = WT #等待时间 时间长度
        self.WK = WK #“工作”时间 时间长度
        self.ET = ET #厕所无人空白时间 时间长度
        self.FS = FS #完成工作时间 时间点
        self.ST = ST #开始工作时间 时间点
        self.R = R #剩余时间 时间长度
def toilet_which(toilet):    #返回厕所队列中等待时间最短的索引
    lt = []
    for i in toilet:
        lt.append(i.R)
    return lt.index(min(lt))    
def toilet_minus_test(toilet,m): #
    h = []
    for i in range(M):
        if toilet[i] != None:
            h.append(toilet[i].R-m)
    if min(h)<=0:
        return True
    else:
        return False

def toilet_None(toilet):
    return [i for i,x in enumerate(toilet) if x == None ]

def toilet_0(toilet,m):
    return [i for i,x in enumerate(toilet) if x != None and x.R <= m ]


def Nature_minus(x,y): #自然数集中的减法
    if x>y:
        return x-y
    else:
        return 0
#    
N = 200 # item数量
M = 12  # 系统中处理item的个数
K = 30


np.random.seed(2333)

WK = np.random.uniform(10,5,size = N) #工作时间随机生成
A = np.random.uniform(0,K,size = N) #item到达时间随机生成
A.sort() 

y = []
for i in range(0,N-1):
    y.append(A[i+1]-A[i])
y = np.array(y)

Queue = [P(i,A[i],WK[i],0,0,0,0,0) for i in range(N)] #初始化Queue

#对toilet初始化
Queue[0].ST = Queue[0].A
Queue[0].WT = 0
Queue[0].ET = Queue[0].A
Queue[0].R = Queue[0].WK

toilet = [Queue[0]] + [None for i in range(M-1)]
lt = [] #等待的队伍
for k in range(1,N): #item陆续进入处理器与等待队伍
    m = y[k-1]
    if toilet_minus_test(toilet,m):
        
        #print("toilet",toilet,end="")
        s = list(set((toilet_None(toilet) + toilet_0(toilet,m))))
        #print("这是关于A的Num",Queue[k].Num,"时刻为",Queue[k].A)

        if len(lt) == 0:
            print("1,1",Queue[k].Num)
            v = s[0]
            for i in range(M):
                if i == v and toilet[v] == None:
                    Queue[k].ET = Queue[k].A
                    Queue[k].ST = Queue[k].A
                    toilet[v] = Queue[k]
                if i == v and toilet[v] != None:
                    Queue[k].ET = m-toilet[v].R
                    Queue[k].ST = Queue[k].A
                    Queue[k].R = Queue[k].WK
                    toilet[v].FS = toilet[v].ST + toilet[v].WK
                    toilet[v].R = 0
                    toilet[v] = Queue[k]
                if i != v:
                    if toilet[i]!=None:
                        toilet[i].R = Nature_minus(toilet[i].R,m)
                        if toilet[i].R == 0:
                            toilet[i].FS = toilet[i].ST + toilet[i].WK
                            toilet[i] = None
        else:
            lt.append(Queue[k])
            #print("1,0apend",Queue[k].Num)
            for i in range(M):
                if i in s :
                    if len(lt) > 1:
                        
                        toilet[i].FS = toilet[i].ST + toilet[i].WK
                        #print("前lt",lt[0].Num)
                        r = lt.pop(0)
                        #print("s",s)
                        #print("后lt",lt[0])
                        
                        #print("第{}号厕所的{}完成".format(i,toilet[i].Num))
                        #print("取出",r.Num,"进入{}厕所".format(i))
                        r.ST = toilet[i].FS
                        r.ET = 0
                        r.R = r.WK - (m-toilet[i].R)
                        toilet[i].R = 0
                        toilet[i] = r
                        #if k == 10:
                        #print("ST",toilet[i].ST,toilet[i].Num,k)
                    if len(lt) == 1:
                        toilet[i].FS = toilet[i].ST + toilet[i].WK
                        toilet[i].R = 0
                        e = lt.pop(0)
                        e.ST = e.A
                        e.R = e.WK
                        toilet[i] = e
                    if len(lt) == 0:
                        toilet[i].FS = toilet[i].ST + toilet[i].WK
                        toilet[i].R = 0 
                        toilet[i] = None


                else:
                    toilet[i].R = Nature_minus(toilet[i].R,m)
           

    else:
        B = None in toilet
        #if k ==2 :
            #L = toilet[2]
            #K = B
            #print(toilet[2])
        if B:
            #print("0,1",Queue[k].Num)
            v = toilet_None(toilet)
            for i in range(M):
                if i == v[0]:
                    Queue[k].ST = Queue[k].A
                    Queue[k].ET = 0
                    Queue[k].R = Queue[k].WK
                    toilet[i] = Queue[k]
                    #if k==2:
                        #print("asjdhaskjdhasd")
                if i not in v:
                    toilet[i].R = Nature_minus(toilet[i].R,m)

        else:
            #print("0,0",Queue[k].Num)
            for i in range(M):
                toilet[i].R = Nature_minus(toilet[i].R,m)
            lt.append(Queue[k])
            #print("append",Queue[k].Num)
    #for i in range(M):
     #   if toilet[i] != None:
            #print("Num,",toilet[i].Num,"R",toilet[i].R)
    #print("m",m)
while len(lt)!=0: #item已经到达,进入等待队伍
    #print("lt的长度",len(lt))
    v = toilet_which(toilet)
    x = toilet[v].R
    for i in range(M):
        if i == v:
            #print(toilet[v].Num,"在",v,"号厕所拉完",end="")
            toilet[v].FS = toilet[v].ST + toilet[v].WK
            toilet[v].R = 0
            r = lt.pop(0)
            #print(r.Num,"进入{}号厕所".format(v))
            r.ST = toilet[v].FS
            r.ET = 0
            r.R = r.WK
            toilet[v] = r
        else:
            toilet[i].R = Nature_minus(toilet[i].R,x)
for i in range(M): #处理器中剩下的工作
    toilet[i].FS = toilet[i].ST + toilet[i].WK
    toilet[i].R = 0
    #print(toilet[i].Num,"在",i,"号厕所拉完",end="")
    
    


A = []
ST = []
WK = []
FS = []
WT= []
for i in range(N):
    A.append(Queue[i].A)
    ST.append(Queue[i].ST)
    WK.append(Queue[i].WK)
    FS.append(Queue[i].FS)
    WT.append(Queue[i].WT)
A = np.array(A)
ST = np.array(ST)
WK = np.array(WK)
FS = np.array(FS)
WT = np.array(WT)
WT = ST - A
    
    
    
sns.set(style = "ticks", context = "notebook")
fig = plt.figure(figsize = (8,6))
arrivingtime, = plt.plot(A,label = "arrivingtime")
startingtime, = plt.plot(ST,label = 'startingtime')
workingtime, = plt.plot(WK,label = 'workingtime')
finishtime, = plt.plot(FS,label = 'finishtime')
waitingtime, = plt.plot(WT,label = 'waitingtime')
plt.title(("Queuing problem random simulation experiment about {} people to {} toilets".format(N,M)).title())
plt.xlabel("Arriving Time(min)")
plt.ylabel("Total Time(min)")

plt.legend(handles=[arrivingtime,startingtime,workingtime,finishtime,waitingtime],
           loc = 'upper left')

plt.show()   
print("{}个厕所{}分钟,对于{}人,平均每人等待{}分钟".format(M,K,N,np.mean(WT)))

N = 100 # 需要上厕所的人数
M = 6 # 坑位
K = 10 #K分钟内所有人到达厕所
图像如下:

仿真图像

N = 100 # 需要上厕所的人数
M = 2 # 坑位
K = 10 #K分钟内所有人到达厕所
图像如下:
在这里插入图片描述可见,坑位增多可以显著减少平均等待时间。

以上是对于排队论的简单认识与实现,需要改进的地方有:
1.考虑残疾人与幼儿坑位,拟用增加一个单坑位代码,最后数据合并。
2.考虑特殊情况需要插队,拟用在对象中加入需要插队的反应器。
3.考虑男女厕所 ,拟用双等待队列。
4.考虑等待时间过长,有人放弃在此处上厕所,拟用在对象中加入放弃上厕所的反应器。

以上是我的拙见,coding过程中修改了四次,应该将算法考虑完善,再考虑完整coding。最后如果要使用大规模的仿真,建议大家学习Simpy库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现排队论——多坑位仿真(未使用仿真库,纯手写仿真) 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重

随机推荐

  • 对接微信公众号的流程

    前言 最近对接一个新的微信公众号 功能比较简单 但是不熟悉微信公众号对接流程的同学可能需要花些时间阅读官方文档和调试 笔者对接过程也是一波三折 于是把流程分享出来帮助没有对接过的同学 对接流程 首先 开发微信公众号的相关功能一般是公司新申请
  • tkmybatis自定义xml报错

    刚刚再写一个项目 然后项目使用的是tk mybatis 后面我有在项目中引入了mybatis plus 想使用公司的自动生成类的文件 当引入进来后 我以为一切都是水到渠成的 当一执行 它给我报个这个错 我一看这个先去配置文件看了下 配置的路
  • 常用C#代码

    常用C 代码 获取系统路径 1 获取电脑的路径 string dir Environment GetFolderPath Environment SpecialFolder DesktopDirectory 获取系统桌面目录路径 strin
  • sql注入基础

    0x01sql语句基础 1 select语句 格式 select from table 从table表中获取字段信息 select from table where 在满足where后的条件下查询字段信息 2 insert语句 格式 ins
  • STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

    目录 使用硬件 分步骤 配置TCP连接 连接WIFI 1 使用ESP8266的复位引脚进行复位 2 发送基本AT指令 3 连接新大陆 4 新大陆云平台显示在线及上传数据测试成功 5 串口显示 5 涉及的函数 发生AT检测WIFI模块错误 如
  • JetBrains设置inline hint的背景色、前景色

    如题 修改IDE的hint前景色和背景色 修改后结果
  • 元宇宙的价值究竟在哪 有哪些方向值得重点关注?关于元宇宙进行详细介绍

    1992年 第一次经济危机持续至此给全球带来了极大的打击 而在互联网行业 网络不再是政府和军队专属的使用品 Dephi开始为他们的客户提供在线网络服务 并逐渐的从电子邮件服务发展到了全方位的网络服务 这一年对于整个互联网而言具有里程碑的历史
  • 【Vue3】vite配置css 的sourceMap ,以及文件引用配置别名

    Vite 2 9配置浏览器加载 CSS 源映射 vite config ts 有一个devSourcemap属性css可以设置为true 这是vite config ts我目前正在使用的文件 export default defineCon
  • [论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典)

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇总结了Powershe
  • 仿真软件都在这里了!20+国内外自动驾驶仿真软件大盘点

    编辑 智车科技 原文链接 https mp weixin qq com s nG48GndQVb7rFtMdjYUU3Q 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 仿真测试 技术交流群 导
  • 生态伙伴

    法律人的日常工作中 离不开案例文书 法律法规的检索 而如何高效 便利的进行内容检索 一直困扰着法律人 本期飞书生态伙伴 觅律搜索 是一款专门为法律人量身定制的智能法律信息检索工具 收录超过5000万份裁判文书 权威案例 法律法规 律师律所等
  • Thymeleaf 提示: Cannot perform conversion to XML from legacy HTML:

    SpringBoot 1 5 x 集成Thymeleaf 2 1 x 提示如下错误信息 http nio 9096 exec 1 ERROR org thymeleaf TemplateEngine THYMELEAF http nio 9
  • 加密货币:我们为何而战?

    在 加密货币 领域中肆虐的冲突是无止境的 这些激烈的争论冲突涉及到各个方面 参与各方也几乎不去尝试达成双方都能接受的妥协让步 有趣的是 站在这些争议焦点的对立面往往是同一群人 从加密货币极繁主义和财富的分配 到治理和共识算法等等 这些争议的
  • Ubuntu/linux 下安装jdk和eclipse,超详细教程

    1 首先下载jdk和eclipse jdk官方下载网址 http www oracle com technetwork java javase downloads index html 官方有时候下的很慢很慢 百度网盘现成的jdk8 htt
  • 保研之路——中山大学数据科学与计算机学院直硕夏令营

    中山大学数据科学与计算机学院直硕夏令营 个人情况 高校复试参与情况 中山大学数据科学与计算机学院直硕 7 14 7 20 结语 嗯 抱着不白花这么多路费住宿费的初衷准备写一个保研经验贴 希望学弟学妹少花点钱吧orz 我的战术大概是只要学校给
  • stm32实用篇4: stm32数据类型长度

    由于经常会忘记stm32的数据类型长度 测试一下 DEBUG INFO stm32数据类型长度 DEBUG INFO char d byte sizeof char DEBUG INFO short d byte sizeof short
  • 算法:归并排序和快排的区别

    一 二者比较 归并排序和快排的相同点 1 利用分治思想 2 具体实现都用递归 归并排序和快排的不同点 1 先分解再合并 归并排序先递归分解到最小粒度 然后从小粒度开始合并排序 自下而上的合并排序 2 边分解边排序 快速排序每次分解都实现整体
  • Educoder_web实训作业——写在最后

    今天终于把最后一章的web发了出来 这也是我第一次完整的将一个实训作业写成一个专栏推送 其实 这不是我第一次做关卡答案的文章了 上个学期Java实训的时候 由于当时自身也有很多题不是特别清楚 就上网搜了一下 没想到发现网上面已经有人开始再发
  • MFC中OnTimer定时器用法

    一 单个定时器用法 定时器工作主要流程 设置定时器SetTimer 时间到后调用OnTimer函数 关闭定时器KillTimer 可以在程序初始化用SetTimer函数弄成多个线程类似 并行进行多个函数功能 1 1 SetTimer H n
  • Python实现排队论——多坑位仿真(未使用仿真库,纯手写仿真)

    Python实现排队论 多坑位厕所 在一次偶然机会 接触到运筹学的排队论问题 于是简单尝试了一下硬撸代码 纯手打仿真 没有使用仿真库 建议大家可以学习Simpy库 用以仿真 一 案例 主要是基于 蒙特卡罗思想 求解 单坑位 排队等待时间问题