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

74 lines
3.0 KiB
TeX
Raw Permalink Normal View History

2023-01-27 22:32:16 +03:00
\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}