BMSTU/02-iskr-lab-02-report.tex

74 lines
3.0 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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{лабораторной}{2}{Логическое программирование в ограничениях}{Представление знаний в информационных системах}{}{Лычков И.И.}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Цель работы исследовать возможности языка логического программирования Пролог для анализа ситуаций.
\section{Задание}
11 предметов с весами [48, 30, 19, 36, 36, 27, 42, 42, 36, 24, 30] кг соответственно необходимо разложить по корзинам с ограничением по суммарному весу в одной корзине не более 100 кг. В предположении о том, что в наличии имеется достаточно корзин для размещения всех предметов, определите наименьшее количество корзин, которое удовлетворяет указанным требованиям.
\textbf{Подсказка:} Для перебора значений количества N используемых корзин в диапазоне StartN..StopN используйте предикат \code{between(StartN, StopN, N)}.
\textbf{Правильное решение:} Минимально нужно 4 корзины. Раскладка предметов по корзинам:
\begin{lstlisting}[language=Prolog]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1].
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0].
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0].
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0].
\end{lstlisting}
\section{Выполнение работы}
Результат работы программы представлен на снимке экрана рис. \hrf{pic:result}.
\begin{lstlisting}[language=Prolog,style=CCodeStyle]
:- use_module(library(clpfd)).
mylength(Length, List):-
length(List, Length).
scalar(List, L):-
scalar_product(List, L, #=<, 100).
uberSum(Column):-
sum(Column, #=, 1).
buckets(AllBuckets) :-
Items = [48,30,19,36,36,27,42,42,36,24,30],
between(1, 11, Count),
length(AllBuckets, Count), maplist(mylength(11), AllBuckets),
maplist(scalar(Items), AllBuckets),
append(AllBuckets, V), V ins 0..1,
transpose(AllBuckets, Column),
maplist(uberSum(), Column),
label(V).
\end{lstlisting}
\begin{figure}[h]
\centering
\includegraphics[height=4cm]{1.png}
\caption{Результат выполнения программы}
\label{pic:result}
\end{figure}
\end{document}