LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
afterEventRouter.m
1function [outspace, outrate, outprob, eventCache] = afterEventRouter(sn, ind, event, class, isSimulation, eventCache, space_buf, space_srv, space_var, key)
2% [OUTSPACE, OUTRATE, OUTPROB, EVENTCACHE] = AFTEREVENTROUTER(SN, IND, EVENT, CLASS, ISSIMULATION, EVENTCACHE, SPACE_BUF, SPACE_SRV, SPACE_VAR, KEY)
3%
4% Handle router afterEvent logic
5
6% Copyright (c) 2012-2026, Imperial College London
7% All rights reserved.
8
9outspace = [];
10outrate = [];
11outprob = 1;
12
13switch event
14 case EventType.ARV
15 space_srv(:,class) = space_srv(:,class) + 1;
16 outspace = [space_srv, space_var]; % buf is empty
17 outrate = -1*ones(size(outspace,1)); % passive action, rate is unspecified
18 case EventType.DEP
19 if space_srv(class)>0
20 space_srv(:,class) = space_srv(:,class) - 1;
21 switch sn.routing(ind,class)
22 case RoutingStrategy.RROBIN
23 idx = find(space_var(sum(sn.nvars(ind,1:(sn.nclasses+class)))) == sn.nodeparam{ind}{class}.outlinks);
24 if idx < length(sn.nodeparam{ind}{class}.outlinks)
25 space_var(sum(sn.nvars(ind,1:(sn.nclasses+class)))) = sn.nodeparam{ind}{class}.outlinks(idx+1);
26 else
27 space_var(sum(sn.nvars(ind,1:(sn.nclasses+class)))) = sn.nodeparam{ind}{class}.outlinks(1);
28 end
29 end
30 outspace = [space_srv, space_var]; % buf is empty
31 outrate = GlobalConstants.Immediate*ones(size(outspace,1)); % immediate action
32 end
33end
34
35if isSimulation
36 if nargin>=8 && isobject(eventCache)
37 eventCache(key) = {outprob, outspace,outrate};
38 end
39 if size(outspace,1) > 1
40 tot_rate = sum(outrate);
41 cum_rate = cumsum(outrate) / tot_rate;
42 firing_ctr = 1 + max([0,find( rand > cum_rate' )]); % select action
43 outspace = outspace(firing_ctr,:);
44 outrate = sum(outrate);
45 outprob = outprob(firing_ctr,:);
46 end
47end
48
49end