- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排队论的应用及其计算机解法
排队论的应用及其计算机解法
问题的提出:
在校医院就诊时,我发现外科诊室共有六张诊台,而且经常六张诊台中总有一两张会被闲置下来。据此现象,我便想到了应如何利用运筹学知识来根据就诊人数配置诊台的问题。
问题模型:
此类问题属于排队论的范畴。首先根据诊台为多数个确定其为多服务台问题。其次,考虑到若采取多队方式会因各接待人服务效率不同而造成队伍之间人数的不平衡,不能使系统达到最优配置,故将模型定为单队多服务台型。具体框图如下:
单队多服务台型
设共有c个诊台,每个医生的平均服务率均为。在正常情况下,病人的平均到达率为,则时间内有一个病人到达的概率为,在时间内有一个病人离去的概率为。
问题解决:
分三种情况考虑:
当无病人时,三种互不相容事件的概率分别为:
在时间t内没有病人排队,时刻也没有病人到达的概率为。
在时间t内有一个病人,内没有顾客到达,但有一位病人接受诊断后离去的概率为。
在时间t内没有病人排队,但在时刻内有一位病人到达,也有一位病人接受诊断后离去的概率为。
则
略去二阶小量,整理得 。
当已有n个病人,且时,可分为以下四种情况:
时间t内有n-1个病人在排队,时刻内有一位病人到达,但没有任何病人被诊断的概率为。
时间t内有n+1个病人在排队,时刻内没有病人到达,但有一位病人接受诊断后离去的概率为。
时间t内有n个病人在排队,时刻内没有病人到达,也没有任何病人被诊断的概率为。
时间t内有n个病人在排队,时刻内有一个病人到达,也有一位病人接受诊断后离去的概率为。
病人数时,与情况(2)类似,但相应的概率分别为:
由上面的公式得到:
,
,
解得:
程序流程图
由此可得,
平均病人数目为,
每个病人平均候诊时间为
问题的深入:
以上仅仅求得了平均病人数目和平均就诊时间,我们可以明显的看到,当有一个诊台数目c时就可以得到对应的平均病人数目和平均就诊时间,但我们并不能判断何时系统的诊台配置为最优,为此我们将此问题进一步加以深入。假设加权系数,使得问题化为求,即适当选取c值使得系统有最小值,则认为此时的c值即为最优选择。将问题进一步简化,令,则原问题简化为求。
由上一步结论可见,在病人平均候诊时间中含有c的阶乘及乘方项,很难对此问题进行求解。为此查阅了有关的书籍及资料,但均未能找到相应的解法。无奈只有自己设计了一个计算机解法,但仍有一定的局限性。计算机解法的流程图如上图所示。
计算机求解
以下是该排队算法的源程序清单(C语言版)
#include stdio.h
long fang(float x,int n)
{long y=1;
int i;
for(i=0;in;i++) y=y*x;
return (y);
}
long jie(int n)
{int i;
long y=1;
for(i=1;i=n;i++) y=y*n;
return (y);
}
main( )
{double w,u,y,l,p,z,m,k,b,a,s=0;
int c,i,n,j=10,h=10;
printf(Please input u,l,k!\n);
scanf(%f,%f,%f,u,l,k);
for(c=1;c=j;c++)
{for(i=c-1;ic;i++)
{s=fang(l,i)/jie(i)+s;
y=s;
}
a=c*u;
b=a-l;
y=y+fang(l,c)/(jie(i)*b/a);
p=1/y;
w=u*fang((l/u),c)*p/jie(c-1)/fang((c*u-l),2);
z=w+k*c;
if(c==1) m=z;
if(zm)
{m=z;
n=c;
}
if(n==j) j=j+h;
else if(j10nj-h) j=j+h;
}
printf(%f,%d,m,n);
}
小结
俗话说,要学以致用,学于生活,我们所学到的知识只有灵活运用于生活当中才有更大的价值,运筹学等应用数学尤其如此。关于这道题主要的灵感来源于生活当中小事(在医院排队),但是每一件小事如果深入研究都会有好的收获。由于本人的数学功底的限制,暂时无法给出这种类型的题目的最优解,只用通过计算机仿真来实现最后的最优预测。
相关参考书目:
《运筹学方法及其BASIC语言程设》 王修才
j10nj-h?
n=j?
结束
打印结果
否
否
是
c=c+1
是
否
是
否
j=j+h
是否为最小?
保存及令n=c值
cj?
求出的值
确定初始值j及步长h
c=1
主函数
读入u,l,k的值
是
文档评论(0)