Помощь в написании студенческих работ
Антистрессовый сервис

Построение событийной части сегмента

РефератПомощь в написанииУзнать стоимостьмоей работы

При построении модели придется воспользоваться Java-кодом, в котором потребуются дополнительные ноля сообщений. Для этого нужно создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. подпараграф 4.1.4). Перетащите объект selectOutput. Соедините его вход с выходом объекта source. Объект selectOutput выделяет и направляет объекту… Читать ещё >

Построение событийной части сегмента (реферат, курсовая, диплом, контрольная)

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

Алгоритм работы блока Абонент1 приведен на рис. 4.7, а его реализация средствами AnyLogic — на рис. 4.8.

  • 1. Из палитры Презентация перетащите элемент Прямоугольник.
  • 2. На странице Местоположение и размер панели Свойства введите в поля X: 10, Y: 50, Ширина: 450, Высота: 380.
  • 3. Перетащите элемент text и в поле Текст введите Абонент 1.
  • 4. Перетащите из Библиотеки моделирования процессов объект source. Поместите его так же, как на рис. 4.8. Остальные объекты блока Абонент1 вы будете перетаскивать и размещать по мере необходимости.

При построении модели придется воспользоваться Java-кодом, в котором потребуются дополнительные ноля сообщений. Для этого нужно создать нестандартный тип заявки с дополнительными полями для записи и хранения параметров, о которых упоминалось ранее (см. подпараграф 4.1.4).

Алгоритм работы блока Абонент!

Рис. 4.7. Алгоритм работы блока Абонент!

Дополнительные поля класса заявок Message.

Рис. 4.9. Дополнительные поля класса заявок Message

Реализация блока Абонент! средствами AnyLogic.

Рис. 4.8. Реализация блока Абонент! средствами AnyLogic

Создайте класс заявки Message.

  • 1. Выделите объект source.
  • 2. В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать —* Java класс.
  • 3. Появится диалоговое окно Новый Java класс. В поле Имя введите имя нового класса: Message.
  • 4. В поле Базовый класс: введите имя базового класса com.xj. апуlogic. libraries. enterprise. Entity. Щелкните кнопку Далее.
  • 5. На появившейся второй странице Мастера создания Java класса добавьте поля Java-класса, показанные на рис. 4.9.
  • 6. Оставьте флажки Создать конструктор и Создать метод toString ().

Щелкните Готово. Закройте редактор кода.

7. В панели Проект в контекстном меню только что созданного Javaкласса меню выберите Преобразовать Java класс в тип агента. Закройте окно с параметрами.

Продолжим построение блока Абонент1.

  • 1. Выделите объект source. На странице Основные панели Свойства установите следующие свойства:
    • Тип заявки: Message;
    • Прибывают согласно: Времени между прибытиями;
    • Время между прибытиями: exponential (1/timeAbonent);
    • Новая заявка: Message;
    • Действия при подходе к выходу:

double, а = 0;

double b = kolAbonent;

// Розыгрыш номера получателя сообщения

а = uniform!);

for (int i = 1; i < (kolAbonent + 1); i++) {.

if (a <= ((1/kolAbonent) * b)) agent. numAbPol = i; b = b — 1;

).

agent.timeOtpr = time!);

agent.numAbOtpr = numAbonent;

Объект source будет генерировать сообщения с интервалами времени, распределенными, но экспоненциальному закону. Принято, что сообщения от данного абонента-отиравителя с равной вероятностью могут быть отправлены любому абоненту сети. Поэтому разыгрывается номер абонентаполучателя сообщения, и заносится в numAbPol. В поле timeOtpr заносится время отправления сообщения.

  • 2. Перетащите объект selectOutput. Соедините его вход с выходом объекта source. Объект selectOutput выделяет и направляет объекту sink на уничтожение сообщения, адресованные абоненту-отнравителю, т. е. самому себе. Перетащите объект sink. Его вход соедините с выходом Т объекта selectOutput.
  • 3. Перетащите объект selectOutput5. Данный объект предназначен для розыгрыша категорий отправляемых сообщений. Его вход соедините с выходом F объекта selectOutput. На панели Свойства установите свойства согласно табл. 4.4 (имена объектов см. на рис. 4.8). Значения свойств являются Java-кодом. Код предназначен для подсчета отправленных сообщений в сети связи в целом и по категориям сообщений, определения количества сообщений, отправленных за один прогон, розыгрыша длин сообщений по категориям, вывода расчетов по каждому абоненту, а также по сети связи в целом.
  • 4. Перетащите два объекта selectOutput5 (имена selectOutputl и selectOutput2). Объекты предназначены для сортировки отправляемых сообщений по абонентам и подсчета их количества.
  • 5. Перетащите объект queue.
  • 6. Укажите его свойства:
    • Имя: Буфер;
    • Тип заявки: Message;
    • Вместимость: 100.

Соедините выходы 1—4 объекта selectOutputl с входом элемента Буфер (см. рис. 4.8).

  • 7. Соедините выход по умолчанию объекта selectOutputl с входом объекта selectOutput2. Через этот выход будут проходить на selectOutput2 сообщения, адресованные абонентам 5 и 6.
  • 8. Выделите selectOutput2 и установите значения свойств, указанных в табл. 4.4. Соедините все выходы selectOutput2 с входом элемента Буфер.

Свойства объектов selectOutput, selectOutputl, selectOutput2

Таблица 4.4

Свойство.

Значение.

Имя.

selectOutput.

Тип заявки.

Message.

Выход true выбирается.

При выполнении условия.

Условие.

agent.numAbPol == numAbonent.

Тип заявки.

Message.

Использовать.

Условия.

Действия при входе.

a = uniformO; f++;

kolOtpr = f/kolProg;

editboxb.setText (kolOtpr, true);

main.f++;

main.всегоОтпр = main. f/kolProg; main. editbox5.setText (main.всегоОтпр, true);

Условие 1.

a<=verKat.get (1).

Действия при выходе.

agent.numKat=1;

b=normal (dlKatO.get (agent.numKat), dlKat. get (aqent.numKat)); agent. dlina = (int)(b); dl + +;

kolOtprKatl = dl/kolProg;

editbox6.setText (kolOtprKatl, true);

main.dl++;

main.всегоОтпрКат1 = main. dl/kolProg; main. editbox6.setText (.

main.всегоОтпрКат1, true);

Условие 2.

a<=ver verKat. get (2).

Действия при выходе 2.

agent.numKat = 2;

b=normal (dlKatO.get (agent.numKat), dlKat. get (aqent.numKat)); agent. dlina = (int)(b); d2 + +;

kolOtprKat2 = d2/kolProg;

editbox7.setText (kolOtprKat2, true);

main.d2++;

main.всегоОтпрКат2 = main. d2/kolProg;

Свойство.

Значение.

main.editbox7.setText (.

main.всегоОтпрКат2, true);

Условие 3.

A <= verKat. get (3).

Действия при выходе 3.

agent.numKat = 3 ;

b = normal (dlKatO.get (agent.numKat), dlKat. get (aqent.numKat)); agent. dlina = (int)(b); d3 + +;

kolOtprKat3 = d3/kolProg;

editbox8.setText (kolOtprKat3, true);

main.d3++;

main.всегоОтпрКатЗ = main. d3/kolProg; main. editbox8.setText (.

main.всегоОтпрКатЗ, true);

Условие 4.

a <= verKat. get (4).

Действия при выходе.

4agent.numKat = 4;

b = normal (dlKatO.get (agent.numKat), dlKat. get (agent.numKat)); agent. dlina = (int)(b); d4 + +;

kolOtprKat4 = d4/kolProg;

editbox9.setText (kolOtprKat4, true);

main.d4++;

main.всегоОтпрКат4 = main. d4/kolProg; main. editbox9.setText (.

main.всегоОтпрКат4, true);

Имя.

selectOutputl.

Тип заявки.

Message.

Использовать.

Условия.

Условие 1.

agent.numAbPol == 1.

Условие 2.

agent.numAbPol == 2.

Действия при выходе 2.

отпрАб2++;

main.OTnpl2 = отпрАб2;

Условие 3.

agent.numAbPol == 3.

Действия при выходе 3.

отпрАбЗ++;

main.oTnpl3 = отпрАбЗ;

Условие 4.

agent.numAbOtpr == 4.

Действия при выходе 4.

отпрАб4++;

main.отпр14 = отпрАб 4;

Имя.

selectOutput2.

Тип заявки.

Message.

Использовать.

Условия.

Условие 1.

agent.numAbPol == 5.

Действия при выходе 1.

отпрАб 5 + +;

main.OTnpl5 = отпрАбб;

Условие 2.

agent.numAbPol == 6.

Действия при выходе 2.

отпрАб6++;

main.oTnpl6 = отпрАбб;

Отправляемое сообщение поступило в буфер. Из буфера оно должно попасть в канал связи. Создайте порты для отправления и приема сообщений.

  • 1. Из палитры Презентация перетащите элемент Скругленный прямоугольник.
  • 2. На странице Местоположение и размер панели Свойства введите в поля X: 210, Y: 100, Ширина: 65, Высота: 60.
  • 3. Из палитры Агент перетащите два элемента порт (см. рис. 4.8). Сбросьте флажки Отображать имя. Из Презентации перетащите два элемента Текст и в поля text введите вх и вых.

Замечание. Обратите внимание на то, чтобы у элементов Скругленный прямоугольник и порт был установлен флажок На верхнем уровне. У остальных элементов сегмента Абонент1 этот флажок должен быть сброшен. В противном случае вы обнаружите их также на верхнем уровне — на агенте Main.

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

Через порт вх сообщения поступают из канала связи. Продолжим построение блока Абоненте

  • 1. Перетащите объект selectOutput (имя selectOutput3). Он предназначен для контроля текущей емкости входного буфера. В случае заполнения буфера сообщения теряются.
  • 2. Соедините порт вх с входом объекта selectOutput3.
  • 3. Перетащите объект sink (имя sinkl). Его вход соедините с выходом F объекта selectOutput3.
  • 4. Выделите объект selectOutput3 и установите его свойства:
    • Тип заявки: Message;
    • Выход true выбирается При выполнении условия;
    • Условие emkBuferVx-tekEmkBuferVx>=aqent.dlina.
  • 5. Перетащите объект queue. Укажите его свойства:
    • Имя: БуферВх;
    • Тин заявки: Message;
    • Вместимость emkBuf erVx;
    • Действие при входе: tekEmkBuferVx+= agent. dlina;
    • Действия при выходе: tekEmkBuf erVx -= agent.dlina.

Соедините его вход с выходом Т объекта selectOutput3.

  • 1. Перетащите selectOutputS (имя selectOutput4). Он необходим для разделения потока полученных сообщений по категориям.
  • 2. На страницах панели Свойства установите свойства согласно табл. 4.5. Эти свойства также являются кодом. Код предназначен:
    • • для счета полученных сообщений для сети связи в целом и по категориям сообщений;
    • • определения числа сообщений, полученных за один прогон;
    • • вывода расчетов по каждому абоненту, а также для сети связи в целом.
  • 3. Соедините выход элемента БуферВх с выходом объекта selectOutput4.
  • 4. Перетащите два объекта selectOutput5 (имена selectOutput5 и selectOutput6). Объекты предназначены для разделения и счета получаемых сообщений по абонентам. Значения свойств установите согласно табл. 4.5. Выход по умолчанию объекта selectOutput5 соедините с входом объекта selectOutput6.

Свойства объектов selectOutput4 — selectOutputG.

Свойство

Значение

Имя

sclcctOutput4

Тип заявки

Message

Использовать

Условия

Действия при входе

д++;

kolPol = д/ко1Ргод;

editbox.setText (kolPol, true);

main.g++;

main.всегоПол = main. g/kolProg; main.editbox.setText( main. всегоПол, true);

Условие 1

agent.numKat == 1.

Действия при выходе 1

kl + +;

kolPolKatl=kl/kolProg;

editboxl.setText (kolPolKatl, true);

main.kl + +;

main.всегоПолКат1=та1п.kl/kolProg; main.editboxl.setText{

main.всегоПолКат1, true);

Условие 2

agent.numKat == 2.

Действия при выходе 2

k2 + +;

kolPolKat2 = k2/kolProg;

editbox2.setText (kolPolKat2, true);

main.k2++;

main.всегоПолКат2 = main. k2/kolProg; main. editbox2.setText(

main.всегоПолКат2, true);

Условие 3

agent.numKat == 3.

Действия при выходе 3

k3 + +;

kolPolKat3 = k3/kolProg;

editbox3.setText (kolPolKat3, true);

main.k3++;

main.всегоПолКатЗ = main. k3/kolProg; main. editbox3.setText <

main.всегоПолКатЗ, true);

Условие 4

agent.numKat == 4.

Действия при выходе 4

k4++;

kolPolKat4 = k4/kolProg;

editbox4.setText (kolPolKat4, true);

main.k4++;

main.всегоПолКат4 = main. k4/kolProg; main. editbox4.setText{ main. всегоПолКат4# true);

Имя

select Output 5

Тип заявки

Message

Использовать

Условия

Условие 1

agent.numAbOtpr == 1.

Условие 2

agent.numAbOtpr == 2.

Действия при выходе 2

OTA62++;

main.KnpCn21 = OTA62/main.OTnp21;

main.КПрСп21.setText (main.кПрСп21, true);

Свойство.

Значение.

Условие 3.

agent.numAbOtp r== 3.

Действия при выходе 3.

ОТА63++;

main.кПрСпЗ1=отАбЗ/main.отпр31;

main.КПрСп31.setText (main.кПрСпЗ1, true);

Условие 4.

agent.numAbOtpr == 4.

Действия при выходе 4.

OTA64++;

main. KlIpCn41=OTA64/main. отпр41; main. KIIpCn41 .setText (main.KlIpCn41, true) ;

Имя.

selectOutput6.

Тип заявки.

Message.

Использовать.

Условия.

Условие 1.

agent.numAbOtpr == 5.

Действия при выходе 1.

otA65++;

main.KlIpCn51 = OTA65/main. отпрБ1; main. КПрСп51.setText (main.кПрСп51, true);

Условие 2.

agent.numAbOtpr==6.

Действия при выходе 2.

OTA66++;

main.KlIpCn61 = отАбб/main. отпр61; main. KnpCn61.setText (main.кПрСпб!, true);

  • 1. Перетащите объект sink2. Его вход соедините с выходами 1—4 объекта selectOutput5 и выходами объекта selectOutput6.
  • 2. Установите свойства объекта sink2 согласно табл. 4.6. Код предназначен для расчета коэффициента пропускной способности сети связи и времени передачи одного сообщения.

Таблица 4.6

Свойства объекта sink2

Свойство.

Значение.

Тип заявки.

Message.

Действия при входе.

врПередачи.add (time () — agent. timeOtpr); editboxll. setText (врПередачи.mean (), true); editboxl2. setText (врПередачи.max (), true); editboxl3. setText (врПередачи.min (), true); main. коэфПропСпособ =.

main. всегоПол/main.всегоОтпр; main.editboxlO.setText (.

main.коэфПропСпособ, true); main.врПередСооб.add (time () — agent. timeOtpr); main.editboxll.setText (.

main.врПередСооб.mean (), true); main. editboxl2.setText (.

mmain.врПередСооб.max (), true); main. editboxl3.setText (.

main.врПередСооб.min (), true);

Приступим к построению сегмента Маршрутизатор.

Показать весь текст
Заполнить форму текущей работой