Расследование преступления на языке логического программирования

Автор: Пользователь скрыл имя, 13 Декабря 2010 в 19:59, курсовая работа

Описание работы

Программа имитирует действия следователя, раскрывающего по имеющимся фактам преступление – убийство гражданки Романовой. В качестве фактов описаны данные о подозреваемых лицах (фамилия, возраст, пол, профессия), круг их знакомств, перечислены все возможные мотивы преступления и улики.

Содержание

Задание_________________________________________________________ 3
1. Назначение программного продукта_______________________________ 4
2. Описание данных_______________________________________________ 5
3. Описание методов решения_______________________________________ 7
4. Описание программы____________________________________________ 9
5. Описание пользовательского интерфейса ___________________________ 10
Список литературы________________________________________________ 12
ПРИЛОЖЕНИЕ. Исходный текст программы _________________________ 13

Работа содержит 1 файл

Курсовая по ФиЛП.docx

— 71.66 Кб (Скачать)

     Далее в программе указываем необходимые  предикаты в разделе predicates (см. ПРИЛОЖЕНИЕ). В разделе clauses описываем правила, необходимые для вычисления личности убийцы. Это правило для установления определенного типа орудия убийства, правило для выявления мотива совершения преступления, правило для выяснения имени преступника (см. ПРИЛОЖЕНИЕ). Раздел goal позволяет вывести на экран получившееся заключение о вероятном преступнике в деле по убийству Романовой (см. ПРИЛОЖЕНИЕ). 

     5. Описание пользовательского  интерфейса

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

     goal

     do_expert_crime.

     В результате работы программы было получено следующее решение задачи о расследовании  преступления гражданки Романовой:

 

     Из  выданного программой решения следует, что убийство было совершено  мужским парикмахером гражданкой Гурченко, работающей в той же гостинице, что и Романова. Мотивом данного преступления является месть гражданке Романовой за то, что та увела у Гурченко любимого мужчину бизнесмена Кириенко. Орудием убийства послужили обыкновенные  ножницы для стрижки волос, которыми Гурченко нанесла смертельные повреждения Романовой. На одежде Гурченко были найдены пятна крови, соответствующие крови горничной Романовой. Состав найденной крови на одежде полностью совпадает с составом крови Романовой. Исследование на идентичность крови было проведено в специальной химической лаборатории. Из выше перечисленного следует, что наказание за содеянное преступление должна понести гражданка Гурченко. 

Список  литературы 

     1) Иван Братко. Алгоритмы искусственного интеллекта на языке PROLOG— М.: Вильямс, 2004.

     2) Анатолий Адаменко, Андрей Кучуков. Логическое программирование и Visual Prolog— СПб.: «БХВ-Петербург», 2003.

      3) Клоксин У., Меллиш К. «Программирование на языке пролог», 1987 г. 

ПРИЛОЖЕНИЕ 

Исходный текст программы

domains

name, sex, occupation, object, vice, substance = symbol

age=integer

predicates

do_expert_crime

do_consulting

person(name, age, sex, occupation)

had_affair(name, name)

killed_with(name, object)

killed(name)

killer(name)

motive(vice, name)

smeared_in(name, substance)

owns(name, object)

owns_probably(name, object)

clauses

do_expert_crime:-

  makewindow(1,7,7,"Expert System",1,3,22,71),

  nl,write(" ---------------------------------------------------"),

  nl,write(" A Crime Expert "),

  nl,write("   "),

  nl,write(" ---------------------------------------------------"),

  nl,nl,

  do_consulting,

  write("Press space bar."),nl,

  readchar(_),

  removewindow,

  exit.

do_consulting:-

  motive(Y,X),!,nl,

  write("Motive is ",Y,"."),nl,

        killer(X),!,nl,

  write("Crime is done by ",X,".").

person("Tarasov", 55, m, "povar").

person("Kataev", 35, m, "taxist").

person("Kirienko", 26, m, "businesman").

person("Filatov", 28, m, "workless").

person("Gurchenko", 19, w, "barber").

person("Romanova", 19, w, "gornichnaia").

had_affair("Gurchenko", "Kirienko").

had_affair("Romanova", "Tarasov").

had_affair("Romanova", "Kirienko").

killed_with("Romanova", "nognici").

killed("Romanova").

smeared_in("Tarasov", "bloud").

smeared_in("Romanova", "bloud").

smeared_in("Kataev", "dirt").

smeared_in("Gurchenko", "bloud").

smeared_in("Kirienko", "coffee").

owns("Kirienko", "pistol").

owns_probably(X, "nognici") :-

      person(X, _, _, "barber").

owns_probably(X, "knife") :-

      person(X, _, _, "povar").

owns_probably(X, Object) :-

      owns(X, Object). 

motive("revnost", X):-

      killed_with("Romanova", Weapon),

      owns_probably(X, Weapon),

      person(X, _, m, _) ,

      had_affair("Romanova", X). 

motive("mest", X):-

      killed_with("Romanova", Weapon),

      owns_probably(X, Weapon),

      person(X, _, w, _) ,

      had_affair(X, Man) ,

      had_affair("Romanova", Man).

motive("money", X):-

      killed_with("Romanova", Weapon),

      owns_probably(X, Weapon),

      person(X, _, _, "workless").

killer(Killer) :-

      person(Killer, _, _, _) ,

      killed(Killed) ,

      Killed <> Killer ,

      motive(_, Killer),

      smeared_in(Killer, X) ,

      smeared_in(Killed, X).

goal

do_expert_crime.

Информация о работе Расследование преступления на языке логического программирования