数模准备过程中,写了这种运筹学仿真的代码,虽然自己选了C题没有用到,但考虑到市面上存在的仿真代码较少,聊以为分享。
文档介绍
本文档使用了Python的离散事件仿真库对于排队论模型进行了仿真
仿真的主要目的是提供个性化定制,如对分布的设定,对排队规则的设定等。通过蒙特卡洛模拟得到复杂规则下难以得到的数值解。
本文档提供了:
基础排队模型仿真
Erlang分布实现
通用分布函数适配器
工具库
库依赖
from numpy.random import *
from simpy import *
高阶函数随机数生成器
输入:分布函数,单一参数(多参数请柯里化)
输出:随机数
def rng(dis,param):
"""random number generator"""
def generate():
return dis(lam=param,size=1)[0]
return generate
Erlang分布函数:
输入:阶数
输出:k阶erlang分布函数
def erlang(k):
"""由k个指数分布拟合"""
def exp2erlang(lam,size):
res=[]
for n in range(size):
k_poisson= exponential(lam/k,size=k)
sum=0
for x in k_poisson:
sum = sum + x
res.append(sum)
return res
return exp2erlang
测试,计算分布期望
x=rng(erlang(10),10)
sum=0
for i in range(10000):
sum= sum+x()
print(sum/10000)
结果为9.99565983119657,说明函数正确
FIFO队列模型
#典型银行模型:FIFO
def bankSample(X,Y,Z,A,B,EX):
"""
银行排队服务例子
情景:
一个柜台对客户进行服务, 服