LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getGraph.m
1function [H,G] = getGraph(self)
2% [H,G] = GETGRAPH()
3
4G = digraph(); TG = Table();
5M = self.getNumberOfNodes;
6K = self.getNumberOfClasses;
7sn = self.getStruct;
8[P,Pnodes] = getRoutingMatrix(self);
9name = {}; sched = {}; type = {}; nservers = [];
10for ist=1:M
11 name{end+1} = self.nodes{ist}.name;
12 type{end+1} = class(self.nodes{ist});
13 if ~isa(self.nodes{ist},'Join')
14 sched{end+1} = self.nodes{ist}.schedStrategy;
15 else
16 sched{end+1} = '';
17 end
18 if isa(self.nodes{ist},'Station')
19 nservers(end+1) = self.nodes{ist}.getNumberOfServers;
20 else
21 nservers(end+1) = 0;
22 end
23end
24TG.Name = name(:);
25TG.Type = type(:);
26TG.Sched = sched(:);
27TG.Servers = nservers(:);
28G = G.addnode(TG);
29for ist=1:M
30 for jst=1:M
31 for k=1:K
32 if Pnodes((ist-1)*K+k,(jst-1)*K+k) > 0
33 G = G.addedge(self.nodes{ist}.name,self.nodes{jst}.name, Pnodes((ist-1)*K+k,(jst-1)*K+k));
34 end
35 end
36 end
37end
38H = digraph(); TH = Table();
39I = self.getNumberOfStations;
40name = {}; sched = {}; type = {}; jobs = zeros(I,1); nservers = [];
41for ind=1:I
42 name{end+1} = self.stations{ind}.name;
43 type{end+1} = class(self.stations{ind});
44 if ~isa(self.stations{ind},'Join')
45 sched{end+1} = self.stations{ind}.schedStrategy;
46 else
47 sched{end+1} = '';
48 end
49 for k=1:K
50 if sn.refstat(k)==ind
51 jobs(ind) = jobs(ind) + sn.njobs(k);
52 end
53 end
54 if isa(self.nodes{ind},'Station')
55 nservers(end+1) = self.nodes{ind}.getNumberOfServers;
56 else
57 nservers(end+1) = 0;
58 end
59end
60TH.Name = name(:);
61TH.Type = type(:);
62TH.Sched = sched(:);
63TH.Jobs = jobs(:);
64TH.Servers = nservers(:);
65H = H.addnode(TH);
66rate = [];
67classes = {};
68for ind=1:I
69 for jnd=1:I
70 for k=1:K
71 if P((ind-1)*K+k,(jnd-1)*K+k) > 0
72 rate(end+1) = sn.rates(ind,k);
73 classes{end+1} = self.classes{k}.name;
74 H = H.addedge(self.stations{ind}.name, self.stations{jnd}.name, P((ind-1)*K+k,(jnd-1)*K+k));
75 end
76 end
77 end
78end
79H.Edges.Rate = rate(:);
80H.Edges.Class = classes(:);
81H = H.rmedge(find(isnan(H.Edges.Rate)));
82sourceObj = self.getSource;
83if ~isempty(sourceObj)
84 % sink = self.getSink;
85 % H=H.addnode(sink.name);
86 % H.Nodes.Type{end}='Sink';
87 % H.Nodes.Sched{end}='ext';
88 %H = H.rmedge(find(isnan(H.Edges.Rate)));
89 %sourceIdx = model.getIndexSourceNode;
90 % toDel = findstring(H.Edges.EndNodes(:,2),sourceObj.name);
91 % for j=toDel(:)'
92 % H = H.rmedge(j);
93 % end
94end
95end
Definition mmt.m:92