1function self = setReward(self, name, rewardFn)
2% SETREWARD Define a reward function on the network
for CTMC analysis
4% SELF = SETREWARD(SELF, NAME, REWARDFN)
6% NAME - String identifier
for the reward
7% REWARDFN - Function handle @(state, sn) ->
double
8% state: state vector (same format as stateSpace rows)
9% sn: NetworkStruct for accessing rates, parameters
11% Multiple rewards can be defined by calling setReward multiple times
12% with different names. Use clearRewards() to remove all rewards.
15% model.setReward(
'qlen', @(state, sn) state(2)); % Jobs at position 2
16% model.setReward(
'throughput', @(state, sn) state(2) * sn.rates(2,1));
18% Copyright (c) 2012-2026, Imperial College London
21if ~ischar(name) && ~isstring(name)
22 error(
'Reward name must be a string');
24if ~isa(rewardFn,
'function_handle')
25 error('Reward function must be a function handle @(state, sn) ->
double');
28% Initialize reward cell array if needed
30 self.sn = NetworkStruct();
32if ~isfield(self.sn, 'reward') || isempty(self.sn.reward)
36% Check
if reward with
this name already exists and update it
39for i = 1:length(self.sn.reward)
40 if strcmp(self.sn.reward{i}.name, name)
41 self.sn.reward{i}.fn = rewardFn;
47% Add
new reward
if not found
51 reward.type =
'state';
52 self.sn.reward{end+1} = reward;