на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Имитационное моделирование системы массового обслуживания
p align="left">for i from 0 by 1 to 5 do

# Pf[i]=p[i,N]:

R[i]:=abs(Pf[i]-p[i,500]);

end;

>

> # Показатели эффективности системы

# вероятность отказа

p_otk:=Pf[5];

> # относительная пропускная способность

Q := 1-p_otk;

> # абсолютная пропускная способность

A := la*Q;

> # длина очереди

lo := Pf[4]+2*Pf[5];

> # среднее время в очереди

t0 := lo/la;

> # среднее число каналов

K := (la/m)*Q;

>

> # Вывод графиков вероятностей

cur[i]:=array(0..5):

for i from 0 by 1 to 5 do

cur[i]:=CURVES([[0,p[i,0]],[0.05,p[i,5]],[0.07,p[i,7]],[0.1,p[i,10]],[0.15,p[i,15]],

[0.2,p[i,20]],[0.3,p[i,30]],[0.4,p[i,40]],[0.5,p[i,50]],[0.75,p[i,75]],[1,p[i,100]],

[1.25,p[i,125]],[1.5,p[i,150]],[1.75,p[i,175]],[2,p[i,200]],[2.5,p[i,250]],[3,p[i,300]],

[4,p[i,400]],[5,p[i,500]] ]):

end:

> i:=0: a[i]:=PLOT(cur[i],COLOR(RGB,0,0,0)): # P0 - черный

i:=1: a[i]:=PLOT(cur[i],COLOR(RGB,0,0,1)): # P1 - синий

i:=2: a[i]:=PLOT(cur[i],COLOR(RGB,1,0,0)): # P2 - красный

i:=3: a[i]:=PLOT(cur[i],COLOR(RGB,0,1,1)): # P3 - голубой

i:=4: a[i]:=PLOT(cur[i],COLOR(RGB,1,0,1)): # P4 - малиновый

i:=5: a[i]:=PLOT(cur[i],COLOR(RGB,0,1,0)): # P5 - зеленый

> display({a[0],a[1],a[2],a[3],a[4],a[5]});

Приложение 2

Листинг программы имитационного моделирования

Программа написана на языке Delphi7.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace CMO_misiagin

{

class CMO_work

{

Random R; // Генератор случайных чисел

public uint Max_dlina_ocheredi; // Максимальная длина очереди

public uint chislo_kanalov_in_system; // Число каналов в системе

public double Lamda; // Интенсивность потока поступления заявок

public double Mu; // Интенсивность потока обслуживания заявок

public double shag_by_time; // Шаг по времени

public double[] t_oconch_obsl_vo_vsex_canalax; // Время окончания обслуживания заявки во всех каналах

public double[] t_v_sostoijaniax_s_ocher; // Время пребывания СМО в состояниях с очередью

public double t_rab_sistem; // Время работы системы

public double summ_t_obsl_zaijvok; // Суммарное время обслуживания заявок

public uint chislo_post_zaijavok; // Число поступивших заявок

public uint chislo_otkaz_zaijavok; // Число отказанных заявок

public uint chislo_obslu_zaijavok; // Число обслуженных заявок

uint dlina_ocheredi; // Длина очереди

public uint Dlina_ocheredi

{

get

{ return dlina_ocheredi; }

set

{

if (value < 0)

{ dlina_ocheredi = 0; }

else if (value > 2)

{ }

else

{ dlina_ocheredi = value;}

}

}

// Состояния СМО {ССС,ССЗ,СЗС,ЗСС,СЗЗ,ЗСЗ,ЗЗС,ЗЗЗ,ЗЗЗ+1,ЗЗЗ+2}

enum Sostoijanija_sustem { S0, S1, S2, S3, S4, S5, S6, S7, S8, S9};

Sostoijanija_sustem tekushee_sost_sustem; // Текущее состояние системы

/// <summary>

/// Представляет модель системы массового обслуживания (СМО)

/// </summary>

/// <param name="p_chislo_kanalov_in_system">Число каналов в системе</param>

/// <param name="p_Max_dlina_ocheredi">Максимальная длина очереди</param>

/// <param name="p_Lamda">Интенсивность потока поступления завок</param>

/// <param name="p_Mu">Интенсивность потока обслуживания завок</param>

/// <param name="p_shag_by_time">Шаг по времени</param>

public CMO_work(uint p_chislo_kanalov_in_system, uint p_Max_dlina_ocheredi, double p_Lamda, double p_Mu, double p_shag_by_time)

{

SetDefaults();

R = new Random();

chislo_kanalov_in_system = p_chislo_kanalov_in_system;

Max_dlina_ocheredi = p_Max_dlina_ocheredi;

Lamda = p_Lamda;

Mu = p_Mu;

shag_by_time = p_shag_by_time;

t_oconch_obsl_vo_vsex_canalax = new double[chislo_kanalov_in_system];

t_v_sostoijaniax_s_ocher = new double[Max_dlina_ocheredi];

}

/// <summary>

/// Устанавливает значения параметров СМО по умолчанию

/// </summary>

public void SetDefaults()

{

tekushee_sost_sustem = Sostoijanija_sustem.S0;

chislo_post_zaijavok = 0;

chislo_otkaz_zaijavok = 0;

chislo_obslu_zaijavok = 0;

t_rab_sistem = 0;

summ_t_obsl_zaijvok = 0;

dlina_ocheredi = 0;

for (int i = 0; i < chislo_kanalov_in_system; i++)

{ t_oconch_obsl_vo_vsex_canalax[i] = 0; }

for (int i = 0; i < Max_dlina_ocheredi; i++)

{ t_v_sostoijaniax_s_ocher[i] = 0; }

}

/// <summary>

/// Определяет случайным образом, поступила ли заявка

/// </summary>

/// <returns>true - поступила, false = не поступила</returns>

bool prichla_li_sluchain_zaijavka()

{

double r = R.NextDouble();

if (r < (shag_by_time * Lamda))

{ return true; }

return false;

}

/// <summary>

/// Определяет случайным образом время облуживания заявки

/// </summary>

/// <returns>Время облуживания заявки</returns>

double t_obslujivania_zaijvki()

{

double r = R.NextDouble();

return (-1/Mu*Math.Log(1-r, Math.E));

}

/// <summary>

/// Определение текущего состояния

/// </summary>

/// <returns>Состояние системы</returns>

Sostoijanija_sustem opred_tec_sost()

{

Sostoijanija_sustem _sostoijanija_sustem = Sostoijanija_sustem.S0;

int k = 0;

int zanijat_chislo_kanalov_in_system = 0;

for (int i = 0; i < chislo_kanalov_in_system; i++)

{

if (t_oconch_obsl_vo_vsex_canalax[i] > 0)

{

k = 1;

zanijat_chislo_kanalov_in_system++;

}

else

{ k = 0; }

_sostoijanija_sustem += k * (i + 1);

}

if (zanijat_chislo_kanalov_in_system > 1)

{ _sostoijanija_sustem ++; }

return _sostoijanija_sustem + (int)dlina_ocheredi;

}

/// <summary>

/// Один шаг моделирования системы

/// </summary>

public void modelirovanie_sustem()

{

t_rab_sistem += shag_by_time;

tekushee_sost_sustem = opred_tec_sost();

if (dlina_ocheredi > 0)

{

t_v_sostoijaniax_s_ocher[dlina_ocheredi - 1] += shag_by_time;

for (int i = 0; i < chislo_kanalov_in_system; i++)

{

if (t_oconch_obsl_vo_vsex_canalax[i] <= 0)

{

t_oconch_obsl_vo_vsex_canalax[i] = t_obslujivania_zaijvki();

summ_t_obsl_zaijvok += t_oconch_obsl_vo_vsex_canalax[i];

dlina_ocheredi--;

break;

}

}

}

if (prichla_li_sluchain_zaijavka())

{

chislo_post_zaijavok++;

if (dlina_ocheredi < Max_dlina_ocheredi)

{

chislo_obslu_zaijavok++;

if (tekushee_sost_sustem < Sostoijanija_sustem.S7)

{

for (int i = 0; i < chislo_kanalov_in_system; i++)

{

if (t_oconch_obsl_vo_vsex_canalax[i] <= 0)

{

t_oconch_obsl_vo_vsex_canalax[i] = t_obslujivania_zaijvki();

summ_t_obsl_zaijvok += t_oconch_obsl_vo_vsex_canalax[i];

break;

}

}

}

else

{ dlina_ocheredi++; }

}

else

{ chislo_otkaz_zaijavok++; }

}

for (int i = 0; i < chislo_kanalov_in_system; i++)

{

if (t_oconch_obsl_vo_vsex_canalax[i] > 0)

{

t_oconch_obsl_vo_vsex_canalax[i] -= shag_by_time;

}

}

}

}

}

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace CMO_misiagin

{

public partial class Form1 : Form

{

CMO_work work;

uint chislo_progonov;

List<double> P, Q, A, K, Lo, To, Percents_otkaz, Percents_Prin;

uint n = 3; // Число каналов

uint m = 2; // MAX длина очереди

public Form1()

{

InitializeComponent();

work = new CMO_work(n, m, (double)numericUpDown1.Value, (double)numericUpDown2.Value, (double)numericUpDown3.Value);

chislo_progonov = 0;

P = new List<double>();

Q = new List<double>();

A = new List<double>();

K = new List<double>();

Lo = new List<double>();

To = new List<double>();

Percents_otkaz = new List<double>();

Percents_Prin = new List<double>();

}

private void Form1_Load(object sender, EventArgs e)

{

button1.Enabled = false;

}

private void Rasschitat_Click(object sender, EventArgs e)

{

if (chislo_progonov>1) button1.Enabled = true;

richTextBox1.Clear();

richTextBox1.Text += " Показатели эффективности: \n";

work.SetDefaults();

work.chislo_kanalov_in_system = n;

work.Max_dlina_ocheredi = m;

work.Lamda = (double)numericUpDown1.Value;

work.Mu = (double)numericUpDown2.Value;

work.shag_by_time = (double)numericUpDown3.Value;

double Time = (double)numericUpDown4.Value;

while (work.t_rab_sistem < Time)

{

work.modelirovanie_sustem();

}

richTextBox1.Text += "Поступило заявок: \t\t\t" + work.chislo_post_zaijavok.ToString() + "\n";

richTextBox1.Text += "Очередь: \t\t\t\t" + work.Dlina_ocheredi.ToString() + "\n";

richTextBox1.Text += "Отклонено заявок: \t\t\t" + work.chislo_otkaz_zaijavok.ToString() + "\n";

// Вероятность отказа

double ver_otcaza = work.t_v_sostoijaniax_s_ocher[work.Max_dlina_ocheredi - 1] / work.t_rab_sistem;

P.Add(ver_otcaza);

richTextBox1.Text += "Вероятность отказа, Ротк: \t\t\t" + ver_otcaza.ToString() + "\n";

// Относительная пропускная способность

double otnos_prop_spos = 1 - ver_otcaza;

Q.Add(otnos_prop_spos);

richTextBox1.Text += "Относительная пропускная способность, Q: \t" + otnos_prop_spos.ToString() + "\n";

// Абсолютная пропускная способность

double absol_prop_spos = work.Lamda * otnos_prop_spos;

A.Add(absol_prop_spos);

richTextBox1.Text += "Абсолютная пропускная способность, A: \t" + absol_prop_spos.ToString() +"\n";

// Длина очереди

double dlina_ocheredi = 0;

for (int i = 0; i < work.Max_dlina_ocheredi; i++)

{

dlina_ocheredi += (i + 1) * (work.t_v_sostoijaniax_s_ocher[i] / work.t_rab_sistem);

}

Lo.Add(dlina_ocheredi);

richTextBox1.Text += "Ср длина очереди, L\x03BF: \t\t\t" + dlina_ocheredi.ToString() + "\n";

// Ср время пребывания заявки в очереди

double sr_t_preb_v_ocheredi = dlina_ocheredi / work.Lamda;

To.Add(sr_t_preb_v_ocheredi);

richTextBox1.Text += "Ср время преб-ия з. в очереди, T\x03BF, c: \t" + sr_t_preb_v_ocheredi.ToString()+"\n";

// Ср число занятых каналов

double sr_chislo_zan_can_k = absol_prop_spos / work.Mu;

K.Add(sr_chislo_zan_can_k);

richTextBox1.Text += "Ср число занятых каналов, k: \t\t" + sr_chislo_zan_can_k.ToString() + "\n";

// % отказанных заявок

double curPercents_otkaz = ((double)work.chislo_otkaz_zaijavok / (double)work.chislo_post_zaijavok) * 100d;

Percents_otkaz.Add(curPercents_otkaz);

richTextBox1.Text += "% отказанных заявок: \t\t\t" + curPercents_otkaz.ToString() + "\n";

// % обслуженных заявок

double absol_prop_sposcceptedPercents = ((double)work.chislo_obslu_zaijavok / (double)work.chislo_post_zaijavok) * 100d;

Percents_Prin.Add(absol_prop_sposcceptedPercents);

richTextBox1.Text += "% обслуженных заявок: \t\t\t" + absol_prop_sposcceptedPercents.ToString() + "\n";

// Число прогонов

chislo_progonov++;

vivod_chisla_pasch.Text = chislo_progonov.ToString();

/* if (chislo_progonov > 1)

{ RasStatistici_Click(); }*/

}

// 222222222222222 доверительные интервалы 222222222222222222222222222222222222222222222222

private void button1_Click(object sender, EventArgs e)

{

richTextBox1.Text += "\n Доверительные интервалы: \n";

double sredn_Potk = 0, sredn_Q = 0, sredn_A = 0, sredn_Lo = 0, sredn_do = 0, sredn_K = 0,

sredn_Percents_otkaz = 0, sredn_Percents_Prin = 0;

double sum_Potk = 0, sum_Q = 0, sum_A = 0, sum_Lo = 0, sum_do = 0, sum_K = 0,

sum_Percents_otkaz = 0, sum_Percents_Prin = 0;

double Potk_ot = 0, Potk_do = 0, Q_ot = 0, Q_do = 0, A_ot = 0, A_do = 0,

Lo_ot = 0, Lo_do = 0, To_ot = 0, To_do = 0, K_ot = 0, K_do = 0,

Percents_otkaz_ot = 0, Percents_otkaz_do = 0,

Percents_Prin_ot = 0, Percents_Prin_do = 0;

for (int i = 0; i < chislo_progonov; i++)

{

sredn_Potk += P[i];

sredn_Q += Q[i];

sredn_A += A[i];

sredn_Lo += Lo[i];

sredn_do += To[i];

sredn_K += K[i];

sredn_Percents_otkaz += Percents_otkaz[i];

sredn_Percents_Prin += Percents_Prin[i];

}

// Математические ожидания величин

sredn_Potk /= chislo_progonov;

sredn_Q /= chislo_progonov;

sredn_A /= chislo_progonov;

sredn_Lo /= chislo_progonov;

sredn_do /= chislo_progonov;

sredn_K /= chislo_progonov;

sredn_Percents_otkaz /= chislo_progonov;

sredn_Percents_Prin /= chislo_progonov;

// Вычисление доверительных интервалов

for (int i = 0; i < chislo_progonov; i++)

{

sum_Potk += Math.Pow((P[i] - sredn_Potk), 2);

sum_Q += Math.Pow((Q[i] - sredn_Q), 2);

sum_A += Math.Pow((A[i] - sredn_A), 2);

sum_Lo += Math.Pow((sredn_Lo - Lo[i]), 2);

sum_do += Math.Pow((sredn_do - To[i]), 2);

sum_K += Math.Pow((K[i] - sredn_K), 2);

sum_Percents_otkaz += Math.Pow((Percents_otkaz[i] - sredn_Percents_otkaz), 2);

sum_Percents_Prin += Math.Pow((Percents_Prin[i] - sredn_Percents_Prin), 2);

}

Potk_ot = sredn_Potk - (2.093d) * (Math.Sqrt((sum_Potk / (chislo_progonov - 1)) / chislo_progonov));

Potk_do = sredn_Potk + (2.093d) * (Math.Sqrt((sum_Potk / (chislo_progonov - 1)) / chislo_progonov));

Q_ot = sredn_Q - (2.093d) * (Math.Sqrt((sum_Q / (chislo_progonov - 1)) / chislo_progonov));

Q_do = sredn_Q + (2.093d) * (Math.Sqrt((sum_Q / (chislo_progonov - 1)) / chislo_progonov));

A_ot = sredn_A - (2.093d) * (Math.Sqrt((sum_A / (chislo_progonov - 1)) / chislo_progonov));

A_do = sredn_A + (2.093d) * (Math.Sqrt((sum_A / (chislo_progonov - 1)) / chislo_progonov));

Lo_ot = sredn_Lo - (2.093d) * (Math.Sqrt((sum_Lo / (chislo_progonov - 1)) / chislo_progonov));

Lo_do = sredn_Lo + (2.093d) * (Math.Sqrt((sum_Lo / (chislo_progonov - 1)) / chislo_progonov));

To_ot = sredn_do - (2.093d) * (Math.Sqrt((sum_do / (chislo_progonov - 1)) / chislo_progonov));

To_do = sredn_do + (2.093d) * (Math.Sqrt((sum_do / (chislo_progonov - 1)) / chislo_progonov));

K_ot = sredn_K - (2.093d) * (Math.Sqrt((sum_K / (chislo_progonov - 1)) / chislo_progonov));

K_do = sredn_K + (2.093d) * (Math.Sqrt((sum_K / (chislo_progonov - 1)) / chislo_progonov));

Percents_otkaz_ot = sredn_Percents_otkaz - (2.093d) * (Math.Sqrt((sum_Percents_otkaz / (chislo_progonov - 1)) / chislo_progonov));

Percents_otkaz_do = sredn_Percents_otkaz + (2.093d) * (Math.Sqrt((sum_Percents_otkaz / (chislo_progonov - 1)) / chislo_progonov));

Percents_Prin_ot = sredn_Percents_Prin - (2.093d) * (Math.Sqrt((sum_Percents_Prin / (chislo_progonov - 1)) / chislo_progonov));

Percents_Prin_do = sredn_Percents_Prin + (2.093d) * (Math.Sqrt((sum_Percents_Prin / (chislo_progonov - 1)) / chislo_progonov));

richTextBox1.Text += "Вероятность отказа, Ротк: \t\nот\t" + Potk_ot.ToString() + "\nдо\t" + Potk_do.ToString() + "\n";

richTextBox1.Text += "Относительная пропускная способность, Q: \nот\t" + Q_ot.ToString() + "\nдо\t" + Q_do.ToString() + "\n";

richTextBox1.Text += "Абсолютная пропускная способность, A: \nот\t" + A_ot.ToString() + "\nдо\t" + A_do.ToString() + "\n";

richTextBox1.Text += "Ср длина очереди, L\x03BF: \t\nот\t" + Lo_ot.ToString() + "\nдо\t" + Lo_do.ToString() + "\n";

richTextBox1.Text += "Ср время преб-ия з. в очереди, T\x03BF, c: \nот\t" + To_ot.ToString() + "\nдо\t" + To_do.ToString() + "\n";

richTextBox1.Text += "Ср число занятых каналов, k: \nот\t" + K_ot.ToString() + "\nдо\t" + K_do.ToString() + "\n";

richTextBox1.Text += "% отказанных заявок: \t\nот\t" + Percents_otkaz_ot.ToString() + "\nдо\t" + Percents_otkaz_do.ToString() + "\n";

richTextBox1.Text += "% обслуженных заявок: \t\nот\t" + Percents_Prin_ot.ToString() + "\nдо\t" + Percents_Prin_do.ToString() + "\n";

button1.Enabled = false;

}

}

}

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.