2014-09-11 4 views
0

В настоящее время я пытаюсь работать и расширяться по алгоритму, приведенному в текстовом издании «Discrete-event Simulation» pg 15. Мои знания на C++ ограничены, это не проблема домашних заданий, просто хочу понять, как подойти к этой проблеме в C++ & понять, что будет. Я хочу, чтобы иметь возможность вычислить 12 задержек в односерверном сервисе FIFO.Алгоритм моделирования дискретных событий 1.2.1 в C++

Алгоритм в книге выглядит следующим образом:

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

Какого дискретный текст моделирование событий? Их десятки! – pjs

+0

@pjs дискретное событие Моделирование первого курса Лоуренса М. Лемиса и Стивена К. Парка – MassiveCoding

ответ

2

Просто глядя на псевдокоде, кажется, что вам просто нужно один a который a на этапе i, один c который c на этапе i-1 и массив d s для хранения задержек. Я предполагаю, что первая строка в вашем псевдокоде c_0 = 0, а не Co = 0, другой мудрый код не имеет большого смысла.

Теперь вот C++ - роскопия версия псевдокода:

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 и спасибо за ваш ответ, поскольку я начинаю освещать этот – MassiveCoding

+0

Обратите внимание, что 'i' никогда не используется. Кроме того, общий способ вычисления задержки - 'delay = max (c-a, 0)'. – pjs

+0

O да, 'i' не используется. обновил код. –

0

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

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

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

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

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

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

Смежные вопросы