Имитационная система с детерминированными процессами

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    2,25 Мб
  • Опубликовано:
    2013-05-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Имитационная система с детерминированными процессами

Содержание

 

Введение

1. Построение имитационной модели системы массового обслуживания

1.1 Список и содержание активностей СМО

1.2 Блок-схема алгоритма моделирования и текст процедуры

1.3 Протокол моделирования

2. Моделирование случайных независимых величин

2.1Аналитическая запись заданных законовраспределения случайных величин

2.2 Блок-схемы алгоритмов моделирования случайных величин и тексты процедур

2.3 Результаты тестирования процедур моделированияслучайных величин

2.4 Протокол моделирования СМО в условиях случайных изменений параметров

3. Моделирование случайных процессов

3.1 Корреляционная функция стационарного случайного процесса

3.2 Решение системы уравнений

3.3 Блок-схема реализуюшая метод скользящего суммирования и текст процедур

3.4 Тестирование генератора стационарного случайного процесса

3.5 Протокол моделирования в условиях воздействия возмущающих случайных процессов

4. Оптимизация системы массового обслуживания

4.1 Постановочная часть задачи

4.2 Блок-схема и текст процедуры реализующая Парето-оптимизацию

4.3 Результаты Парето-оптимизации

Заключение

Приложение

Введение

Полное и всестороннее исследование АСУ на всех этапах разработки, начиная с составления технического задания на проектирование по результатам обследования объектов управления и заканчивая внедрением АСУ в эксплуатацию, невозможно без использования методов моделирования на ЭВМ.

Реальные сложные системы, к числу которых относятся и современные АСУ, можно исследовать с помощью двух типов моделей: аналитических и имитационных. В аналитических моделях поведение сложных систем записывается в виде некоторых функциональных отношений или логических условий.

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

Не смотря на то, что разработка хорошей имитационной модели часто обходится дороже создания аналитической модели и требует больше временных затрат, ее построение как правило себя оправдывает. Это объясняется тем, что такая модель позволяет гораздо точнее отразить протекание процессов в реальной сложной системе и описать поведение компонент сложной системы на высоком уровне детализации; исследовать динамику взаимодействия компонент во времени и пространстве параметров системы; изучить новые явления в системе, поведение которой имитируется.

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

Постановка задачи.

Для обеспечения надежности АСУ ТП в ней используется две ЭВМ. Первая ЭВМ выполняет обработку данных о технологическом процессе и выработку управляющих сигналов, а вторая находится в "горячем резерве". Данные в ЭВМ поступают через t1 (сек.), обрабатываются в течении t2 (сек.), затем посылается управляющий сигнал, поддерживающий заданный темп процесса. Если к моменту посылки следующего набора данных не получен управляющий сигнал, то интенсивность выполнения технологического процесса уменьшается вдвое и данные посылаются через 2t1 (сек.). Основная ЭВМ каждые t3 (сек.) посылает резервной ЭВМ сигнал о работоспособности. Отсутствие сигнала означает необходимость включения резервной ЭВМ вместо основной. Характеристики обеих ЭВМ одинаковы. Подключение резервной ЭВМ занимает t4 (сек.), после чего она заменяет основную довосстановления, а процесс возвращается к нормальному темпу. Отказы основной ЭВМ происходят через T (сек.). Восстановление работоспособности занимает t5 (сек.). Резервная ЭВМ абсолютно надежна. Смоделировать работу системы в течение 1 часа.

Данные для детерминированной модели СМО: t1=10, t2=8,t3 =30, t4=5, t5=100, T =300.

Данные для имитационной модели СМО: интервалы t1, t2, t3, t4, t5 распределены по нормальному закону с параметрами m1=10, m2=8,m3=30, m4=5, m5= 100, σ1=2, σ2=2, σ3=10,σ4=1, σ5=5; период отказа основной ЭВМ T является стационарным случайным процессом с нормальным законом распределения и интервалом разброса [200.400].

Варьируемые параметры: m1, m3.

Показатели работы: время нахождения технологического процесса в замедленном состоянии, число пропущенных из-за отказа данных.

имитационная система массового обслуживания

1. Построение имитационной модели системы массового обслуживания


Цель работы по разделу: построение имитационной модели системы массового обслуживания, параметры которой являются детерминированными величинами

 

Графическая схема СМО

Рис.1.1 Графическая схема СМО АСУ ТП

1.1 Список и содержание активностей СМО


Функциональные действия:

.        Поступление данных в ЭВМ

2.      Замедленное поступление данных в ЭВМ

.        Отправка сигнала о работоспособности

.        Отказ основного ЭВМ

.        Подключение резервной ЭВМ№2

.        Восстановление ЭВМ

.        Обработка данных

Активности, условия запуска, алгоритм:

·        А1-активность поступления данных в ЭВМ при нормальном/ замедленном режиме темпе функционирования;

УЗ: (tпос. данных<=t0)

Ал: еслиFlagпост. сигнала=1, то tпос. данных=t0+t1иначе tпос. данных=t0+2t1

Flagпост. сигнала=0

·        А3-активность сигнала о работоспособности;

УЗ: (tраб<=t0) ^ (ЭВМ работает)

АЛ: Основная ЭВМ работает; tраб=t0+t3

·        А4-активность отказа основной ЭВМ;

УЗ: (T<=t0) ^ (ЭВМ работает)

АЛ: Основная ЭВМ не работает; T=T+1

·        А51-активность подключения резервной ЭВМ;

УЗ: (ЭВМ не работает) ^ (резервная ЭВМ не работает)

АЛ: tзр=t0+t4; резервная ЭВМ в режиме подключения;

·        А52 - конец подключения резервной ЭВМ;

УЗ: (tзр<=t0) ^ (резервная ЭВМ в режиме подключения)

АЛ: Резервная ЭВМ работает;

·        А61-активность начала восстановления основной ЭВМ;

УЗ: (tвосст<=t0) ^ (ЭВМ не работает)

АЛ: tвосст=t0+t5; FLAGвосст=1;

·        А62-конец восстановления основной ЭВМ;


АЛ: tвщсст=t0+t5; FLAGвосст=0;

·        А71-активность начала обработки данных;

УЗ: (Счетчик сообщений>0) ^ (tоб. д<=t0)

АЛ: FLAGоб. д=1;

·        А72-конец обработки данных обработки данных;

УЗ: FLAGоб. д=1;

АЛ: FLAGоб. д=0; Flagупр. сигнал=1

1.2 Блок-схема алгоритма моделирования и текст процедуры



Рис.1.2 Алгоритм реализации моделирования предоставленной системы

(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;time_t1,time_t2,time_t3,time_t4,time_t5,time_T: real;(count); // Счетчик срабатывания мультимедиа таймера: = (h*count);_T: = (T*count_T);_t3: = (t3*count_t3);start_t1 then // Если начался отсчет передачи данных в ЭВМ1_DATA: =0; // данные передаются_t1: =time - now_time_t1;;ON_PC1 thenstatus_PC1: = 1;ON_PC2 thenstatus_PC2: = 1;start_t2 then // если запущен отсчет обработки данных в ЭВМ1_DATA: = 3;_t2: = time - now_time_t2;;start_t2 and process_PC1 then_fail_time: = time;_signal: =false;;_t4 then // Если начался отсчет включенияЭВМ2_t4: = time - now_time_t4;start_t5 then // если начался отсчет восстановления ЭВМ1_t5: = time - now_time_t5;

// Имитируем включениеЭВМ2(time_t4>t4) and (start_t4) then_PC2 ();

// имитируем обработку данных( (time_t2) >=t2) and (start_t2) then // прошла обработка данных_Process ();

// имитируем поступление данных( (time_t1) >=t1) and (start_t1) then // Если данные закончили свое поступление_Received ();

// имитируем посылку резервного сигнала от ЭВМ1 к ЭВМ2( (time-time_t3) >=t3) then // проверяем в работе ли у нас ЭВМ1_signal ();

// Имитируем восстановление ЭВМ1(time_t5>t5) and (start_t5) then // Если прошло время восстановления ЭВМ1_PC1 ();

// имитируем отказЭВМ1( (time-time_T) >=T) then_PC1 ();

// иммитируем конец работы АСУ ТПtime=3600 then(fm_Main. MMtimer); // Разрушаем таймер при закрытии_Info ();;

 

.3 Протокол моделирования


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

Рис.1.3 Протокол моделирования

2. Моделирование случайных независимых величин


Цель работы по разделу: Уточнение имитационной модели СМО посредством моделирования случайных величин, характеризующих параметры заявок и режимы функционирования устройств их обработки в реальной сложной системе.

 

.1Аналитическая запись заданных законовраспределения случайных величин


Программная реализация случайной величины с законом распределения, отличным от равномерного, производится методом обратной функции. Если  - это последовательность, равномерно распределенная на интервале [0.1], а  - это последовательность, имеющая плотность распределения вероятности

, то .

Для показательного распределения:

,

откуда .

Для нормального распределения с плотностью распределения

,

,

где  и  - это две независимые последовательности, равномерно распределенные на интервале [0.1].

Таким образом, любой генератор последовательности случайных чисел, распределенных по некоторому закону, отличному от равномерного, в основе своей содержит минимум один генератор базовой последовательности, равномерно распределенной на интервале [0.1].

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

2.2 Блок-схемы алгоритмов моделирования случайных величин и тексты процедур


Рис.2.1 Метод серединных квадратов

Рис.2.2 Метод иррационального числа

Рис.2.3 Блок-схема функции Random, которая реализует конгруэнтный метод

Реализация конгруэнтного метода функцией Random является встроенной в язык программирования Pascal, на котором основана среда разработки Delphi, использованная при моделировании. Полный алгоритм метода здесь не рассматривается ввиду его сложности.

_of_squares_method (init: extended): Tmas;: integer;(result,0);: = nil;(result,1);[0]: = init;: = 1 to N-1 do(result, i + 1);[i]: = next_median_of_squares (result [i-1]);;;_median_of_squares (x: extended): extended;r=12;,new_s: string;: integer;: byte;: = sqr (x);: = length (s) - 2;: = k div 2;_s: = '0,'+copy (s,3+k div 2,k);: = StrToFloat (new_s);: = x;;irrational_number_method (init: extended): Tmas;i: integer; s: string;(result,0);: = nil;: = 1 to N do(result, i);[i - 1]: = Frac (i * init);;;_method (init: integer): Tmas;i: integer;(result, 0);: = nil;: = init;: = 0 to N - 1 do(result, i + 1);[i]: = random;;;

2.3 Результаты тестирования процедур моделированияслучайных величин


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

Тестирование по гистограмме

Гистограмма - это кусочно-непрерывная функция плотности распределения статистического ряда. На рис.2.4 изображены гистограммы тестирования случайных независимой величин с нормальным распределением с использованием метода серединных квадратов, метода иррационального числа и конгруэнтного метода, числе испытаний 40000.

Рис.2.4 Метод серединных квадратов

Рис.2.5 Метод иррационального числа

Рис.2.6 Конгруэнтный метод

Гистограмма плотности распределения статистического ряда должна максимально приближаться к теоретической кривой плотности распределения. Степень рассогласования можно оценить по среднеквадратичному отклонению графиков (СКО).

Тестирование по критериям согласия

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

В таблице 2 приведены данные тестирования независимых случайных величин с нормальным законом распределения.

Таблица 2 Результаты тестирования независимых случайных величин

m

σ

число точек дискретизации

xmin

xmax

Критерий Колмогорова

Критерий Пирсона






P

P

Метод серединных квадратов

10

2

7

8,48

8,3

0,00

Метод иррационально числа

10

2

7

8,55

7,78

1

0,6

Конгруэнтный метод

10

2

7

8,16

10,23

1

0,7


На Основании данных таблицы можно судить, что наиболее лучшим является генератор на основе конгруэнтного метода.

Тестирование по корреляционному моменту

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

В результате тестирования по корреляционному моменту было замечено, что pxy=0 во всех трех методат. Отсюда следует что генерируемые случайные величины независимы с вероятностью не менее чем 1.

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

2.4 Протокол моделирования СМО в условиях случайных изменений параметров



Рис. 2.7 Протокол моделирования в условиях случайных изменений параметров

3. Моделирование случайных процессов


Цель работы по разделу: Уточнение имитационной модели СМО посредством моделирования возмущающих воздействий, действующих на реальную сложную систему.

 

.1 Корреляционная функция стационарного случайного процесса


Для моделирования случайного стационарного процесса надо, прежде всего, задать корреляционную функцию процесса, которая отражает степень статистической зависимости между сечениями стационарного случайного процесса, отстоящими друг от друга во времени на величину τ. Пусть корреляционная функция имеет вид , где a, b - параметры, которые определяются исходя из условия задания:


Выбираем параметры из постановки задачи Ymax=400 и Ymin=200. Δt примем равным приращению модельного времени - 5 сек. Исходя из этого получим что a= 1111,11; b= 0,299573.

Корреляционная функция для таких параметров имеет вид, приведенный на рис.3.1.

Рис.3.1 Корреляционная функция стационарного случайного процесса

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

3.2 Решение системы уравнений


Для вычисления значения возмущения на очередном шаге моделирования необходимо найти константы C0, C1, C2,… Cm, которые определяются из системы уравнений (m+1) - го порядка:


Для упрощения примем, что сечения случайного процесса, отстоящие друг от друга во времени более, чем на три шага моделирования, считаются некоррелированными, т.е. m=3. Тогда:

Далее, согласно методу скользящего суммирования, значения стационарного случайного процесса Y (t) с заданной корреляционной функцией KY (τ) находятся по формулам:


где y (iΔt) - значения значение возмущения на очередном i-ом шаге моделирования, qi - случайные нормально распределенные величины с нулевым математическим ожиданием и единичной дисперсией,  - математическое ожидание стационарного случайного процесса, C0, C1, C2,… Cm - константы, найденные выше.

В рассматриваемой задачи имеется возмущение является отказом ЭВМ1 с интервалом разброса [200.400]. В результате вычисления коэффициентов С необходимых для вычисления случайных величин по методу скользящего суммирования были получены следующие результаты.

Отказ ЭВМ 1 с интервалом разброса [200.400]: ,


3.3 Блок-схема реализуюшая метод скользящего суммирования и текст процедур

_process (q,C: Tmas; varx,y: Tmas);i: integer;: Integer;: real;: = (Ymax - Ymin) / 2;(x,N div 2);(y,N div 2);: = 0 to N-1 do(i mod 2) =0 then[i]: = C [0] *q [i] +C [1] *q [i+1] +C [2] *q [i+2] +C [3] *q [i+3] +My[i]: = C [0] *q [i] +C [1] *q [i+1] +C [2] *q [i+2] +C [3] *q [i+3] +My;;;

Рис.3.2 Блок-схема метода скользящего суммирования

3.4 Тестирование генератора стационарного случайного процесса


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

Как видно из рисунка, результаты теста приемлемы. По критерию Стьюдента статистическая гипотеза верна с вероятностью не менее 0,7. Поэтому добавим генератор стационарного случайного процесса к существующей уже модели, тем самым сделав время отказа ЭВМ1 случайным стационарным процессом.

Рис.3.3 Результаты генерирования случайного стационарного процесса

3.5 Протокол моделирования в условиях воздействия возмущающих случайных процессов




4. Оптимизация системы массового обслуживания

 

Цель работы по разделу: пользуясь разработанной имитационной моделью, произвести оптимизацию системы массового обслуживания.

4.1 Постановочная часть задачи


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

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

Для решения задачи рассматривается критерием оптимальности

,

где - частный критерий оптимальности.

По заданию, варьируемым параметрам являются m1 и m3 - математическое ожидание времени передачи данных и период отправки резервного сигнала от ЭВМ1 к ЭВМ2. Таким образом, нельзя представить критерии оптимальности в виде обобщенного показателя, несмотря на то что они не являются противоречивыми, но, тем не менее, они имеют различную "природу". Для решения оптимизационной задачи воспользуемся методом Парето-оптимизации.

При расчете будем изменять m1, m3 в диапазоне [0.100].

4.2 Блок-схема и текст процедуры реализующая Парето-оптимизацию


procedureTfm_Main. sbOptimClick (Sender: TObject);: Tmaszap;, i: Integer;,m: Integer;: =read_file_data;: = length (OptimMas) - 1;: =0;j<count do: = 0;k<count do(k<>j) and

(OptimMas [k]. count_fail<OptimMas [j]. count_fail) and

(OptimMas [k]. time_fail<OptimMas [j]. time_fail)m: = k to (count - 1) do[M]: = OptimMas [M+1];(count);(k);(j > k) then(j);;(k);;(j);;(OptimMas, count);;



4.3 Результаты Парето-оптимизации



Заключение


В результате проделанной работы курсовой работы были приобретены как теоретические, так и практические навыки в области построения систем массового обслуживания, генерирования случайных процессов на эту систему и возмущающих воздействий на эту систему. В первой части данной работы была имитирована система с детерминированными процессами, т.е. все данные имеют постоянный характер. Программа позволяет видеть состояние каждой ЭВМ на каждом шаге, а также в конце обработки выводятся показатели качества: время которое система находилась в замедленной работе, а также число утерянных сообщений. Во втором разделе данной работы были разработаны различного вида генераторы, которые в дальнейшем были проанализированы и был выбран лучший из генераторов, который был использован для моделирования теперь уже случайных функций параметров системы массового обслуживания. В третьем разделе был реализован случайный стационарный процесс в виде времени отказа ЭВМ. В 4 разделе была проведена Паррето оптимизация системы, где параметрами изменения были m1, m3. В итоге проделанной работы создана имитационная модель. Полученная модель является абстрактной математической моделью. Моделирование системы осуществлялось в среде разработки приложений Borland Delphi. Результатом является программа в виде exe файла, имитирующая работу вычислительного центра.

Приложение


Программаная реализация

Раздел 1Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, Buttons, ActnMan, ActnColorMaps, XPMan,mmsystem, StdCtrls,;_Main = class (TForm)_PC1: TImage;_PC2: TImage;_Run: TSpeedButton;_t1: TEdit;_t2: TEdit;_t3: TEdit;_t4: TEdit;_t5: TEdit;_T: TEdit;_t1: TLabel;_t2: TLabel;_t3: TLabel;_t4: TLabel;_t5: TLabel;_T: TLabel;_h: TEdit;_h: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;_Info: TStringGrid;_Protocol: TLabel;_Stop: TSpeedButton;_Continue: TSpeedButton;: TLabel;_scale: TEdit;_fail_time: TLabel;_fail_data: TLabel;(Sender: TObject);_RunClick (Sender: TObject);(Sender: TObject);ed_t1KeyPress (Sender: TObject; var Key: Char);ed_t2KeyPress (Sender: TObject; var Key: Char);ed_t3KeyPress (Sender: TObject; var Key: Char);ed_t4KeyPress (Sender: TObject; var Key: Char);ed_t5KeyPress (Sender: TObject; var Key: Char);_TKeyPress (Sender: TObject; var Key: Char);_StopClick (Sender: TObject);_ContinueClick (Sender: TObject);

{ Private declarations }: integer;

{$R *. dfm}(varkey: char);not (key in ['0'. '9',#8]) then key: =#0;;(t1,t2,t3,t4,t5,T: real): real;Low =1; High =6;= Low. High;= array [CountParam] of real;: Tmas;: CountParam;: real;[1]: = t1;[2]: = t2;[3]: = t3;[4]: = t4;[5]: = t5;[6]: = T;: = mas [Low];: = Low+1 to High domas [i] <min then: = mas [i];;: = min;;GO_PC (num: integer);= 1 then_PC1: = true; // данныепоступиливЭВМ2_PC1: = 2;if num = 2 then_PC2: = true; // данные поступили в ЭВМ2_PC2: = 2;;_t2: =true;_time_t2: = time; // для этого запоминаем текущее время_DATA: = 2;;_Received ();_time_t1: = time;(ON_PC2) andnot (ON_PC1) then // Если данные пришли на ЭВМ2 и ЭВМ1 еще не восстановилосьnot (process_PC2) then // еслиЭВМ2 незанята_PC (2);not (control_signal)not (status_DATA=2) then // Еслинетуправляющегосигнала_fail_time: =time;: = 2*t1; // но нет управляющего сигнала, то уменьшаем интенсивность процесса;(ON_PC1 and not (process_PC1)) then // ЕслиЭВМ 1 невотказе_PC (1) // и не в процессе обработкиif (not (status_DATA=2)) then // походуданныепотеряны.._DATA: = 4;(fail_DATA);_t2: = false;;;Change_PC;_PC2: = 0;_PC2: = false; // выключимЭВМ2_PC1: = 1;_PC1: = true; // включимЭВМ1_t1: = true; // запускаем передачу данных в ЭВМ1_time_t1: = time; // запоминаем текущее времяnot (start_fail_time=0) then_time: = fail_time + time - start_fail_time;_fail_time: = 0;_signal: =true;;_Process ();process_PC1 then // еслибылиданныенаобработкеЭВМ1_DATA: =3;_PC1: = 3;_PC1: = false; // останавливаемобработку_signal: = true; // запускаемуправляющийсигнал_t2: = false; // останавливаем отсчет обработки данных_time_t2: = 0; // обнуляемвремяif process_PC2 then_DATA: =3;_PC2: = 3;_PC2: = false;_t2: = false;_time_t2: = 0;(recovery) then // если мы обработали данные, но ЭВМ1 уже готова// кработе: =false;_PC;;;;_Signal ();(count_t3);not (ON_PC1) and not (ON_PC2) then // ЕслиЭВМ1 вотказенеобходимоподключатьЭВМ2_t4: = true; // запускаем отсчет включения ЭВМ2_time_t4: = time; // и запоминаем текущее время;;inclusion_PC2 ();_t4: = false; // выключаем отсчет включения ЭВМ2_time_t4: = 0; // обнуляем время: = t1/2; // возвращаем интенсивность процесса_t1: = true; // запускаем передачу данных в ЭВМ2_time_t1: = time; // запоминаем текущее время_PC2: =true;;Recovery_PC1 ();_t5: = false;(on_PC2) and (process_PC2) then: =true // завершим передачу если ЭВМ2 была в работе_PC;;failure_PC1 ();(count_T);_PC1: = false; // отказЭВМ_PC1: = false;_PC1: = 4;process_PC1 then // если ЭВМ1 был в обработке_DATA: =4;_t5: = true; // запускам восстановление ЭВМ1_time_t5: = time; // запоминаем время отказа ЭВМ1_signal: = false; // сигнала с ЭВМ1 от работе нет;_Info ();s1,s2,s3: string;_Main. sg_Info. RowCount: = count+1;_Main. sg_Info. Cells [0,count]: = FloatToStr (time);status_PC1 of

: s1: = 'ЭВМ1 выключена';

: s1: = 'ЭВМ1 включена';

: s1: = 'ЭВМ1 приняла данные';

: s1: = 'ЭВМ1 закончила обработку';

: s1: = 'ЭВМ1 в отказе';;status_PC2 of

: s2: = 'ЭВМ2 выключена';

: s2: = 'ЭВМ2 включена';

: s2: = 'ЭВМ2 приняла данные';

: s2: = 'ЭВМ2 закончила обработку';;_DATA of

: s3: = 'Данныепередаются';

: s3: = 'Данные закончили передачу';

: s3: = 'Данные в обработке';

: s3: = 'Данные обработаны';

: s3: = 'Данные утеряны';;_Main. sg_Info. Cells [1,count]: = s1;_Main. sg_Info. Cells [2,count]: = s2;_Main. sg_Info. Cells [3,count]: = s3;_Main. lb_fail_time. Caption: ='Время нахождения процесса в замедленном состоянии = '+(fail_time);_Main. lb_fail_data. Caption: ='Числоутерянныхданных = '+ IntToStr (fail_DATA);;(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;time_t1,time_t2,time_t3,time_t4,time_t5,time_T: real;(count); // Счетчик срабатывания мультимедиа таймера: = (h*count);_T: = (T*count_T);_t3: = (t3*count_t3);start_t1 then // Если начался отсчет передачи данных в ЭВМ1_DATA: =0; // данныепередаются_t1: =time - now_time_t1;;ON_PC1 then_PC1: = 1;ON_PC2 then_PC2: = 1;start_t2 then // если запущен отсчет обработки данных в ЭВМ1_DATA: = 3;_t2: = time - now_time_t2;;start_t2 and process_PC1 then_fail_time: = time;_signal: =false;;_t4 then // ЕслиначалсяотсчетвключенияЭВМ2_t4: = time - now_time_t4;start_t5 then // если начался отсчет восставноления ЭВМ1_t5: = time - now_time_t5;

// ИмитируемвключениеЭВМ2(time_t4>t4) and (start_t4) then_PC2 ();

// имитируемобработкуданных( (time_t2) >=t2) and (start_t2) then // прошлаобработкаданных_Process ();

// имитируем поступление данных( (time_t1) >=t1) and (start_t1) then // Если данные закончили свое поступление_Received ();

// имитируем посылку резервного сигнала от ЭВМ1 к ЭВМ2( (time-time_t3) >=t3) then // проверяем в работе ли у нас ЭВМ1_signal ();

// Имитируем восстановление ЭВМ1(time_t5>t5) and (start_t5) then // Если прошло время восставноления ЭВМ1_PC1 ();

// имитируемотказЭВМ1( (time-time_T) >=T) then_PC1 ();

// имиитируем конец работы АСУ ТПtime=3600 then(fm_Main. MMtimer); // Разрушаемтаймерпризакрытии_Info ();;Tfm_Main. ed_t1KeyPress (Sender: TObject; var Key: Char);(key);;Tfm_Main. ed_t2KeyPress (Sender: TObject; var Key: Char);(key);;Tfm_Main. ed_t3KeyPress (Sender: TObject; var Key: Char);(key);;Tfm_Main. ed_t4KeyPress (Sender: TObject; var Key: Char);(key);;Tfm_Main. ed_t5KeyPress (Sender: TObject; var Key: Char);(key);;_Main. ed_TKeyPress (Sender: TObject; var Key: Char);(key);;;(fm_Main. MMTimer); // Разрушаемтаймерпризакрытии_DATA: = 0;_time: = 0;_PC1: = 0;_PC2: = 0;_DATA: = 0;: = 10; // Исходные параметры системы: = 8;: = 80;: = 5;: = 100;: = 300;: = 0;_T: = 0;_t3: = 0;_PC1: = false;_PC2: = false;_signal: = false;_t1: = false;_t2: = false;_t4: = false;_t5: = false;_PC1: = false;_PC2: = false;_time_t1: =0;_time_t2: =0;_time_t4: =0;_time_t5: =0;: =false;;_Main. FormCreate (Sender: TObject);();_Main. ed_t1. Text: = FloatToStr (t1);_Main. ed_t2. Text: = FloatToStr (t2);_Main. ed_t3. Text: = FloatToStr (t3);_Main. ed_t4. Text: = FloatToStr (t4);_Main. ed_t5. Text: = FloatToStr (t5);_Main. ed_T. Text: = FloatToStr (T);_Main. ed_scale. Text: = '1000';_Main. sg_Info. Cells [0,0]: = 'Модельноевремя';_Main. sg_Info. Cells [1,0]: = 'ЭВМ1';_Main. sg_Info. Cells [2,0]: = 'ЭВМ2';_Main. sg_Info. Cells [3,0]: = 'Данные';;_Main. FormDestroy (Sender: TObject);(MMTimer); // Разрушаемтаймерпризакрытии;_Main. sb_ContinueClick (Sender: TObject);: =timeSetEvent (h,1,@MyTimerCallBackProg,100,TIME_PERIODIC);;_Main. sb_RunClick (Sender: TObject);: integer;_h: real;();: = StrToInt (ed_t1. Text); // Исходныепараметрысистемы: = StrToInt (ed_t2. Text);: = StrToInt (ed_t3. Text);: = StrToInt (ed_t4. Text);: = StrToInt (ed_t5. Text);: =StrToInt (ed_T. Text);_h: = CalH (t1,t2,t3,t4,t5,T);: = StrToInt (ed_scale. Text);: = t1/scale *1000;: = t2/scale *1000;: = t3/scale *1000;: = t4/scale *1000;: = t5/scale *1000;: = T / scale *1000;_h: = buf_h / scale;: =round (buf_h*1000);_h. Text: = FloatToStr (buf_h/1000);_t1: = true;_time_t1: = 0;_PC1: = true;_signal: = true;_PC1: = 1;: =timeSetEvent (h,1,@MyTimerCallBackProg,100,TIME_PERIODIC);;_Main. sb_StopClick (Sender: TObject);(MMTimer); // Разрушаемтаймерпризакрытии;.

Раздел2Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, TeEngine, ExtCtrls, TeeProcs, Chart, Series;= 10; sigma1 = 2;= 8; sigma2 = 2;= 30; sigma3 = 10;= 5; sigma4 = 1;= 100; sigma5 = 5;= array of Extended;_Main = class (TForm)_method: TComboBox;_Generate: TSpeedButton;_Output: TMemo;_data: TComboBox;: TChart;: TLineSeries;: TBarSeries;: TChart;: TLineSeries;: TBarSeries;: TChart;: TLineSeries;FormCreate (Sender: TObject);sb_GenerateClick (Sender: TObject);

{ Private declarations }

{ Public declarations };_Main: Tfm_Main;,N: integer;: integer;: integer;: array [0.400] of real;

{$R *. dfm}next_median_of_squares (x: extended): extended;r=12;s,new_s: string;: integer;: byte;: = sqr (x);(length (s) - 2) <r do: = s + IntToStr (random (9));: = length (s) - 2;: = k div 2;_s: = '0,'+copy (s,3+k div 2,k);: = StrToFloat (new_s);: = x;;median_of_squares_method (init: extended): Tmas;: integer;(result,0);: = nil;(result,1);[0]: = init;i: = 1 to N-1 do(result, i + 1);[i]: = next_median_of_squares (result [i-1]);;;irrational_number_method (init: extended): Tmas;i: integer; s: string;(result,0);: = nil;i: = 1 to N do(result, i);[i - 1]: = Frac (i * init);;;congruential_method (init: integer): Tmas;i: integer;(result, 0);: = nil;: = init;i: = 0 to N - 1 do(result, i + 1);[i]: = random;;;Tfm_Main. FormCreate (Sender: TObject);;: = 40000;: = 40;;normal_distribution (x,x1: Tmas): Tmas;i: integer;(result,0);: = nil;i: = 0 to N - 1 do(Result, i + 1);[i]: = sigma * cos (2 * pi * x [i]) * sqrt (-2 * ln (x1 [i])) + mat;;;base_sequence (type_method: byte; seq: byte): TMas;_val: extended;_val_k: integer;_val: = 0;_val_k: = 0;(Result, 0);: = nil;type_method of

:seq of

:_val: = 0.219616161809;

:_val: = 0.991876981515;;: = median_of_squares_method (init_val);;

:seq of

:_val: = exp (1);

:_val: = pi;;: = irrational_number_method (init_val);;

:seq of

:_val_k: = 5091809506;

:_val_k: = 7109878198;;: = congruential_method (init_val_k);;;;Gistrogramma (y: TMas; var Pmas, Fmas, interval_mas: TMas);, Xmin, delta: Extended;, j: integer;: array of int64;(Pmas, 0);: = nil;(interval_mas, 0);_mas: = nil;(count, 0);: = nil;: = y [0];: = y [0];i: = 0 to N - 1 doY [i] <= Xmin then: = Y [i];Y [i] >= Xmax then: = Y [i];;;: = (Xmax - Xmin) / m;(interval_mas, 1);_mas [0]: = Xmin;i: = 1 to m do(interval_mas, i + 1);_mas [i]: = interval_mas [i - 1] + delta;;i: = 0 to m - 1 do(count, i + 1);j: = 0 to N - 1 do( (Y [j] >= interval_mas [i]) and (Y [j] <= interval_mas [i + 1])) then(count [i]);;;i: = 0 to m - 1 do(Pmas, i + 1);[i]: = count [i] / N;;i: = 0 to m - 1 do(Fmas, i + 1);j: = 0 to i do[i]: = Fmas [i] + Pmas [j];;;;correlation_coefficient (y: Tmas): Tmas;, tau: integer;, b: real;, s2, s3, s4, s5, s6, s7: Extended;, Dx, Dy: TMas;(Result, 0);: = nil;(Kxy, 0);: = nil;(Dx, 0);: = nil;(Dy, 0);: = nil;tau: = 0 to N - 2 do: = 0;: = 0;: = 0;: = 0;: = 0;j: = 0 to N - tau - 1 do: = s1 + y [j] * y [j + tau];: = s2 + y [j];: = s3 + y [j + tau];: = s4 + sqr (y [j]);: = s6 + sqr (y [j + tau]);;: = sqr (s2);: = sqr (s3);: = 1/ (N - tau);: = 1/ (sqr (N - tau));

// Kxy(Kxy, tau + 1);[tau]: = (a) * s1 - (b) * s2 * s3;

// Dx(Dx, tau + 1);[tau]: = (a) * s4 + (b) * s5;

// Dy(Dy, tau + 1);[tau]: = (a) * s6 + (b) * s7;(Result, tau + 1);[tau]: = Kxy [tau] / (sqrt (Dx [tau] * Dy [tau]));;;paint_theory_probability_density;: integer;_Main. Chart1. Series [0]. Clear;i: = round (mat - 3 * sigma) * 100 to round (mat + 3 * sigma) * 100 do_Main. Chart1. Series [0]. AddXY (i * 0.01, (1/ (sigma * sqrt (2 * pi))) *( (-1) * ( (sqr (0.01 * i - mat)) / (2 * sqr (sigma)))), '', 0);;;paint_stat_probability_density (Pmas, interval_mas: TMas);: integer;: TMas;: Extended;(buf, 0);: = nil;_Main. Chart1. Series [1]. Clear;: = interval_mas [1] - interval_mas [0];i: = 0 to m - 1 do(buf, i + 1);[i]: = Pmas [i] / delta;;i: = 0 to m do_Main. Chart1. Series [1]. AddXY (interval_mas [i], buf [i], '', clgreen);;FuncNormRaspred (x, m, sigma: real): Extended;: = (X - m) / sigma;X >= 0 thenX >= 4 then: = 1: = laplas [round (x * 100)] + 0.5;X <= - 4 then: = 0: = - laplas [abs (round (x * 100))] + 0.5;;;paint_theory_distribution_function;: integer;_Main. Chart2. Series [0]. Clear;i: = round (mat - 3 * sigma) * 100 to round (mat + 3 * sigma) * 100 do_Main. Chart2. Series [0]. AddXY (i * 0.01, FuncNormRaspred (i * 0.01, mat, sigma),'', clred);;paint_stat_distribution_function (Fmas, interval_mas: Tmas);, c: integer;: = 1;i: = 0 to m - c do_Main. Chart2. Series [1]. AddXY (interval_mas [i], Fmas [i], '', clTeal);;paint_coeff_corr (coeff_corr_mas: Tmas);i: integer;_Main. Chart3. Series [0]. Clear;i: = 0 to N - 2 do_Main. Chart3. Series [0]. AddXY (i, coeff_corr_mas [i], '', 0);;;correlation_time (coeff_corr_mas: Tmas): extended;: integer;: real;: boolean;: = true;: = 0;: = p + 0.01;tau: = 0 to N - 2 doabs (coeff_corr_mas [tau]) > (1 - p) * sqrt (1/N) then: = false;;;;not (flag) then: = (p - 0.01) * 100;;;p > 1;flag then: = (p - 0.01) * 100;: = p;;TestPirson (Pmas, interval_mas: TMas): extended;: integer;: Extended;: Tmas;: = 0;(mas, 0);: = nil;i: = 0 to m - 1 do(mas, i + 1);[i]: = FuncNormRaspred (interval_mas [i + 1], mat, sigma) - (interval_mas [i], mat, sigma);mas [i] <> 0 then: = h + sqr (Pmas [i] - mas [i]) / mas [i];;: = h * N;;TestKolmogorov (Fmas, interval_mas: Tmas): extended;: integer; x: real;, buf,lamda: Extended;: Tmas; k: longint;: = 0;(mas, 0);: = nil;i: = 0 to m - 1 do(mas, i + 1);[i]: = FuncNormRaspred (interval_mas [i], mat, sigma);: = Fmas [i] - mas [i];buf > D then: = buf;;: =N;: = D * sqrt (x);: = lamda;;Tfm_Main. sb_GenerateClick (Sender: TObject);x,x1,y,Pmas,Fmas, interval_mas,coeff_corr_mas: Tmas;: Tmas;cb_data. ItemIndex of

: begin: = m1;: = sigma1;;

: begin: = m2;: = sigma2;;

: begin: = m3;: = sigma3;;

: begin: = m4;: = sigma4;;

: begin: = m5;: = sigma5;;;: = base_sequence (cb_method. ItemIndex,0);: = base_sequence (cb_method. ItemIndex,1);: = normal_distribution (x,x1);(y,Pmas,Fmas, interval_mas);_corr_mas: = correlation_coefficient (y);_theory_probability_density; // плотность вероятности теоретическая_stat_probability_density (Pmas, interval_mas); // плотность вероятности статическая_theory_distribution_function; // теоретическая функция распределения_stat_distribution_function (Fmas, interval_mas); // статическая функция распределения_coeff_corr (coeff_corr_mas); // рисуем график коэффициента корреляции_Output. Lines. Add (#13);_Output. Lines. Add (cb_data. Text+' '+cb_method. Text+#13);_Output. Lines. Add ('Тестирование по Корреляционному Моменту: ' +(correlation_time (coeff_corr_mas),ffFixed, 8,2));_Output. Lines. Add ('Тестирование по Пирсону: ' + 'xi^2=' + FloatToStrF (TestPirson (Pmas,_mas),ffFixed, 8,2));_Output. Lines. Add ('Тестирование по Колмогорову: lamda=' +(TestKolmogorov (Fmas, interval_mas),ffFixed, 8,2));;.

Похожие работы на - Имитационная система с детерминированными процессами

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!