Ontologies Reasoning Components Agents Simulations A UML2 Profile for Multi-Agent Systems Jacques...

49
Ontologi es Reasonin g Component s Agents Simulatio ns A UML2 Profile for A UML2 Profile for Multi-Agent Systems Multi-Agent Systems Jacques Robin
  • date post

    19-Dec-2015
  • Category

    Documents

  • view

    220
  • download

    0

Transcript of Ontologies Reasoning Components Agents Simulations A UML2 Profile for Multi-Agent Systems Jacques...

OntologiesReasoningComponentsAgentsSimulations

A UML2 Profile forA UML2 Profile forMulti-Agent SystemsMulti-Agent Systems

Jacques Robin

UML2 ProfilesUML2 Profiles

Self-extension mechanism to customize UML2 towards: Specific application families (i.e., multi-agent simulations) Specific implementation platforms (i.e., EJB, .net, web services)

A profile is a set of stereotypes Concrete syntax: <<string>> and/or icon

Stereotypes are specializations of meta-classes from the UML2 meta-model

Package Class

Property Association

Profile

ProfileApplication*

**

meta-class

ExtensionStereotype*

Image

icon

ExtensionEnd*

UML2 Superstructure Meta-Model

UML2 Extension/Customization Language Meta-Model

MOF Meta-Model of a Simple Multi-Agent MOF Meta-Model of a Simple Multi-Agent Simulations Modeling Language (MASML)Simulations Modeling Language (MASML)

MAS2..*

EnvironmentAgent

Sensor Actuator

1..* 1..*

Percept1..*

AgentAction1..*

MAS

ReasoningComponent1..*

Agent

ReflexAgent ReflexComponent

ReflexAgent

ReasoningComponent

Sensor

Actuator1..*

1..*

AutomataAgentGoalBasedAgent

Goal

GoalInitializationComponent

GoalUpdateComponent

GoalBasedBehaviorStrategyComponent

ReasoningComponent

GoalBasedAgent

3..*

EnvironmentStateModel

ModelBasedBehaviorStrategyComponent

AgentAutomataAgent

EnvironmentStateModel

ModelInitializationComponent

PerceptInterpretationComponent

RamificationComponent

ModelBasedBehaviorStrategyComponent

ReasoningComponent

AutomataAgent

Actuator

Sensor4..*

1..*

MOF Meta-Model of a Simple Multi-Agent MOF Meta-Model of a Simple Multi-Agent Simulations Modeling Language (MASML)Simulations Modeling Language (MASML)

Agent

KBAgent KBComponent

KBAgent

ReasoningComponent

1..*

KnowledgeBase

PersistentKB VolatileKB

0..*

KBSentence1..*

1..*

ReflexAgent

ReflexKBAgent ReflexKBComponent

ReflexKBAgent

ReflexComponent

KBAgent KBComponent PersistentKB

ReflexKB

context ReflexKBComponent inv VolatileKB.isEmpty()

AutomataKBAgent

AutomataAgent

AutomataKBAgent KBComponent

KBAgent EnvironmentStateModelKB

4..*

VolatileKB EnvironmentStateModel

4 ..*

GoalBasedKBAgent

GoalBasedAgent

GoalBasedKBAgent KBComponent

KBAgent GoalKB EnvironmentStateModelKB

6..*

VolatileKB Goal EnvironmentStateModel

4 ..*3 ..*

UML2 Profile for MASUML2 Profile for MAS

MASML Meta-Model UML2 Meta-Model

MAS

Environment

Agent

Sensor

Actuator

Percept

AgentAction

ReasoningComponent

EnvironmentStateModel

KnowledgeBase

KBSentence

Component

isActive = true

Component

Port

Signal

Model Package

PackagableElement

TypedElement

*

Full Classical First-Order Logic Full Classical First-Order Logic MetamodelMetamodel

arg

1..2

<<enumeration>>Connective

Formula

Functor: Connective

QuantifierExpression

Functor: Quantifier

Atom

PredicateSymbol

VariableSymbol

ConstantSymbol

FunctionSymbol

Symbol

name: String

FunctionalTerm

NonFunctionalTerm

Term

<<enumeration>>Quantifier

*

arg

1..2 arg

*

functor

functor

*

arg*

arg

1..*

1..* 1..*

Fluent Calculus MetamodelFluent Calculus Metamodel

arg

1..2

<<enumeration>>Connective

Formula

Functor: Connective

QuantifierExpression

Functor: Quantifier

Atom

PredicateSymbol

VariableSymbol

ConstantSymbol

FunctionSymbol

Symbol

name: String

FunctionalTerm

NonFunctionalTerm

Term

<<enumeration>>Quantifier

*

arg

1..2 arg

*

functor

functor

*

arg*

arg

1..*

Property

EternalFluent

Object

State*

HoldsAtomPureStateFormula

PrecondFormula

Agent Action1..* * *

PrecondAtom

Situation

*

UML2 Profile for the Fluent CalculusUML2 Profile for the Fluent Calculus

State

Fluent Property

Constraint

Case-Studies for Agent andCase-Studies for Agent andGame Related ExtensionsGame Related Extensions

Small scale: soccer penalty simulation

Large scale: Rollerslam simulation

3

2 k

1 s, b

Y X 1 2 3

3

2 b k

1 s

Y X 1 2 3

3 b

2 k

1 s

Y X 1 2 3

action(s,legs,shoot(2))action(k,legs,move(right))

3

2 k, b

1 s

Y X 1 2 3

action(k,hands,grab(yes))

3

2 k, b

1 s

Y X 1 2 3

gameOver, goal

gameOver, nogoal

action(s,legs,shoot(3))action(k,legs,move(right))

actions(k,legs,move(right))

PenaltySim Specification Class PenaltySim Specification Class DiagramDiagram

<<enumeration>>SimStateKind

createdrunningstopped

<<Subject Component>><<MAS>>

PenaltySim

<<Interface>>IPenaltySim

<<create>> +new()+run()+stop()

+getSimState(): SimStateKind

<<Subject Component>><<MAS>>

PenaltySim

-state:SimStateKind

<<create>> -new():-getSimState(): SimStateKind

-run()-stop()

- connect(RIPort:Port,PIPort:Port)

PenaltySim SpecificationPenaltySim SpecificationComponent DiagramComponent Diagram

PPenaltySim

IPenaltySim

PenaltySim SpecificationPenaltySim SpecificationProtocol State MachineProtocol State Machine

running stopped

new()

run()

created

stop()

run()

PenaltySim Realization Class PenaltySim Realization Class Diagram 1Diagram 1

<<enumeration>>Dir

leftright

<<enumeration>>Coord

012

<<ReflexAgent>>Player

<<Percept>> XYCoord

x:Coordy:Coord

Ball

9

<<Subject Component>><<MAS>>

PenaltySim

<<AgentAction>> MoveAction

to: Dir

<<AgentAction>> KickAction

to: XCoord

<<AgentAction>> GrabAction

*

2

<<AgentAction>> PlayerAction

<<enumeration>>Role

shooterkeeper

<<enumeration>>AgStateKind

emptyinitialized

perceptsReceivedactionChosen

actionSent

<<AgentAction>> ArmAction

<<AgentAction>> LegAction

<<enumeration>>EnvStateKind

emptyinitialized

actionsReceivedperceptsUpdated

perceptsSent

<<enumeration>>ChannelStateKind

createdperceptsReceivedperceptsSensedactionReceivedactionSensed

Goal

FieldObjectFieldZone

3

PenaltySim Realization Class PenaltySim Realization Class Diagram 2Diagram 2

<<Effector>>Legs

+do(role:Role,action:LegAction)

<<use>><<use>><<Sensor>>

Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<ReflexAgent>>Kicker

<<ReflexAgent>>Keeper

<<Effector>>Arms

+do(role:Role,action:ArmAction)

<<use>>

<<ReflexAgent>>Player

<<Subject Component>><<MAS>>

PenaltySim

2

2

<<Interface>>IPlayer

<<create>> +new()+initialize()

+getState(): AgStateKind+getRole(): Role

+reason(percepts:XYCoord[3]{ordered}): PlayerAction

2

PenaltySim Realization Class PenaltySim Realization Class Diagram 3Diagram 3

<<Interface>>IPenaltyEnv

<<create>> +new()+initialize()

+getEnvState(): EnvStateKind-reason(shooterAction:PlayerAction{in}, keeperAction:PlayerAction{in},

shooterPercepts:XYCoord[3]{out,ordered}, keeperPercepts:XYCoord[3]{out, ordered})

<<Sensor>>GetActions

<<signal>> +getAction(role:Role):PlayerAction <<use>><<use>>

<<Effector>>SendPercepts

+sendPercept(role:Role):XYCoord[3]{ordered}

<<Environment>><<AutomataAgent>>

PenaltyEnv

<<Subject Component>><<MAS>>

PenaltySim

PenaltySim Realization Class PenaltySim Realization Class Diagram 4Diagram 4

<<Sensor>>GetActions

<<signal>> +getAction(role:Role):PlayerAction

<<Effector>>SendPercepts

+sendPercept(role:Role):XYCoord[3]{ordered}

<<Subject Component>><<MAS>>

PenaltySim

<<Effector>>Legs

+do(role:Role,action:LegAction)

<<Sensor>>Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<Effector>>Arms

+do(role:Role,action:ArmAction)

<<Component>>CommincationChannel

<<Interface>>ICommunicationChanel

<<create>> +new()+getChannelState:ChannelStateKind

<<Component>>CommunicationChannel

<<create>> -new() -getChannelState:ChannelStateKind <<signal>> -sendPercepts(role:Role):XYCoord[3]{ordered} -sense():XYCoord[3]{ordered} <<signal>> -do(role:Role,action:LegAction) <<signal>> -do(role:Role,action:ArmAction) -getAction(role:Role):Action

PenaltySim Realization Component PenaltySim Realization Component DiagramDiagram

<<Subject Component>><<MAS>>

PenaltySim

<<ReflexAgent>>Player

<<create>> -new() -initialize() -getState(): AgStateKind -getRole(): String -reason(percepts:XYCoord[3]{ordered}): PlayerAction

<<Environment>> <<AutomataAgent>>PenaltyEnv

<<create>> -new() -initialize() -getEnvState(): EnvStateKind -reason(shooterAction:PlayerAction{in}, keeperAction:PlayerAction{in}, shooterPercepts:XYCoord[3]{out,ordered}, keeperPercepts:XYCoord[3]{out, ordered})

REnv

PEnv

RPlayer[2]

PPlayer

PGetActions

PSendPercepts

RSendPerceptsRGetActions

<<Agent>>Keeper

<<Agent>>Shooter

REyesRLegs

PEyes[2]

PLegs[2]

RArms PArms

RChannel

PChannel

PenaltySim RealizationPenaltySim RealizationComposite Structure DiagramComposite Structure Diagram

<<Environment>><<AutomataAgent>>

: PenaltyEnv

rs:RPlayer

ps:PPlayer <<Component>>: CommunicationChannel

pc:PChannel

re:REnvpe;PEnv

<<ReflexAgent>>: Keeper

rlk:RLegs pak:PArms

pek:PEyes

rek:REyes

rsp:RSendPerceptsrga:RGetActions

<<ReflexAgent>>: Shooter

rls:RLegspls:PLegs

pes:PEyes

rc:RChannel

psp:RSendPerceptspga:RGetActions

rk:RPlayer

pk:PPlayer

<<SubjectComponent>>

<<MAS>>penaltySim

<<create>> -new()

rak:RArmsplk:RLegs

res:REyes

<<MAS>> : PenaltySim

PenaltySim RealizationPenaltySim RealizationActivity Diagram 1Activity Diagram 1

PenaltySim.new()

connect(rc,pc)

connect(rk,pk)

connect(rs,ps)

connect(re,pe)

connect(res,pes)

connect(rls,pls)

connect(rak,pak)

connect(rga,pga)

connect(rek,pek)

connect(rlk,plk)

PPenaltySim.new()

PenaltyEnv.new()

Shooter.new()

Keeper.new()

CommunicationChannel.new() connect(rsp,psp)

PenaltySim Realization Activity Diagram 2PenaltySim Realization Activity Diagram 2

k.do(keeper,ka) e.getAction(k)s.do(shooter,sa) e.getAction(s)

e.sendPercepts(s) s.sense() e.sendPercepts(k) k.sense()

stop()

k.initialize()

run()

e.initialize()s.initialize()

s:Shooter e:PenaltyEnv k:Keeper

s.reason(sp) sa:LegAction k.reason(kp)

e.reason(sa,ka,sp,kp)

sp:XYCoord[3]

sa:LegAction ka:PlayerAction

ka:PlayerAction

kp:XYCoord[3]

Player Specification Class DiagramPlayer Specification Class Diagram

<<Effector>>Legs

+do(Role,LegAction)

<<use>>

<<use>><<Sensor>>

Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<ReflexAgent>>Kicker

<<ReflexAgent>>Keeper

<<Effector>>Arms

+do(Role,ArmAction)

<<use>>

<<Subject Component>><<ReflexAgent>>

Player

<<Interface>>IPlayer

<<create>> +new()+initialize()

+getState(): AgStateKind+getRole(): Role

FieldObj

Ball

<<enumeration>>Dir

leftright

<<enumeration>>Coord

012

<<enumeration>>Role

shooterkeeper

<<enumeration>>AgStateKind

emptyinitialized

perceptsReceivedactionChosen

actionSent

<<AgentAction>> MoveAction

to: Dir

<<AgentAction>> KickAction

to: Coord

<<AgentAction>> GrabAction

*

<<AgentAction>> PlayerAction

<<AgentAction>> ArmAction

<<AgentAction>> LegAction

<<Percept>> XYCoord

x:Coordy:Coord

<<ReflexAgent>>Shooter

-reason(percepts:XYCoord[3]{ordered}): PlayerAction

Player Specification Component Player Specification Component DiagramDiagram

<<Subject Component>><<ReflexAgent>>

Player

<<create>> -new()-getState(): AgStateKind

-getRole(): String-reason(percepts:XYCoord[3]{ordered}): PlayerAction

PPlayer

REyes

RLegs

RArms

IPlayer

<<sensor>> Eyes

<<effector>> Legs

<<effector>> Arms

<<ReflexAgent>>Shooter

-reason(percepts:XYCoord[3]{ordered}): LegAction

Player SpecificationPlayer SpecificationProtocol State MachineProtocol State Machine

actionSent

perceptsReceived

new()

self^CommunicationChannel.do(Role,Action)

empty

initialized

initialize()

CommunicationChannler^self.sense()

actionChosen

reason(percepts:XYCoord[3]{ordered})

CommunicationChannler^self.sense()

Shooter Realization Class DiagramShooter Realization Class Diagram

<<Subject Component>> <<ReflexAgent>>

Shooter

<<ReflexReasoner>>ShooterReflexReasoner

<<Interface>>IPlayerReflexReasoner

<<create>> +new()+reason(percepts:XYCoord[3]{ordered}):LegAction

<<Effector>>Legs

+do(Role = shooter,LegAction)

<<Sensor>>Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<ReflexReasoner>>ShooterReflexReasoner

<<create>> -new()+reason(percepts:XYCoord[3]{ordered}):LegAction

Shooter Realization Component Shooter Realization Component DiagramDiagram

<<Subject Component>><<ReflexAgent>>

Shooter

PPlayer

REyes

RLegs

IPlayer

<<sensor>> Eyes <<effector>> Legs

RPRR

IPlayerReflexReasoner

PPRR

REyes<<sensor>> Eyes

RLegs<<effector>> Legs

Shooter RealizationShooter RealizationComposite Structure DiagramComposite Structure Diagram

<<ReflexReasonert>>: ShooterReflexReasoner

ps:PPlayer

res:REyes

rsrr:RPRR

psrr:PPRR

rls:RLegs<<delegate>>resrr:REyes rlsrr:RLegs<<delegate>>

<<ReflexAgent>>: Shooter

<<Subject Component>><<ReflexAgent>>

Shooter

<<create>> -new()

Shooter Realization Activity Diagram Shooter Realization Activity Diagram 11

Shooter.new()

delegate(resrr,res)

connect(rsrr,psrr)

delegate(rlsrr,rls)

ShooterReflexReasoner..new()

Shooter Realization Activity Diagram Shooter Realization Activity Diagram 22Shooter.reason(sp)

sp:XYCoord[3]{ordered}

sa:LegAction

shooterX = sp[1].x keeperX = sp[2].x ballX = sp[3].x ballY = sp[3].y

[shooterX = ballX]

[ballX < shooterX][shooterX < ballX]

sa = mr

mr.to = right

mr = MoveAction.new()

sa = ml

ml.to = left

ml = MoveAction.new()

[shooterX < keeperX]

[shooter X = keeper X]

[keeperX < shooterX]

sa = kr

kr.to = 0

kr = KickAction.new()

sa = kl

kl.to = 2

kl = KickAction.new()

sa = klr

klr.to = 0 or klr = 1 or klr = 2

klr = KickAction.new()

[ballY = 0]

sa = void

[else]

Keeper Realization Class DiagramKeeper Realization Class Diagram

<<Subject Component>> <<ReflexAgent>>

Keeper

<<ReflexReasoner>>KepperReflexReasoner

<<Interface>>IPlayerReflexReasoner

<<create>> +new()+reason(percepts:XYCoord[3]{ordered}):PlayerAction

<<Effector>>Legs

+do(Role = keeper,LegAction)<<Sensor>>

Eyes

<<signal>> +sense():XYCoord[3]{ordered} <<Effector>>Arms

+do(Role = keeper,ArmAction)

<<ReflexReasoner>>KeeperReflexReasoner

<<create>> -new()+reason(percepts:XYCoord[3]{ordered}):PlayerAction

Keeper Realization Component Keeper Realization Component DiagramDiagram

<<Subject Component>><<ReflexAgent>>

Keeper

PPlayer

REyesRLegs

IPlayer

<<sensor>> Eyes<<effector>> Legs

RPRR

IPlayerReflexReasoner

PPRR

REyes<<sensor>> Eyes

RLegs<<effector>> Legs

RArms<<effector>> Arms

RArms<<effector>> Arms

Keeper RealizationKeeper RealizationComposite Structure DiagramComposite Structure Diagram

<<ReflexReasoner>>: KeeperrReflexReasoner

pk:PPlayer

rek:REyes

rkrr:RPRR

pkrr:PPRR

rlk:RLegs<<delegate>>rekrr:REyes

rlkrr:RLegs<<delegate>>

<<ReflexAgent>>: Keeper

<<Subject Component>><<ReflexAgent>>

Keeper

<<create>> -new()

rak:RArms<<delegate>>rakrr:RArms

Shooter Realization Activity Diagram Shooter Realization Activity Diagram 11

Shooter.new()

ShooterReflexRuleBaseComponent..new()

connect(rkrr,pkrr)

delegate(rlkrr,rlk)

delegate(rakrr,rak)

delegate(rekrr,rek)

Keeper Realization Activity Diagram Keeper Realization Activity Diagram 22

Keeperr.reason(sp)

kp:XYCoord[3]{ordered}

ka:PlayerAction

shooterX = sp[1].x keeperX = sp[2].x ballX = sp[3].x ballY = sp[3].y

[keeperX = ballX]

[ballX < keeperX][keeperX < ballX]

sa = mr

mr.to = right

mr = MoveAction.new()

sa = ml

ml.to = left

ml = MoveAction.new()

[ballY = keeperY]

sa = void

[else]

sa = GrabAction.new()

PenaltyEnv Specification Class PenaltyEnv Specification Class DiagramDiagram

<<enumeration>>Dir

leftright

<<enumeration>>Coord

012

<<enumeration>>Role

shooterkeeper

<<enumeration>>EnvStateKind

emptyinitialized

actionsReceivedperceptsUpdated

perceptsSent

<<AgentAction>> MoveAction

to: Dir

<<AgentAction>> KickAction

to: Coord

<<AgentAction>> GrabAction

<<AgentAction>> PlayerAction

<<AgentAction>> ArmAction

<<AgentAction>> LegAction

<<Percept>> XYCoord

x:Coordy:Coord

<<Interface>>IPenaltyEnv

<<create>> +new()+initialize()

+getEnvState(): EnvStateKind-reason(shooterAction:PlayerAction{in}, keeperAction:PlayerAction{in},

shooterPercepts:XYCoord[3]{out,ordered}, keeperPercepts:XYCoord[3]{out, ordered})

<<Sensor>>GetActions

<<signal>> +getAction(role:Role):PlayerAction<<use>><<use>>

<<Effector>>SendPercepts

+sendPercept(role:Role):XYCoord[3]{ordered}

<<Subject Component>><<Environment>>

<<AutomataAgent>>PenaltyEnv

PenaltyEnv SpecificationPenaltyEnv SpecificationComponent DiagramComponent Diagram

PPenaltyEnv

IPenaltyEnv

<<Subject Component>><<Environment>>

<<AutomataAgent>>PenaltyEnv

<<create>> -new() initialize() -getEnvState(): EnvStateKind -reason(shooterAction:PlayerAction{in}, keeperAction:PlayerAction{in}, shooterPercepts:XYCoord[3]{out,ordered}, keeperPercepts:XYCoord[3]{out, ordered})

RGetActions

<<sensor>> GetActions

RSendPercepts<<effector>> SendPercepts

PenaltyEnv SpecificationPenaltyEnv SpecificationProtocol State MachineProtocol State Machine

perceptsSent

actionsReceived

new()

self^CommunicationChannel.sendPercepts(shooter)

empty< initializedinitialize()

CommunicationChannler^self.getAction(shooter,LegAction)

perceptsUpdated

CommunicationChannler^self.getAction(keeper,PlayerAction)

self^CommunicationChannel.sendPercepts(keeper)

reason(shooterAction:PlayerAction{in}, keeperAction:PlayerAction{in},

shooterPercepts:XYCoord[3]{out,ordered}, keeperPercepts:XYCoord[3]{out, ordered})

PenaltyEnv Realization Class PenaltyEnv Realization Class DiagramDiagram

<<Sensor>>GetActions

<<signal>> +getAction(role:Role):PlayerAction

<<Effector>>SendPercepts

+sendPercept(role:Role):XYCoord[3]{ordered}

<<Subject Component>><<Environment>>

<<AutomataAgent>>PenaltyEnv

PenaltyEnvModel<<ReflexAgent>>

Shooter <<Percept>> XYCoord

x:Coordy:Coord

Ball

<<ReflexAgent>>Keeper

<<ReflexReasoner>>ShooterReflexReasoner

<<create>> -new()+reason(percepts:XYCoord[3]{ordered}):LegAction

PenaltyEnv RealizationPenaltyEnv RealizationComponent DiagramComponent Diagram

<<Subject Component>><<ReflexAgent>>

Shooter

PPlayer

REyes

RLegs

IPlayer

<<sensor>> Eyes <<effector>> Legs

RPRR

IPlayerReflexReasoner

PPRR

REyes<<sensor>> Eyes

RLegs<<effector>> Legs

PenaltyEnv RealizationPenaltyEnv RealizationComposite Structure DiagramComposite Structure Diagram

<<ReflexReasonert>>: ShooterReflexReasoner

ps:PPlayer

res:REyes

rsrr:RPRR

psrr:PPRR

rls:RLegs<<delegate>>resrr:REyes rlsrr:RLegs<<delegate>>

<<ReflexAgent>>: Shooter

<<Subject Component>><<ReflexAgent>>

Shooter

<<create>> -new()

PenaltyEnv RealizationPenaltyEnv RealizationActivity Diagram 1Activity Diagram 1

Shooter.new()

delegate(resrr,res)

connect(rsrr,psrr)

delegate(rlsrr,rls)

ShooterReflexReasoner..new()

PenaltyEnv Realization Activity Diagram 2PenaltyEnv Realization Activity Diagram 2

Shooter.reason(sp)

sp:XYCoord[3]{ordered}

sa:LegAction

shooterX = sp[1].x keeperX = sp[2].x ballX = sp[3].x ballY = sp[3].y

[shooterX = ballX]

[ballX < shooterX][shooterX < ballX]

sa = mr

mr.to = right

mr = MoveAction.new()

sa = ml

ml.to = left

ml = MoveAction.new()

[shooterX < keeperX]

[shooter X = keeper X]

[keeperX < shooterX]

sa = kr

kr.to = 0

kr = KickAction.new()

sa = kl

kl.to = 2

kl = KickAction.new()

sa = klr

klr.to = 0 or klr = 1 or klr = 2

klr = KickAction.new()

[ballY = 0]

sa = void

[else]

CommunicationChannel Specification CommunicationChannel Specification Class DiagramClass Diagram<<Effector>>

Legs

+do(Role,LegAction)

<<use>>

<<use>><<Sensor>>

Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<Agent>>Kicker

<<Agent>>Keeper

<<Effector>>Arms

+do(Role,ArmAction)

<<use>>

<<Subject Component>><<ReflexAgent>>

Player

<<interface>>IPlayer

<<create>> +new()+initialize()

+getState(): AgStateKind+getRole(): Role

FieldObj

Ball

<<enumeration>>Dir

leftright

<<enumeration>>Coord

012

<<enumeration>>Role

shooterkeeper

<<enumeration>>AgStateKind

emptyinitialized

perceptsReceivedactionChosen

actionSent

<<AgentAction>> MoveAction

to: Dir

<<AgentAction>> KickAction

to: Coord

<<AgentAction>> GrabAction

*

<<AgentAction>> PlayerAction

<<AgentAction>> ArmAction

<<AgentAction>> LegAction

<<Percept>> XYCoord

x:Coordy:Coord

<<ReflexAgent>>Shooter

-reason(percepts:XYCoord[3]{ordered}): PlayerAction

CommunicationChannel SpecificationCommunicationChannel SpecificationComponent DiagramComponent Diagram

<<Subject Component>><<ReflexAgent>>

Player

<<create>> -new()-getState(): AgStateKind

-getRole(): String-reason(percepts:XYCoord[3]{ordered}): PlayerAction

PPlayer

REyes

RLegs

RArms

IPlayer

<<sensor>> Eyes

<<effector>> Legs

<<effector>> Arms

<<ReflexAgent>>Shooter

-reason(percepts:XYCoord[3]{ordered}): LegAction

CommunicationChannel SpecificationCommunicationChannel SpecificationProtocol State MachineProtocol State Machine

actionSent

perceptsReceived

new()

self^CommunicationChannel.do(Role,Action)

empty

initialized

initialize()

CommunicationChannler^self.sense()

actionChosen

reason(percepts:XYCoord[3]{ordered})

CommunicationChannler^self.sense()

CommunicationChannel RealizationCommunicationChannel RealizationClass DiagramClass Diagram

<<Subject Component>> <<ReflexAgent>>

Shooter

<<ReflexReasoner>>ShooterReflexReasoner

<<Interface>>IPlayerReflexReasoner

<<create>> +new()+reason(percepts:XYCoord[3]{ordered}):LegAction

<<Effector>>Legs

+do(Role = shooter,LegAction)

<<Sensor>>Eyes

<<signal>> +sense():XYCoord[3]{ordered}

<<ReflexReasoner>>ShooterReflexReasoner

<<create>> -new()+reason(percepts:XYCoord[3]{ordered}):LegAction

CommunicationChannel RealizationCommunicationChannel RealizationComponent DiagramComponent Diagram

<<Subject Component>><<ReflexAgent>>

Shooter

PPlayer

REyes

RLegs

IPlayer

<<sensor>> Eyes <<effector>> Legs

RPRR

IPlayerReflexReasoner

PPRR

REyes<<sensor>> Eyes

RLegs<<effector>> Legs

CommunicationChannel RealizationCommunicationChannel RealizationComposite Structure DiagramComposite Structure Diagram

<<ReflexReasonert>>: ShooterReflexReasoner

ps:PPlayer

res:REyes

rsrr:RPRR

psrr:PPRR

rls:RLegs<<delegate>>resrr:REyes rlsrr:RLegs<<delegate>>

<<ReflexAgent>>: Shooter

<<Subject Component>><<ReflexAgent>>

Shooter

<<create>> -new()

CommunicationChannel RealizationCommunicationChannel RealizationActivity Diagram 1Activity Diagram 1

Shooter.new()

delegate(resrr,res)

connect(rsrr,psrr)

delegate(rlsrr,rls)

ShooterReflexReasoner..new()

CommunicationChannel RealizationCommunicationChannel RealizationActivity Diagram 2Activity Diagram 2

Shooter.reason(sp)

sp:XYCoord[3]{ordered}

sa:LegAction

shooterX = sp[1].x keeperX = sp[2].x ballX = sp[3].x ballY = sp[3].y

[shooterX = ballX]

[ballX < shooterX][shooterX < ballX]

sa = mr

mr.to = right

mr = MoveAction.new()

sa = ml

ml.to = left

ml = MoveAction.new()

[shooterX < keeperX]

[shooter X = keeper X]

[keeperX < shooterX]

sa = kr

kr.to = 0

kr = KickAction.new()

sa = kl

kl.to = 2

kl = KickAction.new()

sa = klr

klr.to = 0 or klr = 1 or klr = 2

klr = KickAction.new()

[ballY = 0]

sa = void

[else]