r5 (1123694), страница 2

Файл №1123694 r5 (Методичка и она же лекции) 2 страницаr5 (1123694) страница 22019-05-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Lam, Mju, Nju - параметры потоков поступления, обслуживания и выхода из очереди необслуженных

требований;

Т - максимальная продолжительность одной реализации модели;

А - рабочая переменная для поиска адреса элемента списка;

Z - рабочая переменная для поиска по времени поступления в очередь.

Начало программы может быть следующим:

program Example2 (input, output);

const

Demand = 1; {Событие поступления требования}

Service = 2; {Событие обслуживания требования}

Failure = 3; {Событие необслуживания требования}

Poisson =2; {Идентификатор пуассоновского потока}

type %include ‘type.pss’ ;

DataType = real;

var %include ‘var.pss’ ;

L, N, M, S: integer; Lam, Mju, Nju, T, Z: real; A: NotePntr;

%include ‘proc.pss’ ;

begin

Initiate;

writeln (‘ Ввод исходных данных системы массового обслуживания:’);

write (‘ Каналов обслуживания =’); readln (N);

write (‘ Параметр потока поступлен. заявок =’); readln (Lam);

write (‘ Параметр потока обслужив. заявок =’); readln (Mju);

write (‘ Параметр потока прохождения очереди =’) readln (Nju);

write (‘ Продолжительность модели =’) readln (T);

write (‘ Количество заявок во входном потоке =’) readln (M);

write (‘ Количество реализаций модели =’) readln (L);

S: =0;

Statistics ( Demand ); Statistics ( Service ); Statistics ( Failure );

Здесь производится описание номеров событий, которые могут иметь место в модели, в виде констант с названиями события:

Demand - заявка, требование; Service - обслуживание; Failure - отказ. Для организации входного потока использована константа Poisson - Пуассон. Описан тип данных, используемых для хранения времени и необходимые перемены.

Операторами %include ... в соответствии с правилами Паскаля в определенных разделах программы производится подключение соответствующих фрагментов на PSS-библиотеки.

Оператор Initiate устанавливает системные переменные в исходное состояние, которое может быть впоследствии изменено, например: переменной Inform может быть присвоено значение, определяющее вид выводимой информации и остановы программы для этапа отладки; переменная RDN_INT может быть установлена так, чтобы изменилась исходная последовательность генератора ПСЧ.

Затем производится серия запросов и ввода исходных значений переменных модели.

В переменной S будем накапливать на каждый момент появления на входе системы очередного требования количество каналов, занятых обслуживанием, для того чтобы впоследствии усреднить эту величину по количеству пришедших требований.

Последние операторы назначают сбор статистических данных для всех типов событий в модели.

Управляющий алгоритм модели имеет следующий вид:

repeat

Generate (Demand, Poisson, Lam, O, M); {Установка генерации потока}

Start (Demand, NegExp (Lam), nil, T); {Установка первой заявки}

while Simulate do case ActNumb of

Demand: <программа обработки>;

Service: <программа обработки>;

Failure: <программа обработки>;

end;

until Repeater = L;

Программа обработки события Demand - поступления требования:

Demand: begin S:=S+Have(Service); {Суммируем количества требований}

{находящихся на обслуживании, то}

{есть количество занятых каналов}

if Have (Service) < N {Если заняты не все каналы,}

then Prepare (Service, NegExp (Mju), nil) {тогда ставим}

{требование на обработку}

else {В противном случае}

begin New (Addr); {динамически создаем данные,}

Addr^ := ActTime; {помещаем в них текущее время,}

Prepare (Failure, NegExp(Nju), Addr) {ставим в очередь}

end

end;

Для создания в памяти данных здесь используется вспомогательная переменная Addr - адрес данных, Addr^ - обращение к содержимому данных.

Программа обработки события Service - требование обслужено:

Service: if Have (Failure) > 0 then {Если в очереди что-то есть}

begin {то ищем в управляющем списке}

Route:=Node; {начиная с головы,}

A:=nil; Z:=0; {присвоив начальный адрес и время,}

repeat Route:=Route^.Prev; {в сторону уменьш-я времени.}

if Route^.Numb=Failure then {Если это событие - очередь}

if Route^.Addr^ > Z then {и время поступления туда}

{более позднее, чем отслеживаемое в Z, тогда}

begin A:=Route; Z:=Route^.Addr^ end {запоминаем}

{адрес события и время его поступления в очередь}

until Route=Node; {пока не закончится список.}

Addr:=Cancel (A); {Уничтожим событие в списке и}

Dispose (Addr); {его данные.}

Prepare (Service, NegExp (Mju), nil) {Подготовим событие}

{обслуживания требования.}

end;

В начале поиска вспомогательной переменной Route присваивается адрес головы списка, а затем, при поиске нужного элемента списка этот адрес продвигается: Route:=Route^.Prev . Для прохода по списку выбрано движение в сторону уменьшения времени, но это не обязательно, так как проверяется весь список. В проверке использована конструкция if (..) then if (..) then .. поскольку, в данном случае нельзя применить сложную логическую проверку типа: if (..) and (..) then .. , из-за того, что данные можно анализировать только тогда, когда они существуют.

После прохода по списку (до головы) в А обязательно содержится адрес того события, которое относится к очереди и имеет максимальное время в своих данных. С помощью оператора Cancel данное событие из списка удаляется, а в Addr передается ссылка на данные, которые тоже удаляются из памяти оператором Dispose.

Затем, поскольку требование из системы не исчезло, а было взято на обслуживание освободившимся каналом, мы формируем событие обслуживания.

Программа обработки события Failure - выход без обслуживания:

Failure: Dispose (ActAddr); {Уничтожим данные этого события}

Окончание программы имеет вид:

writeln (‘============ Результаты моделирования ============’);

writeln (‘Вероятность обслуживания каналами =’ ,

Done (Service) / (Done (Service)+Done (Failure)): 8: 3);

writeln (‘Вероятность прохождения очереди =’ ,

Done (Service) / (Done (Service)+Done (Failure)): 8: 3);

writeln (‘Среднее число занятых каналов =’ ,

S/Repeater/Done (Demand): 8: 3);

end.

Оператор Done возвращает значение соответствующего счетчика статистической информации поделенное на количество проведенных реализаций (усредненное), поэтому применять их следует после окончания моделирования. В связи с этим же при подсчете среднего числа занятых каналов необходимо ввести деление на Repeater накопленного значения в S.

УЧЕБНЫЙ ВОПРОС 4

Пример использования PSS для моделирования системы массового обслуживания с ограничением очереди по времени ожидания и по длине.

Данную задачу предлагается решить на занятии самостоятельно, например в виде контрольной работы. Фактически требуется только написать программу деятельности отработки события поступления в систему требования. Логика программы изменится в плане необходимости проведения еще одной проверки перед формированием события постановки в очередь. Теперь, если все каналы заняты, нужно убедиться, что в очереди еще есть свободное место. Для этой проверки можно использовать оператор Have. Для хранения максимального количества заявок в очереди объявим переменную М 0 .

Demand: begin S:=S+Have (Service); {Суммируем количества требований}

{находящихся на обслуживании, то}

{есть количество занятых каналов.}

if Have (Service) < N {Если не заняты все каналы,}

then Prepare (Service, NegExp (Mju), nil){тогда ставим}

{требование на обработку}

else {В противном случае,}

Have (Failure) if < М 0 then {если очередь не заполнена, то}

begin New (Addr); {динамически создаем данные,}

Addr^ := ActTime; {помещаем в них текущее время,}

Prepare (Failure, NegExp (Nju), Addr) {ставим в очередь}

end

end;

При выводе результата следует учесть те заявки, которые не попали ни на обслуживание, ни в очередь:

writeln (‘Вероятность обслуживания каналами =’ ,

Done (Service) / Done (Demand): 8: 3);

writeln (‘Вероятность прохождения очереди =’ ,

Prep (Failure) / Done (Demand): 8: 3);

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

writeln (‘Вероятность занятости очереди =’ ,

(1 - ( Prep (Failure) + Prep (Service) ) / Done (Demand) ): 8: 3);

Методическую разработку составил п/п-к Липовенко А.Г.

Методическое пособие доработано

Подполковник Швыдков С.А

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

Тип файла
Документ
Размер
96,5 Kb
Тип материала
Высшее учебное заведение

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

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