Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodich.doc
Скачиваний:
5
Добавлен:
06.12.2018
Размер:
348.16 Кб
Скачать

8. Получение вывода экспертными системами в условиях неопределённости.

В данном разделе рассматривается метод управления процессом вывода в ЭС в условиях неопределённости. Неопределённость является неотъемлемой частью задачи, т.е. имеются неполные и неопределенные данные. Рассуждения в условиях неопределенности имеют место и в системах наблюдения при наличии одновременно нескольких конкурирующих гипотез и их постоянной переоценке по мере поступления новых данных. В конечном счете выделяется одна гипотеза, которая позволяет сделать соответствующий вывод. Наконец, все ЭС, использующие эвристики, должны рассуждать в условиях неопределенности, поскольку эвристика – приближённый метод, указывающий направление поиска.

Использование приближенных рассуждений.

Рассмотрим механизм рассуждений медицинской экспертной системы EMYCIN. Он базируется на следующих предположениях.

1. Для вычисления коэффициента определённости импликации с одной посылкой [если (Е), то (С)] коэффициент определённости присваивается как посылке, так и всей импликации. Далее эти две величины используются для вычисления коэффициента определённости заключения. Коэффициент определенности обозначается обозначается ct и определяется следующим образом:

коэффициент определенности посылки = сt(E) ~P(E);

коэффициент определенности импликации = сt(C) ~ P(C|E), где Р(Е) – вероятность истинности Е; Р(С| Е) – условная вероятность заключения, полученная при истинности посылки.

Правило комбинирования, позволяющее вычислить коэффициент определённости заключения записывается следующим образом:

ct(заключение) = ct(импликация)*ct(посылка).

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

Простейшей логической комбинацией является конъюнкция (импликация “И”) [если (е1 и е2),то (с)]. Коэффициент определённости посылки вычисляется следующим образом:

сt(е1 и е2) = min(ct(е1),ct(е2)).

Другой логической комбинацией является дизъюнкция (импликация “ИЛИ”) [если (е1 или е2),то (с)]. Её коэффициент определённости вычисляется следующим образом:

сt(е1 или е2) = max(ct(е1),ct(е2)).

3. Для вычисления коэффициента определённости заключения, которое поддерживается множеством правил

[Правило 1: если (е1), то (с) ct(заключение)=ct1;

Правило 2: если (е2), то (с) ct(заключение)=ct2.]

Формула, которая получается в результате формирования произведений из коэффициента определённости правил и вычитания либо сложения этих произведений соответствующим образом. Каждая двойная комбинация коэффициентов определённости вычитается, тройная – прибавляется, четвёртая – вычитается и т.п. Например, для случая двух правил, имеем:

ct(заключение) = ct1+ct2-ct1*ct2.

4. Для определения коэффициента определённости заключения в случае нескольких правил, поступающих последовательно, считается, что порядок и время поступления правил, поддерживающих заключения, не имеет значения.

5. В EMYCIN для определения коэффициента определенности, используется интервал от -1 до +1. Границы интервала обозначают следующее: +1 - система в чем-то полностью определена; 0 - у системы нет знаний об обсуждаемой величине; -1 – высказанная гипотетическая посылка или заключение абсолютно неверны. Промежуточные величины отражают степень доверия или недоверия к указанным ситуациям. Для вычисления коэффициента определённости ct(не е) достаточно просто поменять знак:

ct(не е) = -ct(е).

Для заключений, выводимых из нескольких правил, делаются изменения в формуле из пункта 3:

ct(заключение) = ct1 + ct2 - ct1*ct2 , если ct1>0, ct2>0;

ct(заключение) = ct1 + ct2 + ct1*ct2 , если ct1<0, ct2<0;

ct(заключение) = (ct1 + ct2)/(1 - min(abs(ct1),abs(ct2))), если отрицателен один коэффициент;

ct(заключение) = 0, если ct1 = +1, а ct2 = -1.

6. В EMYCIN все правила делятся на обратимые и необратимые. Одной из характеристик обратимого правила является его применимость к любому вероятностному значению, которое может быть связано с посылкой. Необратимые правила "работают" только при положительных значениях посылки, то есть в том случае, когда ct положителен. Если же ее значение отрицательно, правило применять нельзя.

Многоступенчатые рассуждения.

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

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

{вставка рисунка 1}

Сеть вывода на рисунке 1 отображает следующие правила:

Если (е1), то(с1) ct(импликация)= 0.8 (nrev)

Если (е2), то(с2) ct(импликация)= 0.9 (rev)

Если (е3), то(с2) ct(импликация)= 0.7 (rev)

Если (е4), то(с3) ct(импликация)= 0.6 (nrev)

Если (не е5), то(с3) ct(импликация)= 0.5 (nrev)

Если (с2 и с3), то(с4) ct(импликация)= 0.9 (rev)

Если (с1 или с4), то(с5) ct(импликация)= 0.8 (nrev).

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

{Вставка рис 2}

Программа приближенных рассуждений в стиле EMYCIN.

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

Описанная ниже программа иллюстрирует способ представления сети вывода, при наличии конкурирующих гипотез. Рассмотрим упрощенную версию программы. Она включает следующие ограничения:

1.Правила могут иметь одну из 3-х форм:

а) Если (е), то(с);

Если (не е), то (с);

б) Если (е1 или е2), то (с);

Если ((не е1) или е2), то (с);

Если (е1 или (не е2)), то (с);

Если ((не е1) или (не е2)), то (с);

в) Если (е1 и е2), то (с);

Если ((не е1) и е2), то (с);

Если (е1 и (не е2)), то (с);

Если ((не е1) и (не е2)), то (с).

2. На одно заключение могут указывать не более двух правил.

3. Все правила обратимы.

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

{вставка рисунка 3}

Имеется две конкурирующие гипотезы с7 и с8. Связи между узлами представляют основные шаги рассуждений.

Правило "И": если ((не е1) и е2), то (с1) (ct(импликация) = 0.9(rev))

на Прологе запишется следующим образом:

imp(a,r,c1,neg,e1,pos,e2,0.9).

Такая запись означает импликацию. Первый аргумент указывает, что её тип And. Второй аргумент обозначает обратимость правила. Если вэтой позиции стоит n, то правило необратимо. Импликация рассматривается для узла с1. Перед каждым узлом стоит слово neg или pos. Оно указывает шаблон отрицания в правиле, если таковой имеется. Коэффициент определённости данной конкретной импликации равен 0.9. Все остальные импликации можно представить с помощью тех же восьми аргументов фактов импликации.

Аналогично простая импликация запишется:

imp(s,r,c3,pos,e5,dummy,dummy,0.6)

Здесь записано, что с3 поддерживается импликацией, а е5 - посылка. Аргументы 6 и 7 (dummy, dummy) будут всегда присутствовать в простых импликациях. Это необходимо для представления всех импликаций одной формой.

И, наконец, правило, в котором посылки объединяются с помощью ИЛИ запишется:

imp(0,r,c6,pos,c1,pos,c2,0.6).

Если необходимо описать узел, который поддерживается несколькими правилами, то описывается импликации для каждого правила. Например, для узла с8 имеем правила:

если (с6), то (с8) ct(импликация) = 0.8 (rev)

если (е4 и с3), то (с8) ct(импликация) = 0.7 (rev)

Следовательно, получаем правила:

imp(s,r,c8,pos,с6,dummy,dummy,0.8);

imp(а,r,c8,pos,e4,pos,с3,0.7).

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

hypothesis - node (c7);

hypothesis - node (c8).

Нижние узлы, в отношении которых нельзя сделать никакого вывода, должны определяться конечными фактами:

terminal - node (e1);

terminal - node (e2).

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

/* Простая импликация */

infer (Node1, Ct) if

imp (s,Use,Node1,Sign,Node2,_,_,C1),

allinfer (Node2,C2),

find_multiplier (Sign,Mult,dummy,0),

Ct = Mult*C1*C2.

/* Импликация с "и" в посылке */

infer (Node1, Ct) if

imp (a,Use,Node1,SignL,Node2,SignR,Node3,C1),

allinfer (Node2,C2),

allinfer (Node3,C3),

find_multiplier (SignL,MultL,SignR,MultR),

C2S = MultL*C2, C3S = MultR*C3,

min (C2S, C3S, CX), Ct = CX*C1.

/* Импликация с "или" в посылке */

inter (Node1, Ct) if

imp (a,Use,Node1,SignL,Node2,SignR,Node3,C1),

allinfer (Node2,C2),

allinfer (Node3,C3),

find_multiplier (SignL,MultL,SignR,MultR),

C2S = MultL*C2, C3S = MultR*C3,

max (C2S, C3S, CX), Ct = CX*C1.

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

Правило find_multiplier используется для получения результата отрицаний и возвращает коэффициенты Mult, MultL и MultR, которые равны -1 и 1. Они используются для изменения знака соответствующих коэффициентов определённостей, когда этого требует отрицание. Правило определяется следующим образом:

/* для простой импликации */

find_multiplier (pos,1,dummy,0).

find_multiplier (neg,-1,dummy,0).

/* для "и","или" */

find_multiplier (pos,1,pos,1).

find_multiplier (pos,1,neg,-1).

find_multiplier (neg,-1,pos,1).

find_multiplier (neg,-1,neg,-1).

Позже обсудим правило allinfer, а пока вернемся к правилу infer. В том случае, если система пытается сделать вывод относительно узлов основания дерева, правило infer описывается следующим образом:

infer(Node1, Ct) if

terminal_node (Node1), evidence (Node1,Ct),!.

infer(Node1,Ct) if

terminal_node (Node1),

write("Каков коэффициент определенности узла", Node1),

nl, readreal (Ct),

asserta (evidence (Node1, Ct)),!.

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

allinfer (Node,Ct) if

findall (C1, infer(Node,C1), Ctlist),

combine (Ctlist,Ct).

Включение правила allinfer в конкретный узел заставляет систему проводить все возможные рассуждения для поиска коэффициента определенности в этом узле. Если узел поддерживается только одним правилом, то действие allinfer сводится к единичному использованию простого правила infer.

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

combine([Сt],Сt).

combine([-1,1],0).

combine([1,-1],0).

combine([С1,С2],Сt) if С1>=0, С2>=0, Сt = С1+С2-С1*С2.

combine([С1,С2],Сt) if С1<0, С2<0, Сt = С1+С2+С1*С2.

combine([С1,С2],Сt) if С1<0, С2>=0,

absvalue(С1,Z1), absvalue(C2,Z2),

min(Z1,Z2,Z3), Ct = (C1+C2)/(1-Z3).

combine([C1,C2],Ct) if C2<0, C1>=0,

absvalue(C1,Z1), absvalue(C2,Z2),

min(Z1,Z2,Z3), Сt = (C1+C2)/(1-Z3).

Для предиката combine требуется абсолютное значение, определённой пользователем функции, поэтому определяется предикат:

absvalue (X,Y) if X=0 Y=0,!.

absvalue (X,Y) if X>0 Y=X,!.

absvalue (X,Y) if X<0 Y=-X,!.

Теперь снимем введённые ограничения. Предположим, программа должна делать заключение на основе неограниченного числа поддерживающих правил вывода. В связи с этим необходимы изменения в правиле combine. То есть необходимо определить следующие правила: combine([C1,C2,C3],Ct) if; combine([C1,C2,C3,C4],ct) if и т.д.

Для описания правил такого вида используется подход изменений и дополнений. Суть его сводится к получению списка коэффициентов определенностей, каждый из которых вносит свой вклад в конечный вывод, и их попарное объединение вплоть до получения одного коэффициента определённости, отражающего все повлиявшие на него компоненты. При этом подходе правило combine остается прежним, но добавляется правило supercombine:

supercombine([Ct],Ct) if !.

supercombine([C1,C2],Ct) if combine ([C1,C2],Ct),!.

supercombine([C1,C2/T],Ct) if combine ([C1,C2],C3),

append([C3],T,TL),

supercombine(TL,Ct),!.

Если в выводе участвуют одно или два правила, то supercombine действует так же, как combine. При большем же числе правил supercombine с помощью combine объединяет два первых коэффициента определенности, затем преобразует (укорачивает) список коэффициентов определенностей, с которыми оно имеет дело, вызывая себя рекурсивно. Теперь необходимо изменить правило allinfer:

allinfer (Node,Сt) if

findall (С1, infer(Node,С1), Сtlist),

supercombine (Сtlist,Сt).

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

qualinfer (Use,C,Qmult) if Use = "r", Qmult=1,!.

qualinfer (Use,C,Qmult) if Use = "n", С>=0,Qmult=1,!.

qualinfer (Use,C,Qmult) if Use = "n", С<0,Qmult=0,!.

У него есть три аргумента: первый хранит информацию о типе используемой импликации (обратима она или нет), второй содержит коэффициент определённости посылки для этого вывода. Третий является выходной переменной, значения которой 1 или 0 используются для умножения.

Внеся изменения в первоначальный вариант описания правил infer, получим следующие правила:

/* Простая импликация */

infer (Node1, Ct) if

imp (s,Use,Node1,Sign,Node2,_,_,C1),

allinfer (Node2,C2),

find_multiplier (Sign,Mult,dummy,0),

qualinter (Use,CX,Qmult),

Ct = Mult*C1*C2*Qmult.

/* Импликация с "И" в посылке */

infer (Node1, Ct) if

imp (a,Use,Node1,SignL,Node2,SignR,Node3,C1),

allinfer (Node2,C2),

allinfer (Node3,C3),

find_multiplier (SignL,MultL,SignR,MultR),

C2S = MultL*C2, C3S = MultR*C3,

min (C2S, C3S, CX),

qualinfer (Use,CX,Qmult),

Ct = CX*C1*Qmult.

/* Импликация с "ИЛИ" в посылке */

inter (Node1, Ct) if

imp (a,Use,Node1,SignL,Node2,SignR,Node3,C1),

allinfer (Node2,C2),

allinfer (Node3,C3),

find_multiplier (SignL,MultL,SignR,MultR),

C2S = MultL*C2, C3S = MultR*C3,

max (C2S, C3S, CX),

qualinfer (Use,CX,Qmult),

Ct = CX*C1*Qmult.

Таким образом, имеем надежную систему для рассуждения в условиях неопределенности. Дополним ее управляющим правилом для выявления и сравнения узлов-гипотез:

driver if hypothesis-node(x), allinfer (X,Ct),

write ("Коэффициент определенности",X,"равен",Ct),nl,

fail.

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

Упражнение: Реализовать пример ЭС, используя стиль приближённых рассуждений системы EMYCIN с выводом при наличии нескольких конкурирующих гипотез для определения прогноза погоды.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]