Портал аспирантов

Портал аспирантов (http://www.aspirantura.spb.ru/forum/index.php)
-   Свободное общение (http://www.aspirantura.spb.ru/forum/forumdisplay.php?f=102)
-   -   Игрушки Келлермана (http://www.aspirantura.spb.ru/forum/showthread.php?t=12657)

kravets 27.03.2014 11:36

Цитата:

Сообщение от Paul Kellerman (Сообщение 433337)
биномиальное распределение с ростом параметра 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 мс по таймеру обновляет отображаемую на экране информацию.

kravets 27.03.2014 12:24

Цитата:

Сообщение от Paul Kellerman (Сообщение 433349)
Если режим отказов Single, то все исправные потоки перед началом наработки
на отказ пытаются захватить мьютекс (специальный исключающий семафор,
его может захватить только один поток, остальные ждут пока не освободиться).

Вот это не понял. Они ведь все должны работать "одновременно". Зачем их блокировать?

Добавлено через 48 секунд
Цитата:

Сообщение от Paul Kellerman (Сообщение 433349)
Ну и плюс основной поток программы, который запускает и останавливает осталь-
ные потоки, обслуживает интерфейс пользователя, обрабатывает действия пользо-
вателя, и раз в 20 мс по таймеру обновляет отображаемую на экране информацию.

По сути исполнитель событийных запусков.

Добавлено через 1 минуту
Цитата:

Сообщение от Paul Kellerman (Сообщение 433349)
Отдельный специальный поток работает и собирает статистику ... путем запроса состояний потоков - элементов

Это усложняет. Проще держать в общей памяти вектор состояний, не отвлекая потоки на ответ.

Paul Kellerman 27.03.2014 12:32

1) Cемафоры используются только в режимах Single, в Independent они игнорируются.

2) Таймер используется только для обновления экрана, в моделировании не участвует.

3) Потоки не отвлекаются на ответ, они вообще не замечают таких запросов, т.к. поток
статистики тратит свое процессорное время при считывании флагов состояний потоков.
И кстати, поля (переменные) объектов-потоков так и так лежат в общей памяти процесса.

Paul Kellerman 26.12.2014 10:09

Вложений: 1
Новогодняя игрушка для технарей. Enjoy!

Простенький решатель марковских цепей (стационарное решение) для простеньких моделей надежности.
По заданному количеству состояний, матрице интенсивностей переходов и булевому вектору, указываю-
щему на работоспособные состояния) рассчитывает стационарные вероятности всех состояний системы,
стационарный коэффициент готовности, среднее время наработки на отказ, среднее время восстановле-
ния, а также среднее время наработки до первого отказа (причем никаких диффур, ноухау Келлермана).
Особенность: хотя интенсивности, вероятности и наработки вводятся и выводятся в виде вещественных
чисел, но вся внутренняя обработка производится в рациональных числах на базе сверхбольших целых,
это позволяет очень аккуратно решать модели, приводящие к плохообусловленным системам уравнений.

P.S. Сама по себе программа расчета (с использованием обычной вещественной float-80 обработки) была
написана давно, но особые случаи, приводящие к плохообусловленным СЛАУ (их не так много, и все же),
дающие в результате решения неверные или даже отрицательные вероятности дико раздражали, и приш-
лось погрузиться в вычислительную математику и арифметику сверхбольших целых, и победить проблему.

Paul Kellerman 29.12.2014 11:10

Вложений: 1
Итоговая версия Markov Chain Solver (на этот год по крайней мере).
Переработал немного интерфейс, улучшил отзывчивость программы
(возможность прервать по кнопке Stop) при долгих вычислениях, и
в матрице интенсивностей сделал возможность задавать значения
в виде дробей типа 1/8760. Часто в задачах говорится типа отказ -
раз в год, и удобнее вбить дробь, чем лишнее деление выполнять.
Тщательно проверил на утечку памяти - пока вроде все кошерно.
Но возможны какие-то баги еще остались. Обнаружите - пишите!


Текущее время: 21:06. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»