Главная страница
Навигация по странице:

  • Задание 2 Вариант 13 Условие

  • Решение Код

  • Задание 3 Вариант 13 Условие

  • Задание 4 Вариант 13 Условие Решение Код Результаты Задание 5 Вариант 13 Условие

  • ММТМО. Решение Код import math from decimal import Decimal


    Скачать 0.76 Mb.
    НазваниеРешение Код import math from decimal import Decimal
    АнкорММТМО
    Дата28.03.2022
    Размер0.76 Mb.
    Формат файлаdocx
    Имя файлаmmtmo.docx
    ТипРешение
    #423402
    Задание 1 Вариант 13
    Условие




    Решение














    Код


    import math

    from decimal import Decimal

    import matplotlib.pyplot as plt
    lam = 1.5

    mu = 1.2

    v = 0.5

    k = 1

    alpha = lam / mu

    betta = v / mu
    eps = .00000001

    def get_r():

        r = 1

        while ((alpha / betta)**r / math.factorial(r-1)) * math.exp(alpha / betta) > eps:

            r += 1

        return r

    limit = get_r()

    print('r = ', limit)

    def calc_on_n(n, alpha):

        return alpha**n / math.factorial(n)

    def calc_coef_div(k):

        return math.factorial(k)

    def calc_mul_on_s(s, k, betta):

        mul_on_s = 1

        for m in range(1, s + 1):

            mul_on_s *= k + m*betta

        return mul_on_s

    def get_p_0(k, limit, alpha, betta):

        sum_on_k = 0

        for n in range(k + 1):

            sum_on_k += calc_on_n(n, alpha)
        coef = alpha**k / calc_coef_div(k)
        sum_on_lim = Decimal(0)

        for s in range(1, limit + 1):

            sum_on_lim += Decimal(Decimal(alpha)**Decimal(s)

                                  ) / Decimal(calc_mul_on_s(s, k, betta))
        return float(1 / (Decimal(sum_on_k) + Decimal(coef) * sum_on_lim))

    def get_p_n(n, k, limit, alpha, betta):

        return calc_on_n(n, alpha) * get_p_0(k, limit, alpha, betta)

    def get_b(k, limit, alpha, betta):

        b = 0

        for s in range(1, limit+1):

            b += s*get_p_ks(s, k, limit, alpha, betta)

        return b

    def get_p_otk(k, limit, alpha, betta):

        return get_b(k, limit, alpha, betta) * betta / alpha

    def get_p_ks(s, k, limit, alpha, betta):

        return alpha**(k+s) / (calc_coef_div(k) * calc_mul_on_s(s, k, betta)) * get_p_0(k, limit, alpha, betta)

    def get_avg_queue(k, limit, alpha, betta):

        return sum([s * get_p_ks(s, k, limit, alpha, betta) for s in range(1, limit + 1)])

    def count_cost(k, limit, alpha, betta):

        k_cost = 400

        product_cost = 1000

        total_cost_arr = []

        k_arr = []

        for temp_k in range(k, k+11):

            k_arr.append(temp_k)

            total_cost = get_p_otk(temp_k, limit, alpha, betta) * \

                lam * 30 * product_cost + temp_k*k_cost

            total_cost_arr.append(total_cost)

        fig, ax = plt.subplots()

        ax.set_xlabel('Кол-во торговых точек')

        ax.set_ylabel('Средние суммарные затраты')

        ax.plot(k_arr, total_cost_arr, marker='o')

        for i in range(len(k_arr)):

            ax.annotate(

                f'({k_arr[i]}; {round(total_cost_arr[i], 3)})', (k_arr[i], total_cost_arr[i]))

        plt.show()

    print('Вероятность того, что магазин будет свободен от продажи: ',

          get_p_0(k, limit, alpha, betta))

    print('Вероятность того, что привезенные фрукты не будут своевременно проданы: ',

          get_p_otk(k, limit, alpha, betta))

    print('Среднее количество тонн фруктов, доставленных в магазин и проданных в течение месяца: ',

          (1 - get_p_otk(k, limit, alpha, betta))*lam*30)

    print('Среднее количество тонн фруктов, доставленных в магазин в течение месяца и потерянных в результате хранения: ',

          get_p_otk(k, limit, alpha, betta) * lam * 30)

    print('Среднее количество тонн фруктов, ожидающих продажи (сутки): ',

          get_avg_queue(k, limit, alpha, betta))

    print('Вероятность хранения фруктов в магазине: ',

          1 - sum([get_p_n(n, k, limit, alpha, betta) for n in range(k+1)]))
    count_cost(k, limit, alpha, betta)
    Результаты

    r = 23

    Вероятность того, что магазин будет свободен от продажи: 0.20665988311177766

    Вероятность того, что привезенные фрукты не будут своевременно проданы: 0.3653279064894208

    Среднее количество тонн фруктов, доставленных в магазин и проданных в течение месяца: 28.560244207976062

    Среднее количество тонн фруктов, доставленных в магазин в течение месяца и потерянных в результате хранения: 16.439755792023938

    Среднее количество тонн фруктов, ожидающих продажи (сутки): 1.0959837194682625

    Вероятность хранения фруктов в магазине: 0.5350152629985002



    По графику видно, что целесообразно будет открыть ещё три точки: тогда средние суммарные затраты в месяц составят 1819.115 денежных едениц, вместо текущих 16839.756.
    Задание 2 Вариант 13


    Условие




    Решение


    Код

    import math

    from decimal import Decimal

    import matplotlib.pyplot as plt
    lam = 120

    mu = 10

    v = 0.1

    k = 3

    B = 10
    alpha = lam / mu

    betta = v / mu

    def calc_on_n(n, alpha):

        return alpha**n / math.factorial(n)

    def calc_coef_div(k):

        return math.factorial(k)

    def calc_mul_on_s(s, k, betta):

        mul_on_s = 1

        for m in range(1, s + 1):

            mul_on_s *= k + m*betta

        return mul_on_s

    def get_p_0(k, B, alpha, betta):

        sum_on_k = 0

        for n in range(k + 1):

            sum_on_k += calc_on_n(n, alpha)
        coef = alpha**k / calc_coef_div(k)
        sum_on_lim = Decimal(0)

        for s in range(1, B + 1):

            sum_on_lim += Decimal(Decimal(alpha)**Decimal(s)

                                  ) / Decimal(calc_mul_on_s(s, k, betta))
        return float(1 / (Decimal(sum_on_k) + Decimal(coef) * sum_on_lim))

    def get_p_n(n, k, B, alpha, betta):

        return calc_on_n(n, alpha) * get_p_0(k, B, alpha, betta)

    def get_p_otk(k, B, alpha, betta):

        sum_on_k = 0

        for n in range(k+1):

            sum_on_k += (k-n)*get_p_n(n, k, B, alpha, betta)

        return (alpha - k + sum_on_k) / alpha

    def get_p_ks(s, k, B, alpha, betta):

        return alpha**(k+s) / (calc_coef_div(k) * calc_mul_on_s(s, k, betta)) * get_p_0(k, B, alpha, betta)

    def get_avg_queue(k, B, alpha, betta):

        return sum([s * get_p_ks(s, k, B, alpha, betta) for s in range(1, B + 1)])

    def get_empl_worker_cnt(k, B, alpha, betta):

        sum_on_k = 0

        for n in range(1, k+1):

            sum_on_k += n*get_p_n(n, k, B, alpha, betta)

        sum_on_lim = 0

        for s in range(1, B+1):

            sum_on_lim += get_p_ks(s, k, B, alpha, betta)

        return sum_on_k + k*sum_on_lim

    def get_idle_worker_cnt(k, B, alpha, betta):

        return k - get_empl_worker_cnt(k, B, alpha, betta)

    print('Вероятность того, что все места для одновременной обработки личного состава заняты',

          1 - sum([get_p_n(n, k, B, alpha, betta) for n in range(k)]))

    print('Вероятность того, что полевой пункт простаивает',

          get_p_0(k, B, alpha, betta))

    print('Среднее число занятых мест для одновременной обработки личного состава',

          get_empl_worker_cnt(k, B, alpha, betta))

    print('Вероятность того, что зараженный человек будет обработан за допустимое время',

          1 - get_p_otk(k, B, alpha, betta))

    print('Среднее число зараженных человек, которые ожидают обработки в укрытии',

          get_avg_queue(k, B, alpha, betta))

    print('Среднее число зараженных человек, которые находятся в полевом пункте санитарной обработки',

          alpha * (1 - get_p_otk(k, B, alpha, betta)) + get_avg_queue(k, B, alpha, betta))
    prev_p_otk = 1

    lam -= (lam/2 + lam*0.1)

    alpha = lam / mu

    eps = .03
    while (prev_p_otk > 0):

        k += 1

        cur_p_otk = get_p_otk(k, B, alpha, betta)

        print(f'При {k} местах для обработки, вероятность отказа составит: {cur_p_otk}')
        prev_p_otk = cur_p_otk

    Результаты

    Вероятность того, что все места для одновременной обработки личного состава заняты 0.9999997496703132

    Вероятность того, что полевой пункт простаивает 2.9450551382819786e-09

    Среднее число занятых мест для одновременной обработки личного состава 2.999999708439541

    Вероятность того, что зараженный человек будет обработан за допустимое время 0.24999997570329502

    Среднее число зараженных человек, которые ожидают обработки в укрытии 9.65273586306764

    Среднее число зараженных человек, которые находятся в полевом пункте санитарной обработки 12.652735571507181

    При 4 местах для обработки, вероятность отказа составит: 0.18457449513618585

    При 5 местах для обработки, вероятность отказа составит: 0.05913815919442546

    При 6 местах для обработки, вероятность отказа составит: 0.013684387349576685

    При 7 местах для обработки, вероятность отказа составит: 0.002999034363959282

    При 8 местах для обработки, вероятность отказа составит: 0.0007329687623816583

    При 9 местах для обработки, вероятность отказа составит: 0.00020514049777653476

    При 10 местах для обработки, вероятность отказа составит: 6.271576728185865e-05

    При 11 местах для обработки, вероятность отказа составит: 1.9771090493854913e-05

    При 12 местах для обработки, вероятность отказа составит: 6.176177453724267e-06

    При 13 местах для обработки, вероятность отказа составит: 1.8706310526509877e-06

    При 14 местах для обработки, вероятность отказа составит: 5.435848223397007e-07

    При 15 местах для обработки, вероятность отказа составит: 1.508684640179799e-07

    При 16 местах для обработки, вероятность отказа составит: 3.993451014316918e-08

    При 17 местах для обработки, вероятность отказа составит: 1.008204408847746e-08

    При 18 местах для обработки, вероятность отказа составит: 2.4297478843730387e-09

    При 19 местах для обработки, вероятность отказа составит: 5.596390018069997e-10

    При 20 местах для обработки, вероятность отказа составит: 1.233616912325412e-10

    При 21 местах для обработки, вероятность отказа составит: 2.6061375280050925e-11

    При 22 местах для обработки, вероятность отказа составит: 5.286141894581912e-12

    При 23 местах для обработки, вероятность отказа составит: 1.0302869668521453e-12

    При 24 местах для обработки, вероятность отказа составит: 1.9095836023552692e-13

    При 25 местах для обработки, вероятность отказа составит: 3.4786988104921576e-14

    При 26 местах для обработки, вероятность отказа составит: 5.181040781584064e-15

    При 27 местах для обработки, вероятность отказа составит: 1.4802973661668755e-15

    При 28 местах для обработки, вероятность отказа составит: 0.0
    Задание 3 Вариант 13


    Условие






    Решение







    Далее рассмотрим  -приборную систему массового обслуживания с ограничением на время пребывания требований в системе.

    Анализ данной системы сводится к рассмотрению одноприборной системы с ограничением на время пребывания требований в системе, у которой математическое ожидание времени обслуживания определяется зависимостью (2.2).
    Код

    import math

    import mpmath

    from decimal import Decimal

    import matplotlib.pyplot as plt
    k = 6

    nu = 1.5/60

    lam = 3/60

    v = 1/35
    mu = 1 / nu

    mu_ = k * mu

    nu_ = 1 / mu_
    alpha = lam / mu_

    betta = v / mu_
    k_ = 1
    eps = .00000001

    def get_r(alpha, betta, eps):

        r = 1

        while ((alpha / betta)**r / math.factorial(r-1)) * math.exp(alpha / betta) > eps:

            r += 1

        return r

    limit = get_r(alpha, betta, eps)

    print('r = ', limit)

    def calc_on_n(n, alpha, betta):

        return alpha**n / (math.factorial(n) * (1 + betta)**n)

    def calc_coef_div(k_, betta):

        return (math.factorial(k_) * (1 + betta)**k_)

    def calc_mul_on_s(s, k_, betta):

        mul_on_s = 1

        for m in range(1, s + 1):

            mul_on_s *= k_ + (k_+m)*betta

        return mul_on_s

    def get_p_0(k_, alpha, betta, limit):

        sum_on_k = 0

        for n in range(k_ + 1):

            sum_on_k += calc_on_n(n, alpha, betta)
        coef = alpha**k_ / calc_coef_div(k_, betta)
        sum_on_lim = Decimal(0)

        for s in range(1, limit + 1):

            sum_on_lim += Decimal(Decimal(alpha)**Decimal(s)

                                  ) / Decimal(calc_mul_on_s(s, k_, betta))
        return float(1 / (Decimal(sum_on_k) + Decimal(coef) * sum_on_lim))

    def get_p_n(k_, n, alpha, betta, limit):

        return calc_on_n(n, alpha, betta) * get_p_0(k_, alpha, betta, limit)

    def get_p_ks(s, k_, alpha, betta, limit):

        return alpha**(k_+s) / (calc_coef_div(k_, betta) * calc_mul_on_s(s, k_, betta)) * get_p_0(k_, alpha, betta, limit)

    def get_p_otk(k_, alpha, betta, limit):

        sum_on_k = 0

        for n in range(k_+1):

            sum_on_k += (k_-n)*get_p_n(k_, n, alpha, betta, limit)

        return (alpha - k_ + sum_on_k) / alpha

    def get_queue_avg():

        sum_on_lim = 0

        for s in range(1, limit+1):

            sum_on_lim += s*get_p_ks(s, k_, alpha, betta, limit)

        return sum_on_lim

    print(f'Среднее время обработки отделом одной сводки: {nu_} мин.')
    print(

        f'Вероятность того, что сотрудники свободны от работы: {get_p_0(k_, alpha, betta, limit)}')
    print(

        f'Вероятность того, что в отделе одна сводка обрабатывается, а сводок, ожидающих обработки, нет: {get_p_ks(0, k_, alpha, betta, limit)}')
    print(

        f'Среднее число сводок, ожидающих обработки: {get_queue_avg()}')
    print(

        f'Процент своевременно использованной информации: {1 - get_p_otk(k_, alpha, betta, limit)}')
    print(

        f'Вероятность того, что информация не будет использована из-за того, что до окончания обработки она уже потеряла свою ценность: {get_p_otk(k_, alpha, betta, limit)}')
    devices = []

    p_otk_arr = []

    for i in range(k, k*2+1):

        devices.append(i)

        temp_mu_ = i * mu

        temp_alpha = lam / temp_mu_

        temp_betta = v / temp_mu_

        p_otk_arr.append((1 - get_p_otk(k_, temp_alpha, temp_betta, limit))*100)

    plt.xlabel('Число сотрудников')

    plt.ylabel('Процент своевременно использованной информации')

    plt.plot(devices, p_otk_arr)

    plt.show()
    nu_arr = []

    p_otk_arr = []

    nu_arr.append(nu)

    p_otk_arr.append((1 - get_p_otk(k_, alpha, betta, limit))*100)

    for i in range(10, 51, 5):

        temp_nu = nu - nu * (i/100)

        temp_mu = 1 / temp_nu

        nu_arr.append(temp_nu)
        temp_mu_ = k * temp_mu

        temp_nu_ = 1 / temp_mu_

        temp_alpha = lam / temp_mu_

        temp_betta = v / temp_mu_

        p_otk_arr.append((1 - get_p_otk(k_, temp_alpha, temp_betta, limit))*100)
    fig, ax = plt.subplots()

    ax.set_xlabel('Длительность обработки сводки данных одним сотрудником')

    ax.set_ylabel('Процент своевременно использованной информации')

    ax.plot(nu_arr, p_otk_arr, marker='o')

    for i in range(len(p_otk_arr)):

        ax.annotate(f'({nu_arr[i]}; {round(p_otk_arr[i], 3)})', (nu_arr[i], p_otk_arr[i]))

    plt.show()


    Результаты

    r = 17

    Среднее время обработки отделом одной сводки: 0.004166666666666667 мин.

    Вероятность того, что сотрудники свободны от работы: 0.9997916914704674

    Вероятность того, что в отделе одна сводка обрабатывается, а сводок, ожидающих обработки, нет: 0.00020826514225369815

    Среднее число сводок, ожидающих обработки: 4.33963166099828e-08

    Процент своевременно использованной информации: 0.9998809417562029

    Вероятность того, что информация не будет использована из-за того, что до окончания обработки она уже потеряла свою ценность: 0.00011905824379709883


    Задание 4 Вариант 13


    Условие
    Решение
    Код
    Результаты


    Задание 5 Вариант 13


    Условие
    Решение
    Код
    Результаты


    написать администратору сайта