Автор: Пользователь скрыл имя, 04 Ноября 2012 в 14:28, курс лекций
Дисциплина «Моделирование в проектировании сложных систем» рассматривает вопросы применения имитационного моделирования при проектировании сложных технических и других систем, к которым относятся гибкие производственные системы (ГПС), их подсистемы, и другие объекты дискретного производства, а также транспортные, информационные, банковские, торговые, и т.п. системы, в основе которых с точки зрения моделей лежат системы массового обслуживания.
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
Эта статистика показывает, что при пяти сборщиках будет наибольшая дневная прибыль.
В этом разделе будут рассмотрены некоторые средства, позволяющие упростить модели при их большой размерности, сложных дисциплинах обслуживания транзактов, необходимости компактного представления результатов моделирования.
Каждый транзакт может иметь по желанию пользователя любое число параметров. При появлении в модели транзакты имеют нулевые значения параметров.
Для задания значений параметров используют блок ASSIGN (назначить). Его формат и графическое изображение:
В операнде А указывается имя параметра (число, СЧА, СЧА* параметр и может быть знак «+» или «–» в зависимости от режимов: замещения, приращения, уменьшения). В операнде В указывается новое значение, в С – модификатор–функция. Например:
ASSIGN 1, 285
ASSIGN АВС+, Q10
В первом случае значение параметра № 1 вошедшего транзакта заменяется на число 285, во втором – к значению вошедшего транзакта с именем АВС прибавляется значение текущего содержимого очереди № 10.
Для задания в транзакт или его параметр абсолютного модельного времени используют блок MARK (отметить). Формат и графическое изображение блока:
В операнде А указывается имя (числовое или символическое) параметра, в который заносится значение абсолютного модельного времени, по умолчанию это время устанавливается вошедшему транзакту.
Есть и другие блоки для изменения значения параметров транзакта [1].
Для изменения уровня приоритета транзакта применяют блок PRIORITY (установить приоритет). Формат и графическое изображение:
В операнде А указывается новый уровень приоритета (целое число, СЧА, СЧА*СЧА).
В операнде В может быть указан режим BU (т.е. BUFFER), когда транзакты переводятся в список текущих событий для возобновления просмотра этого списка.
Часто возникают ситуации, когда в системе с несколькими очередями и устройствами реализуется такая дисциплина обслуживания: если одно из устройств свободно, то транзакт занимает его, если все устройства заняты, то транзакт присоединяется к самой короткой очереди. Такую стратегию можно промоделировать с помощью блока 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 , АВС
(номер минимальной очереди фиксируется
также во втором параметре активного транзакта).
При этом будет сформирована статистика
относительно всех восьми устройств и
очередей к ним, хотя в программе используется
одна последовательность операторов.
При исследовании систем возникает необходимость определения для какой–либо выборки среднего значения, стандартного отклонения, количества элементов, попадающих в установленные интервалы и т.п. информации. Такая табуляция осуществляется с использованием операторов TABLE (таблица) и TABULATE (табулировать).
Команда TABLE имеет формат:
<имя> TABLE А, В, С, D
В поле метки
записывается символическое имя
таблицы. В операнде А задается СЧА табулируемого элемента,
в В –
верхний предел первого интервала, в
С – ширина
промежуточных интервалов, в D – общее число интервалов. Например,
MET1 TABLE M1, 10, 10, 8 задает таблицу с именем MET1 для табулирования времени пребывания
в модели активного транзакта М1 при верхней
границе первого значения интервала, равного
10, ширине интервалов в
100 единиц и общем числе интервалов таблицы,
равном 8. Эта команда описывается в начале
программы.
Блок TABULATE имеет формат и графическое изображение:
В операнде А указывается имя таблицы, в которую заносятся табулируемые значения. В операнде В указывается весовой коэффициент, т.е. количество единиц, заносимых в интервал таблицы, по умолчанию – это значение равно единице.
Для использования описанной ранее таблицы этот блок будет:
Информация о работе Моделирование в проектировании сложных систем