В настоящее время я пытаюсь работать и расширять алгоритм, указанный в текстовом издании "Discrete-event Simulation" pg 15. Знания C++ ограничены, это не проблема домашних заданий, просто хочу понять, как подойти к этой проблеме в C++ И понять, что происходит. Я хочу иметь возможность вычислить 12 задержек на одном сервере FIFO-сервисе.
Алгоритм в книге следующий:
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 читают следующее время прибытия и обслуживания из файла.
Просто глядя на псевдокоде, кажется, что вы просто нужен 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;
i
никогда не привыкаю. Также распространенным способом вычисления задержки является delay = max(ca, 0)
.
Если я правильно понимаю код, d_1, d_2,..., d_n - это задержки, которые у вас есть, количество задержек зависит от количества обрабатываемых заданий. в то время как (больше рабочих мест для обработки)
таким образом, если у вас есть 12 процессов, у вас будет 12 задержек.
В общем случае, если время прибытия меньше, чем предыдущее время отправления, тогда задержка - это предыдущее время отправления - текущее время прибытия
if (a_i < c_i-1)
d_i = c_i-1 - a_i;
первое время отправления устанавливается равным нулю
если что-то неясно, дайте мне знать