离散事件动态模拟通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率.

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 03:26:54
离散事件动态模拟通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率.

离散事件动态模拟通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率.
离散事件动态模拟
通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率.实现中,可以电影院代表银行活动的对象,用事件驱动来模拟这些活动,并以概率(随机数发生器)来描述预期的客户到达率和银行职员为一个顾客服务所需的时间.
在实验中,可改变参数,如银行窗口数、客户的到达率、服务时间等,测试银行的服务效率.要求在各种情况下,模拟测试都能得到合理的运行结果.
银行模拟的关键部分为客户时间,包括到达和离开事件,刚达到的顾客通过随机数产生下一个顾客的到达,已到达的顾客通过随机数产生服务时间,选择最早空闲的窗口后,可生成离开事件;所有事件都被加上时间戳,放到优先队列中,队列中优先级最高的事件就是时间戳最早的事件.
采用数据结构c++实现

离散事件动态模拟通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率.
#include
#include
#include
#include "start.h"
#include "test_dig.h"
#include "d_time24.h"
#include "d_except.h"
#include "event.h"
#include "windows.h"
#include "myMultyueue.h"
using namespace std;
int window_num;
double rand_arr;
time24 start_time,end_time;
void build(time24 first,time24 end,int w,double r);
int main()
{
start(); //欢迎
test_dig(start_time,end_time,window_num,rand_arr);//输入测试数据

srand((unsigned)time(NULL)); //生成第一个顾客
int first=rand()%5+1; //到达的时间
time24 first_custom; //
first_custom=start_time+first; //
cout< cout< build(first_custom,end_time,window_num,rand_arr); //核心函数
system("pause");
return 0;
}
void build(time24 first,time24 end,int w,double r)
{
windows wind[100]; //定义窗口
for(int i=1;i<=w;i++)
{
wind[i]=windows(i); //初始化窗口
}
event first_custom(first,r); //定义第一个客户到达
myMultyqueue bank;
bank.push(first_custom); //压入第一个客户
while(!bank.empty())
{
event temp;
temp=bank.top(); //弹出事件
bank.pop();
time24 now=temp.get_time(); //得到当前事件的时间
bool have_window=false;
int num;
if(temp.is_arr()) //是到达事件
{
temp.set_servetime(); //设置当前事件的服务时间
for(int i=1;i<=w;i++) //寻找窗口
{
if(wind[i].is_free())
{
have_window=true;
num=i;
break;
}
}
if(have_window) //找到窗口
{
wind[num].set_free(false); //置忙
wind[num].add_serveper(); //增加总服务人数
wind[num].add_totservetime(temp.get_servetime());//增加总服务时间
temp.set_window(num);//设置事件发生的窗口
event left(now+temp.get_servetime(),num);//在该窗口生成离开事件
bank.push(left);
}
else//没有空闲窗口
{
event top;
top=bank.top(); //继续得到下一个事件
time24 next=top.get_time(); //下一个事件发生的时间
int next_window=top.get_window(); //下一个事件发生的窗口
time24 t=next-now; //两个事件的时间差,即等待时间
temp.set_window(next_window); //下一个事件的发生窗口设置成当前事件的离开窗口
wind[next_window].add_serveper(); //窗口服务人数加一
wind[next_window].add_totservetime(temp.get_servetime());//增加窗口服务时间
wind[next_window].add_totwaittime(t);//增加窗口的等待时间
event left(next+temp.get_servetime(),next_window);//生成离开事件
bank.pop();
bank.push(left); //压入其离开事件
}
temp.set_nextcustom();
time24 next_arrcustom=now+temp.get_nextcustom();//定义下一个客户到达的时间
event next_arr(next_arrcustom,r);
if(next_arrcustom {
bank.push(next_arr);
cout<<" 下一个客户:"< }
cout< }
else//是离开事件
{
wind[temp.get_window()].set_free(true);
}
}
int serve=0,wait=0,person=0,flag=0;
time24 max_waittime(0,0);
cout<<"\n银行从"< for(int a=1;a<=w;a++)
{
cout< serve+=wind[a].get_totservetime();
wait+=wind[a].get_totwaittime();
person+=wind[a].get_serveper();
if(max_waittime {
max_waittime=wind[a].get_maxwaittime();
flag=a;
}
}
time24 tot_servetime(0,serve),tot_waittime(0,wait);
cout<<"\n银行总服务时间为:"< return ;
}

离散事件动态模拟通过程序动态模拟银行顾客在一家有n>=2个窗口的银行的到达和离开的情况.通过计算每位顾客的平均等待时间及每一窗口处于“繁忙”状态的百分比,来计算银行的服务效率. 化工中为什么需要动态模拟 ansys里能实现动态模拟吗像模拟轴承在转动时的发热情况的 ansys动态模拟:给物体的某个点施加一个位移,然后模拟出物体的变形,用ansys可以实现吗?求参考资料 急求GCL并联二阶电路的动态响应的Multisim的模拟(附上Multisim的电路啊), TERA二测中的野外动态事件, 什么是裂痕?《时空裂痕》动态事件详解 动态射极偏置电路求输出电阻怎么出来一个Rce 咋出来的?基极分压式射极偏置电路的动态分析,那个电路在模拟电子技术的137页(华中科技大学版) 高二地理:动态模拟地球海平面变化及其趋势,采用的地理信息技术应为为什么是地理信息系统,不是数字地球呢? 动态电路 动态市盈率 模拟线号 和 数字信号 那个是离散的?RT matlab中如何将一个模拟函数转变为离散函数 计算机控制系统:画图说明模拟信号,离散信号和数字信号. 简述你对模拟信号,离散信号,数字信号的理解. 模拟水价听证会的活动程序 编写程序模拟带括号的计算器 英语翻译现代工程建设项目面对高度不确定的内外环境,项目动态风险管理对于企业实现长期稳定发展愈发显得重要.文章通过对风险事件的描述和动态管理的动态循环过程的分析,初步提出了