Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 446 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 6:

Модель функционирования системы связи

Переключение между областями просмотра

Мы не акцентировали внимание при построении модели на элементах презентации, которые вы уже видели на некоторых рисунках, для переключения между областями просмотра. Если вы не добавляли их, добавьте и укажите свойства согласно Табл. 5.6.

Синим цветом выделены элементы презентации, предназначенные для перехода по щелчку к соответствующим областям просмотра. Чёрным цветом выделены элементы презентации без перехода к каким-либо областям просмотра.

Таблица 5.6.
Элемент презентации Действие по щелчку
Постановка на дежурство (Рис. 5.7)
Имитация дежурства. Текущие результаты degurstvo.дежурство.navigateTo();
Статистика degurstvo.статистика.navigateTo();
Исходные данные исходные_данные_ПД.navigateTo();
Исходные данные ПД (Рис. 5.3)
Постановка на дежурство постановка.navigateTo();
Имитация дежурства (Рис. 5.11)
Постановка на дежурство main.постановка.navigateTo();
Статистика статистика.navigateTo();
Исходные данные исходные_данные_Д.navigateTo();
Исходные данные Д (Рис. 5.9)
Постановка на дежурство main.постановка.navigateTo();
Имитация дежурства дежурство.navigateTo();
Статистика статистика.navigateTo();
Текущие результаты (Рис. 5.10)
Постановка на дежурство main.постановка.navigateTo();
Имитация дежурства дежурство.navigateTo();
Статистика статистика.navigateTo();
Статистика (Рис. 5.12)
Постановка на дежурство main.постановка.navigateTo();
Имитация дежурства дежурство.navigateTo();
Текущие результаты текущие_результаты.navigateTo();
Исходные данные исходные_данные_Д.navigateTo();

Отладка модели

В ходе построения модели вы можете совершить различные ошибки. Мы же остановимся на одной их тех, которая требует хороших знаний или "тонкостей" AnyLogic.

Запустите модель. Ошибка, о которой мы говорим, появится практически сразу после запуска (Рис. 5.13 и 5.14).

В Библиотеке моделирования процессов реализован pull-протокол передачи заявок между объектами. Суть заключается в том, что следующий объект "вытягивает" заявку из предыдущего объект, если он может её принять. Это работает для объектов, которые могут держать в себе заявку некоторое время. Для примера рассмотрим следующую диаграмму процесса:

...-> split -> selectOutput -> queue -> delay ->...

В этом случае объекты, которые заявка проходит насквозь (split и selectOutput), просматриваются объектами queue и delay, чтобы оценить возможность прохода заявки.

Сообщение об ошибке

Рис. 5.13. Сообщение об ошибке

Если объекты могут принять заявку, они мгновенно "вытягивают" её, вследствии чего код в поле При выходе копии объекта split, который был нами ранее введён (см. Рис. 5.5) не выполняется. Это приводит к некорректной маршрутизация заявок в модели.

Поясним это. На Рис. 5.14 видно, что 64 заявки, соответствующие типу СС1, проходят не через свой выход true, а через выход false как заявки, соответствующие типу СС5. Это может быть только в том случае, когда в поле entity.tipCC ничего не заносится, то есть при неработающем коде в поле При выходе копии объекта split.

Для выполнения некоторых действий заявки, когда она проходит через какое-то место диаграммы процесса, в данном случае перед попаданием в selectOutput, но уже после выхода из split, можно использовать объект plain Transfer. В него вы можете вписать код для действий заявки, который был ранее записан в поле При выходе копии объекта split.

  1. Удалите связь между выходом копии объекта split и входом объекта selectOutput.
  2. В Библиотеке моделирования процессов откройте Местоположение и размер.
  3. Перетащите объект plain Transfer и соедините его вход с выходом копии объекта split, а выход - со входом объекта selectOutput. Замените тип заявки на ComFacility.
  4. Код из поля При выходе копии объекта split перепишите в поле При подходе ко входу: объекта plain Transfer.

Запустите модель. На Рис. 5.15 и Рис. 5.16 показаны результаты моделирования.

Остановка модели по ошибке

увеличить изображение
Рис. 5.14. Остановка модели по ошибке
Результаты моделирования

увеличить изображение
Рис. 5.15. Результаты моделирования
Результаты моделирования в сегменте Статистика

увеличить изображение
Рис. 5.16. Результаты моделирования в сегменте Статистика

Проведение экспериментов

AnyLogic предоставляет пользователю возможность провести следующие эксперименты:

  • простой эксперимент;
  • оптимизация;
  • варьирование переменных;
  • сравнение прогонов;
  • Монте-Карло;
  • анализ чувствительности;
  • калибровка;
  • нестандартный.

Последние пять экспериментов доступны только в AnyLogic Professional.

Простой эксперимент

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

При создании модели автоматически создается один простой эксперимент, названный Simulation. Именно такой эксперимент мы с вами и рассматривали до сих пор.

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

Далее в рамках данного пособия мы остановимся на доступных в версии AnyLogic University экспериментах оптимизации и варьирования переменных, овладев методиками проведения которых, вы самостоятельно сможете выполнять в AnyLogic Professional и другие эксперименты.

Связывание параметров

Начиная создавать модель в AnyLogic, мы ничего не говорили об экспериментах и особенностях их проведения. Поэтому все исходные данные разместили на Исходные_данные_ПД (Рис. 5.3) и Исходные_данные_Д (Рис. 5.9) так, как нам представлялось удобным для построения модели и управления ею в ходе проведения простого эксперимента.

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

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

Разместите элементы, как показано на Рис. 5.17. Внесите соответствующие изменения в модель. Обратите внимание на различие имён связываемых параметров, например, КССР_1.

Свяжите параметры корневого типа агента Main с параметрами вложенного объекта типа агента Degyrstvo.

  1. Откройте диаграмму типа агента Main.
  2. Выберите на диаграмме вложенный объект degyrstvo.
  3. Перейдите на панель Свойства. В таблице Параметры в поле Значение введите имя параметра типа агента-владельца Main, значение которого нужно передавать параметру вложенного объекта. В результате у вас должно быть так, как на Рис. 5.18.
Размещение элементов на Исходные_данные_ПД

увеличить изображение
Рис. 5.17. Размещение элементов на Исходные_данные_ПД
Фрагмент страницы Параметры после связывания параметров

увеличить изображение
Рис. 5.18. Фрагмент страницы Параметры после связывания параметров
Первый эксперимент Оптимизация стохастических моделей

Эксперимент Оптимизация может проводиться в AnyLogic оптимизатором OptQuest для детерминированных и стохастических моделей.

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

  1. В панели Проект Щёлкните правой кнопкой мыши элемент модели Система_связи и из контекстного меню выберите Coздать/ Эксперимент. В появившемся диалоговом окне из списка Тип эксперимента: выберите Оптимизация (Рис. 5.19).
    Диалоговое окно Новый эксперимент

    Рис. 5.19. Диалоговое окно Новый эксперимент
  2. В поле Имя: введите имя эксперимента, например, Система_связи_Оптимизация1. Имя эксперимента должно начинаться с заглавной буквы - правило названия классов в Java.
  3. В поле Агент верхнего уровня: выберите Main. Этим действием вы задали корневой (главный) класс эксперимента. Объект этого класса будет играть роль корня иерархического дерева объектов модели, запускаемой оптимизационным экспериментом.
  4. Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из: и выберите эксперимент из расположенного справа выпадающего списка. В данном случае оставьте, так как есть: Simulation.
  5. Щёлкните кнопку Готово. Появится страница Основные панели Свойства (Рис. 5.20).
  6. Установите опцию максимизировать.
  7. Целевая функция доступна как root. Поэтому в поле Целевая функция введите root.degurstvo.koefPribil.
  8. На странице Случайность установите Фиксированное начальное число (воспроизводимые прогоны).
  9. В поле Начальное число введите 5672.
  10. Оставьте установленным флажок Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
  11. Число итераций модели при полном факторном эксперименте, то есть число всех возможных сочетаний факторов, определяется по формуле:
    I=k_1\cdot  k_2 \cdot ...\cdot k_i\cdot ...\cdot k_m,

    где k_i - число уровней i-го фактора, i=\overline{1,m}.

  12. В нашей модели нужно менять количество резервных средств связи КССР_1…КССР_5 и количество мастеров-ремонтников Kol_master, то есть всего m=6 факторов. Факторы имеют следующие уровни: k_1=3, k_2=k_3=k_4=6, k_5=k_6=5. Тогда число итераций
    I=k_1\cdot  k_2 \cdot k_3 \cdot k_4 \cdot k_5 \cdot k_6 \cdot = 3 \cdot 6 \cdot 6 \cdot 6 \cdot 5\cdot 5 = 16200.
    Вкладка Основные оптимизационного эксперимента

    увеличить изображение
    Рис. 5.20. Вкладка Основные оптимизационного эксперимента
  13. Введите 500 в поле Количество итераций:, так как данная версия AnyLogic ограничена этим количеством итераций.
  14. Задайте параметры, значения которых будут меняться. В таблице на Рис. 5.21 перечислены все параметры агента верхнего уровня Main.
  15. Чтобы разрешить варьирование параметров оптимизатором, перейдите на строку с параметром КССР_1. Щёлкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Так как параметр KCCР_1 целочисленный типа int, выберите дискретный.
  16. Задайте диапазон допустимых значений параметра. Для чего введите в ячейку Мин. минимальное значение 1, в ячейку Макс. максимальное значение, например, для КССР1, 3. Так как параметр дискретный, в ячейке Шаг укажите величину шага 1.
  17. Задайте так же остальные параметры, как на Рис. 5.20.
  18. Перейдите на страницу Репликации панели Свойства.
  19. Установите флажок Использовать репликации.
  20. Число репликаций (прогонов) в одной итерации (наблюдении) может быть фиксированным или переменным. Фиксированное число репликаций, например, при доверительной вероятности \alpha =0,95, точности \varepsilon  =0,1 и стандартном отклонении \sigma  =0,1 может быть определено по формуле:
    N=t^2_\alpha \frac{\sigma ^2}{\varepsilon ^2}=1,96^2\frac{0,1^2}{0,1^2}=3,8416\approx 4

    где t_\alpha =1,96 - табулированный аргумент функции Лапласа.

    Возможность переменного количества репликаций позволяет оптимизатору OptQust проверять на статистическую значимость разницу между средним значением целевой функции в текущей итерации и лучшим значением, найденным за предыдущие итерации (лучшее значение). Целью такой проверки является удаление худших решений без потери времени на их получение. Таким образом, процесс может быть ускорен за счёт прекращения поиска неподходящих решений вместо выполнения заданного максимального количества репликаций модели.

  21. На странице Репликации выберите опцию Фиксированное количество репликаций и в поле Количество репликаций за итерацию: установите рассчитанное число репликаций (прогонов) модели 4.
  22. Вернитесь на страницу Основные. Щёлкните кнопку Создать интерфейс. После щелчка удаляется содержимое презентации эксперимента и создаётся интерфейс эксперимента заново (Рис. 5.21) согласно его текущим установкам (набору оптимизационных параметров и их свойствам и т. д.). Поэтому создавать интерфейс нужно только после окончания задания параметров эксперимента. На интерфейсе видны знаки вопросов напротив оптимизационных параметров.
    Интерфейс оптимизационного эксперимента

    увеличить изображение
    Рис. 5.21. Интерфейс оптимизационного эксперимента
    Результаты первого оптимизационного эксперимента

    увеличить изображение
    Рис. 5.22. Результаты первого оптимизационного эксперимента
  23. В меню запуск выполните Система_связи / Система_связи_Оптимизация1.
  24. Щёлкните Запустить. Начнёт выполняться эксперимент, в ходе которого можно видеть на графике изменения значения целевой функции. После 200*4=800 прогонов (Рис. 5.22) эксперимент остановится.
  25. Результаты оптимизационного эксперимента приведены на Рис. 5.22. Наилучшее значение целевой функции - коэффициент прибыли равен 0,497. Получен он на 28-й итерации при следующих оптимальных значениях параметров: KCCP_1 = KCCP_2 = KCCP_4 = KCCP_5 = Kol_master =1, KCCP_3 = 6.

Создайте и проведите второй оптимизационный эксперимент при тех же условиях с целью определения коэффициента готовности системы связи.

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

Но теперь нас не устраивает то, что оптимизируемые параметры размещены последними в интерфейсе первого оптимизационного эксперимента (Рис. 5.20, 5.21, 5.22). Предположим, что нам не нужны на рисуне все параметры модели, а нужны только оптимизируемые.

Разместите оптимизируемые параметры в верхних частях страниц свойств соответствующих объектов.

  1. На панели свойств агента верхнего уровня Main откройте страницу Предв. просмотр параметров.
  2. Выделите параметр КССР_1 и, щёлкая по верхней стрелке, расположенной справа от поля параметра, переместите его в верхнюю часть страницы свойств (Рис. 5.23).
  3. Проделайте то же для параметров КССР_2… КССР_5 и Kol_master. У вас должно быть так, как на Рис. 5.24.
  4. Закройте панель свойств типа агента Main.
  5. Выделите тип агента Degurstvo. На панели свойств откройте страницу Предв. просмотр параметров.
  6. Переместите последовательно параметры КССР1…КССР5 и kol_master в верхнюю часть страницы свойств.
  7. Перейдите к созданию второго оптимизационного эксперимента.
Перемещение параметра на странице предварительного       просмотра

увеличить изображение
Рис. 5.23. Перемещение параметра на странице предварительного просмотра
Оптимизируемые параметры перемещены в верхнюю часть страницы свойств типа агента Main

увеличить изображение
Рис. 5.24. Оптимизируемые параметры перемещены в верхнюю часть страницы свойств типа агента Main
Второй эксперимент Оптимизация стохастических моделей

Итак, второй оптимизационный эксперимент проводится при тех же условиях, что и первый оптимизационный эксперимент.

  1. В панели Проект Щёлкните правой кнопкой мыши элемент модели Система_связи и из контекстного меню выберите Coздать/Эксперимент. В диалоговом окне из списка Тип эксперимента: выберите Оптимизация.
  2. В поле Имя: введите Система_связи_Оптимизация2 имя эксперимента.
  3. Установите максимизировать. В поле Целевая функция введите: root.degurstvo.КоэфГотСС
  4. На странице Случайность установите Фиксированное начальное число (воспроизводимые прогоны).
  5. В поле Начальное число введите 5672.
  6. На странице Репликации выберите опцию Фиксированное количество репликаций и в поле Количество репликаций за итерацию: установите число репликаций (прогонов) модели 4.
  7. Щёлкните Создать интерфейс.

    Обратите внимание, что оптимизируемые параметры расположены вверхней части. Запустите модель.

    В результате второго эксперимента (Рис. 5.25) наилучшее значение целевой функции - коэффициент готовности системы связи равен 0,813. Получен он на 35-й итерации при следующих оптимальных значениях параметров: KCCP_1 = KCCP_2 =1, KCCP_3 = KCCP_4 = 6, KCCP_5 = 5, Kol_master = 5.

  8. Вернитесь к простому эксперименту. Измените значения KCCP_1…KCCP_5 и Kol_master на Исходные_данные_ПД на значения, полученные в первом оптимизационном эксперименте.
  9. Запустите простой эксперимент. Вы получите коэффициент прибыли 0,497, т.е. такой же, как и в первом эксперименте. Коэффициент готовности системы связи равен 0,803.
  10. Измените значения KCCP_1…KCCP_5 и Kol_master на Исходные_данные_ПД на значения, полученные во втором оптимизационном эксперименте.
  11. Запустите простой эксперимент. Вы получите коэффициент готовности системы связи о,813, то есть такой же, как и во втором эксперименте. Коэффициент прибыли равен 0,475, то есть уменьшился за счёт увеличения расходов на содержание большего числа резервных СС.
Результаты второго оптимизационного эксперимента

увеличить изображение
Рис. 5.25. Результаты второго оптимизационного эксперимента
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);