27 марта 2004 г.

Как страшно жить...

 (Отзыв на книгу Кудрявцева Е.М. «GPSS World. Основы имитационного моделирования различных систем».)

 Не думай. Подумал – не пиши. Написал – не подписывай. Подписал – не издавай. Издал – не распространяй. Распространил – жди отзывов.

Модифицированная народная мудрость.

Как грибы после дождя, на книжном рынке России появляются книги об имитационном моделировании. Пальму первенства держит GPSS World, и это вполне объяснимо. Действительно, после длительного перерыва в руках многочисленных приверженцев этой ясной, простой, но в то же время мощной системы моделирования появился программный продукт, приближающийся по своей добротности к GPSS V, ушедшему в небытие вместе с ЭВМ ряда ЕС. А значит, должны появиться и книги, помогающие его освоить.

И они появились. В моих руках одна из них. Красивая обложка. Сверху – название серии – «Проектирование». В той же строке фамилия автора – Кудрявцев Е.М. Название многообещающее: «GPSS World. Основы имитационного моделирования различных систем». Издание вроде солидное – «ДМК Пресс», Москва (столица!). Что тут думать, надо брать и читать. Тем более, аннотация призывает делать это «широкому кругу читателей: учащихся, студентов, инженеров, менеджеров и других специалистов, занимающихся моделированием функционирования всевозможных систем» (с. 2).

Взял и начал читать. К сожалению, аннотация соврала. Книга вредна для «широкого круга читателей». Ее можно попробовать прочитать институтским преподавателям, несущим знания о GPSS в массы, но лишь для того, чтобы понять: а) как не надо этого делать; б) как можно неверно истолковать все то, что они объясняют, и что, вроде бы, так ясно описано в справочном руководстве системы. Вряд ли они осилят всю книгу. Впрочем, пусть попытаются, если захотят, но у меня это не вышло. Однако и то, что я прочитал, позволяет считать книгу сборником ошибок, изданных типографским способом. Не останавливаясь на мелочах, коих много, классифицируем наиболее существенные ошибки в книге следующим образом:

1)      ошибки методические;

2)      автор не разобрался.

Справедливости ради отметим, что автор книги довольно самокритично относится к своему труду. В предисловии он признается, что «далек от мысли, что данное издание лишено недостатков, не совсем уверен в правильности перевода некоторых действий (!?) и с благодарностью примет все замечания и предложения» (с. 12).

Ну что ж, принимайте. И не надо благодарностей.

1. Ошибки методические  

Известный методический принцип обучения «от простого к сложному» нарушен в самом начале книги.

Человек, даже если это «учащийся, студент, инженер, менеджер», постигает новое на основе того, что ему известно. Складывается впечатление, что автор поставил перед собой задачу раз и навсегда отбить охоту заниматься имитационным моделированием у вышеозначенных категорий читателей. Вообще-то, сделать это не сложно. Надо просто заставить человека усомниться в своих способностях, чтобы он, прочитав несколько первых страниц и вновь посмотрев на название книги («...основы имитационного моделирования...»), сказал сам себе: «Нет, это не для меня. Если уж это основы, что же будет дальше!».

Так автор книги и поступил: с самого начала в главе 1 ошеломил читателя тем, что привел массу специальных терминов, начал рассказывать об окнах системы моделирования, о системе меню, о средствах редактирования, еще ничего не сказав о языке, привел в качестве примера какую-то непонятную модель, да еще и полный загадок рис. 1.3, который почему-то назван «Простейшая система массового обслуживания». Кстати, сплошь и рядом в книге применяется недопустимый в обучении прием – используются термины, значение которых объясняется где-то дальше или вообще не объясняется.

В главе 2 у автора появилась возможность расставить все по местам. Но возражения читателей может вызвать первое же предложение – «Система GPSSW ... предназначена для моделирования дискретных (в основном систем массового обслуживания) и непрерывных систем», в котором СМО трактуются как-то очень узко, чрезмерно академично (отнесены к дискретным системам). Сразу вспомнилось и другое подтверждения специфического понимания автором систем массового обслуживания. Оно следует из «Содержания», в котором видно, что отдельные главы посвящены моделированию непроизводственных систем, производственных систем и, наконец, систем массового обслуживания (как будто магазин или транспортный конвейер не являются СМО).

Продолжая читать главу 2, на каждом шагу встречаешь авторские измышления, псевдонаучные утверждения, невнятные определения или просто ошибки.

Прежде, чем привести лишь наиболее выдающиеся примеры этого, необходимо заметить, что автору книги не нравится слово «транзакт», и он по всему тексту пишет его в скобках после слова «требование», настойчиво сужая понятие «транзакт». Впрочем, это мелочь, о которой можно было бы и не упоминать, но тогда не будет ясно, о чем идет речь в некоторых приводимых ниже цитатах.

-  «Поведение требования определяется его несколькими фазовыми переменными (атрибутами, параметрами)» (с. 50).

-  «Значение любого параметра активного требования может быть возвращено через стандартный числовой атрибут Р<номер требования>... Необходимо создать параметры требования и присвоить им значения до того, как они будут использоваться. Параметрами могут быть ...» и далее через дефис перечислено все, что автор успел узнать о транзактах: приоритет, метка времени, номер ансамбля, индикатор задержки, текущий блок, следующий блок, цепи состояния (с. 50-51). Чуть ниже на автора нашло просветление, и он перечислил «стандартные числовые атрибуты, связанные с требованиями» (с. 51). (Кстати, в справочном руководстве GPSS World аббревиатура SNA – это не Standard Numeric Attribute, как считает автор книги (с. 50), а System Numeric Attribute.).

-  «Номер объекта – строго положительное целое число, которое используется объектом моделирования, чтобы найти или создать любой объект GPSS» (с. 52);

-   Оператор @ включен в таблицу 2.1 дважды, а операторы  LE и NOT не удостоились внимания автора вообще.

-  «Оператор – это специальное имя (обозначение) для определенного действия (операции) над операндами (данными)» (с. 58). Этот текст, не несущий никакой полезной информации, можно было бы при беглом чтении «проглотить», если бы он не предшествовал таблице «наиболее часто используемых операторов». В ней вперемежку, по системе «смешались в кучу кони, люди», и даже не в алфавитном порядке, приведены блоки и команды GPSS World. Одним операторам повезло – для них указаны операнды, другим повезло вдвойне – их автор щедро наделил операндами, которых они в действительности не имеют (например, GENERATE, SAVEVALUE), ну а третьи автору не понравились, и он лишил их операндов вообще. В тайне сохранил автор, как же эти несчастные совершают свои «определенные действия  над операндами (данными)».

-  Описание некоторых операторов в указанной выше таблице не соответствует действительности. Так, со слов автора, блок ENTER «увеличивает вместимость накопителя», блок LEAVE – «уменьшает вместимость накопителя», а команда STORAGE – «определяет вместимость накопителя»; блок MSAVEVALUE «модифицирует значение матрицы»; блок COUNT предназначен для того, чтобы «поместить индекс объекта внутрь параметра» и т. д.

-  Если для большого числа блоков и команд не были указаны операнды, то стоит ли говорить о каких-то там вспомогательных операторах, использующихся в ряде блоков? Так и есть, ни слова в таблице и далее до конца параграфа, специально посвященного операторам языка GPSS.

-  Внимание, автор расширил понятийный аппарат GPSS и ввел новые термины – «входной комментарий» и «промежуточный комментарий» (с. 61), и даже придуманы для их «оформления» «определенные правила». Если бы только это! На с. 65 «широкому кругу читателей» представлен новый «тип объекта, который можно использовать при создании моделей» – «табличная цепь пользователя» и для убедительности – его название на бусурманском языке (Tables User Chains). 

-  Параграф «Цепи событий» – это отдельная песня, из которой, как известно, слов не выкинешь. Цитирование здесь бессмысленно, т. к. надо цитировать почти все.

И т. д., и т. п. ...

Отдельно следует остановиться на авторских переводах некоторых ключевых терминов.

Так, слово «facility» переведено в книге как «канал»  (лишь в политехническом словаре я нашел один из вариантов перевода этого слова как «канал», причем не просто канал, а «канал связи»). Со времени выхода прекрасной книги Т. Шрайбера на русском языке (переведенной, кстати, тоже прекрасно), т. е. с 1980 года, на пространстве бывшего СССР под facility понимается «обслуживающий прибор» или просто «прибор».

Учащиеся и студенты могут не знать по причине молодости, а вот инженеры и менеджеры постарше должны помнить, что в этой красной, толстой,  умной и понятной книге нашлось место для разъяснения переводчиков, почему они используют термин «многоканальное устройство», а не «накопитель» при переводе названия оператора STORAGE.

Кстати, и «XN Groups» там переведено не как «ХN-группы». Бедные учащиеся и студенты так и не узнают из книги Кудрявцева  Е.М., что же кроется под этой таинственной аббревиатурой – XN.

То ли автор рассматриваемого нами труда Красной книги не читал, то ли читал, но забыл – неизвестно. Вообще-то, чтобы нарушить терминологические традиции, сложившиеся в среде отечественных поклонников GPSS, нужны веские основания. Наверное, у Кудрявцева Е.М. они имеются. Может быть, он читал Шрайбера в подлиннике и не согласился с переводом... Можно только догадываться, т. к. никаких объяснений по этому поводу автор не привел.

В переводе новых терминов GPSS,  появившихся после издания Красной книги, никаких ограничений нет – было бы только правильно. Вот, например, название окна «Plot Window» переведено как «окно гистограмм», но смею вас заверить, уважаемый читатель, что на самом деле это не так.

После прочтения некоторых разделов и отдельных фраз возникают вопросы, но они повисают в воздухе:

-        рис. 1.4, названный как «Окно Untitled Model 1 с введенной в него моделью одноканальной разомкнутой СМО» на самом деле отображает окно модели. Студент может подумать, что среди окон GPSS World есть окно «Untitled Model 1» и тщетно будет искать его. Окончательно он запутается, когда сравнит рис. 1.4 и 1.5 и попытается выяснить, как из «Untitled Model 1» получается «SMO_1_r.1.1»;

-        с. 44: «EXIT (Выйти) – обеспечивает выход из процесса моделирования; HALT (Остановить) – обеспечивает прерывание процесса моделирования» (Что же это за загадочный термин – «процесс моделирования»? Все им можно обозвать. На с. 22 назначением команды EXIT был определен «выход из системы GPSS»);

-        сколько ни читай параграф «Установка просмотра выражений» на с. 44-45, не зная заранее, о чем идет речь, так и не поймешь, зачем же все-таки эти выражения, «включенные для контроля» какого-то, куда-то вводятся;

-        зачем приведены списки операторов языка PLUS и встроенных процедур – не ясно (с. 65 – 67). Мало того, что даже не рассматривается их назначение и использование, сделана попытка ввести читателей в заблуждение: процедуры QueryXN названы «процедурами для требований, находящихся в очереди»;

-        «Блоки не могут быть переопределены в системе GPSSW. Однако, используя блок EXECUTE, можно переопределить значение операнда А» (с. 65). Все. Точка. И пытливый ум читателя так и не найдет ответа на вопрос, о каком операнде А идет речь и вообще о чем речь-то идет. Если найдется-таки неугомонный менеджер (учащиеся и студенты до с. 65 не дойдут, осознав свою полную несостоятельность), он вернется на с. 59 и прочитает в таблице «наиболее часто используемых операторов» описание этого самого EXECUTE – «выполнить блочную операцию элемента». Лучше бы на месте этой фразы стоял просто прочерк!

 Книга заполнена загадочными фразами типа:

-        Подрисуночная подпись к рис. 1.16: «Всплывающее меню пункта Simulation Window выпадающего меню»;

-        с. 42: «Ниже приводится группа флажков, обеспечивающих вывод результатов функционирования того или иного элемента моделируемой системы: ...

·        Six Places (Шесть знаков)

·        Procedures (Процедуры)

·        Scientific (Научный)

·        Experiments (Эксперименты)»;

-        с. 43: «Блоки GENERATE вычисляют время между двумя входами – время для операндов А и В.».

В книге приведено много примеров. Это, безусловно, хорошо. В целом, можно также приветствовать избранную автором последовательность рассмотрения моделей. К сожалению, примеры тоже напичканы ошибками. Некоторые из них рассматриваются в следующем разделе данного обзора, а о просчетах методического характера следует  сказать здесь.

1. Отсутствует четкость и ясность в постановке ряда задач. Наверное, автор, совмещая процессы обучения и воспитания, готовит своих читателей к трудностям реальной жизни, в которой преобладает постановка задач типа «Копать от забора и до вечера». Чтобы подтвердить сказанное, придется прибегнуть к длинным цитатам.

«Постановка задачи. Допустим, на некоем острове неудержимо растет колония вредителей сельского хозяйства. Проблема уже настолько серьезна, что местные фермеры стали предпринимать серьезные  меры для борьбы с вредителями. Они хотят ввезти на остров хищников,  чтобы взять ситуацию под контроль. Требуется определить, сколько хищников необходимо завезти на остров, чтобы уничтожить всех вредителей. Это может быть система, например, «Фазаны – колорадский жук» (с. 141).

Вот и вся постановка задачи.

Не будем хихикать по поводу того, что в рассматриваемой системе хищных фазанов много, а колорадский жук, судя по всему, один, но, наверно, большой. А вот о том, что в постановке задачи отсутствуют исходные данные для ее решения, сказать надо. В таком виде задача имеет бесчисленное множество решений. Только лишь уже в тексте программы можно обнаружить операторы, определяющие «Коэф. рождаемости хищника», «Коэф. смерти хищника», «Эффективность набега» (равна 0.0002; кто на кого и как набегает – не ясно, в каких единицах измеряется эта неясность – тоже неизвестно).

При постановке задачи о движении на пешеходном переходе (с. 109) не сказано о том, что движение автомобилей однорядное, как движутся пешеходы – тоже не ясно (из программы видно, что только в одном направлении), режим работы светофора не описан.

При постановке задачи о работе супермаркета (с. 129):

-        сказано о наличии стоянки автомобилей с ограниченным числом мест около магазина, но не ясно, зачем, т. к. никаких вопросов, связанных со стоянкой, в задаче не поставлено;

-        сначала сказано, что «время прихода покупателей с места парковки автомобиля в магазин подчиняется равномерному закону» (в программе это не учтено), а затем в этом же абзаце – «поток покупателей, приходящих в магазин за покупками, экспоненциальный»;

-        говорится, что «число взятых товаров определяется с помощью датчика случайных чисел»; сказать так – значит не сказать ничего о том, сколько же товаров покупается и как распределено количество покупок;

-        не ясно, магазин уже работает к началу моделирования или моделирование начинается с момента времени открытия магазина (кстати, это упущение является общим для всех задач: статистика, собранная в то время, когда  объекты моделирования работают в неустановившемся режиме, не сбрасывается);

-        не ясно, сколько времени проводят покупатели в поиске нужных товаров перед тем, как занять очередь к кассиру;

-        не сказано о том, как организовано обслуживание, а именно: очередь к кассам общая или к каждой кассе отдельная; если очереди раздельные, то какую из них выбирает очередной покупатель; числовые характеристики работы кассиров не заданы;

-        ничего не говорится о стоимости товаров, а при обсуждении решения задачи фигурирует переменная для расчета стоимости.

Из постановки задачи на моделирование транспортного конвейера не ясно, куда девается деталь с конвейера, если заняты оба рабочих. Сначала говорится о том, что если первый рабочий занят, деталь перемещается ко второму рабочему (с. 158), и ниже – «детали не накапливаются у первого рабочего», еще чуть ниже – «детали могут образовывать очередь в связи с занятостью второго рабочего». Далее, на с. 160, при обсуждении оператора TRANSFER сказано, что в этот блок требованиям вход всегда разрешен, и если заняты оба рабочих, то требование остается в блоке TRANSFER. «Требование остается в операторе TRANSFER и в цепи текущих событий до освобождения занятого оператора в поле С» (т. е. 2-го рабочего). Наконец, через пару строк такой текст: «Если первый рабочий занят, то деталь поступает на обработку ко второму рабочему ... при условии, что он не занят. Если и он занят, то деталь будет ждать освобождения любого рабочего». (На этом месте я понял, что ничего не понял и никогда не пойму из такого объяснения).

Постановка задачи на моделирование производственного процесса с контролем качества приведена на с. 205-206. Но только на с. 208 и 209 при обсуждении программы читатель узнает, что задан процент брака для первой операции (для второй операции он не задан в тексте, и его можно определить только из приведенного далее фрагмента программы). Еще на с. 208 вдруг сказано, что имеется возможность повторения обработки забракованных изделий. Правда, не сказано, какова допустимая кратность повторной обработки.

  Продолжать перечень претензий к формулировкам задач вряд ли стоит. Общее впечатление – недопустимая небрежность автора.

2. При решении задач методом имитационного моделирования есть один очень важный этап. После того, как задача поставлена, необходимо выявить особенности моделируемой системы для того, чтобы выбрать средства моделирования, имеющиеся в распоряжении пользователя GPSS. По существу, на этом этапе вырабатывается замысел на моделирование, который затем реализуется в разрабатываемой программе. В учебной книге, адресованной начинающим пользователям GPSS, очень важно подчеркнуть, какие существенные особенности функционирования моделируемого объекта повлияли на выбор тех или иных средств моделирования автором книги. Тем более, для каждой задачи в книге предусмотрен раздел «Выявление основных особенностей». К сожалению, эти разделы в большинстве случаев написаны формально, и в них, как правило, отсутствует обсуждение выбираемых средств моделирования.

Ниже приведены полные тексты разделов «Выявление основных особенностей» лишь для двух задач. Читайте внимательно и судите сами.

«Для моделирования работы магазина необходимо сформировать входной поток покупателей (требований) и временной интервал моделирования работы магазина. Но перед этим необходимо выбрать единицу измерения времени. Для моделирования работы магазина можно взять в качестве единицы измерения минуту.» (с. 92).

«Для моделирования работы супермаркета необходимо сформировать входной поток покупателей (требований) и временной интервал моделирования работы супермаркета. Но перед этим необходимо выбрать единицу измерения времени. Для моделирования работы супермаркета можно взять в качестве единицы измерения времени секунду.» (с. 129-130).

Следствием такого «выявления основных особенностей» являются анекдотические ошибки в моделях, рассматриваемые в разделе «Автор не разобрался». Здесь же приведем лишь один пример именно нерационального использования средств GPSS.

При моделировании работы светофора на пешеходном переходе используются сохраняемые величины и именованные величины для обозначения цвета сигнала светофора для пешеходов и машин (с. 113-114). Так как желтый сигнал не моделируется, светофор имеет два состояния. Первое – «разрешение для автомобилей и запрет для пешеходов», второе – противоположное –  «запрет для автомобилей и разрешение для пешеходов». В GPSS имеется элемент, специально предназначенный для моделирования противоположных логических состояний. Это знают даже учащиеся и студенты. Другим специалистам скажу, что это – логический переключатель. Его использование для моделирования в рассматриваемом случае напрашивается совершенно естественно, и могло бы значительно упростить модель. 

3. В разделах «Построение имитационной модели» обсуждаются разработанные программы. При этом дополнительные трудности создаются фразами, переходящими из примера в пример. Наверное, автору книги кажутся узкими рамки конкретной задачи, и ему все время хочется поговорить о вечном. Вот некоторые образчики.

На с. 110 после блока GENERATE 20,10 приводится следующий текст: «В поле операнда А указывается среднее время поступления (обязательно) требования (машины) на обслуживание (проезд через переход), в поле операнда В – отклонение от среднего времени поступления требования (не обязательно)». К чему здесь, при обсуждении конкретного блока, слова «обязательно» и «не обязательно»? Вот здесь-то как раз все обязательно!

Или еще фраза, кочующая почти по всем примерам: «SEIZE Kassir . В поле операнда А дается символьное или числовое имя канала обслуживания. Таких каналов обслуживания в системе может быть также много. В нашей задаче каналу дано имя Kassir. Желательно, чтобы присваиваемое имя отражало суть описываемого элемента системы». В приведенной цитате есть слово «также». Оно используется потому, что в предыдущем абзаце в книге точно такая же сентенция (слово в слово) использована по отношению к конкретной очереди.

Все бы ничего, но когда спотыкаешься об одну и ту же ненужную фразу в разных местах книги, начинаешь понимать, что не все средства Microsoft Word одинаково полезны.

4. В приведенных в книге примерах отсутствует полноценный анализ результатов моделирования. Автором словно движет идея «процесс – все, цель – ничто». Поэтому то, ради чего обычно проводится моделирование, автору не интересно. Рассмотрим лишь парочку характерных подтверждений сказанному. При этом даже не будем вникать в содержание задач, посмотрим только на некоторые внешние признаки в содержании стандартных отчетов.

-        С. 116: автора не насторожили данные по очереди OCHER1 (MAX=137, CONT=129), которые явно свидетельствуют о том, что в модели что-то не так.

-        На с. 109 говорится, что «в качестве ограничителя периода имитации» используется проезд 1000 автомобилей, а из итогового отчета видно (с. 116), что на момент окончания прогона модели в очередь автомобилей поступило лишь 681 требование. Почему? Автор не сообщает об этом.

-        На рис. 3.37 в отчете видно, что в таблицу N_POKUPATEL попало лишь одно числовое значение. Вам интересно, почему? А автору нет.

5. Постановка каждой задачи заканчивается перечислением характеристик системы, которые необходимо определить. В нескольких задачах после перечисления искомых характеристик указано «и др.» (например, с. 92, 183, 206, 229). С этим нельзя согласиться, т. к. для получения и обработки конкретных данных о работе моделируемого объекта в программу должны включаться вполне определенные операторы.

6. В каждой задаче автор книги пишет одно и то же – «перед началом моделирования можно установить вывод тех параметров моделирования, которые нужны пользователю», а далее рекомендует «щелкнуть по пункту Edit главного меню», «щелкнуть по пункту Settings», а потом еще пощелкать на вкладке Reports, расставляя галочки. Должен разочаровать читателей: того, что обещает автор («наличие галочек говорит о том, что эта информация будет выведена в окне REPORT»), не будет, если в модели не использовать соответствующие операторы сбора статистики. И вообще, в рассматриваемых в книге задачах щелкать для получения отчета не надо, т. к. по умолчанию все разделы статистики, которые автор старательно выщелкивает каждый раз, по умолчанию и так включены в стандартный отчет. И лучше, уважаемый читатель, время, затрачиваемое на щелканье, пустить на думанье.

2. Автор не разобрался

Заголовок этого раздела контрастирует с утверждением автора книги о том, что «система GPSSW достаточно проста в изучении» (с. 67).

Подобно тому, как врачу советуют исцелиться самому, учителю, по аналогии, можно рекомендовать научиться сначала самому. Методический принцип «Не разобрался сам – не морочь голову другим», пожалуй, самый главный в преподавании, хотя в педлитературе и не упоминается. Наверно, считается, что об этом как-то и говорить неудобно.  Так что ошибки, представленные в данном разделе, также носят методический характер. И то, что они выделены в отдельный раздел, обусловлено лишь общей причиной их возникновения, вынесенной в заголовок данного раздела.

Приведенные ниже выдержки из книги свидетельствуют о непонимании ее автором важных положений GPSS.

-        С. 43: «Time Ties (Временные связи) позволяет определять, когда те или иные события происходят одновременно)».

-        с. 94: «TERMINATE 1.  В поле операнда А стоит число 1. Это означает, что систему обслуживания – магазин – покупатели покидают по одному».

-        С. 42: «Флажок PLUS Trace (Трассировка PLUS) обеспечивает трассировку языка программирования PLUS».

-        С. 99 и далее многократно: среди результатов моделирования приборов приводятся записи вида:

«...

·        OWNER (Возможное число входов) – ...

·        PEND – ...

·        INTER  – ....»

Так вот, OWNER – это совершенно не то, что подумал автор, и с переводом и трактовкой данных PEND и INTER, судя по всему, у него также возникли проблемы.

Следствием непонимания автором являются непонятные предложения в книге. Сразу же оговорюсь: ни одно из приведенных ниже предложений не выдернуто из контекста. Ни ниже, ни выше этих мудреных фраз не сказано ничего, что бы могло облегчить участь читателя. Так что читайте и напрягайте извилины. 

-        С. 40: «В поле Poll Count (Индекс опроса) устанавливается число блочных вхождений, которые будут предприняты перед проверкой любого вида прерывания при введении пользователем команд пункта Command главного меню».

-        С. 41: «В поле Parameter Block Size (Размер блока параметров) устанавливается размер блока параметров. В поле Parameter Block First (Первый блок параметров) указывается число параметров в блоке». Там же: «Флажок I/O Stream Error Stops (Ввод/вывод потока остановок при ошибках) обеспечивает ввод/вывод потока остановок при возникновении ошибок».

-        С. 44: «На этой вкладке вы можете определить выражение, которое должно иметь такое же имя, которое использовалось в качестве метки».

-        С. 42: «Флажок In Windows (В окнах) обеспечивает текстовое представление каждого объекта сообщения вместо сохранения их в файле».

 

Не делайте умное лицо, уважаемые инженеры и менеджеры, не плачьте, бедные учащиеся и студенты, других специалистов тоже просим не волноваться. Вы что-то не поняли? Все приведенное выше не переводится с русского на русский и не верно по сути, потому что не понято самим автором книги. Где он сам разобрался, там написано вполне внятно.

Кстати, за последним из приведенных выше «перлов», являющимся попыткой перевода «в лоб» фразы из справочного руководства, стоит глубокое непонимание концепции объектов, принятой в GPSS World. Отсюда и беспорядочное использование терминов «объект» и «элемент» в книге.

На с. 124 приведена сначала последовательность операторов

GENERATE 480

TERMINATE 1

START 1

а затем следующий текст: «Первый оператор ... определяет время моделирования системы – 480 мин. Второй – TERMINATE – определяет уменьшение общего времени моделирования на 1 мин.». Все, приехали.

Вообще, с трактовкой назначения операнда А блока TERMINATE и команды START непорядок. Например, в модель пешеходного перехода включены два блока TERMINATE 1, что, в принципе, не запрещено. Но они комментируются в программе так: «Удаление машины из системы» и «Удаление пешехода из системы» (с. 114). В тексте книги – другие комментарии: «Далее используется оператор TERMINATE для завершения моделирования в первом сегменте программы» (с. 111) и «Затем используется оператор TERMINATE для завершения моделирования во втором сегменте программы» (с. 112). А в условии задачи (выше уже цитировалось) «в качестве ограничителя периода имитации» используется проезд 1000 автомобилей (с. 109). Опять смешались в кучу, но на сей раз пешеходы и автомобили.

А может быть, только с расстановкой слов в книге не очень хорошо, зато примеры моделирования хорошие? Рассмотрим некоторые из них.

Мы снова на пешеходном переходе (с. 109). В постановке задачи отмечается такая его особенность, как одностороннее движение автомобилей. Ничего страшного, таких переходов много в стране. (Правда, о том, что движение еще и однорядное, читатель должен догадаться сам.) Если почитать внимательно условие задачи, то выяснится, что и пешеходное движение на переходе одностороннее.  Впрочем, и такие переходы бывают (например, напротив крупного предприятия перед началом смены или после окончания смены; в это время встречным потоком пешеходов можно пренебречь). О светофоре уже говорилось выше – книга не адресована малолеткам, а остальные читатели и сами могут додумать постановку задачи в смысле режима работы светофора.

И все же, этот переход – особенный. Во-первых, пешеходы выстраиваются перед ним в очередь (Очередь на «маршрутку» видели? Вот примерно так пешеходы и стоят). Во-вторых, тактика пешеходов на переходе довольно странная. Когда загорается зеленый свет, пешеход, возглавляющий очередь, проверяет отсутствие машин на переходе (вот это правильно, ничего не скажешь), после чего начинает пересекать дорогу. Делает он это в одиночку, а все остальные с интересом наблюдают, не собьют ли бедолагу. Но вот пешеход завершает свой опасный путь, и лишь тогда на переход вступает очередной смельчак. Так продолжается до тех пор, пока не загорится красный свет. Может быть, над дорогой натянут канат, который может выдержать только одного пешего гражданина? Или переход залит водой, над которой проложена тоненькая дощечка, рассчитанная лишь на одного? А может пересечение дороги выполняется с помощью Боливара, который, как известно, не выдержит двоих? К сожалению, в условии задачи об этом не говорится.

А может это все мои выдумки? Судите сами, перед вами – фрагмент модели под названием «Моделирование потока пешеходов». Там написано все то же самое, но только шершавым языком GPSS.

GENERATE      30,10       

QUEUE             Ocher2       

TEST E             X$Svet_Pesheh,F$Perehod

SEIZE               Perehod

DEPART           Ocher2

ADVANCE       10,2

RELEASE         Perehod

TERMINATE    1

Шутки в сторону: перед нами – пример неверного выбора средств моделирования, неправильного использования двух блоков TERMINATE 1, попытка привить дурной вкус будущему программисту GPSS путем обучения его моделировать двухпозиционное средство (светофор) совершенно нерационально (об этом говорилось несколько выше).

Но и это еще не все. Хорошо вам, инженеры и менеджеры, вы всякого уже повидали в этой жизни. А каково несчастным студентам и учащимся читать на с. 111-112 невыносимо жуткие вещи, леденящие кровь в жилах: «Далее введем пару операторов ... для сбора статистической информации по очереди пешеходов. Эта очередь создается во время занятости пешеходного перехода машинами или из-за красного сигнала на светофоре. Условно назовем эту очередь Ocher2. Сначала зафиксируем вход в очередь автомобиля с помощью оператора QUEUE». Стоп! Беда! Вход автомобиля в очередь пешеходов! Надо вызывать «скорую»! (И куда только в этой Москве «гаишники» смотрят?). Как страшно жить...

Уйдем поскорее с этого злополучного перехода куда-нибудь в более спокойное место, например, на переговорный пункт. «Он имеет одно помещение для трех посетителей» (с. 121). Все ясно, моделировать будем с помощью такого средства, как многоканальное устройство. Правда, автору книги больше нравится термин «накопитель», и видимо что-то неизвестное нам, простым читателям, за этим кроется, т. к. на с. 122 он предлагает указать вместимость переговорного пункта с помощью оператора

Punkt    STORAGE  4

Именно 4, а не 3. Здесь, наверное, уже детективная история, связанная с уходом от налогов. Все ясно, по отчетности у них 3 переговорные кабины, а на самом деле 4. (И куда только в этой Москве «налоговики» смотрят?)

Как Вы думаете, если некто подходит к переговорному пункту с целью переговорить, а все кабины заняты, что он будете делать? Думаю, что большинство ответит, что или этот некто будет ждать в очереди и никого вперед себя не пропустит (разве что женщину с маленьким ребенком или пожилого человека), или пойдет на другой пункт. А вот и не угадали. Я тоже так думал, но был неправ (меня утешает только то, что и большинство читателей тоже обманулось). Откроем программу (с. 125).

GENERATE      1.85,1

Povtor GATE SNF        Punkt,Zanyt

ENTER             Punkt

...

Zanyt ADVANCE         3.5,1.1

TRANSFER      , Povtor

Когда вновь прибывший посетитель (транзакт из блока GENERATE) обнаруживает занятость переговорного пункта (многоканального устройства Punkt), он куда-то уходит (транзакт переходит в блок с именем Zanyt) и зачем-то пребывает там 3.5±1.1 мин., после чего возвращается. Чувствуете? Назревает конфликт. Ладно еще, если придет новый посетитель (транзакт из GENERATE), заглянет в наш пунктик, увидит свободное местечко и прошмыгнет туда. Тогда он просто нарушит дисциплину обслуживания «Первым пришел – первым позвонил» (правда, в условии задачи о дисциплине обслуживания ничего не говорится, но именно такая всегда подразумевается по умолчанию). А вот что будет, если два транзакта-посетителя встретятся у дверей пункта – один вновь прибывший, а второй из Zanyt? Кто кого должен пропустить? А если это будут граждане, подвыпившие по случаю какой-нибудь очередной независимости незнамо кого незнамо от чего? И здесь неспокойно... Как страшно жить...

Переместимся из непроизводственных систем в производственные, т. е. в следующую главу. Моделируем инструментальную кладовую (с. 197). Чтобы было полное взаимное понимание, кратко воспроизведем условие задачи. Имеется цех, в нем – инструментальная кладовая. Каждые 8±2 мин.рабочие приходят за инструментами и сами их отбирают на двух стеллажах, после чего подходят к учетчику, который делает записи в журнале о взятых инструментах. Необходимо определить число посещений рабочими кладовой в течение смены, коэффициент загрузки учетчика и еще шесть других параметров работы системы.

Это – кратко. Но, кажется, у нас есть повод присмотреться к некоторым деталям постановки задачи. 

«Каждый рабочий может взять один или несколько инструментов, лежащих на разных стеллажах». (Значит, если «может взять», то, значит, может и не взять?).

«Время, необходимое для поиска инструмента на стеллажах, число инструментов, взятых со стеллажа, и вероятности взятия их приведены в табл. 4.1». Действительно, задана в таблице «вероятность взятия» для каждого стеллажа – 0,65 и 0,78. Посмотрел на всякий случай программу и понял, как понимать эти вероятности. Рабочий может взять с вероятностью 0,65 инструмент с первого стеллажа, а с вероятностью 0,35, стало быть, брать не будет. Со второго стеллажа с вероятностью 0,78 он будет брать инструмент, а с вероятностью 0,22 – не будет.

Что же это получается: с вероятностью 0,35´0,22=0,077 рабочий не будет брать инструменты вообще и пойдет к кладовщику с пустыми руками? А чего он тогда покинул рабочее место и пришел в кладовую? Нарушать трудовую дисциплину на двоих с кладовщиком? Вот они, скрытые резервы повышения производительности труда! Жалко, что автор книги их не заметил, он бы обязательно подсказал менеджерам и будущим менеджерам из числа учащихся и студентов, как использовать GPSS для выявления «сачков» на производстве. Поэтому восполняю пробел и рекомендую при решении подобных задач определять и другие параметры работы системы, типа:

·        Сколько праздно гуляющих рабочих за смену подойдут к кладовщику?

·        Какую долю в коэффициенте загрузки кладовщика составят задушевные беседы с ними?

·        Если с каждым таким рабочим кладовщик примет по 150 г, будет ли за смену выполнена его норма?

Можно было бы, конечно, и дальше книжку почитать, но уж больно жалко времени. Да и обсуждение всяких нелепостей по объему может сравняться с объемом книги. Поэтому закрыл ее и отложил в сторону.

...Смеркалось. За окном, воя и мигая, куда-то промчались аварийные машины. Чувство необъяснимой тревоги овладело мною. Внезапно мой взгляд натолкнулся на красивую обложку. Рядом с фамилией автора книги увидел название серии – «Проектирование». И вновь подумалось: «Как страшно жить...».

К.т.н., доцент А.Н. Бражник

г.Санкт-Петербург