Представьте, что у вас есть критический компонент, который, как вы знаете, потерпит неудачу в 1 из N «использования» (для некоторого подходящего определения «использования»). Вы можете запланировать плановую замену компонента таким образом, чтобы его вероятность неудачи между рутинной заменой была меньше P%. Если сбои следуют за биномиальным распределением (каждое время компонент «используется» либо терпит неудачу, либо нет), то статическая функция члена binomial_distibution<>::find_maximum_number_of_trials
можно использовать для оценки максимального количества «использований» этого компонента для определенного приемлемого уровня риска альфа.
Пример программы binomial_sample_sizes.cpp демонстрирует ее использование. Он сосредоточен на рутине, которая печатает таблицу максимальных размеров выборки для различных порогов вероятности:
void find_max_sample_size(
double p,
unsigned successes)
{
Затем рутина объявляет таблицу порогов вероятности: это максимально допустимая вероятность того, что успехи или меньше событий будут наблюдаться. В нашем примере success всегда будет нулевым, так как мы не хотим никаких сбоев компонентов, но в других ситуациях ненулевые значения вполне могут иметь смысл.
double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
Большая часть остальной части программы довольно-печатная, важная часть заключается в расчете максимального количества разрешенных испытаний для каждого значения альфа:
for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
{
cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
double t = binomial::find_maximum_number_of_trials(
successes, p, alpha[i]);
t = floor(t);
cout << fixed << setprecision(5) << setw(15) << right << t << endl;
}
Обратите внимание, что, поскольку мы вычисляем максимальное количество разрешенных испытаний, мы будем ошибаться на безопасной стороне и возьмем пол результата. Если бы мы рассчитывали minimum количество испытаний, необходимых для наблюдения определенного количества success, используя find_minimum_ number_of_trials
, мы бы взяли потолок вместо этого.
Мы закончим, глядя на некоторые результаты выборки, во-первых, на 1 из 1000 шансов на отказ компонента с каждым использованием:
________________________
Maximum Number of Trials
________________________
Success ratio = 0.001
Maximum Number of "successes" permitted = 0
____________________________
Confidence Max Number
Value (%) Of Trials
____________________________
50.000 692
75.000 287
90.000 105
95.000 51
99.000 10
99.900 0
99.990 0
99.999 0
Таким образом, 51 «использование» компонента даст 95% шанс, что никакие сбои компонентов не будут соблюдаться.
Сравните это с 1 из 1 миллиона шансов на отказ компонента:
________________________
Maximum Number of Trials
________________________
Success ratio = 0.0000010
Maximum Number of "successes" permitted = 0
____________________________
Confidence Max Number
Value (%) Of Trials
____________________________
50.000 693146
75.000 287681
90.000 105360
95.000 51293
99.000 10050
99.900 1000
99.990 100
99.999 10
В этом случае даже 1000 применений компонента по-прежнему дают менее 1 из 1000 шансов на наблюдение за отказом компонента (т.е. 99,9% шансов на отсутствие сбоя).