From 5c7f7cbc04d8d4f76d9370927c287f4a0e390413 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Mon, 17 Nov 2014 16:56:40 +0100 Subject: [PATCH] mooie boom gemaakt en jou lelijke boom weggehaald --- report/Makefile | 2 +- report/ass2.tex | 81 +++++++++++++++++++++++++++++---- report/report.out | 19 -------- report/report.tex | 7 ++- report/src/hittingsettrees.png | Bin 11379 -> 0 bytes 5 files changed, 79 insertions(+), 30 deletions(-) delete mode 100644 report/report.out delete mode 100644 report/src/hittingsettrees.png diff --git a/report/Makefile b/report/Makefile index 7e10403..7b14a86 100644 --- a/report/Makefile +++ b/report/Makefile @@ -3,4 +3,4 @@ all: pdflatex -shell-escape report.tex clean: - rm -vf *.aux *.log *.pdf *.toc *.pyg + rm -vf *.aux *.log *.pdf *.toc *.pyg *.out diff --git a/report/ass2.tex b/report/ass2.tex index 32f6adf..c0860d1 100644 --- a/report/ass2.tex +++ b/report/ass2.tex @@ -5,20 +5,85 @@ \prologcode{./src/task12.pl} \end{listing} - \subsubsection{Task 13: Define your data structure} \begin{listing}[H] \caption{Hitting set datastructure} \prologcode{./src/hs.pl} \end{listing} -Our datastructure uses the predicate node to signify nodes and leaf for leaves. A node contains a list of edge labels and another list (with the same length as the amound of edge labels) that contains nodes or leaves. The edge label corresponds with its order in the list it is in. -Examples: -node([a,b],[leaf,leaf]) -node([a,b], [node([c,d], [leaf,leaf]), node([e,f], [leaf,leaf])]) -node([a,b], [node([c,d], [node([g,h,i], [leaf,leaf,leaf]),leaf]), node([a,f], [leaf,leaf])]) -%insert hittingsettrees.png + +\tikzstyle{level 1}=[level distance=1cm, sibling distance=1cm] +\tikzstyle{level 2}=[level distance=1cm, sibling distance=1cm] +\tikzstyle{bag} = [text width=4em, text centered] +\tikzstyle{end} = [minimum width=3pt, inner sep=0pt] +\begin{figure}[H] + \caption{Examples of good hitting set trees} + \begin{tikzpicture} [grow=down] + \node[bag] {\{$a, b\}$} + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[left] {$a$} + } + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[right] {$b$} + }; + \end{tikzpicture} + \begin{tikzpicture} [grow=down] + \node[bag] {\{$a, b\}$} + child { + node[bag] {$\{c, d\}$} + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[left] {$c$} + } + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[left] {$d$} + } + edge from parent + node[left] {$a$} + } + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[right] {$b$} + }; + \end{tikzpicture} +\end{figure} + +\begin{figure}[H] + \caption{Examples of bad hitting set trees due to duplicate edge labels} + \begin{tikzpicture} [grow=down] + \node[bag] {\{$a, b\}$} + child { + node[bag] {$\{c, a\}$} + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[left] {$c$} + } + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[left] {$a$} + } + edge from parent + node[left] {$a$} + } + child { + node[end, label=below:$\checkmark$]{} + edge from parent + node[right] {$b$} + }; + \end{tikzpicture} +\end{figure} + \subsubsection{Task 14: Implementation} \begin{listing}[H] \caption{Code for generating a hitting set tree} \prologcode{./src/task14.pl} -\end{listing} \ No newline at end of file +\end{listing} diff --git a/report/report.out b/report/report.out deleted file mode 100644 index 7a7ad16..0000000 --- a/report/report.out +++ /dev/null @@ -1,19 +0,0 @@ -\BOOKMARK [1][-]{section.1}{Assignment 1-1}{} -\BOOKMARK [2][-]{subsection.1.1}{Part 1: Modelling Sokoban}{section.1} -\BOOKMARK [3][-]{subsubsection.1.1.1}{Task 1: Knowledge base}{subsection.1.1} -\BOOKMARK [3][-]{subsubsection.1.1.2}{Task 2: Actions}{subsection.1.1} -\BOOKMARK [2][-]{subsection.1.2}{Part 2: Implementation}{section.1} -\BOOKMARK [3][-]{subsubsection.1.2.1}{Task 3: Translate Axioms}{subsection.1.2} -\BOOKMARK [3][-]{subsubsection.1.2.2}{Task 4: The Planning Problem in Figure 1}{subsection.1.2} -\BOOKMARK [3][-]{subsubsection.1.2.3}{Task 5: Crates go to Any Goal Location}{subsection.1.2} -\BOOKMARK [3][-]{subsubsection.1.2.4}{Task 6: Inverse Problem}{subsection.1.2} -\BOOKMARK [2][-]{subsection.1.3}{Part 3: Extending the domain}{section.1} -\BOOKMARK [3][-]{subsubsection.1.3.1}{Task 7: Unlocking the Crates}{subsection.1.3} -\BOOKMARK [2][-]{subsection.1.4}{Part 4: General questions}{section.1} -\BOOKMARK [3][-]{subsubsection.1.4.1}{Task 10: Sitcalc expressivity}{subsection.1.4} -\BOOKMARK [3][-]{subsubsection.1.4.2}{Task 11: Related work}{subsection.1.4} -\BOOKMARK [1][-]{section.2}{Assignment 1-2}{} -\BOOKMARK [2][-]{subsection.2.1}{Implementation of the hitting-set algorithm}{section.2} -\BOOKMARK [3][-]{subsubsection.2.1.1}{Task 12: Generate conflict}{subsection.2.1} -\BOOKMARK [3][-]{subsubsection.2.1.2}{Task 13: Define your data structure}{subsection.2.1} -\BOOKMARK [3][-]{subsubsection.2.1.3}{Task 14: Implementation}{subsection.2.1} diff --git a/report/report.tex b/report/report.tex index 42bf2c6..c76e467 100644 --- a/report/report.tex +++ b/report/report.tex @@ -7,9 +7,12 @@ \usepackage{amsmath} \usepackage{amssymb} \usepackage{minted} -\usepackage{hyperref} +\usepackage[hidelinks]{hyperref} +\usepackage{tikz} -\author{\small Mart Lubbers\and Caspar Safarlou} +\usetikzlibrary{trees} + +\author{Mart Lubbers\and Caspar Safarlou} \title{Knowledge Representation and Reasoning.\\Assignment 1} \date{\today} diff --git a/report/src/hittingsettrees.png b/report/src/hittingsettrees.png deleted file mode 100644 index 12c76b604925a69aebf6211e7a8a75f064d21b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11379 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