Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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('некорректные условия')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement