from decimal import Decimal from math import factorial, exp # r - номер члена суммы начиная с которого можно отбросить остальные члены ее суммы, # чтоб погрешность ее вычислений не привысила eps def get_r(alpha, beta): eps = .00000001 r = 1 while ((alpha / beta)**r / factorial(r-1))* exp(alpha / beta) > eps: r += 1 return r def calc_mul_on_s(s): 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(): sum_on_k = 0 for n in range(k + 1): sum_on_k += alpha**n / (factorial(n) * (1 + betta)**n) coef = alpha**k / (factorial(k) * (1 + betta)**k) sum_on_r = Decimal(0) for s in range(1, r + 1): sum_on_r += Decimal(Decimal(alpha)**Decimal(s)) / Decimal(calc_mul_on_s(s)) return float(1 / (Decimal(sum_on_k) + Decimal(coef) * sum_on_r)) def get_p_n(n): return alpha**n / (factorial(n) * (1 + betta)**n) * get_p_0() def get_p_ks(s): return alpha**(k+s) / ((factorial(k) * (1 + betta)**k) * calc_mul_on_s(s)) * get_p_0() def get_p_otk(): return 1 - get_h()/alpha #Среднее число приборов, занятых обслуживанием требований def get_h(): sum_on_k = 0 for n in range(1, k+1): sum_on_k += n*get_p_n(n) sum_on_r = 0 #print('K = ', k) for s in range(1, r+1): sum_on_r += get_p_ks(s) return sum_on_k + k*sum_on_r #Среднее число свободных обслуживающих приборов def get_g(): return k - get_h() #Коэффициент простоя обсулживаюих приборов def get_k_g(): return get_g() / k def get_b(): sum_on_r = 0 for s in range(1, r+1): sum_on_r += s*get_p_ks(s) return sum_on_r def calc_correct_check(): sum_p = get_p_0() + get_p_n(1) + get_p_n(2) for i in range(1, r + 1): sum_p += get_p_ks(i) return sum_p def C(n, k): if k == n or k == 0: return 1 if k != 1: return C(n-1, k) + C(n-1, k-1) else: return n def get_accuracy(k): return 1 - 0.1**k v = 1./4 # 1/3 в минуту <> 2 в 6 мин lam = 1 # 2 в минуту <> 6 в 3 минут mu = 1/2 # 1/1.5 в минуту // 2 в 6м (x3) k = 2 alpha = lam / mu betta = v / mu r = get_r(alpha, betta) h = get_h() p_otk = get_p_otk() #print(h) # а) Вероятность того, что вооружение нападающей стороны не используется p_0 = get_p_0() print('Вероятность того, что вооружение нападающей стороны не используется: ', p_0) # б) вероятность того, что обнаруженная цель противника будет обстреляна за время пребывания # ее на огневой позиции' print('Цель будет обстреляна за время пребывания ее на огневой позиции: ', 1 - p_otk) # в)вероятность того, что обнаруженная и обстрелянная цель противника будет уничтожена (поражена) accuracy = get_accuracy(k) print("Вероятность того, что обнаруженная и обстрелянная цель противника будет уничтожена(поражена): ", (1-p_otk)*accuracy) # г) вероятность нахождения цели в зоне поражения нападающей стороны print("Вероятность нахождения цели в зоне поражения нападающей стороны", 1 - p_0) b = get_b() # д) среднее число целей, находящихся в зоне поражения нападающей стороны print('Cреднее число целей, находящихся в зоне поражения нападающей стороны:', b + h) # е) среднее число образцов вооружения, ведущих обстрел появляющихся целей, и их долю от #общего числа образцов вооружения print("Cреднее число образцов вооружения, ведущих обстрел появляющихся целей:", h) # г) доля от общего числа обраZцов вооружения g = get_g() k_g = g / k print("Доля простаивающих орудий:", k_g) k_h = h / k print("Доля занятых орудий:", k_h) # back_punch = 0.5 loss = (1 - (1-p_otk)*accuracy)*back_punch while k < 10 and loss > 0.1: k+=1 p_otk = get_p_otk() accuracy = get_accuracy(k) loss = (1 - (1-p_otk)*accuracy)*back_punch if (loss > 0.1): print('некорректные условия')