47065 (608060), страница 4

Файл №608060 47065 (Имитационное моделирование системы массового обслуживания) 4 страница47065 (608060) страница 42016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Заключение

В данной работе рассмотрены основные методы моделирования СМО и расчета показателей их эффективности.

Проведено моделирование четырехканальной СМО с максимальной длиной очереди равной 4 с помощью уравнений Колмогорова, а также, найдены финальные вероятности состояний системы. Рассчитаны показатели ее эффективности.

Проведено имитационное моделирование работы такой СМО. На языке программирования Delphi составлена программа, имитирующая ее работу. Проведена серия расчетов, по результатам которых найдены значения показателей эффективности системы и выполнена их статистическая обработка.

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

Литература

  1. Вентцель Е.С. Исследование операций. – М.: Дрофа, 2004. – 208 с.

  2. Волков И.К., Загоруйко Е.А. Исследование операций. – М.: Изд.-во МГТУ им. Н.Э. Баумана, 2002. – 435 с.

  3. Волков И.К., Зуев С.М., Цветкова Г.М. Случайные процессы. – М.: Изд.-во МГТУ им. Н.Э. Баумана, 2000. – 447 с.

  4. Гмурман В.Е. Руководство к решению задач по теории вероятностей и математической статистике. – М.: Высшая школа, 1979. – 400 с.

  5. Ивницкий В.Л. Теория сетей массового обслуживания. – М.: Физматлит, 2004. – 772 с.

  6. Исследование операций в экономике/ под ред. Н.Ш. Кремера. – М.: Юнити, 2004. – 407 с.

  7. Таха Х.А. Введение в исследование операций. – М.: ИД «Вильямс», 2005. – 902 с.

  8. Харин Ю.С., Малюгин В.И., Кирлица В.П. и др. Основы имитационного и статистического моделирования. – Минск: Дизайн ПРО, 1997. – 288 с.

Приложение 1

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

Программа написана в математическом пакете Maple 8.

> # Дано

la:=4:

m:=1:

Находим финальные вероятности

> usl := {m*Pf[1]-la*Pf[0] = 0,

2*m*Pf[2]-la*Pf[1] = 0,

3*m*Pf[3]-la*Pf[2] = 0,

3*m*Pf[4]-la*Pf[3] = 0,

3*m*Pf[5]-la*Pf[4] = 0,

Pf[0]+Pf[1]+Pf[2]+Pf[3]+Pf[4]+Pf[5]= 1 }:

> s:=evalf(solve(usl) ):

> for i from 0 by 1 to 5 do

Pf[i]:=subs( s, Pf[i] );

end;

>

> # Уравнения Колмогорова

> del_t:=0.01: #шаг по времени

T:=10: # Время, за которое система выходит на стационарный режим

N:=trunc(T/del_t); # Число шагов

>

> # Присваиваем начальные значения

p[i,c]:=array(0..5,0..N):

p[0,0]:=1:

for i from 1 by 1 to 5 do p[i,0]:=0 end:

> # Метод Эйлера

jj:=0:

for k from 1 to N do

v:=jj:

j:=trunc(100*v):

jj:=jj+del_t:

p[0,k] := p[0,j]+( m*p[1,j]-la*p[0,j])*del_t:

p[1,k] := p[1,j]+( la*p[0,j]+2*m*p[2,j]-p[1,j]*(m+la) )*del_t:

p[2,k] := p[2,j]+( la*p[1,j]+3*m*p[3,j]-p[2,j]*(2*m+la) )*del_t:

p[3,k] := p[3,j]+( la*p[2,j]+3*m*p[4,j]-p[3,j]*(3*m+la) )*del_t:

p[4,k] := p[4,j]+( la*p[3,j]+3*m*p[5,j]-p[4,j]*(3*m+la) )*del_t:

p[5,k] := p[5,j]+( la*p[4,j]-3*m*p[5,j] )*del_t:

end:

> for i from 0 by 1 to 5 do

P[i]=p[i,N];

end;

> # Cравним финальные вероятности с вероятностями при Т=10, водно, что они близки. R-ошибка

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; // Текущее состояние системы

///

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

///

/// Число каналов в системе

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

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

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

/// Шаг по времени

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];

}

///

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

///

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; }

}

///

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

///

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

bool prichla_li_sluchain_zaijavka()

{

double r = R.NextDouble();

if (r < (shag_by_time * Lamda))

{ return true; }

return false;

}

///

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

///

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

double t_obslujivania_zaijvki()

{

double r = R.NextDouble();

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

}

///

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

///

/// Состояние системы

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;

}

///

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

///

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 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();

Q = new List();

A = new List();

K = new List();

Lo = new List();

To = new List();

Percents_otkaz = new List();

Percents_Prin = new List();

}

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";

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

Характеристики

Тип файла
Документ
Размер
9,57 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее