C ++中的离散事件仿真算法1.2.1

时间:2014-09-11 18:57:24

标签: c++ simulation

我目前正在努力工作并扩展“离散事件模拟”教科书第15页中给出的算法。我的C ++知识是有限的,这不是家庭作业问题只是想了解如何在C ++和amp中解决这个问题;明白了什么。 我希望能够在单服务器FIFO服务节点中计算12个延迟。

本书中的算法如下:

Co = 0.0;  //assumes that a0=0.0
i = 0; 
while (more jobs to process) {
    i++;
    a_i = GetArrival ();
    if (a_i < c_i - 1)
        d_i = c_i - 1 - a_i;  //calculate delay for job i
    else
        d_i = 0.0;            // job i has no delay
    s_i = GetService ();
    c_i = a_i + d_i + s_i;    // calculate departure time for job i
}

n = i; 
return d_1, d_2,..., d_n

GetArrival和GetService过程从文件中读取下一个到达时间和服务时间。

2 个答案:

答案 0 :(得分:2)

只是查看伪代码,您似乎只需要一个a aic c i-1 }在步骤d,以及一组c_0 = 0来存储延迟。我假设您的伪代码中的第一行是Co = 0而不是std::vector<int> d; int c = 0; int a, s; while(!arrivalFile.eof() && !serviceFile.eof()) { arrivalFile >> a; int delay = 0; if (a < c) delay = c - a; d.push_back(delay); serviceFile >> s; c = a + delay + s; } return d; ,否则代码没有多大意义。

现在这里是伪代码的C ++版本:

{{1}}

答案 1 :(得分:0)

如果我理解正确的代码,d_1,d_2,...,d_n是您的延迟,延迟的数量取决于要处理的作业的数量。而(更多工作要处理)

因此,如果您有12个流程,则会有12个延迟。

一般来说,如果到达时间小于之前的出发时间,则延迟是前一个出发时间 - 当前到达时间

if (a_i < c_i-1)
  d_i = c_i-1 - a_i; 

第一个出发时间设为零

如果不清楚,请告诉我