Алгоритм обработки информации от датчиков (фильтрация помех) Есть следующая задача.
У меня поступает информация от некоторых датчиков. Количество датчиков не фиксировано — они могут добавляться и исчезать, но у каждого в любом случае свой уникальный идентификатор. Информация поступает неравномерно во времени — то есть датчик может молчать неделю, а потом выдать два значения с интервалом в секунду а потом исчезнуть вообще; или же может внезапно появиться датчик, который будет регулярно присылать данные. Для простоты будем считать, что каждый датчик выдаёт значение из некоторого фиксированного набора значений — то есть датчики дискретны. Плюс к тому датчики приведены друг к другу = откалиброваны — то есть если любой датчик выдаёт А, то это А. Данные с датчиков пишутся в лог в формате (время, идентификатор, значение).
Задача заключается в фильтрации информации. Мне нужно из этого лога выбрать ОДНУ запись, которую я считаю текущей истиной. То есть, например, если я получаю свежую запись от одного датчика, что значение у меня А, но перед этим 10 датчиков говорили, что значение на самом деле Б, то истина на данный момент (!) это Б. Значения А-с-половиной быть не может — всё дискретно. Если дальше другие датчики начнут подтверждать, что да, всё-таки А, то со временем А станет истиной. В то же время задача не сводится к обычной фильтрации помех, потому что если был один датчик который твердил всю неделю каждую секунду, что значение = А, а тут появляются пять датчиков, которые совсем недавно говорят, что на самом деле значение Б, то истиной сразу становится Б, несмотря на всю историю — количество независимых источников тоже имеет вес, в общем.
То есть у меня получается некая функция двух переменных — время (устаревание информации) и количество уникальных датчиков в момент времени. И опять же всё усложняется тем, что я не могу перейти в дискретность — я не могу взять информацию за час и по ней делать выводы, потому что у меня инфа поступает неравномерно, и вся суть может находиться сразу за этим интервалом. Я дошёл в своих размышлениях до того, что здесь явно суть в том, что вес записи (а мне нужно будет в итоге просто выбрать запись у которой этот вес наибольший) зависит не только от значений в этой самой записи (времени и собственно значения), а и от значений в соседних записях. То есть таблицу нужно будет пройти по N раз для каждой из N записей. Ну, это я так думаю — я не утверждаю.
Я старался объяснить как можно более понятно, если что — задавайте любые уточнения — я буду отвечать. Данные пишутся в SQL базу, так что можно оперировать терминами SQL, если так удобней. Но в целом меня интересует сам алгоритм, реализацию я осилю.
P.S. Очень не исключаю, что на этот счёт есть готовый давно известный алгоритм…

21 Авг 2019 в 06:14
157 +1
0
Ответы
1

Для решения данной задачи можно использовать алгоритм взвешенного голосования (Weighted Voting).

Суть алгоритма состоит в следующем:

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

Для реализации данного алгоритма можно написать SQL-запросы, которые будут анализировать данные в таблице, вычислять вес для каждого значения и выбирать наиболее подходящую запись.

Этот алгоритм позволит учитывать как значения датчиков, так и количество подтверждающих их датчиков, а также учитывать временной аспект.

Однако, следует помнить, что алгоритмы обработки данных могут быть довольно сложными и требуют тщательного тестирования, особенно при работе с реальными данными.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 264 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир