Advertisement
Infiniti_Inter

1 (вариант 9)

Apr 26th, 2022
948
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.07 KB | None | 0 0
  1.  
  2. from decimal import Decimal
  3. from math import factorial, exp
  4.  
  5. # r - номер члена суммы начиная с которого можно отбросить остальные члены ее суммы,
  6. # чтоб погрешность ее вычислений не привысила eps
  7. def get_r(alpha, beta):
  8.     eps = .00000001
  9.     r = 1
  10.     while ((alpha / beta)**r / factorial(r-1))* exp(alpha / beta) > eps:
  11.         r += 1
  12.     return r
  13.  
  14.  
  15. def calc_mul_on_s(s):
  16.     mul_on_s = 1
  17.     for m in range(1, s + 1):
  18.         mul_on_s *= k + (k+m)*betta
  19.     return mul_on_s
  20.  
  21. def get_p_0():
  22.     sum_on_k = 0
  23.     for n in range(k + 1):
  24.         sum_on_k += alpha**n / (factorial(n) * (1 + betta)**n)
  25.        
  26.     coef = alpha**k / (factorial(k) * (1 + betta)**k)
  27.    
  28.     sum_on_r = Decimal(0)
  29.     for s in range(1, r + 1):
  30.         sum_on_r += Decimal(Decimal(alpha)**Decimal(s)) / Decimal(calc_mul_on_s(s))
  31.        
  32.     return float(1 / (Decimal(sum_on_k) + Decimal(coef) * sum_on_r))
  33.  
  34. def get_p_n(n):
  35.     return alpha**n / (factorial(n) * (1 + betta)**n) * get_p_0()
  36.  
  37. def get_p_ks(s):
  38.     return alpha**(k+s) / ((factorial(k) * (1 + betta)**k) * calc_mul_on_s(s)) * get_p_0()
  39.  
  40. def get_p_otk():
  41.     return 1 - get_h()/alpha
  42.  
  43. #Среднее число приборов, занятых обслуживанием требований
  44. def get_h():
  45.     sum_on_k = 0
  46.     for n in range(1, k+1):
  47.         sum_on_k += n*get_p_n(n)
  48.     sum_on_r = 0
  49.     #print('K = ', k)
  50.     for s in range(1, r+1):
  51.         sum_on_r += get_p_ks(s)
  52.     return sum_on_k + k*sum_on_r
  53.  
  54. #Среднее число свободных обслуживающих приборов
  55. def get_g():
  56.     return k - get_h()
  57.  
  58. #Коэффициент простоя обсулживаюих приборов
  59. def get_k_g():
  60.     return get_g() / k
  61.  
  62.  
  63. def get_b():
  64.     sum_on_r = 0
  65.     for s in range(1, r+1):
  66.         sum_on_r += s*get_p_ks(s)
  67.     return sum_on_r
  68.  
  69.  
  70. def calc_correct_check():
  71.     sum_p = get_p_0() + get_p_n(1) + get_p_n(2)
  72.     for i in range(1, r + 1):
  73.         sum_p += get_p_ks(i)
  74.     return sum_p
  75.  
  76. def C(n, k):
  77.     if k == n or k == 0:
  78.         return 1
  79.     if k != 1:
  80.         return C(n-1, k) + C(n-1, k-1)
  81.     else:
  82.         return n
  83.  
  84. def get_accuracy(k):
  85.     return 1 - 0.1**k
  86.  
  87.  
  88.  
  89. v = 1./4 # 1/3 в минуту <> 2 в 6 мин
  90. lam = 1 # 2 в минуту <> 6 в 3 минут
  91. mu = 1/2 # 1/1.5 в минуту // 2 в 6м (x3)
  92. k = 2
  93. alpha = lam / mu
  94. betta = v / mu
  95. r = get_r(alpha, betta)
  96.  
  97.  
  98. h = get_h()
  99. p_otk = get_p_otk()
  100. #print(h)
  101. # а) Вероятность того, что вооружение нападающей стороны не используется
  102.  
  103.  
  104. p_0 = get_p_0()
  105. print('Вероятность того, что вооружение нападающей стороны не используется: ', p_0)
  106.  
  107.  
  108. # б) вероятность того, что обнаруженная цель противника будет обстреляна за время пребывания
  109. # ее на огневой позиции'
  110.  
  111.  
  112. print('Цель будет обстреляна за время пребывания ее на огневой позиции: ', 1 - p_otk)
  113.  
  114.  
  115. # в)вероятность того, что обнаруженная и обстрелянная цель противника будет уничтожена (поражена)
  116.  
  117. accuracy = get_accuracy(k)
  118.  
  119.  
  120.  
  121. print("Вероятность того, что обнаруженная и обстрелянная цель противника будет уничтожена(поражена): ", (1-p_otk)*accuracy)
  122.  
  123.  
  124. # г) вероятность нахождения цели в зоне поражения нападающей стороны
  125.  
  126.  
  127. print("Вероятность нахождения цели в зоне поражения нападающей стороны", 1 - p_0)
  128.  
  129. b = get_b()
  130.  
  131. # д) среднее число целей, находящихся в зоне поражения нападающей стороны
  132.  
  133. print('Cреднее число целей, находящихся в зоне поражения нападающей стороны:', b + h)
  134.  
  135.  
  136.  
  137. # е) среднее число образцов вооружения, ведущих обстрел появляющихся целей, и их долю от
  138. #общего числа образцов вооружения
  139. print("Cреднее число образцов вооружения, ведущих обстрел появляющихся целей:", h)
  140.  
  141.  
  142. # г) доля от общего числа обраZцов вооружения
  143. g = get_g()
  144. k_g = g / k
  145. print("Доля простаивающих орудий:", k_g)
  146. k_h = h / k
  147. print("Доля занятых орудий:", k_h)
  148.  
  149.  
  150. #
  151.  
  152.  
  153.  
  154. back_punch = 0.5
  155. loss = (1 - (1-p_otk)*accuracy)*back_punch
  156.  
  157. while k < 10 and loss > 0.1:
  158.     k+=1
  159.     p_otk = get_p_otk()
  160.     accuracy = get_accuracy(k)
  161.     loss = (1 - (1-p_otk)*accuracy)*back_punch
  162. if (loss > 0.1):
  163.     print('некорректные условия')
  164.  
  165.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement