|
A2BL an adaptive behavior language |
![]()
adaptive sequential behavior ChooseDirection() {
success_condition {
(SelfWME x > 1950.0 x < 2050.0
y > -950.0 y < -850.0)
}
reward {
100 if { (SelfWME x > 1950.0 x < 2050.0
y > -950.0 y < -850.0) }
-10 if { (BumpWME) }
0 if { (true) }
}
state { { (SelfWME x :: rawX y :: rawY) }
myXLoc = (int)Math.floor((rawX-1050)/100);
myYLoc = (int)Math.floor((rawY+2550)/100);
return (myXLoc, myYLoc); }
// Behavior steps
subgoal WalkNorth();
subgoal WalkSouth();
subgoal WalkEast();
subgoal WalkWest();
}
|
One of the promises of machine learning is that it allows designers to
specify problems in broad strokes while allowing a machine do further
parameter fine-tuning. This is useful in a number of
situations. Typically, one thinks of building a system or agent for
some specific task and then providing it some kind of feedback,
allowing it to learn. In this case, the agent is the point of the
exercise; however, what if we decided to embed this notion within a
programming language itself? That is, what if we chose to build or
extend a programming language so that has learning as a primitive
operator? What does this mean for building adaptive and interactive
agents? What implications does such an idea have for a compiler? How
does this affect the programmer in organizing and thinking about
problems or debugging code?
In this work, we extend ABL (A Behavior Language, pronounced able). ABL is based on the Oz Project believable agent language Hap. It is a reactive planning language, and an ABL agent consists of a library of behaviors with reactive annotations. Each behavior consists of a set of steps to be executed either sequentially or in parallel. The agent dynamically selects behaviors to accomplish goals. One approach to dealing with such a problem would be to build a learning system "on top of ABL". Instead, our approach is to integrate learning directly into ABL by adding a new type of behavior to the language: a learned behavior. |