LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
setReward.m
1function self = setReward(self, name, rewardFn)
2% SETREWARD Define a reward function on the network for CTMC analysis
3%
4% SELF = SETREWARD(SELF, NAME, REWARDFN)
5%
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
10%
11% Multiple rewards can be defined by calling setReward multiple times
12% with different names. Use clearRewards() to remove all rewards.
13%
14% Example:
15% model.setReward('qlen', @(state, sn) state(2)); % Jobs at position 2
16% model.setReward('throughput', @(state, sn) state(2) * sn.rates(2,1));
17%
18% Copyright (c) 2012-2026, Imperial College London
19% All rights reserved.
20
21if ~ischar(name) && ~isstring(name)
22 error('Reward name must be a string');
23end
24if ~isa(rewardFn, 'function_handle')
25 error('Reward function must be a function handle @(state, sn) -> double');
26end
27
28% Initialize reward cell array if needed
29if isempty(self.sn)
30 self.sn = NetworkStruct();
31end
32if ~isfield(self.sn, 'reward') || isempty(self.sn.reward)
33 self.sn.reward = {};
34end
35
36% Check if reward with this name already exists and update it
37name = char(name);
38found = false;
39for i = 1:length(self.sn.reward)
40 if strcmp(self.sn.reward{i}.name, name)
41 self.sn.reward{i}.fn = rewardFn;
42 found = true;
43 break;
44 end
45end
46
47% Add new reward if not found
48if ~found
49 reward.name = name;
50 reward.fn = rewardFn;
51 reward.type = 'state';
52 self.sn.reward{end+1} = reward;
53end
54
55end