Имя материала: Базы знаний интеллектуальных систем

Понятно, что работа такого «арбитра» имеет смысл лишь в тех случаях, когда продукций немного (десятки), а в конфликтном множестве продукций мало (единицы). В противном случае функционирование системы неэффективно и требуются специальные алгоритмы, чтобы «арбитр» не тратил все время только на себя. К настоящему времени разработаны и опробованы на практике различные стратегии увеличения эффективности работы «арбитра» [de Kleer, 1989], которые используются и в данном случае. Но не менее важно иметь гибкие средства описания этих стратегий с уровня входного языка. Тогда пользователь, в зависимости от требований его задачи, сможет отказаться от стандартных стратегий и описать свою собственную, которая адекватна его конкретному случаю.

Для описания стратегий управления выводом решений в ЯЦЗ PILOT/2 служат секционное и правиловое разрешения. Каждое из них является последовательностью фильтров, с помощью которых формируется и/или изменяется конфликтное множество продукций. Для понимания того, как пользоваться этими фильтрами, необходимо знать стратегию встроенного «арбитра» PILOT/2. Поэтому ниже приводится алгоритм его работы, специфицирующий схему, представленную на рис. 7.1.

 

Подпись: Алгоритм работы встроенного «арбитра» ЯПЗ PILOT/2
while (уровень-0 ! = NULL ) {
«выбрать из «повестки-дня» секцию для выполнения»; 
«сформировать на уровне-1 мн-во правил этой секции»;
«выполнить фильтрацию мн-ва правил на уровне-1 по флагу активна/ неактивна»;
«выполнить фильтрацию мн-ва оставшихся правил на основании вычисления истинности секционного разре-шения»; 
«сформировать на уровне-2 множество активных правил»; 
for (каждого правила на уровне-2) {
«вычислить значение истинности левой части»; 
if ( значение истинности правила == TRUE ) 
«добавить правило в конфл. мн-во на уровне-3»;
}
«выполнить фильтрацию мн-ва оставшихся на уровне-3 правил на основании вычисления истинности правиловых разрешений»; 
«сформировать на уровне-4 множество готовых к выполнению правил»; 
    if ( на уровне-4 осталось одно правило )
«выполнить данное правило»; 
    else{
«выполнить случайный выбор исполняемого правила из множества правил на уровне-4»;
«выполнить данное правило»; 
    }
}

Приведенный алгоритм прозрачен и не нуждается в особых комментариях. Заметим лишь, что фильтр «активна/неактивна» реализован как встроенная проверка флагов активности продукций текущей секции. Первоначально (при запуске секции) «арбитр» считает, что все продукции секции активны, но в процессе выполнения их состояние может измениться за счет применения соответствующих действий. Фильтр секционного разрешения тоже программируется с уровня входного языка. В результате применения этих двух фильтров формируется множество продукций, которые принципиально могут войти в конфликтное множество. Этап фильтрации продукций по истинности левых частей — традиционный, в результате получается традиционное конфликтное множество (правда, уже усеченное за счет предыдущих двух фильтров). На этом множестве в ЯПЗ PILOT/2 может быть организовано дополнительное управление за счет программируемых правиловых разрешений. Если все усечения не привели к однозначному выбору исполняемой продукции, она выбирается случайным образом и цикл работы «арбитра» повторяется.

Точек «влияния» на работу «арбитра» PILOT/2 всего четыре: активность/неактивность продукций; секционное разрешение; истинность левых частей продукций; правиловое разрешение. Существует и пятая точка — алгоритм случайного выбора, но она инженеру по знаниям недоступна.

Секционные и правиловые разрешения суть последовательность операторов if-then-else и действий разрешения. При этом сами условия секционного и пра-вилового разрешений — логические формулы в базисе И-ИЛИ-НЕ с общепринятым старшинством операций. А специфика ЯЦЗ PILOT/2 состоит в том, как определяются элементарные разрешения. Семантика действий разрешений (при условии, что через КМ обозначено конфликтное множество) — следующая:

set (Rl, R2,.... Rk)                                                 KM - Rl, R2,..., Rk

insert (Rl, R2,..., Rk)                            КМн - KMC + Rl + R2 + ... + Rk

remove (Rl, R2,..., Rk)                        KMн - KMC - Rl - R2 - ... - Rk

removeall                                                              KM = пустое множество

break                                                                      Прерывает выполнение оставшихся

элементов секционного или правилового разрешения

Семантика элементарных секционных (продукционных) разрешений — определяется правилами вида:

1. Элементарное секционное разрешение active(Rl,R2,...,Rk) истинно, если все продукции Rl, R2,..., Rk имеют включенные флаги активности.

2. Элементарное секционное (продукционное) разрешение used(Rl,R2,...,Rk) истинно, если все продукции Rl, R2,..., Rk применялись ранее.

3. Элементарное продукционное разрешение ready(Rl,R2,...,Rk) истинно, если все продукции Rl, R2,..., Rk готовы к выполнению, что, в свою очередь, справедливо, если их левые части (условия) истинны.

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

Вместе с тем в ЯПЗ PILOT/2 инженеру по знаниям предоставлена возможность управления работой продукционной системы и на основе анализа базы знаний. Нужно лишь понимать, что это управление «дорогое», так что пользоваться им следует лишь в тех случаях, когда соответствующие условия невозможно (или нецелесообразно) проверять в левых частях продукций.

 

7.1.2. Декларативное представление данных и знаний

 

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

Спецификация типов — мощное средство конструирования новых типов данных, которые поддерживаются системой автоматически на основании базовых типов. В ЯПЗ PILOT/2 фиксированы следующие базовые типы: int, float, char, string, имя -фрейма, prototype, frame, func, рте. Без учета спецификации ограничения это дает почти те же возможности, что и спецификация typedef в языках С и C++. Однако в ЯПЗ PILOT/2 существуют и множественные типы, симметричные по отношению к базовым, а также усечение вновь вводимых типов с помощью ограничений. Последние задают в базисе И-ИЛИ-НЕ ограничения, которым должны удовлетворять значения соответствующего типа. Так, например, спецификация

 

Child is_a Age restr_by (>0 && <12);

 

вводит подтип типа Age, значения которого должны быть положительными целыми в интервале [0, 12].

Спецификации

 

Страница: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 |