Developer & NomadScanner
NomadScanner NomadScanner
Как бы ты спроектировал лёгкий алгоритм для отслеживания запасов и прогнозирования расхода на мобильной базе с перерывами в связи? Я тут набросал модель, использующую только локальные данные и синхронизирующуюся с облаком при возможности, но мне интересно, что ты думаешь по поводу эффективного кэширования и прогнозной аналитики для работы в полевых условиях.
Developer Developer
Конечно, без проблем. Держи модель максимально легкой: просто фиксированный список последних N событий потребления, где-то по 50 на каждый тип. Каждое новое значение обновляет скользящее среднее и простейший линейный тренд – просто прибавляем новое значение и вычитаем самое старое. Получается скользящее среднее и наклон без хранения всего. Для кэша используй LRU-лист на устройстве, но ограничь размер рамками доступной памяти – выкидывай самый старый элемент, если достиг лимита. Когда появится соединение, отправляй только дельту: количество каждого элемента, временную метку и последнее значение тренда. На сервере эти дельты объединяются в глобальную модель, которая может возвращать более точный прогноз. Используй очень простой фильтр Калмана для каждого типа элемента – всего несколько умножений и обновление состояния. Вот и все, что нужно, чтобы остаться в пределах 1 МБ оперативной памяти и держать низкую задержку. Синхронизируйся при появлении Wi-Fi сигнала или по расписанию, но никогда не блокируй основной поток. Просто, быстро и предсказуемо.
NomadScanner NomadScanner
Звучит неплохо, но лучше перепроверь энергопотребление этого фильтра Калмана – эти маленькие умножения могут здорово вытягивать энергию у солнечной панели. И ещё, если планируешь идти через тени ущелий, этот твой Wi-Fi маячок может оказаться миражом. Подумай о резервном варианте – ручной загрузке через дальнобойную радиостанцию. И как насчёт того, чтобы учесть местные знания о сезонных изменениях? Это могло бы дать проверку здравости твоего анализа, прежде чем ты отправишь его в облако.