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=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;
}

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

你可能感兴趣的:(离散系统模拟)