LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
JMVA2LINE.m
1function model = JMVA2LINE(filename,modelName)
2% MODEL = JMVA2LINE(FILENAME,MODELNAME)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6T0=tic;
7% import model
8Pref.Str2Num = 'always';
9xDoc = xml_read(filename,Pref);
10[~,fname]=fileparts(filename);
11try
12 xDoc = xDoc.sim;
13end
14
15% create network
16if nargin<2
17 modelName = fname;
18end
19model = Network(modelName);
20
21%%
22nodes = {};
23
24% create stations
25nInfStations = 0;
26if isfield(xDoc.parameters.stations,'delaystation')
27 nInfStations = length(xDoc.parameters.stations.delaystation);
28 for i=1:nInfStations
29 nodes{end+1} = Delay(model, xDoc.parameters.stations.delaystation(i).ATTRIBUTE.name);
30 end
31end
32
33nLIStations = 0;
34if isfield(xDoc.parameters.stations,'listation')
35 nLIStations = length(xDoc.parameters.stations.listation);
36 for i=1:nLIStations
37 nodes{end+1} = Queue(model, xDoc.parameters.stations.listation(i).ATTRIBUTE.name, SchedStrategy.PS);
38 end
39end
40
41if isfield(xDoc.parameters.stations,'ldstation')
42 line_error(mfilename,'Load-dependent stations not yet supported.');
43end
44
45%%
46jobclass = {};
47visited = false(0);
48nOpenClasses = 0;
49% create open classes
50if isfield(xDoc.parameters.classes,'openclass')
51 source = Source(model, 'Source');
52 sink = Sink(model, 'Sink');
53 nOpenClasses = length(xDoc.parameters.classes.openclass);
54 for r=1:nOpenClasses
55 name = xDoc.parameters.classes.openclass(r).ATTRIBUTE.name;
56 jobclass{r} = OpenClass(model, name, 0);
57 rate = xDoc.parameters.classes.openclass(r).ATTRIBUTE.rate;
58 source.setArrival(jobclass{r}, Exp(rate));
59 end
60end
61
62% create closed classes
63nClosedClasses = 0;
64if isfield(xDoc.parameters.classes,'closedclass')
65 nClosedClasses = length(xDoc.parameters.classes.closedclass);
66 for r=1:nClosedClasses
67 name = xDoc.parameters.classes.closedclass(r).ATTRIBUTE.name;
68 population = xDoc.parameters.classes.closedclass(r).ATTRIBUTE.population;
69 if isfield(xDoc.parameters,'ReferenceStation')
70 refstat = model.getStationByName(xDoc.parameters.ReferenceStation.Class(nOpenClasses+r).ATTRIBUTE.refStation);
71 end
72 jobclass{nOpenClasses + r} = ClosedClass(model, name, population, nodes{1}, 0);
73 end
74end
75
76for i=1:nInfStations
77 for r=1:(nOpenClasses+nClosedClasses)
78 servTime = xDoc.parameters.stations.delaystation(i).servicetimes.servicetime(r).CONTENT;
79 visits = xDoc.parameters.stations.delaystation(i).visits.visit(r).CONTENT;
80 servClass = model.getClassByName(xDoc.parameters.stations.delaystation(i).servicetimes.servicetime(r).ATTRIBUTE.customerclass);
81 demand = servTime*visits;
82 if visits > 0
83 nodes{i}.setService(servClass,Exp(1/demand));
84 visited(i,servClass) = true;
85 else
86 nodes{i}.setService(servClass,Disabled.getInstance());
87 visited(i,servClass) = false;
88 end
89 end
90end
91for i=1:nLIStations
92 for r=1:(nOpenClasses+nClosedClasses)
93 servTime = xDoc.parameters.stations.listation(i).servicetimes.servicetime(r).CONTENT;
94 visits = xDoc.parameters.stations.listation(i).visits.visit(r).CONTENT;
95 servClass = model.getClassByName(xDoc.parameters.stations.listation(i).servicetimes.servicetime(r).ATTRIBUTE.customerclass);
96 demand = servTime*visits;
97 if visits > 0
98 nodes{nInfStations+i}.setService(servClass,Exp(1/demand));
99 visited(nInfStations + i,servClass) = true;
100 else
101 nodes{nInfStations+i}.setService(servClass,Disabled.getInstance());
102 visited(nInfStations + i,servClass) = false;
103 end
104 end
105end
106
107
108P = model.initRoutingMatrix;
109for r=1:nOpenClasses
110 P{r,r} = Network.serialRouting({source,nodes{find(visited(:,r))},sink});
111end
112for r=1:nClosedClasses
113 P{nOpenClasses+r,nOpenClasses+r} = Network.serialRouting(nodes{find(visited(:,nOpenClasses+r))});
114end
115model.link(P);
116tot=toc(T0);
117%line_printf(['JMT2LINE parsing time: ',num2str(Ttot),' s\n']);
118
119end
Definition mmt.m:92