Разработка элементов интеллектуальных систем с использованием логической модели представления знаний
Разработка элементов интеллектуальных систем с использованием логической модели представления знаний
1. Задание 1
Цель - Знакомство с основами логического программирования (Prolog).
Используя предикаты parent (symbol, symbol), man(symbol), woman(symbol), married (symbol, symbol), записать факты, описывающие Вашу семью. Записать 8 правил вывода для любых родственных отношений в Вашей семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т. д.).
Описание родственных связей:
Исходный текст:
Predicates
Nondeterm parent (symbol, symbol)%roditel, rebenok
Nondeterm man (symbol)
Nondeterm woman (symbol)
Nondeterm married (symbol, symbol) % man, woman
Nondeterm mother (symbol, symbol) %woman, rebenok
Nondeterm father (symbol, symbol)%man, rebenok
Nondeterm daughter (symbol)
Nondeterm son (symbol)
Nondeterm sister (symbol, symbol) %sestra, object
Nondeterm brother (symbol, symbol) %brat, object
Nondeterm grandmother (symbol, symbol)%babushka, vnuki
Nondeterm grandfather (symbol, symbol)%dedushka, vnuki
Nondeterm doublesister (symbol, symbol)%sister, komu
Nondeterm doublebrother (symbol, symbol)%brother, komu
Nondeterm Wel
Nondeterm Menu(integer)
Clauses
Man ("Gluhov Alexandr").
Man ("Gluhov Vladislav").
Man ("Gordeev Aleksandr").
Man ("Karpenok Jurii").
Man ("Shaiahmetov Andrei").
Man ("Gluhov Viktor").
Man ("Gluhov Vladimir").
Man ("Gluhov Maksim").
Woman ("Maksutova Nailya").
Woman ("Gluhova Marina").
Woman ("Gordeeva Valentina").
Woman ("Karpenok Natalia").
Woman ("Shaiahmetova Alesia").
Woman ("Gluhova Galina").
Woman ("Gluhova Natalia").
Woman ("Gluhova Dana").
Married ("Gluhov Alexandr", "Maksutova Nailya").
Married ("Gluhov Vladislav", "Gluhova Marina").
Married ("Gordeev Aleksandr", "Gordeeva Valentina").
Married ("Karpenok Jurii", "Karpenok Natalia").
Married ("Shaiahmetov Andrei", "Shaiahmetova Alesia").
Married ("Gluhov Viktor", "Gluhova Galina").
Married ("Gluhov Vladimir", "Gluhova Natalia").
Parent ("Gluhov Vladislav", "Gluhov Alexandr").
Parent ("Gordeev Aleksandr", "Gluhova Marina").
Parent ("Gordeev Aleksandr", "Karpenok Natalia").
Parent ("Karpenok Jurii", "Shaiahmetova Alesia").
Parent ("Gluhov Viktor", "Gluhov Vladislav").
Parent ("Gluhov Viktor", "Gluhov Vladimir").
Parent ("Gluhov Vladimir", "Gluhov Maksim").
Parent ("Gluhov Vladimir", "Gluhova Dana").
Parent ("Gluhova Marina", "Gluhov Alexandr").
Parent ("Gordeeva Valentina", "Gluhova Marina").
Parent ("Gordeeva Valentina", "Karpenok Natalia").
Parent ("Karpenok Natalia", "Shaiahmetova Alesia").
Parent ("Gluhova Galina", "Gluhov Vladislav").
Parent ("Gluhova Galina", "Gluhov Vladimir").
Parent ("Gluhova Natalia", "Gluhov Maksim").
Parent ("Gluhova Natalia", "Gluhova Dana").
Mother (X, Y): - woman(X), parent (X, Y), write ("Mother:", X," Child:", Y), nl, fail.
Mother ("_", "_"): - nl, write ("all mothers"), readln(_), nl, Wel.
%mother d/b zhenshinoi i bit parent
Father (X, Y): - man(X), parent (X, Y), write ("Father:", X," Child:", Y), nl, fail.
Father ("_", "_"): - nl, write ("all fathers"), readln(_), nl, Wel.
%d/b muzhchinoi i bit parent
Daughter (X): - woman(X), write ("Daughter:", X), nl, fail.
Daughter ("_"): - nl, write ("all daughters"), readln(_), nl, Wel.
Son (X): - man(X), write ("Son:", X), nl, fail.
Son ("_"): - nl, write ("all sons"), readln(_), nl, Wel.
Sister (X, Y): - woman(X), parent (Z, X), parent (Z, Y), X<>Y, woman(Z), write ("Sister:", X," To:", Y), nl, fail.
Sister ("_", "_"): - nl, write ("all sisters"), readln(_), nl, Wel.
%sestra d/b zhenshinoi, imet obshego roditelia s objectom, ne bit sestroi samoi sebe.
%Ishem po mame, chtob ne bilo povtorov
Brother (X, Y): - man(X), parent (Z, X), parent (Z, Y), X<>Y, woman(Z), write ("Brother:", X," To:", Y), nl, fail.
Brother ("_", "_"): - nl, write ("all brothers"), readln(_), nl, Wel.
%d/b muzhchinoi, imet obshego roditelia s objectom, ne bit bratom samomu sebe.
%Ishem po mame, chtob ne bilo povtorov
Grandmother (X, Y): - woman(X), parent (X, Z), parent (Z, Y), write ("Granny:", X," Vnuk(-chka):", Y), nl, fail.
Grandmother ("_", "_"): - nl, write ("all grandmothers"), readln(_), nl, Wel.
%d/b zhenshinoi, i bit parentom parenta vnuka
Grandfather (X, Y): - man(X), parent (X, Z), parent (Z, Y), write ("Grandpa:", X," Vnuk(-chka):", Y), nl, fail.
Grandfather ("_", "_"): - nl, write ("all grandfathers"), readln(_), nl, Wel.
%d/b muzhchinoi, i bit parentom parenta vnuka
Doublesister (X, Y): - woman(X), parent (Z1, X), parent (Z2, Y), woman(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
Write ("DoubleSister:", X," To:", Y), nl, fail;
Woman(X), parent (Z1, X), parent (Z2, Y), man(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
Write ("DoubleSister:", X," To:", Y), nl, fail.
Doublesister ("_", "_"): - nl, write ("all doublesisters"), readln(_), nl, Wel.
%d/b zhenshinoi, imet raznih roditelei s objectom, kotorie yavliautsa bratom ili sestroi
Doublebrother (X, Y): - man(X), parent (Z1, X), parent (Z2, Y), woman(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
Write ("DoubleBrother:", X," To:", Y), nl, fail;
Man(X), parent (Z1, X), parent (Z2, Y), man(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
Write ("DoubleBrother:", X," To:", Y), nl, fail.
Doublebrother ("_", "_"): - nl, write ("all doublebrothers"), readln(_), nl, Wel.
%d/b muzhchinoi, imet raznih roditelei s objectom, kotorie yavliautsa bratom ili sestroi
Wel: - write ("This is my family"), nl, readchar(_),
Write ("menu:"), nl,
Write ("1 - Mothers"), nl,
Write ("2 - Fathers"), nl,
Write ("3 - Daughters"), nl,
Write ("4 - Sons"), nl,
Write ("5 - Sisters"), nl,
Write ("6 - Brothers"), nl,
Write ("7 - Grandmothers"), nl,
Write ("8 - Grandfathers"), nl,
Write ("9 - Doublesisters"), nl,
Write ("10 - Doublebrothers"), nl,
Write ("11 - Vihod"), nl,
Write ("Viberite punkt menu:"),
Readint(M), Menu(M).
%Вводный экран с описанием меню.
Menu(M): - M=1, write ("Mothers:"), nl, mother(_,_).
Menu(M): - M=2, write ("Fathers:"), nl, father(_,_).
Menu(M): - M=3, write ("Daughters:"), nl, daughter(_).
Menu(M): - M=4, write ("Sons:"), nl, son(_).
Menu(M): - M=5, write ("Sisters:"), nl, sister(_,_).
Menu(M): - M=6, write ("Brothers:"), nl, brother(_,_).
Menu(M): - M=7, write ("Grandmothers:"), nl, grandmother(_,_).
Menu(M): - M=8, write ("Grandfathers:"), nl, grandfather(_,_).
Menu(M): - M=9, write ("Doublesisters:"), nl, doublesister(_,_).
Menu(M): - M=10, write ("Doublebrothers:"), nl, doublebrother(_,_).
Menu(M): - M=11, write ("Goodbye!!!"), exit.
Menu(M): - M>11, write ("Mozhet vi poprobuete eshe razok?"), readchar(_), nl, Wel.
%Менюшка, отвечает на любые числа, зацикливает. Выход черех 11.
Goal
Wel.
В данном задании я ознакомился с основами программирования на Prolog (Visual Prolog 5.2), а также описал свою семью с помощью правил и предикатов.
2. Задание 2
Цель - Поиск с возвратом и рекурсия.
Подсчитать, сколько раз встречается некоторая буква в строке. Строка и буква должны вводиться с клавиатуры. Для разделения строки на символы использовать стандартный предикат frontchar (String, Char, StringRest), позволяющий разделять строку String на первый символ Char и остаток строки StringRest.
Исходный текст:
Predicates
Nondeterm find (String, Char, String)
Clauses
Find (X, Y, Z): - frontchar (X, A, B), A=Y, frontchar (C, A, Z), find (B, Y, C);
% X-входная строка, Y-искомый символ, Z-результат. A-1-я буква строки X, B-остальное
% 1-я буква сравнивается с искомой. Если Тру => в C записывается A+Z, т. е. искомая буква
% добавляется к остальным. Далее B становится вх. строкой, Y остается, C-станет Z.
Frontchar (X, A, B), A<>Y, find (B, Y, Z);
% то же, что в предыдущем, но если не Тру (символы разные), то переходим к следующему
% символу - B становится вх. строкой, Y остается, Z остается.
X="", str_len (Z, Kolvo), write ("Kolichestvo simvolovov '", Y, "' =", Kolvo), nl.
% Когда строка закончится - считается кол-во букв в Z (т. е. кол-во совпавших символов),
% сохраняется в Kolvo и выводится на экран.
Goal
Write ("Enter string"), nl, %запрос строки
Readln(St), %ввод строки
Write ("Enter letter"), nl, %запрос буквы
Readln(Ch), %ввод буквы
Frontchar (Ch, Char,_), %переход из типа String в Char
Find (St, Char, ""). %выполнение программы
3. Задание 3
Написать программу, реализующую авиасправочник. В справочнике содержится следующая информация о каждом рейсе: номер рейса, пункт назначения, цена билета. Реализовать вывод всей информации из справочника, поиск пункта назначения по номеру рейса. Реализовать поиск по пункту назначения с указанием максимально возможной цены билета (должны быть выведены все рейсы, цена билета на которые ниже указанного значения) Для удобства работы реализовать меню с соответствующими пунктами.
Исходный текст:
Domains
X=Integer
Predicates
Nondeterm Reis (Integer, String, Integer)
Nondeterm All
Nondeterm Find(Integer)
Nondeterm FindCost (String, Integer)
Nondeterm Menu(Integer)
Nondeterm Wel
Clauses
Reis (1001, "Sankt-Peterburg", 13000).
Reis (1021, "Sankt-Peterburg", 9700).
Reis (1045, "Sankt-Peterburg", 7000).
Reis (7054, "Moscow", 15500).
Reis (7069, "Moscow", 23000).
Reis (4587, "Moscow", 29300).
Reis (2065, "Brazilia", 45000).
Reis (4544, "Brazilia", 30000).
Reis (2065, "Brazilia", 9300).
Reis (6309, "Parizh", 25000).
Reis (6325, "Parizh", 22600).
Reis (3640, "New-York", 50000).
Reis (3490, "New-York", 38000).
Reis (2890, "Dominikana", 63000).
Reis (9834, "Dominikana", 53800).
Reis (5287, "Kuba", 45300).
Reis (5493, "Kuba", 29500).
Reis (2538, "Kanari", 52000).
Reis (1035, "London", 28000).
Reis (8432, "Berlin", 19000).
Reis (7830, "Dubai", 48000).
Reis (3590, "Samara", 6000).
Reis (4687, "Ispania", 32000).
Reis (4632, "Ispania", 25900).
Reis (2895, "Kabul", 16900).
Reis (4386, "GOA", 21000).
Reis (5892, "Stambul", 15000).
Reis (2837, "Perm", 5000).
Reis (4082, "Pskov", 7400).
Reis (6238, "Ostrov Ratmanova", 70000).
Reis (2970, "Karibskie ostrova", 57500).
Reis (2909, "Karibskie ostrova", 42300).
Reis (5693, "Krim", 9800).
Reis (3250, "Fidzhi", 52000).
All: - Reis (No, Dest, Cost), write ("No:", No,". Destination:",
Dest,". Cost:", Cost,"."), nl, fail. %фэйл для цикла
All: - readchar(_), nl, Wel. % Вывод всего списка
%для удачного завершения программы (для цикла)
Find(Number): - Reis (No, Dest,_), Number=No, write ("No:", No,". Destination:", Dest,"."), nl, fail.
Find(_): - nl, write ("Bolshe net dannih po dannomu zaprosu"),
Readchar(_), nl, Wel. %Вывод номера и назначения по введенному номеру
FindCost (Destination, CostMax): - Reis (No, Dest, Cost), Destination=Dest, Cost<=CostMax,
Write ("No:", No,". Cost:", Cost,". Destination:", Dest,"."), nl, fail.
FindCost(_,_): - nl, write ("Bolshe net dannih po dannomu zaprosu"),
Readchar(_), nl, Wel. %Вывод номера цены и назначения по введенному назначению с указанием макс цены
Menu(X): - X=1, All, fail.
Menu(X): - X=2, write ("Vvedite No reisa:"), readint(Number), Find(Number), fail.
Menu(X): - X=3, write ("Vvedite Punkt Naznacheniia:"), nl, readln(Destination),
Write ("Vvedite maximalnuiu summu:"), nl, readint(CostMax), FindCost (Destination, CostMax), fail.
Menu(X): - X=4, write ("Goodbye!!!"), exit.
Menu(X): - X>4, write ("Ne verno, poprobuite eshe raz!"), readchar(_), nl, Wel.
%Менюшка, отвечает на любые числа, зацикливает. Выход черех 4.
Wel: - write ("Dobro Pozhalovat v aviaspravochnik"), nl, readchar(_),
Write ("menu:"), nl,
Write ("1 - Vivod vsei informacii"), nl,
Write ("2 - Poisk po nomeru reisa"), nl,
Write ("3 - Poisk s maximalnoi summoi"), nl,
Write ("4 - Vihod"), nl,
Write ("Viberite punkt menu:"),
Readint(X), Menu(X).
%Вводный экран с описанием меню.
Goal
Wel.
В данном задании я познакомился с поиском с возвратом и рекурсией. В первом задании я использовал команду frontchar (string, char, string) для подсчета количества заданных букв, рекурсия организовалась с помощью рекурсии, т. е. процедура вызывала сама себя. Во второй задаче для поддержки поиска с возвратом я использовал предикат fail - программа после поиска возвращалась в меню.
4. Задание 4
Цель - решение логических задач на соответствие.
Три друга разной национальности на соревнованиях заняли 1, 2, 3 места. Зовут друзей по-разному и занимаются они разными видами спорта. Майкл предпочитает баскетбол и играет лучше американца. Англичанин Саймон играет лучше теннисиста. Игрок в крикет занял 1-е место. Кто является австралийцем? Какое место занял Сигурд?
Исходный текст:
Domains
Man=m (name, nationality, sport)
Men=man*
Name, nationality, sport=string
A=reference man*
B=reference man*
C=reference man*
Predicates
Name (man, name)
Nationality (man, nationality)
Sport (man, sport)
First (men, man)
Nondeterm better (man, man, men)
Nondeterm friend (man, men)
Nondeterm reshenie
Clauses
Better (A, B, [A, B,_]).
Better (B, C, [_, B, C]).
Better (A, C, [A,_, C]).
%better (A,_, [_,_,_]).
%better (X,_,): - better (X,_, Y).
Name (m(N,_,_), N).
Nationality (m(_, Nt,_), Nt).
Sport (m(_,_, S), S).
First([X|_], X).
Reshenie:-
Better (X1k1, X2k1, Sportsmen), name (X1k1, "Michael"), sport (X1k1, "Basketball"), nationality (X2k1, "American"),
Better (X1k2, X2k2, Sportsmen), name (X1k2, "Saimon"), nationality (X1k2, "English"), sport (X2k2, "Tennis"),
First (Sportsmen, X1k3), sport (X1k3, "Cricket"),
Friend (X1k4, Sportsmen), name (X1k4, "Sigurd"),
Friend (X1k5, Sportsmen), nationality (X1k5, "Australian"),
Sportsmen=[m (N1, Nt1, S1), m (N2, Nt2, S2), m (N3, Nt3, S3)],
Write ("1-st place is", N1,". He is", Nt1,". His sport is:", S1), nl,
Write ("2-nd place is", N2,". He is", Nt2,". His sport is:", S2), nl,
Write ("3-rd place is", N3,". He is", Nt3,". His sport is:", S3), nl.
Friend (X, [X|_]).
Friend (X, [_|Y]): - friend (X, Y).
Goal
Reshenie.
Ответ
1-е место |
Саймон |
Англичанин |
Крикет |
2-е место |
Майкл |
Австралиец |
Баскетбол |
3-е место |
Сигурд |
Американец |
Теннис |
В данной задаче я научился решать логические задачи на соответствие (задачи Эйнштейна). После ввода всех известных условий и соответствий, программа производит анализ и получает недостающие соответствия - результат.
5. Задание 5
Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т. п. В качестве примера можно использовать следующую программу на естественном языке
Предметная область: Выбор и покупка сноуборда.
Исходный текст:
Database
Xpositive(symbol)
Xnegative(symbol)
Sb(integer)
Predicates
Nondeterm do_expert_job
Nondeterm do_consulting
Ask(symbol)
Koordinat(symbol)
Torg(symbol)
Dostavka(symbol)
Money(integer)
Sdacha(symbol)
Check(string)
Nondeterm snowboard(symbol)
Type(symbol)
Rost(symbol)
Okras(symbol)
Situation(symbol)
%it_is(symbol)
Positive(symbol)
Negative(symbol)
Remember (symbol, symbol)
Clear_facts
Goal
Do_expert_job.
Clauses
/* Систесма пользовательского интерфейса */
Do_expert_job:-
Nl, write(" * * * * * * * * * * * * * * * * * * * * *"),
Nl, write (" Добро Пожаловать!"), nl, nl,
Nl, write (" Экспертная Система"), nl, nl,
Nl, write (" Покупка Сноуборда"),
Nl, write (" Выполнил Глухов Александр =)"),
Nl, write (" Из АСОИ - 538"),
Nl, write(" * * * * * * * * * * * * * * * * * * * * * *"),
Readchar(_),
Nl, nl, do_consulting, nl, write ("Конец."), readchar(_), nl.
Do_consulting: - koordinat(X1), situation(X1), readchar(_),
Nl, X1= "Zashel",
Torg(X2), situation(X2), readchar(_),
Nl, X2= "Torguet",
Dostavka(X3), situation(X3), readchar(_),
Nl, X3= "Dostavka est",
Snowboard(X4), situation(X4), readchar(_),
Nl, X4<> "Net",
Write (": Сколько он стоит?"), nl, readint(A),
Write (": Сколько у вас денег?"), nl, readint(B), C=B-A,
Asserta (sb(C)), money(C), readchar(_), nl,
Sdacha(X5), situation(X5), readchar(_),
Nl, X5<> "Sdachi net",
Write ("Вот и отлично"), readchar(_), nl,
Write ("Покупатель купил сноуборд '", X4, "' за", A," рублей и ушел!"),
Readchar(_);
Write ("Покупатель ушел из магазина ничего не купив"), readchar(_),!.
Do_consulting: - nl, write ("Sorry!"),
Clear_facts.
Ask(X): - write (":", X, "? "), readln(Reply), check(Reply),
Remember (X, Reply).
/* Механизм вывода */
Positive(X): - xpositive(X),!.
Positive(X): - not (negative(X)),!, ask(X).
Negative(X): - xnegative(X),!.
Remember (X, да): - asserta (xpositive(X)).
Remember (X, нет): - asserta (xnegative(X)), fail.
Clear_facts: - retract (xpositive(_)), fail.
Clear_facts: - retract (xnegative(_)), fail.
/* Продукционные правила */
% Зашел в магазин или нет
Koordinat ("Zashel"):-
Positive ("Покупатель зашел в магазин"),!.
Koordinat ("Ne zashel"):-
Negative ("Покупатель зашел в магазин"),!.
%Торгует ли сноубордами
Torg ("Torguet"):-
Positive ("Сноуборды есть в продаже"),
Koordinat ("Zashel"),!.
Torg ("Ne torguet"):-
Negative ("Сноуборды есть в продаже"),
Koordinat ("Zashel"),!.
%Есть ли доставка
Dostavka ("Dostavka est"):-
Positive ("Имеется доставка"),
Torg ("Torguet"),!.
Dostavka ("Dostavki net"):-
Negative ("Имеется доставка"),
Torg ("Torguet"),!.
Money(C): - C>0, write ("Ваша сдача:", C),!;
C=0, write ("Спасибо, что без сдачи"),!;
C<0, write ("К сожалению, у вас недостаточно денег"),!.
Sdacha ("Sdacha ne nuzhna"):-
Retract (sb(C)), C=0,!.
Sdacha ("Sdacha est"):-
Positive ("У продавца есть сдача"),!.
Sdacha ("Sdachi net"):-
Negative ("У продавца нет сдачи"),!.
Check(R): - R= "АлександрЧемпион", nl, write ("АлександрЛучший"), readchar(_), nl,!.
Check(R): - R= "да",!.
Check(R): - R= "нет",!.
%Описание сноубордов
%Фристайловые
Snowboard (" FreeStyleProS"):-
Type ("FreeStyle"),
Rost ("S"),
Okras ("Graf"),!.
Snowboard (" FreeStyleProM"):-
Type ("FreeStyle"),
Rost ("M"),
Okras ("Graf"),!.
Snowboard (" FreeStyleProL"):-
Type ("FreeStyle"),
Rost ("L"),
Okras ("Graf"),!.
Snowboard (" FreeStyleHighJumpS"):-
Type ("FreeStyle"),
Rost ("S"),
Okras ("Ris"),!.
Snowboard (" FreeStyleHighJumpL"):-
Type ("FreeStyle"),
Rost ("L"),
Okras ("Ris"),!.
Snowboard (" FreeStyleUpS"):-
Type ("FreeStyle"),
Rost ("S"),
Okras ("Ton"),!.
Snowboard (" FreeStyleUpM"):-
Type ("FreeStyle"),
Rost ("M"),
Okras ("Ton"),!.
%Фрирайдовые
Snowboard (" SnowProXtremeS"):-
Type ("FreeRide"),
Rost ("S"),
Okras ("Graf"),!.
Snowboard (" SnowProXtremeM"):-
Type ("FreeRide"),
Rost ("M"),
Okras ("Graf"),!.
Snowboard (" SnowProXtremeL"):-
Type ("FreeRide"),
Rost ("L"),
Okras ("Graf"),!.
Snowboard (" FreeRideMountainS"):-
Type ("FreeRide"),
Rost ("S"),
Okras ("Ris"),!.
Snowboard (" FreeRideMountainM"):-
Type ("FreeRide"),
Rost ("M"),
Okras ("Ris"),!.
Snowboard (" FreeFlyM"):-
Type ("FreeRide"),
Rost ("M"),
Okras ("Ton"),!.
Snowboard (" FreeFlyL"):-
Type ("FreeRide"),
Rost ("L"),
Okras ("Ton"),!.
%Горные
Snowboard (" SpeedWayXtreemS"):-
Type ("Alpin"),
Rost ("S"),
Okras ("Graf"),!.
Snowboard (" SpeedWayXtreemM"):-
Type ("Alpin"),
Rost ("M"),
Okras ("Graf"),!.
Snowboard (" SpeedWayXtreemL"):-
Type ("Alpin"),
Rost ("L"),
Okras ("Graf"),!.
Snowboard (" IceMountainKingM"):-
Type ("Alpin"),
Rost ("M"),
Okras ("Ris"),!.
Snowboard (" IceMountainKingL"):-
Type ("Alpin"),
Rost ("L"),
Okras ("Ris"),!.
Snowboard (" FastEverestS"):-
Type ("Alpin"),
Rost ("S"),
Okras ("Ton"),!.
Snowboard (" FastEverestL"):-
Type ("Alpin"),
Rost ("L"),
Okras ("Ton"),!.
Nowboard ("Net").
Type ("FreeStyle"):-
Positive ("Тип доски - Free Style (для трюков)"),!.
Type ("FreeRide"):-
Positive ("Тип доски - Free Ride (универсальные)"),!.
Type ("Alpin"):-
Positive ("Тип доски - Alpin (высокогорные)"),!.
Rost ("S"):-
Positive ("ростовой диапазон 120 - 145 см."),!.
Rost ("M"):-
Positive ("ростовой диапазон 145 - 180 sm."),!.
Rost ("L"):-
Positive ("ростовой диапазон 180 - 210 sm."),!.
Okras ("Graf"):-
Positive ("окраска - граффити"),!.
Okras ("Ris"):-
Positive ("окраска - рисунок"),!.
Okras ("Ton"):-
Positive ("окраска - однотонный"),!.
Situation(X): - X= "Ne zashel", write ("Покупатель передумал"),!.
Situation(X): - X= "Zashel", write ("Покупатель внутри"),!.
Situation(X): - X= "Torguet", write ("В продаже имеются сноуборды"),!.
Situation(X): - X= "Ne torguet", write ("К сожалению, в продаже нет сноубордов"),!.
Situation(X): - X= "Dostavka est", write ("Магазин осуществляет доставку"),!.
Situation(X): - X= "Dostavki net", write ("Магазин не занимается доставкой"),!.
Situation(X): - frontchar (X, A,_), frontchar (B, A, ""), B="", write ("Покупатель выбрал сноуборд", X,"."),!.
Situation(X): - X= "Net", write ("Нет подходящего сноуборда по заданным параметрам"),!.
Situation(X): - X= "Sdacha est", write ("У продавца есть сдача"),!.
Situation(X): - X= "Sdacha ne nuzhna", write ("Покупатель дал без сдачи"),!.
Situation(X): - X= "Sdachi net", write ("У продавца нет сдачи"),!.
/* Конец*/
В данной задаче я построил экспертную систему выбора и покупки сноубордов. Система задает вопросы и принимает ответы "да" и "нет". На основании полученных ответов она предлагает тот или иной вариант развития событий.
Prolog предикат программа авиасправочник
Похожие статьи
-
Постановка задачи, выбор предметной области Предметная область: "Автомобиль". Создание автомобиля будет состоять из трех этапов: выбор кузова, выбор...
-
Собственные числа матрицы N - размерность матрицы; I - номер строки; J - номер столбца. Оценки собственных чисел матрицы Таблица 14. Оценки приоритетов...
-
Каждая СУБД имеет особенности в представлении структуры таблиц, связей, определении типов данных и т. д. которую необходимо учитывать при проектировании....
-
Формирование области многокритериального выбора вариантов Стоит задача о выборе марки автомобиля с их известными особенностями и характеристиками....
-
Постановка задачи нечеткого управления Была рассмотрена задача по прогнозированию износа (в микрометрах) тормозных дисков автомобилей. Входные данные:...
-
Разработка логической модели АИС - Проектирование автоматизированной информационной системы
Логическая модель данных является начальным прототипом будущей базы данных. Логическая модель строится в терминах информационных единиц, но без привязки...
-
F ( 0,"заключение : об1", [ 3, -1 ] ). "промежуточное заключение", ... "вопрос о свойствах", ... Список подкрепляющих фактов F ( 0, "об2", [ 1,2 ] ). F (...
-
Для написания АИС использовались следующие языки программирования, программные средства и библиотеки: - Язык программирования PHP 5.4; -...
-
Цель Работы - научиться использовать элемент управления ListBox а также основные методы класса СListBox. Использование возможности контроля правильности...
-
Поскольку клиентская часть представляет собой приложение на базе операционной системы Android, то для ее разработки был выбран рекомендуемый...
-
ИЕРАРХИЧЕСКАЯ МОДЕЛЬ ДАННЫХ ИМД основана на понятии деревьев, состоящих из вершин и ребер. Вершине дерева ставится в соответствие совокупности атрибутов...
-
Разработка методики обеспечения сбоеустойчивости ПЛИС Для обеспечения повышения сбоеустойчивости необходимо просто указать место файла EDIF в проекте и...
-
Производство. 1. Начальник отдела сбыта получает от клиента заказ на конкретный ассортимент ежедневно, проверяет наличие необходимое кол-во товара, если...
-
Разработка концептуальной модели АИС - Проектирование автоматизированной информационной системы
Любая деятельность компании отражается в документах, и, чтобы улучшить качество рабочих бизнес-процессов, необходимо улучшить документооборот, т. е....
-
Вывод - Разработка объектно-ориентированной модели информационной системы предприятия ЗАО "ХРОМТАН"
Технология автоматизации бизнес-процессов в применении к управлению предприятием связана с автоматизацией административного труда и направлена на...
-
MATLAB - высокоуровневая система программирования, позволяющая резко сократить затраты труда при проверке алгоритмов и проведении прикидочных расчетов....
-
Система водоснабжения как объект автоматизации Многочисленные потребители требуют воду: как различного качества, так и разное его количество. Количество...
-
Информационная система учета ГСМ базируется на техническом, программном, информационном и организационного обеспечения. Техническое обеспечение - это...
-
Разработка функциональной модели системы в нотации IDF0 В целом, функционально совокупную систему ООО "СЕРВИС ПАРТНЕР" можно разделить на два сегмента:...
-
Логический уровень описания базы данных (логическая модель) отражает логические связи между таблицами. Логическая модель базы данных "Прокат автомобилей"...
-
По заданному значению выбираем длину линии и удельное сопротивление линии. = 50 км; Марка провода ЛЭП: АС - 240 1.2 Расчет параметров модели...
-
Среди бурно развивающихся систем компьютерной математики СКМ, в первую очередь ориентированных на численные расчеты, особо выделяется матричная...
-
Проектирование реализации операций бизнес-процесса "Продажа товара покупателям" Номер операции на диаграмме Операция Необходимые разработки Специфика...
-
Закуп 1. Экономист рассчитывает потребность сырья на основании план производства и норм расхода сырья, составляя план потребностей, и передает план...
-
Продажа 1. Маркетолог изучает рынок выпускаемых кож конкурентными предприятиями по цене и качеству, анализирует статистику прейскурантов кож конкурентов...
-
Клиент -- заказчик, покупатель, магазин; Поставка товара - заключительный этап выполнения договора купли-продажи, на котором происходит возмездная...
-
Описание состава автоматизируемых бизнес-процессов Бизнес-процессы компании, подлежащие автоматизации, приведены в следующей таблице: Название...
-
Количество рабочих станций, всего 20 Количество ПК, работающих в сети 21 Характеристики компьютеров От amd phenom 1055t и выше Операционная система...
-
Закрытое акционерное общество "ХРОМТАН" - кожевенный завод, расположенный в городе Богородске Нижегородской области, РФ; имеет филиал в городе Нижний...
-
Технология как строго научное понятие означает определенный комплекс научных и инженерных знаний, воплощенный в способах, приемах труда, наборах...
-
Таблица 3.9 - Функции: логическая и физическая организация и элементы управления Функция Наименование элемента управления Элемент управления, за которым...
-
Для того чтобы оценить экономическую выгоду от внедрения АИС необходимо вычислить трудозатраты компании направленные непосредственно на реализацию...
-
В рамках выпускной квалификационной работы была разработана автоматизированная информационная система, предназначенная как для автоматического, так и для...
-
Алгоритм работы. В результате работы АИС генерируются три xml документа - два со структурой сравниваемых баз данных и один с результатами сравнения. В...
-
Проблема представления знаний в компьютерных системах - одна из основных проблем в области искусственного интеллекта. Решение этой проблемы позволит...
-
Система функционирует как распределенная трехзвенная клиент-сервер-СУБД программная архитектура. В среде серверной операционной системы Microsoft Windows...
-
Учебный процесс в ННГАСУ сопровождается значительной информационной базой, развитием компьютерного парка и внедрением в образовательный процесс...
-
- Подключение к исходной базе данных пользователей внешних информационных систем; - Отказ в доступе к желаемому ресурсу, если пользователем не пройдена...
-
Для проверки соответствия требованиям ТЗ, была поставлена задача разработки 3-D модели корпуса Kyocera KD-PB1D79 при помощи системы AutoCAD. В этой части...
-
Постановка задачи Основной целью дипломной работы является создание комплексной системы информационной безопасности предприятия на примере информационной...
Разработка элементов интеллектуальных систем с использованием логической модели представления знаний