Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Кто-нибудь сталкивался с написанием моделирования системы   Найти похожие ветки 

 
Ryser   (2002-09-21 15:40) [0]

массового обслуживания? Ну, например, Модель автоматической телефонной станции. Есть там параметры всякие... Необходимо промоделировать работу телефонной станции в течение L часов. В ходе моделирования определить вероятность отказа, среднюю долю времени, в тече-ние которого телефонная станция вообще не загружена.
Может, посоветуете что-нибудь? Нужно понять сам алгоритм решения :(((


 
Юрий Зотов   (2002-09-21 17:18) [1]

Система состоит из N каналов (заводим массив). Каждый канал (запись или объект) характеризуется:

1. Типом или типами задач, которые он умеет исполнять (заводим перечислимый тип задач).
2. Производительностью (число - P операций в единицу времени).
3. Надежностью (число - T единиц времени бесперебойной работы).
4. Состоянием - свободен/занят/отказал (заводим перечислимый тип состояний каналов) и, если занят, то процент выполнения текущей задачи (время ее исполнения по отношению к объему задачи).

На вход системы (через определенные промежутки времени или хаотически) поступают задачи (заводим очередь задач (FIFO) - общую или свою для каждого типа задач). Каждая задача (запись) характеризуется:

1. Своим типом (уже завели - см. выше).
2. Объемом (число - кол-во единиц времени для ее выполнения).

Дополнительное поле в записи о задаче - ссылка на следующую запись (нужно для формирования очереди). Если задача последняя, там сидит nil. Должна быть переменная - указатель на начало очереди (если очередь пустая, там тоже сидит nil). То есть, это стандартный связанный список.

Как только имеется свободный канал, умеющий выполнять тип имеющейся в очереди задачи, она выбирается из очереди и поступает на выполнение в данный канал. С этого момента канал помечается, как занятый. Освободится он по истечении времени, не меньшего, чем объем этой задачи - и тогда либо займется новой задачей, либо будет простаивать и ждать, когда в очереди появится задача доступного ему типа (после чего займется ею). По истечении времени, не меньшего, чем время бесперебойной работы этого канала, он считается вышедшим из строя и удаляется из системы (навсегда или временно - если учитывать возможность ремонта и время ремонта). Если задача завершена, или обслуживавший ее канал вышел из строя, она удаляется из системы.

Далее задаем квант времени (числовая константа - чем меньше, тем точнее моделирование) и крутим цикл по времени (числовая переменная) от нуля до заданного времени L с приращением, равным кванту. Здесь мы обновляем состояние очереди (поступление задач), а далее крутим внутренний цикл - по каналам. В нем сначала определяем состояние каждого канала, а затем, если требуется, обновляем его и состояние очереди (выборка задач и удаление выполненных или повисших задач). Параллельно накапливаем нужную статистику.

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

Вот и все.
:о)

P.S.
Эта же программа годится для моделирования работы магазина, автосервиса, ресторана, некоторых технических устройств - любой системы массового обслуживания.


 
Andrey Shakula   (2002-09-23 10:04) [2]

Насколько помню из института - это все делается на основе сетей Петри.


 
AFrolov   (2002-09-23 10:51) [3]


> Далее задаем квант времени (числовая константа - чем меньше,
> тем точнее моделирование) и крутим цикл по времени (числовая
> переменная) от нуля до заданного времени L с приращением,
> равным кванту. Здесь мы обновляем состояние очереди (поступление
> задач), а далее крутим внутренний цикл - по каналам. В нем
> сначала определяем состояние каждого канала, а затем, если
> требуется, обновляем его и состояние очереди (выборка задач
> и удаление выполненных или повисших задач). Параллельно
> накапливаем нужную статистику.


Наиболее правильным является подход пособытийного рассмотрения жизни системы. Т.к. моменты когда ничего не происходит интереса не представляют.
Жизненый цикл любой заявки представляет сопряжен с рядом событий (приход заявки, поступление на обслуживание, завершение обслуживания и т.д.). При этом между событиями состояние заявки не изменяется. При этом все характеристики для получения статистик получаются как разность времени между событиями. По сравнению с методом предложенным Юрий Зотов © (21.09.02 17:18) данный подход имеет 2 приемущества -
1. Время моделирования намного меньше
2. Ошибки дискретизации времени равны 0





 
REA   (2002-09-23 12:10) [4]

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


 
3asys   (2002-09-23 12:16) [5]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1031915428&n=0
Может что-нибудь найдете для себя.

С Уважением, 3asys


 
3asys   (2002-09-23 12:17) [6]

Извините! не туда скопировал -))

С Уважением, 3asys



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
1-7953
AFrolov
2002-09-20 17:39
2002.10.03
Как узнать выделена строка в StringGrid или нет?


1-7962
Irisha
2002-09-23 22:36
2002.10.03
Можно ли в TDrawGrid вставить комбобокс


1-7942
Link
2002-09-19 19:23
2002.10.03
Закачка названий файлов из директории в ComboBox


7-8197
МИФИст
2002-07-26 21:35
2002.10.03
Как запустить...


1-7943
Бегинер
2002-09-24 02:53
2002.10.03
Paskal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский