Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

ЛАБОРАТОРНАЯ РАБОТА № 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. I love you Подумаю мельком
3. Тема- дослідження деревини на стикання уздовж волокон Мета- визначення границі міцності деревини при ст
4. Утверждаю Приказ 200 г
5. суммарная мощность насоса- ; где суммарная
6. Общественный строй Древней Руси
7. тематика ФАДЕЕВА Н
8. Экологическая стратегия ОАО
9. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата технічних наук Київ ~ Дисерта
10. 6 28
11. СЕМЬ НАВЫКОВ ВЫСОКОЭФФЕКТИВНЫХ ЛЮДЕЙ
12. Учет операций с уставным капиталом
13. Заработная плата и нормирование труда
14. I як н-ауки 83 Пiзнавальнi процеси особистостi
15. на тему- Заработная плата в системе методов стимулирования труда зарубежный опыт студентки III курса
16. ТЕМА- Организация и правовые основы работы аудиторов по проведения ревизий аудиторских проверок
17. Франц Ксавьер фон Баадер
18. Проект создания компании-оператора ООО Трансмет
19. Москвоведение 2007 Рецензенты- Бенку И
20. тема химических элементов Д