高分求助:计算机仿真题目(离散事件系统仿真),回答好再追加,拜托各位高手啦!!

来源:百度知道 编辑:UC知道 时间:2024/05/02 02:22:00
超市收费模型

(1)模型假设:一小超级市场有4个付款柜,每个柜台为一位顾客计算货款数的时间与顾客所购商品件数成正比(大约每件费时1s),20%的顾客用支票或信用卡支付,这需要1.5min,付款则仅需0.5min。有人倡议设一个快速服务台专为购买8个或8个以下商品的顾客服务,指定另外两个为“现金支付柜”。

     请你建立一个模拟模型,用于比较现有系统和倡议的系统的运转。假设顾客到达平均间隔时间是0.5min,顾客购买商品件数按如下频率表分布:
件数: ≤8 9-19 20-29 30-39 40-49 ≥50
相对频率: 0.12 0.10 0.18 0.28 0.20 0.12

(2)仿真要求
①定义系统模型即实体、属性、状态、活动和事件
②描述每个事件的处理过程
③利用事件调度法设计仿真算法
④请选择适当的数据结构管理事件表
⑤对涉及的随机数作必要地检验

拜托各位知道多少说多少,我自己是完全不晓得从哪儿下手
是数学建模,用matlab做

一个比较复杂但是并不高深的题目,类成员函数的具体实现我就不写了

1、建立顾客类,大体如下
class Consumer
{
private:
int count;//购买商品件数
bool cash;//是否是用现金
public:
int Quantity();//返回购买商品件数
bool Cash();//返回是否是用现金
int Time();//付款过程耗时
void Generate();//按照频率分布表生成此顾客信息
};

2、建立柜台类
class Counter
{
private:
queue< pair<Consumer,int> > Q;//记录该柜台前排队的顾客的队列
int last_come;//记录正在柜台前付款的那个顾客来到柜台的时刻
public:
Counter();//构造函数,把队列清空,last_come设置为0
void Consumer_Come(Consumer,int);//第一个形参为该顾客的信息,第二个形参为该顾客开始排队的时间
int Pay();//模拟柜台前的各个顾客的付款,并返回完成的时刻
};

3、对现有系统的模拟
首先生成随机数n表示一共有n个顾客到来,然后生成这n个顾客的信息,然后按照0.5min的间隔将这n个顾客随机塞到4个柜台,然后付款,并记录最终完成时间
代码近似如下
n=rand();
for (i=0;i<n;i++)
{
Consumer now;
now.Generate();
counters[rand()%4].Consumer_Come(now,i*30);
}
end=0;
for (i=0;i<4;i++)
{
int now=counters[i].Pay();
if (now>end) end=now;