A KobrA and OCL model for backward
state-space search planning and partial
order-planning with STRIPS
Ana Emília ([email protected])
Jairson Vitorino ([email protected])
Setembro, 2004
KobrA method overview
• Developed at Fraunhofer IESE
• Integrates:
– Component based development (CBD)
– Model-driven architecture (MDA)
– Product-line approach
• Komponents creation applied on a
recursive fashion
KobrA artifacts
Object Constraint Language
• Part of the UML standard.
• Formal Specification Language.
Precise semantics.
• (Quite) easy to read syntax.
• Why? Because UML is not enough!
An OCL Example
Natural language description
OCL statement
Age Vehicle´s owner must be at least 18
context Vehicle
inv: self. Owner. age >= 18
Nobody can have more than 3 vehicles
context Person
inv: self.fleet–>size <= 3
Everyone´s car is black
context Person
inv: self.fleet–>forAll(v | v.colour = #black)
Nobody can have more than 3 black vehicles
context Person
inv: self.fleet–>select(v | v.colour = #black)–>size <= 3
Nobody can have more than 3 black vehicles
context Person
inv: self.fleet–>iterate(v; acc:Integer=0
| if (v.colour=#black)
then acc + 1 else acc endif) <=3
A person younger than 18 cannot own a car
context Person
inv: age<18 implies self.fleet–>forAll(v | not v.oclIsKindOf(Car))
There is one red car
context Car
inv: Car.allInstances()->exists(c | c.colour=#red)
The Planning Problem
• Coming up with a sequence of actions that
will achieve a goal
• STRIPS planning language: comes in
propositional or first-order logic flavor
• STRIPS represents states, goals and
actions
StripsSearchPlanner
StripsSearchPlanner modelling
•
Strips_States
– Positive propositional literal conjunction
– Positive First-order literals conjunction
– Ground
– Function-free
– Closed-world assumption
•
Strips_Goal  Strips_States
•
Strips_actions
– Name
– Parameter_List
– Precondition
• Positive function free literals conjunction
• Literal.Variables  Parameter_List.Variables
– Effect
• Function freee literals conjunction
Basic algorithm
•
Do
1.
2.
3.
4.
•
Find Action A consistent and relevant if not possible
return failure
Goal.remove(A.effect.positiveLiterals)
Goal.add(A.precondition.PositiveLiterals)
If checkIfIsReached (InitialState) return Solution
While goal not achieved
StateSearchPlanner Komponent Specification
STRUCTURAL MODEL
StateSearchPlanner
<<Subject>>
Plan
State
0..*
Action
Name: string
ParameterList: List of
variables
Effect: List of Literals
Precondition: List of
Positive Literals
EffectPositiveLiterals()
EffectNegativeLiterals()
Current: List of
Positive Literals
Goal
StateSearchPlanner Komponent Realization
StateSearchPlanner Komponent
Realization Beahviour model
StateChart
Functional Model
OCL statement
Explanation
context StateSearchPlanner::predecessor():Action
pre true
pos result = self.avaliableActionList->select(a|true) and
self.actionList->size = self.actionList@pre->size + 1
O resultado do método predecessor() é uma ação e o
tamanho da lista de ações do plano é incrementado de
um.
context Action inv actionConsistentConstraint : self .
effect . literal -> forAll ( l | not l . isPositive implies not
self . owner . goal . current -> includes ( l ) )
Nenhum literal positive da ação Action pode ocorrer nos
literais do objetivo.
context Action inv actionRelevantConstraint : self .
effect . literal -> exists ( l | l . isPositive and self . owner
. goal . current -> includes ( l ) )
context
AvailableAction
inv
variablePreconditionConstraint : self . precondition .
literal -> includes ( parameterList . name ) implies self ->
includes ( parameterList . name )
context AvailableAction inv variableEffectConstraint :
self . effect . literal -> includes ( parameterList . name )
implies self -> includes ( parameterList . name )
A ação na lista de planos precisa ser relevante, isto é,
existe pelo menos um literal positivo do efeito que
também pertence aos literais do objetivo.
Todas as variáveis dos parâmetros das precondições
precisam pertencer a listas de parâmetros da ação.
Todas as variáveis dos parâmetros dos efeitos precisam
pertencer a listas de parâmetros da ação.
Functional Model
OCL statement
Explanation
context AvaliableAction ::effectPositiveLiterals() : List
pre true
post result = {1..self.effect.literal->size} -> iterate(x; y:List()=List{}
| if (self.effect.literal.isPositive) then y->includes(sef.effect.literal)
else y endiff )
O resultado do método
effectPositiveLiterals() é a lista de
literais positivos dos efeitos.
context AvaliableAction ::effectNegativeLiterals() : List
pre true
post result = {1..self.effect.literal->size} -> iterate(x; y:List()=List{}
| if not (self.effect.literal.isPositive) then y>includes(sef.effect.literal) else y endiif)
O resultado do método
effectNegativeLiterals() é a lista de
literais negativos dos efeitos.
context State inv : self . current -> forAll (L | L.isPositive = true )
Todos os literais do estado state (estado
inicial) são positivos
POPPlanner
StripsPOPPlanner modelling
•
Strips_States
– Positive propositional literal conjunction
– Positive First-order literals conjunction
– Ground
– Function-free
– Closed-world assumption
•
Strips_Goal  Strips_States
•
Strips_actions
– Name
– Parameter_List
– Precondition
• Positive function free literals conjunction
• Literal.Variables  Parameter_List.Variables
– Reserved actions: START and FINISH (POP algorithm)
– Effect
• Function freee literals conjunction
Actions set
•
•
Empty plan contains {START,FINISH}
START
– No precondition
– Effect: all literals composing the initial state
•
FINISH
– No effects
– Preconditions: literals composing the goal
Ordering constraints
• A<B
– Action A must be executed before action B
– A < B and B < A are not allowed (loops)
Causal Links
• A
p
B
– Effect of action A is precondition p of action B
– Cannot be canceled by other actions executed
between A and B execution
• Ex.: RightSock
RightSockOn
RightShoe
• C conflicts with causal link causal p:
– C has effect  p
– C may happen between A and B according to
ordering restrictions
StripsPOPPlanner Komponent Specification
STRUCTURAL MODEL
Ordering
previous: Action
Current : Action
State
POPPlan
*
Current: List of
Positive Literals
listOfOrederedActions:
Ordering
successor()
linearization()
Action
CausalLinks
precondition:literal
*
Constraints:
Goal.Instance  State.Instance
Goal
Name: string
ParameterList: List of
variables
Effect: List of Literals
Precondition: List of
Positive Literals
CLList
EffectPositiveLiterals()
EffectNegativeLiterals()
Actions.Precondition.variables  Action.ParameterList.Variables
0..1
StripsPOPPlanner Komponent Specification
STRUCTURAL MODEL
Ordering
previous: Action
Current : Action
*
1
State
POPPlan
Current: List of
Positive Literals
listOfOrederedActions:
Ordering
successor()
linearization()
Action
CausalLinks
precondition:literal
*
Goal
Name: string
ParameterList: List of
variables
Effect: List of Literals
Precondition: List of
Positive Literals
CLList
EffectPositiveLiterals()
EffectNegativeLiterals()
CL : List of CausalLinks
0..1
Constraints:Contex Ordering: Invariant
For All objects ordering O1 and O2 there cannot be
O1.previous=O2.current or O1.current = O2.previous. // this means NO LOOPS
StripsPOPPlanner Komponent Realization
Structural Model
StripsPOPPlanner Komponent Realization
Functional Model
Project Analysis
• KobrA:
– small problems, only on interaction
– Small structural models
– Knowledge in embedded in Constraints and methods
• OCL: Using OCL forces a better understanding of the model
and better specification
• Drawbacks:
– Lack of better examples of OCL
– Tool used (Poseidon) do not conform to OCL current
specification
– There is no Case tool for KobrA
Conclusions
• OCL captures some behaviour aspects
• OCL does not include side effects
• Further investigation is necessary to
use OCL in statechart and other
behavioural diagrams
• It may be necessary to extend KobrA
to provide bottom-up modeling and
better COTS integration
Download

A UML OCL model for search based plan and popPlanner