Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
~Экзамен~ / 1999_Шпоры (ответы).doc
Скачиваний:
38
Добавлен:
19.04.2013
Размер:
453.12 Кб
Скачать

8. Адаптация имитационных моделей одноканальной смо.

Задача: Адаптировать модель бензоколонки блоком, определяющим для каждой заявки ожидание её в очереди (это время длится от прихода заявки до поступления её на обслуживающий элемент, при этом собственное время обслуживания не учитывается). Решение: 1. ДП; 2. Модель - программа

9. Имитация многоканальной смо.

Для имитации МСМО используется функция FIFON, которая в принципе работает как функция FIFO, но приспособлена к тому, что на входе имеется несколько исходных заявок, а на выходе несколько обслуживающих элементов. Вид функции: FIFON (А.Н, В.Н, С.Н, N, Д), где N – номер зарезервированного массива, остальное – как FIFO.

Введение аргумента N связано с тем, что в трансляторе под массивы очередей заранее выделяется несколько групп ячеек памяти (в отличие от этого в FIFO группы выделяются по ходу трансляции). В связи со спецификой формирования очереди МСМО в модели – программе имеются 2 модификации функции FIFON: входная FIFON (А.Н, В.Н, 1, N, Д) и выходная FIFON (0, 1, С.Н, N, Д)

10. Основные концепции работы с матричными переменными в системе имитак.

Одной из версий системы ИМИТАК – ИМИТАК2 является вариант, когда мы работаем с векторными переменными. При этом введение многомерных массивов (1,2 и 3-х мерные) не должно нарушать основные концепции системной динамики. Основным действием ИМИТАК2 является представление в виде 1 оператора (уравнения) нескольких однообразных (одинаковых) операторов и наборов исходных данных (матриц). Такой набор операторов и исходных данных будем называть массивом. При реализации массивов в ИМИТАК2 объявление размерностей ведется не с помощью специального оператора, а внутри самого уравнения. Т.о. при адаптации модели упрощено введение новых массивов.

ИМИТАК1

ИМИТАК2

У А1.Н = ….

У А2.Н = ….

У А: (3).Н = …

У А3.Н = ….

- варианты одномерного массива

Д А11.Н = …

Д А12.Н = …

Д А21.Н = …

Д А: (3, 2).Н = …

Д А22.Н = …

Д А31.Н = …

Д А33.Н = …

- варианты многомерного массива

Считается, что если массив стоит в левой части оператора, то правая часть используется многократно для расчета любого элемента этого массива. В правой части такого уравнения могут быть как скаляры, так и массивы с той же размерностью, что и в левой части. Для выделения какого – нибудь одного элемента массива используется знак #. Например:

У А: (3).Н = …

Д В.Н = А#(2).Н*К1 – используется только второй элемент массива А при расчете В.

В 2-х и 3-х мерных массивах могут использоваться несколько переменных, объединенных в группу – так называемое сечение (строка, столбец в матрице). Причем указание на сечение ведется с использованием значка (*). Пример: Есть следующий фрагмент модели – программы:

Д А: (3,3).Н = …. (1)

Д В: (3).Н = А#(2,*).Н (2)

Д С: (3).Н = RANGE (А#(*, 1).Н, А#(*, 3).Н) (3)

Ф.Н = RANGE (А.Н, В.Н), т.е. Ф (t) = (А (t))^B (t) – степенная функция.

При расчете правой части в матричных выражениях необязательно в правой части могут быть одинаковые алгоритмы. Тогда работает следующий механизм задания специфических алгоритмов: после написания (общей части) одинаковых алгоритмов для всего массива или сечений строго следующим оператором вводится «во изменении» специфический алгоритм. Пример:

ИМИТАК1

ИМИТАК2

Д А1.Н = RAND (20, 40)

Д А2.Н = sin (время)

Д А: (3).Н = RAND (20, 40)

Д А3.Н = RAND (20, 40)

Д А#(2).Н = sin (время)

Т.е. 1 и 3 элемент массива А1 и А3 рассчитываются как случайная величина, а А2 как синусоидальная. При этом между 2 операторами ИМИТАК2 не должно стоять никакого значимого оператора (к незначимым относят комментарии).

При введении сечения мы используем значок * для отображения всех индексов элементов, входящих в сечение. Если необходимо использовать определенный порядок движения индексов, то вводятся 3 скалярные ячейки: I1, I2, I3, что соответствует ортам i, j, k соответственно.

I1, I2, I3 могут использоваться в правой части, причем для каждого оператора задается свой вариант, где максимальные значения индекса объявляются в левой части оператора.

Пример: Пусть имеется матрица А: (20, 10). Задача – её надо транспонировать, т.е. получить матрицу В(10,20).

У А: (20, 10).Н = (1)

Д В: (10, 20).Н = А#(I2, I1).H (2)

Следствия:

1. В первый момент времени уровням присваиваются начальные значения, соосветственно объявленным значениям.

2. Для массивов констант объявление размерностей ведется не в левой части оператора, а непосредственно в правой части в момент его использования.

Пример:

У А: (3, 2).Н = А.П + ТВХ.ПН - ТВП.ПН (1)

Т ТВХ: (3, 2).НБ = А#(I1, I2).H * К: (3, 2)#(I1, I2) (2)

Т ТВП: (3, 2).НБ = А#(I1, I2).H - К: (2, 3)#(I2, I1) (3)

Е

И А = 3/4/6/7/3/2

И К = 1/2/3/4/5/6

При использовании матричных переменных сталкиваются с понятием «массивы необъявленной размерности». Массивы необъявленной размерности возникают потому, что в скалярных встроенных функциях типа TABLE и QUANT обязательно используются одномерные массивы. При работе с векторными (встроенными) функциями (операторами) в правых частях оператора могут встретиться функции TABLE или QUANT, размерность которых в левой части оператора не может быть объявлена. Кроме того, если в левой части оператора объявляется размерность меньше, чем объявленная ранее размерность массива, используемого в правой части, то фактически используется только часть массива, находящегося в правой части.

Пример:

Д В: (3).Н = TABLE (MAC: (5, 4)#(I1,*), время, 0,1)

Е

И МАС = 10/20/30/40/0.1/0.2/0.3/0.4/1/2/3/4/9/8/7/6/30/25/20/15

Предположим, что имеется другой фрагмент: пусть вместо В записана следующая строчка, т.е. надо рассчитать С.

Д С: (4) = QUANT (MAC: (5, 4)#(I1,*),0)

Соседние файлы в папке ~Экзамен~