
Архив WinRAR_1 / trahtengerts5
.pdf
180 Часть 2. Математическое и алгоритмическое обеспечение …
причинности каждой дуги. Таким образом, задача сводится к построению когнитивной карты руководителей.
6.3. Экспертные системы
Метод когнитивных карт, рассмотренный в разделе 6.2, позволяет перечислить действия (операции), которые могут оказать влияние на проблему. Перечисляя эти действия, он рассматривает их как атомарные, неделимые. В действительности, они в большинстве случаев состоят из некоторой последовательности шагов, которые могут быть выполнены при определенных условиях.
Определение последовательности шагов в соответствии со сложившимися условиями может быть выполнено экспертной системой. Являясь вполне самостоятельным средством в системе поддержки принятия решений, она может эффективно взаимодействовать с когнитивными картами.
Экспертные системы (ЭС) сформировались в самостоятельное научное направление в начале восьмидесятых годов на основе исследований по искусственному интеллекту. Цель создания экспертных систем заключается в разработке программ, которые, используя знания, полученные от экспертов в данной предметной области, решают те же проблемы (отсюда и название ЭС).
Экспертные системы, использующие эвристические знания, применяются в тех случаях, когда сформировать решение задачи в традиционных математических терминах в виде систем уравнений не удается. Такие задачи получили название плохо формализованных (или слабо структурированных) задач. Эти задачи обладают одной или несколькими из следующих особенностей [6.6]:
-задачи не могут быть заданы в числовой форме;
-цели не могут быть выражены в терминах точно определенной целевой функции;
-не существует алгоритмического решения задачи;
-алгоритмическое решение существует, но его нельзя использовать из-за ограниченности ресурсов вычислительных машин.
Экспертные системы отличаются от систем обработки данных тем, что в них в основном используется символьный, а не числовой

Глава 6. … алгоритмическое обеспечение генерации вариантов …181
способ представления, символьный вывод и эвристический поиск решения.
Перечисленные свойства экспертных систем позволяют использовать их для генерации решений, основанных на эвристических знаниях и предпочтениях эксперта или руководителя.
В нефтегазовой отрасли для генерации и выбора решений экспертные системы нашли широкое применение в системах интерпретации данных каротажа нефтяных скважин, при бурении нефтяных и газовых скважин для выявления причин и возможных решений при прихвате инструмента, выборе бурового раствора, выборе и применении химических нефтяных дисперсантов, проектировании современных морских эксплуатационных установок для добычи нефти и газа, диспетчерском управлении газотранспортными системами [6.7], при выборе геолого-технических мероприятий [6.8], классификации нефтяных и газовых скважин [6.9], и др.
Предметом теории экспертных систем служат методы и приемы конструирования человеко-машинных систем, "компетентных" в некоторой узкой специальной области. Эта компетентность состоит из "знания" конкретной области, понимания задач из этой области и из умения решать некоторые конкретные задачи в этой области.
Уже отмечалось, что для всех наиболее успешных применений экспертных систем характерна, по крайней мере, одна общая черта: они работают в одной ограниченной предметной области. Попытки расширить предметную область, даже в пределах одной области знаний (например, в медицине) в подавляющем большинстве случаев успеха не давали [6.10].
Именно в силу такой ограниченности экспертных систем они еще не нашли эффективного применения в тех прикладных областях, которые требуют широкого кругозора. В этом случае приходится идти на создание группы экспертных систем, каждая из которых решает свою узкую задачу по своим критериям оптимальности, а при выработке комплексного решения эти частные решения должны быть согласованы чисто формальными методами. Это создает большие затруднения.
Необходимо отметить еще одну отрицательную особенность экспертных систем: для создания эффективно решающих сложные проблемы требуются высококвалифицированные, часто уникальные

182 Часть 2. Математическое и алгоритмическое обеспечение …
специалисты. Поскольку большинство из них хотят остаться уникальными, своими алгоритмами решения сложных проблем, они делятся крайне неохотно, если вообще делятся.
В системах искусственного интеллекта, получающих в настоящее время все большее развитие, существенную роль играет представление знаний.
Представление знаний может быть определено как множество соглашений об описании каких-либо объектов. Знания о мире можно разделить на две категории: факты, указывающие, что истинно или было истинным, и правила (алгоритмы), позволяющие производить оценку состояния объекта или предсказать изменение его состояния во времени в результате выполнения некоторой последовательности действий.
Факты представляются в ЭВМ в виде данных, а алгоритмы – в виде программ. Всегдашним стремлением программистов было отделить данные от программ. Именно это стремление определило появление баз данных и систем управления ими.
Развитие программирования позволило перейти к имитации интеллектуальных функций человека, позволяющих ему создавать программы решения конкретных задач. На этом этапе стало происходить, по крайней мере, частичное слияние данных с алгоритмами (программами) и создаваться "базы знаний".
Сила экспертной системы заключается в базе знаний. При использовании баз знаний большого объема, а, тем более, при работе с взаимодействующими друг с другом базами знаний встают проблемы:
приобретения и накопления знаний;
обеспечения непротиворечивости и полноты знаний;
необходимости манипулирования с большими базами зна-
ний.
Естественно возникает проблема представления знаний, являю-
щаяся одной из центральных проблем в создании и работе с экспертными системами.
Методы представления знаний традиционно разделяются на 4 класса: семантические сети, логические подходы, фреймы и системы продукций. Это подразделение носит несколько условный характер, так как в реально работающих системах часто используют различные

Глава 6. … алгоритмическое обеспечение генерации вариантов …183
классы представления знаний. Методы представления знаний рассмотрены, например, в [6.2, 6.5, 6.6].
6.4. Генерация сценариев с помощью формальных грамматик
Под сценарием будем понимать последовательность действий, которая должна привести к решению возникшей проблемы. Формирование возможного сценария и есть вариант решения.
Задача генерации сценариев возникает довольно часто в тех случаях, когда сценарий формируется из некоторого набора возможных действий (операций). Этот набор может быть задан когнитивной картой, экспертной системой или непосредственно.
Задача генерации всех возможных сценариев может быть решена различными методами. Все они, так или иначе, сводятся к перебору дуг графа, описывающего создавшуюся проблему. Поэтому решение задачи могло бы быть дано и в терминах теории графов. Однако с точки зрения перспектив решения подобных задач для графов со значительно более сложной структурой (например, когда на элементы графа накладываются различные условия) более перспективным может оказаться использование аппарата формальных грамматик.
Хорошо известно, что порождающие грамматики можно описывать как направленными графами, так и множеством грамматических правил, причем оба эти описания идентичны и взаимно однозначно отображаются одно в другое. Поэтому, если имеется направленный граф, описывающий возможные технологические последовательности выполнения операций, то из него можно автоматически получить порождающую грамматику, описывающую этот процесс. С ее помощью можно сгенерировать все возможные (допустимые) сценарии решения проблемы. Рассмотрим понятие языка и один из методов описания формальных грамматик.
Языки и формальные грамматики. Интуитивно, язык – это множество предложений или последовательностей слов. Каждое предложение формируется из словаря языка в соответствии с заданными правилами формирования. Правила формирования называются грамматикой языка и определяют его структуру. Однако такое ин-

184 Часть 2. Математическое и алгоритмическое обеспечение …
туитивное определение языка и его грамматики для формального анализа и генерации совершенно недостаточно.
Для описания языка также необходимо использовать какой-либо язык. Язык, используемый для описания грамматики какого-либо языка, называется метаязыком. Если некоторый язык L1 используется для того, чтобы описать некоторый другой язык L2, то язык L1 называется метаязыком над L2.
Характерное свойство естественных языков (русского, английского и т.д.) состоит в том, что они могут быть использованы в качестве своих собственных метаязыков. И действительно, грамматика русского языка может быть написана на русском языке. Однако так как сам естественный язык допускает неоднозначность, то и описанные на нем правила трудно сделать однозначными и уж совсем нельзя сделать их строго формализованными. В описании каждого языка, т.е. в его грамматике, обычно различают синтаксис и семантику.
Синтаксис – это множество формальных правил вывода правильно настроенных строк или предложений языка.
Семантика – смысловое, содержательное значение каждого такого правила.
Для формального описания синтаксиса разработано несколько метаязыков, наибольшее распространение получил метаязык Бэкуса (называемый иногда нотацией Бэкуса), разработанный им для описания АЛГОЛа [6.11]. В дальнейшем мы будем использовать этот язык.
Метаязык Бэкуса – это список синтаксических правил или, как их иногда называют, правил подстановки, имеющих вид U y, где у
– строка символов, каждый символ которой принадлежит либо формальному языку, либо описывающему его метаязыку; U – символ, принадлежащий метаязыку.
Символ обозначает слова «является», «это», «определяет». U называется левой частью правила, у – правой.
Например:
<цифра > 0
<цифра > 1
.
.
.
<цифра > 9

Глава 6. … алгоритмическое обеспечение генерации вариантов …185
означают соответственно < цифра > это 0, < цифра > это 1, ..., < цифра > это 9.
Здесь понятие < цифра > задано простым перечислением. Такое перечисление можно задать также следующим образом: < цифра > 1 2 3 4 5 6 7 8 9
В более сложных случаях понятия вводятся рекурсивно, напри-
мер:
<идентификатор > < буква >
<идентификатор > < идентификатор > < буква >
<идентификатор > < идентификатор > < цифра >
означает: идентификатор - это последовательность букв и цифр, начинающихся с буквы. Понятие < идентификатор > встречающееся в правой части синтаксического правила, уже рекурсивно определено в первом случае как буква, во втором – как последовательность букв, в третьем – как последовательность букв и цифр, начинающихся с буквы.
Для описания семантики сколько-нибудь эффективных и общепризнанных формализованных методов пока нет. Их отсутствие вызывает серьезные трудности в устранении неоднозначности формальных языков.
Даже в таком теоретически хорошо разработанном языке программирования, как АЛГОЛ, полностью устранить неоднозначность не удалось. Например, впрограмме:
begin array A[4], integer I, k4 I:=2; k:=3;
for A[I]:=k step 1 until 4 do begin I:=I+1; k:=k+1; end; end;
возможно, по крайней мере, два толкования: а) первый шаг
A[2]:=3; I:=2+1; k:=3+1; A[2]<4 процесс продолжается;
второй шаг
A[2]:=4; I:=3+1; k:=4+1; A[2]:=4 процесс окончен;
б) первый шаг аналогичен первому шагу по п. “а”, второй шаг
A[3]:=4; I:=3+1; k:=4+1; A[2]<4 процесс продолжается бесконеч-
но.

186 Часть 2. Математическое и алгоритмическое обеспечение …
Фактически неоднозначность в формальном языке, в том числе и в языке программирования, не допускается. Но пока это достигается не только методами формального описания языка, но средствами трансляции или генерации.
Для того чтобы описать формальный язык, как и любой язык, в том числе и естественный, необходимо задать его алфавит, словарь и правила построения предложений, т.е. грамматику языка.
Алфавит – это непустое конечное множество элементов. Назовем элементы языка символами.
В дальнейшем мы не будем делать различия между словом языка или описывающего его метаязыка и знаком алфавита, объединив эти два понятия в понятие “символ”.
Символом будем называть минимальную по числу знаков конструкцию, используемую в данном формальном языке или описывающем его метаязыке, которая имеет самостоятельное значение. Это может быть одна буква, например, А, В, L; знак операции, например,
+, >, , разделитель, например, [, ), одно слово или группа слов, на-
пример, begin, go to и т.д.
Необходимо специально оговорить случай группы слов, так как во многих формальных языках имеют место случаи, когда смысл имеют только определенные комбинации слов, а каждое слово в этой комбинации, взятое в отдельности, смысла не имеет. Символы будем обозначать: словами (под словом понимается и отдельная буква), написанными прописными латинскими буквами; словами, написанными прописными русскими буквами, взятыми в угловые скобки, знаками операций и разделителей. Например: A, begin, <идентификатор>, (, +, В, С, *, <блок> являются символами языка.
Множество символов языка обозначим через V и разделим на два подмножества.
1. Подмножество символов, принадлежащих собственно формальному языку. Это подмножество назовем подмножеством конечных или терминальных символов и обозначим его через Vт. Символы этого подмножества называются конечными (терминальными), потому что в дереве текста (см. ниже) эти символы всегда оказываются в конечных узлах. Так, для многих формальных языков, в том числе и языков программирования, конечными символами являются, на-
пример, , =, go to, end, if, и т.д.

Глава 6. … алгоритмическое обеспечение генерации вариантов …187
2. Подмножество символов, относящихся только к метаязыку. Символы этого подмножества будем называть нетерминальными и обозначим это подмножество VN. Символы называются нетерминальными потому, что в дереве анализа они не могут соответствовать его конечным узлам. К этому подмножеству относятся символы <идентификатор>, <блок>, <терм>, < программа > и т.д.
В естественных языках из слов формируются предложения. В формализованной теории языка введем понятие строки, аналогичное понятию предложения в естественных языках.
Строкой назовем последовательность терминальных и нетерминальных символов данного языка, образованную в соответствии с правилами грамматики рассматриваемого языка. Строку будем обозначать строчными латинскими буквами, например, a, b, x, y, z. Для
пустой строки введем специальный символ .
Множество всех строк, образованных из символов множества V, обозначим через V*.
Если через z обозначим любую строку, принадлежащую V*, через x некоторую заданную строку (возможно, пустую, тоже принадлежащую V*), через U – любой символ, принадлежащий V, то множество всех строк можно определить следующим образом:
V* {z/z ,z xU}, z, x V*, U V,
т.е. множество всех строк состоит из строк, которые либо могут быть пустыми, либо могут состоять из строк, генерированных присоединением произвольного символа к некоторым исходным строкам (в том числе и пустым).
Например, если V={C, D}, то V*={ C, D, CDD, CCD,...}.
Заметим, что V* – множество бесконечное. Выше отмечалось, что грамматика формальных языков в настоящее время подразделяется на две части: синтаксис и семантику. Для описания семантики общепринятого формализованного языка пока нет. Для описания синтаксических правил наибольшее распространение получил метаязык Бэкуса.
Множество всех синтаксических правил конкретного формального языка, записанных на некотором метаязыке (например, языке Бэкуса), обозначим буквой Р.

188 Часть 2. Математическое и алгоритмическое обеспечение …
Будем говорить, что строка х непосредственно порождает строку
у относительно Р(х . у) тогда и только тогда, когда существуют
строки u, w (возможно, пустые) такие, что х=uVw и V z P. Например, пусть правила Р1 заданы следующим набором пра-
p1:A BCD; p2:B BC; p3:D CD; p4:B C; p5:D C .
Тогда относительно этого ряда правил возможно непосредственное порождение:
BCD . BCCD.
В нашем примере можно положить x=BCD, y=BCCD, V=B, z=BC, u= , w=CD, B BC P, но можно также интерпретировать это непосредственное порождение следующим образом: x=BCD, y=BCCD, V=D, z=CD, u=BC, z= , D::=CD P .
Таким образом, символ . означает, что один символ слева от . в соответствии с правилами грамматики заменяется цепоч-
кой, находящейся справа от . .
Будем говорить, что строка х порождает строку у относительно Р(х * у) тогда и только тогда, когда существует последователь-
ность строк х0,х1,х2,...,хn, такая, что х=х0, у=х, хi-1 . xi (i=1,2, ...,n; V z P).
Используя синтаксис Р1, можно записать порождение:
BCD * BCCCCD. Здесь х=х0=BCD, y=BCCCCD;
x0 . x1 = BCCD, V=B, z=BC, u= , w=CD; x1 . x2 = BCCCD, V=B, z=BC, u= , w=CCD;
x2 . x3 = BCCCCD, V=B, z=BC, u= , w=CCCD.
Таким образом, используя порождения строк относительно синтаксиса данного языка, можно генерировать строки, формально принадлежащие этому языку.
Введем понятие начального нетерминального символа, порождающего любую строку языка. Это выделенный нетерминальный символ, обозначающий совокупность (класс) всех тех языковых объектов, для описания которых предназначается данная грамматика.

Глава 6. … алгоритмическое обеспечение генерации вариантов …189
Формально начальный нетерминальный символ S определяется следующим образом:
S * z, S VN, z V*.
Формальной грамматикой назовем упорядоченную четверку
G=(VN, VT, P, S),
где VN и VT – непересекающиеся множества нетерминальных и терминальных (соответственно) символов данной грамматики. Р – множество синтаксических правил грамматики, S – начальный нетерминальный символ.
Формальная грамматика, которая для любой предъявленной цепочки умеет решать, является эта цепочка правильной или нет, называется распознающей.
Формальная грамматика, которая умеет строить любую правильную цепочку, давая указания об ее строении, не генерируя при этом ни одной неправильной цепочки, называется порождающей.
Пример. Формальную грамматику G= (VN, VT, P, S) можно задать следующими правилами Р.
p1:<арифметическое выражение (+, *)>: E
p2:E T p3:T T*P
p4:E T+E
p5:T P p6:E c p7:T a
p8:P b.
Тогда VN = {< арифметическое выражение (+, *)>, E, T, P};
VT ={a, b, c, +, *, };
S= <программа>.
Порождение арифметического выражения по этой грамматике можно задать следующим образом:
<арифметическое выражение (+,*)> E T T*P . a*P
. a*b, т.е.
<арифметическое выражение (+, *)> . a*b.
Подчеркнем, что формальная грамматика не является алгоритмом. Множество синтаксических правил Р – не последовательность