PYTHON PACKAGE FOR INTELLIGENT CONTROL SYSTEMS SYNTHESIS

Cover Page

Abstract


This article is devoted to the desription of аpython library based on symbolic regression methods for control systems synthesis problem. Control sysnthesis is becoming more and more relevant, gaining particular importance in view of the rapid development of robotics. Usually, practicians and engineers apply template-type regulators when modeling, and then select optimal parameters for them. At a time when the computing power of PC’s has reached its peak, and programming languages have become extremely expressive due to the high level of abstraction and the vastness of libraries, it is better to implement the synthesis in the form of a library. Python was chosen as the language for synthesis implementation. According to the authors of the article, Python is a convenient language for programming matrix and vector calculations thanks to the numpy package. Moreover, the share of projects written in Python in the web service for hosting Github has been steadily increasing recently, which indicates the support of the language from the developer community. This article describes how to use the package to solve the problem of control synthesis. The authors provide the description of the symbolic regression method, the network operator and algorithms for finding the optimal solution using the principle of small variations of the basic solution. In the experimental part of the article, an example of how to use the library to solve the problem of synthesis of control of a mobile robot moving on a planewith obstacles is considered.


ВВЕДЕНИЕ Применение методов символьной регрессии для решения задачи синтеза управления в последнее время становится наиболее популярным из-за быстрого развития вычислительной техники. Для применения методов символьной регрессии необходимо создание специального программного обеспечения, которое должно включать функции кодирования и декодирования математических выражений тем или иным методом символьной регрессии, эволюционные алгоритмы поиска оптимального решения, функции для моделирования объекта управления и др. Несмотря на то, что разработанные программные продукты для решения задачи синтеза системы управления методом символьной регрессии создаются уже в течение последних десяти лет, универсальная библиотека, которая могла бы быть использована широким кругом пользователей, до сих пор отсутствует. Язык программирования Python в настоящий момент имеет исключительную популярность и причисляется к языкам искусственного интеллекта или приравнивается к математическим пакетам. Скорее всего, это вызвано не особой лексикой языка или дополнительными операторами, или типам данных, а наличием большого количества библиотек, практически по всем актуальным вычислительным направлениям. Особую популярность приобрел Python у специалистов в области искусственных нейронных сетей. Процесс обучения искусственной нейронной сети методом обратного распространения ошибки доведен в библиотеках Python до утилитарного состояния, когда пользователь уже может использовать искусственную нейронную сеть для решения своих задач, особо не вникая в технологию обучения и теорию искусственных нейронных сетей. Приблизительно так же мы используем функции математических пакетов типа MatLab, например, при вычислении корней полиномов или решения систем дифференциальных уравнений. Одной из целей создания библиотеки Python является расширение круга пользователей, особенно прикладников, занимающихся разработкой систем автоматического управления сложными объектами или, в частности, робототехническими устройствами. ЗАДАЧА СИНТЕЗА УПРАВЛЕНИЯ Задача синтеза представляет собой задачу, решение которой в общем случае должно привести к нахождению математического выражения, описывающего функционирование системы управления. Заметим, что системы искусственного интеллекта - это системы управления некоторыми объектами. В этом случае задача синтеза управления является общей задачей, при решении которой иногда требуется создание систем искусственного интеллекта. В задаче синтеза управления [1] предполагается, что известна математическая модель объекта управления. В общем случае модель объекта управления описывается системой обыкновенных дифференциальных уравнений ẋ = f(x, u), (1) где x - вектор состояния объекта управления; u - вектор управления; x = [x1…xn]T, u = [u1…um]T; m £ n. Компоненты вектора управления ограничены u i i - £ ui £ u +, i = 1, m, (2) - + где ui , ui · заданные величины; i = 1, m. Для системы (1) задана область начальных значений x(0) = x0 Î X0. (3) Заданы терминальные условия как цель управления φi(x(tf)) = 0, i = 1, r, r £ n, (4) где tf - время окончания процесса управления, может быть строго заданным или в общем случае ограниченным и определяемым в процессе решения задачи, например, по достижении терминального многообразия (4) = ⎨ ⎧⎪t, если || j(x(t)) || £ e и t < t + t , f ⎪⎩t + - иначе (5) где t+ - предельное время процесса управления; ε - малая положительная величина; φ(x(t)) = [φ1(x(t))…φr(x(t))]T, r || j(x(t)) || = j2 (x(t)). å i i =1 Задан критерий качества управления t f J = F (x(t f )) + ò f0 (x(t), u(t))dt ® min. 0 (6) Необходимо найти управление в виде функции от координат пространства состояний u = h(x). (7) Функция (7) удовлетворяет ограничениям (2) и обеспечивает нахождение такого управления, при котором любое частное решение системы (1) с функцией (7) в правой части вместо вектора управления с начальными условиями из области (3) достигает терминального многообразия за допустимое время (5) с оптимальным значением критерия качества (6). МЕТОД СЕТЕВОГО ОПЕРАТОРА Метод сетевого оператора разработан в 2006 г. профессором А.И. Дивеевым специально для решения задачи синтеза управления [2; 3]. Метод использует кодирование математического выражения в виде ориентированного графа, который представляется в компьютере целочисленной матрицей сетевого оператора. Например, математическое выражение 2 2 y = ln(q1)x1 + q2x2 с набором элементарных функций ρ1(z) = z, ρ2(z) = z2, ρ3(z) = ln(z), χ1(z1, z2) = = z1 + z2, χ2(z1, z2) = z1z2 кодируется целочисленной матрицей следующего вида: 0 0 0 2 0 0 0 0 3 0 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 ⎡0 0⎤ ⎢0 0⎥ ⎢ ⎥ ⎢0 0⎥ Y= ⎢0 0⎥ (8) ⎢ ⎥ ⎢0 1⎥ ⎢ ⎥ ⎢0 1⎥ ⎢0 1⎥ ⎣ ⎦ и графом, представленным на рис. 1. 1 x1 2 5 2 1 2 q1 3 7 1 3 x2 2 6 1 2 4 q2 1 Рис. 1. Граф сетевого оператора [Fig. 1. Network operator graph] На рисунке 1 рядом с узлами размещены их номера, которые соответствуют номерам строк матрицы сетевого оператора. Недостатком матрицы сетевого оператора является большое количество не используемых при вычислении ее элементов. В любой матрице сетевого оператора всегда рассматриваются только наддиагональные элементы, а из них в вычислении участвуют только не нулевые элементы. Для более экономного представления графа сетевого оператора в памяти компьютера используем упорядоченные множества, которые на языке Python описываются встроенным типом list [4]. Сетевой оператор на основе списков представляется в следующем виде: R = (G1, …, GM), (9) где Gi - список операндов бинарной операции в узле i + N0; N0 - количество узлов источников в графе сетевого оператора. Список операндов представляет собой множество упорядоченных пар чисел i i i i Gi = ((α1, β1), …, (αK , βK ), (i + N0, ψi + N , i + N )), (10) i i 0 0 i i i где αj - номер узла, из которого выходит дуга, входящая в узел i + N0; βj - номер унарной операции, связанной с дугой, соединяющей узел αj и i + N0; ψi + N0, i + N0 - номер бинарной операции, связанной с узлом i + N0, или диагональный элемент матрицы сетевого оператора, находящийся в строке i + N0. Заметим, что по правилам построения сетевого оператора все бинарные операции являются коммутативными и ассоциативными, поэтому они могут иметь более двух операндов и выполнять операции над ними в любой последовательности. Определение 1. Представление сетевого оператора в виде вложенных списков называем реестром (register) сетевого оператора. Рассмотрим граф математического выражения, приведенный на рис. 1. На графе имеем четыре узла источника, N0 = 4. Рассмотрим узел 5 = N0 + 1. В узел 1 1 входят две дуги из узлов источников 1 и 2, поэтому α1 = 1, α2 = 2. Дуга, выходящая из узла 1, связана с унарной операцией 2, а дуга, выходящая из узла 2, связана с 1 1 унарной операцией 3, поэтому β1 = 2, β2 = 3. Сам узел 5 связан с бинарной операцией 2, ψ5,5 = 2. Первый список операндов имеет вид G1 = ((1,2), (2,3), (5,2)). Определяем список операндов для узлов 6 и 7. В результате получаем следующий реестр сетевого оператора: R = (((1,2), (2,3), (5,2)), ((3,2), (4,1), (6,2)), ((5,1), (6,1), (7,1))). Для вычисления математического выражения по реестру сетевого оператора необходимо располагать упорядоченным множеством аргументов математического выражения 0 A = (a1, …, aN ), (11) где aj - аргумент математического выражения, который в сетевом операторе является либо параметром, либо переменной, aN Î {q1, …, qp, x1, …, xn}, j = 1, N0. Для множества аргументов математического выражения необходимо также знать номера узлов источников, с которыми связаны аргументы математического выражения 0 I0 = (l1, …, lN ). (12) Задаем вектор для хранения промежуточных вычислений. Размерность вектора равна количеству списков реестра сетевого оператора z = [z1…zM]T. (13) Для каждого списка вычисляем значение вектора (12) ⎧r i (s1 ), если ki = 1 i b ⎪ 1 zi = ⎨ i i (14) yi + N0 ,i + N0 ( b1 ( 1 ) bk ( ki )) ⎪c r i s ⎩ , ¼, r i s i - иначе, где l ⎧a i ⎪ a j j i , если ai £ N0 s j = ⎨ , j = 1, ki. (15) ⎪zai -N · иначе ⎩ j 0 Для рассматриваемого примера получаем: N0 = 4, A = (q1, q2, x1, x2), I0 = (2,4,1,3), z = [z1 z2 z3]T, 1 1 z1 = ρ2(x1)ρ3(q1) = x2ln(q ), 2 2 z2 = ρ2(x2)ρ1(q2) = x2q , 2 2 z3 = ρ1(z1) + ρ1(z2) = x1 ln(q1) + x2 q2. Для поиска оптимального сетевого оператора используем принцип малых вариаций базисного решения [5]. В качестве малых вариаций используем те же вариации, что и для матрицы сетевого оператора [2]: замену унарной операции, замену бинарной операции, вставку унарной операции в список, удаление унарной операции из списка, если при этом в списке остается еще не менее двух элементов. Дополнительно используем вариацию замены компоненты вектора параметров. Все генетические операции скрещивания и мутации выполняем на множествах векторов, описывающих малые вариации сетевого оператора. БИБЛИОТЕКА PYTHON ДЛЯ СИНТЕЗА СИСТЕМ УПРАВЛЕНИЯ МЕТОДОМ СЕТЕВОГО ОПЕРАТОРА Библиотека состоит из трех классов, содержащих методы и поля для решения задачи синтеза управления методом символьной регрессии: 1. Base Genetics 2. Network Operator 3. Structure Genetics Класс Base Genetics предназначен для проведения параметрической оптимизации. При инициализации объекта класса Base Genetics имеется возможность передать объекту вектор, наличие которого означает, что компоненты передаваемого вектора будут являться математическими ожиданиями для нормального распределения, из которого будут генерироваться значения компоненты индивидов популяции. В случае отсутствия данного вектора популяция генерируется согласно равномерному распределению. Класс Network Operator предназначен для хранения базисной структуры и базисного вектора параметров, а также для отображения структуры в выходной вещественный вектор. При инициализации объекта класса Network Operator на вход объекту необходимо передать: 1. список унарных функций; 2. список бинарных функций; 3. список номеров входных узлов; 4. список номеров выходных узлов. Класс Structure Genetics предназначен для проведения структурно-параметрической оптимизации. При инициализации объекта класса Structure Genetics на вход объекту необходимо подать объект типа Network Operator и объект-модель. Объект-модель не входит в библиотеку и должна быть реализована отдельно в виде класса, который имел бы интерфейс, согласно которому объект-модель реализовывал численное интегрирование дифференциальных уравнений, жестко запрограммированных в классе. Чтобы объект-модель могла быть интегрирована с объектом класса Network Operator, необходимо, чтобы в ней была реализована функция set_control_function, принимающая на вход объект функции и присваивающая данную функцию внутренней переменной. Семантика кодируемой структуры Для кодирования математического выражения использовались стандартные типы языка Python - список (list) и кортеж (tuple) [4]. Одно математическое выражение представляется в виде списка, состоящего из других списков, количество которых фиксировано базисным решением. Каждый из подсписков состоит минимум из трех кортежей, длина которых равна двум. Первая позиция кортежа - это номер узла, вторая позиция - это номер операции. Если кортеж является последним в подсписке (далее диагональный), то операция является бинарной, иначе - унарной. Таким образом, чтобы структура графа математического выражения была неразрывной и ациклической (ссылка на методичку по сетевому оператору), необходимо, чтобы одновременно выполнялись два условия: 1. кортежи подсписка должны содержать только входные узлы либо узлы диагональных кортежей предыдущих подсписков; 2. каждый элемент из множества входных и диагональных узлов должен быть использован в качестве узла, над которым проводится унарная операция, минимум один раз. Структура вариаций базисного решения В классе Structure Genetics предусмотрено пять типов вариаций: 0: Замена бинарной операции 1: Замена унарной операции 2: Добавление унарной операции 3: Удаление унарной операции 4: Изменение параметра Каждый индивид популяции объекта типа Structure Genetics представляет собой матрицу n × 4, где n - число вариаций. При скрещивании двух родителей образуется пул из всех вариаций обоих родителей. К этому пулу добавляются новые вариации четвертого типа. Далее для каждого ребенка из общего пула вариаций случайно выбирается n вариаций, причем одна вариация не может быть выбрана более одного раза. Начальная популяция генерируется при помощи стандартного типа dict. Таким образом, достигается большая разнообразность, так как каждый индивид имеет уникальное значение функционала, не превышающее некоторой заданной границы. ПРИМЕР ИСПОЛЬЗОВАНИЯ БИБЛИОТЕКИ ДЛЯ СИНТЕЗА УПРАВЛЕНИЯ Библиотека была протестирована на гусеничном мобильном роботе, модель которого имеет следующий вид: ẋ = 0,5(u1 + u2)cos(θ), ẏ = 0,5(u1 + u2)sin(θ), · θ = 0,5(u1 - u2). (16) На рисунке 2 представлен примерный вид мобильного робота. Рис. 2. Мобильный робот [Fig. 2. Mobile robot] Для системы (16) заданы начальные условия: x(0) = 10, y(0) = 10, θ(0) = 0. Управление объектом ограничено -10 £ ui £ 10, i = 1,2. (17) Заданы терминальные условия xf = 10, yf = 10, θf = 0. (18) Заданы фазовые ограничения r * - (x* - x)2 + ( y* - y)2 £ 0, (19) где r* = 2,5, x* = 5, y* = 5. Задан критерий качества J = t f + t f (x f - x(t f ))2 +( y f - y(t f ))2 + ò J(r * - 0 (x * - x)2 +( y* - y)2 )dt ® min, (20) где tf - время окончания процесса управления; ⎧⎪t, если t < t + и ( x · x(t )) 2 +( y · y(t )) 2 < e t f = ⎨ ⎪⎩t + - иначе f f f f , (21) где t+ = 2,5 с, ε = 0,01, J(a) - функция Хевисайда, ⎧1, если a > 0 J(a) = ⎨ . ⎩0 - иначе Необходимо найти функцию управления в виде (7), чтобы она удовлетворяла ограничениям (17) и обеспечивала достижение объектом терминального состояния (18) с оптимальным значением критерия качества (20). Для решения задачи используем метод сетевого оператора и реализацию метода с помощью классов Python библиотеки. Определим множество аргументов (10) искомой функции управления A = (q1, q2, q3, x, y, θ), I0 = (2, 4, 6, 1, 3, 5). Определим базисное решение в форме линейной обратной связи по координатам вектора пространства состояний где qi = 1, i = 1, 2, 3. ui = q1x + q2y + q3θ, i = 1, 2, Закодированное в форме реестра сетевого оператора базисное решение имеет вид R = (((1,1), (2,1), (6,2)), ((3,1), (4,1), (7,2)), ((5,1), (6,1), (8,2)), ((6,1), (7,1), (8,1), (9,1)), ((6,1), (7,1), (8,1), (10,1))). Было проведено несколько десятков экспериментов. Три наилучших найденных решения имели следующий вид. Решение 1 u1 = q1 + sin(q2y arctg (q2)) + q2θx + ln(x), (22) u2 = min{max(q2, x), -q2y arctg (q2), cos(x)}, (23) где q1 = -3,15283, q2 = 9,942394, q3 = -7,374617. Для решения (22), (23) функционал имел значение: J = 2,381070. Результаты моделирования с решением (22), (23) приведены на рис. 3. Решение 2 ⎧⎪ln(q1 ), arctg(q2 ), 1 + q3q(- x) +⎫⎪ u1 = min ⎨ ⎬, (24) ⎪⎩+ sgn(q2 y ln(q3 )) q2 y ln(q3 ) ⎪⎭ Рис. 3. Траектория движения робота на плоскости для решения (22), (23) [Fig. 3. The robot’s trajectory on the plane for the solution (22), (23)] u2 = min{ln(q1), arctg (q2), 1 + q2y ln(q3)}, (25) где q1 = 1,340758, q2 = 8,966063, q3 = 9,291124. Для решения (24), (25) функционал имел значение: J = 2,354040. Результаты моделирования с решением (24), (25) приведены на рис. 4. Решение 3 ⎧exp(max {ln(q1 ), x, cos(q1 )}), ⎫ ⎪⎪ 3 u = min ⎨q y, cos(q )q (-q ), ⎪⎪ ⎬, (26) 1 2 3 3 3 ⎪ ⎪ ⎪⎩sgn(q3 ) q3 ,sin(q1 ) ⎪⎭ Рис. 4. Траектория движения робота на плоскости для решения (24), (25) [Fig. 4. The robot’s trajectory on the plane for the solution (24), (25)] Рис. 5. Траектория движения робота на плоскости для решения (26), (27) [Fig. 5. The robot’s trajectory on the plane for the solution (26), (27)] u2 = q2 + y, (27) где q1 = -13,161914, q2 = 4,006537, q3 = 8,425214. Для решения (26), (27) функционал имел значение: J = 2,400259. Результаты моделирования с решением (26), (27) приведены на рис. 5. ВЫВОДЫ Описанная в статье Python библиотека классов позволяет решать задачи структурного синтеза, применяя при этом новую, экономную структуру кодирования формулы. Новая структура, названная реестром сетевого оператора, в отличие от матрицы сетевого оператора не включает нулевых элементов, не участвующих в вычислении математического выражения. Проведен вычислительный эксперимент по решению задачи синтеза управления мобильным роботом, движущимся по плоскости при наличии фазовых ограничений. Результаты моделирования полученных при синтезе различных систем управления показали, что найденная функция управления обеспечивает достижение объектом терминального состояния с близким к оптимальному значению функционала без нарушения фазовых ограничений.

Askhat I Diveev

Institution of Russian Academy of Sciences Dorodnicyn Computing Centre of RAS

Author for correspondence.
Email: aidiveev@mail.ru
40, Vavilova str., Moscow, 119333, Russian Federation

Doctor of Technical Sciences, Professor, chief of Sector of Cybernetic Problems, Federal Research Centre “Computer Science and Control” of Russian Academy of Sciences, professor of Department of Mechanics and Mechatronics, Engineering Academy, Peoples’ Friendship University of Russia. Research interests: Computational methods for problems of control

Anton V Dotsenko

Peoples’ Friendship University of Russia (RUDN University)

Email: anton.dozenko@gmail.com
6, Miklukho-Maklaya str., Moscow, 117198, Russian Federation

post-graduate student of Department of Mechanics and Mechatronics, Engineering Academy, Peoples’ Friendship University of Russia. Research interests: Optimization algorithms, evolutionary algorithms, artificial neural networks, machine learning, computational methods for problems of optimal control

  • Diveev A.I. Priblizhennye metody resheniya zadachi sinteza optimal’nogo upravleniya [Approximate methods for solving the optimal control synthesis problem]. Мoscow: Dorodnicyn Computing Centre of RAS Publ., 2015. 184 p. (In Russ.)
  • Diveev A.I. Metod setevogo operatora [Network operator]. Мoscow: Dorodnicyn Computing Centre of RAS Publ., 2010. 178 p. (In Russ.)
  • Diveev A.I. Chislennyi metod setevogo operatora dlya sinteza sistemy upravleniya s neopredelennymi nachal’nymi znacheniyami [Network operator numerical method for the control system synthesis with undefined initial values]. Journal of Computer and Systems Sciences International. 2012. (2). P. 63—78. (In Russ.)
  • Python 3.5.5 documentation // www.python.org URL: https://docs.python.org/3.5/tutorial/ introduction.html#lists (access date: Fabuary 2018).
  • Diveev A.I. Small Variations of Basic Solution Method for Non-numerical Optimization // Proceedings of 16th IFAC Workshop on Control Applications of Optimization, CAO’ 2015. October 6th—9th 2015 Garmisch-Partenkirchen. P. 28—33.

Views

Abstract - 293

PDF (Russian) - 224

PlumX


Copyright (c) 2018 Diveev A.I., Dotsenko A.V.

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.