Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспертная система по определению направления в ВУ 
:(
    Опции темы
Dmitrin161
Дата 4.6.2015, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



Здравствуйте. Необходимо написать экспертную систему на Visual Prolog 7, которая будет задавать вопросы пользователю и в результате выдавать направление, на которое он подходит больше всего.

Сейчас я сделал таким образом (вопросы и направления условные, если надо будет, скину нормальные вопросы и направления)

Код

implement main
    open core, console
 
class facts
fact: (integer, string).
class predicates
rule: (integer, string, string, integer*) nondeterm(o,i,o,o).
ask: (integer) determ.
recognition: (string).
discover: (integer*) nondeterm.
complete: (integer) determ.
 
clauses
rule(1, " ","Направление 1",[1,3,5]).
rule(2, " ","Направление 2",[2,6]).
rule(3, " ","Направление 3",[4,7,8,9]).
 
ask(X) :-fact(X,"y"),!.
ask(X) :-fact(X, "n"),!,fail.
ask(1) :-write("Вопрос 1"),!,complete(1).
ask(2) :-write("Вопрос 2"),!,complete(2).
ask(3) :-write("Вопрос 3"),!,complete(3).
ask(4) :-write("Вопрос 4"),!,complete(4).
ask(5) :-write("Вопрос 5"),!,complete(5).
ask(6) :-write("Вопрос 6"),!,complete(6).
ask(7) :-write("Вопрос 7"),!,complete(7).
ask(8) :-write("Вопрос 8"),!,complete(8).
ask(9) :-write("Вопрос 9"),!,complete(9).
 
recognition(X) :- rule(N,X,Y,Z), discover(Z),!,
write("Это более всего похоже на", X, Y, " (правило ", N,")"), nl, recognition(Y).
recognition(" "):- write("Это направление системе неизвестно!"), nl,!.
recognition(_).
discover([X|Y]):- ask(X), discover(Y).
discover([]).
 
complete(X) :-
write(" y/n"),nl, Y=readline(),((Y="y";Y="Y"), assert(fact(X, "y")),!; assert(fact(X, "n")),!,fail).
run():-init(),
recognition(" "),
_=readchar().
end implement main
goal
    mainExe::run(main::run).


Вроде как что-то выводит. При этом идет обрезание вопросов (если на первый вопрос ответить n, то 3 и 5 вопрос уже не задастся). 

Подскажите, пожалуйста, как можно изменить программу, чтобы была следующая последовательность:
1. Есть 3 направления в ВУЗе. Для каждого направления создать счетчик для ответов yes
2. Вывести 9 вопросов подряд и потребовать ответить yes/no
3. Если на вопрос будет ответ yes, то необходимо увеличить счетчик соответствующего направления на единицу
4. Проверить, какой из счетчиков больше всего, и вывести соответствующее ему направление в конце
PM MAIL   Вверх
Google
  Дата 23.5.2019, 13:47 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.