МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ТЕРНОПІЛЬСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ ІМЕНІ ІВАНА ПУЛЮЯ
Кафедра комп’ютерних наук
Лабораторна робота №6
Нейро-нечіткі мережі для поданя і обробки знань
з дисципліни “Теорія алгоритмів”
Тернопіль, 2011
Тема роботи:Нейро-нечіткі мережі для поданя і обробки знань.
Мета роботи:Ознайомитись з нейро-нечіткими мережами для поданя і обробки знань.
Теоритичні відомості
Різні типи інтелектуальних систем мають свої особливості, наприклад, за можливостями навчання, узагальнення і отримання результатів, що робить їх найбільш придатними для вирішення одних класів задач і менш придатними — для інших.
Нейрониі мережі, наприклад, є зручними для задач розпізнавання образів, але дуже незручні для пояснення, як вони таке розпізнавання здійснюють. Вони можуть автоматично здобувати знання, але процес їхнього навчання найчастіше відбувається досить повільно, а аналіз навченої мережі є дуже складним (навчена мережа є звичайно «чорною скринею» для користувача). При цьому яку-небудь апріорну інформацію (знання експерта) для прискорення процесу навчання в нейронну мережу ввести складно.
Системи з нечіткою логікою, напроти, є зручними для пояснення одержуваних за їхньою допомогою висновків, але вони не можуть автоматично здобувати знання для використання їх у механізмах виведень. Необхідність розбиття універсальних множин на окремі області, як правило, обмежує кількість вхідних змінних у таких системах невеликим значенням.
Хаяши та Імура (А. Ітига) показали, що иейромережа прямого поширення може апроксимувати будь-яку систему, що заснована на нечітких правилах, та будь-яка нейромережа прямого поширення може бути апроксимована системою, що заснована на нечітких правилах.
Нейро-нечітка мережа - це подання системи нечіткого виведення у вигляді нейронної мережі, зручної для навчання, поповнення, аналізу та використання. Структура нейро-нечіткої мережі відповідає основним блокам систем нечіткого виведення.
Завдання до лабораторноїроботи
Згідно з номером індивідуального варіанта студента за журналом згенерувати навчаючу та тестову вибірки даних.
Нехай V- номер студента за журналом, а гапсі - функція, що генерує псев-довипадкові числа у діапазоні [0; 1]. Визначимо кількість екземплярів у навчаючій вибірці Sн кількість екземплярів у тестовій вибірці SТ, кількість вхідних змінних (ознак) вибірок N, значення ознак вибірок: навчаючої xн, та тестової xт., а також значення цільових ознак для вибірок: навчаючої—yн та тестовоїyт.
Вхідні дані:
V = 16; N = 2;
S n = 2* 16= 32;
S t = 3*16 = 48;
S= 1,2,3,… S n
S= 1,2,3,… S т
Результат роботи
Навчаюча вибірка Хн і тестова вибірка Хт
Цільові ознаки навчаючої Yн та тестової вибірки Yт
Висновок: На цій лабораторній роботі я ознайомився з нейро-нечіткими мережами для поданя і обробки знань.
Текст програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Memo2: TMemo;
Memo3: TMemo;
Button3: TButton;
Button4: TButton;
Memo4: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form1: TForm1;
V,N : real;
Sn,St :integer;
Xn : array [1..32, 1..6] ofreal;
Xt : array [1..48, 1..6] ofreal;
Yn : array [1..32] ofreal;
Yt : array [1..48] ofreal;
rand : real;
s,j,i: integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
Random(10);
rand := random/10;
V := 16;
N := 2;
Sn := 32;
St := 48;
for s := 1 toSndo
begin
for j := 1 to 6 do
begin
Xn[s,j]:= (V/(s*j))* rand;
end;
Memo1.Lines.Add(floatToStr(Xn[s,1]) + '| |' + floatToStr(Xn[s,2])
+ '| |' + floatToStr(Xn[s,3]) + '| |' + floatToStr(Xn[s,4])
+ '| |' + floatToStr(Xn[s,5]) + '| |' + floatToStr(Xn[s,6]) );
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
randomize;
Random(10);
rand := random/10;
V := 16;
for s := 1 toStdo
begin
for j := 1 to 6 do
begin
Xt[s,j]:= (V/(s*j))* rand;
end;
Memo2.Lines.Add( floatToStr(Xt[s,1]) + '| |' + floatToStr(Xt[s,2])
+ '| |' + floatToStr(Xt[s,3]) + '| |' + floatToStr(Xt[s,4])
+ '| |' + floatToStr(Xt[s,5]) + '| |' + floatToStr(Xt[s,6]));
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
for s := 1 toSndo
begin
Yn[s]:= 0.1*(Xn[s,1]+Xn[s,2]);
Memo3.Lines.Add('Y= '+ floatToStr(Yn[s]));
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
for s := 1 toStdo
begin
Yt[s]:= 0.1*(Xn[s,1]+Xn[s,2]);
Memo4.Lines.Add('Y= '+ floatToStr(Yt[s]));
end;
end;
end.