Имитационное моделирование систем массового обслуживания
Имитационное моделирование как один из наиболее широко используемых методов при решении задач анализа и синтеза сложных систем. Особенности имитационного моделирования систем массового обслуживания. Анализ структурной схемы системы передачи пакетов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.05.2013 |
Размер файла | 1,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
имитационный моделирование массовый обслуживание
Реальные сложные системы, к числу которых относятся и современные АСУ, можно исследовать с помощью двух типов моделей: аналитических и имитационных. В аналитических моделях поведение сложных систем записывается в виде некоторых функциональных отношений или логических условий. Для построения аналитических моделей имеется мощный математический аппарат (алгебра, функциональный анализ, теория автоматического управления и т.д.), наличие которого значительно облегчает построение моделей такого рода. Однако, при аналитическом описании сложных систем зачастую приходится идти на упрощения представления реальных явлений, что несколько снижает точность аналитических моделей.
Когда явления в сложных системах настолько сложны и многообразны, что аналитическая модель становится слишком грубым приближением к действительности, то исследователь должен использовать имитационное моделирование.
В имитационной модели поведение компонент сложной системы описывается набором алгоритмов, которые затем реализуют ситуации, возникающие в реальной системе. Моделирующие алгоритмы позволяют по исходным данным, содержащим сведения о начальном состоянии системы и практическом значении ее параметров отобразить реальные явления в системе и получить сведения о ее возможном поведении.
Хотя разработка хорошей имитационной модели часто обходится дороже создания аналитической модели и требует больше временных затрат, ее построение как правило себя оправдывает, поскольку такая модель позволяет:
- гораздо точнее отразить протекание процессов в реальной сложной системе и описать поведения компонент сложной системы на высоком уровне детализации;
- исследовать динамику взаимодействия компонент во времени и пространстве параметров системы;
- изучить новые явления в системе, поведение которой имитируется.
Таким образом, имитационное моделирование является одним из наиболее широко используемых методов при решении задач анализа и синтеза сложных систем.
Постановка задачи
N - канальная система передачи данных осуществляет связь между пунктами А и В. Пакеты поступают в пункт А с интервалом t1 (мсек.). Передача пакета занимает t2 (мсек.). В пункте А имеется буферный регистр, который может хранить E пакетов. Если пакет пришел, когда все каналы заняты, сообщение передается по спутниковому каналу за время t3 (мсек.). Смоделировать обмен информацией за 1 мин.
Данные для детерминированной модели СМО:
N=4, t1=t2=t3=10, E=3.
Данные для имитационной модели СМО: интервалы времени t1, t2 распределены нормально с параметрами: m1=m2=10, , возмущение t3 является стационарным случайным процессом с нормальным законом распределения и интервалом разброса [12...8].
Варьируемые параметры: N , E .
Показатели работы: производительность системы, стоимость передачи информации, загруженность спутниковой линии.
Построение имитационной модели системы массового обслуживания
Для построения имитационной модели, определим состав обслуживающих устройств и выясним, что является заявками. Обслуживающими устройствами в модели системы передачи пакетов будут: проводная линия передачи пакетов, буфер пункта А и спутник. Заявками в данном случае являются пакеты, приходящие в пункт А. Дисциплиной обслуживания является живая очередь (FIFO), т. е. первыми обрабатываются пакеты, которые первыми пришли в п.А. Структурная схема модели системы передачи пакетов представлена на рис. 1.
Рис. 1. Структурная схема системы передачи пакетов
Поясним принцип работы такой системы. Когда приходит пакет в п.А, он пытается «пройти» во проводному каналу; если все линии данного канала заняты, то данный пакет перенаправляется на спутник; если же и спутник занят (передает в данный момент какой-либо другой пакет), то пакет, в случае свободного буфера отправляется в него; и если же и он несвободен, то пакет считается потерянным.
Также выберем пошаговое моделирование как метод изменения модельного времени. Так как шаг рекомендуется выбирать на порядок меньше самого малого временного интервала в условии задачи, то, принимая во внимания данные для детерминированной модели, приведенные в постановке задачи, зададимся шагом равным 0,1мс (взято с запасом в 10 раз, т.к. минимальное значение по условию - 10мс).
Блок-схема данной системы приведена на рис. 2.
Моделирование случайных независимых величин
Основой моделирования любых случайных величин является реализация генератора равномерно распределенных случайных чисел. Функция плотности распределения случайной величины, подчиняющейся равномерному закону:
Программная генерация случайной величины с равномерным законом распределения на интервале [0..1] основывается на рекуррентном соотношении:
,
где x0,x1,..xn, - получаемая последовательность случайных чисел, равномерно распределенных на интервале [0..1], F( ) - функция обработки предыдущего члена последовательности для получения последующего члена. В зависимости от вида F( ) существуют разные методы генерации, но наиболее часто используются следующие методы:
1) Метод серединных квадратов. Если , то
Например:
и т.д.
Рис. 3. Блок-схема метода серединных квадратов
2) Метод иррационального числа. , где - иррациональное число, { } - оператор вычисления дробной части числа.
Например:
и т.д. Во всех вышеперечисленных методах число значащих десятичных разрядов не должно быть меньше десяти.
Рис. 4. Блок-схема метода иррационального числа
3) В языке Borland Pascal для генерации случайной величины с равномерным законом распределения на интервале [0..1] (оператор random) используется конгруэнтный метод, который также применяется в большинстве других языков программирования (Basic, С, C++ и т.д.).
В нашем конкретном случае для метода серединных квадратов начальное число было взятым - 0.7239184425, для метода иррационального числа - число ПИ. Программная генерация случайной величины с плотностью распределения f(y), отличным от равномерного, производится методом обратной функции. Если xi - это последовательность, равномерно распределенная на интервале [0..1], а yi - это последовательность, имеющая плотность распределения вероятности f(y), то
.
Для показательного распределения с плотностью распределения
:.
Для нормального распределения с плотностью распределения
:,
где и - это две независимые последовательности, равномерно распределенные на интервале [0..1]. В нашем конкретном случае - равномерное распределение в интервале [0..1], а нормальное: мат.ожидание=10, а СКО1=3, СКО2=5. Все полученные значения можно увидеть в программе, в которой они отображаются в виде значений и выводятся на график.
Рис. 5. Блок-схема метода генерации чисел для нормального закона распределения
Тестирование функций моделирования случайных величин
Любой программный генератор выдает последовательность не случайных, а псевдослучайных чисел, поэтому для достоверности получаемых при моделировании результатов необходимо: во-первых, использовать в генераторах разных случайных величин независимые базовые генераторы, во-вторых, все генераторы случайных чисел должны пройти предварительное тестирование, которое заключается в следующем.
Тестирование по гистограмме
Гистограмма - это кусочно-непрерывная функция плотности распределения статистического ряда. Гистограмма плотности распределения статистического ряда должна максимально приближаться к теоретической кривой плотности распределения. Степень рассогласования можно оценить по среднеквадратичному отклонению графиков (СКО). Параметры тестирования - m=20, а n=20000.
Рис. 6. Тестирование значений по гистограмме
Тестирование по критериям согласия
Оценим степень соответствия гистограммы и теоретической плотности распределения с точки зрения проверки статистической гипотезы об их идентичности. На рисунках 7 и 8 приведены вероятности P истинности гипотезы о соответствии статистического ряда, полученного с помощью генератора, требуемому закону распределения.
Рис. 7. Тестирование значений по критерию согласия Колмогорова
Рис. 8. Тестирование значений по критерию согласия Пирсона
Тестирование по корреляционному моменту
Позволяет проверить независимость элементов случайной последовательности. Это необходимо, поскольку программный генератор случайных чисел может «зацикливаться» с некоторым интервалом апериодичности. В таблицах 6 и 7 приведены вероятности независимости последовательности элементов при различных методах генерирования случайной величины для разных математических ожиданий и дисперсий.
Рис. 9. Тестирование значений по корреляционному моменту
Аналогичное тестирование проведено и для нормального распределения, его так же можно увидеть в программе.
Моделирование стационарного случайного процесса (ССП)
Зададимся корреляционной функцией процесса, которая отражает степень статистической зависимости между сечениями стационарного случайного процесса, отстоящими друг от друга во времени на величину ф. Пусть корреляционная функция имеет вид , где a, b - параметры, которые определяются исходя из условия задания:
Выбирая параметры из постановки задачи ymin=8, ymax=12, а также задаваясь шагом Дt равным 0,1мс, получаем: a=; b1= 9,986.
Корреляционная функции для таких параметров имеет вид, приведенный на рис.10.
Рис. 10. Корреляционная функция
Согласно методу скользящего суммирования, значения стационарного случайного процесса Y(t) с заданной корреляционной функцией KY(ф) находятся по формулам:
где y(iДt) - значения возмущения на очередном i-ом шаге моделирования, qi - случайные нормально распределенные величины с нулевым математическим ожиданием и единичной дисперсией, - математическое ожидание стационарного случайного процесса, C0, C1, C2, … Cm - константы, которые определяются из системы уравнений:
Для упрощения примем, что сечения случайного процесса, отстоящие друг от друга во времени более, чем на три шага моделирования, считаются некоррелированными, т.е. m=3. Тогда:
Решив численно эту систему с помощью MathCAD, получим, следующие значения:
Блок-схема данного алгоритма представлена на рисунке:
Рис. 11. Блок-схема метода генерации ССП
Тестирование качества смоделированного ССП
Сгенерируем совокупность значений стационарного случайного процесса: y(0), y(Дt), y(2Дt), …, y(iДt), …, y(NДt), которую разобьем на две совокупности: {x1 , x2 … xN/2} и {y1 , y2 … yN/2}, где xi = y(2iДt), yi = y((2i-1)Дt) при i = 0,1, … N/2 (N - число испытаний, в данном примере равное 20000). Размеры каждой из выборок: NX = N/2, NY = N/2. Далее эти две выборки анализируются при помощи следующих критериев согласия.
1. Критерий согласия Смирнова.
Проверяется статистическая гипотеза о том, что выборки xi и yi принадлежат одной и той же генеральной совокупности. По гистограммам для каждой из выборок строится кусочно-непрерывная статистическая функция распределения и , где k - номер интервала гистограммы.
Вычисляем . Сравнивается это значение корнем - . Если вычисленное значение меньше этого корня, то гипотеза верна, с вероятностью Р.
2. Критерий согласия Стьюдента.
Проверяется статистическая гипотеза о том, что математические ожидания двух выборок X и Y равны. Сначала находятся математические ожидания и дисперсии двух выборок. Затем вычисляется необходимые значения и сравниваются с табличным -
Критерий согласия Фишера
Проверяется статистическая гипотеза о том, что дисперсии двух выборок X и Y равны. По вычисленным дисперсиям выборок находим:
,
Рассчитанные значение, приведенных выше критериев, приведены на рис. 12.
Рис. 12. Графическая схема системы передачи пакетов
Оптимизация поставленной задачи
Процессы в сложных системах можно достаточно полно оценить только совокупностью различных показателей качества, поэтому для их оптимизации необходимо выбирать несколько частных критериев качества функционирования системы R1, R2...Rs. В этом случае говорят, что систему надо оптимизировать по векторному критерию оптимальности ?
Как правило, частные критерии оказываются противоречивыми. Например, желательно иметь максимально надежную (частный критерий R1), простую по конструкции (частный критерий R2), дешевую по стоимости (частный критерий R3) систему. Все эти критерии будут противоречивыми. Поскольку критерии функционирования системы противоречивы, скорее всего не найдется такого набора параметров, который оптимизировал бы все показатели работы системы одновременно. Однако, следуя принципу В.Парето, можно решить такую задачу многокритериальной (векторной) оптимизации и найти ряд компромиссных вариантов функционирования системы. Для этого параметры сложной системы варьируются произвольно в обе стороны от начальных значений с учетом ограничений исходя из их физического смысла.
Проведя вариацию параметров системы, мы получили практические значения работы системы, представленные на рисунках 13-15.
Рис. 13. Практические значения, полученные при моделировании СМО
Рис. 14. Практические значения, полученные при моделировании СМО
Рис. 15. Практические значения, полученные при моделировании СМО
Выбираем первый вариант - пришло: 5971 пакет, пройдено по каналам: 5971 пакет, потерянных пакетов не было, а также спутник и буфер не использовались. Проведя аналогичные действия с 2 и 3-м практическими значениями, можно сделать вывод:
o самым плохим оказался последний вариант, т.к. были потеряны пакеты данных;
o первый вариант, на первый взгляд, оказывается лучшим, т.к. не задействован спутник и буфер, все пакеты были переданы, однако по условию задачи - спутниковый канал у нас есть (его варьировать нельзя - ни уменьшать, ни увеличивать), поэтому его простой - не самое лучшее решение;
в итоге второй вариант оказывается оптимальным, при соблюдении того, что передача информации ведется на очень большое расстояние и стоимость прокладки еще одной линии связи многократно возрастает, по сравнению с подключением всего лишь одного буфера и имеющегося в наличии спутника.
Заключение
В результате выполнения данного курсового проекта, была написана программа в среде программирования - Delphi. При её написании использовались знания о СМО и о моделировании случайных величин, полученные непосредственно в процессе выполнения данной работы (из методических указаний), а так же из курса лекций по дисциплине - «Моделирование систем управления»
Выполнена как общая часть, заключающаяся в моделировании случайных независимых величин (равномерное, нормальное распределение и стационарный случайный процесс) и их соответствующие критерии согласия (Стьюдента, Фишера, тестирование по гистограмме и т.д.), а так же и специальная часть, соответствующая полученному варианту задания. В ней была реализована система массового обслуживания, в данном случае, система передачи пакетов по различным каналам связи (проводная линия, спутник), и был выбран оптимальный вариант её решения по Парето-оптимизации.
Приложение
Программаная реализация
Раздел 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, TeEngine, ExtCtrls, TeeProcs, Chart, Series;
const
Ymin = 200;
Ymax = 400;
h = 5;
all_time = 3600;
mat = 0;
sigma = 1;
type
Tmas = array of extended;
Tfm_Main = class(TForm)
mm_X: TMemo;
mm_Y: TMemo;
mm_OutInfo: TMemo;
sb_Generate: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Chart1: TChart;
Series1: TBarSeries;
Chart2: TChart;
Series2: TBarSeries;
procedure FormCreate(Sender: TObject);
procedure sb_GenerateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fm_Main: Tfm_Main;
N,Nx,Ny,m:integer;
laplas: array [0 .. 400] of real;
implementation
{$R *.dfm}
function congruential_method(init:longint):Tmas;
var i:integer;
begin
setlength(result, 0);
result := nil;
randSeed := init;
for i := 0 to N - 1 do
begin
setlength(result, i + 1);
result[i] := random;
end;
end;
procedure stationary_process(q,C:Tmas;var x,y:Tmas);
var i:integer;
j,k,m: Integer;
My:real;
begin
My := (Ymax - Ymin) / 2;
Nx := N div 2;
Ny := N div 2;
setlength(x,Nx);
setlength(y,Ny);
k := 0; m := 0;
for i := 0 to N-1 do
begin
if (i mod 2)=0 then
begin
x[k] := C[0]*q[i]+C[1]*q[i+1]+C[2]*q[i+2]+C[3]*q[i+3]+My;
inc(k);
end
else
begin
y[m] := C[0]*q[i]+C[1]*q[i+1]+C[2]*q[i+2]+C[3]*q[i+3]+My;
inc(m);
end;
end;
end;
function normal_distribution(x,x1:Tmas):Tmas;
var i:integer;
begin
setlength(result,0);
result := nil;
for i := 0 to N - 1 do
begin
Setlength(Result, i + 1);
Result[i] := sigma * cos(2 * pi * x[i]) * sqrt(-2 * ln(x1[i])) + mat;
end;
end;
procedure Tfm_Main.FormCreate(Sender: TObject);
begin
randomize;
N := 4000;
m := 40;
end;
function criterion_for_approval_Smirnov(Fx,Fy:Tmas):Tmas;
var
i: integer;
D, buf,p: Extended;
begin
D := 0;
for i := 0 to m - 1 do
begin
buf := abs(Fx[i] - Fy[i]);
if buf > D then
D := buf;
end;
setlength(result,2);
p := 1 - exp( (2*D*D)/(1/Nx + 1/Ny) );
result[0] := D;
result[1] := p;
end;
function criterion_for_approval_Student(Dx,Dy,mx,my:extended):Tmas;
var D,t:extended;
b:integer;
begin
D := ( (Nx - 1)*Dx + (Ny - 1)*Dy ) / (Nx + Ny -2);
t := sqrt( ( sqr(mx-my)*Nx*Ny ) / ( D* (Nx + Ny) ) );
b := Nx + Ny -2;
setlength(result, 2);
result[0] := t;
result[1] := b;
end;
function mat_expectation(a:Tmas ; na:integer):extended;
var i:integer;
begin
result := 0.0;
for i := 0 to na-1 do
result := result + a[i];
result := result / na;
end;
function variance(a:Tmas; na:integer; m:extended):extended;
var
i: Integer;
begin
result := 0.0;
for i := 0 to na-1 do
result := result + sqr(a[i] - m);
result := result / (na -1);
end;
function criterion_for_approval_Fisher(Dx,Dy:extended):Tmas;
var F,b1,b2:extended;
begin
setlength(result, 3);
if (Dy>=Dx) then
F := Dy / Dx
else
F := Dx / Dy;
b1 := Nx -1 ;
b2 := Ny -1 ;
result[0] := F;
result[1] := b1;
result[2] := b2;
end;
procedure OutputInfo(sX,sY,Student,Fisher,Smirnov:Tmas;mx,my,dx,dy:extended);
var
i: Integer;
begin
fm_Main.mm_X.Lines.Clear;
fm_Main.mm_Y.Lines.Clear;
fm_Main.mm_OutInfo.Lines.Clear;
for i := 0 to Nx-1 do
begin
fm_Main.mm_X.Lines.Add(FloatTostrF(sX[i],ffFixed,5,4)+#13);
fm_Main.mm_Y.Lines.Add(FloatTostrF(sY[i],ffFixed,5,4)+#13);
end;
//fm_Main.mm_OutInfo.Lines.Add('Критерий Смирнова: D = ' +
//FloatToStrF(Smirnov[0],ffFixed,5,4) +#13);
fm_Main.mm_OutInfo.Lines.Add('Критерий Стьюдента: mx = '+
FloatToStrF(mx,ffFixed,5,4) + '; my = ' +
FloatToStrF(my,ffFixed,5,4) + '; dx = ' +
FloatToStrF(dx,ffFixed,5,4) + '; dy = ' +
FloatToStrF(dy,ffFixed,5,4) + ';t = ' +
FloatToStrF(Student[0],ffFixed,5,4) + '; b = ' +
FloatToStrF(Student[1],ffFixed,6,0)+#13);
fm_Main.mm_OutInfo.Lines.Add('Критерий Фишера: F = ' +
FloatToStrF(Fisher[0],ffFixed,5,4) + '; b1 = ' +
FloatToStrF(Fisher[1],ffFixed,6,0) + '; b2 = ' +
FloatToStrF(Fisher[2],ffFixed,6,0) +#13);
end;
function Gistrogramma(y: Tmas; var interval_mas:Tmas;N:integer):Tmas;
var
Pmas,Fmas:Tmas;
Xmax, Xmin, delta: Extended;
i, j: integer;
count: array of int64;
Begin
Setlength(Pmas, 0);
Pmas := nil;
setlength(interval_mas, 0);
interval_mas := nil;
Setlength(count, 0);
count := nil;
Xmax := y[0];
Xmin := y[0];
for i := 0 to N - 1 do
begin
if Y[i] <= Xmin then
Xmin := Y[i];
if Y[i] >= Xmax then
begin
Xmax := Y[i];
end;
end;
delta := (Xmax - Xmin) / m;
Setlength(interval_mas, 1);
interval_mas[0] := Xmin;
for i := 1 to m do
begin
Setlength(interval_mas, i + 1);
interval_mas[i] := interval_mas[i - 1] + delta;
end;
for i := 0 to m - 1 do
begin
Setlength(count, i + 1);
for j := 0 to N - 1 do
if ((Y[j] >= interval_mas[i]) and (Y[j] <= interval_mas[i + 1])) then
begin
inc(count[i]);
end;
end;
for i := 0 to m - 1 do
begin
Setlength(Pmas, i + 1);
Pmas[i] := count[i] / N;
end;
for i := 0 to m - 1 do
begin
Setlength(Fmas, i + 1);
for j := 0 to i do
begin
Fmas[i] := Fmas[i] + Pmas[j];
end;
end;
result := Fmas;
end;
procedure paint_stat_distribution_function(Fx,interval_x,Fy,interval_y:Tmas);
var
i:integer;
begin
for i := 0 to m - 1 do
fm_Main.Chart1.Series[0].AddXY(interval_x[i], Fx[i], '', clTeal);
for i := 0 to m - 1 do
fm_Main.Chart2.Series[0].AddXY(interval_y[i], Fy[i], '', clRed);
end;
procedure Tfm_Main.sb_GenerateClick(Sender: TObject);
var C:Tmas;
x,x1,q,sX,sY,Student,Fisher, Fx,Fy,interval_mas_X,interval_mas_Y: Tmas;
Smirnov:Tmas;
mx,my,Dx,Dy:extended;
begin
setlength(C,3);
C[0] := 0.3823603619;
C[1] := 1.624466512;
C[2] := 7.26482697;
C[3] := 32.48903197;
x := congruential_method(5197619869); //последовательно х
x1 := congruential_method(9058197581); //последовательность х*
q := normal_distribution(x,x1); // коэффициенты q
stationary_process(q,C,sX,sY); // метод суммирующих
mx := mat_expectation(sX,Nx); //мат. ожидание
my := mat_expectation(sY,Ny);
Dx := variance(sX,Nx,mx); //дисперсия
Dy := variance(sY,Ny,my);
//критерии согласия
Fx := Gistrogramma(sX,interval_mas_X,Nx);
Fy := Gistrogramma(sY,interval_mas_Y,Ny);
paint_stat_distribution_function(Fx,interval_mas_X,Fy,interval_mas_Y);// статическая функция распределения
Smirnov := criterion_for_approval_Smirnov(Fx,Fy);
Student := criterion_for_approval_Student(Dx,Dy,mx,my);
Fisher := criterion_for_approval_Fisher(Dx,Dy);
OutputInfo(sX,sY,Student,Fisher,Smirnov,mx,my,dx,dy);
end;
end.
Раздел 2
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, ActnMan, ActnColorMaps, XPMan,mmsystem, StdCtrls,
Grids;
const N = 3600;
Ymin = 200;
Ymax = 400;
m1a = 0;
m1b = 3000;
m3a = 0;
m3b = 3000;
type
Tzap = record
m1:integer;
m3:integer;
count_fail:integer;
time_fail:real;
end;
Tmaszap = array of Tzap;
Tmas = array of extended;
Tfm_Main = class(TForm)
sg_Info: TStringGrid;
ed_m1_min: TEdit;
ed_m3_min: TEdit;
sb_FormData: TSpeedButton;
sbOptim: TSpeedButton;
ed_m1_max: TEdit;
ed_m3_max: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ed_m_h: TEdit;
Label6: TLabel;
StringGrid1: TStringGrid;
procedure FormDestroy(Sender: TObject);
procedure sb_RunClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ed_t1KeyPress(Sender: TObject; var Key: Char);
procedure ed_t2KeyPress(Sender: TObject; var Key: Char);
procedure ed_t3KeyPress(Sender: TObject; var Key: Char);
procedure ed_t4KeyPress(Sender: TObject; var Key: Char);
procedure ed_t5KeyPress(Sender: TObject; var Key: Char);
procedure ed_TKeyPress(Sender: TObject; var Key: Char);
procedure sb_StopClick(Sender: TObject);
procedure sb_ContinueClick(Sender: TObject);
procedure sb_FormDataClick(Sender: TObject);
procedure sbOptimClick(Sender: TObject);
private
{ Private declarations }
public
MMtimer:integer;
{ Public declarations }
end;
var
fm_Main: Tfm_Main;
m1,m2,m3,m4,m5:integer;
sigma1,sigma2,sigma3,sigma4,sigma5:integer;
init_val:longint;
count,count_T,count_t3:integer;
t1a,t1b,t2a,t2b,t3a,t3b,t4a,t4b,t5a,t5b,Ta,Tb:integer;
t1,t2,t3,t4,t5,T:Tmas;
fail_time,start_fail_time:real;
h,fail_DATA:integer;
time,now_time_t1,now_time_t2,now_time_t4,now_time_t5:real;
process_PC1,process_PC2,ON_PC1,ON_PC2,control_signal,start_t1,flag_change:boolean;
start_t2,start_t4,start_t5,recovery,flag_opt:boolean;
status_PC1,status_PC2,status_DATA:byte;
OptimArr:Tmaszap;
name_file_data:string;
implementation
{$R *.dfm}
procedure KeyEnter(var key:char);
begin
if not(key in ['0'..'9',#8]) then key:=#0;
end;
function congruential_method(init:integer):Tmas;
var i:integer;
begin
setlength(result, 0);
result := nil;
randSeed := init;
for i := 0 to N + 5 do
begin
setlength(result, i + 1);
result[i] := random;
end;
end;
function normal_distribution(x,x1:Tmas;sigma,mat:integer):Tmas;
var i:integer;
begin
setlength(result,0);
result := nil;
for i := 0 to N + 5 do
begin
Setlength(Result, i + 1);
Result[i] := sigma * cos(2 * pi * x[i]) * sqrt(-2 * ln(x1[i])) + mat;
end;
end;
function stationary_process(q,C:Tmas):Tmas;
var i:integer;
My:real;
begin
My := (Ymax - Ymin) / 2;
for i := 0 to N-1 do
begin
setlength(result,i+1);
result[i] := C[0]*q[i]+C[1]*q[i+1]+C[2]*q[i+2]+C[3]*q[i+3]+My;
end;
end;
procedure RandomParametres;
var x,x1,C,q: Tmas;
begin
x := congruential_method(random(7590185714));
x1 := congruential_method(random(1590185712));
setlength(C,4);
C[0] := 0.3823603619;
C[1] := 1.624466512;
C[2] := 7.26482697;
C[3] := 32.48903197;
q := normal_distribution(x,x1,1,0); // коэффициенты q
t1 := normal_distribution(x,x1,sigma1,m1); //Исходные параметры системы
t2 := normal_distribution(x,x1,sigma2,m2);
t3 := normal_distribution(x,x1,sigma3,m3);
t4 := normal_distribution(x,x1,sigma4,m4);
t5 := normal_distribution(x,x1,sigma5,m5);
T := stationary_process(q,C);
end;
function CalH(t1,t2,t3,t4,t5,T:real):real;
const Low =1; High =6;
type CountParam = Low..High;
Tmas = array[CountParam] of real;
var mas:Tmas;
i:CountParam;
min:real;
begin
mas[1] := t1;
mas[2] := t2;
mas[3] := t3;
mas[4] := t4;
mas[5] := t5;
mas[6] := T;
min := mas[Low];
for i := Low+1 to High do
begin
if mas[i]<min then
min := mas[i];
end;
CalH := min;
end;
procedure GO_PC(num:integer);
begin
if num = 1 then
begin
process_PC1 := true; //данные поступили в ЭВМ2
status_PC1 := 2;
end
else if num = 2 then
begin
process_PC2 := true; //данные поступили в ЭВМ2
status_PC2 := 2;
end;
start_t2 :=true;
now_time_t2 := time; // для этого запоминаем текущее время
status_DATA := 2;
end;
procedure Data_Received();
begin
now_time_t1 := time;
if (ON_PC2) andnot(ON_PC1) then //Если данные пришли на ЭВМ2 и ЭВМ1 еще не восстановилось
if not(process_PC2) then //если ЭВМ2 не занята
GO_PC(2);
if not(control_signal) then //Если нет управляющего сигнала
begin
start_fail_time :=time;
t1[count-1] := 2*t1[count-1]; //но нет управляющего сигнала, то уменьшаем интенсивность процесса
end;
if (ON_PC1 and not(process_PC1) ) then // Если ЭВМ 1 не в отказе
GO_PC(1) // и не в процессе обработки
else if (not(status_DATA=2)) then // походу данные потеряны.....
begin
status_DATA := 4;
inc(fail_DATA);
start_t2 := false;
end;
end;
Procedure Change_PC;
begin
status_PC2 := 0;
on_PC2 := false; //выключим ЭВМ2
status_PC1 := 1;
on_PC1 := true; //включим ЭВМ1
start_t1 := true; //запускаем передачу данных в ЭВМ1
now_time_t1 := time; // запоминаем текущее время
control_signal :=true;
end;
procedure Data_Process();
begin
ifprocess_PC1 then //если были данные на обработке ЭВМ1
begin
status_DATA :=3;
status_PC1 := 3;
process_PC1 := false; //останавливаем обработку
control_signal := true; //запускаем управляющий сигнал
start_t2 := false; //останавливаем отсчет обработки данных
now_time_t2 := 0; //обнуляем время
end
else if process_PC2 then
begin
status_DATA :=3;
status_PC2 := 3;
process_PC2 := false;
start_t2 := false;
now_time_t2 := 0;
if (recovery) then //если мы обработали данные, но ЭВМ1 уже готова
begin //к работе
recovery:=false;
Change_PC;
flag_change :=true;
Размещено на Allbest.ru
Подобные документы
Разработка решения задачи имитационного моделирования системы массового обслуживания (СМО), на примере склада продукции. Построение концептуальной модели системы. Сравнение результатов имитационного моделирования и аналитического расчета характеристик.
курсовая работа [75,5 K], добавлен 26.06.2011Определение функциональных характеристик систем массового обслуживания (СМО) на основе имитационного моделирования; синтез СМО с заданными характеристиками. Разработка программы на языке SIMNET II; расчет процесса работы СМО; подбор требуемого параметра.
лабораторная работа [623,8 K], добавлен 11.03.2011Построение модели системы массового обслуживания с помощью ЭВМ с использованием методов имитационного моделирования. Моделирование проводилось с помощью GPSS World Student version, позволяющего достоверно воссоздать систему массового обслуживания.
курсовая работа [555,7 K], добавлен 29.06.2011Язык GPSS как один из наиболее эффективных и распространенных языков моделирования сложных дискретных систем. Транзакт - элемент системы массового обслуживания. Решение задач на основе моделирования с применением языка GPSS, создание имитационной модели.
курсовая работа [54,7 K], добавлен 25.11.2010Характеристика функций имитационного моделирования. Знакомство с особенностями имитационного моделирования агрегированной системы массового обслуживания. Анализ программы GPSSWorld: рассмотрение возможностей, способы составления имитационной модели.
курсовая работа [1,6 M], добавлен 27.05.2013Сфера применения имитационного моделирования. Исследование и специфика моделирования системы массового обслуживания с расчетом стационарных значений системы и контролем погрешности получаемых значений. Реализация ее в GPSS и на языке высокого уровня Java.
курсовая работа [818,7 K], добавлен 23.05.2013Изучение современных принципов, подходов и методов моделирования сложно формализуемых объектов. Решение задач структурной и параметрической идентификации. Характеристики вычислительных систем как сложных систем массового обслуживания. Теория потоков.
курс лекций [2,3 M], добавлен 18.02.2012Программные средства имитационного моделирования систем массового обслуживания. Программная среда Matlab, ее структура и основные компоненты, функциональные особенности, а также назначение. Разработка подсистем моделирования. Инструкция пользователя.
дипломная работа [3,3 M], добавлен 10.07.2017Методика и особенности составления имитационной модели системы массового обслуживания (СМО). Анализ и статистическая обработка показателей эффективности СМО путем решения уравнения Колмогорова, их сравнение с результатами аналитического моделирования.
курсовая работа [609,2 K], добавлен 31.01.2010Методика системного исследования реальной динамической сложной системы посредством разработки ее имитационной модели. Разработка программы реализации алгоритма имитационного моделирования системы массового обслуживания "Интернет-провайдерская фирма".
курсовая работа [2,0 M], добавлен 20.01.2010