该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一下是计算排队论中M/M/C模型的相关参数:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "math.h"
double ma=177.0,mb=235.0;
double la=27.027,lb=25.0,p0,ua,ub,u1=1.714,u2=1.500,u3=1.333,u4=2.000;
double pn(double n,double c,double m,double l,double u)//计算Pn的子函数
{ double i;
double pn,z,x;//z是分子(m!),x是分母
i=m-1.0;
z=m;
while(i>1.0)//计算m!
z*=i--;
i=m-n-1.0;
if(i==-1.0)
x=1.0; //0!=1
else
while(i>1.0)//计算(m-n)!
x*=i--;
if(n<=c)
{
i=n;
while(i>1.0)//计算(m-n)!*n!
x*=i--;
pn=z*pow(l/u,n)*p0/x;
}
else
{
i=c;
while(i>1)//计算c!
x*=i--;
x*=pow(c,n-c);
pn=z*pow(l/u,n)*p0/x;
}
return(pn);
}
void main()
{
double k,ca,cb,x1,x2,x3,x4,n,i,x,ax1,ax2,ax3,ax4;
double pa,pb,p0,lsa=0.0,lqa=0.0,la_,lb_,wqa,wqb,y1,y2,y,z1,z2,z,lsb=0.0,lqb=0.0,aver=1000.0;
for(x1=0.0,x2=10.0-x1;x1<=10.0;x1++) //对于A类展开计算
for(x3=0.0,x4=6.0-x3;x3<=6.0;x3++)
{ y=0.0;z=0.0; //累加器清零
ua=(x1+x3)*u1*u3/(x1*u3+x3*u1);
ub=(x2+x4)*u2*u4/(x2*u4+x4*u2);
ca=x1+x3;cb=x2+x4;
i=ma-1;
x=ma;
while(i>1)//计算m!
x*=i--;
pa=ma*la/(ca*ua);printf("pa=%lf\n",pa);
for(k=0;k<=ca;k++)//计算P0的分母第一项
{
i=k-1;
y1=k;
while(i>1)//计算k!
y1*=i--;
i=ma-k-1;y2=ma-k;
if(i==-1)
y2=1; //0!=1
else
while(i>1)//计算(m-k)!
y2*=i--;
y+=pow(ca*pa/ma,k)/(y1*y2);
}
i=ca-1;
z1=ca;
while(i>1)//计算ca!
z1*=i--;
z1=pow(ca,ca)/z1;
for(k=ca+1;k<=ma;k++)//计算P0的分母第二项
{
i=ma-k-1;z2=ma-k;
if(i==-1)
z2=1; //0!=1
else
while(i>1)//计算(m-k)!
z2*=i--;
z+=pow(pa/ma,k)/z2;
}
p0=1/(x*(y+z1*z));printf("p0=%lf",p0);
for(n=1;n<=ma;n++)
lsa+=n*pn(n,ca,ma,la,ua);
printf("lsa=%lf\n",lsa);//计算A类的平均队长
for(n=ca+1;n<=ma;n++)
lqa+=(n-ca)*pn(n,ca,ma,la,ua);//计算A类的平均等待队长
la_=la*(ma-lsa);//计算A类的有效到达率
printf("lea=%lf\n",la_);
wqa=lqa/la_;
y=0.0;z=0.0; //累加器清零
i=mb-1;
x=mb;
while(i>1)//计算m!
x*=i--;
pb=mb*lb/(cb*ub);printf("pb=%lf",pb);
for(k=0;k<=cb;k++)//计算P0的分母第一项
{
i=k-1;
y1=k;
while(i>1)//计算k!
y1*=i--;
i=mb-k-1;y2=mb-k;
if(i==-1)
y2=1; //0!=1
else
while(i>1)//计算(m-k)!
y2*=i--;
y+=pow(cb*pb/mb,k)/(y1*y2);
}
i=cb-1;
z1=cb;
while(i>1)//计算ca!
z1*=i--;
z1=pow(cb,cb)/z1;
for(k=cb+1;k<=mb;k++)//计算P0的分母第二项
{
i=mb-k-1;z2=mb-k;
if(i==-1)
z2=1; //0!=1
else
while(i>1)//计算(m-k)!
z2*=i--;
z+=pow(pb/mb,k)/z2;
}
p0=1.0/(x*(y+z1*z));printf("p0=%lf",p0);
for(n=1.0;n<=mb;n++)
lsb+=n*pn(n,cb,mb,lb,ub);printf("lsb=%lf\n",lsb);//计算B类的平均队长
for(n=cb+1.0;n<=mb;n++)
lqb+=(n-cb)*pn(n,cb,mb,lb,ub);//计算B类的平均等待队长
lb_=lb*(mb-lsb);//计算B类的有效到达率
printf("leb=%lf\n",lb_);
wqb=lqb/lb_;
if(((wqa+wqb)/2.0)
{
aver=(wqa+wqb)/2.0;//求平均等待时间的期望最小值
ax1=x1;ax2=x2;ax3=x3;ax4=x4;//并记录此时A、B救治单元的分配情况
}
}
printf("x1=%lf,x2=%lf,x3=%lf,x4=%lf,aver=%lf",ax1,ax2,ax3,ax4,aver);
}
求高手帮忙
,是不是编译器不给力啊,我用的是C语言学习系统,不是VC