本项目的题目、代码和实验报告已上传至GitHub
如果对你有帮助,欢迎点亮Star。
题目内容
1. VIP窗口
在原有代码基础上添加VIP窗口功能,VIP窗口的出纳员只服务VIP用户,当VIP用户到达后可以在本窗口按照到达先后顺序等待。
- 约定
- 约定1号出纳员所在的1号窗口为VIP窗口,且银行中只有一个VIP窗口。
- 约定普通用户只能在普通窗口排队等候,其选择窗口的优先级为:空普通窗口>非空普通窗口。
- 约定用户排队过程中选定窗口后就会一直在该队列中等待,不会更换排队队伍。
- 约定用户之间无法感知对方是处理何种业务,不知道其业务所需的具体时间和剩余时间。
- 约定模拟时间外不产生用户到达事件,但是银行将会处理完所有用户到达事件。
第一问(10分)
- 约定
- 约定VIP用户可以在普通窗口和VIP窗口排队等候,其选择窗口的优先级为:空VIP窗口>空普通窗口>非空VIP窗口>非空普通窗口。
本小题第一问将在去掉到达时间与服务时间随机化的情况下,对同学们的代码进行正确性验证。验证内容是增设VIP窗口对服务情况产生的影响。
请同学们按照如下提示修改代码:
// event.h
enum isVip {notVip, Vip};
struct event
{
...
isVip isvip;
...
};
// event.h
InitEvent(...)
CompareEvent(...)
// ...
...
以下文所示输入为例,时间处于0、4、8时分别到达一名随机身份的顾客,银行将安排窗口为顾客服务。对于8时到来的VIP用户,他所面临的的情况:在增设VIP窗口前,不区分顾客身份服务,8时到来的顾客面对两个非空串口的情况下将会选择随机选择一个窗口进行服务,VIP身份没有获得收益;在增设VIP窗口后,VIP用户在某些情况下可以比普通用户更快受到服务。
./bank
Enter the simulation time in minutes: 10
Enter the number of bank tellers: 2
Enter the range of arrival times in minutes: 4 4
Enter the range of service times in minutes: 9 9
分析下表(繁忙程度=实际服务时间/总服务时间):
第二问(30分)
- 约定
- 约定VIP用户可以在VIP窗口排队等候,或者在普通窗口队列中插队。(即排到普通窗口队列最前面)
- 约定插队的VIP用户在普通窗口中按照到达顺序先后进行排队。
- 约定VIP用户选择窗口的优先级为:空VIP窗口>空普通窗口>插队到普通窗口队列。
编程实现功能,不给出测试用例。
2. VIP限时等待
- 约定
- 约定只有出纳员服务完当前用户后,才会重新计算所有排队的用户中的VIP用户的等待时间,如果等待时间已到达最长等待时间,将优先服务等待时间长的VIP用户。
- 约定等待时间满的VIP顾客,可以更换柜台服务。即所有柜台出纳员会按照等待时间由长到短的顺序服务所有队列中的VIP用户。(对于VIP用户而言,打破最初不能更换队伍的约定)
- 无VIP窗口情况下,银行规定,VIP用户等待时间不得超过X分钟,VIP用户与普通用户之间设置排队策略。
请同学们按照如下提示修改代码,使得VIP用户最多等待waitHigh时间。注意:出纳员只需要照顾本队列中的VIP用户。
printf("Enter the longest waitting time the customer can tolerate in minutes: ");
scanf("%d", &s->waitHigh);
第一问(40分)
实现功能
3. 最佳排队机制(20分,酌情加分)
提示:如何决定三种等待时间的重要性?如何赋予不同的权重?如何在不同的权重设置下实现适宜的排队机制?请根据实验数据进行情况讨论。
本题为开放性思考题。综合考虑各类角色等待时间:被VIP插队的用户越多,普通用户越不满;VIP等待的时间越长,VIP越不满;有人排队但有窗口闲置时,银行不满。
请通过实验数据说明如何设置排队机制可能是最优的。
建议:参考题目设置,逐步放开随机化的元素进行分析,可站在用户的角度或者银行的角度说明。(请认真作答,自圆其说,合乎情理即可)
实验报告