Моделирование в проектировании сложных систем
Автор: Пользователь скрыл имя, 04 Ноября 2012 в 14:28, курс лекций
Описание работы
Дисциплина «Моделирование в проектировании сложных систем» рассматривает вопросы применения имитационного моделирования при проектировании сложных технических и других систем, к которым относятся гибкие производственные системы (ГПС), их подсистемы, и другие объекты дискретного производства, а также транспортные, информационные, банковские, торговые, и т.п. системы, в основе которых с точки зрения моделей лежат системы массового обслуживания.
Работа содержит 1 файл
МОДЕЛИРОВАНИЕ В ПРОЕКТИРОВАНИИ (на печать).docx
— 542.67 Кб (Скачать)
GNORM = GNORMСТ.ОТ. # SNORM + GNORMМ.ОЖ. ,
где GNORM – выборка из нормального распределения; SNORM – выборка из нормированного нормального распределения, имеющего нулевое матожидание и единичное стандартное отклонение; GNORMСТ.ОТ. и GNORMМ.ОЖ. – реальные стандартное отклонение и матожидание соответственно.
Нормированная выборка задается функцией типа С с именем SNORM с использованием 25 пар чисел:
SNORM FUNCTION RN1, C25
0, –5 /.00003, –4 /.00135, –3 /.00621, –2.5 /.02275, –2 /.06681, –1.5
.11507, –1.2 /.15866, –1 /.21186, –.8 /.27425, –.6 /.34458, –.4 /.42074,–.2
.5, 0 /.57926, .2 /.65542, .4 /.72575, .6 /.78814, .8 /.84134, 1/.88493, 1.2
.93319, 1.5 /.97725, 2 /.99379, 2.5 /.99865, 3 /.99997, 4 / 1,5
При использовании этого закона распределения определяется арифметическая переменная GNORM, например, при стандартном отклонении GNORMСТ.ОТ. = 5 и матожидании GNORMМ.ОЖ. = 30 следующим образом:
GNORM FVARIABLE 5#FN$ SNORM + 30
Далее в программе делается ссылка на эту переменную, например:
GENERATE V $ GNORM
В связи с тем, что часто реальные случайные величины (временные интервалы и т.п.) положительны, необходимо следить за тем, чтобы матожидание по меньшей мере в 5 раз превышало стандартное отклонение.
Нормальное распределение
можно промоделировать с
NORMAL (А, В, С)
В А указывается номер генератора случайных чисел, в В – среднее значение, в С – стандартное отклонение. Например, для рассмотренного случая:
GENERATE (NORMAL (1, 30, 5))
4.6. Булевы переменные, проверка числовых выражений
Булева переменная предназначена для вычисления логических выражений, которые могут принимать одно из двух значений: «истина» или «ложь» (величина которого 1 или 0 соответственно). Эта переменная определяется командой BVARIABLE (булева переменная). Ее формат:
<имя> BVARIABLE <выражение>
В поле метки указывается символическое имя, в поле операндов – выражение. В выражении могут использоваться операторы трех типов: логические, отношения и булевы.
логические операторы используются для ссылок на логическое состояние устройств, МКУ и ключей. Наиболее распространенные операторы:
FVj – устройство используется (1), в противном случае – 0;
FIj – устройство прервано (1), в противном случае – 0;
SFj – МКУ заполнено (1), в противном случае – 0;
SEj – МКУ пусто (1), в противном случае – 0;
LSj – ключ включен (1), в противном случае – 0;
операторы отношения сравнивают численные величины:
'G' – больше,
'GE' – больше или равно,
'E' – равно,
'NE' – не равно,
'LE' – меньше или равно,
'L' – меньше.
Булевы операторы выполняют условия: 'AND' – И, 'OR' – ИЛИ.
Порядок выполнения: логические
операторы и операторы
KAPPA BVARIABLE C1 'GE' 500 ' AND' LS $ ALFA
истинно, если относительное модельное время больше или равно 500 и логический ключ ALFA включен.
В случае, если булева переменная задана через арифметическую переменную, то значение булевой переменной 0, если арифметическая переменная равна 0, в остальных случаях значение булевой переменной равно 1.
Булева переменная имеет СЧА: BVj, для приведенного примера это BV$KAPPA.
Блок TEST проверяет соотношение между операндами А и В через дополнительный операнд Х, который может принимать такие же значения, как и операторы отношении (только апострофы не ставятся). Формат блока:
TEST X A, B, [C]
Графическое изображение:
Этот блок может работать в двух режимах: отказа (клапана) и условного перехода. В первом режиме операнд С не используется. Транзакт пойдет в следующий оператор только при выполнении условия, заданного операндом Х. Например, при записи TEST E Q1, 10 транзакт пойдет дальше, когда содержимое очереди № 1 будет равно 10. Во втором режиме в случае выполнения условия транзакт пойдет в следующий оператор, а в случае невыполнения – по метке, указанной в операнде С. Например, TEST G P5, V$AAA, MET1 означает, что при условии, когда значение пятого параметра вошедшего тракзакта больше значения арифметической переменной ААА, транзакт пойдет в следующий оператор, если нет – то по адресу МЕТ1.
Блок TEST может использоваться и для проверки булевых переменных. Например, TEST E BV $ DDD, 1 означает, что транзакт пойдет в следующий оператор, только тогда, когда значение булевой переменной DDD станет равным единице.
Примеры
Пример 4.1. Пусть производственный участок работает 1 смену (28800 с). Поступающие детали подчиняются пуассоновскому закону с интенсивностью 12 поступлений в час (т.е. 300 с на 1 поступление). Обработка на одном станке с экспоненциальным временем, но среднее время t зависит от количества деталей в очереди : при отсутствии очереди t=330 c; при = 1 и 2 время t=300 c; при = 3; 4; 5 t=270 c; при 6 t=240 c.
Программа модели при единице модельного времени, равной 1 с, будет иметь вид:
QVEF FUNCTION Q$ABC, D4
0,330 / 2, 300 / 5, 270 / 6, 240
GENERATE (EXPONENTIAL (1, 0, 300))
QUEUE abc
seize oto
depart abc
ADVANCE (EXPONENTIAL (1,0, FN$QVEF))
RELEASE OTO
TERMINATE
GENERATE 28800
TERMINATE 1
START 1
Эта программа чувствительна к длине очереди .
Пример 4.2. Рассмотрим процесс сборки деталей с обжигом (см. пример 3.3). Пусть время сборки (30 ± 5) мин, время обжига (8 ± 2) мин, зарплата сборщика 30 единиц в день, стоимость печи 80 единиц в день, стоимость детали – 5 единиц. Рассчитать среднюю дневную прибыль, в одном прогоне модели исследовать случаи с четырьмя, пятью и шестью сборщиками. Модельное время – 1 неделя.
Определим операнд D в блоке GENERATE косвенно через сохраняемую величину с именем RAB.
Средняя дневная прибыль = 5 # число ежедневно изготовленных деталей – дневные расходы.
Если в поле метки блока RELEASE OTO записать имя PLAN, то N $ PLAN есть число готовых деталей за весь плановый период, т.е. за 5 дней, а N $ PLAN/5 – за 1 день.
Затраты за 1 день = стоимость печи (80) + зарплата рабочих (30 # X$RAB).
Следовательно, дневная прибыль, выраженная арифметической переменной с именем PRIB будет:
PRIB VARIABLE 5 # N$PLAN / 5–80–30 # X$RAB
Для подсчета средней дневной выручки в модуль таймера поместим блок SAVEVALUE с операндами А = INDEX и В = V$PRIB.
INITIAL X$RAB, 4
PRIB VARIABLE 5#N$PLAN/5–80–
GENERATE ,,, X$RAB
SBOR ADVANCE 30, 5
SEIZE OTO
ADVANCE 8, 2
PLAN RELEASE OTO
TRANSFER , SBOR
GENERATE 2400
SAVEVALUE INDEX, V$PRIB
TERMINATE 1
START 1
INITIAL X$RAB, 5
CLEAR OFF
START 1
INITIAL X$RAB, 6
CLEAR OFF
START 1
Выходные данные, касающиеся прибыли:
SAVEVALUE VALUE SAVEVALUE
RAB 4 INDEX 35
RAB 5 INDEX 50
RAB 6 INDEX 35
Эта статистика показывает, что при пяти сборщиках будет наибольшая дневная прибыль.
5. использование
средств рационального построения
моделей
В этом разделе будут рассмотрены некоторые средства, позволяющие упростить модели при их большой размерности, сложных дисциплинах обслуживания транзактов, необходимости компактного представления результатов моделирования.
5.1. Параметры транзактов, изменение их значений и уровня приоритетов
Каждый транзакт может иметь по желанию пользователя любое число параметров. При появлении в модели транзакты имеют нулевые значения параметров.
Для задания значений параметров используют блок ASSIGN (назначить). Его формат и графическое изображение:
В операнде А указывается имя параметра (число, СЧА, СЧА* параметр и может быть знак «+» или «–» в зависимости от режимов: замещения, приращения, уменьшения). В операнде В указывается новое значение, в С – модификатор–функция. Например:
ASSIGN 1, 285
ASSIGN АВС+, Q10
В первом случае значение параметра № 1 вошедшего транзакта заменяется на число 285, во втором – к значению вошедшего транзакта с именем АВС прибавляется значение текущего содержимого очереди № 10.
Для задания в транзакт или его параметр абсолютного модельного времени используют блок MARK (отметить). Формат и графическое изображение блока:
В операнде А указывается имя (числовое или символическое) параметра, в который заносится значение абсолютного модельного времени, по умолчанию это время устанавливается вошедшему транзакту.
Есть и другие блоки для изменения значения параметров транзакта [1].
Для изменения уровня приоритета транзакта применяют блок PRIORITY (установить приоритет). Формат и графическое изображение:
В операнде А указывается новый уровень приоритета (целое число, СЧА, СЧА*СЧА).
В операнде В может быть указан режим BU (т.е. BUFFER), когда транзакты переводятся в список текущих событий для возобновления просмотра этого списка.
5.2. Системы с параллельно
работающими идентичными устройствами
и раздельными очередями
Часто возникают ситуации, когда в системе с несколькими очередями и устройствами реализуется такая дисциплина обслуживания: если одно из устройств свободно, то транзакт занимает его, если все устройства заняты, то транзакт присоединяется к самой короткой очереди. Такую стратегию можно промоделировать с помощью блока SELECT (выбрать) в условном режиме. Формат блока и графическое изображение:
В условном режиме операнд Х может принимать значения: G, GE, E, L, LE, NE, MIN, MAX, NE.MAX, NE.MIN. Здесь первые шесть значений
аналогичны значениям операнда Х блока TEST. Символы MAX и MIN означают наибольшее
и наименьшее значения, NE.MAX и NE.MIN – ненаибольшее и ненаименьшее
значения.
При использовании блока SELECT в логическом режиме операнд Х принимает значения, определяющие логические условия работы устройств и МКУ (с ними можно ознакомиться в [1]).
Операнды задают: E – групповое имя (СЧА) проверяемых объектов; B и
C – наименьший и наибольший
номера из проверяемых объектов; D – значение, с которым сравнивается
атрибут (в случае, когда X = MIN (MAX) и X = NE.MIN (NE.MAX), D – не задается); A – номер параметра, в который
заносится номер найденного типа группы; F – метка оператора, куда пойдет
транзакт, если искомый объект не обнаружен.
Пусть, например, на участке работают восемь идентичных станков с пристаночными столами для накопления заготовок в случае занятости станков. Заготовка попадает на свободный станок, если таких нет, то присоединяется к наименьшей очереди. Эту ситуацию можно промоделировать так:
.
.
.
SELECT Е 2, 1, 8, 0, F, ALFA
ABC QUEUE P2
SEIZE P2
.
.
.
ALFA SELECT MIN 2, 1, 8, ,Q
TRANSFER , ABC
.
.
.
В этом фрагменте устройства (с 1 по 8) проверяются на предмет свободы (F→E→O), если такое устройство есть, то его номер записывается во второй параметр активного транзакта, он проходит дальше (с нулевым вхождением в очередь) и попадает в свободное устройство с именем, определенным в Р2, и т.д.
Если свободного устройства
нет, то транзакт идет по метке ALFA к блоку SELECT в режиме MIN и после проверки содержимого
очередей (Q) с первой по восьмую, присоединяется
к наименьшей через оператор TRANSFER , АВС
(номер минимальной очереди фиксируется
также во втором параметре активного транзакта).
При этом будет сформирована статистика
относительно всех восьми устройств и
очередей к ним, хотя в программе используется
одна последовательность операторов.
5.3. Моделирование таблиц
При исследовании систем возникает необходимость определения для какой–либо выборки среднего значения, стандартного отклонения, количества элементов, попадающих в установленные интервалы и т.п. информации. Такая табуляция осуществляется с использованием операторов TABLE (таблица) и TABULATE (табулировать).
Команда TABLE имеет формат:
<имя> TABLE А, В, С, D
В поле метки
записывается символическое имя
таблицы. В операнде А задается СЧА табулируемого элемента,
в В –
верхний предел первого интервала, в
С – ширина
промежуточных интервалов, в D – общее число интервалов. Например,
MET1 TABLE M1, 10, 10, 8 задает таблицу с именем MET1 для табулирования времени пребывания
в модели активного транзакта М1 при верхней
границе первого значения интервала, равного
10, ширине интервалов в
100 единиц и общем числе интервалов таблицы,
равном 8. Эта команда описывается в начале
программы.
Блок TABULATE имеет формат и графическое изображение:
В операнде А указывается имя таблицы, в которую заносятся табулируемые значения. В операнде В указывается весовой коэффициент, т.е. количество единиц, заносимых в интервал таблицы, по умолчанию – это значение равно единице.
Для использования описанной ранее таблицы этот блок будет: