Costs and rewardsΒΆ
In order to reason about quantitative measures, such as expected energy
consumption, expected time or expected number of lost messages, a ProFeat model
can be augmented with costs and rewards. Rewards are defined in reward
structures and can be assigned to states, transitions or feature switches.
Reward structures are defined inside of feature
blocks to allow for
modularized cost models.
Consider the following example:
feature Consumer
rewards "energy"
work = 0 : 1;
endrewards
endfeature
Here, a reward of 1 is assigned to all states where work
is 0. The reward
structure has the label "energy"
. All rewards with the same label are
accumulated. The reward does not need to be constant, but can also depend on the
model state and feature attributes:
feature Consumer
speed : [1 .. 5];
rewards "energy"
work > 0 : pow(speed, 2);
endrewards
endfeature
Rewards can be assigned to transitions by adding a (possibly empty) action label, as shown in the following example:
rewards "energy"
[work] active(this) : 1;
endrewards
The reward item assigns a reward of 1 to all transitions labeled with the
action work
. The active
function can also be used in reward definition.
The this
keyword refers to the feature instance.
Rewards can also be assigned to feature switches by using the special
activate
and deactivate
actions (see also
feature controller). Consider the following example:
feature Consumer
rewards "energy"
[activate] true : 2;
endrewards
endfeature
Here, a cost of 2 is assigned for every activation of the Consumer
feature.
The meta-programming constructs can also be used in reward structures to generate reward items:
rewards "energy"
for i in [0..2]
[dequeue[i]] true : 1;
endfor
endrewards