Вы находитесь на странице: 1из 30

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФГБОУ ВПО «МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ


РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ
(технический университет)»
ДАГЕСТАНСКИЙ ФИЛИАЛ

КАФЕДРА ИНФОРМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КУРСОВАЯ РАБОТА
по дисциплине: «технология программирования»

на тему:

«МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ МНОГОКАНАЛЬНОЙ СМО


С ОГРАНИЧЕННОЙ ДЛИНОЙ ОЧЕРЕДИ И
ОГРАНИЧЕННЫМ ВРЕМЕНЕМ ОЖИДАНИЯ В ОЧЕРЕДИ»

Выполнил: студентка 4го курса


специальности ВМКСиС
Магомедрасулова Х.С.

Проверил: Пиняскин В. В.

Махачкала 2011г.
СОДЕРЖАНИЕ

ВВЕДЕНИЕ……………………………………………………………………..3

1. СИСТЕМЫ МАССОВОГО ОБСЛУЖИВАНИЯ…………………………..4


2. ЯЗЫК ПРОГРАММИРОВАНИЯ С++……………………………………..9
История и назначение языка С++……………………………………10
Стандартизация языка………………………………………………….13
C++ Builder……………………………………………………………...14

3. ОСНОВНАЯ ЧАСТЬ……………………………………………………….16
1.Постановка задачи……………………………………………………16
2. Программа……………………………………………………………17
3.Результат……………………………………………………………...25

ЗАКЛЮЧЕНИЕ……………………………………………………………….29
СПИСОК ЛИТЕРАТУРЫ…………………………………………………….30

ВВЕДЕНИЕ

PAGE \* MERGEFORMAT 11
За последнее время в самых разных областях практики возникла
необходимость в решении различных вероятностных задач, связанных с работой
так называемых систем массового обслуживания (СМО). Примерами таких
систем могут служить: телефонные станции, ремонтные мастерские, билетные
кассы, стоянки такси, парикмахерские и т.п.
Сущность машинного моделирования системы состоит в проведении на
ЭВМ эксперимента с моделью этой системы, что способствует уменьшению
риска провала эксперимента, проводимого непосредственно опытным путем.
Тем самым уменьшая экономические затраты, а так же повышая безопасность
персонала при сложном эксперименте, если нет уверенности в положительном
исходе последнего. В настоящее время метод машинного моделирования нашел
широкое применение при разработке обеспечивающих и функциональных
подсистем различных интегрированных АСУ, автоматизированных подсистем
научных исследований и комплексных испытаний, систем автоматизации
проектирования и т.д.
Темой данного курсового проекта как раз и является решение подобной
задачи. Однако, в предложенной задаче будет исследована СМО, в которой
рассматриваются поток поступления заявки в систему и поток обслуживания
заявки системой.
Практическое решение задачи осуществлено с помощью программы,
реализованной в среде C++ Builder 6.

1. СИСТЕМЫ МАССОВОГО ОБСЛУЖИВАНИЯ

PAGE \* MERGEFORMAT 11
Системы, в которых, с одной стороны, возникают массовые запросы
(требования) на выполнение каких-либо видов услуг, а с другой стороны,
происходит удовлетворение этих запросов, называются системами массового
обслуживания.
Первые задачи теории систем массового обслуживания (ТСМО) были
рассмотрены сотрудниками Копенгагенской телефонной компании, датским
ученым А.К. Эрлангом (1878г. – 1929г.) в период между 1908 и 1922гг. Эти
задачи были вызваны к жизни стремлением упорядочить работу телефонной
сети и разработать методы, позволяющие заранее повысить качество
обслуживания потребителей в зависимости от числа используемых устройств.
Оказалось, что ситуации, возникающие на телефонных станциях, являются
типичными не только для телефонной связи. Работа аэродромов, работа морских
и речных портов, магазинов, терминальных классов, радиолокационных
комплексов, радиолокационных станций и т.д. и т.д. может быть описана в
рамках ТСМО.
Реальные системы, с которыми приходится иметь дело на практике, как
правило, очень сложны и включают в себя ряд этапов (стадий) обслуживания.
Причем на каждом этапе может существовать вероятность отказа в выполнении
или существует ситуация приоритетного обслуживания по отношению к другим
требованиям. При этом отдельные звенья обслуживания могут прекратить свою
работу (для ремонта, наладки и т.д.) или могут быть подключены
дополнительные средства. Могут быть такие обстоятельства, когда требования,
получившие отказ, вновь возвращаются в систему (подобное может происходить
в информационных системах).
Система массового обслуживания включает следующие элементы:
 источник требований,
 входящий поток требований,
 очередь, обслуживающее устройство (обслуживающий аппарат, канал
обслуживания),
 выходящий поток требований
Поступление заявки в СМО называется событием. Последовательность
событий, заключающихся в поступлении заявок в СМО, называется входящим

PAGE \* MERGEFORMAT 11
потоком заявок. Последовательность событий, заключающихся в выполнении
заявок в СМО, называется выходящим потоком заявок.
Каналом обслуживания называется устройство в СМО, обслуживающее
заявку. СМО, содержащее один канал обслуживания, называется одноканальной,
а содержащее более одного канала обслуживания – многоканальной (например,
3 кассы на вокзале).
Если заявка, поступающая в СМО, может получить отказ в
обслуживании (в силу занятости всех каналов обслуживания) и в случае отказа
вынуждена покинуть СМО, то такая СМО называется СМО с отказами
(примером такой СМО может служить АТС).
Если в случае отказа в обслуживании заявки могут вставать в очередь, то
такие СМО называются СМО с очередью (или с ожиданием). При этом
различают СМО с ограниченной и неограниченной очередью. Примером
первых СМО может служить мойка для автомашин с маленькой стоянкой для
ожидающих машин, а примером вторых СМО может служить билетная касса
или метрополитен.
Возможны также СМО смешанного типа, когда, например, заявка может
вставать в очередь, если она не очень велика, и может находиться в очереди
ограниченное время и уйти из СМО не обслуженной.
Различают СМО открытого и замкнутого типа. В СМО открытого типа
поток заявок не зависит от СМО (билетные кассы, очередь в булочной). В СМО
замкнутого типа обслуживается ограниченный круг клиентов, а число заявок
может существенно зависеть от состояния СМО (например, бригада слесарей –
наладчиков, обслуживающих станки на заводе).
СМО могут также различаться по дисциплине обслуживания:
обслуживаются ли заявки в порядке поступления, случайным образом или вне
очереди (с приоритетом).
СМО описываются некоторыми параметрами, которые характеризуют
эффективность работы системы.
n – число каналов в СМО;
λ – интенсивность поступления в СМО заявок;
μ– интенсивность обслуживания заявок;

PAGE \* MERGEFORMAT 11
ρ = λ/μ – коэффициент загрузки СМО;
m – число мест в очереди;
ротк- вероятность отказа в обслуживании поступившей в СМО заявки;
Q ≡ pобс - вероятность обслуживания поступившей в СМО заявки
(относительная пропускная способность СМО); при этом

А – среднее число заявок, обслуживаемых в СМО в единицу времени


(абсолютная пропускная способность СМО)

Lсмо - среднее число заявок, находящихся в СМО;

- среднее число каналов в СМО, занятых обслуживанием заявок. В то же


время это
Lобс - среднее число заявок, обслуживаемых СМО за единицу времени.

Величина определяется как математическое ожидание случайного числа


занятых обслуживанием n каналов:

где рk- вероятность системы находиться в Sk состоянии;

= - коэффициент занятости каналов;


tож - среднее время ожидания (обслуживания) заявки в очереди,
v = 1/tож - интенсивность потока ухода заявок из очереди.
Lоч- среднее число заявок в очереди (если очередь есть); определяется
как математическое ожидание случайной величины m – числа заявок, состоящих
в очереди

где pn+i - вероятность нахождения в очереди i заявок;

- среднее время пребывания заявки в СМО;

- среднее время пребывания заявки в очереди (если есть очередь);


Для открытых СМО справедливы соотношения

PAGE \* MERGEFORMAT 11
называемые формулами Литтла и применимые только для стационарных
потоков заявок и обслуживания.

Классификация СМО.
Системы массового обслуживания классифицируют по разным признакам.
К таким признакам относятся условия ожидания требования начала
обслуживания. В соответствии с этим признаком системы подразделяются на
следующие виды:
- системы массового обслуживания с потерями (отказами);
- системы массового обслуживания с ожиданием;
- системы массового обслуживания с ограниченной длиной очереди;
- системы массового обслуживания с ограниченным временем ожидания.
Системы массового обслуживания, у которых требования, поступающие в
момент, когда все приборы обслуживания заняты, получают отказ и теряются,
называются системами с потерями или отказами.
Системы массового обслуживания, у которых возможно появление как
угодно длинной очереди требований к обслуживающему устройству,
называются системами с ожиданием.
Системы массового обслуживания, допускающие очередь, но с
ограниченным числом мест в ней, называются системами с ограниченной
длиной очереди.
Системы массового обслуживания, допускающие очередь, но с
ограниченным сроком пребывания каждого требования в ней, называются
системами с ограниченным временем ожидания.
По числу каналов или приборов системы делятся на одноканальные и
многоканальные.
По месту нахождения источника требований системы массового
обслуживания делятся на разомкнутые, когда источник находится вне системы,
и замкнутые, когда источник находится в самой системе. К последнему виду
PAGE \* MERGEFORMAT 11
относится, например, станочный участок, в котором станки являются
источником неисправностей, а следовательно, и требований на их обслуживание.
Одной из форм классификации систем массового обслуживания является
кодовая (символьная) классификация Д. Кендалла. При этой классификации
характеристику системы записывают в виде трех, четырех или пяти символов,
например А \ В\ S, где А — тип распределения входящего потока требований, В
— тип распределения времени обслуживания, S — число каналов
обслуживания.
Для экспоненциального распределения принимают символ М, для любого
(произвольного) распределения — символ G. Запись G / М / 3 означает, что
входящий поток требований пуассоновский (простейший), время обслуживания
распределено по экспоненциальному закону, в системе имеется три канала
обслуживания. Четвертый символ указывает допустимую длину очереди, а
пятый — порядок отбора (приоритета) требований.
С позиции моделирования процесса массового обслуживания ситуации,
когда образуются очереди заявок (требований) на обслуживание, возникают
следующим образом. Поступив в обслуживающую систему, требование
присоединяется к очереди других (ранее поступивших) требований. Канал
обслуживания выбирает требование из находящихся в очереди, с тем, чтобы
приступить к его обслуживанию. После завершения процедуры обслуживания
очередного требования канал обслуживания приступает к обслуживанию
следующего требования, если таковое имеется в блоке ожидания.
Цикл функционирования системы массового обслуживания подобного рода
повторяется многократно в течение всего периода работы обслуживающей
системы. При этом предполагается, что переход системы на обслуживание
очередного требования после завершения обслуживания предыдущего
требования происходит мгновенно, в случайные моменты времени.
2. ЯЗЫК ПРОГРАММИРОВАНИЯ С++

С++ — компилируемый строго типизированный язык программирования


общего назначения. Поддерживает разные парадигмы программирования:

PAGE \* MERGEFORMAT 11
процедурную, обобщённую, функциональную; наибольшее внимание уделено
поддержке объектно-ориентированного программирования.
Язык C++ является производным от языка С. Основным отличием языка
C++ является наличие классов и механизма наследования объектов класса
другими классами. При разработке языка C++ руководствовались следующими
тремя принципами:
1) использование классов не должно приводить к более медленному
выполнению программ по сравнению с программами без классов;
2) программы на С рассматриваются как подмножество программ на C++, то
есть добавление классов не должно приводить к тому, что какие-либо свойства С
не будут включены в C++;
3) не должна снизиться эффективность выполнения программ.
По большей части все три цели были достигнуты. Компилятор C++
способен компилировать большинство программ на С, хотя между этими
языками все же существует некоторое несоответствие. Строгая типизация C++
действительно более строгая, чем в С. В C++ были добавлены некоторые
зарезервированные слова. Среди прочих изменений можно отметить добавление
новой формы комментариев: дополнительно к С-комментариям /*...*/ был
добавлен их новый формат //, означающий, что все, что следует за символами //
до конца строки, является комментарием. Также расширились возможности
ввода и вывода за счет добавления функций обработки потоков cin и cout.
Добавлены исключения, перегрузка операций и форма общего класса под
названием шаблон.
С++ в настоящее время считается господствующим языком,
используемым для разработки коммерческих программных продуктов. В
последние годы это господство слегка поколебалось вследствие аналогичных
претензий со стороны такого языка программирования, как Java, но маятник
общественного мнения качнулся в другую сторону, и многие программисты,
которые бросили С++ ради Jаvа, в последнее время поспешили вернуться к своей
прежней привязанности. В любом случае эти два языка настолько похожи, что,
изучив один из них, вы автоматически осваиваете 90% другого.

PAGE \* MERGEFORMAT 11
С++ является языком программирования общего назначения.
Естественная для него область применения - системное программирование,
понимаемое в широком смысле этого слова. Кроме того, С++ успешно
используется во многих областях приложения, далеко выходящих за указанные
рамки. Реализации С++ теперь есть на всех машинах, начиная с самых скромных
микрокомпьютеров - до самых больших супер-ЭВМ, и практически для всех
операционных систем.

История и назначение языка С++


Бьерн Страуструп является разработчиком языка С++ и создателем первого
транслятора. Он - сотрудник научно-исследовательского вычислительного
центра AT&T Bell Laboratories в Мюррей Хилл (Нью-Джерси, США). Он
получил звание магистра математики и вычислительной техники в университете
г. Аарус (Дания), а докторское звание по вычислительной технике в
кэмбриджском университете (Англия). Он специализируется в области
распределенных систем, операционных систем, моделирования и
программирования. Вместе с М. А. Эллис он является автором полного
руководства по языку С++ - "Руководство по С++ с примечаниями".
Безусловно С++ многим обязан языку С, который сохраняется как его
подмножество. Сохранены и все свойственные С средства низкого уровня,
предназначенные для решения самых насущных задач системного
программирования. С, в свою очередь, многим обязан своему предшественнику
языку BCPL . Комментарий языка BCPL был восстановлен в С++. Еще одним
источником вдохновения был язык SIMULA-67 ; именно из него была
заимствована концепция классов (вместе c производными классами и
виртуальными функциями). Возможность в С++ перегрузки операций и свобода
размещения описаний всюду, где может встречаться оператор, напоминают язык
Алгол-68 .
Более ранние версии языка, получившие название "С с классами" ,
использовались, начиная с 1980 г. Этот язык возник потому, что автору
потребовалось написать программы моделирования, управляемые
прерываниями. Язык SIMULA-67 идеально подходит для этого, если не

PAGE \* MERGEFORMAT 11
учитывать эффективность. Язык "С с классами" использовался для больших
задач моделирования. Строгой проверке подверглись тогда возможности
написания на нем программ, для которых критичны ресурсы времени и памяти.
В этом языке недоставало перегрузки операций, ссылок, виртуальных функций и
многих других возможностей. Впервые С++ вышел за пределы
исследовательской группы, в которой работал автор, в июле 1983 г., однако
тогда многие возможности С++ еще не были разработаны.
Название С++ (си плюс плюс) , было придумано Риком Маскитти летом 1983
г. Это название отражает эволюционный характер изменений языка С.
Обозначение ++ относится к операции наращивания С. Чуть более короткое имя
С+ является синтаксической ошибкой. Кроме того, оно уже было использовано
как название совсем другого языка. Знатоки семантики С находят, что С++ хуже,
чем ++С. Язык не получил названия D, поскольку он является расширением С, и
в нем не делается попыток решить какие-либо проблемы за счет отказа от
возможностей С.
Изначально С++ был задуман для того, чтобы автору и его друзьям не надо
было программировать на ассемблере, С или других современных языках
высокого уровня. Основное его предназначение - упростить и сделать более
приятным процесс программирования для отдельного программиста. До
недавнего времени не было плана разработки С++ на бумаге. Проектирование,
реализация и документирование шли параллельно. Никогда не существовало
"проекта С++" или "Комитета по разработке С++". Поэтому язык развивался и
продолжает развиваться так, чтобы преодолеть все проблемы, с которыми
столкнулись пользователи. Толчками к развитию служат также и обсуждения
автором всех проблем с его друзьями и коллегами.
С момента выхода в свет первого издания этой книги язык С++ подвергся
существенным изменениям и уточнениям. В основном это касается разрешения
неоднозначности при перегрузке, связывании и управлении памятью. Вместе с
тем, были внесены незначительные изменения с целью увеличить совместимость
с языком С. Были также введены некоторые обобщения и существенные
расширения, как то: множественное наследование, функции-члены со
спецификациями static и const, защищенные члены (protected), шаблоны типа и

PAGE \* MERGEFORMAT 11
обработка особых ситуаций. Все эти расширения и доработки были нацелены на
то, чтобы С++ стал языком, на котором можно создавать и использовать
библиотеки.
Другие расширения, введенные за период между 1985 и 1991 г.г. (такие как
множественное наследование, статические функции-члены и чистые
виртуальные функции), скорее появились в результате обобщения опыта
программирования на С++, чем были почерпнуты из других языков.
Сделанные за эти шесть лет расширения языка прежде всего были направлены
на повышение выразительности С++ как языка абстракции данных и объектно-
ориентированного программирования вообще и как средства для создания
высококачественных библиотек с пользовательскими типами данных в
частности.
Примерно в 1987 г. стало очевидно, что работа по стандартизации С++
неизбежна и что следует незамедлительно приступить к созданию основы для
нее .
Фирма AT&T Bell Laboratories внесла основной вклад в эту работу. Около ста
представителей из порядка 20 организаций изучали и комментировали то, что
стало современной версией справочного руководства и исходными материалами
для ANSI по стандартизации. С++. Наконец, по инициативе фирмы Hewlett-
Packard в декабре 1989 г. в составе ANSI был образован комитет X3J16.
Ожидается, что работы по стандартизации С++ в ANSI (американский стандарт)
станут составной частью работ по стандартизации силами ISO (Международной
организации по стандартизации).
С++ развивался одновременно с развитием некоторых фундаментальных
классов.

Стандартизация языка
Механизм принятия стандарта соответствует процедурам, определяемым
ISO. Хорошее представление о механике работы комитета стандартизации С++

PAGE \* MERGEFORMAT 11
можно получить, читая группу новостей news://comp.std.c++ и отслеживая
материалы комитета.
В состав международного комитета стандартизации C++ (собственно,
рабочая группа ISO) входит по представителю от каждой из стран, пожелавших
принимать участие в процессе стандартизации. Представителем США является
рабочая группа ANSI, в которую входят представители большинства
производителей компиляторов C++, равно как и крупных "игроков",
заинтересованных в развитии языка; есть и люди, ни с какой компанией не
ассоциированные, и представляющие самих себя. Исторически заседания
рабочих групп C++ ISO и ANSI проводятся совместно.
В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998
(известный как C++98), разработанный комитетом по стандартизации C++
(ISO/IEC JTC1/SC22/WG21 working group).
В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где
были исправлены выявленные ошибки и недочёты предыдущей версии
стандарта.
В 2005 году был выпущен отчёт «Library Technical Report 1» (кратко
называемый TR1). Не являясь официально частью стандарта, отчёт описывает
расширения стандартной библиотеки, которые, как ожидалось авторами, должны
быть включены в следующую версию языка C++. Степень поддержки TR1
улучшается почти во всех поддерживаемых компиляторах языка C++.
В настоящее время разрабатывается новая версия стандарта,
неофициально называемая C++0x.
C++11 или ISO/IEC 14882:2011 (в процессе работы над стандартом носил
условное наименование C++0x)— новая версия стандарта языка C++, вместо
ранее действовавшего ISO/IEC 14882:2003. Новый стандарт включает
дополнения в ядре языка и расширение стандартной библиотеки, в том числе
большую часть TR1 — кроме, вероятно, библиотеки специальных
математических функций.
C++ Builder

PAGE \* MERGEFORMAT 11
C++ Builder — программный продукт, инструмент быстрой разработки
приложений (RAD), интегрированная среда программирования (IDE), система,
используемая программистами для разработки программного обеспечения на
языке C++.
Изначально разрабатывался компанией Borland Software, а затем её
подразделением CodeGear, ныне принадлежащем компании Embarcadero
Technologies.
C++ Builder объединяет в себе комплекс объектных библиотек (STL, VCL,
CLX, MFC и др.), компилятор, отладчик, редактор кода и многие другие
компоненты. Цикл разработки аналогичен Delphi. Большинство компонентов,
разработанных в Delphi, можно использовать и в C++ Builder без модификации,
но обратное утверждение не верно.
C++ Builder содержит инструменты, которые при помощи drag-and-drop
действительно делают разработку визуальной, упрощает программирование
благодаря встроенному WYSIWYG — редактору интерфейса и пр.
C++ Builder первоначально создавалась только для платформы Microsoft
Windows. Поздние версии, содержащие кроссплатформенную компонентную
библиотеку Borland, поддерживают и Windows, и Linux.
В 2003 году Borland выпустила C++ BuilderX (CBX), написанный при
помощи той же инфраструктуры, что и JBuilder, который при этом был мало
похож на C++ Builder или Delphi. Этот продукт предназначался для разработки
больших программ для крупных предприятий, но коммерческого успеха не
достиг. В конце 2004 года Borland объявила, что продолжит развитие
классического C++ Builder и объединит его со средой разработки Delphi,
прекратив, таким образом, разработку C++ BuilderX.
Спустя примерно год после этого объявления, Borland выпустила Borland
Developer Studio 2006, который включал в себя Borland C++ Builder 2006,
предлагавший улучшенное управление конфигурацией и отладкой. Borland
Developer Studio 2006 — единственный полноценный комплект, содержащий
Delphi, C++ Builder и C# Builder.
В 2007 CodeGear выпустила C++ Builder 2007, в котором реализовала
полную поддержку API Microsoft Windows Vista, увеличила полноту

PAGE \* MERGEFORMAT 11
соответствия стандарту ANSI C++, увеличила скорость компиляции и сборки до
500 %, включила поддержку MSBuild, архитектур баз данных DBX4 и «VCL для
Web», поддерживающий AJAX. Поддержка API Microsoft Windows Vista
включила в себя приложения, изначально оформленные в стиле Vista, и
естественную поддержку VCL для Aero и Vista Desktop. CodeGear RAD Studio
2007 содержит C++ Builder 2007 и Delphi. Также в 2007 CodeGear «воскресила»
марку «Turbo» и выпустила две «Turbo» версии C++ Builder: Turbo C++
Professional и Turbo C++ Explorer (бесплатный), основанных на Borland C++
Builder 2006.
В конце 2008 года компания CodeGear выпустила новую версию RAD
Studio, в которую вошли Delphi 2009 и С++ Builder 2009. В 2009 году в составе
RAD Studio вышел C++ Builder 2010.
Ранее сообщалось, что следующая версия, CodeGear C++ Builder (кодовое
имя «Commodore»), будет обладать поддержкой x86-64 и возможностью
создавать машинный x86-64 код. Однако в 2010 году в состав RAD Studio XE
включена версия C++ Builder XE без этой функциональности.

3. ОСНОВНАЯ ЧАСТЬ

PAGE \* MERGEFORMAT 11
1. Постановка задачи.

Многоканальная СМО с ограниченной очередью и ограниченным


временем ожидания в очереди.
Отличие такой СМО состоит в том, что время ожидания
обслуживания, когда заявка находится в очереди, считается случайной
величиной, распределённой по оказательному закону с параметром v = 1/tож.,
где tож - среднее время ожидания заявки в очереди, а v - имеет смысл
интенсивности потока ухода заявок из очереди. Граф такой СМО изображён на
рис. 1.

Рис.1.

Система является частным случаем системы рождения и гибели.


Выражения для нахождения вероятностей:

где β = ν/μ. Вероятность образования очереди роч определяется формулой:

PAGE \* MERGEFORMAT 11
Отказ в обслуживании заявки происходит, когда все m мест в очереди
заняты, т.е. вероятность отказа в обслуживании ротк равна

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

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


А = λQ.
Среднее число заявок, находящихся в очереди, находится по формуле:

Среднее число заявок, обслуживаемых в СМО, находится по формуле:

Среднее время пребывания заявки в СМО складывается из среднего


времени ожидания в очереди и среднего времени обслуживания заявки, т.е.

2. Программа.

Smo.h
#ifndef poH
#define poH

PAGE \* MERGEFORMAT 11
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
#include <Chart.hpp>
#include <ExtCtrls.hpp>
#include <Series.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TEdit *Edit4;
TEdit *Edit5;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TMemo *Memo1;
TButton *Button1;
TStringGrid *StringGrid1;
TStringGrid *StringGrid2;
TChart *Chart1;

PAGE \* MERGEFORMAT 11
TLineSeries *Series1;
TButton *Button2;
TImage *Image1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

smo.cpp
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "po.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

PAGE \* MERGEFORMAT 11
int fact(int a)
{
if(a <= 1)
return 1;
else
return a * fact(a - 1);
}

int n,m;
float l,mu,t,p0,ro,nu,b,p01=0,p02=0,q;
float pot,Q,A,L,tc,q1=1,q2,s=0;
float pk[10],pni[10];

void __fastcall TForm1::FormCreate(TObject *Sender)


{

Memo1->Clear();
Chart1->Series[0]->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
n=StrToInt(Edit1->Text);
m=StrToInt(Edit2->Text);
l= StrToFloat(Edit3->Text);
mu=StrToFloat(Edit4->Text);
t= StrToFloat(Edit5->Text);

StringGrid1->RowCount=n+1;
StringGrid2->RowCount=m+1;

PAGE \* MERGEFORMAT 11
StringGrid1->Cells[0][0]="Вероятность занятости ";
StringGrid2->Cells[0][0]="Вероятность очереди";

for(int i=1; i<=n;i++)


{
StringGrid1->Cells[0][i]=IntToStr(i)+ "мастера";
}

for(int i=1; i<=m;i++)


{
StringGrid2->Cells[0][i]=IntToStr(i)+ "чел.";
}

nu=1/t;
ro=l/mu;
b=nu/mu;

for(int i=1;i<=n;i++)
{
p01+=pow(ro,i)/fact(i);
}
for (int i=1;i<=m;i++)
{
q=1;
for (int j=1;j<=i;j++) q*=n+j*b;
p02+=pow(ro,i)/q;
}

p0=pow(1+p01+pow(ro,n)*p02/fact(n),-1);

PAGE \* MERGEFORMAT 11
Memo1->Lines->Add("p0 = "+FloatToStrF(p0,ffFixed,8,3));

pk[0]= p0;
for(int i=1;i<=n;i++)
{
pk[i]=pow(ro,i)*p0/fact(i);
StringGrid1->Cells[1][i]=FloatToStrF(pk[i],ffFixed,8,2);
}

for(int i=1;i<=m;i++)
{
q=1;
for (int j=1;j<=i;j++) q*=n+j*b;
pni[i]=pk[n]*pow(ro,i)/q;
StringGrid2->Cells[1][i]=FloatToStrF(pni[i],ffFixed,8,2);
}

for (int j=1;j<=m;j++) q1*=n+j*b;


pot=pk[n]*pow(ro,m)/q1;
Memo1->Lines->Add("Вероятность отказа в обслуживании =
"+FloatToStrF(pot,ffFixed,8,3));

Q=1-pk[n]*pow(ro,m)/q1;
Memo1->Lines->Add("Относительная пропускная способность =
"+FloatToStrF(Q,ffFixed,8,3));

A= l*Q;
Memo1->Lines->Add("Абсолютная пропускная способность =
"+FloatToStrF(A,ffFixed,8,3));

PAGE \* MERGEFORMAT 11
for (int i=1;i<=m;i++)
{
q2=1;
for (int j=1;j<=i;j++) q2*=n+j*b;
s+=i*pow(ro,i)/q2;
}
L=pk[n]*s;
Memo1->Lines->Add("Среднее число клиентов в очереди =
"+FloatToStrF(L,ffFixed,8,3));

tc=Q/mu+t;
Memo1->Lines->Add("Среднее время пребывания заявки =
"+FloatToStrF(tc,ffFixed,8,3));

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


{
Chart1->Series[0]->AddXY(i,pk[i],"",clTeeColor);
}

Image1->Width=200*(n+m);
Image1->Canvas->Pen->Color = clBlack; // Установка цвета карандаша
Image1->Canvas->Brush->Color = clWhite; // Установка цвета кисти

int h;
// квадратики
for(int i=0;i<=n+m;i++)
{
h=0;
h=(i+1)*120;
Image1->Canvas->Rectangle(30+h,30+50,90+h,90+50);

PAGE \* MERGEFORMAT 11
Image1->Canvas->TextOut(50+h,100,"S"+IntToStr(i));
}
//верх. линии
for(int i=1;i<=n+m;i++)
{
Image1->Canvas->MoveTo(90+120*i,95);
Image1->Canvas->LineTo(90+120*i+60,95);
}

//ниж.a линии
for(int i=1;i<=n+m;i++)
{
Image1->Canvas->MoveTo(90+120*i,125);
Image1->Canvas->LineTo(90+120*i+60,125);

for(int i=0;i<n;i++);
{
Image1->Canvas->TextOut(110+120*i,130,mu*i);
}
}

int z=0;
for(int i=n;i<=n+m;i++)
{
Image1->Canvas->TextOut(110+120*i,130, floor(mu*i+nu*z));
z++;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)

PAGE \* MERGEFORMAT 11
{
Chart1->Series[0]->Clear(); // Очистка графика
Memo1->Clear();
n=-1;
m=-1;

Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

StringGrid1->RowCount=n+1;
StringGrid2->RowCount=m+1;

StringGrid1->Cells[0][0]="Вероятность занятости ";


StringGrid2->Cells[0][0]="Вероятность очереди";

p01=0;
p02=0 ;
s=0;
}
//---------------------------------------------------------------------------

3. Результат.
Результаты работы программы изображены на рис. 1 и 2.

PAGE \* MERGEFORMAT 11
Рис. 1

Рис 2.

PAGE \* MERGEFORMAT 11
Введем данные:
Количество каналов (обслуживащих устройств), n = 3(рабочих, бригад и т.п.)
Количество заявок в очереди, m =4
Интенсивность потока заявок λ: 10 [час-1]
Интенсивность потока обслуживания μ: 3 [час-1] и tобс = (1/6)часа
Исчисляем показатели обслуживания многоканальной СМО:
1. Интенсивность нагрузки.

Интенсивность нагрузки ρ=3,33 показывает степень согласованности


входного и выходного потоков заявок канала обслуживания и определяет
устойчивость системы массового обслуживания.
3. Вероятность, что канал свободен (доля времени простоя каналов).
p0= 0,433
Следовательно, 43% в течение часа канал будет не занят, время простоя
равно tпр = 25,8 мин.
Вероятность того, что обслуживанием:
занят 1 канал:
p1 = 0.14
заняты 2 канала:
p2 = 0.24
заняты 3 канала:
p3 = 0.27
4. Вероятность, что в очереди
1 человек:
p1 = 0,18
2 человека:
p2 = 0,09
3 человека:
p3 = 0,03
4 человека:
p4 = 0,01
5. Доля заявок, получивших отказ.

PAGE \* MERGEFORMAT 11
Вероятность отказа в обслуживании pотк = 0.010
Значит, 1% из числа поступивших заявок не принимаются к
обслуживанию.
6. Вероятность обслуживания поступающих заявок.
Относительная пропускная способность: Q = 0.990
Следовательно, 99% из числа поступивших заявок будут обслужены.
Приемлемый уровень обслуживания должен быть выше 90%.
7. Абсолютная пропускная способность.
Абсолютная пропускная способность А = 9.901

8. Среднее число клиентов в очереди = 0.488

9. Среднее время пребывания заявки = 0.5 час

PAGE \* MERGEFORMAT 11
ЗАКЛЮЧЕНИЕ

В данной курсовой работе было рассмотрено программирование модели


многоканальной СМО с ограниченной длиной очереди и ограниченным
временем ожидания в очереди на языке С++. Решение задачи осуществлено с
помощью программы, реализованной в среде C++ Builder 6. В процессе
реализации работы СМО были получены результаты функционирования
системы. На основе полученных данных был построен график, позволяющие
провести исследование работы СМО.

PAGE \* MERGEFORMAT 11
СПИСОК ЛИТЕРАТУРЫ

1. Страуструп Б. Язык программирования C++. Специальное издание = The


C++ programming language. Special edition. — М.: Бином-Пресс, 2007.
2. Г. Шилдт. Полный справочник по C++ = C++: The Complete Reference. —
4-е изд. — М.: Вильямс, 2006.
3. Дж. Либерти. Освой самостоятельно C++ за 21 день. 4-е изд. — М.:
Вильямс, 2007.
4. А.Я. Архангельский, М.А. Тагин. Программирование в C++Builder 6 и
2006. – М.: 000 «Бином-Пресс», 2007 г.
5. Клейнрок Л. Теория массового обслуживания
6. Матвеев В. Ф., Ушаков В. Г. Системы массового обслуживания
7. Лифшиц А. Л., Мальц Э. А. Статистическое моделирование систем
массового обслуживания

PAGE \* MERGEFORMAT 11

Вам также может понравиться