\documentclass[a4paper,fontsize=14bp]{article}

\input{../common-preamble}
\input{../fancy-listings-preamble}
\input{../bmstu-preamble}
\setcounter{secnumdepth}{0}
\numerationTop

\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader

% номер, тема, предмет, ?а, кто
\makeReportTitle{лабораторной}{№ 1}{Анализ данных системы видеонаблюдения в Прологе}{Представление знаний в информационных системах}{}{Лычков И.И.}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Цель работы – исследовать возможности языка логического программирования Пролог для анализа ситуаций.
\section{Задание}
\textbf{Задание к лабораторной работе} - Для заданной физической среды предложить предикаты для описания положения и действий людей. 

% придумать описать предикаты
% придумать и описать факты
% можно использовать вижл пролог 5.0 или использовать онлайн отладчик SWI Prolog

\textbf{Индивидуальное задание по варианту:} Предложить предикаты для описания поведения и действий людей на станции метро, описать их в разделе PREDICATES (придумайте не менее 10 предикатов). Создать предложения (в разделе CLAUSES) для определения:
\begin{enumerate}
\item Списка людей, задержавшихся на станции дольше указанного времени.
\item Количества людей, пребывавших на станции в указанный промежуток времени.
\item Людей, которые находились в центре зала более трёх раз.
\end{enumerate}

\section{Выполнение работы}
Для моделирования поведения были придуманы следующие предикаты:
\begin{itemize}
\item человек зашёл на станцию
\item человек покинул станцию
\item человек прошёл центр станции
\end{itemize}

\begin{lstlisting}[language=Prolog, frame=single]
enteredStation(ivan, 70).
enteredStation(petr, 10).
enteredStation(fedor, 15).
enteredStation(max, 15).
enteredStation(serg, 15).
enteredStation(anna, 10).
enteredStation(olga, 25).
enteredStation(irina, 50).

leftStation(ivan, 100).
leftStation(petr, 150).
leftStation(fedor, 25).
leftStation(max, 100).
leftStation(serg, 30).
leftStation(anna, 50).
leftStation(olga, 35).
leftStation(irina, 70).

passedCenter(max).
passedCenter(ivan).
passedCenter(petr).
passedCenter(max).
passedCenter(max).
passedCenter(anna).
passedCenter(anna).
passedCenter(olga).
passedCenter(olga).
passedCenter(olga).

person(max).
person(ivan).
person(petr).
person(anna).
person(olga).

passedCenter2(X,1):- passedCenter(X).

getDelay(P,D):-
    enteredStation(P,T1),
    leftStation(P,T2),
    D1 is T2-T1,
    D < D1.

getPersons(P,From,To):-
    enteredStation(P,F),
    leftStation(P,T),
    F >= From,
    T =< To.

getAmount(P, From, To, A):-
    findall(P, getPersons(P, From, To), Persons),
    length(Persons,A).

passedCenterMoreThan(P, X):-
    person(P), 
    findall(Y, passedCenter2(P,Y), Persons), 
    sum_list(Persons,A),
    A >= X.    
  \end{lstlisting}

  Результаты выполнения программы представлены на рис. \hrf{pic:results}.
  \begin{figure}[h]
    \centering
    \includegraphics[width=12cm]{01rpt-result.png}
    \caption{Снимок экрана с результатами выполнения программы}
    \label{pic:results}
  \end{figure}


\section{Контрольные вопросы}
Что такое предикат?
Из каких разделов состоит программа на Прологе?
Что такое факты и правила?
В чем заключается унификация и конкретизация при доказательстве целевой формулы?
Что называется решением для программы на Прологе?
Как строится дерево логического вывода при поиске решений?
Объясните механизм отката при поиске решений.
Как реализовать на Прологе подсчет количества фактов для определенного предиката?


\end{document}

