Создание экспертной системы продукционного типа для предметной области «Подбор кадров»

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Новосибирский Государственный Технический Университет

Кафедра экономической информатики

nstu

Расчетно-графическая работа

на тему:

«Создание экспертной системы продукционного типа для предметной области «Подбор кадров»»

по дисциплине: Интеллектуальные Информационные Системы

Факультет: Бизнеса

Группа: ФБИ-71

Студентки: Хуторненко В.А.

Преподаватель: Авдеенко Т.В.

Новосибирск ,  2010

Содержание

Введение……………………………………………………………………

3

Текст программы…………………………………………………………..

4

База знаний………………………………………………………………….

11

Тестирование программы…………………………………………………

13

Заключение…………………………………………………………………

18

Приложение 1. Дерево поиска решения для GENI…………………….

19


Задание: спроектировать экспертную систему для подбора кадров на предприятии с помощью языка Turbo Prolog.

В ходе выполнения данной расчетно-графической работы была изучена предоставленная программа GENI, сначала с базой правил, хранящейся в файле GENI.GNI, затем с базой знаний, хранящейся в файле VACATION.GNI.

Программа GENI представляет собой простейшую реализацию оболочки экспертной системы продукционного типа, на основе которой в дальнейшем предполагается строить более сложную экспертную систему.

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

База знаний этой системы состоит из фактов (FACT) и правил (RULE).

Для темы данной расчетно-графической работы «Подбор кадров» эта программа не совсем подходит, так как предполагается, что одному человеку может соответствовать несколько свободных вакансий и наоборот, на одну вакансию может претендовать несколько человек. Поэтому работа выполнена на основе лабораторной работы №3 «Создание интерфейса пользователя с использованием внутренней базы данных Пролога».

Программа ведет диалог с пользователем с помощью меню. Меню предусматривает различные варианты работы с данными. База данных хранится в отдельном файле “personnel_department.dba”. Пользователь может считывать оттуда значения и записывать в этот файл.


Текст программы на TurboProlog (РГР.pro)

domains

   age=integer.

   age_of_person_min=integer.

   age_of_person_max=integer.

   education=string.

   university=string.

   faculty=string.

   major=string.

   experience1=integer.

   experience2=integer.

   timetable=string.

   gender=string.

   main_personal_quality=string.

   quality=string.

   last_name=string.

   name=string.

   second_name=string.

   name_of_position=string.

   salary=real.

database - Staff

person(education,university,faculty,major,experience1,timetable,age,gender,main_personal_quality,last_name,name,second_name).

position(name_of_position,age_of_person_min,age_of_person_max,education,major,experience2,timetable,quality,salary).

hireddb(last_name,name,second_name,name_of_position).

predicates

   nondeterm choice(integer)

   nondeterm menu

   nondeterm repeat

   nondeterm employee(last_name,name,second_name).

   nondeterm preferred_position(name_of_position,salary).

   nondeterm hired(last_name,name,second_name,name_of_position).

clauses

   employee(Last_name,Name,Second_name):-person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Last_name,Name,Second_name),            position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary), Age_of_person_min<=Age,Age_of_person_max>=Age,Quality=Main_personal_quality,Experience1>=Experience2.

   preferred_position(Name_of_position,Salary):-person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Llast_name,Name,Second_name),              position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary),     Age_of_person_min<=Age,Age_of_person_max>=Age,Quality=Main_personal_quality,Experience1>=Experience2.

   hired(Last_name,Name,Second_name,Name_of_position):-person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Last_name,Name,Second_name),            position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary),Age_of_person_min<=Age,Age_of_person_max>=Age,Quality=Main_personal_quality,Experience1>=Experience2.        

/*предикаты интерфейса меню*/

choice('1'):-   /*пункт меню: "Добавление информации о человеке"*/

write("What is your last name?\n"),

readln(Last_name),

write("What is your name?\n"),

readln(Name),

 write("What is your second name?\n"),

readln(Second_name),

write("How old are you?\n"),

readint(Age),

write("What is your gender?\n"),

readln(Gender),

write("What is your main personal quality?\n"),

readln(Main_personal_quality),

write("What is the level of your education (high,unfinished high,middle)?\n"),

readln(Education),

write("What is the university you studied in?\n"),

readln(University),

write("What is the faculty you studied on?\n"),

readln(Faculty),

write("What is the your major?\n"),

readln(Major),

write("What is your expetience of work?\n"),

readint(Experience1),

write("What timetable do you prefer?\n"),

readln(Timetable),

assert(person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Last_name,Name,Second_name)),

write("This is positions suit for you:\n"),

preferred_position(Name_of_position,Salary),

write(Name_of_position,",   Salary: ",Salary,"\n"),

fail.

choice('2'):-     /*пункт меню: "Добавление должности"*/

 write("What is the position's name?\n"),

readln(Name_of_position),

write("What is the min age of employee?\n"),

readint(Age_of_person_min),

 write("What is the max age of employee?\n"),

readint(Age_of_person_max),

write("What education is needed for this position?\n"),

readln(Education),

write("What major is needed for this position?\n"),

readln(Major),

write("What expetience is needed for this position?\n"),

readint(Experience2),

write("What is tthe timetable?\n"),

readln(Timetable),

write("What quality should an employee?\n"),

readln(Quality),

write("What is the salary?\n"),

readreal(Salary),

assert(position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary)),

fail.

    choice('3'):-     /*пункт меню: "Устройство на работу"*/

 write("What is person's last name?\n"),

readln(Last_name),

write("What is person's name?\n"),

readln(Name),

 write("What is person's second name?\n"),

readln(Second_name),

        person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Last_name,Name,Second_name),

write("What position to arrange this person?\n"),

readln(Name_of_position),

position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary),

hired(Last_name,Name,Second_name,Name_of_position),

assert(hireddb(Last_name,Name,Second_name,Name_of_position)),

retract(person(Education,University,Faculty,Major,Experience1,Timetable,Age,Gender,Main_personal_quality,Last_name,Name,Second_name)),

retract(position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary)),

fail.

   choice('4'):- /*пункт меню: "Показать все должности"*/

write("Positions:\n"),

position(Name_of_position,Age_of_person_min,Age_of_person_max,Education,Major,Experience2,Timetable,Quality,Salary),

Похожие материалы

Информация о работе