From 6df916b1bfe6e37cd1c087c493f297a34ccbc5f7 Mon Sep 17 00:00:00 2001 From: NotXia <35894453+NotXia@users.noreply.github.com> Date: Wed, 8 Nov 2023 21:01:09 +0100 Subject: [PATCH] Add FAIKR1 STRIPS --- .../module1/img/_strips_example.pdf | Bin 0 -> 77022 bytes .../module1/img/strips_example.drawio | 506 ++++++++++++++++++ .../module1/main.tex | 1 + .../module1/sections/_generative_planning.tex | 328 ++++++++++++ .../module1/sections/_planning.tex | 256 +-------- 5 files changed, 836 insertions(+), 255 deletions(-) create mode 100644 src/fundamentals-of-ai-and-kr/module1/img/_strips_example.pdf create mode 100644 src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio create mode 100644 src/fundamentals-of-ai-and-kr/module1/sections/_generative_planning.tex diff --git a/src/fundamentals-of-ai-and-kr/module1/img/_strips_example.pdf b/src/fundamentals-of-ai-and-kr/module1/img/_strips_example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..af462c2e23da579f596f61c70e83a37420cac340 GIT binary patch literal 77022 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 XMvl(zj=*v8@$zx-q0rDsDNFw!+D)sd literal 0 HcmV?d00001 diff --git a/src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio b/src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio new file mode 100644 index 0000000..5f0fea7 --- /dev/null +++ b/src/fundamentals-of-ai-and-kr/module1/img/strips_example.drawio @@ -0,0 +1,506 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fundamentals-of-ai-and-kr/module1/main.tex b/src/fundamentals-of-ai-and-kr/module1/main.tex index 2b61075..99160d2 100644 --- a/src/fundamentals-of-ai-and-kr/module1/main.tex +++ b/src/fundamentals-of-ai-and-kr/module1/main.tex @@ -13,5 +13,6 @@ \input{sections/_swarm_intelligence.tex} \input{sections/_games.tex} \input{sections/_planning.tex} + \input{sections/_generative_planning.tex} \end{document} \ No newline at end of file diff --git a/src/fundamentals-of-ai-and-kr/module1/sections/_generative_planning.tex b/src/fundamentals-of-ai-and-kr/module1/sections/_generative_planning.tex new file mode 100644 index 0000000..1997716 --- /dev/null +++ b/src/fundamentals-of-ai-and-kr/module1/sections/_generative_planning.tex @@ -0,0 +1,328 @@ +\chapter{Generative planning} + +\begin{description} + \item[Generative planning] \marginnote{Generative planning} + Offline planning that creates the entire plan before execution based on + a snapshot of the current state of the world. + It relies on the following assumptions: + \begin{descriptionlist} + \item[Atomic time] + Actions cannot be interrupted. + \item[Determinism] + Actions are deterministic. + \item[Closed world] + The initial state is fully known, + what is not in the initial state is considered false (which is different from unknown). + \item[No interference] Only the execution of the plan changes the state of the world. + \end{descriptionlist} +\end{description} + + +\section{Linear planning} +\marginnote{Linear planning} +Formulates the planning problem as a search problem where: +\begin{itemize} + \item Nodes contain the state of the world. + \item Edges represent possible actions. +\end{itemize} +Produces a totally ordered list of actions. + +The direction of the search can be: +\begin{descriptionlist} + \item[Forward] \marginnote{Forward search} + Starting from the initial state, the search terminates when a state containing a superset of the goal is reached. + \item[Backward] \marginnote{Backward search} + Starting from the goal, the search terminates when a state containing a subset of the initial state is reached. + + Goal regression is used to reduce the goal into sub-goals. + Given a (sub-)goal $G$ and a rule (action) $R$ with delete-list (states that are false after the action) \texttt{d\_list} + and add-list (states that are true after the action) \texttt{a\_list}, regression of $G$ through $R$ is define as: + \[ + \begin{split} + \texttt{regr[$G$, $R$]} &= \texttt{true} \text{ if } G \in \texttt{a\_list} \text{ (i.e. regression possible)} \\ + \texttt{regr[$G$, $R$]} &= \texttt{false} \text{ if } G \in \texttt{d\_list} \text{ (i.e. regression not possible)} \\ + \texttt{regr[$G$, $R$]} &= G \text{ otherwise} \text{ (i.e. $R$ does not influence $G$)} \\ + \end{split} + \] + + \begin{example}[Moving blocks] + Given the action \texttt{unstack(X, Y)} with: + \[ + \begin{split} + \texttt{d\_list} &= \{ \texttt{handempty}, \texttt{on(X, Y)}, \texttt{clear(X)} \} \\ + \texttt{a\_list} &= \{ \texttt{holding(X)}, \texttt{clear(Y)} \} + \end{split} + \] + We have that: + \[ + \begin{split} + \texttt{regr[holding(b), unstack(b, Y)]} &= \texttt{true} \\ + \texttt{regr[handempty, unstack(X, Y)]} &= \texttt{false} \\ + \texttt{regr[ontable(c), unstack(X, Y)]} &= \texttt{ontable(c)} \\ + \texttt{regr[clear(c), unstack(X, Y)]} &= \begin{cases} + \texttt{true} & \text{if \texttt{Y}=\texttt{c}} \\ + \texttt{clear(c)} & \text{otherwise} + \end{cases} + \end{split} + \] + \end{example} +\end{descriptionlist} + + +\subsection{Deductive planning} +\marginnote{Deductive planning} +Formulates the planning problem using first order logic to represent states, goals and actions. +Plans are generated as theorem proofs. + +\subsubsection{Green's formulation} +\marginnote{Green's formulation} +Green's formulation is based on \textbf{situation calculus}. +To find a plan, the goal is negated and it is proven that it leads to an inconsistency. + +The main concepts are: +\begin{descriptionlist} + \item[Situation] + Properties (fluents) that hold in a given state \texttt{s}. + \begin{example}[Moving blocks] + To denote that \texttt{ontable(c)} holds in a state \texttt{s}, we use the axiom: + \[ \texttt{ontable(c, s)} \] + \end{example} + The operator \texttt{do} allows to evolve the state such that: + \[ \texttt{do(A, S)} = \texttt{S'} \] + \texttt{S'} is the new state obtained by applying the action \texttt{A} in the state \texttt{S}. + + \item[Actions] + Define the pre-condition and post-condition fluents of an action in the form: + \[ \texttt{pre-conditions} \rightarrow \texttt{post-conditions} \] + Applying the equivalence $A \rightarrow B \equiv \lnot A \vee B$, actions can be described by means of disjunctions. + \begin{example}[Moving blocks] + The action \texttt{stack(X, Y)} has pre-conditions \texttt{holding(X)} and \texttt{clear(Y)}, and + post-conditions \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handfree}. + Its representation in Green's formulation is: + \[ + \begin{split} + \texttt{holding(X, S)} \land \texttt{clear(Y, S)} &\rightarrow \\ + &\texttt{on(X, Y, do(stack(X, Y), s))} \land \\ + &\texttt{clear(X, do(stack(X, Y), s))} \land \\ + &\texttt{handfree(do(stack(X, Y), s))} \\ + \end{split} + \] + \end{example} + + \item[Frame axioms] + Besides the effects of actions, each state also have to define for all non-changing fluents their frame axioms. + If the problem is complex, the number of frame axioms becomes unreasonable. + \begin{example}[Moving blocks] + \[ \texttt{on(U, V, S)}, \texttt{diff(U, X)} \rightarrow \texttt{on(U, V, do(move(X, Y, Z), S))} \] + \end{example} +\end{descriptionlist} + + +\begin{example}[Moving blocks] + The initial state is described by the following axioms:\\[0.5em] + \begin{minipage}{.3\linewidth} + \centering + \texttt{on(a, d, s0)} \\ + \texttt{on(b, e, s0)} \\ + \texttt{on(c, f, s0)} \\ + \texttt{clear(a, s0)} \\ + \texttt{clear(b, s0)} \\ + \end{minipage} + \begin{minipage}{.3\linewidth} + \centering + \texttt{clear(c, s0)} \\ + \texttt{clear(g, s0)} \\ + \texttt{diff(a, b)} \\ + \texttt{diff(a, c)} \\ + \texttt{diff(a, d)} \dots \\ + \end{minipage} + \begin{minipage}{.3\linewidth} + \centering + \includegraphics[width=\linewidth]{img/_moving_block_example_green.pdf} + \end{minipage}\\[0.5em] + + For simplicity, we only consider the action \texttt{move(X, Y, Z)} that moves \texttt{X} from \texttt{Y} to \texttt{Z}. + It is defined as: + \[ + \begin{split} + \texttt{clear(X, S)}&, \texttt{clear(Z, S)}, \texttt{on(X, Y, S)}, \texttt{diff(X, Z)} \rightarrow \\ + &\texttt{clear(Y, do(move(X, Y, Z), S))}, \texttt{on(X, Z, do(move(X, Y, Z), S))} + \end{split} + \] + This action can be translated into the following effect axioms: + \[ + \begin{split} + \lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\ + &\texttt{clear(Y, do(move(X, Y, Z), S))} + \end{split} + \] + \[ + \begin{split} + \lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\ + &\texttt{on(X, Z, do(move(X, Y, Z), S))} + \end{split} + \] +\end{example} + +Given the goal \texttt{on(a, b, s1)}, we prove that $\lnot\texttt{on(a, b, s1)}$ leads to an inconsistency. +We decide to make the following substitutions: +\[ \{ \texttt{X}/\texttt{a}, \texttt{Z}/\texttt{b}, \texttt{s1}/\texttt{do(move(a, Y, b), S)} \} \] +The premise of \texttt{move} leads to an inconsistency (when applying \texttt{move} its premise is false): +\begin{center} + \begin{tabular}{c|c|c|c} + $\lnot\texttt{clear(a, S)}$ & $\lnot\texttt{clear(b, S)}$ & $\lnot\texttt{on(a, Y, S)}$ & $\lnot\texttt{diff(a, b)}$ \\ + False with $\{ \texttt{S}/\texttt{s0} \}$ & False with $\{ \texttt{S}/\texttt{s0} \}$ + & False with $\{ \texttt{S}/\texttt{s0}, \texttt{Y}/\texttt{d} \}$ & False + \end{tabular} +\end{center} +Therefore, the substitution $\{ \texttt{s1}/\texttt{do(move(a, Y, b), S)} \}$ defines the plan to reach the goal \texttt{on(a, b, s1)}. + + +\subsubsection{Kowalsky's formulation} +\marginnote{Kowalsky's formulation} +Kowalsky's formulation avoids the frame axioms problem by using a set of fixed predicates: +\begin{descriptionlist} + \item[\texttt{holds(rel, s/a)}] + Describes the relations \texttt{rel} that are true in a state \texttt{s} or after the execution of an action \texttt{a}. + \item[\texttt{poss(s)}] + Indicates if a state \texttt{s} is possible. + \item[\texttt{pact(a, s)}] + Indicates if an action \texttt{a} can be executed in a state \texttt{s}. +\end{descriptionlist} +Actions can be described as: +\[ \texttt{poss(S)} \land \texttt{pact(A, S)} \rightarrow \texttt{poss(do(A, S))} \] + +In the Kowalsky's formulation, each action requires a frame assertion (in Green's formulation, each state requires frame axioms). + +\begin{example}[Moving blocks] + An initial state can be described by the following axioms:\\[0.5em] + \begin{minipage}{.35\linewidth} + \centering + \texttt{holds(on(a, b), s0)} \\ + \texttt{holds(ontable(b), s0)} \\ + \texttt{holds(ontable(c), s0)} \\ + \end{minipage} + \begin{minipage}{.35\linewidth} + \centering + \texttt{holds(clear(a), s0)} \\ + \texttt{holds(clear(c), s0)} \\ + \texttt{holds(handempty, s0)} \\ + \texttt{poss(s0)} \\ + \end{minipage} + \begin{minipage}{.2\linewidth} + \centering + \includegraphics[width=0.6\linewidth]{img/_moving_block_example_kowalsky.pdf} + \end{minipage}\\[0.5em] +\end{example} + +\begin{example}[Moving blocks] + The action \texttt{unstack(X, Y)} has: + \begin{descriptionlist} + \item[Pre-conditions] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty} + \item[Effects] \phantom{} + \begin{description} + \item[Add-list] \texttt{holding(X)} and \texttt{clear(Y)} + \item[Delete-list] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty} + \end{description} + \end{descriptionlist} + + Its description in Kowalsky's formulation is: + \begin{descriptionlist} + \item[Pre-conditions] + \[ + \begin{split} + \texttt{holds(on(X, Y), S)}&, \texttt{holds(clear(X), S)}, \texttt{holds(handempty, S)} \rightarrow \\ + &\texttt{pact(unstack(X, Y), S)} + \end{split} + \] + + \item[Effects] (use add-list) + \[ \texttt{holds(holding(X), do(unstack(X, Y), S))} \] + \[ \texttt{holds(clear(Y), do(unstack(X, Y), S))} \] + + \item[Frame condition] (uses delete-list) + \[ + \begin{split} + \texttt{holds(V, S)}&, \texttt{V} \neq \texttt{on(X, Y)}, \texttt{V} \neq \texttt{clear(X)}, \texttt{V} \neq \texttt{handempty} + \rightarrow \\ + & \texttt{holds(V, do(unstack(X, Y), S))} + \end{split} + \] + \end{descriptionlist} +\end{example} + + +\subsection{STRIPS} +\marginnote{STRIPS} +STRIPS (Stanford Research Institute Problem Solver) is an ad-hoc algorithm +for linear planning resolution. +The elements of the problem are represented as: +\begin{descriptionlist} + \item[State] represented with its true fluents. + \item[Goal] represented with its true fluents. + \item[Action] represented using three lists: + \begin{descriptionlist} + \item[Preconditions] Fluents that are required to be true in order to apply the action. + \item[Delete-list] Fluents that become false after the action. + \item[Add-list] Fluents that become true after the action. + \end{descriptionlist} + Add-list and delete-list can be combined in an effect list with positive (add-list) and negative (delete-list) axioms. + + \begin{description} + \item[STRIPS assumption] Everything that is not in the add-list or delete-list is unchanged in the next state. + \end{description} +\end{descriptionlist} + +STRIPS uses two data structures: +\begin{descriptionlist} + \item[Goal stack] Does a backward search to reach the initial state. + \item[Current state] Represents the forward application of the actions found using the goal stack. +\end{descriptionlist} + +\begin{algorithm} +\caption{STRIPS} +\begin{lstlisting}[mathescape=true] +def strips(problem): + goal_stack = Stack() + current_state = State(problem.initial_state) + goal_stack.push(problem.goal) + plan = [] + while not goal_stack.empty(): + if (goal_stack.top() is a single/conjunction of goals and + there is a substitution $\theta$ that makes it $\subseteq$ current_state): + A = goal_stack.pop() + $\theta$ = find_substitution(A, current_state) + goal_stack.apply_substitution($\theta$) + elif goal_stack.top() is a single goal: + R = rule with a $\in$ R.add_list + _ = goal_stack.pop() # Pop goal + goal_stack.push(R) + goal_stack.push(R.preconditions) + elif goal_stack.top() is a conjunction of goals: + for g in permutation(goal_stack.top()): + goal_stack.push(g) + # Note that there is no pop + elif goal_stack.top() is an action: + action = goal_stack.pop() + current_state.apply(action) + plan.append(action) + return plan +\end{lstlisting} +\end{algorithm} + +\begin{example}[Moving blocks] + \begin{center} + \includegraphics[trim={0 32.2cm 0 0}, clip, width=0.85\textwidth]{img/_strips_example.pdf} + \end{center} + \begin{center} + \includegraphics[trim={0 0 0 17.5cm}, clip, width=0.85\textwidth]{img/_strips_example.pdf} + \end{center} +\end{example} + +Since there are non-deterministic choices, the search space may become very large. +Heuristics may be used to avoid this. + +Conjunction of goals are solved separately, but this could lead to the \marginnote{Sussman anomaly} \textbf{Sussman anomaly} +where a sub-goal destroys what another sub-goal has done. +For this reason, when a conjunction is encountered, it is not immediately popped from the goal stack +and is left as a final check. \ No newline at end of file diff --git a/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex b/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex index e50c2c8..4e1a57b 100644 --- a/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex +++ b/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex @@ -1,4 +1,4 @@ -\chapter{Automated planning} +\chapter{Automated planning definitions} \begin{description} \item[Automated planning] \marginnote{Automated planning} @@ -50,257 +50,3 @@ An action applied to the real world may have unexpected effects due to uncertainty. \end{descriptionlist} \end{description} - - -\section{Generative planning} - -\begin{description} - \item[Generative planning] \marginnote{Generative planning} - Offline planning that creates the entire plan before execution based on - a snapshot of the current state of the world. - It relies on the following assumptions: - \begin{descriptionlist} - \item[Atomic time] - Actions cannot be interrupted. - \item[Determinism] - Actions are deterministic. - \item[Closed world] - The initial state is fully known, - what is not in the initial state is considered false (which is different from unknown). - \item[No interference] Only the execution of the plan changes the state of the world. - \end{descriptionlist} -\end{description} - - -\subsection{Linear planning} -\marginnote{Linear planning} -Formulates the planning problem as a search problem where: -\begin{itemize} - \item Nodes contain the state of the world. - \item Edges represent possible actions. -\end{itemize} -Produces a totally ordered list of actions. - -The direction of the search can be: -\begin{descriptionlist} - \item[Forward] \marginnote{Forward search} - Starting from the initial state, the search terminates when a state containing a superset of the goal is reached. - \item[Backward] \marginnote{Backward search} - Starting from the goal, the search terminates when a state containing a subset of the initial state is reached. - - Goal regression is used to reduce the goal into sub-goals. - Given a (sub-)goal $G$ and a rule (action) $R$ with delete-list (states that are false after the action) \texttt{d\_list} - and add-list (states that are true after the action) \texttt{a\_list}, regression of $G$ through $R$ is define as: - \[ - \begin{split} - \texttt{regr[$G$, $R$]} &= \texttt{true} \text{ if } G \in \texttt{a\_list} \text{ (i.e. regression possible)} \\ - \texttt{regr[$G$, $R$]} &= \texttt{false} \text{ if } G \in \texttt{d\_list} \text{ (i.e. regression not possible)} \\ - \texttt{regr[$G$, $R$]} &= G \text{ otherwise} \text{ (i.e. $R$ does not influence $G$)} \\ - \end{split} - \] - - \begin{example}[Moving blocks] - Given the action \texttt{unstack(X, Y)} with: - \[ - \begin{split} - \texttt{d\_list} &= \{ \texttt{handempty}, \texttt{on(X, Y)}, \texttt{clear(X)} \} \\ - \texttt{a\_list} &= \{ \texttt{holding(X)}, \texttt{clear(Y)} \} - \end{split} - \] - We have that: - \[ - \begin{split} - \texttt{regr[holding(b), unstack(b, Y)]} &= \texttt{true} \\ - \texttt{regr[handempty, unstack(X, Y)]} &= \texttt{false} \\ - \texttt{regr[ontable(c), unstack(X, Y)]} &= \texttt{ontable(c)} \\ - \texttt{regr[clear(c), unstack(X, Y)]} &= \begin{cases} - \texttt{true} & \text{if \texttt{Y}=\texttt{c}} \\ - \texttt{clear(c)} & \text{otherwise} - \end{cases} - \end{split} - \] - \end{example} -\end{descriptionlist} - - -\subsection{Deductive planning} -\marginnote{Deductive planning} -Formulates the planning problem using first order logic to represent states, goals and actions. -Plans are generated as theorem proofs. - -\subsubsection{Green's formulation} -\marginnote{Green's formulation} -Green's formulation is based on \textbf{situation calculus}. -To find a plan, the goal is negated and it is proven that it leads to an inconsistency. - -The main concepts are: -\begin{descriptionlist} - \item[Situation] - Properties (fluents) that hold in a given state \texttt{s}. - \begin{example}[Moving blocks] - To denote that \texttt{ontable(c)} holds in a state \texttt{s}, we use the axiom: - \[ \texttt{ontable(c, s)} \] - \end{example} - The operator \texttt{do} allows to evolve the state such that: - \[ \texttt{do(A, S)} = \texttt{S'} \] - \texttt{S'} is the new state obtained by applying the action \texttt{A} in the state \texttt{S}. - - \item[Actions] - Define the pre-condition and post-condition fluents of an action in the form: - \[ \texttt{pre-conditions} \rightarrow \texttt{post-conditions} \] - Applying the equivalence $A \rightarrow B \equiv \lnot A \vee B$, actions can be described by means of disjunctions. - \begin{example}[Moving blocks] - The action \texttt{stack(X, Y)} has pre-conditions \texttt{holding(X)} and \texttt{clear(Y)}, and - post-conditions \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handfree}. - Its representation in Green's formulation is: - \[ - \begin{split} - \texttt{holding(X, S)} \land \texttt{clear(Y, S)} &\rightarrow \\ - &\texttt{on(X, Y, do(stack(X, Y), s))} \land \\ - &\texttt{clear(X, do(stack(X, Y), s))} \land \\ - &\texttt{handfree(do(stack(X, Y), s))} \\ - \end{split} - \] - \end{example} - - \item[Frame axioms] - Besides the effects of actions, each state also have to define for all non-changing fluents their frame axioms. - If the problem is complex, the number of frame axioms becomes unreasonable. - \begin{example}[Moving blocks] - \[ \texttt{on(U, V, S)}, \texttt{diff(U, X)} \rightarrow \texttt{on(U, V, do(move(X, Y, Z), S))} \] - \end{example} -\end{descriptionlist} - - -\begin{example}[Moving blocks] - The initial state is described by the following axioms:\\[0.5em] - \begin{minipage}{.3\linewidth} - \centering - \texttt{on(a, d, s0)} \\ - \texttt{on(b, e, s0)} \\ - \texttt{on(c, f, s0)} \\ - \texttt{clear(a, s0)} \\ - \texttt{clear(b, s0)} \\ - \end{minipage} - \begin{minipage}{.3\linewidth} - \centering - \texttt{clear(c, s0)} \\ - \texttt{clear(g, s0)} \\ - \texttt{diff(a, b)} \\ - \texttt{diff(a, c)} \\ - \texttt{diff(a, d)} \dots \\ - \end{minipage} - \begin{minipage}{.3\linewidth} - \centering - \includegraphics[width=\linewidth]{img/_moving_block_example_green.pdf} - \end{minipage}\\[0.5em] - - For simplicity, we only consider the action \texttt{move(X, Y, Z)} that moves \texttt{X} from \texttt{Y} to \texttt{Z}. - It is defined as: - \[ - \begin{split} - \texttt{clear(X, S)}&, \texttt{clear(Z, S)}, \texttt{on(X, Y, S)}, \texttt{diff(X, Z)} \rightarrow \\ - &\texttt{clear(Y, do(move(X, Y, Z), S))}, \texttt{on(X, Z, do(move(X, Y, Z), S))} - \end{split} - \] - This action can be translated into the following effect axioms: - \[ - \begin{split} - \lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\ - &\texttt{clear(Y, do(move(X, Y, Z), S))} - \end{split} - \] - \[ - \begin{split} - \lnot\texttt{clear(X, S)} &\vee \lnot\texttt{clear(Z, S)} \vee \lnot\texttt{on(X, Y, S)} \vee \lnot\texttt{diff(X, Z)} \vee \\ - &\texttt{on(X, Z, do(move(X, Y, Z), S))} - \end{split} - \] -\end{example} - -Given the goal \texttt{on(a, b, s1)}, we prove that $\lnot\texttt{on(a, b, s1)}$ leads to an inconsistency. -We decide to make the following substitutions: -\[ \{ \texttt{X}/\texttt{a}, \texttt{Z}/\texttt{b}, \texttt{s1}/\texttt{do(move(a, Y, b), S)} \} \] -The premise of \texttt{move} leads to an inconsistency (when applying \texttt{move} its premise is false): -\begin{center} - \begin{tabular}{c|c|c|c} - $\lnot\texttt{clear(a, S)}$ & $\lnot\texttt{clear(b, S)}$ & $\lnot\texttt{on(a, Y, S)}$ & $\lnot\texttt{diff(a, b)}$ \\ - False with $\{ \texttt{S}/\texttt{s0} \}$ & False with $\{ \texttt{S}/\texttt{s0} \}$ - & False with $\{ \texttt{S}/\texttt{s0}, \texttt{Y}/\texttt{d} \}$ & False - \end{tabular} -\end{center} -Therefore, the substitution $\{ \texttt{s1}/\texttt{do(move(a, Y, b), S)} \}$ defines the plan to reach the goal \texttt{on(a, b, s1)}. - - -\subsubsection{Kowalsky's formulation} -\marginnote{Kowalsky's formulation} -Kowalsky's formulation avoids the frame axioms problem by using a set of fixed predicates: -\begin{descriptionlist} - \item[\texttt{holds(rel, s/a)}] - Describes the relations \texttt{rel} that are true in a state \texttt{s} or after the execution of an action \texttt{a}. - \item[\texttt{poss(s)}] - Indicates if a state \texttt{s} is possible. - \item[\texttt{pact(a, s)}] - Indicates if an action \texttt{a} can be executed in a state \texttt{s}. -\end{descriptionlist} -Actions can be described as: -\[ \texttt{poss(S)} \land \texttt{pact(A, S)} \rightarrow \texttt{poss(do(A, S))} \] - -In the Kowalsky's formulation, each action requires a frame assertion (in Green's formulation, each state requires frame axioms). - -\begin{example}[Moving blocks] - An initial state can be described by the following axioms:\\[0.5em] - \begin{minipage}{.35\linewidth} - \centering - \texttt{holds(on(a, b), s0)} \\ - \texttt{holds(ontable(b), s0)} \\ - \texttt{holds(ontable(c), s0)} \\ - \end{minipage} - \begin{minipage}{.35\linewidth} - \centering - \texttt{holds(clear(a), s0)} \\ - \texttt{holds(clear(c), s0)} \\ - \texttt{holds(handempty, s0)} \\ - \texttt{poss(s0)} \\ - \end{minipage} - \begin{minipage}{.2\linewidth} - \centering - \includegraphics[width=0.6\linewidth]{img/_moving_block_example_kowalsky.pdf} - \end{minipage}\\[0.5em] -\end{example} - -\begin{example}[Moving blocks] - The action \texttt{unstack(X, Y)} has: - \begin{descriptionlist} - \item[Pre-conditions] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty} - \item[Effects] \phantom{} - \begin{description} - \item[Add-list] \texttt{holding(X)} and \texttt{clear(Y)} - \item[Delete-list] \texttt{on(X, Y)}, \texttt{clear(X)} and \texttt{handempty} - \end{description} - \end{descriptionlist} - - Its description in Kowalsky's formulation is: - \begin{descriptionlist} - \item[Pre-conditions] - \[ - \begin{split} - \texttt{holds(on(X, Y), S)}&, \texttt{holds(clear(X), S)}, \texttt{holds(handempty, S)} \rightarrow \\ - &\texttt{pact(unstack(X, Y), S)} - \end{split} - \] - - \item[Effects] (use add-list) - \[ \texttt{holds(holding(X), do(unstack(X, Y), S))} \] - \[ \texttt{holds(clear(Y), do(unstack(X, Y), S))} \] - - \item[Frame condition] (uses delete-list) - \[ - \begin{split} - \texttt{holds(V, S)}&, \texttt{V} \neq \texttt{on(X, Y)}, \texttt{V} \neq \texttt{clear(X)}, \texttt{V} \neq \texttt{handempty} - \rightarrow \\ - & \texttt{holds(V, do(unstack(X, Y), S))} - \end{split} - \] - \end{descriptionlist} -\end{example} \ No newline at end of file