Программирование - это просто
Advertisement
Главная
20.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Разрабатываем экспертную систему. Урок 6. Как это работает. Печать E-mail
Автор megabax   
22.06.2011 г.
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

Теперь программа будет отвечать правильно для случая с котом и для случая с воробьем. Правда, если мы введем параметры страуса, то программа опять выдаст неверный ответ. И тут у нас вскрывается противоречие - то, что не летает, не ползает, не бегает может быть как страусом, так и котом! Как же разрешить его? Только одним способом, ввести какой либо дополнительный параметр, например, наличие оперения.

Все статьи по данной теме

Последнее обновление ( 22.10.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги