Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио. |
Модель функционирования системы связи
Использование способа Событие
Событие является самым простым способом планирования действий в модели. События часто используются для моделирования задержек и таймаутов. Вы можете сделать это и с помощью срабатывающих по таймауту переходов диаграмм состояний, но использование событий является более рациональным. В некоторых случаях поведение может быть смоделировано только с помощью таймеров.
Есть три типа событий.
Событие, происходящее по истечении таймаута. Оно используется тогда, когда Вам нужно запланировать выполнение какого-то действия на определенный момент времени (отстоящий на заданное количество времени (таймаут) от текущего момента). Событие, происходящее по истечению таймаута, предоставляет дополнительные возможности: вы можете сделать событие циклическим, либо же вообще управлять этим событием "вручную".
Событие, происходящее при выполнении заданного условия. Оно используется тогда, когда Вам нужно отслеживать выполнение определенного условия и производить какое-то действие при его происхождении.
Событие, происходящее с заданной интенсивностью. Оно используется для моделирования потока независимых событий (пуассоновский поток). Это часто требуется при моделировании поступления, например, заявок в системах массового обслуживания.
AnyLogic поддерживает еще один тип события, задаваемый уже другим модельным элементом - динамическое событие. Динамические события используются для планирования сразу нескольких одновременных и независимых событий. Например, канал связи, параллельно передающий произвольное количество сообщений, может быть смоделирован с помощью динамических таймеров, создаваемых для каждого сообщения.
Для вывода результатов моделирования воспользуйтесь событием, происходящим по истечении таймаута.
- Перетащите элемент Событие из палитры Модель на диаграмму класса активного объекта. Измените его имя на ResulsModeling. Нажмите Enter.
- Установите флажок Отображать имя.
- С помощью выпадающего списка Tип события: выберите По таймауту.
- Установите Режим: Срабатывает один раз.
- Время срабатывания (абсолютное) 1000000.
- В поле Действие введите Java код, который будет выполняться при появлении этого события.
//Расчет результатов по СС1 DoxDegCC1=round((DoxDegCC1/КолПрогон)*100); DoxDegCC1=DoxDegCC1/100; ZatrRemCC1=round((ZatrRemCC1/КолПрогон)*100); ZatrRemCC1=ZatrRemCC1/100; UbitokCC1=round((1-degCC1.statsUtilization.mean())*get_Main().ubitokCC1*ВремяРабСист*KCC1*100); UbitokCC1=UbitokCC1/100; PribCC1=round((DoxDegCC1-(ZatrResCC1+ZatrRemCC1+UbitokCC1))*100); PribCC1=PribCC1/100; koefPribCC1=round((PribCC1/DoxMaxCC1)*1000); koefPribCC1=koefPribCC1/1000; //Расчет результатов по СС2 DoxDegCC2=round((DoxDegCC2/КолПрогон)*100); DoxDegCC2=DoxDegCC2/100; ZatrRemCC2=round((ZatrRemCC2/КолПрогон)*100); ZatrRemCC2=ZatrRemCC2/100; UbitokCC2=(1-degCC2.statsUtilization.mean())*get_Main().ubitokCC2*ВремяРабСист*KCC2; PribCC2=round((DoxDegCC2-(ZatrResCC2+ZatrRemCC2+UbitokCC2))*100); PribCC2=PribCC2/100; koefPribCC2=round((PribCC2/DoxMaxCC2)*1000); koefPribCC2=koefPribCC2/1000; //Расчет результатов по СС3 DoxDegCC3=round((DoxDegCC3/КолПрогон)*100); DoxDegCC3=DoxDegCC3/100; ZatrRemCC3=round((ZatrRemCC3/КолПрогон)*100); ZatrRemCC3=ZatrRemCC3/100; UbitokCC3=(1-degCC3.statsUtilization.mean())* get_Main().ubitokCC3*ВремяРабСист*KCC3; PribCC3=round((DoxDegCC3-(ZatrResCC3+ZatrRemCC3+UbitokCC3))*100); PribCC3=PribCC3/100; koefPribCC3=round((PribCC3/DoxMaxCC3)*1000); koefPribCC3=koefPribCC3/1000; //Расчет результатов по СС4 DoxDegCC4=round((DoxDegCC4/КолПрогон)*100); DoxDegCC4=DoxDegCC4/100; ZatrRemCC4=round((ZatrRemCC4/КолПрогон)*100); ZatrRemCC4=ZatrRemCC4/100; UbitokCC4=(1-degCC4.statsUtilization.mean())* get_Main().ubitokCC4*ВремяРабСист*KCC4; PribCC4=round((DoxDegCC4-(ZatrResCC4+ZatrRemCC4+UbitokCC4))*100); PribCC4=PribCC4/100; koefPribCC4=round((PribCC4/DoxMaxCC4)*1000); koefPribCC4=koefPribCC4/1000; //Расчет результатов по СС5 DoxDegCC5=round((DoxDegCC5/КолПрогон)*100); DoxDegCC5=DoxDegCC5/100; ZatrRemCC5=round((ZatrRemCC5/КолПрогон)*100); ZatrRemCC5=ZatrRemCC5/100; UbitokCC5=(1-degCC5.statsUtilization.mean())* get_Main().ubitokCC5*ВремяРабСист*KCC5; PribCC5=round((DoxDegCC5-(ZatrResCC5+ZatrRemCC5+UbitokCC5))*100); PribCC5=PribCC5/100; koefPribCC5=round((PribCC5/DoxMaxCC5)*1000); koefPribCC5=koefPribCC5/1000; //Расчет суммарных результатов SumDoxDeg=DoxDegCC1+DoxDegCC2+DoxDegCC3+ DoxDegCC4+DoxDegCC5; SumZatrRem=round((SumZatrRem)*100/КолПрогон); SumZatrRem=SumZatrRem/100; SumUbitok=UbitokCC1+UbitokCC2+UbitokCC3+ UbitokCC4+UbitokCC5; SumPribil=round((SumDoxDeg-(SumZatrRes+SumZatrRem+SumUbitok))*100); SumPribil=SumPribil/100; koefPribil=round((SumPribil/SumDoxMax)*1000); koefPribil=koefPribil/1000; //вывод максимального дохода, дохода от дежурства по типам СС и всего editbox1.setText(DoxMaxCC1); editbox11.setText(DoxDegCC1); editbox2.setText(DoxMaxCC2); editbox12.setText(DoxDegCC2); editbox3.setText(DoxMaxCC3); editbox13.setText(DoxDegCC3); editbox4.setText(DoxMaxCC4); editbox14.setText(DoxDegCC4); editbox5.setText(DoxMaxCC5); editbox15.setText(DoxDegCC5); editbox.setText(SumDoxMax); editbox16.setText(SumDoxDeg); //вывод стоимости ремонта по типам СС и всего editbox21.setText(ZatrRemCC1); editbox22.setText(ZatrRemCC2); editbox23.setText(ZatrRemCC3); editbox24.setText(ZatrRemCC4); editbox25.setText(ZatrRemCC5); editbox26.setText(SumZatrRem); //вывод чистой прибыли от использования по типам СС и всего editbox31.setText(PribCC1); editbox32.setText(PribCC2); editbox33.setText(PribCC3); editbox34.setText(PribCC4); editbox35.setText(PribCC5); editbox36.setText(SumPribil); //вывод коэфициентов прибыли по типам СС и всего editbox41.setText(koefPribCC1); editbox42.setText(koefPribCC2); editbox43.setText(koefPribCC3); editbox44.setText(koefPribCC4); editbox45.setText(koefPribCC5); editbox46.setText(koefPribil); //вывод затрат на содержание резервов по типам СС и всего editbox6.setText(ZatrResCC1); editbox7.setText(ZatrResCC2); editbox8.setText(ZatrResCC3); editbox9.setText(ZatrResCC4); editbox10.setText(ZatrResCC5); editbox17.setText(SumZatrRes);
Из кода следует, что по окончании моделирования, которое длится 1 000 000 единиц модельного времени, сработает метод событие, будут рассчитаны и выведены результаты моделирования.
Для округления результатов моделирования (коэффициентов прибыли до трех знаков после запятой, а абсолютных величин прибыли и затрат - до двух знаков) использован метод round(). Предварительно результат умножался на 1000 и 100, а потом делился на эти же величины.
Для вывода результатов моделирования в текстовые поля editbox используется функция setText(), в качестве аргумента которой указывается имя элемента Простая переменная, например, editbox1.setText(DoxMaxCC1);
Запустите модель. На рис. 5.13 и рис. 5.14 показаны результаты моделирования.