2.统计指标的计算和模拟的控制

1.统计指标的计算
  (1)平均等待时间
    在到达进入等待队伍的时候记录开始等待的时间,在离开队伍占用设备的时候计算等待的时间。
  (2)平均队伍长度
    在等待队伍长度变化的时候,计算该队伍长度持续的时间*队伍长度,最后汇总再除以总模拟时间。
  (3)设备利用率
    总忙碌时间(总时间-设备空闲时间)/总时间
  (4)平均停留时间
    (等待时间+服务时间)之和/总时间

2.模拟结束的控制
  (1)匆忙地结束
     将结束作为一个事件,一旦选择到该事件,模拟离开结束。while条件为true
  (2)优雅地结束
     设一个标志lock表示应该结束模拟--while条件,添加结束事件。

    方法一:
     在选择事件发生地函数里,当离开和结束事件的发生时间一致时,优先选择离开事件。
   结束事件:
        a.停止客户继续到达(下一到达事件发生时间无穷),
        b.若设备闲,设置lock=0,则while条件将不再成立,模拟将会结束;不让结束事件再次发生(设置发生时间无穷);
        c.若设备忙,则再推迟结束时间发生的时间(将其时间赋值为离开事件发生地时间,即等待没服务完的服务完离开)。

    方法二:
      离开事件:当队伍空时,设备设置为闲,然后判断是否应该结束了,若应该结束,则将当前时间赋值给结束事件,让结束事件立即发生;安排下一个离开事件发生的时间无穷。
      结束事件:不让客户继续到达,若设备闲,lock=0,结束while;若设备忙,设置结束事件发生时间无穷,设置应该结束的标志为true。

     一个是不断地推迟结束事件的发生直到设备为闲。
     一个是在该结束时通知离开事件,然后结束事件等待离开事件唤醒结束事件。

   本程序采取第一种方法:
void endSimulation(){
    events[0]=INFINITE;
    if(status==1){
      events[2]=events[1];

        }else{
             isEnd=1;
             events[2]=INFINITE;

            }

    }


事件选取程序:
int MinEvents(){
   int minLocation=1;
   float min=INFINITE;
  for(int i=0;i<=2;i++){
       if(events[i]<min){
             min=events[i];
             minLocation=i+1;
           }
       }
       return minLocation;
}


main函数
int main()
{
    initSimulation();

    while(isEnd!=1){
        switch(MinEvents()){
            case 1:
              arrive();break;
            case 2:
              depart();break;
            case 3:
              endSimulation();break;
            }
        }
   reportSimulationResult();
    return 0;
}

各种指标的计算见附件程序。

你可能感兴趣的:(C++,c,C#)