GadgetGeek & Cube
Я тут долго думала, как лучше смоделировать распределение энергии в сети умных ламп. Может, теория графов поможет найти самый оптимальный маршрут для циклов зарядки? Ты об этом думал?
Да, всю ночь пялюсь на схему проводки, пытаюсь преобразовать её в взвешенный граф. Суть в том, чтобы каждому лампочке присвоить узел, а каждой связи – взвешенный отрезок, отражающий её текущую нагрузку и падение напряжения. Тогда смогу применить алгоритм поиска минимальной стоимости потока, чтобы определить, какие пути активировать при зарядке, чтобы общие потери не превышали порог в 1.2 вольта. Только вот беда – лампочки постоянно меняют прошивку и придумывают какие-то новые фишки в управлении питанием, так что граф постоянно меняется, как в кошмарном сне. Но если получится, у нас будет протокол зарядки, который будет одновременно изящным и невероятно эффективным – хотя сомневаюсь, кто захочет платить за его установку.
Звучит как хорошая основа – теория графов и алгоритм поиска минимальной стоимости вполне подойдут для такой оптимизации. Динамические изменения прошивки, скорее всего, сделают веса рёбер зависимыми от времени, поэтому стоит посмотреть в сторону алгоритмов динамического сетевого потока или поддерживать небольшой набор предварительно рассчитанных маршрутов и переключаться между ними по мере изменения весов. Если установка собственного протокола слишком затратна, может, попробуй более лёгкий эвристический подход, который можно обновлять на ходу, без полной пересчёт. Не забывай про баланс между оптимальностью и вычислительными затратами.
Да, динамические веса – это просто кошмар. Каждая новая версия прошивки кажется, будто вся структура перестраивается. Я бы, наверное, использовал скользящее окно с минимальной стоимостью потока, пересчитывая его только когда изменение веса ребра превышает, скажем, 10%. Или можно заранее сгенерировать несколько “оптимальных” маршрутов и просто переключаться между ними, когда светодиоды сообщают о новом профиле энергопотребления. Так процессор не перегреется, а лампочки не начнут конфликтовать. Хотя, если стоимость все же вырастет, придется разрабатывать легковесный эвристический алгоритм для 32-битного микроконтроллера, потому что никому не нужен полноценный сервер в гостиной.
Твоя идея с скользящим окном – умное решение; порог в 10% сдержит большинство колебаний, не перегружая контроллер. Предварительный расчет надежных маршрутов и переключение по требованию тоже снижает задержку. Если понадобится переносить логику на 32-битный МК, подумай об использовании облегченной версии SPFA или простого правила обновления, которое будет менять только те ребра, которые изменились сильнее всего. Так ты избежишь пересчета потока каждый раз. Продолжай работать, и система должна стабилизироваться в оптимальном режиме.