1.模拟机制:事件推动
模拟开始的时候,先从初始化的事件数组(链表等)里面查找发生时间最小的事件,让其发生,然后安排相关事件的下一次发生的时间,以此才推进时间的前移。
2.关键的元素:
(1)系统的状态:忙闲,故障是否发生
(2)实体
(3)事件的个数和类型
(4)事件的初始值
3.实例:
一个理发师,FIFO,顾客到达的时间间隔e(5),平均服务时间e(4)
事件:顾客的到达和离开
实体:顾客和理发师
指标:平均等待时间
事件分析:
(1)到达事件:
1.安排下一个到达事件的发生时间;
2.若设备忙,队伍长度+1,进入等待队伍,记录该顾客的开始等待的时间
若设备闲,则占用设备,设置设备为忙,安排其服务完成离开的时间
(2)离开事件:
1.完工数+1;
2.若等待队伍为空,则设备设置成闲的状态,设置下一个离开时间的发生时间无穷(即不发生离开事件)
若等待队伍不空,则安排队首的占用设备,队伍长度-1,计算它的等待时间,然后安排它服务完成离开的时间。
(3)C程序模拟:
main函数:
int main()
{
initSimulation();
while(isEnd!=1){
switch(MinEvents()){
case 1:
arrive();break;
case 2:
depart();break;
case 3:
endSimulation();break;
}
}
// cout<<totalTime;
cout <<"平均队伍长度:"<<sumQueueLength/totalTime<<endl;
return 0;
}
到达事件:
void arrive(){
if(status==1){
//统计队伍长度
// sumQueueLength+=queueLength*(events[0]-lastEventTime);
cout<<endl;
// cout<<"sumQueueLength+=queueLength*(events[0]-lastEventTime);"<<sumQueueLength<<"+="<<queueLength<<"*("<<events[0]<<"-"<<lastEventTime<<");"<<endl;
queueLength++;
//修改lastEventTime
// lastEventTime=events[0];
queue_l++;
queue[queue_l]=events[0];
}else if(status==0){
status=1;
ser_l++;
events[1]=events[0]+ser[ser_l];
}
printEventList(events[0],"arrive");
arr_l++;
events[0]+=arr[arr_l];
}
离开事件:
void depart(){
finishNum++;
float original_events1=events[1];
if(queueLength>0){
//统计队伍长度
// sumQueueLength+=queueLength*(events[1]-lastEventTime);
cout<<endl;
// cout<<"sumQueueLength+=queueLength*(events[0]-lastEventTime);"<<sumQueueLength<<"+="<<queueLength<<"*("<<events[1]<<"-"<<lastEventTime<<");"<<endl;
queueLength--;
//修改lastEventTime
// lastEventTime=events[1];
if(queue_s<=queue_l)
waitingTime+=events[1]-queue[queue_s];
queue_s++;
ser_l++;
events[1]+=ser[ser_l];
}else {
queueLength=0;
status=0;
totalTime=events[1];
events[1]=INFINITE;
}
printEventList(original_events1,"depart");
}
等待时间的统计:
在离开事件里面,若有队首元素占用设备,则统计其等待时间。
分享到:
相关推荐
3. **离散时间系统分析**:新增章节,介绍了数字技术中的离散时间系统分析方法。 4. **系统的稳定性分析**:讨论线性系统的稳定性和判断准则。 5. **状态空间表示法**:介绍如何用状态变量来描述系统行为。 6. **...
10. **离散系统**:在数字信号处理中,离散时间信号和离散系统的研究是核心内容,涉及到离散时间傅里叶变换、Z变换及其应用。 这些笔记详细阐述了上述各个知识点,帮助考生深入理解和掌握《信号与系统》课程的核心...
- 计算机按处理数据的方式分为数字计算机、模拟计算机和数模混合计算机,数字计算机处理离散的数字信息,模拟计算机处理连续变化的模拟信号,而混合计算机结合了两者的特性。 - 按规模和处理能力,计算机通常分为...
### 离散系统的模拟与理解 #### 一、离散系统的定义与特点 离散系统(discrete system)是一种特殊类型的系统,它的状态仅在有限或者可数的时间点上发生变化,这些变化往往是由随机事件驱动的。例如,常见的排队...
5. **频率偏移和相位噪声**:模拟实际信道中的频率偏移和相位抖动,测试系统对此的鲁棒性。 6. **滤波器设计**:设计和实现低通滤波器,用于恢复信号或消除噪声。 7. **MATLAB-C接口**:可能使用MATLAB的MEX文件功能...
模拟到数字转换是将连续的模拟信号转换为离散的数字信号的过程。这一过程主要包括两个步骤: 1. **采样**:按照一定的频率(采样率)截取模拟信号的值。根据奈奎斯特准则,采样率必须至少是信号最高频率成分的两倍...
- **描述**: 按数量级分类离散系统极点。根据极点的数量级排序离散时间模型的极点。 **6. esort** - **描述**: 按实部分类连续系统极点。根据极点实部的大小排序连续时间模型的极点。 **7. iopzmap** - **描述**: ...
相场法是一种用于研究多相系统演变过程的数值计算方法,特别适合于模拟金属合金、陶瓷材料等复杂系统的相变行为。在这个压缩包中,可能包含的是用于进行Fe-Cu-Mn合金相场模拟的相关程序、数据和文档。 "fe-cu-mn-ni...
2. **图论**:研究图形结构,即顶点和边组成的网络,用于模拟各种关系和系统,如社交网络、电路设计和路径规划。 3. **初等数论**:研究整数性质,特别是质数、因子分解和同余方程,对于密码学和安全性问题至关重要...
1. FDTD方法的基本原理和步骤,包括如何在时域中离散化麦克斯韦方程。 2. Yee网格的结构,它是FDTD方法的基础,通过在时间和空间上交替布置电场和磁场分量。 3. 如何在MATLAB中编写并行化代码以提高计算效率,因为...
5. 离散系统的分析中,例如H(z)=1+2z^(-1)/(1+0.4z^(-1)-0.12z^(-2)),我们可以求得单位冲激响应和输入为u(n)时的零状态响应。`impulse`和`filter`函数在离散系统分析中扮演着关键角色。 6. 对于离散因果系统,如H...
### 离散系统模拟与MATLAB应用 #### 一、离散系统的基本概念 离散系统(discrete system)指的是那些状态变化仅发生在有限或可数时间点上的系统。这类系统的特点在于,状态的改变是由特定的随机事件触发的,而非连续...
1. **案例一**:通过对制造系统的模拟,展示如何优化生产计划以最小化成本并提高效率。 2. **案例二**:利用随机计算机模拟来优化交通信号灯的时间控制,从而减少交通拥堵。 #### 六、结论 随机计算机模拟是一种...
离散系统模拟是一种重要的分析和优化复杂系统的工具,尤其在管理科学、计算机科学和工程领域。这个PPT学习教案提供了四个具体的案例,分别是餐厅服务系统、零件加工模型、零售商店模型和出租汽车服务模型,以及一个...
其中,“amp_qam16.slx”可能是一个Simulink模型文件,用于模拟或分析16-QAM系统的工作原理。Simulink是MATLAB的一个扩展工具,常用于设计和仿真各种控制系统,包括通信系统的模型。 在实际应用中,16-QAM被广泛...
1. **动态模拟**:可以对复杂的动态系统进行仿真,如化学工程、能源系统、生物医学工程等领域的过程模拟。 2. **优化**:提供优化算法,如梯度法、遗传算法、粒子群优化等,可用于寻找系统运行的最佳条件。 3. **...
PFC,全称为Particle Flow Code,是一款强大的离散元软件,广泛应用于地质工程、矿业工程、土木工程等领域,通过模拟颗粒间的相互作用来分析和预测土壤、岩石等多颗粒系统的力学行为。 在PFC中,流固耦合模拟是指将...
3. **模拟执行**:biosimulators_utils集成了多种模拟器,可以执行基于规则的、ODE(常微分方程)的和离散事件的仿真,覆盖了生物学模型的各种动态行为。 4. **结果分析**:库还可能包含工具,用于处理和可视化仿真...
脉冲传递函数是描述离散系统特性的另一种方法,它是系统的输出信号Z变换与输入信号Z变换之比,假设初始条件为零。对于简单的离散系统,脉冲传递函数可以表示为: \[ G(z) = \frac{Y(z)}{U(z)} \] #### 6. 线性采样...