Автор работы: Пользователь скрыл имя, 07 Марта 2013 в 12:03, контрольная работа
Предметную область разрабатываемой базы знаний будем описывать с помощью формальной логической модели. Традиционно в представлении знаний выделяют формальные логические модели, основанные на классическом исчислении предикатов I-го порядка, когда предметная область или задача описывается в виде набора аксиом. Исчисления предикатов I-го порядка в промышленных экспертных системах практически не используется. Эта логическая модель применима в основном в исследовательских системах, так как предъявляются не очень высокие требования к предметной области.
Задание 3
1. Описание предметной области 4
2. Описание предметной области в определениях логики предикатов первого порядка 5
2.1 Формулы, определяющие условия выполнения действий 6
2.2 Целевая формула. 10
3 Формулы, определяющие начальные знания агента о предметной области. 10
4. Текст программы на языке Prolog. 11
5. Результаты работы программы 17
Список используемой литературы 18
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Volkswagen Tiguan", 819908):-positive("Иномарка"),
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
negative("До 700000 руб"),
negative("Седан"),
is("Полный привод").
auto("Volkswagen Scirocco", 1100000):-positive("Иномарка")
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
negative("До 700000 руб"),
negative("Седан"),
auto("Renault Scenic II", 320000):-positive("Иномарка"),
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("VW Golf 5 AVT", 580000):- positive("Иномарка"),
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Volkswagen Tiguan AVT", 900000):-positive("Иномарка"),
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
negative("До 700000 руб"),
negative("Седан"),
auto("Volkswagen Scirocco AVT",
1180000):-positive("Иномарка")
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
negative("До 700000 руб"),
negative("Седан"),
auto("Renault Scenic II AVT", 400000):-positive("Иномарка"),
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Toyota corolla", 350000):-positive("Иномарка"),
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Nissan Skyline", 1000000):-positive("Иномарка")
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
negative("До 700000 руб"),
positive("Седан"),
auto("Toyota Supra", 500000):-positive("Иномарка"),
negative("АКП"),
positive("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Toyota Supra AVT", 580000):-positive("Иномарка"),
positive("АКП"),
positive("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
is("Задний привод").
auto("Subaru Impreza", 580000):-positive("Иномарка"),
positive("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
positive("До 700000 руб"),
negative("Седан"),
auto("Subaru Impreza Sedan", 580000):-positive("Иномарка"),
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
positive("До 700000 руб"),
positive("Седан"),
auto("Opel Astra", 600000):-positive("Иномарка"),
negative("АКП"),positive("
positive("Руль слева"),
negative("Седан"),is("Передний привод").
auto("Ford Focus", 532000):-positive("Иномарка"),
positive("АКП"),positive("
positive("Седан"),positive("
is("Передний привод").
auto("Nissan Almera", 366000):-positive("Иномарка"),
auto("Lada Kalina", 270000):-negative("Иномарка"),
negative("АКП"),positive("
negative("Седан"),is("Передний привод").
auto("ВАЗ 2115", 255000 ):-negative("Иномарка"),
negative("АКП"),negative("
positive("Седан"),is("Передний привод").
auto("Volga Siber", 640000):-negative("Иномарка"),
negative("До 700000 руб"),positive("Руль слева"),
positive("АКП"),positive("
positive("Седан"),is("
auto("BMW X6", 4420000):-positive("Иномарка")
positive("Руль слева"),
negative("Седан"), positive("Двигатель бензиновый"),
positive("Мощнее 300 лс"),negative("До 700000 руб"),
positive("АКП"),
is("Задний привод").
auto("ГАЗ 13", 800000 ):-negative("Иномарка"),
negative("До 700000 руб"),
positive("АКП"),
positive("Седан"),positive("
positive("С пробегом"),positive("Двигатель дизельный"),
is("Задний привод").
auto("Audi A4", 1110000):-positive("Иномарка")
positive("Руль слева"),
negative("Седан"),
negative("Мощнее 300 лс"),
positive("АКП"),
positive("Двигатель бензиновый"),
is("Полный привод").
auto("Toyota Crown", 520000):-positive("Иномарка"),
negative("Руль слева"),
positive("Седан"),
negative("Мощнее 300 лс"),
positive("Двигатель
negative("АКП"),
is("Полный привод").
auto("Chevrolet Niva AVT", 484000):- negative("Иномарка"),
positive("АКП"),
positive("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
negative("Руль слева"),
negative("Седан"),
is("Полный привод").
auto("Chevrolet Niva", 444000):- negative("Иномарка"),
negative("АКП"),
negative("Мощнее 300 лс"),
positive("Двигатель бензиновый"),
positive("Руль слева"),
negative("Седан"),
is("Полный привод").
auto("Нету вариантов",0).
is("Передний привод"):-positive("Подушка безопасности"),!;
positive("До 700000 руб").
is("Задний привод"):-positive("Подушка безопасности"),!;
positive("Задний привод").
is("Полный привод"):-positive("Подушка безопасности"),!;
positive("Полный привод").
positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X,'y'). /*...!,fail - не пытаться согласовать данное утверждение*/
negative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X,'n').
ask(X,R):-write(X," ?
: "),readchar(Reply),write(
remember(X,Reply),R=Reply.
xpositive(X):-yes(X);maybe(X).
xnegative(X):-no(X);maybe(X).
remember(X,'y'):-asserta(yes(
remember(X,'n'):-assertz(no(X)
remember(X,'q'):-asserta(
delete_all:-retract(yes(_)),
delete_all:-retract(no(_)),
delete_all:-retract(maybe(_)),
delete_all.
run:-delete_all,
repeat,
write("На вопросы отвечать(y-Да, n-Нет, q-Не знаю).\n"),
make_selection(X, A, CHOOSE),
continue_selection(CHOOSE, X, A),
write("Завершить работу программы (y/n): "),readchar(Z),write(Z),nl,
Z='y'.
make_selection(X, A, CHOOSE):- auto(X,A), write("Ваш выбор: ",X," цена: ",A,"\n"),
write("\nУстраивает ли вас цена? \n1-да, данная модель меня устраивает\n2-нет, покажите модель по дешевле\n3-нет, покажите модель по дороже\n"),
readchar(CHOOSE).
continue_selection('1', X, A) :- !, write("Ваш выбор: ",X," цена: ",A,"\n"), !.
continue_selection('2', _, A) :- !, auto(Y, Z), Z < A, make_selection(Y, Z, CHOOSE), continue_selection(CHOOSE, Y, Z).
continue_selection('3', _, A) :- !, auto(Y, Z), Z > A, make_selection(Y, Z, CHOOSE), continue_selection(CHOOSE, Y, Z).
goal
makewindow(1,7,7, "Экспертная система: Автомобиль ",0,0,25,80),
write(" Выбор автомобиля."),nl,
write("-----------------------
run.
Рисунок 1. Результат работы программы
Как видно из рисунков программа работает корректно.