bazyZnanii2003 (1086255), страница 2

Файл №1086255 bazyZnanii2003 (Лабораторные работы по Прологу (задания уточнять у преподавателя)) 2 страницаbazyZnanii2003 (1086255) страница 22018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

2. Имя слота также служит уникальным идентификатором, т.е. уникальным именем во фрейме, к которому он принадлежит. Могут вводится специальные идентификаторы, отождествляемые с отношениями ISA, PART OF, причина-следствие и другими. В качестве слота может выступать слот «условие», а его значением может быть продукционное правило. Таким образом реализуется возможность использования продукций для организации вывода.

Основными процессами обработки фреймовых структур являются:

1. создание нового экземпляра фрейма,

2. активизация фрейма,

3. формализация вывода путем последовательного поиска и активизации сети фреймов до нахождения наиболее соответствующего и построения на его основе экземпляра фрейма.

Другой, чрезвычайно перспективный подход создания межфреймовых связей и представления совокупности фреймов в виде сети состоит в представлении перечисленных связей ISA, PART OF, A KIND OF в виде фреймов. Семантика этих связей конкретизирует отношение и может быть детерминирована синтаксисом, а слот конкретизирует адресность связи.

Пример иерархической фреймовой структуры, в которой иллюстрируется наследование свойств фреймов показано на рис. 2.2. Этот пример позволит понять представление фреймовых струтур в Прологе и организацию инструментальных средств обработки фреймов. Таким образом, можно сформировать библиотеку полезных средств работы с фреймами.

mammal

VELUE

DEFAULT

birth

live

skin

fur

legs

4

monkey

VELUE

DEFAULT

rabbit

VELUE

DEFAULT

ako

live

ako

mammel

tail

curly

ears

long

legs

2

moves

jump

tail

short

gorilla

VELUE

DEFAULT

ako

monky

mammel

character

harm

age

8

Рис.2..

Во фрейме mammal стандартные атрибуты животных: наружный покров (skin) - мех (fur) и живородящий (live). Они наследуются фреймами monkey и rabbit и не имеют таких спецификаций в этих фреймах. Слоты могут иметь значения по умолчанию, которые определены в структуре фрейма; эти значения могут быть изменены в подфреймах. Так, все млекопитающие имеют по умолчанию четыре ноги, но у обезьян их только две.

Структура данных, определенная как фрейм, включает в себя имя предиката frame с четырьмя аргументами: первый – имя фрейма, второй – фрейм-родитель, третий – фpейм-pодитель по умолчанию и последний – список слотов. Формат структуры данных фрейма :

frame(name,[ako_val],[ako_def],

[slot_name1,

[facet_val1],

[facet_def1],

slot_name2,

[facet_val2],

[facet_def2],

. . . , ]).

где : slot_name(j) – имя слота,.

facet_val(j) – значение грани VALUE,.

facet_def(j) – значение грани DEFAULT,.

ako_val – имя фpейма-pодителя,.

ako_def – имя фpейма-pодителя по умолчанию.

Напpимеp, фрейм monkey описывается так:

frame(monkey,[mammal],[],[tail,[],[curly],legs,[2],[] ]).

Замечание: все записанные в базу данных предикаты могут быть выведены с помощью предиката

listing(frame).

Доступ к данным в системе фреймов может быть осуществлен тремя основными предикатами :

get_frame - получить данные о фрейме.

add_frame – добавить или модифицировать фрейм.

del_frame – удалить фрейм или атрибут фрейма.

Для удобства пользователя, эти операции будут применены к структурам, которые очень похожи на записи в базе данных: фрейм ассоциируется с записью базы данных, а слоты в фрейме – с полями в записи.

Специфика фреймовой системы – наследование, умалчиваемые значения– автоматически доступна для пользователя.

формат предикатов :.

get_frame(Frame,Slot,Value),

где: Frame – имя фрейма,.

Slot – имя слота, .

Value – требуемое значение..

Замечание: каждый из аргументов может быть переменной или термом.

Напpимеp, возможен следующий запрос:

?- get_frame(rabbit, X, Y).

Система выдаст все атрибуты фрейма rabbit, и все, наследуемые им от mammal.

add_frame(...), где:

а) аргументы, такие же как и у предиката frame/4,если вводится новый фрейм,

б) если добавляются или изменяются слоты в уже имеющемся фрейме, то первые три аргумента те же, а в последнем – могут стоять параметры только одного слота.

Важное замечание к пункту б):

Следует точно указывать второй и третий аргументы add_frame/4, так как в данном случае фрейм определяется по первым трем аргументам.

Примеры:

 ввод нового фрейма cat.

?- add(cat,[mammal],[],[painting,[],[gray],skin,[],[fluffy_fur]]).

 изменение слота age существующего фрейма gorilla

?- add(gorilla,[monkey],[mammal],[age,[],[4]]).

/****Удаление фрейма ****/

del_frame(Name, SlotName),

где Name – имя фрейма, .

SlotName – а) имя удаляемого слота, заключенное в скобки: [ ] (удаляется слот).

б) пустой список: [], если удаляется весь фрейм.

Пример:

?- del_frame(rabbit,[]). % удаление фрейма rabbit.

?- del_frame(monkey,[legs]) % удаление слота legs из фрейма monkey.

Создание базы

old:-

assertz(frame(mammal,[],[],[birth,[live],[],skin,[],[fur],

legs,[],[4]])),

assertz(frame(monkey,[mammal],[],[tail,[],[curly],

legs,[2],[]])),

assertz(frame(gorilla,[monkey],[mammal],[character,[],[harm],

age,[8],[]])),

assertz(frame(rabbit,[mammal],[],[ears,[],[long],

moves,[jump],[],tail,[short],[]])).

% new : Удаление из БД предикатов frame/4

new:-

abolish(frame/4).

% add_frame: Добавление нового фрейма в БД с проверкой наличия в базе

add_frame(Name,Val,Def,[SlotName|Rest]):-

not frame(Name,Val,Def,_),

assertz(frame(Name,Val,Def,[SlotName|Rest])),

!.

% add_frame : Добавление нового слота в фрейм

% или изменение старого

add_frame(Name,Val,Def,[SlotName|Rest]):-

frame(Name,Val,Def,Slots),

add_item(SlotName,[],Sl),

ifthen(

member(SlotName,Slots),

del_frame(Name,Sl)

),

add([SlotName|Rest],Slots,SLnew),

retract(frame(Name,_,_,_)),

assertz(frame(Name,Val,Def,SLnew)).

% del_frame : Удаление фрейма из БД

% a) - Такого фрейма в БД нет

del_frame(Name, Slot):-

not frame(Name,_,_,_),

write('Такого фрейма в системе нет'),

!.

% б) - второй аргумент - [] -пустой список =>

% => удаляется весь фрейм

del_frame(Name, Slot):-

Slot == [],

retract(frame(Name,_,_,_)),!.

% в) - Второй аргумент(имя слота) не пуст =>

% => удаляется слот

del_frame(Name, Slot):-

frame(Name,Val,Def,SlotList),

Sl =.. Slot,

del3( [Sl,_,_], SlotList, Lnew),

retract(frame(Name,_,_,_)),

assertz(frame(Name,Val,Def,Lnew)).

% get_frame : Получить значение из фрейма

% a) имя фрейма – переменная

get_frame(Frame,Slot,Value):-

abolish(req/3),

var(Frame),

frame(Frame,_,_,_),

help_frame(Frame,Slot,Value),

req(_,Slot,Value).

% б) имя фрейма – терм

%

get_frame(Frame,Slot,Value):-

help_frame(Frame,Slot,Value),

req(_,Slot,Value).

/*** help_frame : вспомогательный предикат; реализован***/

% отдельно лишь в силу технической

% особенности Пролога

help_frame(Frame,Slot,Value):-

abolish(req/3),

nonvar(Frame),

frame(Frame,_,_,DataList),

prep_req(Frame,DataList),

legacy(Frame).

/************************************/

% legacy : реализация алгоритма наследования.

% legacy(имя_фpейма) возвращает имя фpейма-pодителя

legacy(no).

legacy(Frame):-

prep_frame(Frame,Value),

ifthenelse(

Value \== no,

body(Value),

!

).

% prep_frame: вспомогательный предикат, возвращает имя

% фpейма-pодителя

% prep_frame(+имя_фpейма, -имя_фpейма-pодителя)

%

prep_frame(Frame,Value):-

frame(Frame,Val,Def,_),

ifthenelse(

Val \== [],

Value =.. Val,

ifthenelse(

Def \== [],

Value =.. Def,

Value =.. [no]

)

).

% body : вспомогательный предикат

body(Value):-

frame(Value,_,_,DataList),

prep_req(Value,DataList),

legacy(Value).

% prep_req : Подготовка записей для фрейма:

% вспом.пpедикат, результат действия -

% запись в БД предикатов req/3.

% req(имя_фpейма, имя_слота, значение),

prep_req(F,[]).

prep_req(F,[S1,V1,D1|Rest]):-

ifthen(

not req(_,S1,_),

ifthenelse(

V1 \== [],

assertz(req(F,S1,V1)),

ifthen(

D1 \== [],

assertz(req(F,S1,D1))

)

)

),

prep_req(F,Rest).

% member : проверка принадлежности элемента списку:

% member(элемент, список).

member(X,[X|L]):-!.

member(X,[Y|L]):-member(X,L).

% Конкатенация списков :

% add : add(список1, список2, список1+список2)

add([],L,L).

add([X|L1],L2,[X|L3]):-

add(L1,L2,L3).

% Добавление элемента к списку :

% add_item : add_item(элемент,список,элемент+список)

add_item(X,L,[X|L]).

% del3 : Удаление трехэлементного подсписка из списка

% del3(+тpехэл.подсписок, +исх.список, -получ.список)

%

del3([X1,X2,X3], [X1,X2,X3|Rest], Rest ).

del3( [X1,X2,X3], [Y1,Y2,Y3|Rest], [Y1,Y2,Y3|Rest1] ):-

del3( [X1,X2,X3], Rest, Rest1).

ЗАДАНИЕ. Используя приведенное выше описание написать программу фреймового представления знаний о разных отрядах животных. Создать базу знаний. Предусмотреть возможность удаления фрейма, его модификацию, присвоения значений слотам.

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

Экспертная система, основанная на фреймовом представлении знаний

Цель – знакомство с фреймовой системой представления знаний.

Рассмотрим фрейм-ориентированную систему, которая играет роль советчика в финансовых инвестициях. Этот советчик «Advisor» в состоянии «подсказать».

  1. Будет ли расти, убывать или останется неизменной процентная ставка прибыли в течение 12-месячного периода.

  2. Будет ли увеличиваться или уменьшаться годовой доход за тот же период.

  3. Будут ли расходы больше или меньше бюджета.

  4. Насколько велик риск пользователя.

Фрейм содержит слоты interest, revenues, expenses, risk, term и investment (рис. 3.).

Результаты обработки информации передаются в помеченные звездочкой слоты. Остальные слоты заполняются пользователем.

Характеристики

Список файлов лабораторной работы

Лабораторные работы по Прологу (задания уточнять у преподавателя)
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6374
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее