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

Автор работы: Пользователь скрыл имя, 18 Декабря 2014 в 08:50, курсовая работа

Описание работы

Процессы функционирования различных систем и сетей связи могут быть представлены той или иной совокупностью систем массового обслуживания (СМО) - стохастических, динамических, дискретно-непрерывных математических моделей. Исследование характеристик таких моделей может проводиться либо аналитическими методами, либо путем имитационного моделирования.

Файлы: 1 файл

ПЗ.docx

— 190.17 Кб (Скачать файл)

Для разработки модели системы будем использовать классы, экземпляры класса, методы и поля:

 

IM_Queue – класс для очередей канала предварительного обслуживания и трех миниЭВМ;

queueK1, queueEVM1, queueEVM2, queueEVM3 – экзепляры класса IM_Queue: очередь канала предварительного обслуживания, очередь миниЭВМ1, очередь миниЭВМ2, очередь миниЭВМ3;

Queue() – метод занесения сигнала в очередь;

Depart() – метод удаления сигнала из очереди;

Name – название очереди;

Number – номер очереди;

QueueSize – длина очереди;

 

IM_Device – класс для канала предварительного обслуживания и трех миниЭВМ;

K1, EVM1, EVM2, EVM3 – экземпляры класса IM_Device: канал предварительного обслуживания, миниЭВМ1, миниЭВМ2, миниЭВМ3;

Seize() – метод занятие устройства;

Release() – метод освобождения устройства;

Name – название устройства;

Number – номер устройства;

 

Free – занятость устройства;

 

IM_Event – класс для событий прихода и ухода сигнала;

IM_Event1 – класс, производный от класса IM_Event, для события поступления сигнала.

IM_Event2 – класс, производный от класса IM_Event, для события ухода сигнала из первой миниЭВМ;

IM_Event3 – класс, производный от класса IM_Event, для события ухода сигнала из второй миниЭВМ;

IM_Event4 – класс, производный от класса IM_Event, для события ухода сигнала из третьей миниЭВМ;

Name – имя события;

Type – тип события;

Time – время события;

 

IM_System – класс для реализации работы системы;

Init() – метод инициализации системы;

Synhronise() – метод синхронизации системы;

Generate_Interval_tgen(int time1, int time2) – метод планирования интервала time1+-time2 для генерации заявки;

Generate_Interval_tevm1(int time1, int time2) – метод планирования интервала time1+-time2 для обработки сигнала в канале предварительного обслуживания;

TestQueueK1() – метод для проверки сигналов в очереди канала предварительного обслуживания;

GoIn() – метод события поступления сигнала;

GoOut() – метод события ухода сигнала;

 

 

 

В проект включены следующие переменные:

tend – количество входных сигналов.

kol_Otkasov – количество потерянных сигналов.

Sim_Time – модельное время.

Tranzakt_Value – количество сигналов, попавших в систему.

Tranzakt_Process – количество обработанных сигналов.

timeReliaseK1 – время освобождения канала предварительного обслуживания.

tgen1, tgen2 – время генерации сигналов.

t1K1, t2K1 – время обработки в канале предварительного обслуживания.

t2EVM123 – время обработки в любой системе.

num_events – число событий в системе.

next_event_type – следующий тип события.

TimeObrVK1 – время обработки в канале предварительного обслуживания.

 

 

Текст программы разработанной модели системы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Collections;

 

 

namespace _Курсовой_проект_по_Моделированию

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //определяем класс Очередь

        class IM_Queue

        {

 

 

            public string Name;    //название

            public int Number;     //номер

            public int QueueSize;  //длина очереди

 

            public void Queue()    //занесение транзакта в буфер

            {

                QueueSize++;     //увеличиваем длину очереди

            }

            public void Depart()   //удаление транзакта из буфера

            {

                QueueSize--;     //уменьшаем длину очереди    

            }

        }

 

        //определяем  класс Устройство

        class IM_Device

        {

            public string Name; //название

            public int Number;  //номер

            public bool Free;   //true - свободно, false - занято

 

            public void Seize() //занятие устройства

            {

                Free = false;//устройство занято

            }

            public void Release()//удаление транзакта из устройства

            {

                Free = true;//устройство свободно

            }

        }

 

        //определяем  класс Событие

        class IM_Event

        {

 

            public string Name; //название события

            public int Type;    //тип события

            public float Time;  //время наступления события

            public IM_Event(string Name, int Type, float Time)

            {

                this.Name = Name;

                this.Type = Type;

                this.Time = Time;

            }

        }

        class IM_Event1 : IM_Event//события для поступившей заявки

        {

            public IM_Event1(string Name, int Type, float Time)

                : base(Name, Type, Time)

            { }

        }

        class IM_Event2 : IM_Event//событие для ухода заявки из первой миниЭВМ

        {

            public IM_Event2(string Name, int Type, float Time)

                : base(Name, Type, Time)

            { }

        }

        class IM_Event3 : IM_Event//событие для ухода заявки из второй миниЭВМ

        {

            public IM_Event3(string Name, int Type, float Time)

                : base(Name, Type, Time)

 

 

 

            {

            }

        }

        class IM_Event4 : IM_Event//событие для ухода заявки из третьей миниЭВМ

        {

            public IM_Event4(string Name, int Type, float Time)

                : base(Name, Type, Time)

            {

            }

        }

 

        //определяем класс Система

        class IM_System

        {

            int kol_Otkasov;

            public IM_Event[] EventsArray = new IM_Event[4];

            public float Sim_Time;       //модельное время

            public int Tranzakt_Value;   //количество транзактов, попавших в систему

            public int Tranzakt_Process; //количество обработанных транзактов

            public float timeReleaseK1;  //время освобождения канала

            public int tgen1, tgen2;     //время генерации заявок

            public int tend;             //количество входных заявок

            public int t1K1, t2K1;       //время обработки в канале предварительного обслуживания

            public int t2EVM123;         //время обработки в любой миниЭВМ

            public int num_events;       //число событий в системе

            public int next_event_type;  //следующий тип события

            public int TimeObrVK1;       //время обработки в канале

 

            Random random = new Random();

 

            IM_Queue queueK1 = new IM_Queue { Name = "Очередь 1", Number = 1, QueueSize = 0 };

            IM_Queue queueEVM1 = new IM_Queue { Name = "Очередь EVM1", Number = 1, QueueSize = 0};

            IM_Queue queueEVM2 = new IM_Queue { Name = "Очередь EVM2", Number = 2, QueueSize = 0};

            IM_Queue queueEVM3 = new IM_Queue { Name = "Очередь EVM3", Number = 3, QueueSize = 0};

 

            IM_Device K1 = new IM_Device { Name = "Канал предварительного обслуживания", Number = 1, Free = true };//устройство свободно

            IM_Device EVM1 = new IM_Device { Name = "EVM1", Number = 1, Free = true};

            IM_Device EVM2 = new IM_Device { Name = "EVM2",  Number = 2, Free = true};

            IM_Device EVM3 = new IM_Device { Name = "EVM3", Number = 3, Free = true};

 

            public void Init()           //инициализация системы

            {

                //инициализация модельного времени  и состояния системы

                Sim_Time = 0.0f;

                Tranzakt_Value = 0;

                Tranzakt_Process = 0;

                num_events = 4;

                //планирование первого события

                EventsArray[0] = new IM_Event1("Генерация заявки", 0, Sim_Time + Generate_Interval_tgen(tgen1, tgen2));

                EventsArray[1] = new IM_Event2("Окончание обслуживания заявки в EVM1", 1, 1.0e+30f);//событие произойдет во времени 10 в 30

                EventsArray[2] = new IM_Event3("Окончание обслуживания заявки в EVM2", 2, 1.0e+30f);

                EventsArray[3] = new IM_Event3("Окончание обслуживания заявки в EVM3", 3, 1.0e+30f);

            }

            public void Synhronise()     //синхронизация событий

            {

                float min_time_next_event = 1.0e+29f;//берем для сравнения большое число

                next_event_type = -1;//предполагаем, что событий нет

                //открываем цикл, в котором определяем  событие с наименьшим временем

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

                {

 

 

 

                    if (EventsArray[i].Time < min_time_next_event)

                    {

                        min_time_next_event = EventsArray[i].Time;

                        next_event_type = i;//отыскиваем тип события

                    }

                }

                //если событий нет, то завершаем  моделирование

                if (next_event_type == -1)

                {

                    MessageBox.Show("Список событий пуст");

                    Environment.Exit(0);

                }

                //переводим модельные часы на  ближайшее событие

                Sim_Time = min_time_next_event;

            }

            public int Generate_Interval_tgen(int time1, int time2)//планирование интервала time1 +-time2 для генерации заявки

            {

                int result = random.Next(11)+5;

                return result;

            }

            public int Generate_Interval_tevm1(int time1, int time2)//планирование интервала time1 +-time2 для обработки заявки

            {

                int result = random.Next(7)+7;// то есть интервал 7-13 или 10+-3

                TimeObrVK1 = result;

                return result;

            }

 

            public void TestQueueK1()//проверка: есть ли заявки в очереди канала

            {

                if (queueK1.QueueSize> 0)

                {

                    K1.Free = false;

                    queueK1.Depart();

                    timeReleaseK1 = Sim_Time + random.Next(7) + 7;

                }

            }

            public void GoIn()           //событие поступления заявки

            {

                Tranzakt_Value++;//увеличиваем число поступивших транзактов (количество заявок всех типов)

                //если устройство свободно, то  занимаем его для текущей заявки

                queueK1.Queue();

                if ((K1.Free == true) && (queueK1.QueueSize > 0))

                {

                    queueK1.Depart();

                    K1.Seize();

 

                    //планируем время обработки в  устройстве

                    timeReleaseK1 = Sim_Time + Generate_Interval_tevm1(t1K1, t2K1);   

                }

               

                //планируем время поступления следующей заявки

                EventsArray[0].Time = Sim_Time + Generate_Interval_tgen(tgen1, tgen2);

 

                //проверка: если заявка обработана в канале пред обслуж, то она передается одной из миниЭВМ

                if ((timeReleaseK1 < EventsArray[0].Time) && (K1.Free == false))  

                {

                    K1.Release();//освобождаем канал

                    if ((queueEVM1.QueueSize == 10) && (queueEVM2.QueueSize == 10) && (queueEVM3.QueueSize == 10))

                    {

                        kol_Otkasov++;

 

 

 

                        //dataGridView2[u, 1].Value = takt_Mod_Vremeni;

                        //u++;

                        TestQueueK1();

                    }

                    else

                    //проверка на меньшую очередь 

                    if ((queueEVM1.QueueSize <= queueEVM2.QueueSize) && (queueEVM1.QueueSize <= queueEVM3.QueueSize))

                    {

                        queueEVM1.Queue();

                        if (EVM1.Free == true)

                        {

                            EVM1.Seize();

                            queueEVM1.Depart();

 

                            EventsArray[1].Time = Sim_Time + t2EVM123;

                        }

                        TestQueueK1();

                    }

                    else

                        if ((queueEVM2.QueueSize<=queueEVM1.QueueSize) && (queueEVM2.QueueSize<=queueEVM3.QueueSize))

                        {

                            queueEVM2.Queue();

                            if(EVM2.Free == true)

                            {

                                EVM2.Seize();

                                queueEVM2.Depart();

 

                                EventsArray[2].Time = Sim_Time + t2EVM123;

                            }

                            TestQueueK1();

                        }

                    else

                            if ((queueEVM3.QueueSize<=queueEVM1.QueueSize) &&(queueEVM3.QueueSize<=queueEVM2.QueueSize))

                            {

                                queueEVM3.Queue();

                                if(EVM3.Free == true)

                                {

                                    EVM3.Seize();

                                    queueEVM3.Depart();

 

                                    EventsArray[3].Time = Sim_Time + t2EVM123;

                                }

                                TestQueueK1();

                            }

                }

            }

            public void GoOut()          //событие ухода заявки

            {

 

                Tranzakt_Process++;//увеличиваем число обработанных транзактов

               

                EventsArray[next_event_type].Time = 1.0e+30f;

 

                //освобождение ЭВМ

                if ((next_event_type == 1) && (EVM1.Free == false))

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