LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
rl_env.m
1classdef rl_env < handle
2 properties
3 model; % queue model
4 gamma; % discount factor
5 idxOfQueueInNodes; % model.nodes{i} are queues for i in idxOfQueueInNodes
6 idxOfSourceInNodes; % model.nodes{i} are sources for i in idxOfQueueInNodes
7 stateSize; % [s_i <= m] are state space to be considered
8 actionSize; % actionSize: number of queues
9 end
10
11 methods
12 function obj=rl_env(model, idxOfQueueInNodes, idxOfSourceInNodes, stateSize, gamma)
13 obj.model = model.copy;
14 obj.idxOfQueueInNodes = idxOfQueueInNodes; % how to distinguish sources & queues in model
15 obj.idxOfSourceInNodes = idxOfSourceInNodes;
16 obj.stateSize = stateSize;
17 obj.gamma = gamma;
18 obj.actionSize = length(idxOfQueueInNodes);
19 end
20
21 function r = isInStateSpace(obj, nodes)
22 r = true;
23 for i = obj.idxOfQueueInNodes
24 if sum(nodes{i}.state) > obj.stateSize
25 r = false;
26 break
27 end
28 end
29 end
30
31 function r = isInActionSpace(obj, nodes)
32 r = true;
33 for i = obj.idxOfQueueInNodes
34 if sum(nodes{i}.state) > obj.stateSize - 1
35 r = false;
36 break
37 end
38 end
39 end
40
41 function [t, depNode]=sample(obj) % how to identify the type of new event
42 solver = SolverSSA(obj.model, 'verbose', false);
43 sample = solver.sampleSysAggr(1);
44 t = sample.t;
45 if sample.event{1}.event==EventType.DEP
46 depNode = sample.event{1}.node;
47 elseif sample.event{2}.event==EventType.DEP
48 depNode = sample.event{2}.node;
49 end
50 end
51
52 function update(obj, newState) % how to update model after an event
53 for i = 1:length(obj.idxOfQueueInNodes) % newState = [#jobsInQueue_i]
54 obj.model.nodes{obj.idxOfQueueInNodes(i)}.state = State.fromMarginal(obj.model, obj.model.nodes{obj.idxOfQueueInNodes(i)}, newState(i));
55 end
56 end
57
58 function reset(obj)
59 obj.model.reset();
60 obj.model.initDefault();
61 end
62 end
63end
Definition mmt.m:92