Лингвистические аспекты реализации процедур синтеза и анализа систем управления в системе ГАММА-3

М.Ф. Степанов,
д.т.н., mfstepanov@
mail.ru,

СГТУ, г. Саратов,

А.М.Степанов,

к.т.н., ripkilobyte@gmail.com,
ИПТМУ  РАН, г. Саратов

Отличительной особенностью проблемной области автоматического управления является резкая дифференциация пользователей средств автоматизации (поддержки разработки и исследования) систем автоматического управления (САУ) на исследователей и инженеров-разработчиков САУ. Исследователи хорошо знают теорию и проблемы управления, создают методы, алгоритмы, процедуры (программное обеспечение) для решения реальных задач. Цели инженеров-разработчиков и ограниченное время на разработку САУ исключают возможность их участия в создании программного обеспечения для решения задач. Инженер вынужден использовать наиболее подходящие для решения своей задачи процедуры из состава типовых процедур используемого средства автоматизации. Инженер имеет возможность сформулировать постановку задачи декларативно, используя встроенный, но расширяемый словарь терминов. Если поставленная таким образом задача входит в классы задач, решаемых системой ГАММА-3, то автоматически строится процедура (программа) её решения. В работе рассмотрены особенности построения и реализации лингвистического обеспечения взаимодействия различных категорий пользователей системы ГАММА-3.

 

Distinctive feature of problem area of automatic control is the sharp differentiation of users of means of automation (support of development and research) control systems on researchers and engineers-developers. Researchers well know the theory and problems of control, create methods, algorithms, software for the decision of real tasks. The purposes of engineers-developers and limited time for control systems development exclude an opportunity of their participation in creation of the software for the decision of tasks. The engineer is compelled to use the most suitable for the decision of the task of procedure from toolbox of typical procedures of used means of automation. However the engineer has an opportunity to formulate statement of a problem{task} декларативно, using the expanded dictionary of terms. If the task put thus enters into classes of the solved tasks by system GAMMA-3 procedure (program) of her decision automatically is under construction. In work features of construction and realization of the lingware of interaction of various categories of users of system GAMMA-3 are considered.

 

Среди известных в области автоматизации (поддержки разработки и исследования) систем автоматического управления (САУ) принципов построения средств проектирования и исследования САУ [1], наиболее важными для целей построения лингвистического обеспечения  взаимодействия пользователей с системой автоматизации решения задач являются: классификация пользователей; интерактивный режим работы для каждой категории пользователей. По целям использования наиболее различимы следующие категории пользователей средств автоматизации: Пользователи-разработчики САУ, Разработчики пакетов расширения, Исследователи-эксперты.

Исследователи, являясь специалистами в теории управления, разрабатывают и исследуют новые методы и алгоритмы решения задач управления. В связи с этим для них необходимы средства автоматизации, позволяющие в интерактивном режиме определить порядок  выполнения шагов создаваемого алгоритма с учетом специфики широко используемого векторно-матричного представления математических моделей САУ. Одним из наиболее популярных средств автоматизации решения задач, предоставляющих подобные возможности для пользователей является пакет MATLAB. В процессе разработки в конкретном средстве автоматизации процедур (программ) решения задач управления в соответствии с новым методом (алгоритмом) возможны две ситуации: 1) имеются все необходимые для реализации алгоритма типовые операции (функции средства автоматизации); 2) имеющийся набор типовых операций (функций) недостаточен. В первом случае исследователю достаточно средств языка представления процедур решения задач (входного языка средства автоматизации). Во втором случае необходимо участие разработчиков пакетов расширения. Это обусловлено тем, что недостающие операции целесообразно реализовать на традиционных языках программирования и включить их в состав библиотек доступных пользователю функций средства автоматизации. Исследователь такую работу выполнить не может в силу недостаточных знаний в области системного программирования. В конечном счете, набор процедур решения задач разрастается и покрывает всё бόльшую часть задач, имеющих решение в предметной области.

С другой стороны [4], инженеру-разработчику САУ трудно выбрать наиболее подходящий метод разработки алгоритма управления. Кроме того, каждый метод  имеет достаточно много разнообразных условий применимости. Их проверка может составлять самостоятельную задачу, осложняемую необходимостью учитывать все условия до начала решения задачи, поскольку в противном случае результаты ее решения могут стать неадекватными. Однако инженер, занятый текущей практической работой может просто и не знать о необходимости проверки всех условий применимости, а порой и об их существовании. Особенно часто это происходит в отношении новых методов. 

Один из путей решения проблемы - разработать программы для всех известных методов  в подходящей вычислительной среде, например, в системе МАТЛАБ. Однако такое простое решение наталкивается на новую проблему: количество таких типовых программ становится практически необозримым. Например, в  системе МАТЛАБ количество встроенных функций (команд) столь велико, что требуется значительное время для их освоения, не говоря уже о дополнительных трудностях, возникающих в процессе их использования в составе разрабатываемых пользователем программ для решения конкретных задач. К тому же трудоёмкость создания в совокупности с вероятностью возникновения ошибок растут экспоненциально с ростом длины программы. Для инженера возникает новая проблема: «Какую типовую программу выбрать для решения конкретной задачи из множества доступных?». Для этой новой проблемы, относящейся, как известно к категории NP-полных, не известно лучшего решения, чем полный перебор, что и снижает эффективность применения подобных средств автоматизации значительно ниже ожидаемой.

Другой подход [2] базируется на предоставлении инженеру возможность поставить (формулировать) решаемую задачу в привычных для него терминах, не указывая последовательности действий по её решению, т.е. непроцедурно, возлагая при этом выбор способа решения задачи (построение последовательности действий) на среду организации вычислений. В этом случае проверка выполнимости условий применения используемых методов гарантируется корректностью используемых моделей знаний предметной области.

В системе ГАММА-3 [3] реализованы оба подхода, что позволяет решать задачи как по типовым процедурам, так в непроцедурной постановке.

Поскольку пакет Matlab популярен в среде разработчиков систем управления, то и язык ГАММА для представления типовых процедур решения задач в системе ГАММА-3 является Matlab-подобным. Однако для удобства допускается использование кириллицы в именах идентификаторов и функций, определяемых пользователем, а также ключевых слов синтаксических конструкций языка. Кроме того, учитывая особенности проблемной области теории управления, в качестве базового элемента представления данных используется не двухмерная матрица, как в пакете Matlab, а трёхмерная. Это позволяет не прибегать к сложным в понимации и  использовании массивов ячеек пакета Matlab. В задачах теории управления трёхмерная матрица представляет собой простейший способ задания широкоиспользуемых математических моделей в форме «вход-выход», параметров функционалов оптимизации с производными по регулируемым переменным и управляющим воздействиям и т.п.

Лингвистическое обеспечение системы ГАММА-3 для автоматизации решения задач по типовым процедурам предусматривает использование не только внешней формы представления процедур на языке ГАММА, но и внутренней формы, позволяющей значительно повысить скорость их исполнения. С этой целью разработан транслятор текстов процедур (программ) решения типовых задач, записанных на внешней форме языка ГАММА во внутреннюю форму.

Известны [4] следующие формы внутреннего представления программ: 1) связные списочные структуры, представляющие синтаксические деревья; 2) многоадресный код с явно именуемым результатом (тетрады); 3) многоадресный код с неявно именуемым результатом (триады); 4) обратная (постфиксная) польская запись операций; 5) ассемблерный код или машинные команды. Среди них наибольшее распространение получили триады и тетрады, являющиеся машинно-независимыми способами представления программ. Триады и тетрады близки по своей организации и отличаются лишь явным (тетрады) или неявным (триады) указанием места хранения результата выполнения операции.

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

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

Рис.1. Укрупнённый алгоритм генерации триад оператора присваивания

В качестве внутреннего представления программы на языке ГАММА используются триады.

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

При этом дочерние вершины дерева разбора, помеченные как «Узел 2» и «Узел 3» представляют собой корневые вершины поддеревьев разбора. К ним относятся, в частности: <формула>, <терм>, <элемент массива> и т.д. Поскольку они в дереве разбора могут встречаться многократно, то целесообразно, как это предусмотрено схемой СУ-перевода, осуществлять рекурсивный вызов генератора триад – функции makeTriadListOfSyntSymbol. При этом вначале осуществляется анализ правой части оператора присваивания, например, <формула>, для определения собственно присваиваемого значения, а затем – левой части, т.е. места памяти, в котором должно быть сохранено значение правой части оператора.

Проиллюстрируем работу приведенного алгоритма на примере разбора фрагмента программы на входном языке ГАММА (см. рисунки 2-4).

 

Таблица 1

Преобразование типовых узлов дерева вывода в последовательность триад

Вид узла дерева

Результирующий код

Примечание

 

i) assign (oper1,oper2)

 

assign – тип триады

oper1, oper2 — операнды (листья дерева)

 

 

i) Code (Узел 2, i)

i+j) assign (oper1,^i+j-1)

Узел 2 — нижележащий узел дерева вывода

Code (Узел 2, i) -последовательность триад, порождаемая для Узла 2, начиная с триады с номером i,

j — количество триад, порождаемых для Узла 2

 

i) Code (Узел 2, i)

i+j) assign (^i+j-1, oper2)

 

Узел 2 — нижележащий узел дерева вывода

Code (Узел 2, i) -последовательность триад, порождаемая для Узла 2, начиная с триады с номером i,

j — количество триад, порождаемых для Узла 2

 

 

i) Code (Узел 2, i)

i+j) Code (Узел 3,i+j)

i+j+k) assign (^i+j-1, ^i+j+k-1)

 

Узел 2, Узел 3 — нижележащие узлы дерева вывода

Code (Узел 2, i) -последовательность триад, порождаемая для Узла 2, начиная с триады с номером i,

j — количество триад, порождаемых для Узла 2

Code (Узел 3, i+j) -последовательность триад, порождаемая для Узла 3, начиная с триады с номером i+j,

k — количество триад, порождаемых для Узла 3

 

Рис. 1. Исходный код на языке ГАММА

Рис. 2. Результат выполнения программы

Рис. 3. Фрагмент синтаксического дерева разбора

Рис. 4. Список триад программы

Работа выполнена при поддержке РФФИ (проект 15-07-99684-а).

Литература

1.  Степанов А.М. Принципы построения, архитектура средств проектирования, моделирования и исследования интеллектуальных систем управления / А.М.Степанов, М.Ф.Степанов // Восьмая Всероссийская мультиконференция по проблемам управления: Материалы 8-й Всероссийской мультиконференции: в 3 т. – Ростов-на-Дону: Издательство Южного федерального университета, 2015. Т.1. С. 109-112.

2.  Степанов М.Ф. О развитии концепции автоматического решения задач теории управления в системе ГАММА-3 / А.Г.Александров, Л.С.Михайлова, М.Ф.Степанов, Т.М.Брагин, А.М.Степанов  // Мехатроника, автоматизация, управление. №9, 2011. С. 14 – 19

3.  Александров А.Г. Система ГАММА-3 и ее применение / А.Г.Александров, Л.С.Михайлова, М.Ф.Степанов // Автоматика и телемеханика, 2011, № 10. С. 19 – 27

4.  Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. В 2-х томах / Пер. с англ. Под ред. В.М.Курочкина. – М.: Мир, 1978.