SIMPAS3 (Симулятор)
Описание файла
Файл "SIMPAS3" внутри архива находится в следующих папках: Симулятор, SIMPAS. Текстовый-файл из архива "Симулятор", который расположен в категории "". Всё это находится в предмете "военная кафедра" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр текстового-файла онлайн
Возможно не удалось распознать кодировку файла
2МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им М.В.ЛОМОНОСОВА
2Отделение военной подготовки
Кафедра Войск ПВО
"УТВЕРЖДАЮ"
Начальник военной кафедры Войск ПВО
полковник О.Шалин
" " 1994 г.
2Методическая разработка
для проведения занятий по разделу
2"Методы моделирования и исследования боевой
2эффективности образцов вооружения и военной техники"
профиль 2ВУС 530700
2Тема 7. Средства имитационного моделирования
Занятие 2. Использования моделирующей системы для
определения показателей эффективности
Вопросы: 1,2
Время 2 часа.
Обсуждена на заседании цикла 24
" " 1994 г.
ПРОТОКОЛ
Москва 1994 г.
.
2
2Вопрос 1. Пример использования pss для моделирования
2системы массового обслуживания с очередью, ограниченной
2по времени ожидания.
Модифицируем рассмотренную ранее программу оценки СМО, ис-
пользуя статистические операторы языка simpas.
Требуется:
оценить эффективность системы массового обслуживания с огра-
ниченным временем ожидания и с приоритетом обслуживания по мини-
мальному времени нахождения в очереди.
В систему, состоящую из n однородных каналов, поступает поток
требований с интенсивностью lam. Поток обслуживания каждого кана-
ла характеризуется интенсивностью mju. Требование, заставшее все
каналы занятыми, становится в очередь, где на него действует по-
ток ухода из очереди необслуженного требобания с интенсивностью
nju.
Освободившийся канал, при наличии очереди, обслуживает требо-
вание с минимальным временем нахождения в очереди.
Определить показатели эффективности системы:
- вероятность обслуживания требования в системе;
- вероятность прохождения требования через очередь;
- среднее число каналов занятых обслуживанием.
Такое изменение в постановке задачи означает, что очередь СМО
представляет из себя стек, где каждое требование, поступившее
последним, будет обработано первым. Но поскольку приход заявок
случаен, а информация о времени хранится в управляющем списке
только в виде момента планируемого выхода требования из очереди
необслуженным, то возникает необходимость сформировать данные о
времени постановки в очередь и сопоставить эти данные с соответс-
твующим элементом управляющего списка.
Опишем datatype=real для сохранения в данных времени поступ-
ления в очередь.
Будем использовать следующие переменные:
l - количество реализаций модели, которые нужно произвести;
n - количество каналов в СМО;
m - количество требований входного потока, которые необходимо ге-
нерировать (воспроизвести);
s - накопитель информации о загруженности каналов;
.
3
lam, mju, nju - параметры потоков поступления, обслуживания и вы-
хода из очереди необслуженных требований;
t - максимальная продолжительность одной реализации модели;
a - рабочая переменная для поиска адреса элемента списка;
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 - от-
каз. Для организации входного потока использована константа pois-
son - Пуассон. Описан тип данных, используемых для хранения вре-
мени и необходимые переменные.
.
4
Операторами %include ... в соответствии с правилами Паскаля в
определенных разделах программы производится подключение соот-
ветствующих фрагментов из pss-библиотеки.
Оператор initiate устанавливает системные переменные в исход-
ное состояние, которое может быть впоследствии изменено,например:
переменной inform может быть присвоено значение, определяющее вид
выводимой информации и остановы программы для этапа отладки; пе-
ременная rnd_int может быть установлена так, чтобы изменилась ис-
ходная последовательность генератора ПСЧ.
Затем производится серия запросов и ввода исходных значений
переменных модели.
В переменной s будем накапливать на каждый момент появления
на входе системы очередного требования количество каналов, заня-
тых обслуживанием, для того чтобы впоследствии усреднить эту ве-
личину по количеству пришедших требований.
Последние операторы назначают сбор статистических данных для
всех типов событий в модели.
Управляющий алгоритм модели имеет следующий вид:
repeat
generate(demand,poisson,lam,0,m); {Установка генерации потока}
start(demand,negexp(lam),nil,t); {Установка первой заявки}
while simulate do case actnumb of
demand: <программа обработки>;
service: <программа обработки>;
failure: <программа обработки>;
end;
until repeater = l;
.
5
Программа обработки события 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;