74 lines
3.0 KiB
TeX
74 lines
3.0 KiB
TeX
\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}
|
||
|