50022

Нечеткая логика

Лабораторная работа

Информатика, кибернетика и программирование

Согласно заданным вариантам разработать программу на любом алгоритмическом языке, способную: А. Различать степени изменения лингвистической переменной в трех степенях – «Очень – Нормально – Слабо» Б. Изменять порог чувствительности

Русский

2014-01-14

67 KB

2 чел.

Системы искусственного интеллекта

Лабораторная работа №1

Нечеткая логика

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

Задание

Согласно заданным вариантам разработать программу на любом алгоритмическом языке, способную:

А. Различать степени изменения лингвистической переменной в трех степенях – «Очень – Нормально – Слабо»

Б. Изменять порог чувствительности.

  1.  Нельзя – авось – можно (переход дороги, например)

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ComCtrls, StdCtrls,math, TeEngine, Series, ExtCtrls, TeeProcs,

 Chart;

type

 TForm1 = class(TForm)

   Chart1: TChart;

   Series1: TLineSeries;

   Series2: TLineSeries;

   Series3: TLineSeries;

   Series4: TBarSeries;

   TrackBar1: TTrackBar;

   Label1: TLabel;

   Label5: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Label6: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label7: TLabel;

   TrackBar2: TTrackBar;

   procedure TrackBar1Change(Sender: TObject);

   procedure TrackBar2Change(Sender: TObject);

   procedure FormCreate(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 acc:integer;

implementation

{$R *.dfm}

procedure TForm1.TrackBar1Change(Sender: TObject);

var a,b,c,aq:double;

   i:integer;

begin

 label2.Caption:='';

 label3.Caption:='';

 label4.Caption:='';

 label1.Caption:=inttostr(trackbar1.position);

 a:=(1/(1+power(((trackbar1.Position-10+acc)/12),22)));

 b:=(1/(1+power(((trackbar1.Position-35+acc)/12),8)));

 c:=(1/(1+power(((trackbar1.Position-60+acc)/12),12)));

 if a<0.2 then label2.Caption:='Совсем не '+edit1.Text;

 if (a<0.4) and (a>0.2) then label2.Caption:='Чуть-чуть не '+edit1.Text;

 if (a<0.6) and (a>0.4) then label2.Caption:='Немного '+edit1.Text;

 if (a<0.8) and (a>0.6) then label2.Caption:='Весьма '+edit1.Text;

 if (a<1) and (a>0.8) then label2.Caption:='Абсолютно '+edit1.Text;

 if b<0.2 then label3.Caption:='Совсем не '+edit2.Text;

 if (b<0.4) and (b>0.2) then label3.Caption:='Чуть-чуть не '+edit2.Text;

 if (b<0.6) and (b>0.4) then label3.Caption:='Немного '+edit2.Text;

 if (b<0.8) and (b>0.6) then label3.Caption:='Весьма '+edit2.Text;

 if (b<1) and (b>0.8) then label3.Caption:='Абсолютно '+edit2.Text;

 if c<0.2 then label4.Caption:='Совсем не '+edit3.Text;

 if (c<0.4) and (c>0.2) then label4.Caption:='Чуть-чуть не '+edit3.Text;

 if (c<0.6) and (c>0.4) then label4.Caption:='Немного '+edit3.Text;

 if (c<0.8) and (c>0.6) then label4.Caption:='Весьма '+edit3.Text;

 if (c<1) and (c>0.8) then label4.Caption:='Абсолютно '+edit3.Text;

 aq:=a+b+c;

 label2.Caption:=label2.Caption+' '+inttostr(round(a/aq*100))+'%'+edit1.Text;

 label3.Caption:=label3.Caption+' '+inttostr(round(b/aq*100))+'%'+edit2.Text;

 label4.Caption:=label4.Caption+' '+inttostr(round(c/aq*100))+'%'+edit3.Text;

 series4.Clear;

 for i:=1 to 100 do if i<>trackbar1.Position then

   series4.Add(0) else series4.Add(1);

end;

procedure TForm1.TrackBar2Change(Sender: TObject);

var a,b,c:double;

   i:integer;

begin

 acc:=trackbar2.Position;

 series1.Clear;

 series2.Clear;

 series3.Clear;

 series4.Clear;

 for i:=1 to 100 do begin

   a:=(1/(1+power(((i-10+acc)/12),22)));

   series1.Add(a);

   b:=(1/(1+power(((i-35+acc)/12),8)));

   series2.Add(b);

   c:=(1/(1+power(((i-60+acc)/12),12)));

   series3.Add(c);

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var a,b,c:double;

   i:integer;

begin

 acc:=0;

 series1.Clear;

 series2.Clear;

 series3.Clear;

 series4.Clear;

 for i:=1 to 100 do begin

   a:=(1/(1+power(((i-10+acc)/12),22)));

   series1.Add(a);

   b:=(1/(1+power(((i-35+acc)/12),8)));

   series2.Add(b);

   c:=(1/(1+power(((i-60+acc)/12),12)));

   series3.Add(c);

 end;

end;

end.

Вывод: научились создавать простейшую системы нечеткой логики, реализованной на языке высокого уровня.


 

А также другие работы, которые могут Вас заинтересовать

37682. Логічні команди восьмирозрядного мікропроцесора КР580ВМ80 (Intel 8080) 394 KB
  До них відносяться команди І АБО ВИКЛЮЧНЕ АБО та ЗАПЕРЕЧЕННЯ ІНВЕРСІЯ а також команда ПОРІВНЯННЯ за допомогою якої здійснюються різноманітні перевірки. Окремо слід виділити команди простого та циклічного зсуву які використовуються для реалізації операцій МНОЖЕННЯ і ДІЛЕННЯ та деяких інших цілей. Власне логічні команди.
37683. Робота з утилітою Disk Manager 498.97 KB
  Ознайомитись з можливостями утиліти Запоминающие устройства Засіб управління дисками в цій версії Windows призначено для виконання таких завдань управління дисками як створення і форматування розділів і томів і призначення літер дисків. Подивитись структуру властивості всіх підключених жорстких дисків рис.рис3 Після аналізу лігічних дисків було виявлено що необхідно провести дефрагментацію диска С.2 Рис 3 Висновки по роботі: На цій лабораторній роботі я вивчив можливості утиліти Disk Mnger операційної системи Windows Vist зробив...
37684. Команди умовних та безумовних переходів восьмирозрядного мікропроцесора КР580ВМ80 (Intel 8080) 234.5 KB
  Для забезпечення таких можливостей використовуються команди умовних та безумовних переходів які дають змогу міняти послідовність виконання програм. Загальні властивості команд переходів Як витікає з їх назви всі розглядувані команди поділяються на дві групи: безумовних та умовних переходів. За винятком команди PCHL яка є однобайтовою всі інші є трибайтовими.
37688. Багатовимірні масиви. Функції. Обробка двовимірних масивів 563.03 KB
  Мета: вивчити засоби опису функцій користувача та задання багатовимірних масивів, навчитись застосовувати функції користувача та алгоритми обробки багатовимірних масивів, зокрема двовимірних.
37689. Вибір векторної норми і знаходження коефіцієнта стиску 41 KB
  Вибір векторної норми і знаходження коефіцієнта стиску. Скористаємось програмою NormMatr. Після її виконання маємо. Всі ці норми менше одиниці. Тому можна вибрати будь-яку векторну норму з цих норм. Але зручно вибрати ту векторну норму, для якої відповідна підлегла норма матриці буде найменшою. Тому виберемо векторну m-норму , для якої коефіцієнт стиску дорівнює