Advertisement
Infiniti_Inter

task_3_vlad

Apr 27th, 2022
925
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.33 KB | None | 0 0
  1. from math import factorial, exp
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5.  
  6. def get_r(alpha, beta):
  7.     eps = .00000001
  8.     r = 1
  9.     while ((alpha / beta)**r / factorial(r-1)) * exp(alpha / beta) > eps:
  10.         r += 1
  11.     return r
  12.  
  13. def prod_alpha_1(alpha, l):
  14.     prod = 1
  15.     for m in range(0, l):
  16.         prod *= (alpha + m)
  17.     return prod
  18.  
  19.  
  20. def prod_alpha_2(alpha, l):
  21.     prod = 1
  22.     for m in range(1, l + 1):
  23.         prod *= (alpha + m)
  24.     return prod
  25.  
  26.  
  27. def prod_beta(k, s, beta):
  28.     prod = 1
  29.     for r in range(1, s + 1):
  30.         prod *= (k + r * beta)
  31.     return prod
  32.  
  33.  
  34. def get_p_0(k, alpha, beta):
  35.     res_1 = prod_alpha_2(alpha, k) / factorial(k)
  36.     res_2 = prod_alpha_1(alpha, k) / factorial(k)
  37.     res_3 = sum([alpha** s/ prod_beta(k,s,beta) for s in range(1, r + 1)])
  38.     res = 1 / (res_1 + res_2 * res_3)
  39.     return res
  40.  
  41.  
  42. def get_p_n(n, alpha, p_0):
  43.     return (prod_alpha_1(alpha, n) / factorial(n)) * p_0
  44.  
  45. def get_p_ks(k, s, alpha, beta, p_0):
  46.     res = ((alpha ** s * prod_alpha_1(alpha, k))/ (factorial(k) * prod_beta(k,s,beta))) * p_0
  47.     return res
  48.  
  49.  
  50. def get_h(alpha, p_0, k):
  51.     return sum([n * get_p_n(n, alpha, p_0) for n in range(0, k + 1)]) + k * (1-sum([get_p_n(n, alpha, p_0) for n in range(0, k + 1)]))
  52.  
  53.  
  54. k = 3
  55. lambda_ = 1/3
  56. mu = 1/5
  57. nu = 1/1.5
  58.  
  59.  
  60. alpha = lambda_ / mu
  61. beta = nu / mu
  62. r = get_r(alpha, beta)
  63. print(f'r = {r}')
  64.  
  65.  
  66. # а) вероятность того, что 1, 2 или все самосвалы возьмут бетон
  67. # из замеса (т. е. эти самосвалы не находятся в рейсе);
  68. print('A) Вероятность того, что 1, 2 или все самосвалы возьмут бетон \
  69. из замеса (т. е. эти самосвалы не находятся в рейсе):')
  70. p_0 = get_p_0(k, alpha, beta)
  71. for n in [1, 2]:
  72.     tmp = get_p_n(k - n, alpha, p_0)
  73.     print(f'\t{n} самосвал(-а): {tmp}')
  74. print(f'\tВсе самосвалы: {p_0}')
  75.  
  76.  
  77. # б) среднее число самосвалов, которые возьмут бетон из замеса;
  78. h = get_h(alpha, p_0, k)
  79.          
  80. print(f'Б) Среднее число самосвалов, которые возьмут бетон из замеса: {k - h}')
  81.  
  82. # в) количество бетона, которое будет израсходовано на свою стройку,
  83. # и количество бетона, отданного другим организациям;
  84. b = sum([s * get_p_ks(k, s, alpha, beta, p_0) for s in range(1, r + 1)])
  85. p_ref = beta / alpha * b
  86. mean_count_finished = lambda_ * (1 - p_ref)
  87. mean_count_refuse = lambda_ * p_ref
  88. print(f'В) Количество бетона, которое будет израсходовано на свою стройку: {mean_count_finished}')
  89. print(f' Количество бетона, отданного другим организациям: {mean_count_refuse}')
  90.  
  91.  
  92. # г) вероятность того, что весь бетон будет отдан другим строительным
  93. # организациям;
  94. ans = get_p_n(k, alpha, p_0) + sum([get_p_ks(k, s, alpha, beta, p_0) for s in range(1, r + 1)])
  95. print(f'Г) Вероятность того, что весь бетон будет отдан другим строительным организациям: {ans}')
  96.  
  97. #######################################################################
  98.  
  99. # д) долю машин стройки, используемых для перевозки бетона, и долю машин, простаивающих в ожидании загрузки бетона;
  100.  
  101. def k_h(h, k):
  102.     return h/k
  103. def k_g(k, h):
  104.     return (k - h)/k
  105.  
  106.  
  107.  
  108. print(f'Д) Доля машин стройки, используемых для перевозки бетона: {100*k_h(h,k)}%')
  109. print(f' Доля машин, простаивающих в ожидании загрузки бетона: {100*k_g(k, h)}%')
  110.  
  111. # е) вероятность простоя самосвалов.
  112. print(f'Е) Вероятность простоя самосвалов: {p_0}')
  113. # Определить долю машин стройки, используемых для перевозки бетона,
  114. # в зависимости от
  115. print()
  116. # а) объема одного замеса бетона, который меняется – увеличивается
  117. # на 10, 20, ..., 100 процентов (построить график зависимости);
  118. V = np.arange(0.1, 1.1, 0.1) * 10 + 10
  119. mus = 2 / V
  120. print(f'А) Увеличение объёма одного замеса бетона: {V}')
  121. p_s = []
  122. for mu_tmp in mus:
  123.     alpha = lambda_ / mu_tmp
  124.     beta = nu / mu_tmp
  125.     p_s.append(k_h(get_h(alpha, get_p_0(k, alpha, beta), k), k) * 100)
  126. print(f' Доля машин стройки, используемых для перевозки бетона:{p_s}')
  127. lambdas = [i for i in range(10, 20)]
  128. plt.autoscale(tight=True)
  129. plt.plot(V, p_s)
  130. plt.title('Доля машин на стройке, используемых для перевозки бетона, \nв зависимости от объёма одного замеса бетона')
  131. plt.xlabel('Объём, м^3')
  132. plt.ylabel('Машины, %')
  133. plt.show()
  134.  
  135. # б) изменения количества единиц занятых на перевозке бетона
  136. # самосвалов – увеличения, но не более, чем в 2 раза (построить график)
  137. kappas = np.arange(5, k*2+1)
  138. print(f'Б) Увеличение числа занятых на перевозке самосвалов: {kappas}')
  139. p_s = []
  140. alpha = lambda_ / mu
  141. beta = nu / mu
  142.  
  143. for kappa_tmp in kappas:
  144.    p_s.append(k_h(get_h(alpha, get_p_0(kappa_tmp, alpha, beta),kappa_tmp), kappa_tmp) * 100)
  145.  
  146. print(f' Доля машин стройки, используемых для перевозки бетона: {p_s}')
  147. plt.autoscale(tight=True)
  148. plt.plot(kappas, p_s)
  149. plt.title('Доля машин на стройке, используемых для перевозки бетона,\nв зависимости от числа выделенных на перевозку самосвалов')
  150. plt.xlabel('Число выделенных машин')
  151. plt.ylabel('Доля используемых машин, %')
  152. plt.show()
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement