LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
parseTranState.m
1function [state, evtype, evclass, evjob] = parseTranState(fileArv, fileDep, nodePreload)
2% [STATE, EVTYPE, EVCLASS, EVJOB] = PARSETRANSTATE(FILEARV, FILEDEP, NODEPRELOAD)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7load(fileArv,'jobArvTS','jobArvClassID','jobArvID');
8load(fileDep,'jobDepTS','jobDepClassID','jobDepID');
9
10%% compute joint state at station
11nClasses = length(nodePreload);
12state = [jobArvTS,zeros(length(jobArvTS),nClasses);
13 jobDepTS,zeros(length(jobDepTS),nClasses)];
14
15evtype = nan(size(state,1),1);
16evclass = zeros(size(state,1),1);
17evjob = zeros(size(state,1),1);
18
19for i=1:size(jobArvTS,1)
20 state(i,1+jobArvClassID(i)) = +1;
21 evtype(i) = EventType.ARV;
22 evclass(i) = jobArvClassID(i);
23 evjob(i) = jobArvID(i);
24end
25
26for i=1:size(jobDepTS,1)
27 state(length(jobArvTS)+i,1+jobDepClassID(i)) = -1;
28 evtype(length(jobArvTS)+i) = EventType.DEP;
29 evclass(length(jobArvTS)+i) = jobDepClassID(i);
30 evjob(length(jobArvTS)+i) = jobDepID(i);
31end
32[state,I] = sortrows(state,1); % sort on timestamps
33state = [0,nodePreload;state];
34evtype = [EventType.INIT; evtype(I)];
35evclass = [NaN;evclass(I)];
36evjob = [NaN;evjob(I)];
37
38ev_inst = find(diff(state(:,1)) == 0); % instantaneous events
39%evjobs_inst = unique(evjob(ev_inst)); % determine jobs involved in instantaneous events
40toSwap = [];
41for ev=ev_inst(:)'
42 ej = evjob(ev); % find job involved in the instantaneous event;
43 prev_ev_ej = find(evjob(1:(ev-1))==ej,1,'last'); % find last event in which this job was involved
44 next_ev_ej = ev+find(evjob((ev+1):end)==ej,1); % find next event in which this job was involved
45 et = evtype(ev); % find type of instantaneous event
46 if ~isempty(prev_ev_ej)
47 switch et
48 case EventType.ARV
49 if evtype(prev_ev_ej) == EventType.ARV
50 % causality error, two successive arrivals, swap position
51 % with next instantaneous event for this job
52 %% swap state
53 tmp = state(ev,:);
54 state(ev,:) = state(next_ev_ej,:);
55 state(next_ev_ej,:) = tmp;
56 %% swap evjob
57 tmp = evjob(ev,:);
58 evjob(ev,:) = evjob(next_ev_ej,:);
59 evjob(next_ev_ej,:) = tmp;
60 %% swap evtype
61 tmp = evtype(ev,:);
62 evtype(ev,:) = evtype(next_ev_ej,:);
63 evtype(next_ev_ej,:) = tmp;
64 end
65 case EventType.DEP
66 if evtype(prev_ev_ej) == EventType.DEP
67 % causality error, two successive departures, swap position
68 % with next instantaneous event for this job
69 %% swap state
70 tmp = state(ev,:);
71 state(ev,:) = state(next_ev_ej,:);
72 state(next_ev_ej,:) = tmp;
73 %% swap evjob
74 tmp = evjob(ev,:);
75 evjob(ev,:) = evjob(next_ev_ej,:);
76 evjob(next_ev_ej,:) = tmp;
77 %% swap evtype
78 tmp = evtype(ev,:);
79 evtype(ev,:) = evtype(next_ev_ej,:);
80 evtype(next_ev_ej,:) = tmp;
81 end
82 end
83 end
84end
85
86for j=2:(nClasses+1)
87 state(:,j) = cumsum(state(:,j)); %+nodePreload(j-1);
88end
89
90end