管理信息系统课程设计报告书.docx
《管理信息系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《管理信息系统课程设计报告书.docx(28页珍藏版)》请在冰豆网上搜索。
管理信息系统课程设计报告书
XXX工学院
课程设计报告
作者:
XXX
学号:
XXX
学院:
XXXX
专业:
XXXX
课程:
管理信息系统模拟
指导教师:
XXXX
2016
年
12
月
1背景知识阐述
离散系统模拟是指系统状态仅在某些确定的时间点(由系统结构决定)才发生变化的模拟,其模拟时间呈现离散性变化,系统状态在时间点之间不变化。
2问题简介与分析
2.1离散系统模拟
(1)单服务台排队系统(M/M/1)模拟分析与设计
(2) 有顾客损失的多服务台排队系统(M/M/S)模拟分析与设计
2.2连续系统模拟
(1) 捕食者与被捕食者模型模拟分析与设计
(2)网民数量扩散模型(BASS模型)模拟分析与设计
2.3多智能体系统模拟
(1) 萤火虫优化系统模拟
(2) 蚁群优化系统模拟
3模拟系统与程序的分析与设计
3.1离散系统
3.1.1单服务台排队系统(M/M/1)模拟分析与设计
已知顾客到达时间和服务时间的统计规律(通常来自实际数据或一定的概率分布)的情况下,如何仿真该排队系统。
系统假设:
(1)顾客源是无穷的;
(2)排队长度没有限制;
(3)到达系统的顾客按先后顺序依次进入服务。
已知条件:
(1)顾客到达时间间隔ki服从均值为βi的指数分布,即:
(2)服务员服务时间ks服从均值为βs的指数分布,即:
试对该单服务台排队系统进行分析、设计、模拟,并给出
(1)βi=5min,βs=4min;
(2)βi=5min,βs=5min;
(3)βi=4min,βs=5min;
三种情况下的模拟结果(到达顾客数、服务顾客数、平均等待时间、平均服务
时间、平均队长)。
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
一、系统分析
系统状态:
在任意时刻t
(1)排队等候的顾客数目L(t);
(2)服务员工作状态S(t)。
引起系统状态改变的行为称为事件,在排队系统中包含两类基本事件:
(1)顾客到达事件ak;
(2)顾客离去事件dk。
模拟时钟:
因为系统状态在ak、dk时刻发生改变,所以在模拟系统运行中,设
置时钟t,让t依事件发生的先后顺序,从一个事件的发生时刻推进到下一个事件的发生时刻。
变量设置:
(1)ik:
第k位顾客与第k-1位顾客到达时间间隔;
(2)sk:
第k位顾客服务时间;
(3)L(t):
排队等待的顾客数目;
(4)S(t):
服务员工作状态;
(5)ak:
第k位顾客到达时刻;ak=ak-1+ik(k=1,2,…)
(6)dk:
第k位顾客离去时刻;dk=max{ak,dk-1}+sk(k=1,2,…)
模拟过程分析:
(1)先根据时间间隔i和服务时间s的概率分布生成随机数ik、sk;
(2)再计算顾客到达时刻ak和离开时刻dk;ak=ak-1+ik
dk=max{ak,dk-1}+skk=1,2,…
(3)让时钟t按照到达时刻ak和离开时刻dk从小到大的顺序推进。
注意:
通常不是先生成i或s待用,而是时钟t推进到某一事件发生时,才生成
所需的i或s。
(4)设当前时钟为t,在每一个事件发生时,需要设置并记录4个数值:
L(t):
排队等待的顾客数目;
S(t):
服务员工作状态;
下一个顾客到达事件的发生时刻:
ARRIVETIEM
下一个顾客离开事件的发生时刻:
DEPARTTIME
二、单服务台排队系统模拟源程序:
functionout=MM1(mu1,mu2,T)%单服务台模拟系统
%mu1-顾客到达时间间隔服从指数分布;
%mu2-服务时间服从指数分布;
%T-模拟终止时刻
%----------------------初始化----------------------------------------------
t=0;%当前时间
tt=[t];%tt-时间序列
L=0;%L-队长
LL=[L];%LL-队长序列
S=0;%S-服务员状态
c=[];%c-顾客到达时间序列
b=[];%b-服务开始时间序列
e=[];%e-顾客离开时间序列
a_count=0;%a_count-到达顾客数
b_count=0;%b_count-服务顾客数
ARRIVETIME=0;%顾客到达事件
DEPARTTIME=0;%顾客离开事件
%----------------------模拟过程--------------------------------------------
whilet<=T
if(ARRIVETIMEt=ARRIVETIME;
if(S==0)%服务台空闲,开始服务
S=1;
s=exprnd(mu2);%生成服务时间
b_count=b_count+1;%更新服务顾客数
DEPARTTIME=t+s;%顾客离开时间
b=[b,t];%记录顾客开始服务时间
e=[e,DEPARTTIME];%记录顾客离开时间
else%若服务台忙
L=L+1;%更新队长
end
i=exprnd(mu1);%生成下一顾客到达时间
ARRIVETIME=t+i;%下一顾客到达时间
c=[c,ARRIVETIME];%记录顾客到达时间
a_count=a_count+1;%更新到达顾客数
else%顾客离开子过程
t=DEPARTTIME;
if(L>0)%有排队的顾客
L=L-1;%更新队长
s=exprnd(mu2);%生成服务时间
b_count=b_count+1;%更新服务顾客数
b=[b,t];%记录顾客开始服务时间
DEPARTTIME=t+s;%顾客离开时间
e=[e,DEPARTTIME];%记录顾客离开时间
else%若没有排队的顾客,更新服务台为空闲状态
S=0;
DEPARTTIME=T;
end
end
tt=[tt,t];
LL=[LL,L];
end
%----------------------模拟结果--------------------------------------------
length(e);length(c);
Ws=sum(e-c(1:
length(e)))/length(e);%平均逗留时间
Wb=sum(e-b(1:
length(e)))/length(e);%平均服务时间
Ls=sum(diff([tt,T]).*LL)/T;%平均队长
fprintf('到达顾客数:
%d\n',a_count)%到达顾客数
fprintf('服务顾客数:
%d\n',b_count)%服务顾客数
out=[Ws,Wb,Ls];
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
3.1.2有顾客损失的多服务台排队系统(M/M/S)模拟分析与设计
在该排队系统中,有多个服务台s。
顾客逐个到达系统,已知顾客到达时间
间隔是随机的,服从指数分布。
顾客在服务台的服务时间也是随机的,且服从
指数分布。
当有服务台空闲时,顾客接受服务;若排队顾客数超过k,则新到达
的顾客离去,问如何仿真该排队系统。
系统假设:
(1)顾客源是无穷的;
(2)到达系统的顾客按先后顺序依次进入服务。
已知条件:
(1)顾客到达时间间隔ki服从均值为βi的指数分布,即:
(2)服务员服务时间ks服从均值为βs的指数分布,即:
试对该多服务台排队系统进行分析、设计、模拟,并给出
(1)s=2,k=5,βi=5min,βs=4min;
(2)s=2,k=4,βi=3min,βs=5min;
(__________3)s=2,k=6,βi=2min,βs=5min;
三种情况下的模拟结果(到达顾客数、服务顾客数、平均等待时间、平均服务
时间、平均队长)。
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
有顾客损失的多服务台单服务台排队系统模拟源程序:
functionout=MMS(s,k,mu1,mu2,T)
%多服务台排队系统模拟
%s-服务台个数
%k-最大顾客等待数
%mu1-顾客到达时间间隔服从指数分布;
%mu2-服务时间服从指数分布;
%T-模拟终止时刻
%----------------------初始化----------------------------------------------
arrive_time=exprnd(mu1);%arrive_time-顾客到达事件
leave_time=[];%leave_time-顾客离开事件
current_time=0;%current_time-当前时间
L=0;%L-队长
LL=[L];%LL-队长序列
tt=[current_time];%tt-时间序列
c=[];%c-顾客到达时间序列
b=[];%b-服务开始时间序列
e=[];%e-顾客离开时间序列
a_count=0;%a_count-到达顾客数
b_count=0;%b_count-服务顾客数
e_count=0;%e_count-损失顾客数
%----------------------模拟过程--------------------------------------------
whilemin([arrive_time,leave_time])current_time=min([arrive_time,leave_time]);
tt=[tt,current_time];%记录时间序列
ifcurrent_time==arrive_time%顾客到达子过程
arrive_time=arrive_time+exprnd(mu1);%刷新顾客到达事件
a_count=a_count+1;%累加到达顾客数
ifL
L=L+1;%更新队长
b_count=b_count+1;%累加服务顾客数
c=[c,current_time];%记录顾客到达时间序列
b=[b,current_time];%记录服务开始时间序列
leave_time=[leave_time,current_time+exprnd(mu2)];%产生新的
顾客离开事件
leave_time=sort(leave_time);%离开事件表排序
elseifL
L=L+1;%更新队长
b_count=b_count+1;%累加服务顾客数
c=[c,current_time];%记录顾客到达时间序列
else%顾客损失
e_count=e_count+1;%累加损失顾客数