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

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

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

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

Запустите только что созданную модель Направление_связи.

После запуска, если вы все рекомендации выполнили корректно, сразу появится сообщение об ошибке (Рис. 3.6). Согласно ему к выходному порту корневого объекта буфер.out подключены два входных порта корневых объектов hold1.in и hold.in.

Разрешается соединять несколько выходных портов с одним входным и наоборот. Что мы и сделали (см. Рис. 3.4).

Если несколько выходных портов соединены с одним входным портом, и сразу несколько объектов хотят передать заявку, выбор будет произведен "справедливым" образом, согласно циклическому (round-robin) алгоритму, реализованному во входном порте.

Сообщение об ошибке подключения портов

Рис. 3.6. Сообщение об ошибке подключения портов

Если один выходной порт соединен с несколькими входными портами, и сразу несколько портов готовы принять заявку, то тот порт, куда она будет переслана, будет выбираться согласно определенному порядку. Этот выбор будет зависеть от того, как исполняющий модуль AnyLogic обрабатывает одновременные события. Таким образом, полной гарантии того, что этот выбор будет справедливым, нет. Рекомендуется не использовать такие соединения, а лучше пользоваться объектом SelectOutput или механизмом сложной маршрутизации, чтобы иметь полный контроль над распределением заявок.

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

  1. Удалите соединения выходного порта объекта буфер с входными портами объектов hold1 и hold.
  2. Перетащите объект selectOutput и соедините его входной порт с выходным портом объекта буфер, а выходные порты - с входными портами объектов hold1 и hold (Рис. 3.7).
  3. Полагаем, что выходной порт true объекта selectOutput выбирается по условию, когда объект hold не заблокирован, то есть hold.isBlocked().
  4. Замените Тип заявки: Agent на тип заявки Message.
  5. Установите Выход true выбирается: При выполнении условия.
  6. В поле Условие: введите hold.isBlocked().
  7. Запустите модель.
    Для соединения портов использован объект selectOutput

    увеличить изображение
    Рис. 3.7. Для соединения портов использован объект selectOutput
  8. В результате моделирования получили вероятность_передачи_сообщ = 0,568, коэф_использ_кан = 0,690, в том числе коэф_использ_осн_кан = 0,614.
  9. Корректен ли полученный результат? Нужно проверить. Как это сделать? Применим способ, суть которого заключается в следующем: два канала, один из которых резервный, должны иметь большую вероятность пропускной способности, чем один основной канал, также выходящий из строя, как и при резервировании. Если это не так, то модель построена некорректно.
  10. Удалите объекты selectOutput, hold1, резерв_канал и соединения между ними.
  11. Соедините выходной порт объекта буфер с входным портом объекта hold.
  12. Запустите модель. Появится сообщение об ошибке. Щёлкните Отменить. Увидите две ошибки:
    Невоможно разрешить hold1 
    Невоможно разрешить hold1
  13. Дважды щёлкните по первой ошибке. В открывшемся окне удалите код с hold1.
  14. Дважды щёлкните по второй ошибке. В открывшемся окне также удалите код с hold1.
  15. Запустите модель. Получите результат моделирования: вероятность_передачи_сообщ = 0,691, то есть больше, чем с резервированием. При этом коэф_использ_осн_кан = 0,805, то есть также больше. Делаем вывод, что модель работает неверно.
  16. Продолжим корректировку модели. Возвратимся к исходному варианту построения модели (см. Рис. 3.7). Для этого используем команду Правка. Последовательно щёлкая мышью, возвращаемся к построению модели с резервным каналом.
  17. Попробуем обойтись без объектов hold. Удалите объекты hold и hold1 и их соединения с выходами объекта selectOutput.
  18. Соедините выходы объекта selectOutput со входами объектов основ_канал и резерв_канал (Рис. 3.8).
  19. Из палитры Основная перетащите элемент Переменная. Дайте имя основной_канал_работает. Тип: boolean. Начальное значение: true.
  20. Выделите selectOutput. Замените Тип заявки: Agent на тип заявки Message. Установите Выход true выбирается: При выполнении условия.
    Вариант модели без объектов hold

    увеличить изображение
    Рис. 3.8. Вариант модели без объектов hold
  21. В поле Условие: введите основной_канал_работает.
  22. Выделите объект розыгрыш_инт_до_отказа. В поле Действия При выходе: замените имеющийся там код следующим:
    основной_канал_работает = false;
    if (основной_канал.size()!=0){
    Message m = основной_канал.get(0);
    основной_канал.stopDelayForAll();
    всего_потеряно_сообщ ++;
    
    всего_передано_сообщ--;
    
    if (m.numPotok == 1){
    передано_сообщ_потока1--;
    }
    if (m.numPotok == 2){
    передано_сообщ_потока2--;
    }
    }
    а=1;

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

  23. Выделите объект имитация_восст_осн_кан. В поле Действия При выходе: замените код следующим кодом:
    основной_канал_работает = true;
    коэф_безотк_раб_осн_кан=
    1-имитация_восст_осн_кан.statsUtilization.mean();
  24. Выделите объект резерв_канал. В поле Действия При выходе: оставьте следующий код:
    коэф_использ_резерв_кан=
    резерв_канал.statsUtilization.mean()
  25. Запустите модель. Результаты моделирования приведены на Рис. 3.9. Видим, что вероятность передачи сообщений 0,773 > 0,568. При этом суммарный коэффициент использования обеих каналов равен 1,003, что свидетельствует о параллельной работе каналов в некоторые моменты времени. Забегая вперёд заметим, что близкие к этим результаты получены и в GPSS World. И точно такие же в AnyLogic 6 при построении модели с использованием объектов hold (см. Рис. 3.4). Теперь можно перейти к проведению экспериментов и интерпретации полученных результатов.
Результаты моделирования

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

Интерпретация результатов моделирования

Проведите моделирование и сравните полученные результаты. Результаты наших экспериментов приведены в Табл. 3.6.

Всего выполнено 8 экспериментов. Здесь, напомним, как и в главе 2, первый эксперимент соответствует постановке задачи. В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте увеличена ёмкость входного буфера с 5 до 10 сообщений, а остальные параметры остались неизменными (Табл. 3.6).

Для получения результатов моделирования с точностью \varepsilon = 0,01 и доверительной вероятностью \alpha = 0,95 в GPSS World необходимо выполнить 9604 прогонов модели. В каждом эксперименте выполнялось 10000 прогонов.

Время моделирования в AnyLogic было увеличено в 10 000 раз и составляло 72 000 000 единиц модельного времени. Следует заметить, что если в GPSS World выполнить с этим же модельным временем один прогон, то результаты получаются такими же, что и при 10 000 прогонов модели.

Согласно данным Табл. 3.6 во втором, третьем и шестом экспериментах экспериментах вероятность передачи сообщений отличается на 0,002 … 0,004. В остальных экспериментах вероятности передачи сообщений, полученные в GPSS World и AnyLogic7, отличаются на 0,017 … 0,029, то есть на порядок больше.

По результатам экспериментов можно сделать вывод о чувствительности модели к изменению параметров направления связи. Например, при увеличении ёмкости входного буфера с 5 до 10 сообщений вероятность передачи возрастает с 0,773 (0,752) до 0,831 (0,829).Уменьшение интервалов (увеличение интенсивности) поступления сообщений потоков 1 и 2 в два раза (90 и 120) снижает вероятности передачи сообщений с 0,831 (0,829) до 0,456 (0,438). В тоже время повышение скорости передачи основного канала в два раза (60) и увеличение не менее чем в 5 раз времени наработки на отказ основного канала приводит к возрастанию вероятностей передачи сообщений с 0,456 (0,438) до 0,815 (0,844).

Машинное время выполнения модели в обеих системах составляет 5…7 сек (в AnyLogic7 в виртуальном режиме).

Таблица 3.6. Показатели функционирования направления связи
Показатели GPSS World AnyLogic6 AnyLogic7
1) объем_буфера = 5
вероятность_передачи_сообщ 0,752 0,773 0,773
вероятность_передачи_сообщ_потока1 0,752 0,772 0,771
вероятность_передачи_сообщ_потока2 0,753 0,773 0,774
\Delta_{1} вероятности_передачи_сообщ \Delta_{1} = 0,021
вероятность_потери_сообщ 0,248 0,227 0,227
коэф_использ_осн_кан 0,777 0,757 0,718
коэф_использ_рез_кан 0,152 0,222 0,286
сум_коэф_использ_кан 0,929 0,979 1,003
2) объем_буфера = 10
вероятность_передачи_сообщ 0,829 0,861 0,831
вероятность_передачи_сообщ_потока1 0,829 0,861 0,832
вероятность_передачи_сообщ_потока2 0,829 0,862 0,831
\Delta_{2} вероятности_передачи_сообщ \Delta_{2} =0,002
вероятность_потери_сообщ 0,171 0,139 0,169
коэф_использ_осн_кан 0,861 0,841 0,756
коэф_использ_рез_кан 0,157 0,25 0,327
сум_коэф_использ_кан 1,018 1,091 1,084
3) интер_сообщ_потока1 = 90, интер_сообщ_потока2 = 120
вероятность_передачи_сообщ 0,438 0,454 0,456
вероятность_передачи_сообщ_потока1 0,438 0,454 0,456
вероятность_передачи_сообщ_потока2 0,438 0,453 0,456
\Delta_{3} вероятности_передачи_сообщ \Delta_{3} = 0,002
вероятность_потери_сообщ 0,562 0,546 0,544
коэф_использ_осн_кан 0,882 0,882 0,808
коэф_использ_рез_кан 0,209 0,266 0,393
сум_коэф_использ_кан 1,091 1,148 1,201
4) время_передачи_осн_кан = 60, время_нараб_отказ_осн_кан = 5000
вероятность_передачи_сообщ 0,844 0,848 0,815
вероятность_передачи_сообщ_потока1 0,844 0,848 0,815
вероятность_передачи_сообщ_потока2 0,845 0,848 0,815
\Delta_{4} вероятности_передачи_сообщ \Delta_{4} = 0,029
вероятность_потери_сообщ 0,156 0,152 0,185
коэф_использ_осн_кан 0,971 0,97 0,922
коэф_использ_рез_кан 0,043 0,058 0,088
сум_коэф_использ_кан 1,014 1,028 1,01
5) время_передачи_рез_кан = 90, время_восстан_осн_кан = 60
вероятность_передачи_сообщ 0,851 0,857 0,834
вероятность_передачи_сообщ_потока1 0,851 0,857 0,833
вероятность_передачи_сообщ_потока2 0,851 0,857 0,835
\Delta_{5} вероятности_передачи_сообщ \Delta_{5} = 0,017
вероятность_потери_сообщ 0,149 0,143 0,166
коэф_использ_осн_кан 0,982 0,98 0,945
коэф_использ_рез_кан 0,017 0,029 0,043
сум_коэф_использ_кан 0,999 1,009 0,988
6) интер_сообщ_потока1 = 45, интер_сообщ_потока2 = 60
вероятность_передачи_сообщ 0,43 0,432 0,434
вероятность_передачи_сообщ_потока1 0,431 0,432 0,434
вероятность_передачи_сообщ_потока2 0,429 0,431 0,434
\Delta_{6} вероятности_передачи_сообщ \Delta_{6} = 0,004
вероятность_потери_сообщ 0,57 0,568 0,566
коэф_использ_осн_кан 0,988 0,988 0,98
коэф_использ_рез_кан 0,024 0,029 0,048
сум_коэф_использ_кан 1,012 1,017 1,028
7) время_передачи_осн_кан = 30, время_передачи_рез_кан = 45
вероятность_передачи_сообщ 0,85 0,853 0,832
вероятность_передачи_сообщ_потока1 0,851 0,853 0,831
вероятность_передачи_сообщ_потока2 0,85 0,853 0,832
\Delta_{7} вероятности_передачи_сообщ \Delta_{7} = 0,018
вероятность_потери_сообщ 0,15 0,147 0,168
коэф_использ_осн_кан 0,982 0,982 0,952
коэф_использ_рез_кан 0,015 0,021 0,028
сум_коэф_использ_кан 0,997 1,003 0,98
8) время_вкл_рез_кан = 1, время_восстан_осн_кан = 30
вероятность_передачи_сообщ 0,851 0,855 0,833
вероятность_передачи_сообщ_потока1 0,851 0,855 0,833
вероятность_передачи_сообщ_потока2 0,851 0,855 0,832
\Delta_{8} вероятности_передачи_сообщ \Delta_{8} = 0,018
вероятность_потери_сообщ 0,149 0,145 0,167
коэф_использ_осн_кан 0,988 0,987 0,957
коэф_использ_рез_кан 0,008 0,015 0,021
сум_коэф_использ_кан 0,996 1,002 0,978
< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Артём Нагайцев
Артём Нагайцев

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

entity.time_vxod=time(); 

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

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Артём Нагайцев
Артём Нагайцев
Россия