Текст программы на языке Prolog
Контрольная работа, 07 Марта 2013, автор: пользователь скрыл имя
Описание работы
Предметную область разрабатываемой базы знаний будем описывать с помощью формальной логической модели. Традиционно в представлении знаний выделяют формальные логические модели, основанные на классическом исчислении предикатов I-го порядка, когда предметная область или задача описывается в виде набора аксиом. Исчисления предикатов I-го порядка в промышленных экспертных системах практически не используется. Эта логическая модель применима в основном в исследовательских системах, так как предъявляются не очень высокие требования к предметной области.
Содержание работы
Задание 3
1. Описание предметной области 4
2. Описание предметной области в определениях логики предикатов первого порядка 5
2.1 Формулы, определяющие условия выполнения действий 6
2.2 Целевая формула. 10
3 Формулы, определяющие начальные знания агента о предметной области. 10
4. Текст программы на языке Prolog. 11
5. Результаты работы программы 17
Список используемой литературы 18
Файлы: 1 файл
Отчет.doc
— 336.50 Кб (Скачать файл)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.
5. Результаты работы программы
Рисунок 1. Результат работы программы
Как видно из рисунков программа работает корректно.
Список используемой литературы
- Конспект лекций по дисциплине «Интеллектуальные подсистемы САПР», к.т.н., проф. Ямникова О.А., 2011г.;
- Методические указания «Практические занятия» по курсу «Интеллектуальные подсистемы САПР», к.т.н., доц. Троицкий Д.И., 2011 г.
- Эндрю А. Искусственный интеллект – М.: Мир, 2005.