У вас вопросы?
У нас ответы:) SamZan.net

ЛАБОРАТОРНАЯ РАБОТА 8 ldquo;Реализация нечеткого логического выводаrdquo; Цель работы

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 4.2.2025

ЛАБОРАТОРНАЯ РАБОТА № 8

“Реализация нечеткого логического вывода”

Цель работы. Целью работы является изучение механизма нечеткого логического вывода в системе программирования Пролог.

Краткие теоретические сведения. Рассмотрим следующее предложение языка Пролог:

 suit (peter, X): -

     big_salary (X,_)),

     good_conditions (X,_).

     big_salary(mailer, 0.4).

     big_salary(officer, 0.7).

     big_salary(bob, 0.8).

     big_salary(artist, 1.0).

     good_conditions(mailer, 0.7).

     good_conditions(officer, 0.3).

     good _conditions(bob, 0.6).

В нечетком Прологе вывод осуществляется таким образом, чтобы либо найти ответ с максимальной правдоподобностью, либо “ обычным образом”, но учитывая, что значение 0.5 и ниже в качестве меры истинности рассматривается как ложное. Рассмотрим , как реализовать два этих подхода.

Подход по принципу 0.5 и ниже – ложь.

В этом случае наша программа должна быть переписана следующим образом:

 Suit (peter, X): -

     Big_salary (X,Y)),

     Y>=0.5,

     Good_conditions (X,Z),

      Z>=0.5.

     Big_salary(mailer, 0.4).

     Big_salary(officer, 0.7).

     Big_salary(bob, 0.8).

     Big_salary(artist, 1.0).

     Good_conditions(mailer, 0.7).

     Good_conditions(officer, 0.3).

     Good _conditions(bob, 0.6).

     

Как видим, изменения в этом случае в тексте программы минимальные.

Теперь рассмотрим второй подход: поиск ветви с наибольшим значением степени истинности. Для реализации второго подхода нам потребуется воспользоваться командой fail следующим образом:

 database - mydb

    job(string)

    

 predicates

 nondeterm suit(string,integer)   

 nondeterm big_salary(string,real)

 nondeterm good_conditions(string,real)

    

clauses

 suit("peter",R):-

     big_salary (X,Y),

     good_conditions (X,Z),

      T=Y*Z,

       T>R,

     retractall(_), !,

     assert(job(X)),

     suit(peter,T).

     

    suit ("peter",_):-

      job(X),

      write ("VYBRANA RABOTA:",X).

     big_salary("mailer", 0.4).

     big_salary("officer", 0.7).

     big_salary("bob", 0.8).

     big_salary("artist", 1.0).

     good_conditions("mailer", 0.7).

     good_conditions("officer", 0.3).

     good_conditions("bob", 0.6).

   

 

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

goal

suit("peter",0).

Объясним наиболее сложный участок данной программы :

   suit("peter",R):-

     big_salary (X,Y),

     good_conditions (X,Z),

      T=Y*Z,

       T>R,

     retractall(_,mydb), !,

     assert(job(X),mydb),

     suit(peter,T).

Сначала последовательно выполняются предикаты :

     big_salary (X,Y)),

     good_conditions (X,Z),

      T=Y*Z.

Здесь по порядку выбирается работа, а затем выбирается соответствующая ей зарплата и условия. Вычисляется величина T=Y*Z.  После этого выполняется проверка

       T>R,           (*)

которая в случае удачи вызовет смену содержимого предиката базы данных job, записав в него выбранную работу и снова вызвав предикат suit (peter, T), где T – новая оценка степени истинности правила. Заметим, что хотя бы одна работа всегда будет выбрана. Если нет уже ни одной работы, для которой выполняется условие (*), то осуществляется выход в правило :

    suit (peter, _): -

      job(X),

      write (“VYBRANA RABOTA:”,X).

Для вывода найденной работы на экран.

ЗАДАНИЕ НА ВЫПОЛНЕНИЕ. Надлежит заменить критерий T=Y*Z  на критерий T= min (Y,Z), возвращающий в переменной T наименьшее из чисел Y,Z.

Если значение T у двух и более работ совпадает, то программа должна останавливать свой выбор на той работе, у которой сумма Y+Z наибольшая. Для реализации этого требуется изменить фрагмент,

       T=Y*Z.

       T>R,

       retractall(_),

      assert(job(X)),

       ………………

дополнив его новым предикатом change(X,T,Y,Z), который и осуществляет  проверку оценок T, например:

        change (X,T,Y,Z):-

         job(X1,T,Y1,Z1),

         A=Y+Z,

         A>Y1+Z1, и т.д.      




1. Фирма АлектоЭлектроникс Андрей СУРКОВ В Омске создана технология по восстановлению старых аккумулято
2. это относительно самостоятельно развивающееся явление которое подчиняется особым закономер
3. Защита металлов от коррозии
4. Практична психологія освітньокваліфікаційного рівня бакалавра спеціаліста та магістра у Львівському де
5. тема уголовного права
6. 2.html
7. Контрольная работа по курсу- Финансовое право Вариант 1 Работу выполни
8. Введение Глава 1 Понятие сущность и содержание банковской тайны
9. реферат по Теории языкаВведение в языкознание Выполнила студентка 1 курса Савина Анастасия Алексеевна
10. одна зі засновниць ООН повноправного члена Організації