Commit b584aeda authored by Amin Raslan's avatar Amin Raslan
Browse files

Replace schlussfolgerung.tex

parent e6062602
......@@ -3,12 +3,12 @@
Nach dem Vergleich von 14 Modellen in CLP(FD) und MiniZinc in Kapitel~\ref{section:vergleich_von_implementierungen} (\emph{Vergleich von Implementierungen}) stellt es sich heraus, dass jede der beiden Sprachen Vorteile in bestimmten Bereichen hat.
In MiniZinc werden Daten- und Kontrollstrukturen sowie mathematische Notationen und Funktionen verwendet, die den Programmierern, die sich mit der Mathematik und mit anderen berühmten Programmiersprachen wie Java und C auskennen, bekannt vorkommen können. Deswegen könnte MiniZinc am Anfang einfacher erscheinen, wenn der Benutzer die Programmiersprache Prolog nicht kennt.
In allen Modellen ist zu sehen, dass CLP(FD) schneller ist als MiniZinc. Auch wenn das MiniZinc-Modell kürzer und weniger komplex ist als das CLP(FD)-Modell, wie in \emph{Who Killed Agatha} (Anhang~\ref{subsection:who_killed_agatha}). Dies könnte daran liegen, dass die MiniZinc-Modelle zuerst in FlatZinc-Modelle übersetzt werden müssen, da die Solver mit FlatZinc arbeiten, wie in Kapitel~\ref{section:hintergrundwissen} erwähnt ist. Auf der anderen Seite arbeitet CLP(FD) mit Domänenreduktion und Backtracking, was der Grund sein könnte, warum CLP(FD) deutlich schnell ist. Außerdem ist es zu beachten, dass die MiniZinc-Modelle in der Regel langsamer werden, wenn Arrays verwendet werden, anstatt die Variablen einzeln zu definieren. Bei den MiniZinc-Modellen ist es weiterhin zu beachten, dass der Solver von SICStus-Prolog langsamer ist als der in der MiniZincIDE verwendete Solver, nämlich Gecode 6.3.0, denn die Performance von SICStus-Prolog ist in allen Modellen schlechter als die Performance in der MiniZincIDE. Wenn die Performance also eine deutliche Rolle spielen soll, ist CLP(FD) von Vorteil.
Weiterhin ist es einfacher, mit Arrays anstatt mit Listen in CLP(FD) zu arbeiten, denn der Zugriff auf ein bestimmtes Element erfolgt direkt mit Indizes. Wenn man hingegen auf ein bestimmtes Element in einer Liste in CLP(FD) zugreifen möchte, so muss man die Liste beginnend vom ersten Element komplett durchlafen, bis man das gewünschte Element erreicht hat.
In MiniZinc werden Daten- und Kontrollstrukturen sowie mathematische Notationen und Funktionen verwendet, die den Programmierern, die sich mit der Mathematik und mit anderen berühmten Programmiersprachen wie Java und C auskennen, bekannt vorkommen können. Wenn der Nutzer sich weder mit Prolog noch mit MiniZinc auskennt, ist MiniZinc also leichter zu erlernen. Generell kann die Implementierung in MiniZinc wegen der mathematischen Notationen und der bekannten Datenstrukturen auch einfacher sein. In der Regel sind die Modelle in MiniZinc auch kürzer und lesbarer als die Modelle in CLP(FD) in dieser Arbeit. Wenn man also eine neue Sprache lernen möchte, ist MiniZinc von Vorteil.
In allen Modellen (außer Subset Sum, wenn es keine Lösung existiert) ist CLP(FD) schneller als MiniZinc. Dies könnte daran liegen, dass die MiniZinc-Modelle zuerst in FlatZinc-Modelle übersetzt werden müssen, da die Solver mit FlatZinc arbeiten, wie in Kapitel~\ref{section:hintergrundwissen} erwähnt ist. Auf der anderen Seite arbeitet CLP(FD) mit Domänenreduktion und Backtracking, was der Grund sein könnte, warum CLP(FD) deutlich schneller ist. In Subset Sum ist MiniZinc schneller als CLP(FD), wenn für die Eingabe keine Lösung existiert, wie vorher erwähnt ist. Dies könnte daran liegen, dass alle möglichen Kombinationen der Elemente in der gegebenen Menge probiert werden, bis es sich dann herausstellt, dass es keine Lösung existiert. In solchem Fall ist die Domänenreduktion vermutlich langsamer. Außerdem ist es zu beachten, dass die MiniZinc-Modelle langsamer werden, wenn Arrays verwendet werden, anstatt die Variablen einzeln zu definieren.
In manchen Modellen werden mehrere Variablen mit derselben Domäne benötigt. In CLP(FD) wird für diese Variablen eine Liste erstellt. Innerhalb dieser Liste können diese Variablen nach Wunsch benannt werden. In MiniZinc werden diese Variablen hingegen in der Regen einzeln definiert. Je mehr Variablen benötigt werden, desto länger wird das MiniZinc-Modell. Es könnte auch ein Array für diese Variablen in MiniZinc erstellt werden. Jedoch können die Variablen dann nicht mehr benannt werden, sondern man kann sie mit dem Arraynamen und Indizes aufrufen. Mit Arrays in MiniZinc ist die Performance außerdem in der Regel schlechter, wie vorher erwähnt wurde. Wenn mehrere Variablen mit derselben Domäne verwendet werden, ist also CLP(FD) von Vorteil.
In manchen Modellen werden mehrere Variablen mit der selben Domäne benötigt. In CLP(FD) wird für diese Variablen eine Liste erstellt. Innerhalb dieser Liste können diese Variablen nach Wunsch benannt werden. In MiniZinc werden diese Variablen hingegen in der Regen einzeln definiert. Je mehr Variablen benötigt werden, desto länger wird das MiniZinc-Modell. Es könnte auch ein Array für diese Variablen in MiniZinc erstellt. Jedoch können die Varibalen dann nicht mehr benannt werden. Außerdem sind die MiniZinc-Modelle dann langsamer, wie vorher erwähnt wurde.
Die Modelle \emph{N Factorial}~\ref{subsection:n_factorial},\emph{Magic Square}~\ref{subsection:magic_square},\emph{N Queens}~\ref{subsection:n_queens} und \emph{Eurler's Officer Problem}~\ref{subsection:eulers_officer_problem} können in CLP(FD) in allen Richtungen ausgefüht werden, wie in Kapitel~\ref{section:vergleich_von_implementierungen} (Vergleich von Implementierungen) zu sehen ist. In MiniZinc können diese Modelle hingegen nur in einer Richtung ausgeführt werden. In diesem Bereich ist CLP(FD) also flexibler und deswegen von Vorteil.
Auf der anderen Seite, wird \emph{labeling} größer, je mehr Variablen benötigt werden, wie in Zebra Puzzle~\ref{section:zebra_puzzle} zu sehen ist. In MiniZinc mit \emph{solve satisfy} ist dies nicht der Fall.
\ No newline at end of file
Schließlich ist es zu beachten, dass in CLP(FD) Listen und in MiniZinc Arrays verwendet werden. In MiniZinc kann auf die Elemente im Array direkt mit dem Arraynamen und Indizes zugegriffen werden. In CLP(FD) muss man die Liste immer beginnend mit dem ersten Element durchlaufen, bis man das gewünschte Element erreicht hat. Je länger diese Listen werden, desto mehr Elemente muss man durchlaufen, um das gewünschte Element zu erreicht, wenn dieses Element sich am Ende der Liste befindet. Dies ist auch der Fall, wenn es sich um mehrere Dimensionen handelt. In diesem Bereich ist also CLP(FD) von Vorteil.
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment