
Решаем задачи автоматизации
На базе программ 1С
И собственных решений
А потом обслуживаем
По разумным ценам
Руководитель управления информационных технологий Олег Филиппов в рамках INFOSTART EVENT 2017 COMMUNITY рассказал, какие задачи можно решить с помощью нейронных сетей и генетических алгоритмов в 1С, а также как собрать такую сеть или алгоритм в 1С – что написать в коде и как это потом применить.
Присоединяйтесь к нам на конференции этого года INFOSTART EVENT 2019
Если говорить о нейросетях, которые можно использовать для прикладных задач, в частности, для работы с программами 1С, то речь пойдет не о глубоких, самообучающихся сетях, поскольку это совершенно другой уровень, здесь скорее имеются в виду, наоборот, самые простые системы.
Нейронную сеть можно представить в виде структурной модели, характеризующейся наличием входов и выходов, при этом можно «обучить» – задать некое соответствие данных, которые поступают на вход, и данных, которые должны получиться на выходе, чтобы в дальнейшем получать последние уже автоматически. «Начинка» системы – нейроны, имеют связи разного веса, а при обучении происходит подстройка этих весов. От веса (большего или меньшего) связи нейронов в модели зависит их «поведение» – импульс, который его характеризует большей или меньшей «возбужденностью». При этом система не содержит в себе алгоритма, позволяя без анализа закономерностей «подстроиться» под статистические данные.
Если говорить образно, это позволяет не тратить время на решение задачи, а просто использовать статистические данные для получения результата: не требуется детально разбираться в вопросе, строить полноценную математическую модель – это шанс решить задачу, не разбираясь в том, как она решается.
Нейронов в сети может быть много, несколько слоев, или, напротив, он может быть один, но при этом будет, например, два десятка связей. Такая сеть будет работать как линейная функция – рисовать прямую. Если увеличить количество нейронов до двух-трех, получится линейная регрессия, то есть некая модель, которая позволяет найти и продолжить ряд чисел/зависимостей, но при этом будет выдавать более качественный результат, чем просто линейная регрессия, выявлять такие зависимости, которые без сети увидеть крайне проблематично. Однако точный x2 с помощью нейросети получить не получится в любом случае, потому что здесь все опирается на вероятностную модель – всегда есть некоторое приближение и аппроксимация. То есть, если при помощи нейронной сети нарисовать параболу или синусоиду, визуальная оценка графика не выявит отклонений, но если оценить каждую точку по отдельности, по каждой из них будет небольшое расхождение.
Нейросеть можно применять в решении любых задач, по которым накоплен определенный объем статистики, определены входы и выходы, то есть там, где применима линейная регрессия. Например, задача распознавания паттернов и аппроксимации функций. По сути, нейронная сеть – это математическая модель, составленная на языке C++, которая не требует написания кода, поскольку для ее постройки разработана удобные инструменты-конструкторы
Приведем пример «из жизни»
Есть некая розничной сети, руководство которой поставило задачу узнать, где, несмотря на большое количество посетителей, мало продаж. Для выполнения этой задачи нужен, как минимум, аналитик, чтобы описать программисту задачу и составить ТЗ, и сам программист. Но если использовать нейросеть, то получится, что никакой задачи нет, а есть данные, сопоставив которые, можно получить желаемый отчет (вход: количество посетителей в магазинах, выход: продажи по магазинам).
Если усложнить задачу и потребовать учитывать, какие продажи были проведены по акции (акции влияют на продажи), программист просто добавляет в выгрузку новую колонку, обучает нейронную сеть и получает уточненный отчет. Если потребуется иметь в виду сезонность и выходные, то есть составить отчет с учетом дней недели и месяцев, в ту же модель добавляются дополнительные условия – дни недели и месяцы, сеть переобучается и выдает новый вариант отчета.
В процессе программист не разбирался в задаче, не вникал, как ее решать, не строил алгоритмов, а просто использовал статистику, имеющуюся в базе, из которой он, не прибегая ни к каким аналитикам, построил модель и использовал ее в отчете.
ВХОДЫ:
Всего получается четыре колонки.
ВЫХОДЫ:
Сопоставление входам выходов – и есть обучение, которое в нашем примере дает продажи в разрезе каждой совокупности дополнительных условий.
Если описать процесс в двух словах, получится – Matlab генерирует библиотеку на .NET, которая далее используется в 1С. Опишем процесс поподробнее:
Заметим, что Matlab плохо работает с COM-объектами, генерируя «кривую» COM-библиотеку, которая должна на входе получать дополнительные параметры, а с такой библиотекой 1С работать не умеет. Поэтому в 1С лучше использовать .NET сборки.
Строчек кода совсем немного, но на основании этого шаблона в дальнейшем можно создавать любые вариации – допустим, увеличивать количество элементов.
Первое, что хочется сказать про генетический алгоритм – это гораздо проще, чем кажется из названия: он не содержит структурных вычислений, многоуровневой логики или математических расчетов. Как правило – это 10 строчек кода, которые нужны, чтобы выбрать лучшую особь (любой набор параметров, которые у нас имеются) и сгенерировать случайным образом популяцию. Большего для нормальной работы такого алгоритма не требуется. В основе построения генетического алгоритма лежат несколько простых шагов.
Но для начала приведем пример его прикладного использования: логист строит маршрут объезда неких точек и в результате получает порядок объезда. Окончательный или промежуточный порядок обхода точек – это и есть одна особь.
Чтобы выбрать лучшую особь в 1С, нужно использовать логику, заложенную в 1С, то есть использовать наш алгоритм непосредственно в 1С-решении. При этом код 1С будет у каждого особый, но логика действий одна и та же.
Наборы параметров перемешиваются, получая новые: вариант объезда a и b скрещивают – берут что-то из одного, а что-то из другого.
В нашем примере не только поиск оптимального маршрута может считаться результатом. Например, результатом будет считаться наиболее подходящий с точки зрения системы вариант, выбранный ею за установленное нами время, поскольку весь поиск займет 4 часа, а нам нужно решение за 10 минут. В этом случае маршрут, который нам подберет система за 10 минут – это и есть результат. Или в качестве условия можно задать стоимость проезда меньше N рублей. И так далее… В любом случае, результирующая популяция, которую мы получим при достижении заданного условия, будет содержать в себе окончательную особь – результат поиска.
В заключении обратим внимание: генетический алгоритм не гарантирует, что он выберет лучшее решение. И если после 4 часов работы найдено какое-то решение, не факт, что оно – лучшее. Если говорить о примере – возможно, найдется и более скоростной маршрут объезда. Генетический алгоритм гарантирует только то, что это решение лучше, чем другие, при выборе данных в определенной последовательности.
Подпишитесь на рассылку и получайте самые свежие статьи 1 раз в месяц специально для вас