unit AIObj
Разрабатываем экспертную систему. Урок
6. Как это работает.
Все статьи по данной теме
А теперь мы будем разбираться, как же
работает наша самообучающаяся программа,
которую мы написали на предыдущем уроке. И
так, что же происходит, когда мы нажимаем на
кнопочку "Пуск"? Сначала мы вычисляем
результат - наше решение:
//поиск
решения
decision:=0;
for
i:=Low(values)to
High(values)
do
begin
decision:=decision+values[i]*rules[i];
end;
|
Вычисляем мы его просто суммированием
произведений значений утверждений на
значений правил. по сути, это частный случай
модели нейрона, согласно которой на входе
мы имеем разные сигналы, а на выходе сумму
этих сигналов, умноженной на весовые коэффициенты.
В общей модели нейрона на входе может быть
любой сигнал, у нас же только нуль или
единица.
В зависимости от того, какой результат у
нас получился, мы выбираем тот или иной
исход и спрашиваем: "Это верно?":
//сообщить
пользователю результат решения
if
decision>0
then
s:='Возможный
исход '+outcome1
else
s:='Возможный
исход '+outcome2;
s:=s+'.
Это верно?';
if
messageDlg(s,mtConfirmation,[mbYes,mbNo],0)=mrNo
then
begin
//корректировка
правил
if
decision>0
then
for
i:=Low(rules)
to
High(Rules)
do
Rules[i]:=rules[i]-Values[i]
else
for
i:=Low(rules)
to
High(Rules)
do
Rules[i]:=rules[i]+Values[i];
end;
|
Если
пользователь ответил "Нет" то в
зависимости от выбранного исхода корректируем
весовые коэффициенты: если наше решение в
пользу первого исхода, то весовой коэффициент
в каждом правиле уменьшаем на значение
введенных переменных. Иначе для всех
весовых коэффициентов происходит
увеличение.
Допустим,
изначальная матрица правил заполнена
нулями. У вас есть утверждения:
-
Это
летает
-
Это
ползает
-
Это
бегает.
Зададим
матрицу утверждений для воробья:
Это летает |
Да |
Это ползает |
Нет |
Это бегает. |
Да |
Что
у нас вычислит программа?
Результат
расчета будет равен нулю. Это значит, что
экспертная система предположила, что это не
птица. Естественно, предположение неверное,
мы знаем, что воробей - это птица и говорим
об этом программе. Она меняет весовые
коэффициенты. вот какие они теперь у нас
будут:
Это летает |
1 |
Это ползает |
0 |
Это бегает. |
1 |
В следующий раз на тот же самый набор
утверждений программа ответит "Это птица".
Теперь зададим параметры, допустим, кота:
Это летает |
Нет |
Это ползает |
Нет |
Это бегает. |
Да |
Программа предположила, что это птица. Мы
говорим ей, что это неверно, так как кот ну
никак не может быть птицей. получаем
следующий набор правил:
Это летает |
1 |
Это ползает |
0 |
Это бегает. |
0 |
Теперь программа будет отвечать
правильно для случая с котом и для случая с
воробьем. Правда, если мы введем параметры
страуса, то программа опять выдаст неверный
ответ. И тут у нас вскрывается противоречие
- то, что не летает, не ползает, не бегает
может быть как страусом, так и котом! Как же
разрешить его? Только одним способом,
ввести какой либо дополнительный параметр,
например, наличие оперения.
Все статьи по данной теме
|