Моделирование поиска решения с помощью функциональных грамматик

УДК 004.82

©В.А. Кравченко

МОДЕЛИРОВАНИЕ ПОИСКА РЕШЕНИЯ С ПОМОЩЬЮ ФУНКЦИОНАЛЬНЫХ ГРАММАТИК

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

Ключевые слова: грамматика, ЛИСП, поиск решения, синтез программ.

V.A. Kravchenko

MODELLING OF SEARCH OF THE DECISION BY FUNCTIONAL GRAMMARS

Article is devoted a problem of computer-assisted retrieval of the decision of tasks. Decision modeling in the knowledge domain presented in the form of the functional grammar, and also possibility of implementation of model in the functional programming language LISP is considered. Advantages of usage of functional grammars are shown.

Keywords: grammar, LISP, decision search, synthesis of programs.

Введение

Целью работы является моделирование поиска решения задач в конкретной предметной области и его программная реализация. Система решения должна состоять из базы знаний и механизма вывода (рис. 1). База знаний предназначена для хранения правил теории, в рамках которой требуется решение задач. Чем больше правил содержится в базе знаний, тем больший круг задач и с большей эффективностью она способна решать. Задачей механизма вывода является способность из фактов, представляющих собой исходную информацию, посредством правил, содержащихся в базе знаний, получить в качестве результата нужную информацию. Следует отметить, что система должна иметь обучающийся характер. Для этого систему необходимо снабдить способностью преобразовывать результат в правила системы, пополняя тем самым её базу знаний.

Рис. 1. Система поиска решения

В данной работе предлагается использовать функциональный подход. Он заключается в моделировании системы аппаратом функциональных грамматик и её реализацию с помощью функционального языка программирования ЛИСП.

1. Функциональные грамматики

В качестве функциональной грамматики будем понимать формальную грамматику вида:

0 = (УМ,УТЛР,8),

где V,- - конечный алфавит нетерминальных символов; Ут - конечный алфавит терминальных символов; Б - конечное множество функций {; Р - конечное множество правил вида: А—» ср }, где А е Уч, (р е ( Уч и V, )*, £ еБ; 8 - начальный нетерминальный символ (аксиома), 8 е V. .

Такая грамматика может быть получена из любой формальной грамматики Хомского второго типа:

01 = (^,УТ1,Р1,8),

где V,- - конечный алфавит нетерминальных символов; УТ1 - конечный алфавит терминальных символов; Р - конечное множество правил вида: А—» \|/, где Л е Уч, \\1 е(Уч иУп )*, 8 -начальный нетерминальный символ, 8 е V. .

Для перехода от КС-грамматики к функциональной грамматике необходимо из всего алфавита терминальных символов УТ1 выделить терминальные символы Уто е УТ1, определяемые через базисные функции Ш рассматриваемой системы. Тогда алфавит терминальных символов сократиться до множества Ут, причем УТ1 = (Ут иУТ0). В результате сокращения алфавита символов будут упрощены правые части продукций А —> \|/. Для сохранения синтаксиса и семантики языка грамматики необходимо каждой упрощенной продукции А—» ср поставить в соответствие функцию £, аргументами которой будут являться все символы последовательности ф . При этом функция f должна быть представлена как суперпозиция базисных функций Ю. Тогда

множество правил грамматики Р будет иметь вид: Л —» ср {£}, где Л е Уч, (р е (Уч иУт)*, £ еБ, причём также £ 0 е БО, БО с Б.

Рассмотрим процесс перехода к функциональной грамматике на небольшом примере. Пусть имеется КС-грамматика:

01 = (УМ,УТ1,Р1,8); Ум = 8, А, В, С, В, Е ; УТ1 = а, Ь, с, <1, е, а, Р, у ; Б = 8;

'в -> АаарВ;

А -> ЬрСас | уареаБ; В —» уарЬас | dаepa8; С —» уЕаЬ; В -> срЕ5;

Е —> ydаe.

Преобразуем заданную грамматику к функциональному виду. Для этого выберем в качестве базисных символов Уто = а, Р, у . Тогда схема функциональной грамматики будет иметь вид:

0 = (УМ,УТЛР,8); 8, А, В, С,ЦЕ; Ут = а, Ь, с, с1, е

Р1 =

8 = 8;

Р =

8 АаВ

А —>ЬСс {£2}|аеБ {{3}; В -» аЬс {Г3} | ёеа {£4}; С^ЕЬ {£5}; О^сЕ {£6}; Е^ае {£5};

^ =(х,у,2):хауРг; {2 = (х, у, ъ): хРуаг; fз =(х,у,г):ухРуаг; = (х, у, ъ): хауРгб; = (х, у): ухау; Л =(х,у):хРу8;

ГО; = (х, у): хау; Ю2=(х,у):хРу; Ю3 = (х): ух; Ю4 = (х): х5.

Обратим внимание, что функции Щ.^О,, образуют подсистему базисных функций, а функции выражаются через суперпозиции этих базисных функций:

£2(х5у52) = £01(£02(х5у),2);

fз х,у,г Г02 ^ х ,у ;

{4 х,у,г = Г04 Г02 ^ х, у ;

^ х,у =£01 ^ х ,у ;

Ъ Х>У = х,у .

Построим для сравнения два дерева синтаксического разбора для грамматики С1 (рис. 2) и грамматики в (рис. 3). Ветви второго дерева содержат функции, соответствующие применяемым продукциям. В результате этого, каждому выводу дерева функциональной грамматики соответствует суперпозиция функций:

С! =£, (^ (Ь, ^ (^ (с1, е), Ь), с), а, ^ (а, Ь, с)); с2 =£, ({2 (Ь, ^ (^ (с1, е), Ь), с), а, ^ (с1, е, а)); с3 =£, ^ (с1, е, ^ (с, ^ (с1, е))), а, {3 (а, Ь, с)); ст4 =£, (с1, е, ^ (с, ^ (с1, е))), а, {А (с1, е, а)).

На основе сравнения схем и деревьев грамматик, можно сделать вывод, что функциональные грамматики имеют ряд особенностей по сравнению с традиционными КС-грамматиками.

Рис. 2. Дерево разбора для грамматики в!

Рис. 3. Дерево разбора для грамматики в

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

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

2. База знаний

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

Для того, чтобы создать базу знаний, необходимо задать объединенный алфавит грамматики У= (Уч 'О V, ) *. систему функций Б и систему выраженных посредством них правил Р. В качестве символов грамматики используются метапеременные, обозначающие все объекты рассматриваемой предметной области. С помощью правил системы Р в виде: а—» (р {{ где А е V, ф е V; и функций £ е Б должны быть записаны все известные закономерности рассматриваемой теории. Важно напомнить, что система функций Б обязательно должна содержать подсистему БО базисных функций.

Рассмотрим в качестве примера базу знаний по механике прямолинейного равноускоренного движения тела. В качестве алфавита грамматики выбираем 14 величин: - расстояние;

<Ткпе> - время; <8рс11> - начальная скорость; <8рс12> - конечная скорость; <Асс1> - ускорение; <Мазз> - масса; <КтЕп1> - начальная кинетическая энергия; <КтЕп2> - конечная кинетическая энергия; <РгРи11> - сила тяги; <РгРпс> - сила трения; <ОрРи11> - работа силы тяги; <ОрРпс> -работа силы трения; <С1Тпс> - коэффициент трения; <Cfg> - ускорение свободного падения. В качестве алфавита символов, выражающих базисные функции, определяем <+>, <->, <*>, </>, <А2>, <КОРЕНЬ>.

С учетом основных закономерностей прямолинейного равноускоренного движения, можно составить системы продукций и соответствующих им функций. Грамматика примет вид:

0 = (^,УТЛР,8);

'<Б181;>, <Тппс>. <8рс11>, <8рс12>. <Асс1>,

V = ] <Мазз>. <КтЕп 1>. <КтЕп2 >,<РгРи11>,

<РгРпс>. <ОрРи11>, <ОрРпс>. <ОТпс>. <С\%>

-> <8рс11> <Асс1> <Тте> {М; <Асс1> <Б181;> <8рс11> {£,}; <ЮпЕп2> <Мазз> {М; <8рс12> <Асс1> <Тше> ф};

<Тте> <Асс1> <8рс12> <Асс1> <КтЕп1> <Мазз> {Г, 11: <8рс11> <Пте> <Асс1> <Пте> <8рс12> <8рс11> <Асс1> {£?}; <ОрРи11> <РгРи11> {12!: <ОрРгю> <РгРйс> {^2}; <8рс12> <8рс11> <Асс1> <8рс11> <Асс1> <ЪЫ> {£.,}:

> <8рс12> <8рс11> <Тше>

> <Б1з1> <8рс11> <Тше> {^0};

> <8рс12> <8рс11> <Б1з1> ф}.

> <РгРи11> <РгРпс> <Мазз> <РгРи11> <РгРпс> <Асс1>

-> <РгРпс> <С1Тпс> <С%> {^з}; <КшЕп2> <8рс12> {14!: <КтЕп1> <8рс11> {^4}; <РгРпс> <Мазз> <Асс1> <ОрРи11> <Г>Ы> {^2}; <РгРи11> <Мазз> <Асс1> ¡1^!:

р = { <8ра2>-<8ра2> -<8ра2> -

<8рс11> -<8рс11> -<8рс11> -<8рс11> -

<Тппс> -<Тппс> -<Асс1> -<Асс1> -<Асс1> -<Асс1> -<Мазз> -<Мазз> -<Мазз> -<Мазз> -<РгРи11> <РгРи11> <¥г¥г\с>

<РгРйс> <Сф> <С£Рйс > <Мазз> <РгРйс> <0рРпс> <С£Рйс> <¥г¥пс> < Мазз> <Cfg>{f1з}; <КтЕп2> <Мазз> <8рс12> <КтЕп2> <0рРи11> <0рРпс> <КтЕп1> <КтЕп1> <Мазз> <8рс11> <КтЕп1> <ЮпЕп2> <0рРи11> <ОрРпс> <0рРи11> <РгРи11>

<0рРи11> <ЮпЕп2> <КтЕп1> <ОрРпс> <ОрРйс> <РгРпс>

<ОрРгю> <0рРи11> <ЮпЕп2> <КтЕп1> }.

р = { Ш1 = (х,у):х + у; Ш2 = (х, у): х - у ; Ш3 = (х, у): х * у ; Ш4 = (х, у): х / у ; Ш5 = (х): хА2; Ш6 = (х): КОРЕНЬ(х);

х, У, z) ЯМх, Ю3(У, z));

х, У, z) ЩЩЩЩх, у),2), ВД));

£» = х, У, z) Ю2(х, Ю3(у, z));

и = х, У, z) Ю2(Ю4(х,у),Ю4(Ю3(Ю5(у), z) 2));

ь = х, У, г) Ю6(Ю2(Ю5(х), №3(Я)з(у, z),2)));

и = х, У, z) ЩЮ3(х, у), Ю4(Ю3(№5(у), z), 2));

ь = х, У, z) Ю4

ь = х, У, г) №4(№2(х, у), г):

ь = х, У, z) ЮДЩЩАМВД, №з(Я)з(у, г),2))),х), у);

^0 = (х, у, z). Ю4Рз(2, Ш2(х, Ш3(у, г))), ГО5(2));

(х, у, г): Ю6(Ш4(Ю3(2, х), у));

^2 = (х, у): Ш4(х, у);

^3 = (х, у, г): №4(Ш3(х, у), г);

^4 = (х, у):Ш4(Шз(2,х),Ш5(у));

^5 = (х, у, г): №зРз(х, у), г);

^6 = (х, у): Ш4(Ш3(х, Ш5(у)), 2);

^7 = (х, у, г): ЯМШ2(х, у), г);

^8 = (х, у): ГО3(х, у) }.

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

3. Механизм вывода

Механизм вывода предназначен для нахождения результата по исходным данным посредством правил, содержащихся в базе знаний.

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

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

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

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

Рассмотрим поиск решения на примере заданной выше базы знаний. Пусть в задаче известны: сила тяги, действующая на тело, пройденный им путь, его начальная и конечная кинетические энергии, а требуется найти действующую силу трения. В этом случае, роль терминальных символов будут играть: <РгРи11>, <Г>\$\.>. <КтЕп1>, <КтЕп2>; а аксиомы - <¥г¥г\с>. Дерево разбора для такой задачи при использовании поиска «в ширину» имеет вид, представленный на рисунке 4.

Решение было найдено на третьем уровне дерева поиска. Ему соответствует следующая суперпозиция функций:

<¥г¥пс> = ЫМ ^А<¥гРи\\>.<0^>).<К\пЕп2>.<К\пЕп\>).

4. Реализация на языке ЛИСП

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

Рис. 4. Дерево разбора поиска решения задачи ЛИСП при своей работе оперирует списками, представляющими собой упорядоченные совокупности атомов и подсписков. База знаний на ЛИСПе может быть представлена списком ПРОДУКЦИИ и функциями fl..fn. Для рассмотренной выше базы знаний список ПРОДУКЦИИ имеет вид:

Функции грамматики рассматриваемой базы знаний:

При поступлении исходных данных формируется списки ПРОДУКЦИИ 1, СИМВОЛЫ и ДЕРЕВО.

Список СИМВОЛЫ состоит из терминальных символов:

Список ДЕРЕВО состоит из одного атома - начального нетерминального символа:

Список ПРОДУКЦИИ 1 представляет собой сокращенный список ПРОДУКЦИИ, избавленный от «неправильных» правил, содержащих в левой части терминальные символы. Его построение осуществляется при участии списка СИМВОЛЫ.

Список ДЕРЕВО является динамическим. Сначала он разрастается за счет применения продукций, а потом, в случае наличия решения, уменьшается за счёт отсекания тупиковых ветвей. Решением задачи будет являться список ДЕРЕВО, представленный суперпозицией функций fi.

Рассмотрим порядок работы ЛИСПа со списком ДЕРЕВО в ходе вывода решения. Поиск решения состоит из двух этапов, повторяющихся на каждом новом уровне дерева. Первый этап -вставка продукций, второй - анализ новых узлов.

Первый этап заключается в поиске подсписков, состоящих только из атомов и замене самых левых нетерминалов таких подсписков на соответствующие правила, взятые из списка ПРОДУКЦИИ1. При этом определение нетерминалов осуществляется с помощью списка СИМВОЛЫ.

Второй этап включает в себя 2 действия:

1. поиск подсписка состоящего только из терминалов и, в случае успеха, выделение этого подсписка в качестве окончательного списка ДЕРЕВО и прекращение процесса решения;

2. поиск подсписков, содержащих аксиому или ранее замененный нетерминальный символ, удаление таких подсписков и перевод процесса на первый этап, т.е. на следующий уровень дерева.

При поиске решения, представленном на рисунке 4, список ДЕРЕВО будет изменяться в следующем порядке:

Первоначальное состояние:

Уровень 1, этап 1 - вставка продукций <FrFric>:

(<FrFric> (fl2 <OpFric> <Dist>) (fl5 <Cfg> <CfFric> <Mass>) (f3 <FrPull> <Mass> <Accl>)) Уровень 1, этап 2 - без изменений:

(<FrFric> (fl2 <OpFric> <Dist>) (fl5 <Cfg> <CfFric> <Mass>) (f3 <FrPull> <Mass> <Accl>)) Уровень 2, этап 1- вставка продукций <Mass>, <CfFric>, <OpFric>:

Уровень 2, этап 2 - удаление 4 тупиковых ветвей:

Уровень 3, этап 1 - вставка продукций <Spd2>, <Spdl>, <OpPull>:

Уровень 3, этап 2 - выделение решения:

Таким образом, результатом является всё та же суперпозиция функций, но записанная на ЛИСПе в качестве списка ДЕРЕВО. Существует несколько вариантов использования полученного результата:

1. вывести суперпозицию функций в понятном для пользователя виде для демонстрации хода решения поставленной им задачи;

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

3. использовать суперпозицию функций для синтеза программы на каком-либо языке программирования;

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

действия необходимо при каждом решении для накопления системой опыта.

Заключение

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

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

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

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

Реализация системы решений на функциональном языке символьного программирования ЛИСП дает возможность полностью использовать все возможности функциональных грамматик. Это позволяет избежать лишних надстроек и пополнять базу знаний без какого-либо вмешательства в механизм вывода.

Литература

1. Тузов В.А. Математическая модель языка. - Л.: Изд-во Ленингр. ун-та, 1984. - 176 с.

2. Кравченко В. А., Могнонов П. Б., Чимитов Д. Н. Представление знаний в функциональных грамматиках //Вестник СибГАУ. - Красноярск: Изд-во СибГАУ, 2011. №5 (38). С. 55-61.

3. Хювёнен Э., Сеппянен И. Мир Лиспа. Т.2: Методы и системы программирования. - М.: Мир, 1990. - 320 с.

Кравченко Вячеслав Александрович, аспирант Восточно-Сибирского государственного университета технологий и управления, тел. +79644010435, e-mail: krawyach@mail.m.

Kravchenko Vyacheslav Aleksandrovich, the post-graduate student of the East-Siberian state university of technologies and management.