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

Replace future_work.tex

parent b0b3a141
\section{Future Work}
\ No newline at end of file
\section{Future Work}
Wie in Kapitel~\ref{section:schlussfolgerung} (Schlussfolgerung) zu sehen ist, gibt es viele Unterschiede zwischen CLP(FD) und MiniZinc. Jede der beiden Sprachen zeigt sich an manchen Stellen besser als die Andere. Für die zukünftige Arbeit könnte ein automatischer Übersetzer zwischen CLP(FD) und MiniZinc erstellt werden, um die Vorteile beider Sprachen gemeinsam zu nutzen. Dieses Kapitel stellt anhand der Modelle in Kapitel~\ref{section:vergleich_von_implementierungen} (Vergleich von Implementierungen) und deren Implementierungen in Anhang~\ref{appendix:implementierungen_clpfd_und_minizinc} Vorschläge zur Verfügung, wie solch ein automatischer Übersetzer teilweise implementiert werden könnte.
\paragraph*{Prolog-Prädikate und MiniZinc-Funktionen}
In der Regel werden Prolog-Prädikate rekursiv mit einem Basecase implementiert. Diese Prädikate können als rekursive Funktionen in MiniZinc implementiert werden, wobei der Basecase im Prädikat als die Abbruchbedingung in der Funktion verwendet wird, wie in N Factorial (Anhang~\ref{subsection:n_factorial}) zu sehen ist. Mit dem automatischen Übersetzer könnte also auf diese Weise zwischen Prolog-Prädikaten und MiniZinc-Funktionen übersetzt werden.
\paragraph*{Variablendefinitionen}
Wenn mehrere Variablen die selbe Domäne haben, werden sie in CLP(FD) in der Regel benannt und in eine Liste gepackt. Diese Liste erhält dann die Domäne dieser Variablen. In MiniZinc werden diese Variablen einzeln definiert. Sie erhalten die Domäne in ihren Definitionen. Beispiel~\ref{bsp:variablendefinitionen} zeigt, wie der automatische Übersetzer Variablen der selben Domäne zwischen CLP(FD) und MiniZinc übersetzen könnte. Für weitere Beispiele siehe Send More Money (Anhang~\ref{subsubsection:send_more_money}), Send Most Money (Anhang~\ref{subsubsection:send_most_money}), Smuggler's Knapsack (Anhang~\ref{subsection:smugglers_knapsack}), Zebra Puzzle (Anhang~\ref{subsection:zebra_puzzle}), Seseman's Convent (Anhang~\ref{subsection:sesemans_convent}) und Magic Hexagon (Anhang~\ref{subsection:magic_hexagon}).
\begin{beispiel}
\begin{minted}[frame=single,linenos]{prolog}
%CLP(FD)
L = [A,B,C],
domain(L, 1, 9).
%MiniZinc
set of int: domain = 1..9;
var domain: A;
var domain: B;
var domain: C;
\end{minted}
\caption{Variablendefinitionen in CLP(FD) und MiniZinc}
\label{bsp:variablendefinitionen}
\end{beispiel}
\paragraph*{Matrix erstellen}
In manchen Modellen geht es um Quadrate, für die Matrizen in der Implementierung erstellt werden. Diese Matrizen wurden in allen Modellen auf ähnliche Weise erstellt. Beispiel~\ref{bsp:matrix} zeigt, wie der automatische Übersetzer Matrizen zwischen CLP(FD) und MiniZinc übersetzen könnte. Für weitere Beispeiel siehe Magic Square (Anhang~\ref{subsection:magic_square}), Sudoku (Anhang~\ref{subsection:sudoku}) und Euler's Officer Problem (Anhang~\ref{subsection:eulers_officer_problem}).
\begin{beispiel}
\begin{minted}[frame=single,linenos]{prolog}
%CLP(FD)
length(Quadrat, 3),
maplist(same_length(Quadrat), Quadrat),
append(Quadrat, Vs),
domain(Vs, 1, 9).
%MiniZinc
array[1..3,1..3] of var 1..9: quadrat;
\end{minted}
\caption{Erstellen einer Matrix in CLP(FD) und MiniZinc}
\label{bsp:matrix}
\end{beispiel}
\paragraph*{Gleichungen und Constraints}
Weiterhin könnten die Gleichungen in CLP(FD) als Constraints in MiniZinc implementiert werden, wie die Gleichungen in Smuggler's Knapsack (Anhang~\ref{subsection:smugglers_knapsack}).
\paragraph*{Maplist und Forall}
Um Listen in CLP(FD) zu durchlaufen, wird in manchen Modellen \emph{maplist} verwendet. In MiniZinc wird in diesen Modellen dann \emph{forall} verwendet, um die Arrays zu durchlaufen, wie beispielsweise in Sudoku (Anhang~\ref{subsection:sudoku}) zu sehen ist. Der automatische Übersetzer könnte also zwischen maplist in CLP(FD) und forall in MiniZinc übesetzen.
\paragraph*{Parameter, Lösung und Ausgabe}
Prolog-Prädikate bekommen in der Regel Parameter übergeben. Das letzte Argument ist normalerweise die Ausgabe. Am Ende wird \emph{labeling} verwendet, um Lösungen für das Modell zu finden. In das zweite Argument von \emph{labeling} kommen alle Variablen rein, für die nach Lösungen gefunden werden soll. In MiniZinc werden diese übergebenen Parameter von CLP(FD) (außer des Letzten) als Variablen definiert, die feste Werte beim Ausführen des Modells erhalten. Der letzte Parameter von CLP(FD) erhält in MiniZinc \emph{var} in der Definition, wie alle anderen Variablen, die später definiert werden und für die nach Lösungen gesucht werden soll. Am Ende wird \emph{solve satisfy} verwendet, um Lösungen für das Modell zu finden. Sowohl in CLP(FD) als auch in MiniZinc könnten zusätzlich die Optionen \emph{max} und \emph{min} in \emph{labeling} beziehungsweise \emph{solve} verwendet werden, um die Lösung zu maximieren oder zu minimieren.
\ 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