\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}

