Skip to content
Snippets Groups Projects
Commit 60a87fc2 authored by Tom Schmidt's avatar Tom Schmidt
Browse files

saved on 050524

parent abd074c5
Branches main
No related tags found
No related merge requests found
Showing
with 4083 additions and 0 deletions
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
File added
File added
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{float}
\usepackage{graphicx}
\graphicspath{{C:/Users/Tom/Desktop/Dateien/Uni/Gießen/KI_II/Hausaufgaben/gitlab_ki_ii_ha/Tom/images}}
\usepackage{geometry}
\usepackage{listings}
\usepackage{multirow}
\geometry{left=2cm, right=2cm, top=2.5cm, bottom=2cm}
\usepackage{xcolor}
\usepackage{amsmath}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.95}
\lstdefinestyle{mystyle}{
backgroundcolor=\color{backcolour},
commentstyle=\color{codegreen},
keywordstyle=\color{magenta},
numberstyle=\tiny\color{codegray},
stringstyle=\color{codepurple},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2
}
\lstset{style=mystyle}
\title{KI II: Hausaufgabe 03 und 04}
\author{Tom Schmidt}
\date{Mai 2024}
\begin{document}
\maketitle
\section*{Aufgabe 1: 8er Puzzle - andere Heuristiken}
\subsection*{Quellcode für die beiden neuen Heuristiken}
\begin{lstlisting}[language=Python]
def manhatten_distance(state, final_state):
"""Compute the manhattan distance between two arrays of identical shape"""
distance = 0
for i, row in enumerate(state):
for j, value in enumerate(row):
if value != 0:
x, y = np.where(final_state == value)
distance += abs(x[0]-i) + abs(y[0]-j)
return distance
def euclidian_distance(state, final_state):
"""Compute the euclidian distance between two arrays of identical shape"""
distance = 0
for i, row in enumerate(state):
for j, value in enumerate(row):
if value != 0:
x, y = np.where(final_state == value)
distance += m.sqrt(pow((x[0]-i), 2) + pow((y[0]-j),2))
return distance
\end{lstlisting}
\subsection*{Ergebnisse}
\begin{table}[h!]
\centering
\begin{tabular}{| c | c |}
\hline
Heuristik & Wert für die beiden oben angegebenen Zustände\\
\hline
Anzahl falscher Positionen (siehe VL) & 7 \\
Euklidischer Abstand & 14 \\
Manhatten-Abstand & 11.30056307974577 \\
\hline
\end{tabular}
\caption{Abstands-Heuristiken für die vorgegebenen ARRAY\_INITIAL und ARRAY\_FINAL}
\end{table}
\begin{table}[h!]
\centering
\begin{tabular}{| c | c | c | c |}
\hline
Algoritmus & Heuristik & Anzahl besuchter Knoten & Länge des Pfades \\
\hline
\multirow{3}{2.5em}{Greedy} & Anzahl falscher Positionen (siehe VL) & 490 & 27 \\
& Euklidischer Abstand & 333 & 41 \\
& Manhattan-Abstand & 83 & 33 \\
\hline
\multirow{3}{1em}{A*} & Anzahl falscher Positionen (siehe VL) & 1048 & 17 \\
& Euklidischer Abstand & 107 & 17 \\
& Manhattan-Abstand & 143 & 17 \\
\hline
\end{tabular}
\caption{Durchschnittswerte der unterschiedlichen Such-Algorithmen}
\end{table}
\section*{Aufgabe 2: 8er Puzzle - Benchmark}
Dargestellt werden stets Durchschnittswerte über alle in der Datenbank verfügbaren Puzzel einer bestimmten Tiefe.
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_1}
\caption{Ausführungszeiten in Abhängigkeit der Lösungstiefe}
\end{figure}
Es ist deutlich zu sehen, dass die Ausführungszeiten der Greedy-Suche und A* auf der logarithmischen Skala mit der Tiefe linear (d.h. in echt exponentiell) steigen. A* beginnt dabei deutlich niedriger und behält diesen Abstand (d.h. auch dieser nimmt auf einer nicht logarithmischen Skala exponentiell zu). Die Ausführungszeiten der Greedy-Suche hingegen flachen nach einer Tiefe von 8 deutlich ab (auf einer nicht logarithmischen Skala würden sie linear zunehmen).
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_2}
\caption{Anzahl an Schritten der gefunden Lösung in Abhängigkeit der Lösungstiefe}
\end{figure}
Die BFS-Suche wurde hier nur zum Vergleich dargestellt. Sie ist optimal und bildet damit die Funktion $f(x) = x$ ab. Die nicht-optimale Greedy-Suche beginnt ca. ab Tiefe 7 Lösungen zu finden, die immer weiter von der optimalen Lösung entfernt liegen. Während die euklidische- und die Manhattan-Heuristik dabei einen fast identisch Verlauf zeigen, findet die Difference-Heuristik auch im Vergleich zu diesen zunehmend schlechtere Lösungen.
\newpage
Da A* optimal ist, aber längere Ausführungszeiten aufweist (die dazu auch noch exponentiell mit der Lösungstiefe steigen) und die Greedy-Suche deutlich kürzere Ausführungszeiten benötigt, aber zunehmend schlechtere Lösungen findet, ist die Auswahl des `besten` Algorithmus eine Frage der Gewichtung zwischen diesen beiden Faktoren. Ich würde aufgrund der Optimalität zu A* tendieren, da die durchschnittliche Ausführungszeit selbst bei Tiefe 20 sehr kurz ist (0,1379561 Sekunden für Manhattan-Abstand). Die beste Heuristik ist der Manhattan-Abstand, da er hinsichtlich Ausführungszeit deutlich überlegen und hinsichtlich Pfadlänge zur zweitbesten Heuristik, dem euklidischen Abstand, praktisch identisch ist.
\section*{Aufgabe 3: 8er Puzzle - Skalierung}
Ich nehme an, dass wir für die Bestimmung des mittleren Skalierungsgesetzes zunächst selbst einen grundlegenden Funktionszusammenhang wählen müssen. Für die Tiefe lege ich diesen analytisch durch die Überlegungen zur Komplexität der Such-Algorithmen in der Vorlesung als $f(x) = c \cdot b^x$ fest (Ergebnisse in (1)). Für die besuchten Knoten entscheide ich mich nach einer kurzen explorativen Datenanalyse für einen linearen Zusammenhang der Form $f(x) = bx + c$ (Ergebnisse in (2)).
Alternativ könnte auch ein Skalierungsgesetz der Ausführungszeit in Abhängigkeit von besuchten Konten und optimale Tiefe gemeint sein. Der grundlegende Zusammenhang wäre dann \[\text{Ausführungszeit(Knoten, Tiefe)} = c \cdot \text{Knoten} \cdot b^{\text{Tiefe}}\]
Diese dreidimensionalen Funktionen lassen sich schlechter darstellen, aber ich bestimme sie trotzdem und gebe sie im letzten Abschnitt (3) dieser Aufgabe an.
\subsection*{(1) Mittlere Skalierungsgesetze in Abhängigkeit der besuchten Konten}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_4}
\caption{\large{$f(x) = 84248,22970039019 \cdot x + 32320045.70097196$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_5}
\caption{\large{$f(x) = 97793.62881363 \cdot x -734727.1035676643$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_6}
\caption{\large{$f(x) = 132767.73454286708 \cdot x -348828.474575256$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_7}
\caption{\large{$f(x) = 128448.46390735488 \cdot x -390310.96235161996$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_8}
\caption{\large{$f(x) = 93936.09172683966 \cdot x -3340801.1885135137$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_9}
\caption{\large{$f(x) = 123092.8176687587 \cdot x -2135648.050355018$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_10}
\caption{\large{$f(x) = 118732.83441765835 \cdot x -1825991.1906389832$}}
\end{figure}
\subsection*{(2) Mittlere Skalierungsgesetze in Abhängigkeit der optimalen Tiefe}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_3}
\caption{\large{$f(x) = 1397078,4256394417 \cdot 1,4934757474967757^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_11}
\caption{\large{$f(x) = 15829449.91762724 \cdot 1.1040853671478799^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_12}
\caption{\large{$f(x) = 6647786.303387479 \cdot 1.1245066542998425^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_13}
\caption{\large{$f(x) = 4085261.428709779 \cdot 1.141818450947134^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_!4}
\caption{\large{$f(x) = 99969.87525556808 \cdot 1.5692736067710622^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_15}
\caption{\large{$f(x) = 82799.55093950704 \cdot 1.4813236373618255^x$}}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_16}
\caption{\large{$f(x) = 126997.29495831158 \cdot 1.4180160045233512^x$}}
\end{figure}
\subsection*{(3) Mittlere Skalierungsgesetze in Abhängigkeit der besuchten Konten UND optimalen Tiefe}
Hier die Ergebnisse für den mittleren Zusammenhang der Form $\text{Ausführungszeit(Knoten, Tiefe)} = c \cdot \text{Knoten} \cdot b^{\text{Tiefe}}$ für alle Algorithmen und Heuristiken.
\subsubsection*{Zusammenhang für BFS:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 77039,43719692642 \cdot \text{Knoten} \cdot 1,0055919559514195^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für Greedy mit Difference Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 97266,1288263614 \cdot \text{Knoten} \cdot 0,9999131616926763^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für Greedy mit Euklidisch Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 131654,15115619134 \cdot \text{Knoten} \cdot 1,0001474034274616^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für Greedy mit Manhattan Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 127231,03942668319 \cdot \text{Knoten} \cdot 1,0001122266989912^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für A* mit Difference Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 73891,13778835062 \cdot \text{Knoten} \cdot 1,012228255704712^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für A* mit Euklidisch Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 94983,46672895551 \cdot \text{Knoten} \cdot 1,0129346800844947^{\text{Tiefe}}\]
\subsubsection*{Zusammenhang für A* mit Manhattan Heuristik:}
\[\text{Ausführungszeit(Knoten, Tiefe)} = 92500,85226522778 \cdot \text{Knoten} \cdot 1,0123224209580304^{\text{Tiefe}}\]
\section*{Aufgabe 4: 8er Puzzle - alternative Heuristik}
\subsection*{a)}
Der vorgeschlagenen Algorithmus ist für alle Werte von $\omega$ vollständig, da die A*-Suche unabhängig von der Gesamtkostenfunktion den gesamten Suchbaum exploriert (falls nicht früher eine Lösung gefunden wird).
\subsection*{b)}
Die A*-Suche ist optimal, wenn $h(s)$ zulässig ist. Die Gesamtkostenfunktion wird verwendet, um potentiell zu explorierende Blattknoten zu vergleichen d.h. ihr Absolutwert spielt keine Rolle. Wir können somit den vorgeschlagenen Algorithmus anhand des Verhältnisses zwischen $8\omega$ und $9-\omega^2$ untersuchen. Eine stärkere Gewichtung von $g(s)$ ist dabei unproblematisch, aber eine stärkere Gewichtung von $h(s)$ führt zu einer potentiellen Überschätzung der Kosten durch den Heuristik-Anteil der Gesamtkostenfunktion und damit zu einer nicht garantiert optimalen Suche.
Für $\omega < 0$ wird $8\omega$ negativ und der vorgeschlagenen Algorithmus somit nicht optimal.
Für $\omega = 0$ wird $8\omega$ zu Null und der vorgeschlagenen Algorithmus somit nicht optimal.
Für $0 < \omega < 1$ wird $8\omega$ kleiner als $9-\omega^2$ und der vorgeschlagenen Algorithmus somit nicht optimal.
\textbf{Für $1\leq \omega \leq 3$ wird $8\omega$ größer als $9-\omega^2$ und der vorgeschlagenen Algorithmus somit optimal.}
Für $\omega > 3$ wird $9-\omega^2$ negativ und der vorgeschlagenen Algorithmus somit nicht optimal.
\subsection*{c)}
Für $\omega = 3$ wird $9-\omega^2$ zu Null und der vorgeschlagenen Algorithmus somit äquivalent zur Uniform-Cost-Search.
\subsection*{d)}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_17}
\caption{Pfadlänge in Abhängigkeit von $\omega$}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_18}
\caption{Zeit in Abhängigkeit von $\omega$}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{3_19}
\caption{Besuchte Knoten in Abhängigkeit von $\omega$}
\end{figure}
Die besten Werte in allen drei Metriken (Zeit, Besuchte Knoten, Pfadlänge) wird mit $\omega = 0,8$ erreicht. Allerdings ist $\omega = 0,8$ nicht garantiert optimal (siehe oben) und $\omega = 1$ nur knapp unterlegen. Deswegen halte ich $\omega = 1$ für die `beste` Wahl.
\section*{Aufgabe 5: 8er Puzzle - Lösbarkeit}
\end{document}
Tom/images/3_!4.png

27.4 KiB

Tom/images/3_1.png

62.4 KiB

Tom/images/3_10.png

35 KiB

Tom/images/3_11.png

36.3 KiB

Tom/images/3_12.png

37 KiB

Tom/images/3_13.png

36.6 KiB

Tom/images/3_15.png

27.4 KiB

Tom/images/3_16.png

30.6 KiB

Tom/images/3_17.png

14.8 KiB

Tom/images/3_18.png

23.3 KiB

Tom/images/3_19.png

23 KiB

Tom/images/3_2.png

41.3 KiB

Tom/images/3_3.png

25 KiB

Tom/images/3_4.png

33.2 KiB

Tom/images/3_5.png

32.8 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment