Чтобы настроить оптимизацию в AnyLogic, нужно выполнить следующие
шаги:
1. Создать в разработанной модели оптимизационный эксперимент.
2. Задать оптимизационные параметры (компоненты изменяемого вектора исходных факторов х) и области их изменения.
3. Задать условие остановки модели после каждого прогона. Это может быть либо остановка по времени выполнения прогона, либо остановка по условиям, накладываемым на переменные модели.
4. Задать целевую функцию — ту функцию, значение w которой отражает предпочтительность вектора исходных факторов х. Значение w должно быть доступно в конце каждого прогона модели, оно будет использоваться оптимизатором.
5. Задать ограничения, которые в конце каждого прогона определяют, допустимо ли значение вектора исходных факторов х. Ограничения можно не задавать (т. е. это опционально).
6. Задать условия прекращения оптимизации.
В следующем разделе мы рассмотрим пример оптимизации, в котором все эти шаги конкретизированы.
Пример оптимизации
В главе 3 была рассмотрена система предоставления услуг мобильной связи с помощью автоматической телефонной станции, на которую поступают вызовы. Поставщик сервиса выбирает оборудование автоматической теле-фонной станции, он оценивает параметры потока входых запросов (как часто люди будут звонить) и характеристики потока обслуживания (сколько времени требуется для получения консультации по телефону). Проблема-состоит в определении числа каналов, которые дадут ему максимальную прибыль. Введение дополнительных каналов связи приведет к росту доходов вследствие уменьшения числа необслуженных вызовов, но потребует допол-нительных вложений. Какое число каналов выбрать поставщику сервиса?
Будем считать, что за каждый отвергнутый вызов платится штраф (усред-ненные потери от неудовлетворенности клиента), а обслуженные вызовы приносят доход. Имея стоимость поддерживаемых каналов связи, можно в качестве целевой функции в этой модели выбрать прибыль, определяемую как разность доходов за обслуживание телефонных вызовов и расходов на оборудование, обслуживание станции и штрафы. Прибыль будем подсчиты-вать в среднем за единицу времени, например за минуту. Она равна доходу минус расходы на оборудование (вместе со стоимостью обслуживания) и штрафы за отказ в обслуживании (все приведенное к стоимости в течение одной минуты).
Структура модели
Структура модели представлена на рис. 9.9.
Откройте новый проект, назовите его MobileCommunication. Из Enterprise Library с помощью мыши перенесите блоки структуры системы в поле редактора структуры модели и соедините их в соответствии с рис. 9.9. Нам нужен один источник заявок (блок source), блок, решающий, отказать или нет пришедшей заявке в обслуживании в соответствии с некоторым условием
(selectOutput), блок обработки входных заявок с использованием ресурсов — в нашем случае каналов связи (processQ), блок ресурсов (resource) и два блока стока (sink и sink1) — рис. 9.10.
Очевидно, что поток поступающих заявок и поток обслуживания имеют ве-роятностную природу. Для простоты будем считать, что они экспоненциальны. Введем в модель три параметра: целый N (число линий связи) и два естественных lambda (интенсивность поступления заявок) и mu (интенсивность их обслуживания каждым каналом). Установим начальные значения
для них N=3, lambda=l. 5 И mu=0. 5.
Параметры модели
Для определения характеристик эффективности системы установим сле-дующие параметры для блоков системы.
□ Блок source. У параметра interarrivalTime оставим экспоненциальное распределение, но установим у этого распределения параметр lambda.
□ Блок selectOutput посылает принятые заявки на свой выход т при условия
истинности параметра selectcondition. В нашей модели это условие
должно быть истинно только в том случае, когда процессор process0
имеет свободные линии. Число обрабатываемых в этом блоке заявок
можно получить, обратившись к функции sizeDelay(). Итак, в поле па-
раметра seiectcondition блока selectOutput нужно установил
processQ.sizeDelay()<N.
□ Блок processQ. Здесь параметр delayTime установите как exponential (пи)
Остальные параметры оставьте неизмененными. В частности, параметр
quantity определяет число ресурсов на одну входную заявку, он уже
установлен в 1, параметр queuecapacity определяет длину очереди в про
цессоре, но у нас длина очереди не будет влиять на работу блока (мы
определили, что в блок приходит заявка, если только для нее есть
ресурс).
□ Блок resource требует установки только одного параметра — capacity установите для него значение N.
Сравните свою модель с моделью ErlangProblem1 папки Model Examples\Part III. Запустите модель в режиме виртуального времени. Через несколько секунд некоторые из требуемых характеристик уже появятся в анимированном окне структуры (рис. 9.11).