Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Моделирование СМО

Автор:   •  Май 17, 2022  •  Контрольная работа  •  972 Слов (4 Страниц)  •  129 Просмотры

Страница 1 из 4

Необходимо провести моделирование СМО, неограниченную содержащей очередь и один канал обслуживания (“прилавок”). Вероятность прихода требования на обслуживание (человека к прилавку)  , вероятность того, что обслуживание заявки завершено (прилавок освободился) . Длительность моделируемого промежутка времени  минут, количество имитаций (экспериментов) . [pic 1][pic 2][pic 3][pic 4]

        Переменных будет три:

  1. KO – переменная отражающая состояние канала обслуживания. Может принимать значения True и False/
  2. Qu – целочисленная переменная, хранит значение длины очереди.
  3. Sum_qu – целочисленная переменная, в которой будет храниться сумма всех значений длины очереди, получавшихся за все 100 экспериментов. Используется для расчета средней длины очереди.

Далее, на рисунках 1-4, изображены блок – схемы. На 1-й блок – схеме изображена общая схема работы программы, имитирующей поведение рассматриваемой СМО. На блок – схемах, изображенных на рисунках 2 – 4 приведены непосредственно необходимые функции, присутствующие в программе.

[pic 5]

Рисунок 1 – Общая блок – схема программы

 

[pic 6]

Рисунок 2 – Функции come(), gone() и service_end()

        На рисунке 2 показаны блок – схемы функций come(), gone() и service_end(). Их назначение заключается в следующем:

  1. Come() – моделирует поступление требования с указанной вероятностью
  2. Gone() – модулирует окончание обслуживания требования с заданной вероятностью
  3. 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()

...

Скачать:   txt (7.1 Kb)   pdf (288.2 Kb)   docx (682.8 Kb)  
Продолжить читать еще 3 страниц(ы) »
Доступно только на Essays.club