.
Разрабатываем экспертную систему. Урок 4. Переводим наш пример с БЕЙСИКа на Delphi и тестируем его.
Автор megabax   
11.01.2011 г.
unit AIObj

Разрабатываем экспертную систему. Урок 4. Переводим наш пример с БЕЙСИКа на Delphi и тестируем его.

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

Исходники к уроку можно скачать здесь.

И так, сегодня мы наконец то переведем наш пример с БЕЙСИКа на Delphi.  И так, открываем наш проект, который мы создали на прошлом уроке. Если вы только начали читать, то загляните в прошлый урок и сделайте этот пример, что бы мы могли продолжить. Теперь добавим к форме кнопочку "Пуск" и в качестве обработчика события нажатия на эту кнопочку напишем нашу программку:

procedure TfrmExpertSystem.btnStartClick(Sender: TObject);
var vars:integer;
      svars:array of string;
      values:array of integer;
      rules:array of integer;
      outcome1,outcome2:string;
      A:string;
     decision:integer;
     i:integer;
begin

    //строка 10, аналог команды CLR
    mmPrintFiled.Lines.Clear;

    //строки 20-30
    print('Введите количество утверждений');
    vars:=StrToInt(Input);
    SetLength(values,vars);
    SetLength(rules,vars);
    SetLength(svars,vars);

    //строки 40-70 иницализация массивов
    for i:=Low(values) to High(values) do
    begin
      values[i]:=0;
      rules[i]:=0;
   end;

   //80-110
   Print('Назовите эти утверждение');
   for i:=Low(svars) to High(svars) do
   begin
      svars[i]:=input;
      Print('Утверждение '+svars[i]);
  end;
  Print('');

   //120-140
   Print('Назвоите возможные исходы');
   outcome1:=Input;
   Print('Первый исход: '+outcome1);
   outcome2:=Input;
   Print('Второй исход: '+outcome2);

   //цикл, аналог перехода по goto
   repeat

      //150-210
      print('');
      for i:=Low(values) to High(Values) do
      begin
         values[i]:=0;
         Print('утверждение '+svars[i]);
         Print('Если это утверждение истино, введите Y, иначе N');
         a:=input;
         if UpperCase(a)='Y' then Values[i]:=1;
      end;

      //220 - 250
      decision:=0;
      for i:=Low(values) to High(values) do
      begin
         decision:=decision+values[i]*rules[i];
      end;

       //260 - 280
       if decision>0 then print('Возможный исход '+outcome1)  else print('Возможный исход '+outcome2);
       print('Если это верно, введите Y иначе N');
       A:=input;
       if UpperCase(A)='Y' then
       begin
           print('Если хотите завершить работу, введите Y');
          A:=input;
          if UpperCase(A)='Y' then break;
          a:='';
          continue;
       end;//аналог goto 150

       //290 корректировка правил
       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];

       //Запрос на выход
       print('Если хотите завершить работу, введите Y');
       A:=Input;

   until UpperCase(A)='Y'; //аналог goto 150

end;
 

Введем, например, в программу три утверждения:

  • Это летает.
  • Это ходит
  • Это ползает.

И два варианта исхода "Это птица" и "Это не птица".

Первый раз программа скорее всего, ошибется и вы ей укажете, что ответ неверный. Но затем она научиться по заданным утверждениям правильно определять объект.

Вот пример ее работы:

Разрабатываем экспертную систему. Урок 4. Переводим наш пример с БЕЙСИКа на Delphi и тестируем его.

Запустите программу и убедитесь, что она действительно способна обучаться. А принцип ее работы мы обсудим в одном из следующих уроков.

Исходники к уроку можно скачать здесь.

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

 

Последнее обновление ( 22.10.2011 г. )