1УДК 372.8 ББК 74.263.2
ОПТИМИЗАЦИОННЫЙ ЭКСПЕРИМЕНТ В СРЕДЕ ANYLOGIC
А. И. Калугин
В данной статье приводится подробное описание компьютерного оптимизационного эксперимента, рекомендуемого к проведению в процессе изучения имитационного моделирования в курсе информатики. В статье присутствуют методические рекомендации, необходимые иллюстративные материалы, а также задания для самостоятельного выполнения. На конкретном примере рассмотрено использование новых видов учебной деятельности в среде компьютерного моделирования AnyLogic, доступной для бесплатного использования в образовательных целях.
Ключевые слова: моделирование, модель, компьютерный эксперимент, имитационное моделирование, оптимизация, оптимизационный эксперимент, AnyLogic.
OPTIMIZATION EXPERIMENT IN ANYLOGIC
A. I. Kalugin
The article deals with the detailed description of computer optimization experiment which is recommended to use in the process of learning simulation in the computer science course. The article contains methodical recommendations, all the required illustrations and self-study tasks. Trough a specific example the author explains how to apply the new types of learning using the simulation modeling tool Any Logic free for educating purposes.
Keywords: modeling, model, computer experiment, imitation modeling, optimization, optimization experiment, AnyLogic.
Согласно федеральным государственным образовательным стандартам, одним из требований к предметным результатам освоения курса информатики в средней школе является получение учащимся опыта построения и использования компьютерно-математических моделей, проведения экспериментов и статистической обработки данных с помощью компьютера, интерпретации результатов, получаемых в ходе моделирования реальных процессов, а также умение оценивать числовые параметры моделируемых объектов и процессов, пользоваться базами данных и справочными системами. На наш взгляд, данное требование реализуется лучше всего посредством деятельностного подхода в образовательном процессе. Перед учащимся ставится определенная актуальная в реальной жизни задача, которую предлагается самостоятельно решить средствами компьютерного моделирования в среде АпуЬодк. Одним из важных достоинств среды АпуЬодк является доступность ее учебной версии
для бесплатного использования в образовательном процессе. Скачать эту версию вместе с лицензионным соглашением возможно по ссылке: http:// metodist.lbz.ru/authors/informatika/8/.
Рассмотрим в качестве примера использования среды AnyLogic проведение так называемого оптимизационного эксперимента.
Любой магазин, любая организация, занимающаяся работой с потоком клиентов - будь то банковский офис или отделение единого информационно-расчетного центра - сталкиваются рано или поздно с проблемой расчета необходимого количества сотрудников (кассиров, операционистов). Число работников при этом, с одной стороны, не должно быть очень маленьким, чтобы не собирать огромные очереди недовольных клиентов, но, с другой стороны, не должно быть и слишком большим, иначе организация понесет лишние расходы на зарплату. Расчет оптимального количества сотрудников, которое будет зависеть от интенсивности потока клиентов, среднего времени обслужи-
вания и других параметров, является примером решения задачи оптимизации.
Справиться с этой задачей можно, подготовив и решив систему уравнений, однако учет всех параметров и связей даже такой простой системы, как описана выше, может потребовать введение в модель большого количества переменных, что неизбежно приведет в итоге к достаточно громоздким вычислениям.
Куда более рациональным будет в этом случае прибегнуть к средствам компьютерного моделирования, позволяющим вместо сложных и не всегда возможных аналитических преобразований свести все к рутинным расчетам, то есть опереться на вычислительные мощности компьютера.
Пользователю в этом случае остается лишь задать объекты, параметры и связи, входящие в моделируемую систему, а также правильно интерпретировать полученные на выходе результаты. Рассмотрим пример решения подобной задачи в среде AnyLogic.
1. Создание дискретно-событийной модели работы касс магазина.
Для создания модели магазина самообслуживания нам понадобятся следующие элементы из блока «Основная библиотека»: source (источник заявок, то есть посетителей магазина), delay (задержка заявок, связанная с тем, что посетителю требуется какое-то время на выбор покупок), service (обслуживание на кассовой линии), resourcePool (элемент, отвечающий за количество кассиров) и sink (уничтожение заявок).
Последовательно перетащим элементы из блока «Палитра» в рабочее окно модели и соединим их линиями так, как показано на рис. 1.
Следующим этапом создания модели будет изменение свойств каждого из добавленных элементов.
1) Элемент source (рис. 2). • Так как данный элемент отвечает за появ-
Рис. 2. Свойства элемента source
ление заявок (покупателей в магазине), переименуем его в enter (вход).
• Очевидно, что в разное время суток покупатели заходят с разной интенсивностью, но пока для простоты будем считать, что частота появления в магазине новых клиентов все время одинакова и равна 2 человекам в одну минуту.
2) Элемент delay (рис. 3).
Рис. 1. Необходимые элементы модели
Рис 3. Свойства элемента delay
• Переименуем его в shopping, так как этот элемент отвечает за время, требующееся зашедшему в магазин человеку на выбор покупок.
• Для того чтобы выставить это время, используем функцию треугольного распределения triangular. Будем считать, что минимум на процедуру выбора потребуется 5 мин, максимум - 1 ч, а наиболее вероятным укажем время в 20 мин.
• Поле максимальная вместимость отметим галочкой, так как в условиях нашей модели магазин будем считать способным вместить сколько угодно покупателей.
3) Элемент service.
• Переименуем данный элемент в queue (очередь).
• В поле количество ресурсов оставим значение, равное единице, так как на обслуживание одного покупателя обычно требуется лишь один кассир (один ресурс).
• Время задержки, то есть время, необходимое посетителю для оплаты покупок в кассе, укажем также при помощи треугольного распределения triangulares, 1,5).
• Поле максимальная вместимость очереди отметим галочкой, так как в процессе последующего эксперимента при определенных параметрах очередь может оказаться очень большой.
4) Элемент resourcePool.
• Переименуем в cashiers (кассиры).
• Количество ресурсов (в нашем случае количество кассиров) укажем равным 4. Впоследствии это число мы изменим на параметр, который будет изменяться в зависимости от интенсивности потока покупателей.
5) Элемент sink просто переименуем в exit (выход).
Запустим получившуюся модель. Зеленые цифры над элементами shopping и queue показывают, сколько человек в данный момент выбирает товар, а сколько уже стоит в очередях к кассам. Однако данное отображение не является для нас особенно информативным. Гораздо важнее для нас будет не текущий размер очередей, а их усредненное по времени значение. Для того, чтобы собрать такую информацию, необходимо добавить в рабочее окно программы элемент Статистика, переименовав его в queueSize. В поле значение данного элемента пропишем формулу queue.queueSize()/4, где цифра 4 означает количество кассиров, так как необходимо одну большую очередь к кассам
Рис. 4. Модель в работе
разделить на 4 равных по величине очереди. В свойствах queue разрешим сбор статистики, поставив соответствующую галочку.
Теперь мы можем наглядно отобразить средний размер очереди в кассу при помощи столбиковой диаграммы. Перетащим соответствующий элемент в рабочую область. В свойствах щелкнем на добавить элемент данных и зададим в поле значение формулу queueSize. mean(). Масштаб диаграммы выберете на свое усмотрение.
Запустив снова симуляцию модели, увидим на диаграмме, что средняя очередь постепенно растет и за 720 мин (12 ч) достигает величины порядка 8 человек (рис. 4). Если же изменить интенсивность прибытия покупателей с 2 человек в минуту на 1, то увидим, что размер очереди с течением времени не возрастает и по величине близок к 0. Очевидно, что для такой интенсивности потока клиентов 4 кассира - это слишком много.
Дополнительные задания к части 1.
1. Построенная модель не ограничена по времени, в то время как большинство магазинов работают не круглосуточно, а с утра и до вечера. Попробуйте ограничить время работы модели одним днем с 10 утра до 10 вечера. Делается это во вкладке Модельное время в свойствах объекта Simulation.
2. В нашей модели интенсивность прибытия покупателей в магазин есть величина постоянная. Но в реальной жизни интенсивность зависит от времени суток (утром покупателей очень мало, а вечером, наоборот, много) и дня недели (будни или выходные). Попробуйте за-
дать интенсивность, зависящую от расписания. Для этого перетащите в рабочее окно элемент Расписание вкладки Основная, задайте в его свойствах нужное расписание. Затем в свойствах объекта Enter укажите, что заявки должны прибывать согласно интенсивности (по расписанию), и сошлитесь на объект Расписание.
2. Эксперимент по оптимизации.
Само собой, ставить четырех кассиров в магазин, где спокойно управляется с работой и меньшее число человек, никто не будет, так как это приведет к излишним затратам на заработную плату. Однако чрезмерная экономия на количестве работников повлечет за собой образование больших очередей, что может негативно отразиться на репутации магазина. Разумнее всего в этом случае найти оптимальное решение, то есть минимальное количество кассиров, при котором средняя очередь не будет превышать заданное значение. Используем для этого Оптимизационный эксперимент, встроенный в Anylogic.
Наша цель - проведя большое количество прогонов модели определить статистически оптимальное значение этого показателя. На основании полученных при этом данных, специальный алгоритм OptQuest, один из лучших на сегодняшний день, определит оптимальное для этой модели решение. Алгоритм этот сложен, в нем используются и методы математической оптимизации, и нейронные сети, и эвристики поиска решения. Алгоритм запатентован и его содержание правообладатель не публикует.
Конечно, сами прогоны в отличие от наших экспериментов, показываться не будут - нас будет интересовать только результат, полученный в каждом из них.
Для начала добавим в рабочее окно модели параметр, перетащив его из палитры Основная. Переименуем его в numberOfCashiers. Зададим целочисленный тип (integer) и значение по умолчанию, равное 4. Этот параметр в дальнейшем мы и будем оптимизировать. В свойствах объекта cashiers в поле количество ресурсов заменим число 4 на numberOfCashiers.
Можно приступать к созданию нового эксперимента. Для этого необходимо щелкнуть правой кнопкой в левом окне на названии модели и выберать Создать - Эксперимент - Оптимизация.
Рис. 5. Основные свойства оптимизационного эксперимента
Для проведения эксперимента необходимо указать целевую функцию, которую мы хотим минимизировать или максимизировать. В нашем случае это будет минимизация добавленного только что параметра numberOfCashiers. Поэтому на вкладке Основные свойств эксперимента укажем, что в качестве целевой функции мы хотим видеть параметр root.numberOfCa-shiers. Указатель root необходим, так как параметр расположен не в окне оптимизационного эксперимента, а в активном классе модели. Чуть ниже зададим дискретное изменение данного параметра от 1 до 100 с шагом 1 (рис. 5). Это означает, что эксперимент будет выполняться снова и снова, но количество кассиров будет меняться от одного до двадцати, и для каждого значения параметра numberOfCashiers будет измеряться среднее значение очереди.
Суть нашего эксперимента заключается в том, что необходимо найти то минимально допустимое количество работников, при котором средняя очередь в кассу не превысит заданного нами значения. Величина, которой мы ограничиваем очередь, в разных магазинах может быть очень и очень разной и определяется многими факторами, как, например, ценовой категорией магазина (вряд ли клиент дорогого магазина захочет стоять в длинной очереди) или наличием свободного пространства (при его отсутствии длинные очереди могут блокировать проход покупателей, еще не выбравших товар). Так или иначе, но перед запуском оптимизационного эксперимента мы должны точно знать, очереди какой длины являются для нашего магазина
Рис. 6. Ограничения эксперимента
предельно допустимыми. Для определенности предположим, что число это будет равно 5. Перейдем во вкладку Ограничения и потребуем, чтобы значение root.queueSize.mean() в процессе эксперимента не превышало 5 (рис. 6).
Большая часть магазинов работает с 10 утра до 10 вечера. Поэтому и мы ограничим время выполнения эксперимента 12 часами (720 минут). Для этого перейдем на вкладку Модельное время и укажем начальное время -0.0, а конечное время - 720.0.
После этого возвращаемся во вкладку Основные и нажимаем на кнопку Создать интерфейс.
Обратите внимание, что теперь, если щелкнуть на кнопке запуска модели, для запуска будут доступны два эксперимента. Один из них - Simulation - простой эксперимент по симуляции модели, который мы запускали ранее. Второй же эксперимент и есть оптимизационный. Запустим его.
Перед нами откроется новая форма, в которой щелкнем на кнопку Запустить оптимизацию. На рис. 7 показан результат выполнения такого эксперимента. На графике справа отображена зависимость значений оптимизируемого параметра от номера итерации (одна итерация - одно выполнение эксперимента при определенных значениях «перебираемого» параметра numberOfCashiers). Причем красным отображено лучшее недопустимое значение, то есть значение, полученное без учета ограничений, наложенных на оптимизируемую модель. А синим - лучшее допустимое. Мы видим, что с увеличением количе-
Рис. 7. Результаты оптимизационного эксперимента
ства итераций, значение оптимизируемого параметра стремится к 5. Это же значение показано в желтом окошке, слева от графика. Следовательно, для заданных нами начальных условий наименьшее возможное количество работников будет равным 5.
Дополнительное задание к части 2. В процессе оптимизации может возникнуть необходимость в многократном изменении входных данных (у нас это интенсивность потока клиентов). При этом каждый раз закрывать эксперимент и изменять значение интенсивности вручную - достаточно долгая и неудобная для пользователя процедура. Гораздо проще было бы, если бы в окне эксперимента располагался ползунок, регулирующий входной параметр. Для того чтобы добавить его, перетащите ползунок из палитры Элементы управления и самостоятельно настройте его на управление потоком клиентов.
СПИСОК ИСТОЧНИКОВ И ЛИТЕРАТУРЫ
1. Калинин, И. А. Информатика. 10 класс. Углубленный уровень [Текст]: учебник / И. А. Калинин, Н. Н. Самылкина. - М.: Бином, 2013.
2. Калинин, И. А., Самылкина Н. Н. Основы имитационного моделирования [Текст] / И. А. Калинин, Н. Н. Самылкина // 1 сентября: информатика. - 2013. - № 5.
3. Grigoryev, I. AnyLogic 6 in three days: a quick course in simulation modeling [Текст] / I. Grigoryev. - The AnyLogic Company, 2012.
4. Мезенцев, К. Н. Моделирование систем в среде AnyLogic 6.4.1. [Текст]: учеб. пособие / К. Н. Мезенцев. - М.: МАДИ, 2011.
5. Коровин, А. М. Моделирование систем [Текст] / А. М. Коровин. - Челябинск: Издат. центр ЮУрГУ, 2010.
6. Осоргин, А. Е. AnyLogic 6. Лабораторный практикум [Текст] / А. Е. Осоргин. - Самара: ПГК, 2012.
REFERENCES
1. Kalinin I. A., Samylkina N. N. Informatika. 10 klass. Uglublennyy uroven: uchebnik. Moscow: Binom, 2013.
2. Kalinin I. A., Samylkina N. N. Osnovy imitatsi-
onnogo modelirovaniya. 1 sentyabrya: informatika. 2013, No. 5.
3. Grigoryev I. AnyLogic 6 in three days: a quick course in simulation modeling. The AnyLogic Company, 2012.
4. Mezentsev K. N. Modelirovanie sistem v srede AnyLogic 6.4.1.: ucheb. posobie. M.: MADI, 2011.
5. Korovin A. M. Modelirovanie sistem. Chelyabinsk: Izdat. tsentr YuUrGU, 2010.
6. Osorgin A. E. AnyLogic 6. Laboratornyyprakti-kum. Samara: PGK, 2012.
Калугин Александр Игоревич, старший преподаватель кафедры прикладной математики, информатики и информационных технологий факультета физики и информационных технологий Московского педагогического государственного университета; соискатель кафедры теории и методики обучения информатике Московского педагогического государственного университета e-mail: [email protected]
Kalugin Alexander I., Senior Lecturer, Mathematics, Informatics and Information Technologies Department, Physics and Information Technologies Faculty, Moscow State Pedagogical University; Post-Graduate Student, Theory and Methods of Teaching Computer Sciences Department, Moscow State Pedagogical University e-mail: [email protected]