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

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

Эксперимент Варьирование параметров

Эксперимент Варьирование параметров может проводиться только для детерминированных моделей.

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

  1. В панели Проект Щёлкните правой кнопкой мыши элемент модели Система_связи и из контекстного меню выберите Создать эксперимент.
  2. В появившемся диалоговом окне из списка Тип эксперимента: выберите Варьирование параметров.
  3. В поле Имя введите имя эксперимента, например, Система_связи_Вар_параметров.
  4. Щёлкните кнопку Готово. Появится страница Параметры панели Свойства (Рис. 5.26).
  5. Обратите внимание, что на странице Параметры по сравнению с оптимизационным экспериментом отсутствуют опции минимизировать, максимизировать, Количество итераций. Последнее определяется AnyLogic в зависимости от диапазонов и шагов изменения параметров. Не используются и репликации, по
  6. Задайте диапазон допустимых значений параметров. Перейдите в таблице на Рис. 5.26 на строку с этим параметром. Щёлкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Параметр КССР_1 типа int, поэтому он может изменяться в диапазоне. Выберите Диапазон. В ячейку Мин введите минимальное значение 1, в ячейку Макс - максимальное значение 3, в ячейке Шаг укажите величину шага 1.
  7. Задайте также остальные параметры, как на Рис. 5.26.
  8. Вернитесь на страницу Основные и щёлкните кнопку Создать интерфейс.
  9. В эксперименте Варьирование параметров в отличие от эксперимента Оптимизация интерфейс создаёт пользователь. Связано это с тем, что выходными результатами данного эксперимента могут быть любые показатели моделируемой системы.
  10. Создайте интерфейс, показанный на Рис. 5.27. Автоматически добавлены только параметры эксперимента. Здесь вы видите график, который будет отображать значение коэффициента готовности системы связи для каждой итерации.
    Страница Параметры эксперимента варьирования параметров

    увеличить изображение
    Рис. 5.26. Страница Параметры эксперимента варьирования параметров
  11. Перетащите элемент График из палитры Статистика на диаграмму.
  12. На странице Местоположение и размер и установите: X: 260, Y: 100, Ширина: 510, Высота: 400, Цвет фона: Нет заливки, Цвет границы: Нет линии.
  13. Щёлкните Добавить элемент данных.
  14. Установите опцию Набор данных. Заголовок: КоэфГотСС. Набор данных: dataset. Установите Не обновлять данные автоматически.
  15. Перейдите на страницу Область диаграммы. Установите: Смещение по Х: 50, Смещение по Y: 30, Ширина: 450, Высота: 330.
  16. Из палитры Статистика перетащите элемент Набор данных. Установите опцию Не обновлять автоматически.
  17. Из палитры Основная перетащите элемент Переменная. На панели Свойства в поле Имя: введите коэфГотСС. Установите Уровень доступа: public. Тип: double.
  18. Щёлкните диаграмму интерфейса. На странице Действия Java панели Свойства и введите коды:
    • в поле Действие после прогона модели:
      коэфГотСС = root.degurstvo.КоэфГотСС;
    • в поле Действие после итерации
      dataset.add(getCurrentIteration(),коэфГотСС);
  19. Выполните Система_связи / Система_связи_Вар_параметров.
  20. Щёлкните Запустить.
  21. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения коэффициента готовности системы связи. Фрагмент результатов выполнения эксперимента Варьирование параметров приведен на Рис. 5.28.
  22. Эксперимент был приостановлен после 301 прогона. По графику можно видеть как изменяется коэффициент готовности системы связи. В данный момент времени коэффициент готовности равен 0,801 при КССР_1=КССР_5 = kol_master =1, КССР_2= КССР_3=5, КССР_4=3.
  23. На Рис. 5.28 видно, что 301 прогон был выполнен даже в виртуальном режиме за 2029, 3 с.
Интерфейс эксперимента варьирования параметров

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

увеличить изображение
Рис. 5.28. Фрагмент результатов выполнения эксперимента Варьирование параметров

Экспорт модели как Java апплета

Модели AnyLogic являются приложением Java, поэтому их можно запускать на большинстве современных платформ, а также помещать на веб-сайты в виде апплетов.

Наличие такой возможности позволяет удалённым пользователям запускать интерактивные модели в веб-браузере при отсутствии AnyLogic или какого-либо другого программного обеспечения. В этом случае на клиентской машине будут запускаться скопированные из сети файлы модели с такой же поддержкой интерактивной работы, что и при запуске из среды AnyLogic.

Экспортируйте модель ComSystem в виде Java апплета.

  1. Щёлкните в панели Проекты модель ComSystem и выберите Экспорт/В Java апплет (запускается в веб браузере) из контекстного меню.
  2. Откроется диалоговое окно Экспорт модели (Рис. 5.29). Щелчком мыши раскройте список Экспортировать эксперимент и выберите в нем Simulation. Настройки этого эксперимента будут применены к экспортируемой модели.
  3. В поле Каталог для создаваемых файлов укажите каталог, в который вы хотите поместить файлы экспортируемой модели. Можно также выбрать каталог с помощью диалогового окна навигации, которое становится доступным при нажатии кнопки Выбрать.
  4. По умолчанию кнопки панели инструментов и другие элементы пользовательского интерфейса апплета будут на том языке, который выбран в настройках вашего компьютера (Язык: <системный по-умолчанию>). При необходимости можно выбрать для интерфейса апплета другой язык из выпадающего списка Язык: (на данный момент AnyLogic поддерживает русский, английский, китайский, немецкий и итальянский языки).
    Диалоговое окно Экспорт модели

    Рис. 5.29. Диалоговое окно Экспорт модели
    Набор файлов Java апплет

    Рис. 5.30. Набор файлов Java апплет
  5. Оставьте установленным флажок Открыть апплет модели в веб браузере.
  6. Щёлкните кнопку Готово. Откроется диалоговое окно, в котором будет сообщение об успешном завершении экспортирования модели ComSystem: Модель ComSystem была экспортирована в G:\BOEV.
  7. Щёлкните OK.

Модель, экспортированная как Java апплет, представляет собой набор следующих файлов (Рис. 5.30):

  • файл .html, используемый для запуска Java апплета;
  • файл com.xj.anylogic.engine.jar исполняющего модуля AnyLogic;
  • скомпилированный .jar файл модели (model.jar);
  • .jar файлы и классы, необходимые для построения модели.

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

Запустите апплет модели, дважды щелкнув ComSystem.html. Результаты работы апплета модели показаны на Рис. 5.31. Коэффициент прибыли равен 0,949 (см. п. 5.1.8.3).

Результаты работы апплета модели ComSystem

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

Модель в GPSS World

Состав модели в GPSS World

Как уже отмечалось, система связи представляет собой многофазную многоканальную систему массового обслуживания замкнутого типа с отказами и ожиданием.

Какие ограничения в системе?

  1. Число мастеров-ремонтников в ремонтном подразделении.
  2. Максимальное число одновременно находящихся СС на дежурстве.
  3. Максимальное число резервных СС.
  4. Общее число СС в системе.

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

Модель системы связи должна состоять из следующих сегментов:

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

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

Программа GPSS-модели

Предполагается, что количество типов СС в системе предоставления услуг связи может изменяться от одного до максимального значения n2_. Программа модели, как уже омечалось при разработке AnyLogic-модели, построена для n2_ = 5.

Для хранения результатов моделирования используются матрицы. В целях придания неизменности программы модели при варьировании количеством типов СС матрицы должны быть пронумерованы. Однако GPSS World при описании матриц командой MATRIX не позволяет вместо имени указывать число. Матрицы нужно вначале описать, дав им имена, а затем пронумеровать.

Результаты моделирования для одного типа СС хранятся в семи матрицах, например, для СС типа 1 (СС1) с идентификаторами:

  • Prib1 - матрица ожидаемой прибыли СС1;
  • KPr1 - матрица коэффициентов прибыли СС1;
  • KZen1 - матрица коэффициентов использования СС1;
  • DoxMax1 - матрица максимальных доходов от СС1;
  • DoxDeg1 - матрица доходов от дежурства СС1;
  • ZatrRem1 - матрица затрат на ремонт СС1;
  • ZatrResSS1 - матрица затрат на резервные СС1.

Значит, аналогичных матриц будет тридцать пять. Да плюс еще матрица KRem коэффициентов использования мастеров - ремонтников. Именам этим тридцати шести матрицам даны номера.

Три матрицы для хранения суммарных результатов моделирования для СС всех типов не нумеровались:

  • Pribil - матрица суммарной прибыли;
  • SrKPrib - матрица средних коэффициентов прибыли СС всех типов;
  • SrKIsp - матрица коэффициентов использования СС всех типов.

Именам пяти МКУ СС1_, СС2_, СС3_, СС4_ и СС5_, имитирующим по типам СС, находящиеся на дежурстве, даны номера 1 … 5. Это позволяет сократить число блоков в модели за счет того, что вместо пяти (в данном варианте модели) сегментов имитации постановки на дежурство СС используется один сегмент.

Для записи исходных данных: количества СС всех типов (в том числе и резервных), среднего времени наработки на отказ и среднего времени восстановления по типам СС, дохода по типам от одного СС, находящегося на дежурстве, убытка по типам при отсутствии одного СС на дежурстве, стоимости по типам одного резервного СС используются функции KolSS, KollSSRes, NarOtk, SrVrRem, S1_, S2_, S3_ соответственно. Этот способ по сравнению со способом использования матриц для записи этих же данных позволяет сократить программу модели на двадцать пять строк.

В начале работы модели генератор сразу вырабатывает количество транзактов, равное соответствующему количеству типов СС, и перестает быть активным.

Далее блоками SAVEVALUE и ASSIGN в параметр 1 каждого из транзактов последовательно заносятся коды 1…n1_ - признак типа СС.

Затем каждый из транзактов с помощью блока SPLIT расщепляется (копируется, размножается) по количеству СС (с учетом резервных СС) соответствующего типа.

После расщепления транзакты в соответствии с типом СС сразу занимают все каналы МКУ, имитирующие нахождение СС на дежурстве. Резервные СС остаются в списках задержки соответствующих МКУ.

Вышедшее из строя СС снимается с дежурства, поступает в ремонтное подразделение - транзакт либо занимает свободный канал МКУ Rem, если такой есть, либо при отсутствии свободного канала помещается в список задержки этого МКУ - список транзактов, ожидающих возможность занять освободившиеся каналы МКУ.

После ремонта СС отправляется либо сразу на дежурство, либо в резерв. В обоих случаях транзакт направляется на метку Met1. Здесь также транзакт либо занимает свободный канал, либо помещается в список задержки МКУ, соответствующего типу СС.

Ниже приводится программа только (в целях сокращения) для моделирования случая три мастера-ремонтника, а резервных СС2 - четыре, пять и шесть.

; Модель функционирования системы связи
; Задание номеров матрицам
Prib1	EQU		1	; Матрица ожидаемой прибыли СС1
KPr1		EQU		2	; Матрица коэффициентов прибыли СС1
KZen1	EQU	3	; Матрица коэффициентов использования СС1
DoxMax1	EQU		4	; Матрица максимальных доходов СС1
DoxDeg1	EQU		5	; Матрица доходов от дежурства СС1
ZatrRem1	EQU	6	; Матрица затрат на ремонт СС1
ZatrResSS1 EQU	7	; Матрица затрат на резервные СС1
Prib2	EQU		8	; Матрица ожидаемой прибыли СС2
KPr2		EQU		9	; Матрица коэффициентов прибыли СС2
KZen2	EQU	10	; Матрица коэффициентов использования СС2
DoxMax2		EQU	11	; Матрица максимальных доходов СС2
DoxDeg2		EQU	12	; Матрица доходов от дежурства СС2
ZatrRem2	EQU	13	; Матрица затрат на ремонт СС2
ZatrResSS2 EQU	14	; Матрица затрат на резервные СС2
Prib3		EQU	15	; Матрица ожидаемой прибыли СС3
KPr3			EQU	16	; Матрица коэффициентов прибыли СС3
KZen3	EQU	17	; Матрица коэффициентов использования СС3
DoxMax3		EQU	18	; Матрица максимальных доходов СС3
DoxDeg3		EQU	19	; Матрица доходов от дежурства СС3
ZatrRem3	EQU	20	; Матрица затрат на ремонт СС3
ZatrResSS3 EQU	21	; Матрица затрат на резервные СС3
Prib4		EQU	22	; Матрица ожидаемой прибыли СС4
KPr4			EQU	23	; Матрица коэффициентов прибыли СС4
KZen4	EQU	24	; Матрица коэффициентов использования СС4
DoxMax4		EQU	25	; Матрица максимальных доходов СС4
DoxDeg4		EQU	26	; Матрица доходов от дежурства СС4
ZatrRem4	EQU	27	; Матрица затрат на ремонт СС4
ZatrResSS4 EQU	28	; Матрица затрат на резервные СС4
Prib5		EQU	29	; Матрица ожидаемой прибыли СС5
KPr5			EQU	30	; Матрица коэффициентов прибыли СС5
KZen5	EQU	31	; Матрица коэффициентов использования СС5
DoxMax5		EQU	32	; Матрица максимальных доходов СС5
DoxDeg5		EQU	33	; Матрица доходов от дежурства СС5
ZatrRem5	EQU	34	; Матрица затрат на ремонт СС5
ZatrResSS5 EQU	35	; Матрица затрат на резервные СС5
KRem	EQU	36	; Матрица коэффициентов использования Rem
; Задание номеров МКУ, имитирующих дежурство СС
CC1_			EQU	1	; Задание номера МКУ СС1
CC2_			EQU	2	; Задание номера МКУ СС2
CC3_			EQU	3	; Задание номера МКУ СС3
CC4_			EQU	4	; Задание номера МКУ СС4
CC5_			EQU	5	; Задание номера МКУ СС5
; Задание по типам количества СС, находящихся на дежурстве
n2_			EQU	5	; Количество типов СС
VrMod		EQU	1000	; Время моделирования, 1 ед. мод. вр. = 1 час
KolProg		EQU	1000
Stroka		EQU	1	; Номер строки матрицы
Stolbez		EQU	1	; Номер столбца матрицы
Prib1		MATRIX	,3,3	; Матрица ожидаемой прибыли СС1
KPr1		MATRIX	,3,3	; Матрица коэффициентов прибыли СС1
KZen1	MATRIX	,3,3	; Матрица коэффициентов загрузки СС1
DoxMax1	MATRIX	,3,3	; Матрица максимальных доходов СС1
DoxDeg1	MATRIX	,3,3	; Матрица доходов от дежурства СС1
ZatrRem1	MATRIX	,3,3	; Матрица затрат на ремонт СС1
ZatrResSS1 MATRIX	,3,3	; Матрица затрат на резервные СС1
Prib2	MATRIX	,3,3	; Матрица ожидаемой прибыли СС2
KPr2		MATRIX	,3,3	; Матрица коэффициентов прибыли СС2
KZen2		MATRIX	,3,3	; Матрица коэффициентов загрузки СС2
DoxMax2	MATRIX	,3,3	; Матрица максимальных доходов СС2
DoxDeg2	MATRIX	,3,3	; Матрица доходов от дежурства СС2
ZatrRem2	MATRIX	,3,3	; Матрица затрат на ремонт СС2
ZatrResSS2 MATRIX	,3,3	; Матрица затрат на резервные СС2
Prib3	MATRIX	,3,3	; Матрица ожидаемой прибыли СС3
KPr3		MATRIX	,3,3	; Матрица коэффициентов прибыли СС3
KZen3		MATRIX	,3,3	; Матрица коэффициентов загрузки СС3
DoxMax3	MATRIX	,3,3	; Матрица максимальных доходов СС3
DoxDeg3	MATRIX	,3,3	; Матрица доходов от дежурства СС3
ZatrRem3	MATRIX	,3,3	; Матрица затрат на ремонт СС3
ZatrResSS3 MATRIX	,3,3	; Матрица затрат на резервные СС3
Prib4	MATRIX	,3,3	; Матрица ожидаемой прибыли СС4
KPr4		MATRIX	,3,3	; Матрица коэффициентов прибыли СС4
KZen4		MATRIX	,3,3	; Матрица коэффициентов загрузки СС4
DoxMax4	MATRIX	,3,3	; Матрица максимальных доходов СС4
DoxDeg4	MATRIX	,3,3	; Матрица доходов от дежурства СС4
ZatrRem4	MATRIX	,3,3	; Матрица затрат на ремонт СС4
ZatrResSS4 MATRIX	,3,3	; Матрица затрат на резервные СС4
Prib5	MATRIX	,3,3	; Матрица ожидаемой прибыли СС5
KPr5		MATRIX	,3,3	; Матрица коэффициентов прибыли СС5
KZen5		MATRIX	,3,3	; Матрица коэффициентов загрузки СС5
DoxMax5	MATRIX	,3,3	; Матрица максимальных доходов СС5
DoxDeg5	MATRIX	,3,3	; Матрица доходов от дежурства СС5
ZatrRem5	MATRIX	,3,3	; Матрица затрат на ремонт СС5
ZatrResSS5 MATRIX	,3,3	; Матрица затрат на резервные СС5
KRem	MATRIX	,3,3	; Матрица коэффициентов загрузки Rem
Pribil	MATRIX	,3,3	; Матрица суммарной прибыли
SrKPrib	MATRIX	,3,3	; Матрица коэффициентов прибыли СС всех типов
SrKIsp	MATRIX	,3,3	; Матрица коэффициентов загрузки СС всех типов
; Определение МКУ по количеству СС, находящихся на дежурстве
CC1_		STORAGE		55	; Емкость МКУ по количеству СС1
CC2_		STORAGE		100	; Емкость МКУ по количеству СС2
CC3_		STORAGE		60	; Емкость МКУ по количеству СС3
CC4_		STORAGE		45	; Емкость МКУ по количеству СС4
CC5_		STORAGE		60	; Емкость МКУ по количеству СС5
Rem		STORAGE		3	; Емкость МКУ по числу мастеров-ремонтников
; Описание арифметических выражений
DoxMax	VARIABLE	VrMod#FN$S1_#FN$KolSS
; Максимальный доход от дежурства СС
Ubitok	VARIABLE	VrMod#FN$KolSS#(1-(SR*1/1000))#FN$S2_;Убыток от отсутствия на дежурстве СС
DoxDeg	VARIABLE	(AC1-P$Nach1)#FN$S1_	; Полученный доход от дежурства СС
StoRem	VARIABLE	(AC1-P$Nach)#FN$StoMast ; Стоимость ремонта неисправных СС
ZatrResSS VARIABLE  FN$S3_#FN$KolSSRes#VrMod; Затраты на содержание резервных СС
SumPrib	VARIABLE	X$DoxDeg-(X$ZatrRem+MX*4(Stroka,Stolbez)+V$Ubitok) ; Прибыль
KoefPr	VARIABLE	MX*6(Stroka,Stolbez)/X$DoxMax; Коэффициент прибыли
StoMast	FUNCTION	P1,D5	; Стоимость работы одного мастера
1,17/2,18/3,16/4,20/5,21
KolSS	FUNCTION	P1,D5	; Количество по типам СС, находящихся на дежурстве
1,55/2,100/3,60/4,45/5,60
KolSSRes	FUNCTION	P1,D5	; Количество по типам резервных СС
1,2/2,4/3,4/4,3/5,4
NarOtk	FUNCTION	P1,D5	; Среднее время наработки до отказа по типам СС, час
1,373/2,301/3,482/4,325/5,470
SrVrRem	FUNCTION	P1,D5	; Среднее время ремонта по типам СС, час
1,6.5/2,4.2/3,2.8/4,3/5,5.5
S1_		FUNCTION	P1,D5	; Доход по типам от одного СС, находящегося на дежурстве
1,20/2,24.2/3,32.8/4,23/5,25.5
S2_	FUNCTION	P1,D5	; Убыток по типам при отсутствии одного СС на дежурстве
1,32/2,34.2/3,37/4,31/5,32.5
S3_	FUNCTION	P1,D5	; Затраты по типам на содержание одного резервного СС
1,21/2,24.2/3,28/4,26/5,25.5
; Сегмент постановки на дежурство СС
	GENERATE	,,,n2_
	SAVEVALUE	TipSS+,1	; Код 1 ... n2_ - признак СС1  CCn2 в X$TipSS
	ASSIGN	1,X$TipSS	; Код 1 ... n2_ - признак СС1  CCn2_ в P1
	SPLIT	(FN$KolSS+FN$KolSSRes-1)	; Число СС + резервные СС
; Сегмент имитации  дежурства СС
Met1	ENTER	P1	; Встать на дежурство СС типа, номер которого в Р1
	ASSIGN	Nach1,AC1	; Время начала дежурства
	ADVANCE	(Exponential(5672,0,FN$NarOtk))	; Имитация выхода СС из строя, номер которого в Р2
	LEAVE	P1	; Снятие с дежурства из-за выхода из строя СС типа, номер которого в Р1
	ASSIGN	3,0
Met3	ASSIGN	3+,1	; Начало цикла изменения типов СС
	TEST E	P1,P3,Met4	; Р1=Р3?
	ASSIGN	4,(P1#7)	; Р4=Р1#7 
	ASSIGN	5,(P4-2)	; Номера матриц: 5,12,19,26,33
	MSAVEVALUE *5+,Stroka,Stolbez,V$DoxDeg
;	MSAVEVALUE Pribil+,Stroka,Stolbez,V$DoxDeg
Met4	TEST GE	P3,n2_,Met3	; Все ли типы СС?
; Сегмент имитации работы ремонтного подразделения
	ENTER	Rem	; Занять одного мастера
	ASSIGN	Nach,AC1	; Время начала дежурства
	ADVANCE	(Exponential(5672,0,FN$SrVrRem))	; Имитация ремонта
	LEAVE	Rem	; Конец ремонта
	ASSIGN	3,0
Met5	ASSIGN	3+,1	; Начало цикла изменения типов СС
	TEST E	P1,P3,Met6	; Р1=Р3?
	ASSIGN	4,(P1#7)	; Р4=Р1#7
	ASSIGN	5,(P4-1)	; Номера матриц: 6,13,20,27,34 
	MSAVEVALUE *5+,Stroka,Stolbez,V$StoRem
;	MSAVEVALUE Pribil+,Stroka,Stolbez,V$StoRem
Met6	TEST GE	P3,n2_,Met5	; Все ли типы СС?
	TRANSFER	,Met1 ; Направить исправное СС на дежурство или в резерв
; Сегмент задания времени моделирования и расчета результатов
	GENERATE	VrMod
	TEST E	TG1,1,Met2
	ASSIGN	1,0
Met7	ASSIGN	1+,1	; Начало цикла изменения типов СС
	ASSIGN	2,(P1#7)	; Р2=Р1#7
	ASSIGN	9,(P2-2)	; Номера матриц: 5,12,19,26,33
	SAVEVALUEDoxDeg,((MX*9(Stroka,Stolbez))/KolProg);Доход от дежурства
	MSAVEVALUE *9,Stroka,Stolbez,X$DoxDeg
	ASSIGN	3,(P2-3)	; Номера матриц: 4,11,18,25,32
	MSAVEVALUE *3,Stroka,Stolbez,V$DoxMax; Максимально возможный доход от дежурства СС
	SAVEVALUE	DoxMax,MX*3(Stroka,Stolbez)
	ASSIGN	4,(P2-0)	; Номера матриц: 7,14,21,28,35
	MSAVEVALUE *4,Stroka,Stolbez,V$ZatrResSS	; Затраты на резервные СС
	ASSIGN	5,(P2-1)	; Номера матриц: 6,13,20,27,34
	SAVEVALUE	ZatrRem,((MX*5(Stroka,Stolbez))/KolProg)
	MSAVEVALUE *5,Stroka,Stolbez,X$ZatrRem
	ASSIGN	6,(P2-6)	; Номера матриц: 1,8,15,22,29
	MSAVEVALUE *6,Stroka,Stolbez,V$SumPrib
	ASSIGN	7,(P2-5)	; Номера матриц: 2,9,16,23,24
	MSAVEVALUE *7,Stroka,Stolbez,V$KoefPr	
	MSAVEVALUE Pribil+,Stroka,Stolbez,
MX*6(Stroka,Stolbez)	; Суммарная прибыль по СС всех типов
	ASSIGN	8,(P2-4)
	MSAVEVALUE SrKPrib+,Stroka,Stolbez,(MX*7(Stroka,Stolbez)/n2_)	; Средний коэффициент прибыли по СС всех типов
	MSAVEVALUE *8,Stroka,Stolbez,(SR*1/1000) 	
; Коэффициент использования CC
	MSAVEVALUE SrKIsp+,Stroka,Stolbez,(SR*1/(1000#n2_)) 	; Средний коэффициент использования CC всех типов 
	TEST GE	 P1,n2_,Met7	; Все ли типы СС?
	MSAVEVALUE 31,Stroka,Stolbez,(SR$Rem/1000); Коэффициент использования Rem
	SAVEVALUE	TipSS,0
Met2	TERMINATE	1
	START	1000,NP	; Вариант1: ССР2=4, мастеров=3
KolSSres	FUNCTION	P1,D5
1,2/2,5/3,4/4,4/5,4
Stolbez		EQU	2
	CLEAR	OFF
	START	1000,NP	; Вариант2: ССР2=5, мастеров=3
KolSSres	FUNCTION	P1,D5
1,2/2,6/3,4/4,4/5,4
Stolbez		EQU	3
	CLEAR	OFF
	START	1000,NP	; Вариант3: ССР2=6, мастеров=3
KolSSres	FUNCTION	P1,D5
1,2/2,4/3,4/4,4/5,4
Stroka		EQU	2
Stolbez		EQU	1
Rem	STORAGE		4	 ; Емкость МКУ по числу мастеров-ремонтников
	CLEAR	OFF
	START	1000,NP	; Вариант4: ССР2=4, мастеров=4
KolSSres	FUNCTION	P1,D5
1,2/2,5/3,4/4,4/5,4
Stolbez		EQU	2
	CLEAR	OFF
	START	1000,NP	; Вариант5: ССР2=5, мастеров=4
KolSSres	FUNCTION	P1,D5
1,2/2,6/3,4/4,4/5,4
Stolbez	EQU	3
	CLEAR	OFF
	START	1000,NP	; Вариант6: ССР2=6, мастеров=4
KolSSres	FUNCTION	P1,D5
1,2/2,4/3,4/4,4/5,4
Stroka		EQU	3
Stolbez		EQU	1
Rem	STORAGE		5	 ; Емкость МКУ по числу мастеров-ремонтников
	CLEAR	OFF
	START	1000,NP	; Вариант7: ССР2=4, мастеров=5
KolSSres	FUNCTION	P1,D5
1,2/2,5/3,4/4,4/5,4
Stolbez		EQU	2
	CLEAR	OFF
	START	1000,NP	; Вариант8: ССР2=5, мастеров=5
KolSSres	FUNCTION	P1,D5
1,2/2,6/3,4/4,4/5,4
Stolbez		EQU	3
	CLEAR	OFF
	START	1000	; Вариант9: ССР2=6, мастеров=5

В программе, кроме методов применения матриц и функций, показывается метод изменения версий модели. Изменение версий модели производится переопределением соответствующих блоков. Переопределяться не могут только блоки GENERATE. Для переопределения блоков, описывающих ОКУ и МКУ, они должны иметь метки. В командах START, кроме последней, указывается операнд В - NP - не выводить отчёт. Однако одного переопределения блоков недостаточно. В GPSS World изменение версий модели достигается также за счет использования команды CLEAR.

В рассматриваемом примере в процессе моделирования необходимо собирать статистику по версиям модели. Нужная собранная статистика должна быть сохранена, а ненужная - сброшена.

Процесс моделирования в исходное состояние возвращает команда CLEAR. Формат записи команды:

CLEAR	[A]

Операнд А может быть ON либо OFF. По умолчанию - ON.

Команда CLEAR сбрасывает всю накопленные статистические данные, удаляет все транзакты из процесса моделирования и заполняет все блоки GENERATE первым транзактом. ОКУ и МКУ становятся доступными, устанавливаются в незанятое состояние. Содержимое всех блоков становится нулевым. Генераторы случайных чисел не сбрасываются.

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

Однако при этом нужно иметь в виду те ячейки, начальные значения которых должны быть нулевыми в новой версии модели. Необходимо предусмотреть в программе блоки приведения таких ячеек в исходное состояние. В данной модели это показано на примере сохраняемой ячейки TipSS. Если эту ячейку не привести в нулевое состояние, процесс моделирования второй версии будет остановлен по ошибке "Обращение к несуществующей памяти".

Поскольку накопленные и сохраненные в матрицах результаты моделирования нет необходимости выводить после каждого варианта, то в команде START используется операнд В, равный ON. В последней команде START операнд В не используется. Поэтому стандартный отчет выдаётся после завершения моделирования. В рассматриваемом примере - после девяти наблюдений.

Ниже показан фрагмент журнала с информацией о ходе моделирования. В первом наблюдении (первой версии модели) модельное время изменяется от 0 до 1 000 000 единиц модельного времени (1000 прогонов # 1000 часов работы моделируемой системы).

После переопределения (формирования второй версии модели) выполняется команда CLEAR и абсолютное модельное время вновь изменяется от 0 до 1 000 000 единиц модельного времени.

07/11/11 16:56:06 Model Translation Begun.
07/11/11 16:56:06 Ready.
07/11/11 16:56:06 Simulation in Progress. 
07/11/11 16:56:26 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:56:26 Simulation in Progress. 
07/11/11 16:56:46 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:56:46 Simulation in Progress. 
07/11/11 16:57:06 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:57:06 Simulation in Progress. 
07/11/11 16:57:31 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:57:31 Simulation in Progress. 
07/11/11 16:57:55 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:57:55 Simulation in Progress. 
07/11/11 16:58:19 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:58:19 Simulation in Progress. 
07/11/11 16:58:44 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:58:44 Simulation in Progress. 
07/11/11 16:59:09 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:59:09 Simulation in Progress. 
07/11/11 16:59:33 The Simulation has ended. Clock is 1000000.000000.
07/11/11 16:59:33 Reporting in Модель сеть связи 3.128.1-REPORT.

Для включения в формируемый стандартный отчет матриц необходимо при открытом объекте "Модель" выполнить команду:

Edit/Settings/Reports/Matrices/Применить/Ok

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

MATRIX  RETRY     INDICES     VALUE
 PRIB1    0         1 1     411920.775
                    1 2     412047.879
                    1 3     395398.298
                    2 1     975100.990
                    2 2     973737.015
                    2 3     972026.043
                    3 1    1029846.786
                    3 2    1029847.984
                    3 3    1029916.195
 KPR1     0
                    1 1           .374
                    1 2           .374
                    1 3           .359
                    2 1           .886
                    2 2           .885
                    2 3           .883
                    3 1           .936
                    3 2           .936
                    3 3           .936
 KZEN1     0
                    1 1           .778
                    1 2           .778
                    1 3           .772
                    2 1           .976
                    2 2           .976
                    2 3           .975
                    3 1           .995
                    3 2           .995
                    3 3           .995
Игорь Маникин
Игорь Маникин

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

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

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

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

entity.time_vxod=time(); 

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