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;
|
Введем, например, в программу три утверждения:
- Это летает.
- Это ходит
- Это ползает.
И два варианта исхода "Это птица" и "Это не птица".
Первый раз программа скорее всего, ошибется и вы ей укажете,
что ответ неверный. Но затем она научиться по заданным утверждениям правильно
определять объект.
Вот пример ее работы:
Запустите программу и убедитесь, что она действительно
способна обучаться. А принцип ее работы мы обсудим
в одном из следующих уроков.
Исходники к уроку можно скачать
здесь.
Все статьи по данной теме
|