Общее описание - Смысл программы

Разберемся, что же это такое – в чем смысл этой программы.

Здесь левая колонка – это номера строк модели: произвольные положительные числа в порядке возрастания. Строки нумеруются не: 1, 2, 3 и т.д. Удобнее всего нумеровать их так, как показано: 10, 20, 30 и т.д. Это позволяет легко вставлять новую строку между любыми двумя уже введенными строками и присваивать ей номер, например 15, 25, 26 и т.п. В системе GPSS World можно не нумеровать строки.

Следующие две колонки – названия операторов и поле переменных. Рассмотрим, какие же операторы входят в модель, и для чего они предназначены.

Блок GENERATE порождает транзакты (клиентов) через каждые 20 ± 10 единиц времени (в данном примере считаем единицу времени минутой). Число 20 в первом операнде (в поле A) указывает интервал модельного времени, через который генерируются транзакты. В поле B записано число 10, которое задает временные границы интервала, т.е. время прихода очередного клиента получается как случайное число в промежутке от 20 – 10 = 10 до 20 + 10 = 30.

Таким образом, первый блок модели выдает через случайные интервалы времени транзакты, которые изображают приходящих в парикмахерскую клиентов.

Блок SEIZE 1, в который поступают транзакты из блока GENERATE, выполняет операцию занятия транзактами устройства номер 1.

В нашей модели устройство соответствует креслу парикмахера или самому парикмахеру. Транзакты, появляющиеся в блоке GENERATE в моменты, когда устройство занято, остаются в этом блоке в очереди к устройству.

Блок ADVANCE 19, 5 задерживает транзакт, который занял устройство, на 19 ± 5 единиц времени, моделируя тем самым задержку клиента на время его обслуживания.

По истечении этого времени транзакт переходит в блок RELEASE 1, в котором вы­полняется освобождение устройства номер 1, и далее поступает в блок TERMINATE, в котором транзакты уничтожаются. Конечно, это не означает, что кли­ен­ты после стрижки тоже уничтожаются, просто клиент уходит из системы, значит, тран­закт, моделирующий его, больше нам не нужен. Мы уничтожаем транзакт, чтобы не нужно было описывать его дальнейшее движение и чтобы освободить занимаемую им память компьютера.

В тот момент, когда один транзакт освобождает устройство, другой транзакт, сто­я­щий в очереди, занимает это устройство. Оба действия выполняются в один и тот же момент модельного времени. Когда один транзакт находится в блоке ADVANCE, дру­гие транзакты время от времени появляются в блоке GENERATE и становятся в оче­редь к устройству. Следовательно, в модели одновременно в разных ее местах дви­жутся несколько транзактов, выполняя те или иные операции, и могут влиять друг на друга и на другие объекты модели.

Здесь мы наблюдаем, параллельное выполнение нескольких процессов в одной программе, в которой и заключается существенное отличие языка GPSS от обычных ал­горитмических языков, языков программирования. Это отличие делает язык ими­та­ци­онного моделирования GPSS мощным средством описания реальных систем, так как в реальных системах разные процессы в разных частях системы развиваются одновременно и при этом взаимодействуют между собой.