数学建模之排队论模型及代码
本人新手第一次搞了个博客,以前都是看别人写的博客,汲取别人的知识,今天自己也写一下自己的博客,分享一下自己的收获,希望对你有用。
言归正传,排队论是数学建模中很常见的数学模型,但因其涉及到专业知识,所以对于非理工专业的人来说,还是很有困难的。下面讲解一下,模型一般步骤:
第一步:数据的准备
即确定客户的来源符合什么分布,确定服务时间符合什么分布。比如大部分游客到达时间符合泊松分布,服务时间又符合指数分布。但请注意,符合什么分布,要结合你的数据进行分析。所以这里要涉及到分布验证的问题,一般而言,大都采用假设性检验。(是什么请关注博主,后期讲解。本文只讲模型,和代码)验证成功后,才能够说明你的数据符合什么分布,参数为多少(要先用SPSS先进行验证,然后进行假设检验,否则万一假设错了,就尴尬了)。
第二步:机构运行机制的模拟
你的服务机构的运行机制是什么,决定了你的客户将按怎样的方式进行出入。这样才能确定客户的到达时间,等待时间,离开时间。常用的有单服务台,多服务台,单人,多人一班次的模型。
第三步:计算机模拟
在确定了所有的因素之后,就可以通过计算机模拟进行仿真了。按照模型的思路一步一步来。(编程能力要有一定功底)
这里,小编给出了多人一班次的代码,注释很详细,你们可以按照它进行仿写,多练习练习。
clear clc to_time=600; L=10; a=30; lamda=5; mu =3; ser_mean = 1/mu; arr_num = round(to_time*lamda*2); qu(2,:)=exprnd(ser_mean,1,arr_num);%服务时间 qu(1,:)=poissrnd(1/lamda,1,arr_num); qu(1,:)=cumsum(qu(1,:));%到达时间 %逐步实验 %第一轮的模拟 s(1)=qu(1,a);%一轮开始的时间 e(1)=max(qu(2,1:a));%一轮逗留的时间段 for k=1:a qu(3,k)=s(1)+L+qu(2,k);%离去时间 qu(4,k)=s(1);%预测时间 qu(5,k)=s(1)-qu(1,k);%等待时间 end %第i轮模拟 for i=2:10000 %结束条件,采用结束时间进行判断 if(e(i-1)+s(i-1)+L>=to_time) break; end if(s(i-1)+L+e(i-1)
a)%超出规定人数时 s(i)=s(i-1)+e(i-1)+L;%开始时间 e(i)=max(qu(2,a*(i-1):a*i));%逗留时间 for k=a*(i-1)+1:a*i qu(3,k)=s(i)+qu(2,k)+L;%离去时间 qu(4,k)=s(i);%预约时间 qu(5,k)=s(i)-qu(1,k);%等待时间 end end end end %可视化处理 %满足条件对平均等待时间的影响 %figure; %x=1:c; %plot(x,dely(x),'-o'); %legend('x的性能曲线'); %预约时间,和到达时间 figure; x=1:a*(i-1); plot(x,qu(1,x),'-r',x,qu(4,x),'-b'); legend('到达时间','预约时间'); figure; plot(x,qu(4,x)-qu(1,x),'-o'); legend('预测需要多少时间后开始'); figure; plot(x,qu(3,x),'-o'); legend('离去时间');
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223341.html原文链接:https://javaforall.net
