Как стать автором
Обновить

Комментарии 8

Вот интересно, все время хочу, что то подобное приделать к умному дому.

У меня на кухне три зоны соответсвенно три лампы освещения, два датчика освещенности+движения+температуры, три выключателя и плюс светодиодная подсветка стола. Хочу добавить еще регулятор температуры. Да и еще время (таймер отключения, включать стол только после трех вечера).

Все это связанно по z-wave и писать правила «если то, то это» очень муторно. Вот и думаю все время про машинное обучение, только я в этом дуб. И как раз про q-обучение в последнее время и думаю. Так что статья к месту. Вот что меня в статье пугает это «После обучения модели (~15000 итераций) матрица Q имеет вид...»

15000 итераций. Люди столько не живут. Можно как то ускорить обучение? Автоматичски же не получится вычислить награду. По идее я сам должен решать, хорошо или плохо поступил контроллер.
Как у вас связано освещение и датчик температуры?..
Если вы сделаете две кнопочки для контроллера «хорошо» и «плохо», сможете ли вы сами распознать, какое условие для вас будет «хорошо», а какое — «плохо», чтобы научить его?
Думаю ваш случай банальный и тривиальный и как раз «если-то» подойдет гораздо лучше.
Вы же не можете ввести в систему дополнительный датчик «настроение хозяина», который бы под хорошее настроение подбирал яркую подсветку пола и включал энергичную музыку, а под плохое — синие цвета и мелодию скрипки.
«Как у вас связано освещение и датчик температуры?..»

никак, я имел ввиду, что датчик комбинированный «свет, температура, движение, вирбрация» и что датчик температуры можно связать в принципе связать с регулятором температуры.

«Думаю ваш случай банальный и тривиальный и как раз «если-то» подойдет гораздо лучше.»

У меня сейчас так и есть. Сижу и пишу правила

«Если сработал датчик движения в первой зоне и в первой зоне темно, то включи свет в этой зоне и поставь таймер на отключение на 2 минуты»
«Если в первой зоне датчик движения сработал и свет в этой зоне включен, то сбрось таймер отключения опять на 2 минуты»
«Если сработал датчик движения во второй зоне, свет в первой зоне был включен по датчику двежения, тогда выключить свет в первой зоне»
«Если сработал датчик движения во второй зоне, включить свет в о второй зоне»

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

«Вы же не можете ввести в систему дополнительный датчик «настроение хозяина», который бы под хорошее настроение подбирал яркую подсветку пола и включал энергичную музыку, а под плохое — синие цвета и мелодию скрипки.»

Да о том не идет речь, это уже слишком.

Я по дилетантски представлял обучение себе так. У меня так и так есть уже кнопки под каждое действие. Включить/выключить свет в первой, второй, третей зоне, настроить температуру на батарее отопления. Это воможные действия. Есть куча состояний. Время, температура, датчик движения, освещенность, время прошедшее со времени включения света, время закат/восход, пасмурно/ясно.

Так вот некая система в контроллере следит, какие я действия выполняю и в каком состоянии находятся датчики и все остальное до и после действия выполненного мной и эта система пытается предугадать мои действия. То-есть в следущий раз, при определенном состоянии датчиков система включает свет в первой зоне, а я уже пультом с кнопками «хорошо» и «плохо» либо «хвалю» систему если она угадала либо «ругаю» если свет включился не поделу.

Сначала это пассивная система, которая только следит за мной, потом все время происходит тренировка, в итоге она подключается к управлению светом в доме. При этом я не занимаюсь настройкой контроллера напрямую, а просто на часах нажимаю пару кнопок для обучения.

«Если сработал датчик движения в первой зоне и в первой зоне темно, то включи свет в этой зоне и поставь таймер на отключение на 2 минуты»
«Если в первой зоне датчик движения сработал и свет в этой зоне включен, то сбрось таймер отключения опять на 2 минуты»
«Если сработал датчик движения во второй зоне, свет в первой зоне был включен по датчику двежения, тогда выключить свет в первой зоне»
«Если сработал датчик движения во второй зоне, включить свет в о второй зоне»

Похоже у вас проблемы с архитектурой.
попробуйте внести промежуточные факторы/состояния.
Мне кажется если ввести понятия «есть человек в комнате N» которое в свою очередь будет содержать в себе что-то вроде «если последнее действие было более 5 минут и после него было движение в соседних комнатах» и т.п.
Но это лирика.

В контексте машинного обучения мне тут видится скорее нейронная сеть.
На входе датчики и состояния регуляторов, на выходе состояния регуляторов.
Чисто в лоб — один слой, обучение на фильтре Калмана.
Изначально у входов регулятора очень высокие веса.
Ну или обратное распространение, тут уж на вкус и цвет.
Основная идея в том чтобы правильную нормализацию данных делать.
В идеале максимально детерминировать всё, чтобы если человек ничего не указал это не воспринималось как «минимум» или «выкл» а было именно третье состояние «не указано».
Т.е. есть вход от человека «включено» и есть вход «выключено».
Ну или скажем дюжина входов уровней яркости света.

Вот не вижу я тут смысла подтверждениями играться. Лучше сразу правильный ответ давать т.е. полноценный учитель или его эмуляция. Подтверждение дает только «хорошо или плохо», а «учитель» дает ответ что именно хорошо а что плохо. Больше информации — меньше итераций. Но если хотите играться с подтверждениями, то подумайте в сторону «сновидений». Не скажу сходу как это пристроить в данную простую модель из статьи, но в принципе одна из функций сна это уменьшение колва итераций — во сне мы моделируем различные ситуации исходя из наших знаний, и пробуем разные варианты действий не в реальности а в эмуляции, и хотя мы не помним самих снов, но прекрасно пользуемся полученным в нем опытом.

ПС: Еще что хочу сказать — вне зависимости от пути которым пойдете, не вырубайте свет резко) Очень полезно для сглаживания ошибок — ИИ решил что человек долго не подавал признаков жизни, и решил выключить свет. Свет начал тухнуть плавно. Человек увидел что темнеет и потянулся. Датчик движения заметил и вернул свет обратно.
ППС: вообще по возможности увеличьте количество каналов информации. Человек может обходиться лишь малыми намеками на информацию потому что у него огромный багаж знаний. А машине информации нужно больше. Датчик потребления электричества в комнате/кухне чтобы заметить плиту/телевизор (холодильник в другую розетку), дополнительный датчик движения чтобы закрыть мертвую зону и отследить путь человека из комнаты и в комнату и т.п. Чем больше тем лучше… Сильно уменьшает количество итераций. Очень сильно.
Да, наверное начну с того, что отключу все правила в контроллере, да начну записывать состояние датчиков, лампочек, выключателей и регуляторов. Пару месяцев пособираю данные, а потом можно будет играться с ними виртуально.

Даже самому интересно стало посмотреть что у меня происходит.
Очень интересный вопрос. Меня заинтересовала Ваша задача. Я думаю над тем как ее решить. В каком виде Вы можете собрать данные? Это могут быть следующие столбцы:?

image

Каждая строка таблицы должна содержать значение параметров. Добавление строк, например, каждые 5 минут.
Да, я примерно так и думал. Я только хочу попробовать данные записывать сразу как они изменились. Время тоже датчик, так что при смене минут будет тоже запись, можно потом данные отфильтровать если такая точность не нужна.

Собранные данные наверное выложу на google drive и отпишусь здесь.
Каждую минуту хорошо, при смене значения тоже хорошо. А я пока соберу лабораторию и подготовлю алгоритм )
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации