我目前正在努力工作并扩展“离散事件模拟”教科书第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过程从文件中读取下一个到达时间和服务时间。
答案 0 :(得分:2)
只是查看伪代码,您似乎只需要一个a
a
,i
,c
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;
第一个出发时间设为零
如果不清楚,请告诉我