9.11. Организация экспериментов вGpssWorId
Система GPSSWorldобеспечивает два вида автоматически проводимых экспериментов: разработанные для пользователя и разработанные пользователем. Разработанные для пользователя и встроенные вGPSSWorldавтоматические генераторы отсеивающих и оптимизирующих экспериментов не предполагают повторных прогонов, т.е. эти эксперименты проводятсяcмоделями, работающими в стационарном режиме. Для таких моделей оценки точности результатов моделирования могут быть получены за один достаточно длительный прогон модели (см. параграф 9.4). Данные переходного периода в этих экспериментах могут не учитываться. Эти модели не предусматривают повторений экспериментов для каждого уровня сочетания факторов.
Отсеивающие и оптимизирующие эксперименты также не могут быть использованы в тех случаях, когда в процессе экспериментирования необходимо изменять количество устройств в МКУ, которое задается оператором STORAGE.
Пользовательские эксперименты могут проводиться cмоделями, работающими в переходном режиме, и позволяют организовать повторение экспериментов. В этом случае необходимо заранее до планирования экспериментов для каждого сочетания уровней факторов определить количество повторений экспериментов (см. параграф 9.4). Наличие встроенного языка программированияPLUSпозволяет разрабатывать пользовательские эксперименты любой сложности, включая и переопределение емкости МКУ.
Отсеивающий эксперимент в GPSS World. Этот эксперимент используется для определения факторов, существенно влияющих на систему. Полученная информация важна для проведения дальнейших экспериментовcцелью создания более эффективных оптимизирующих экспериментов. Результаты отсеивающего эксперимента показывают, какие факторы менее эффективны и должны в дальнейшем получить меньший приоритет при рассмотрении. Для получения достоверных результатов необходимо правильно выбирать значения факторов,cкоторыми будет проводиться эксперимент. В случаях, когда область допустимых значений фактора велика, может возникнуть необходимость проведения нескольких экспериментов для разных значений факторов из этой области. В общем случае значения каждого фактора желательно выбирать равноудаленно от границ области и друг от друга.
Для того, чтобы воспользоваться встроенным генератором отсеивающих экспериментов GPSSWorld, необходимо выполнить пункт менюEdit/Insert Experiment/Screening, в результате чего появится диалоговое окно Screening Experiment Generator. Отсеивающий эксперимент проводится только для двух значений каждого уровня факторовValue 1 и Value 2, так как в его основе лежит линейная регрессионная модель.
Для организации эксперимента необходимо иметь отлаженную имитационную модель, которая должна быть проверена при всевозможных значениях входных переменных. Необходимо гарантировать, что модель будет правильно работать при любой комбинации уровней факторов.
В результате заполнения полей диалогового окна в эту модель автоматически будет добавлен код на языке PLUS. По выбору пользователя для запуска эксперимента может быть назначена функциональная клавиша (обычноF11, но ее можно переопределить). В этом случае после трансляции модели (команда пункта менюCommand/Create Simulation или Ctrl+Alt+S) для запуска отсеивающего эксперимента достаточно будет нажать функциональную клавишуF11.
Пример 9.4
Отсеивающий эксперимент для модели работы компьютерной сети.
Локальная сеть (ЛС) имеет кольцевую топологию. В ней используется 15 рабочих станций и один сервер, который также подключен к глобальной сети.
Пользователи рабочих станций посылают на сервер запросы для выполнения локальных заданий (обращения к базе данных, находящейся на сервере, составляют 15% запросов) и для обращения в глобальную сеть (поиск информации составляет 85% запросов).
Опрос рабочих станций в ЛС происходит cпомощью маркера по кольцевому алгоритму каждые 1,5c. Время переключения маркераcодной рабочей станции на другую составляет 0,1c. Если у рабочей станции есть сообщение, оно передается на сервер.
Поток запросов на обслуживание от всех рабочих станций является пуассоновским cинтенсивностью 1 запрос за 30c. Длина возникающих сообщений (кбайт) имеет гамма-распределениеcпараметрамиa= 88,P= 0,4. Каждое сообщение в ЛС разбивается на пакеты размером 1 Кбайт. Каждый пакет передается на сервер в течение 10 мс. Для сборки пакетов на сервере затрачивается по 1 мс на пакет.
Для обработки запросов по обращению к базе данных сервера требуется 50 ± 40 мс. Объем данных, которые нужно будет передать пользователю cсервера, равномерно распределен в интервале от 0,01 до 1 Мбайт.
Связь cглобальной сетью осуществляется по полудуплексному каналу (прием и передача не могут происходить в один и тот же момент времени) со скоростью 3,6 кбайт/с. Время поиска информации в глобальной сети в секундах имеет гамма-распределениеcпараметрами α = 10, β = 0,2. Объем передаваемых данных от сервера на рабочие станции распределен по равномерному закону и составляет 100±50кбайт.
Канал связи занят во время передачи данных от рабочих станций к серверу и в обратном направлении. Одновременно могут передаваться данные только по одному запросу. Если в момент, когда канал занят, возникает запрос на использование канала, он становится в общую очередь запросов. После освобождения канала сначала проверяется содержимое очереди запросов. Если она пустая, то продолжается опрос рабочих станций, начиная со следующей после освободившей канал станции. Данные могут передаваться по каналу связи, даже когда процессор сервера обрабатывает запрос. Запросы обрабатываются центральным процессором (ЦП) сервера по правилу FIFO.Bто время, как ЦП выполняет обращение к базе данных или глобальной сети, он освобождает канал связи. Результаты обработки запросов передаются на рабочую станцию сразу же, как только освободится канал.
Необходимо промоделировать работу сети на протяжении 24 часов, оценить среднее время обработки запросов от рабочих станций и определить факторы, влияющие на это время.
Программа:
* Обработка запроса к глобальной сети
* Поиск в глобальной сети. Время поиска зависит от скорости соединения cсетью
Создадим отсеивающий эксперимент, в ходе которого оценим влияние на критерий эффективности модели следующих факторов:
– время опроса (фактор А);
– время передачи одного пакета по каналу связи (фактор В);
– интервал времени между возникновениями запросов на рабочих станциях (фактор C);
– время доступа к глобальной сети (фактор D).
Для изменения значений этих факторов воспользуемся операторами EQU, которые определены в начале программы.
Для создания отсеивающего эксперимента выберем команду в меню Edit/Insert Experiment/Screening... и заполним поля диалогового окна (рис. 9.9).
Назначение элементов диалогового окна:
Experiment Name (название эксперимента). В данном случае «ScreenNetwork».
'Run Procedure' Name (название процедуры прогона). В данном случае «DoTheRun».
Factors (факторы), которых должно быть не более шести. В соответствующие поля необходимо ввести имена факторов, заданных в модели операторомEQU, и два значения уровней факторов(Value 1 иValue 2).
Fraction (доля) определяет, какая часть от полного факторного эксперимента будет выполнена, т.е. план2k-p. Bэтом случае прогоны выполняются для каждого варианта значений уровней факторов, заданных в поляхValue 1 иValue 2.
Result, Expression (выражение для выходной переменной, для которой проводится эксперимент). В это поле могут быть введены названия переменных пользователя, СЧА или выражения.
Generate Run Procedure, Load F11 with CONDUCT command (флажки «Генерация процедуры прогона» и «Загрузка командыCONDUCTв клавишуF11») необходимо установить для автоматизации и упрощения запуска эксперимента.
Alias Groups (группы смешивания). Эта кнопка открывает диалоговое окноDefining Relation (определение отношений, рис. 9.10).
Puc. 9.9
Puc. 9.10
Часто время одного прогона модели настолько велико, что делать все 2k экспериментовcg повторениями не представляется возможным (особенно, когда факторов 4...6,ag = 100 или больше). В таком случае генератор отсеивающего эксперимента позволяет задать меньшее количество экспериментов (Fraction), т.е.2k-р. Этого можно добиться, благодаря смешиванию некоторых эффектов (AliasGroups). Следует, однако, учитывать, что при этом будет получена только часть информации. Кроме того, при превышении определенного предела числа прогонов уже нельзя будет определить эффекты отдельных факторов. В таких случаях можно сделать предположение о влиянии определенного фактора по значению эффекта, полученного для групп, в которые он входит и для которых это значение удалось рассчитать даже при меньшем количестве прогонов. Однако следует учитывать, что влияние факторов из одной группы может быть взаимно противоположными. Может создаться впечатление, что эти факторы этой группы не оказывают на модель существенного влияния, в то время как в действительности каждый в отдельности оказывает такое влияние. Рекомендуется так группировать факторы, чтобы в каждой группе оказывался только один существенный фактор.
В приведенном примере в качестве критерия эффективности выбрано среднее время (в мс) обработки запроса от момента появления его на рабочей станции до момента окончания приема результатов запроса на этой станции. Для получения этого времени используется регистратор очереди network.Bкачестве критерия выбран СЧАqt$network– среднее время нахождения транзактов в системе, которое будет стремиться к истинному среднему только тогда, когда система будет работать в стационарном режиме. Если же запросы будут поступатьcчастотой, превышающей частоту их обработки, то длина очереди на обработку будет стремиться к бесконечности.
После заполнения диалога в модель будут вставлены такие процедуры:
ScreenNetwork– собственно отсеивающий эксперимент;
ScreenNetwork_GetResult– процедура выполнения прогонов, служит для фиксации результатов каждого прогона и перехода к следующему прогону;
DoTheRun– процедура прогона, которая служит для установки начальных значений генераторов случайных чисел и запуска каждого нового прогона.
Генератор отсеивающего эксперимента GPSSWorldдо версии 4.3.5 не всегда прописывает название процедурыDoTheRunна языкеPLUS. Необходимо проверить добавляемый код и в случае, если эта процедура оказалась без названия, ввести его вручную.
Отсеивающий эксперимент в GPSSWorldпредполагает, что модель работает в стационарном режиме и оценки 1 выходной величины или критерия эффективности получаются по одному достаточно длинному прогону, поэтому в процедуре для отсеивающего эксперимента нет повторений для каждой комбинации уровней факторов.
Итак, для того, чтобы результаты эксперимента были достоверными, необходимо экспериментировать cмоделью, которая находится в стационарном режиме. Поэтому сначала необходимо исследовать модель на стационарность. Для этого воспользуемся графиком изменения величиныqt$network– среднего времени обработки запроса (рис. 9.11) в модельном времени (выполнив пункт менюWindow/Simulation Window/Plot Window...).
Рис. 9.11
Из графика видно, что время переходного процесса равно примерно 20мин (1200000 мс) и оказалось, как минимум, в 72 раза меньше времени одного прогона системы. Окончательную длительность прогона для стационарного процесса надо определять в зависимости от требуемой точности получения оценок для выходной переменной. Это можно сделать для эргодических или регенерирующих процессов, как описано в параграф 9.4.
Для того, чтобы статистические данные, собираемые во время переходного процесса, не давали смещения для выходной переменной, их необходимо удалять cпомощью оператораRESET. Автоматически сгенерированный отсеивающий эксперимент в конце процедурыDoTheRun предполагает, что переходный период в модели закончится после прохождения 100 транзактов (GetpasttheStartupPeriod).
После этого выполняется оператор RESET и начинается период измерений (BegintheMeasurementPeriod). Полный прогон модели (RuntheSimulation) заканчивается после прохождения через нее 1000 транзактов.
В данном примере моделирование заканчивается через 24 часа (86400000 мс). Учитывая то, что один прогон модели занимает значительное время и для 4-х факторов на двух уровнях надо выполнить для полного факторного эксперимента 24прогонов, то сократим длительность прогона до 10 длительностей переходного периода. Для этого установим таймер в модели на 1200000 мс.
GENERATE 1200000 Cучетом этого внесем изменения в процедуруDoTheRun.
После трансляции модели (пункт меню Command/Create Simulation илиcпомощью комбинации клавишCtrl+Alt+S) выполним полный(Full) отсеивающий эксперимент, нажав функциональную клавишуF11. В результате будут получены такие данные.
Как видно из результатов, только два эффекта – CиD– значимы, причем рост интенсивности запросов на рабочих станциях отрицательно сказывается на среднем времени пребывания в сети, А увеличение скорости передачи пакетов уменьшает это время.
Оптимизирующий эксперимент. Этот эксперимент предназначен для построения уравнения поверхности отклика для заданных факторов модели и поиска численного значения оптимума (сочетания таких значений факторов, при котором заданная функция принимает экстремальное значение – максимум или минимум). Максимально возможное количество изменяемых факторов – пять. Эксперимент проводитсяcуже созданной моделью. Факторы, которые будут изменяться, должны быть в модели представлены в виде констант, которые определяютсяcпомощью оператораEQUили переменных. В ходе эксперимента производится многократный прогон модели, фиксация результатов и использование их для получения поверхности отклика и поиска оптимума.
Оптимизирующий эксперимент добавляется в созданную и отлаженную модель. Для этого необходимо выбрать пункт меню Edit/Insert Experiment/Optimizing, после чего откроется диалоговое окно Optimizing Experiment Generator (рис. 9.12).
Рис. 9.12
В нем указываются необходимые для выполнения эксперимента параметры. В полях Experiment Name и Run Procedure Name задаются соответственно название эксперимента иRun-процедуры прогонов модели. По умолчанию название эксперимента –RSM(отResponseSurfaceModel). Это имя будет добавлено ко всем названиям процедур и переменных, которые автоматически генерируются для этого эксперимента. Пользователю доступны для изменений все процедуры, относящиеся к эксперименту, кроме однойRSM_FitSurfaceToData(имя процедуры фиксировано и не изменится при задании другого названия эксперимента). В качестве названияRun-процедуры рекомендуется использоватьDoTheRun, хотя можно использовать и любое другое имя.
В полях Factor Name А, В, C, D, E указываются изменяемые величины (факторы) и задаются значения их верхних и нижних уровнейValue 1 и Value 2.
Поля Low Limit, High Limit для Movement Limits задают максимальные границы перемещения (могут иногда помочь при поиске оптимума, но в большинстве случаев можно оставлять значения по умолчанию 0 и 100). Значение поляRedirection Limit ограничивает количество изменений направлений при поиске оптимума. В некоторых случаях достаточно 1, но обычно нужно выбирать 2 или 3.
В поле Expression указывается целевая функция – выражение на языкеPLUS, заключенное в круглые скобки, или переменная модели, в которой задана эта функция.Cпомощью переключателяMaximize-Minimize выбирается направление оптимизации.
При выборе Generate Run Procedure создается процедура прогонов модели, в противном случае придется ее написать. ВыборLoad F12... позволяет запускать экспериментcпомощью нажатия одной клавишиF12 вместо того, чтобы выбирать в менюCommand/Conduct и в нем вводитьCONDUCTRSM() или другое выбранное название эксперимента.
Для запуска автоматической генерации эксперимента нужно нажать на кнопку Insert Experiment, но сначала необходимо задать перечисленные параметры.
Покажем на примерах, как можно использовать оптимизирующий эксперимент.
Пример 9.5
Исследуем работу алгоритма поиска экстремума функции cдвумя переменными, которая представляет собой верхнюю часть сферыcрадиусом 3. Для того, чтобы можно было создать оптимизирующий эксперимент, воспользуемся простой моделью:
GENERATE 10
TERMINATE 1
В ней через 10 единиц модельного времени приходит транзакт, завершающий процесс моделирования, который должен начинаться cпомощью оператора управленияSTART1.
Диалоговое окно эксперимента заполним так, как показано на рис. 9.13 (при задании имен констант, переменных лучше использовать символ подчеркивания – это гарантирует избежание конфликтов имен).
В данном случае полезно в MovementLimitsпоменять пределы на 0 и 1, вследствие чего намного уменьшается количество итераций и увеличивается точность. Результат получается идеальным.
Рис. 9.13
После нажатия кнопки Insert Experiment откроется окно Run Procedure Generation (рис. 9.14), в котором отображается автоматически сгенерированный текст Run-процедуры, названной именем Do-TheRun.
Рис. 9.14
Нажмем кнопку OK, в результате чего код на языкеPLUSбудет добавлен в текст модели. В него нужно внести исправления, в данном случае необходимо следующим образом изменить процедуруDoTheRun:
PROCEDURE DoTheRun(RunNumber) BEGIN
DoCommand("CLEAR OFF");
DoCommand("START 1");
END;
Теперь надо оттранслировать модель, выполнив пункт меню Command/Create Simulation. При этом мы увидим, что все процедуры регистрируются.
Нажмем клавишу F12и начнем эксперимент. В журнале сессии будет представлена следующая информация о ходе эксперимента.
Полученные оптимальные значения (входные переменные my_x= 0,my_y= 0, выходная переменнаяYield= 3) совпадаютcтеоретическими.
Это как раз тот случай, когда можно увидеть, что сначала была попытка применить линейную модель Y= 2.86125 – 0.206216A+ 0.203185B, она не удалась и поэтому была применена модель второго порядкаY= 3.00049 + 0A+ 0B+ 0AB– 0.180775A2– 0.17918В2. Также этот пример продемонстрировал, что оптимум не обязательно должен находиться между указанными значениями полейValue 1, Value 2 диалогового окнаOptimizing Experiment Generator.
Пример 9.6
Рассмотрим задачу нахождения оптимального количества работников производственного участка (аналог задачи о печи [10]).
Имеется производственный участок, на котором работают несколько человек. Чтобы изготовить изделие, работники сначала его собирают в течение 30±5 мин (процесс сборки осуществляется параллельно), А потом обрабатываютcпомощью общей машины в течение 8+2 мин. В каждый момент времени на машине можно обрабатывать только одно изделие. После этого изделие считается готовым, и работник начинает собирать новое изделие. Доход от одного изделия составляет 5 единиц стоимости, использование машины обходится в 400 единиц стоимости в неделю, зарплата одного рабочего 150 единиц стоимости в неделю. Нужно определить, сколько нужно рабочих, чтобы доход от производства был максимальным. Моделирование необходимо выполнить для пятидневной неделиcвосьмичасовым рабочим днем.
Программа:
Нужно найти такое значение параметра NWorkers, при котором доход достигал бы максимального значения. В выражение доходаPRIBY входит количество изготовленных изделий, равное значению СЧА N$OUT. Понятно, что доход может быть как отрицательным (убытки от производства), так и положительным (когда производство становится прибыльным).
Диалоговое окно эксперимента заполним, как показано на рис. 9.15. Используем ту же процедуру DoTheRun, что и в примере 9.5.
Рис. 9.15
Таким образом, получен следующий результат: в процессе поиска решения была построена модель второго порядка Y= -344.694 + 121.531A- 11.8367A2.
Оптимальные значения: входная переменная NWorkers=5.13, выходная переменнаяYield= 254.96.Cучетом условия целочисленности количества работников, имеем: оптимальное число работников для этой модели равно 5 .
При некоторых значениях полей Value1,Value2 диалогового окнаOptimizing Experiment Generator процедура оптимизирующего эксперимента не выполняет последний прогон «RunningthepredictedOptimum» и не выдает искомый результат. Также может быть выдано такое сообщение «Goodnessoffittestfails.Standard Error is 0. Cannot perform F test". В этих случаях нужно изменить значенияValue1 иValue2.
Эксперименты пользователя. Пользовательский эксперимент вGPSSWorld– очень гибкий и мощный инструмент, так какcпомощью встроенного языкаPLUSможно задать выполнение разнообразных, достаточно сложных действий. Кроме того, выполняющийся эксперимент позволяет вызывать любые командыGPSSиз процедур на языкеPLUS. Подпрограммы на языкеPLUSделятся на процедуры (в заголовке используется ключевое словоPROCEDURE) и эксперименты(EXPERIMENT) Эти подпрограммы должны находиться в файле модели. Разница между этими двумя видами подпрограмм заключается в следующем. Процедурыcпомощью оператораRETURN могут возвращать значение, которое можно посмотретьcпомощью командыSHOW, либо использовать в других подпрограммах. Для этого сначала нужно оттранслировать модель вместеcпроцедурой или же просто процедуру, если модель не используется. При этом процедура регистрируется. Затем в меню нужно выбрать пунктCommand/SHOW и написать там название процедуры, указав в скобках нужные параметры или ничего не указывая (если параметров нет). После этого процедура выполняется и выдается результат.
Процедуры на языке PLUSтакже могут использоваться в командахGPSSв качестве операндов. В этом случае они заключаются в круглые скобки. Эти процедуры, в свою очередь, в качестве параметров могут использовать вызовы других процедур. Это очень мощное новшествоGPSSWorldзначительно повышает возможности и гибкость модели.
Эксперимент отличается от процедуры тем, что он может быть вызван (выполнен) только пользователем. Для этого нужно выбрать пункт меню Command/CONDUCT и написать там название эксперимента, указав в круглых скобках параметры, если они имеются, или ничего не указывая, если параметров нет. Что нового дает эксперимент? Ключевым моментом является то, чтоcпомощью библиотечной процедурыDoCommand можно вызывать любую командуGPSS, а это позволяет многократно выполнять прогоны модели и в каждом прогоне получать доступ к текущим результатам. Из подпрограммы эксперимента могут вызываться процедуры, которые в свою очередь могут вызывать другие процедуры и т.д. Причем из любой процедуры, на какой бы глубине вложенности вызовов она ни была, можно вызывать процедуруDoCommand. Поэтому структура выполняемого кода эксперимента может быть какой угодно сложной. Таким образом, пользовательский эксперимент объединяет в себе набор процедур на языкеPLUS, в котором одна из процедур имеет в заголовке ключевое словоEXPERIMENT. Выполнить такой эксперимент можноcпомощью командыCONDUCT. Разные эксперименты могут иметь общие вызываемые процедуры.
В пользовательском эксперименте для задания последовательности команд и исходных данных каждого прогона модели удобно использовать PLUS-процедуру. Такая процедура может инициализировать генераторы случайных чисел, выполнять команды и управлять имитацией.
В руководстве по GPSSWorldпользовательские эксперименты используются исключительноcпроцедуройANOVA, однако, их можно использовать для решения совершенно разных задач. Рассмотрим несколько практических примеров пользовательского эксперимента.
В этих задачах нужно найти значения параметров системы, при которых ее критерий эффективности достигает оптимума. Алгоритм поиска решения базируется на том, что экономические показатели реальных систем обычно представляют собой функции, имеющие единственный локальный экстремум, который и является глобальным. Рассмотрим еще раз задачу из примера 9.6. Использование в этом примере оптимизирующего эксперимента было не совсем корректным. Оптимизирующий эксперимент рассчитан на модели, работающие в стационарном режиме, а для данного примера нет гарантий, что за пять дней работы моделируемая система войдет в такой режим.
Поэтому следует считать, что система работает в переходном режиме, и для каждого значения количества работников необходимо провести некоторое число прогонов модели.
Воспользуемся программой из примера 9.6 и организуем для этой модели пользовательский эксперимент, но прежде рассмотрим алгоритм поиска оптимума. Предполагаем, что целевая функция, определяющая прибыль, имеет единственный оптимум. Если бы времена сборки и обработки детали на машине были бы детерминированными, то оптимальное количество работников находилось бы вблизи величины, равной отношению времени сборки к времени обработки. В этом случае машина была бы максимально загружена и работники не простаивали бы в ожидании ее освобождения. В действительности, в силу случайного характера этих времен, оптимальное число работников будет отличаться от значения, рассчитанного таким образом. Так как количество вариантов невелико, то можно воспользоваться методом их перебора, проводя эксперименты cразным числом работников, начинаяcодного. Таким образом, предполагаемый доход будет вначале увеличиваться до некоторого момента, а когда на каком-то шаге (при большем количестве работников) доход станет меньше, чем на предыдущем шаге, нужно остановиться. Оптимальное количество работников соответствует шагуcсамым большим значением дохода.
Для оценки дохода на каждом шаге при некотором фиксированном количестве работников будем выполнять 10 прогонов cразными начальными множителями генераторов случайных чисел и рассчитывать среднее арифметическое получаемого дохода. В общем случае число прогонов надо рассчитыватьcучетом требуемой точности оценки прибыли.
Добавим к модели программный текст на языке PLUS, реализующий вышеприведенный алгоритм поиска оптимального количества работников.
Переменная Flag1 используется для управления циклом. Сначала ей присваивается значение 1, условие выхода из цикла:Flag1 = 0. В переменнойPrev1 хранится значение дохода на предыдущем шаге. Вначале ей присваивается очень большое по модулю отрицательное значение, чтобы получаемый доход на первом шаге заведомо был больше. На каждой итерации цикла количество работниковNWorkersувеличивается на 1. Перед входом в цикл оно устанавливается равным 0.
Переменная Curlполучает значение дохода на текущем шаге. Если предыдущее значение дохода больше текущего, то выдается результат и осуществляется выход из цикла.
Для запуска эксперимента сначала нужно оттранслировать модель вместе cнаписанным программным текстом. Для этого выполняем пункт менюCommand/Create Simulation. Bceнаписанные процедуры регистрируются в системе. Затем в меню нужно выбрать пунктCommand/CONDUCT. В результате появится диалоговое окно'Conduct Experiment' Command (рис. 9.16).
Рис. 9.16
Для запуска пользовательского эксперимента, осуществляющего поиск оптимального числа работников, нужно в поле окна дописать название эксперимента Seek_Opt(). Если же нас интересует оценка величины прибыли для конкретного числа рабочих, например, для трех, то необходимо вызвать экспериментGo(3).
В результате выполнения эксперимента Seek_Opt() в журнале сессии появится множество записей, соответствующих выполняемым прогонам и, в конце концов, такой результат:
Понятно, что при желании можно выдавать любые промежуточные данные. Таким образом, оптимальное количество рабочих составляет 5, А доход равен 298,89 единиц стоимости, что совпадаетcоптимизирующим экспериментом (отличие в величине дохода объясняется разными подходами к формированию этой величины).
Подобным образом можно искать оптимум в задачах cлюбым количеством изменяемых параметров, нужно только вложить друг в друга циклыWHILEи перед поиском наилучшего значения целевой функции для конкретного значения параметра запоминать значение отклика для предыдущего значения этого параметра.
Пример 9.7 [10]. Рассмотрим швейное производство, в котором используются 40 собственных станков для изготовления продукции. Эти станки работают 150 ± 26 часов, после чего ломаются. Поломавшийся станок забирается в ремонтную мастерскую, где работает некоторое число рабочих, каждый из которых может ремонтировать один станок. Ремонт осуществляется в течение 8 ± 3 часов, после чего станки снова готовы к работе. Недозагрузка производственных мощностей обходится в 140 единиц стоимости в час за один станок из-за потерь, которые несет производство по недовыпуску продукции. Оплата одного рабочего составляет 4,75 единиц стоимости в час.
Кроме 40 собственных станков, имеющихся у предприятия, можно для подмены ломающихся арендовать аналогичные станки, Это обходится в 2,5 единицы стоимости в час за станок. Если в работе уже задействовано 40 станков, то отремонтированный станок становится в резерв.
Определить количество арендуемых станков и количество работников в ремонтной мастерской, при которых средние затраты на производство были бы минимальными.
Для поиска оптимума будем «разрезать» поверхность отклика плоскостями, которые соответствуют фиксированным значениям количества арендуемых станков и нанятых ремонтников. При фиксированном значении одного параметра график функции затрат будет представлять собой кривую в двумерном пространстве cодним минимумом (его можно найти точно так же, как в предыдущем примере). Таким образом, если мы будем последовательно изменять один параметр, по которому производится разрезание поверхности, то получаемые значения функции затрат при этом фиксируемом параметре будут сначала уменьшаться, А потом в какой-то момент снова пойдут на увеличение. Самое маленькое значение и будет наилучшим. Это следует из предполагаемого вида поверхности.
Программа:
Тексты пользовательских PLUS-процедур:
Оптимизировать в данном случае нужно средние затраты на производство за час, которые вычисляются следующим образом:
Среднее число работающих станков за все время моделирования, определяет СЧА SA$MANUF. Начальное количество ремонтников в модели может не задаваться. Оно нужно только для автономного запуска модели без подключенного эксперимента.
Внешний цикл эксперимента Seek_Opt() организует изменение количества арендуемых станков. Внутренний цикл последовательно изменяет количество работников (чтобы найти минимум функции затрат, становящейся двумерной). ПеременныеFlagl,Flag2 управляют выходом из циклов. ПеременныеPrevl,Curl,Flaglсоответствуют внешнему циклу;Prev2,Cur2,Flag2 – внутреннему. ПеременнаяPrev_N_WRKхранит значение количества рабочих на предыдущем шаге внешнего цикла (при меньшем фиксированном значении количества арендуемых станков), соответствующее наименьшему значению функции затрат. ПроцедураShow_lпредназначена для отображения промежуточных наименьших значений функции затрат и при каких значениях параметров они достигаются.
Для данной модели выполним два пользовательских эксперимента. Первый (Go) позволяет определить затраты на производство при конкретных значениях числа арендуемых станков и ремонтников, которые задаются как параметры в процедуре. Как и в предыдущем примере, средние затраты рассчитываются по 10 прогонам модели. Для выполнения этого эксперимента необходимо оттранслировать модельcподключенными процедурами, выполнить пункт менюCommand/CONDUCT и в диалоговом окне 'Conduct Experiment' Command вызвать процедуру GO
CONDUCT Go(5,3),
где 5 – число арендуемых станков и 3 – число ремонтников. Результат этого эксперимента:
Второй эксперимент Seek_Opt() запускается командой
CONDUCT Seek_Opt()
и позволяет методом направленного перебора найти вариант, соответствующий минимальным затратам. Для каждого нового варианта сочетания числа станков и рабочих при старте в операторе STORAGEпереопределяется емкость МКУ для нового значения количества ремонтников. Опустив промежуточные результаты, приведем конечный результат для этого эксперимента.
Из приведенных результатов видно, что на предыдущем шаге рассматривался вариант c8 станками и 6 рабочими, однако, затраты при этом сочетании оказались больше, чем при 7 станках и 6 рабочих.
Поэтому в качестве окончательного был принят вариант c7 станками и 6 рабочими при средних часовых затратах на производство 52.5568 единиц стоимости.
- Предисловие
- Введение
- Глава 1. Модели массового обслуживания
- 1.1. Системы массового обслуживания и их характеристики
- 1.2. Системыcодним устройством обслуживания
- 1.3. Основы дискретно-событийного моделированияCmo
- 1.4. Многоканальные системы массового обслуживания
- Переменная vаr1, экспоненциальное распределение
- Глава 2. Вероятностные сети систем массового обслуживания
- 2.1. Общие сведения о сетях
- 2.2. Операционный анализ вероятностных сетей
- 2.3. Операционные зависимости
- 2.4. Анализ узких мест в сети
- Глава 3. Вероятностное моделирование
- 3.1. Метод статистических испытаний
- 3.2. Моделирование дискретных случайных величин
- 3.3. Моделирование непрерывных случайных величин
- 3.4. Сбор статистических данных для получения оценок характеристик случайных величин
- 3.5. Определение количества реализаций при моделировании случайных величин
- Глава 4. Система моделированияgpss
- 4.1. Объекты
- 4.2. Часы модельного времени
- 4.3. Типы операторов
- 4.4. Внесение транзактов в модель. БлокGenerate
- 4.5. Удаление транзактов из модели. БлокTerminate
- 4.6. Элементы, отображающие одноканальные обслуживающие устройства
- 4.7. Реализация задержки во времени. БлокAdvance
- 4.8. Сбор статистики об ожидании. БлокиQueue,depart
- 4.9. Переход транзакта в блок, отличный от последующего. БлокTransfer
- 4.10. Моделирование многоканальных устройств
- 4.11. Примеры построенияGpss-моделей
- 4.12. Переменные
- 4.13. Определение функции вGpss
- 4.14. Стандартные числовые атрибуты, параметры транзактов. Блоки assign, mark, loop
- Примеры фрагментов gpss-моделейcиспользованием сча и параметров гранзактов
- 4.15. Изменение приоритета транзактов. БлокPriority
- 4.16. Организация обслуживанияcпрерыванием. Блоки preempt и return
- 4.17. Сохраняемые величины
- 4.18. Проверка числовых выражений. БлокTest
- 4.19. Определение и использование таблиц
- 4.20. Косвенная адресация
- 4.21. Обработка транзактов, принадлежащих одному семейству
- 4.22. Управление процессом моделирования в системеGpss
- 4.23. Списки пользователей
- 4.24. Блоки управления потоками транзактовLogic,gatelr,gatelSиGate
- 4.25. Организация вывода временных рядов изGpss-модели
- 4.26. Краткая характеристика языкаPlus
- 4.27. КомандыGpssWorId
- 4.28. Диалоговые возможностиGpssWorld
- 4.29. Отличия междуGpssWorldиGpss/pc
- Глава 5. Моделирование вычислительных и операционных систем
- 5.1. Операционные системы компьютеров
- 5.2. Сети и системы передачи данных
- 5.3. Проблемы моделирования компьютеров и сетей
- Глава 6. Основы моделирования процессов
- 6.1. Производственные процессы
- 6.2. Распределительные процессы
- 6.3. Процессы обслуживания клиентов
- 6.4. Процессы управления разработками проектов
- Глава 7. Задания для самостоятельной работы Задание 1. Моделирование разливной линии
- Задание 2 [10]. Моделирование контроля и настройки телевизоров
- Задание 3. Моделирование работы кафе
- Задание 4. Моделирование работы обрабатывающего цеха
- Задание 5. Моделирование работы обрабатывающего цеха
- Задание 6. Моделирование работы обрабатывающего цеха
- Задание 7. Моделирование работыCmo
- Задание 8. Моделирование функций
- Задание 9 [10]. Моделирование системы обслуживания
- Задание 10 [16]. Моделирование системы автоматизации проектирования
- Задание 11 [16]. Моделирование работы транспортного цеха
- Задание 12 [16]. Моделирование системы передачи разговора
- Задание 13 [16]. Моделирование системы передачи данных
- Задание 14 [16]. Моделирование узла коммутации сообщений
- Задание 15 [16]. Моделирование процесса сборки
- Задание 16 [16]. Моделирование работы цеха
- Задание 17 [16]. Моделирование системы управления производством
- Задание 18. Моделирование производственного процесса
- Задание 19. Моделирование работы заправочной станции
- Задание 20. Моделированиеработы станции технического обслуживания
- Задание 21. Моделирование работы станции скорой помощи
- Задание 22. Моделирование работы госпиталя
- Задание 23. Моделирование работы маршрутных такси
- Задание 24. Моделирование работы печатной системы
- Задание 25. Моделирование процесса сборки пк
- Глава8. Проектирование имитационных моделей c помощью интерактивной системы имитационного моделирования
- 8.1. Структура интерактивной системы имитационного моделирования
- 8.2. Построение концептуальной схемы модели
- 8.3. Параметрическая настройка модели
- 8.4. Генератор формул
- 8.5. Управление экспериментом
- 8.6. Запуск эксперимента и обработка результатов моделирования
- 8.7. Управление проектами и общей настройкой системы
- 8.8. Пример построения модели средствамиIss2000
- Глава 9. Технология имитационного моделирования
- 9.1. Имитационные проекты
- 9.2. Организация экспериментов
- 9.3. Проблемы организации имитационных экспериментов
- 9.4. Оценка точности результатов моделирования
- 9.5. Факторный план
- 9.6. Дисперсионный анализAnovAв планировании экспериментов
- 9.7. Библиотечная процедураAnova
- 9.8. Технология проведение дисперсионного анализа в системеGpssWorld
- 9.9. Особенности планирования экспериментов
- 9.10. Нахождение экстремальных значений на поверхности отклика
- 9.11. Организация экспериментов вGpssWorId
- 9.L2. Выбор наилучшего варианта структуры системы
- Глава 10. Примеры принятия решенийcпомощью имитационного моделирования
- 10.1. Моделирование производственного участка
- 10.2. Моделирование технологического процесса ремонта и замены оборудования
- Приложение Системные сча
- Сча транзактов
- Сча блоков:
- Сча одноканальных устройств:
- Сча очередей
- Сча таблиц
- Сча ячеек и матриц ячеек сохраняемых величин:
- Сча вычислительных объектов
- Список литературы
- Срдержание
- Глава 5. Моделирование вычислительных и операционных систем 132
- Глава 10. Примеры принятия решений c помощью имитационного моделирования 201