Моделирование СМО
Автор: dim111190 • Май 17, 2022 • Контрольная работа • 972 Слов (4 Страниц) • 178 Просмотры
Необходимо провести моделирование СМО, неограниченную содержащей очередь и один канал обслуживания (“прилавок”). Вероятность прихода требования на обслуживание (человека к прилавку) , вероятность того, что обслуживание заявки завершено (прилавок освободился) . Длительность моделируемого промежутка времени минут, количество имитаций (экспериментов) . [pic 1][pic 2][pic 3][pic 4]
Переменных будет три:
- KO – переменная отражающая состояние канала обслуживания. Может принимать значения True и False/
- Qu – целочисленная переменная, хранит значение длины очереди.
- Sum_qu – целочисленная переменная, в которой будет храниться сумма всех значений длины очереди, получавшихся за все 100 экспериментов. Используется для расчета средней длины очереди.
Далее, на рисунках 1-4, изображены блок – схемы. На 1-й блок – схеме изображена общая схема работы программы, имитирующей поведение рассматриваемой СМО. На блок – схемах, изображенных на рисунках 2 – 4 приведены непосредственно необходимые функции, присутствующие в программе.
[pic 5] |
Рисунок 1 – Общая блок – схема программы |
[pic 6] |
Рисунок 2 – Функции come(), gone() и service_end() |
На рисунке 2 показаны блок – схемы функций come(), gone() и service_end(). Их назначение заключается в следующем:
- Come() – моделирует поступление требования с указанной вероятностью
- Gone() – модулирует окончание обслуживания требования с заданной вероятностью
- Service_end() – определяет, занят ли канал обслуживания и определяет, завершилось обслуживание требования или нет
[pic 7] |
Рисунок 3 – функция service_on() |
На рисунке 3 показана блок – схема функции service_on(). Данная функция выполняет проверку, пришло ли требование на обслуживание и свободен ли канал обслуживания, и, если оба эти условия выполнены, производит постановку требования в очередь. В противном случае, если канал свободен и требование поступило, происходит установка канала обслуживания в состояние True (то есть “занят”). И, если ни канал не занят, ни требование не пришло, то очередь проверяется на пустоту и если она не пуста, требование берется из нее и канал обслуживания переходит в состояние True.
[pic 8] |
Рисунок 4 – функция main() |
В функции main() (рисунок 4), происходит непосредственно имитация СМО путем использования (вызова) описанных выше функций.
В листинге 1 приведен исходный код программы имитатора на языке программирования Python.
Листинг 1 – Программа – имитатор |
import pandas as pd from random import random qu = 0 KO = False def come(): if random()<=0.4: print("Человек пришел к прилавку") return True else: print("Человек не пришел к прилавку") return False def service_on(): global KO global qu c = come()
if KO==True and c: qu+=1 print("Канал занят, длина очереди: "+str(qu)) elif KO==False and c: print("Канал занят, длина очереди: "+str(qu)) KO = True elif KO==False and not c and qu!=0: KO=True qu-=1 print("Канал занят, длина очереди: "+str(qu)) else: pass def gone(): if random()<=0.3: print("Человек ушел с прилавка") return True else: print("Человек не ушел с прилавка") return False
def service_end(): global KO g = gone()
if KO==True and g: print("Канал освободился") KO=False else: pass
def main(): sum_q = 0 lens = [] x = [x for x in range(1, 101,1)]
global qu global KO E=100
for exp in range(1, E+1, 1): print("Имитация №"+str(exp)) qu=0 KO=False for times in range(1, 21, 1): print("Иетарция №"+str(times)) service_on() service_end() print("\n") lens.append(qu) sum_q+=qu print("Длина очереди по окончании эксперимента: "+str(qu)) print("\n\n\n") df = pd.DataFrame({'№':x, 'Value':lens}) df.to_excel('exper.xlsx')
print("Остаточные длины очередей в каждом эксеперименте:") for i in range(len(lens)): print("Эксперимент №"+str(i)+", длина очереди - "+str(lens[i]))
print("Средняя длина очереди по окончании моделирования: "+str(sum_q/E)) if __name__=="__main__": main() |
...