\documentclass[a4paper,fontsize=14bp]{article} \input{../common-preamble} \input{../fancy-listings-preamble} \input{../bmstu-preamble} \numerationTop \begin{document} \thispagestyle{empty} \makeBMSTUHeader % ... работе, номер, тема, предмет, ?а, кто \makeReportTitle{лабораторной}{4}{Исчисление дискретных событий}{Представление знаний в информационных системах}{}{И.И. Лычков} \newpage \thispagestyle{empty} \tableofcontents \newpage \pagestyle{fancy} \section{Цель} Получение практических навыков моделирования дискретно-событийных систем на языке логического программирования. \section{Задание} В качестве исходных данных выдается словесное описание некоторой физической системы, а именно: общие правила её функционирования, состояние системы в начальный момент, список произошедших событий и вопрос относительно состояния одного из объектов системы в определенный момент времени. Также выдаются аксиомы исчисления дискретных событий. Требуется выделить в исходном описании все объекты, события, флюенты, придумать для них идентификаторы в программе, затем представить логику функционирования заданной системы в виде программы на языке ASP программирования наборов решений с помощью аксиом исчисления дискретных событий, отладить работу программы так, чтобы она выдавала ответ на указанный в задании вопрос относительно состояния одного из объектов системы в определенный момент времени. \section{Выполнение} \subsection{Словесное описание системы согласно варианту} Имеется две аксиомы initiates и terminates. Если агент включает нагреватель воздушного шара, то нагреватель более не будет выключен и будет включен. Мы задаем глобальное ограничение о том, что воздушный шар не может находиться одновременно на двух разных высотах в один момент времени. Когда нагреватель включен, высота воздушного шара изменяется по закону: \[h(t) = h(0) + V*t\] Когда нагреватель выключен, высота воздушного шара изменяется по закону: \[h(t) = h(0) - V*t,\] где V = 1 - скорость воздушного шара (задана константой) Высота воздушного шара освобождается от закона инерции по событиям включения и выключения нагревателя. Имеем следующие факты и хронику событий. Воздушный шар изначально находится на нулевой высоте. В момент времени 1 нагреватель включают, а в момент времени 3 нагреватель выключают. Необходимо проверить, что в момент времени 3 высота воздушного шара равна 2V, а в момент времени 4 она равна V. \subsection{Перечень всех объектов, событий и флюентов с указанием их идентификаторов и смысловой нагрузки} События и флюенты в программе: \begin{itemize} \item \verb|turnOn| - событие включения нагревателя; \item \verb|turnOff| - событие выключения нагревателя; \item \verb|heating| - флюент, говорящий о том, что шар нагревается и летит вверх; \item \verb|falling| - флюент, говорящий о том, что шар охлаждается и падает; \item \verb|height(X)| - флюент, говорящий о текущей высоте шара. \end{itemize} Имеется две аксиомы initiates и terminates. \begin{verbatim} initiates(turnOn, heating, Time) :- times(Time). terminates(turnOff, heating, Time) :- times(Time). initiates(turnOff, falling, Time) :- times(Time). terminates(turnOn, falling, Time) :- times(Time). \end{verbatim} Мы задаем глобальное ограничение о том, что воздушный шар не может находиться одновременно на двух разных высотах в один момент времени. \begin{verbatim} :- holdsAt(height(X1), T), holdsAt(height(X2), T), X1 != X2. \end{verbatim} Имеем две аксиомы типа trajectory, описывающие поведение шара при нагревании и охлаждении: \begin{verbatim} trajectory(heating, T1, height(X2), T2) :- times(T1), times(T2), T1 < T2, holdsAt(height(X),T1), X2 = X + 1 * (T2 - T1). trajectory(falling, T1, height(X2), T2) :- times(T1), times(T2), T1 < T2, holdsAt(height(X),T1), X2 = X - 1 * (T2 - T1). \end{verbatim} Высота воздушного шара освобождается от закона инерции по событиям включения и выключения нагревателя: \begin{verbatim} releases(turnOff, height(X), T) :- holdsAt(height(X), T). releases(turnOn, height(X), T) :- holdsAt(height(X), T). \end{verbatim} Имеем следующие факты и хронику событий. Воздушный шар изначально находится на нулевой высоте, в момент времени 1 нагреватель включают, а в момент времени 3 нагреватель выключают: \begin{verbatim} initiallyP(height(0)). initiallyN(heating). happens(turnOn, 1). happens(turnOff, 3). \end{verbatim} Необходимо проверить, что в момент времени 3 высота воздушного шара равна 2V, а в момент времени 4 она равна V. \begin{verbatim} info(F1, T1, F2, T2) :- holdsAt(height(F1), T1), holdsAt(height(F2), T2), F1==2, T1==3, F2 == 1, T2 == 4. #show info/4. \end{verbatim} \subsection{Результат выполнение программы} Результат выполнения программы представлен на рисунке \hrf{pic:result}. \begin{figure}[H] \centering \includegraphics[height=6cm]{04-lab-result.png} \caption{Результаты работы программы} \label{pic:result} \end{figure} На рисунке \hrf{pic:result} видно, что программа нашла одно сочетание флюентов и временных отметок: в момент времени 3 высота воздушного шара равна 2, а в момент времени 4 она равна 1. \newpage \appendix \setcounter{secnumdepth}{0} \section*{Приложения} \addcontentsline{toc}{section}{Приложения} \renewcommand{\thesubsection}{\Alph{subsection}} \setcounter{secnumdepth}{5} \subsection{Полный листинг приложения по индивидуальному заданию} \begin{lstlisting}[language=C,style=CCodeStyle] %* ******************************************************************** Стандартные аксиомы исчисления дискретных событий. ******************************************************************** *% %% BEC1 - StoppedIn(t1,f,t2) stoppedIn(T1,Fluent,T2) :- times(T1), times(T2), T1