Как мы преуспели на международном конкурсе по выращиванию цифрового салата

Настоящее всё больше походит на то, что некогда представлялось фантастикой. Меня зовут Павел Дудукин, руководитель Data Science-направления в Центре развития финансовых технологий (ЦРФТ) Россельхозбанка, и в этой статье расскажу, как мы вышли в финал международного конкурса Autonomous Greenhouse Challenge и что нас ждет дальше. 

Объединённая команда Россельхозбанка (РСХБ) и Московского физико-технического института (МФТИ) приняла участие в хакатоне Autonomous Greenhouse Challenge в 2021 году. Там собрался народ, заинтересованный в автоматизации тепличного выращивания сельхозкультур. Наша команда заняла второе место, уступив лишь объединённой команде университетов из Китая. Мы опередили участников из Стэнфордского университета, MIT, международного концерна BASF, Технического университета Мюнхена и др.

Интересно, что смогла придумать наша команда? Тогда добро пожаловать в нашу теплицу.

image-loader.svg

Autonomous Greenhouse Challenge: что это такое и причём здесь искусственный интеллект

Ежегодно, начиная с 2018 года, китайская компания Tencent (создатель WeChat) и Вагенингенский университет в Нидерландах проводят международный конкурс Autonomous Greenhouse Challenge, в котором лучшие со всего мира специалисты по искусственному интеллекту соревнуются в выращивании сельскохозяйственных культур.

Вот так выглядит настоящий автоматизированный тепличный комплексВот так выглядит настоящий автоматизированный тепличный комплекс

Конкурс ориентирован на объединение экспертов в области IT и агрономии. Дело в том, что создание автоматизированных тепличных комплексов на базе искусственного интеллекта может повысить урожайность на 15–20% при сохранении качества продуктов и минимальном ущербе окружающей среде. 

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

Нужно найти решение! Постановка задачи на хакатоне

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

Наша теплица представлена в виртуальной форме. На ознакомление с её работой и разработку алгоритмов был выделен целый месяц — первый этап хакатона. Далее в течение трёх дней была проведена питч-сессия (второй этап), во время которой команды рассказывали про свои составы и идеи решения поставленной задачи. Третий этап был заключительным: в течение 24 часов, команды разрабатывали свои решения, после чего вновь объединились составами на награждении.

Итоговое место определялось по результатам получения наивысшего показателя прибыли с теплицы и по результатам питч-сессий. Притом вердикт по прибыли занимал 60% от итогового решения, тогда как питч-сессии оценивались с весом в 40%. Оказалось, что наша команда заняла первое место по итоговой прибыли, но после питч-сессий мы стали вторыми, так как нас обошла команда из Китая.

И прежде, чем мы перейдем к разбору решения, напишем несколько строк о команде.

Мы были первыми, кто представлял Россию на этом мероприятии.

Наверняка у вас появился вопрос: почему именно РСХБ и МФТИ представляли Россию на Autonomous Greenhouse Challenge? Отвечаем.

В июне 2020 года Россельхозбанк и Московский физико-технический институт создали совместную лабораторию по развитию искусственного интеллекта. Основными задачами этого сотрудничества являются повышение качества клиентского опыта, оптимизация бизнес-процессов за счёт использования продвинутой аналитики и методов машинного обучения, а также развитие функциональности экосистемы для компаний и агропредпринимателей через инструменты сервиса «Своё Фермерство».

В России не так много специалистов в области автономного управления теплицами, и мы в рамках сотрудничества с лабораторией МФТИ решили стать одними из первопроходцев в данной сфере.

Взлёты и падения. Идеи решения поставленной задачи

Задача оказалась интересной не только с технической точки зрения, но и с концептуальной. Поэтому наши специалисты сразу ухватились за неё и организовали мозговой штурм из своих подходов. Выделим основные.

Reinforcement Learning / Обучение с подкреплением

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

А.А. Милн, «Винни-Пух и все-все-все»

(перевод Б. Заходера)

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

image-loader.svg

Приведу полюбившийся многим студентам пример из книги «Глубокое обучение. Погружение в мир нейронных сетей» авторства С. Николенко, А. Кадурина и Е. Архангельской. Когда ребёнок учится ходить, он сначала делает что-то отдалённо похожее на правду, что подсказывает ему инстинкт (впрочем, соотношение между инстинктами и собственным прижизненным обучением — это очень тонкий вопрос), и получает результат поначалу, скорее всего, отрицательный. Тогда он немного меняет своё поведение, возможно, довольно случайным образом, и смотрит, не увеличилась ли, так сказать, целевая функция. А когда что-то начинает получаться, ребёнок запоминает, как это произошло, и затем повторяет то же самое, пытаясь развить успех дальше.

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

Так осуществляется взаимодействие агента со средойТак осуществляется взаимодействие агента со средой

Здесь стоит заострить внимание именно на определении функции награды.

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

Зачастую агент может обойти функцию награды — научиться максимизировать её, не продвигаясь в решении поставленной задачи, на что можно смотреть как на своеобразное проявление переобучения. Для более наглядного изучения данной проблемы советуем прочесть статью от OpenAI, в которой рассматривается интересный случай: агент, вместо того чтобы научиться быстро и точно проходить водную трассу, понял, что максимизировать результат можно, если просто собирать бонусы на месте, где они часто появляются. 

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

Генетический алгоритм

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

Генетический алгоритм — это в первую очередь алгоритм, позволяющий решать оптимизационные задачи. Пока ничего нового. Интерес его в том, что концепт позаимствован из теории эволюции. Рано или поздно животное выбирает себе какую-то пару (здесь мы условно исключаем существование партеногенеза), после чего происходит процесс размножения. И, как известно, сама по себе эволюция происходит из рекомбинации генов, мутаций, размножения и естественного отбора, когда появившиеся признаки устанавливаются. Если углубляться в биологию, можно и дальше черпать вдохновение законами Менделя и Геккеля-Мюллера. Но нас интересует упрощённая модель, которую можно изобразить с помощью следующего псевдокода:

image-loader.svg

Единственное, что здесь может быть непонятно, — это фит-функция. Проще говоря, это процедура естественного отбора, представляющая из себя какое-то выражение, подставляя значения в которое мы смотрим, насколько результат близок к желаемому результату — значению X.

Попробуем расшифровать в контексте нашей задачи. Сначала создаётся популяция объектов — в нашем случае набор алгоритмов управления теплицей с различными параметрами. Далее происходит «скрещивание» объектов — создание новых алгоритмов из старых путём рекомендации параметров ближайших предков. Затем случайным образом происходят мутации, направленные на повышение разнообразия популяции. Финальным шагом является отбор эталонных особей, то есть наилучших алгоритмов, прошедших валидацию фит-функцией. 

Многократное повторение приведённого алгоритма зачастую приводит к околооптимальному решению задачи. Диалектично! В нашем случае оптимальность решения определяется результатами прибыли, приходящейся на квадратный метр теплицы.

Простой, но победный вариант

Изначально мы распараллелили решение задачи между исследователями данных и опробовали все методы, описанные выше. Но по итогу выбрали более простой способ: моделируем стратегии управления простыми параметрами, далее проводим серию моделирований, после чего на пространстве параметров моделирования обучаем простой алгоритм для поиска оптимального набора параметров стратегий.

Именно на этом варианте решения мы и остановились, так как наряду с качеством проекта стояли и ограничения по времени.

В самом начале мы попытались оптимизировать параметры за всё время и получили довольно хороший результат. Удалось найти оптимальное количество дней, за которое салат вырастет с наиболее успешными показателями эффективности. Наряду с этим пробовали оптимизировать параметры управления теплицей поочередно, варьируя их в различных пределах и пытаясь найти значения таких параметров, что приводят к максимизации итоговой прибыли. В итоге наш оптимизационный алгоритм всё-таки смог подобрать такие параметры управления теплицей. Стоит также упомянуть для справки некоторые условности, с которыми мы столкнулись.

Общение с симулятором происходило через HTTP-запросы. То есть на вход подавался файл с параметрами управления теплицей, среди которых были дата начала управления (своеобразный параметр запуска) и дата завершения управления теплицей (на основе полученного интервала производился расчёт).

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

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

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

Пример входного файла с параметрами управления

{
    "simset":{
        "@startDate":"2021-03-05",
        "@endDate":"2021-04-09"
    },
    "common":{
        "CO2dosing":{
            "@pureCO2cap":100
        }
    },
    "comp1":{
        "heatingpipes":{
            "pipe1":{
                "@maxTemp":60,
                "@minTemp":0,
                "@radiationInfluence":"100 300"
            }
        },
        "screens":{
            "scr1":{
                "@enabled":true,
                "@material":"scr_Blackout.par",
                "@closeBelow":5,
                "@closeAbove":1000,
                "@ToutMax":8,
                "@lightPollutionPrevention":true
            },
            "scr2":{
                "@enabled":true,
                "@material":"scr_Transparent.par",
                "@closeBelow":"0 100; 10 5",
                "@closeAbove":1000,
                "@ToutMax":12,
                "@lightPollutionPrevention":false
            }
        },
        "illumination":{
            "lmp1":{
                "@enabled":true,
                "@intensity":120,
                "@hoursLight":16,
                "@endTime":18,
                "@maxIglob":50,
                "@maxPARsum":50
            }
        },
        "setpoints":{
            "temp":{
                "@heatingTemp":{
                    "01-01":{
                        "r-1":14,
                        "r+1":18,
                        "s-1":18,
                        "s+1":14
                    }
                },
                "@radiationInfluence":"200 400 2",
                "@ventOffset":{
                    "01-01":{
                        "r":1,
                        "r+1":2,
                        "s":2,
                        "s+1":1
                    }
                },
                "@PbandVent":"0 10; 20 5"
            },
            "CO2":{
                "@setpoint":600,
                "@setpIfLamps":800,
                "@doseCapacity":"100"
            },
            "ventilation":{
                "@winLeeMin":0,
                "@winLeeMax":100,
                "@winWndMin":0,
                "@winWndMax":100,
                "@startWnd":50
            }
        }
    },
    "crp_lettuce":{
        "Intkam":{
            "management":{
                "@plantDensity":"1 85.5; 11 42.7; 16 30.0; 20 21.0; 27 15.0"
            }
        }
    }
}

Не стоит обделять вниманием выходные данные. Приведём пример их исполнения.

Результаты симуляции

{
    "economics":{
        "info":{
            "unit":"euro/m2",
            "fractionOfYear":0.096,
            "AverageHeadm2":26.9,
            "bonusMalusOnDMC":0.9,
            "lostByLowQuality":0.0
        },
        "fixedCosts":{
            "objects":{
                "comp1.Greenhouse.Costs":1.63,
                "comp1.Lmp1.Costs":0.485,
                "comp1.Scr2.Costs":0.067,
                "comp1.ConCO2.Costs":0.144,
                "spacingSystem":0.575,
                "plants":3.229
            },
            "total":6.13
        },
        "variableCosts":{
            "objects":{
                "comp1.Pipe1.GasUse":0.276,
                "comp1.Lmp1.ElecUse":0.851,
                "CO2":0.329
            },
            "total":1.456
        },
        "gains":{
            "objects":{
                "product":0.0
            },
            "total":0.0
        },
        "balance":-7.586
    }
}

Как понимать эти данные? Тут всё просто.

Например, можно обратить внимание на показатель fractionOfYear, из которого видно, что мы выращивали салат и управляли теплицей 35 дней, что составляет 0,096 от года. Так же и с остальными выходными показателями, где средняя плотность салата приблизительно равна 27 голов на квадратный метр, фиксированные и переменные издержки: 6,13 и 1,456 евро на квадратный метр соответственно.

Мы получали конкретные численные результаты. Видно, что прибыли с условной продажи нет, а итоговый баланс равен –7,586 евро на квадратный метр.

Банкротство! Но не стоит унывать, ведь это лишь пример. Именно по выходной таблице симулятора с такими же наборами параметров и строилась градуировочная таблица с победителями. И именно по этой части решения наша команда вышла на самый верх лидерборда, заняв первое место.

Как оказалось, не всегда сложное решение является лучшим. Конечно, при
идеальных обстоятельствах и условиях, с учётом большего времени на разработку,
было бы резонно использовать первый вариант — обучение с подкреплением, так как
в долгосрочной перспективе он позволит достичь наилучших результатов.

Трудности, с которыми мы столкнулись

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

Какие планы на будущее?

Хакатоны и теплицы — достаточно успешный и полезный гибрид для агропромышленности. На рынке хакатонов уже сейчас есть настоящий, рабочий эксперимент, в котором командам предлагается работать с физическими, а не виртуальными теплицами.

Поэтому выбор университета для проведения такого масштабного конкурса не удивляет: исследовательский университет Вагенингена располагает уникальным высокотехнологичным тепличным комплексом, все отсеки которого оснащены различными приводами для контроля условий выращивания салата внутри теплиц.

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

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

Схема потоков данных и разделения прав на чтение/запись для участников командыСхема потоков данных и разделения прав на чтение/запись для участников команды

Пока симулятор доступен, мы можем тренироваться в создании алгоритмов, использовать и тестировать наработки предыдущего этапа. Речь не идет о полном копировании, так как организаторы изменили сорт салата — на новом этапе будем выращивать сочный Лугано вместо Латука.

Угадайте, где какой салат? Подсказка: слева - Латук, а справа - ЛуганоУгадайте, где какой салат? Подсказка: слева — Латук, а справа — Лугано

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

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

И напоследок

Закончить статью решил некоторыми размышлениями на тему актуальности автоматизации и AI в сфере агропромышленности. Буду рад вашим дополнениям и отзывам по теме в комментариях.

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

Нынешние подходы всё более и более вытесняются стремительно растущим рынком и порождаемым нами спросом. Нужны современные подходы для «светлого будущего».

Мне в этой связи наиболее перспективным направлением кажется использование нейросетей и искусственного интеллекта для создания сельскохозяйственных роботов и систем контроля урожая. Нейросети всесторонне развиваются в прикладном плане: представляют новые результаты в искусстве, медицине и многих других сферах, среди которых есть и агропромышленность.

Управлять разными сельскохозяйственными процессами человек скоро будет не в силах самостоятельно ввиду их постоянного расширения. Мы не автоматы. Нам нужны контролируемые преемники, которые будут в состоянии принимать оптимальные решения. Если отдельные сферы могут ещё подождать прихода высокотехнологичных нововведений, то агропромышленность нуждается в них уже сейчас.

И эта потребность не осталась незамеченной. Сегодня существуют крайне интересные и перспективные технологии. Например, проект испанской компании Agrobot — робот, который способен за три дня собрать клубнику с 800 соток. Для оценки зрелости ягод робот использует технологии искусственного интеллекта. Сенсоры анализируют ягоды, а графические процессоры оценивают цвет плода и его товарный вид, причем в базу записываются данные о каждом плоде.

Или можно привести в пример детище бургундского изобретателя Кристофа Миллота — робота Wall-Ye V.I. N., что усердно трудится на виноградниках. Это устройство с четырьмя колесами, двумя руками и шестью камерами прокладывает маршрут автоматически и использует ИИ для того, чтобы определить, чем заняться в данный момент. В день может обрезать до 600 виноградных лоз.

Wall-Ye V.I. N. занимается не только обрезкой и пасынкованием, но и накапливает важные данные о состоянии и витальности почвы, плодов и лозы. Двигаясь от лозы к лозе, он выявляет разные особенности растений, фотографирует и записывает данные с шести камер, отмечая каждую лозу, после чего в работу включаются его манипуляторы.

image-loader.svg

Разве это не то, ради чего стоит трудиться? Для себя мы на этот вопрос уже ответили.

© Habrahabr.ru