Просмотр полной версии : Игрушки Келлермана
Paul Kellerman
25.03.2014, 16:48
Решил поделиться с учеными братьями/сестрами маленькой няшкой, сваянной мною на досуге.
Короче система из 10 элементов, с банальными экспоненциальными законами распределения
времени отказов и времени восстановления. Можно также выбирать режимы отказов и восс-
тановлений: независимый и только один элемент. Также отображается в реальном времени
состояние очереди отказов и состояние каждого из 10 элементов в отдельности. Также счи-
таются вероятности всех состояний очереди отказов (от состояния 0 - все работают, до сос-
тояния 10 - все отказали). Программа многопоточная, с семафорами, мьютексами и прочими
страхами божьими. То есть, я не стал тупо марковский процесс по интервалам времени моде-
лировать, как здесь: http://lib2.podelise.ru/docs/60102/index-4706-36.html. Я решил в реальном
времени поведение 10 восстанавливаемых элементов имитировать. В программе также отобра-
жаются расчетные вероятности в установившемся режиме (t -> бесконечность), так что можно
сравнивать результаты моделирования с теоретическими значениями. Понятное дело, не ждите
сразу совпадений, нужно час-два моделировать, чтобы получить статистическую устойчивость.
Состояние элементов: зеленый - исправен, зеленый и желтый - исправен и нарабатывает на отказ,
красный - неисправен, красный и желтый - неисправен и ремонитируется. В случае если элементы
независимые и по отказам и по восстановление, то все элементы все время ломаются или чинятся.
Лично я помимо развлечения, буду ее как наглядную модельку для студентов, изучающих основы
технической надежности использовать. Может кому тоже пригодится, а может просто развлечется.
А можно, специально для гуманитариев -- что таки ваша няшка делает?
Степан Капуста
26.03.2014, 09:22
Ilona, Вам же написали, что она делает. Техническим языком — см. пост Келлермана. Гуманитарным — «няшка».
Longtail
26.03.2014, 10:07
Круто :rolleyes: :pray:
Дмитрий В.
26.03.2014, 10:44
Присоединяюсь к предыдущему оратору. Граф, отличная вещица! Особенно медитативно действует, если и failure, и repair выкрутить на максимум.
А еще, я думаю, отлично подойдет для дурения некомпетентных - запустил программу, ушел пить чаек... Если спросят "почему не работаешь, сцуко?", кивнуть на монитор, мол, расчеты ведутся вовсю! :D
Добавлено через 5 минут
А можно, специально для гуманитариев -- что таки ваша няшка делает?
Ilona, грубо говоря, моделирует систему из 10 элементов. Они работают, время от времени отказывают, тогда начинается их починка. Частота отказов и скорость починки задается ползунками вверху.
Состояние элементов: зеленый - исправен, зеленый и желтый - исправен и нарабатывает на отказ,
красный - неисправен, красный и желтый - неисправен и ремонитируется.
В центре - сколько элементов отказало на данный момент и в среднем.
Добавлено через 2 минуты
Paul Kellerman, граф, мне позволено будет высказать один вопрос? Погонял сейчас, так вот - симуляция у Вас, по-моему, не останавливается, даже если все элементы вышли из строя, а repair rate равен 0?
Paul Kellerman
26.03.2014, 10:50
специально для гуманитариев
Что же, попробую на экономическом примере пояснить. Допустим, у вас маленькая
швейная мастерская, у вас 10 швейных машинок, на них вы шьете какие-то тряпки.
Машинки могут ломаться, время наработки на отказ - величина случайная, но сред-
нее значение стремится к величине, обратной интенсивности отказов (failure rate).
Сломанные машинки чинятся, время починки - величина случайная, но среднее зна-
чение стремится к величине, обратной интенсивности восстановления (repair rate).
В целом в каждый момент времени ваша мастерская может находится в одном из
11 состояний (0 - все машинки целые, 1 - одна сломалась, 2 - две сломались, и так
далее 10 - все машинки сломались). Вас интересует вероятности тех или иных сос-
тояний. Зачем? А затем, что вероятность состояния можно умножить на экономичес-
кий показатель (например, объем продукции, производимой при заданном состоянии,
соответствующем количеству неисправных машинок). Можно просто оценить сред-
нее число неисправных машинок (average fail count) и умножить на их производите-
льность (мы считаем машинки одинаковыми), и оценить потери в объеме продукции.
Два режима отказов (Failure mode) надо понимать так.
- Independent (все машинки используются и все могут одновременно ломаться).
- Single (в каждый момент времени только одна машинка используется и только
она может ломаться, остальные просто лежат про запас).
Два режима восстановления (Repair mode) надо понимать так.
- Independent (все сломанные машинки могут одновременно ремонтироваться).
- Single (в каждый момент времени только одна сломанная машинка может ремон-
тироваться, остальные сломанные машинки ждут).
Погонял сейчас, так вот - симуляция у Вас, по-моему, не останавливается,
даже если все элементы вышли из строя, а repair rate равен 0
Все нормально, это случай невосстанавливаемой системы. Через какое-то время
вся система приходит в состояние 10 (все сломалось) и остается в нем навсегда.
Ведь в реальной жизни тоже так... Время-то течет дальше, что бы ни случилось ;)
Короче система из 10 элементов, с банальными экспоненциальными законами распределения
времени отказов и времени восстановления.
Элегантная штука. При длительном моделировании столбцы должны быть близки? А почему справа разные вероятности - где задаются параметры каждого объекта или они априори разные и неизвестны юзеру?
Paul Kellerman
26.03.2014, 14:00
kravets, при бесконечно долгом моделировании экспериментальные вероятности сойдутся
с расчетными. Элементы все одинаковые и параметры интенсивностей у них одинаковые, и
задаются двумя ползунками. Можно легко сделать десять пар ползунков, но пока было лень.
Вероятности - это вероятности состояний системы (заданного кол-ва неисправных элементов),
в большинстве случаев они разные для разных состояний даже при одинаковых элементах, а
их сумма, разумеется, всегда равна единица - это обязательно соблюдается в обоих столбцах.
kravets, при бесконечно долгом моделировании экспериментальные вероятности сойдутся
с расчетными. Элементы все одинаковые и параметры интенсивностей у них одинаковые, и
задаются двумя ползунками. Можно легко сделать десять пар ползунков, но пока было лень.
Вероятности - это вероятности состояний системы (заданного кол-ва неисправных элементов),
в большинстве случаев они разные для разных состояний даже при одинаковых элементах, а
их сумма, разумеется, всегда равна единица - это обязательно соблюдается в обоих столбцах.
Объекты одинаковые? Если да - почему правый столбец такой совсем разный?
Paul Kellerman
26.03.2014, 14:57
kravets, так правый столбец - это расчетные вероятности состояний системы,
а не отдельных элементов. P0 - вероятность того, что все элементы исправны,
P1 - вероятность того, что ровно один элемент отказал (неважно какой), и так
далее, P10 - вероятность того, что все 10 элементов отказали. Естественно, что
вероятности разного количества отказавших элементов системы неодинаковы.
Такой подход - это в соответствии с теорией надежности, ничего не выдумывал.
kravets, так правый столбец - это расчетные вероятности состояний системы,
а не отдельных элементов. P0 - вероятность того, что все элементы исправны,
P1 - вероятность того, что ровно один элемент отказал (неважно какой), и так
далее, P10 - вероятность того, что все 10 элементов отказали. Естественно, что
вероятности разного количества отказавших элементов системы неодинаковы.
Такой подход - это в соответствии с теорией надежности, ничего не выдумывал.
Понятно. Выглядит как нормальное распределение, что интуитивно странно.
Paul Kellerman
26.03.2014, 15:50
kravets, нет, не нормальное, а биномиальное распределение с
параметрами n = 10 и p = failure_rate / (repair_rate + failure_rate).
Но это так только при независимых отказах и восстановлениях.
kravets, не нормальное, а биномиальное распределение
с матожиданием 10 * repair_rate / (repair_rate + failure_rate).
Но это только при независимых отказах и восстановлениях.
Да, похоже
Paul Kellerman, спасибо! на машинках понятно))
Paul Kellerman
27.03.2014, 11:22
kravets, и еще, согласно центральной предельной теореме (теория вероятностей)
биномиальное распределение с ростом параметра n стремится к нормальному
с матожиданием n * p и дисперсией n * p * (1 - p). Так что все вполне объяснимо.
биномиальное распределение с ростом параметра n стремится к нормальному
Ага. Значит ощущение все-таки было правильным.
Добавлено через 51 секунду
Но меня больше интересует технологическая часть - как оно у Вас тикает в потоках?
Paul Kellerman
27.03.2014, 12:13
Всего 12 потоков.
10 потоков имитируют 10 элементов. Каждый поток в каждый момент времени
находится в одном из двух состояний (элемент исправен, элемент неисправен),
и меняет свое состояние на противоположное через экспоненциально распреде-
ленное случайное время с матожиданием 1/failure_rate, если элемент исправен,
1/repair_rate, если неисправен. В течение этого случайного времени поток спит.
Если режим отказов Single, то все исправные потоки перед началом наработки
на отказ пытаются захватить мьютекс (специальный исключающий семафор,
его может захватить только один поток, остальные ждут пока не освободиться).
Если режим восстановлений Single, то все неисправные потоки перед началом
наработки на восстановление пытаются захватить другой аналогичный мьютекс.
Отдельный специальный поток работает и собирает статистику и рассчитывает
экспериментальные вероятности путем запроса состояний потоков - элементов
с периодичностью 0,001 сек. Можно чаще, но нет особой нужды, и так успевает,
элементы в среднем меняют состояние раз в 1 секунду при max интенсивности.
Ну и плюс основной поток программы, который запускает и останавливает осталь-
ные потоки, обслуживает интерфейс пользователя, обрабатывает действия пользо-
вателя, и раз в 20 мс по таймеру обновляет отображаемую на экране информацию.
Если режим отказов Single, то все исправные потоки перед началом наработки
на отказ пытаются захватить мьютекс (специальный исключающий семафор,
его может захватить только один поток, остальные ждут пока не освободиться).
Вот это не понял. Они ведь все должны работать "одновременно". Зачем их блокировать?
Добавлено через 48 секунд
Ну и плюс основной поток программы, который запускает и останавливает осталь-
ные потоки, обслуживает интерфейс пользователя, обрабатывает действия пользо-
вателя, и раз в 20 мс по таймеру обновляет отображаемую на экране информацию.
По сути исполнитель событийных запусков.
Добавлено через 1 минуту
Отдельный специальный поток работает и собирает статистику ... путем запроса состояний потоков - элементов
Это усложняет. Проще держать в общей памяти вектор состояний, не отвлекая потоки на ответ.
Paul Kellerman
27.03.2014, 12:32
1) Cемафоры используются только в режимах Single, в Independent они игнорируются.
2) Таймер используется только для обновления экрана, в моделировании не участвует.
3) Потоки не отвлекаются на ответ, они вообще не замечают таких запросов, т.к. поток
статистики тратит свое процессорное время при считывании флагов состояний потоков.
И кстати, поля (переменные) объектов-потоков так и так лежат в общей памяти процесса.
Paul Kellerman
26.12.2014, 10:09
Новогодняя игрушка для технарей. Enjoy!
Простенький решатель марковских цепей (стационарное решение) для простеньких моделей надежности.
По заданному количеству состояний, матрице интенсивностей переходов и булевому вектору, указываю-
щему на работоспособные состояния) рассчитывает стационарные вероятности всех состояний системы,
стационарный коэффициент готовности, среднее время наработки на отказ, среднее время восстановле-
ния, а также среднее время наработки до первого отказа (причем никаких диффур, ноухау Келлермана).
Особенность: хотя интенсивности, вероятности и наработки вводятся и выводятся в виде вещественных
чисел, но вся внутренняя обработка производится в рациональных числах на базе сверхбольших целых,
это позволяет очень аккуратно решать модели, приводящие к плохообусловленным системам уравнений.
P.S. Сама по себе программа расчета (с использованием обычной вещественной float-80 обработки) была
написана давно, но особые случаи, приводящие к плохообусловленным СЛАУ (их не так много, и все же),
дающие в результате решения неверные или даже отрицательные вероятности дико раздражали, и приш-
лось погрузиться в вычислительную математику и арифметику сверхбольших целых, и победить проблему.
Paul Kellerman
29.12.2014, 11:10
Итоговая версия Markov Chain Solver (на этот год по крайней мере).
Переработал немного интерфейс, улучшил отзывчивость программы
(возможность прервать по кнопке Stop) при долгих вычислениях, и
в матрице интенсивностей сделал возможность задавать значения
в виде дробей типа 1/8760. Часто в задачах говорится типа отказ -
раз в год, и удобнее вбить дробь, чем лишнее деление выполнять.
Тщательно проверил на утечку памяти - пока вроде все кошерно.
Но возможны какие-то баги еще остались. Обнаружите - пишите!
vBulletin® v3.8.8, Copyright ©2000-2025, vBulletin Solutions, Inc. Перевод: zCarot