Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Смоделировать СМО, система массового обслуживания 
V
    Опции темы
Fally
Дата 2.4.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Здравствуйте, в универе получил задание, необходимо смоделировать СМО, но проблема в том, что я вообще не имею представления о том, как её делать.

Вот текст задания:

Система массового обслуживания состоит из обрабатывающего аппарата (ОА) и очереди заявок 2-х типов.

          T1           ___________________              ____              T2
>--------------+------|____|____|____|____|------------|_ОА_|-------+---------->
               |                                                    |
               ^                                                T3  v
               |                                                    |
               +------------------------<---------------------------+




Заявки 1-го типа поступают в "хвост" очереди по случайному закону с интервалом времени T1, равномерно распределённым от 0 до 5 едениц времени (е.в.). В ОА они поступают из "головы" очереди по одной, и обслуживаются также равновероятно ха время T2 от 0 до 4 е.в., после чего покидают систему.

Единственная заявка 2-го типа постоянно обращается в системе, обслуживаясь в ОА равновероятно за время Т2 от 0 до 4 е.в. и возвращаясь в очередь не далее 4-й позиции от её "головы". В начале процесса заявка второго типа входит в ОА, оставляя пустую очередь.

Смоделировать процесс обслуживания первых 1000 заявок 1-го типа, выдавая после обслуживания каждых 100 заявок информацию о текущей и средней длине очереди, а в конце процесса - общее время моделирования и количества вошедших в систему и вышедших из неё заявок 1-го типа.



Пожалуйста помогите мне с этим ужасом, что к чему, зачем и как здесь делать? или ссылки на материал по этой теме дайте (яндексом ничего не шашёл).
Заранее благодарен.

Это сообщение отредактировал(а) Fally - 2.4.2007, 15:22


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



В чём собственно проблема?
Генерируем времена поступления 1000 заявок в систему...
Первая заявка - от 0 до 5... пускай рандомом выпало 3, тогда время следующей генерируется и прибавляется к времени старта предыдущей(если я правильно понял задание)... пускай у второй сгенерировалось 2, значит она войдёт в систему в момент времени 3+2=5... smile строим массив на 1000 заявок...
(3),(5),...
Отлично, теперь мы знаем последовательность прихода заявок в систему по временам, соответственно будем знать, какое событие произойдёт следующим...
первое событие происходит во время 3 - приход первой заявки. Устанавливаем текущее время равным 3. ОА свободен, поэтому ставим заявку на обслуживание. Генерируем время обработки заявки - пускай 3. Тогда время освобожения ОА = текущее + 3 = 6.
Следующее событие приход в систему второй заявки - текущее время 5. Смотрим, ОА - занят, ставим в буффер.
Следующее время - 6. Событие освобождение ОА. Смотрим, есть ли что в буффере? Есть - в ОА, сдвигаем буффер, нет - идём на следующее событие.
И т.д. и т.п. + надо ещё учесть блуждающую заявку типа 2.
Понятно?

Это сообщение отредактировал(а) Ryoga - 2.4.2007, 17:03
PM MAIL   Вверх
Fally
Дата 2.4.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(Ryoga @  2.4.2007,  16:58 Найти цитируемый пост)
Генерируем времена поступления 1000 заявок в систему...


В этотм то вся проблема, что время поступления не обязательно целое число + между поступлениями заявок могут быть разные интервалы времени.
И как раз в заявки типа 2 тоже есть проблема, т.к. она иногда будет вклиниваться в очередь.

P.S. При этом ни в коем случае время в модели не должно быть связано с временем реальным.

Это сообщение отредактировал(а) Fally - 2.4.2007, 17:03


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



И что, что не целое?
Ну будет у Вас массив (3,5),(5,8),... какая разница? Зная текущее время, время освобождения ОА, и следующей заявки, Вы знаете, что за событие у Вас будет обрабатываться в следующий "момент"... Собственно, ищем минимум от текущего времени между, следующей заявки поступающей в систему и освобождением ОА...
Событие приход заявки - обрабатываете так, освобождение ОА - так...
В смысле вклиниваться?
З.Ы.: О реальном времени никто не говорит...
PM MAIL   Вверх
Fally
Дата 2.4.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(Fally @  2.4.2007,  15:20 Найти цитируемый пост)
Единственная заявка 2-го типа постоянно обращается в системе, обслуживаясь в ОА равновероятно за время Т2 от 0 до 4 е.в. и возвращаясь в очередь не далее 4-й позиции от её "головы". 


То есть, если в очереди было более 4 заявок 1-го типа, то заявка 2-го типа становится на 4-ую позицию, а вся очередь сдвигается в сторону хвоста.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



Ну, отлично... поставили заявку второго типа на позицию 4, а заявки первого типа, с четвёртой и т.д. сдвинули на единицу к хвосту... проблема то в чём?
PM MAIL   Вверх
apook
Дата 2.4.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Цитата

сдвигается в сторону хвоста.

неужели она вталкнет элемент очереди в ОА
а вообще сделано так чтоб добавлялось все-же меньше чем
успевает обрабатывать OA (вероятно так) хотя генератор случайных
чисел если специално.... smile ну да ладно Да и массив сдесь не нужен
наверно вообще странная задача не знаешь даже с чего начать хоть
бы OA что нибудь делал


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Fally
Дата 2.4.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Так эт я ступил. А как вообще организовать это "повременное" добавление заявок в очередь?
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



Никто никого не втолкнёт, наоборот. Очередь, как я понял ФИФО...
Массив не обязателен, можно просто каждый раз генерировать время входа следующей заявки...
PM MAIL   Вверх
Fally
Дата 2.4.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



ситуация такая, что ОА их "обслуживает", т.е. достаточно просто её из очереди цдалить и всё + где-нибудь сделать отметку о времени обработки, сразу после того, как обработана заявка берём следующую из очереди, если та непуста. Вторая заявка ничего никуда не вталкивает, а просто в очереди не далее четвёртой позиции от головы очереди.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



Цитата

а вообще сделано так чтоб добавлялось все-же меньше чем
успевает обрабатывать OA (вероятно так) 

Если будет добавляеться в систему заявок со скоростью меньше, чем обрабатывает ОА, то тогда буффер очереди будет пустовать... так что, это врятли...
PM MAIL   Вверх
Fally
Дата 2.4.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Мне препод говорил, что ситуация может быть любой, будь то пустая очередь или наоборот в ней может быть оч. много эл-тов.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
apook
Дата 2.4.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Цитата

А как вообще организовать это "повременное" добавление заявок в очередь?

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

Допустим организовать одно просто а вот второе смутно выглядит


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ryoga
Дата 2.4.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: 2
Всего: 6



Fally, либо я не понимаю Вашу задачу, либо я не понимаю, что Вы не понимаете... smile я реализовывал систему массового обслуживания в универе - ничего сложного там нет. Что там "смутно выглядит" мне не понятно...
Попробую записать, как я понял, может выяснится, что что-то не так...

вход           буффер         ОА           выход
                    ---     ---
---->--------- | | |...| | | ---- |*|------->
                    ---     ---
Правила:
1) Заявки приходят со входа, обрабатываются ОА и уходят на выход.
2) Если ОА занят, то заявка становится в буффер.
3) Когда освободится ОА, если в буффере есть заявка, она берётся оттуда по методу ФИФО (первый пришёл, первый вышел).
4) Если в буффер ставится заявка типа 2, тогда - если количество элементов там больше 3, все заявки в буффере с номером больше 3 сдвигаются, а заявка с типом 2 ставится на позицию 4.
5) Если обработанная заявка ОА является заявкой типа 2, то подаём её на вход, если нет, на выход.
Похоже?
Отлично... Итак схема... * - заявка.
                   -----    ------
-*->--------- | |*|...|*|*| ---- |*|------->
                   -----    ------
tz                  nm       n1      toa

t - текущее время.
tz - время прихода в системы следующей заявки со входа. (Понятно как считать?)
toa - время освобождения ОА от обрабатываемой заявки. (Понятно, как считать?)
n1...nm - индексы буффера, определяющие, что в этих ячейках находится заявка.
t,tz,toa - виртуальное время (просто числа типа float). Никакого отношения к реальному не имеет!

Следующий момент времени, который надо рассмотреть, определяется так.
  t = МИН(tz,toa).
отлично, перемещаемся в этот период времени.
  Если t = tz (событие "пришла заявка"):
ОА свободно? Если да, ставим на обслуживание. Нет - в буффер (постановка в буффер см. правила).
  Если t = toa (событие "освобожение ОА"):
Если заявка = 1, то выход. Если заявка = 2 - событие "пришла заявка 2" (m>3 - сдвигаем и т.д.).
И т.д.

Понятно?

Это сообщение отредактировал(а) Ryoga - 2.4.2007, 21:02
PM MAIL   Вверх
Fally
Дата 2.4.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



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


 smile 
Вопрос для Ryoga: А на каком курсе университета вы делали СМО? У нас просто это дали на 1-ом + сказали выучить С++ на первой лабе, до этого речь шла о паскале... Вот и результат, что в голове начинается каша и непонятки со всеми этими СМО.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.