LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
tagChain.m
1function [taggedModel, taggedJob] = tagChain(model, chain, jobclass, suffix)
2% the tagged job will be removed from the initial
3% population of JOBCLASS
4if nargin<4 || isempty(suffix)
5 suffix = '.tagged';
6end
7if nargin<3
8 jobclass = chain.classes{1};
9end
10I = model.getNumberOfNodes;
11R = model.getNumberOfClasses;
12taggedModel = model.copy;
13
14% we don't use rtNodesByClass because it contains the
15% fictitious class switching nodes
16Plinked = taggedModel.getLinkedRoutingMatrix;
17if ~iscell(Plinked) || isempty(Plinked)
18 line_error(mfilename, 'getCdfRespT requires the original model to be linked with a routing matrix defined as a cell array P{r,s} for every class pair (r,s).');
19end
20
21taggedModel.resetNetwork; % resets cs Nodes as well
22taggedModel.reset(true);
23
24chainIndexes = cell2mat(chain.index);
25for r=chainIndexes
26 % create a tagged class
27 taggedModel.classes{end+1,1} = taggedModel.classes{r}.copy;
28 taggedModel.classes{end,1}.index=length(taggedModel.classes);
29 taggedModel.classes{end,1}.name=[taggedModel.classes{r,1}.name,suffix];
30 if r==jobclass.index
31 taggedModel.classes{end}.population = 1;
32 else
33 taggedModel.classes{end}.population = 0;
34 end
35
36 % clone station sections for tagged class
37 for m=1:length(taggedModel.nodes)
38 taggedModel.stations{m}.output.outputStrategy{end+1} = taggedModel.stations{m}.output.outputStrategy{r};
39 end
40
41 for m=1:length(taggedModel.stations)
42 if model.stations{m}.server.serviceProcess{r}{end}.isDisabled
43 taggedModel.stations{m}.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{end}{end}.copy;
44 taggedModel.stations{m}.server.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r};
45 taggedModel.stations{m}.server.serviceProcess{end}{end}=taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
46 taggedModel.stations{m}.schedStrategyPar(end+1) = 0;
47 taggedModel.stations{m}.dropRule(1,end+1) = -1;
48 taggedModel.stations{m}.classCap(1,r) = 0;
49 taggedModel.stations{m}.classCap(1,end+1) = 0;
50 else
51 taggedModel.stations{m}.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
52 taggedModel.stations{m}.server.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r};
53 taggedModel.stations{m}.server.serviceProcess{end}{end}=taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
54 taggedModel.stations{m}.schedStrategyPar(end+1) = taggedModel.stations{m}.schedStrategyPar(r);
55 taggedModel.stations{m}.classCap(1,end+1) = 1;
56 taggedModel.stations{m}.dropRule(1,end+1) = -1;
57 taggedModel.stations{m}.classCap(1,r) = taggedModel.stations{m}.classCap(r) - 1;
58 end
59 end
60end
61
62taggedModel.classes{jobclass.index,1}.population = taggedModel.classes{jobclass.index}.population - 1;
63
64for ir=1:length(chainIndexes)
65 r = chainIndexes(ir);
66 for is=1:length(chainIndexes)
67 s = chainIndexes(is);
68 Plinked{R+ir,R+is} = Plinked{r,s};
69 end
70end
71Rp = taggedModel.getNumberOfClasses;
72for r=1:Rp
73 for s=1:Rp
74 if isempty(Plinked{r,s})
75 Plinked{r,s} = zeros(I);
76 end
77 end
78end
79taggedModel.sn = [];
80taggedModel.link(Plinked);
81taggedModel.reset(true);
82taggedModel.refreshStruct(true);
83taggedModel.initDefault;
84tchains = taggedModel.getChains;
85taggedJob = tchains{end};
86end