Алгоритм моделирования дискретных событий 1.2.1 в C ++

0

В настоящее время я пытаюсь работать и расширять алгоритм, указанный в текстовом издании "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 читают следующее время прибытия и обслуживания из файла.

  • 0
    Какой текст моделирования дискретного события? Их десятки!
  • 0
    @pjs Моделирование дискретных событий - первый курс Лоуренса М. Лимиса и Стивена К. Парка
Теги:
simulation

2 ответа

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;
  • 0
    Да, вы правы насчет псевдокода c_0 = 0, и спасибо за ваш ответ, когда я начинаю понимать это
  • 0
    Обратите внимание, что i никогда не привыкаю. Также распространенным способом вычисления задержки является delay = max(ca, 0) .
Показать ещё 1 комментарий
0

Если я правильно понимаю код, d_1, d_2,..., d_n - это задержки, которые у вас есть, количество задержек зависит от количества обрабатываемых заданий. в то время как (больше рабочих мест для обработки)

таким образом, если у вас есть 12 процессов, у вас будет 12 задержек.

В общем случае, если время прибытия меньше, чем предыдущее время отправления, тогда задержка - это предыдущее время отправления - текущее время прибытия

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

первое время отправления устанавливается равным нулю

если что-то неясно, дайте мне знать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню