1function model = JMVA2LINE(filename,modelName)
2% MODEL = JMVA2LINE(FILENAME,MODELNAME)
4% Copyright (c) 2012-2026, Imperial College London
8Pref.Str2Num = 'always';
9xDoc = xml_read(filename,Pref);
10[~,fname]=fileparts(filename);
19model = Network(modelName);
26if isfield(xDoc.parameters.stations,
'delaystation')
27 nInfStations = length(xDoc.parameters.stations.delaystation);
29 nodes{end+1} = Delay(model, xDoc.parameters.stations.delaystation(i).ATTRIBUTE.name);
34if isfield(xDoc.parameters.stations,
'listation')
35 nLIStations = length(xDoc.parameters.stations.listation);
37 nodes{end+1} = Queue(model, xDoc.parameters.stations.listation(i).ATTRIBUTE.name, SchedStrategy.PS);
41if isfield(xDoc.parameters.stations,
'ldstation')
42 line_error(mfilename,'Load-dependent stations not yet supported.');
50if isfield(xDoc.parameters.classes,
'openclass')
51 source = Source(model, 'Source');
52 sink = Sink(model, 'Sink');
53 nOpenClasses = length(xDoc.parameters.
classes.openclass);
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));
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);
72 jobclass{nOpenClasses + r} = ClosedClass(model, name, population,
nodes{1}, 0);
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);
83 nodes{i}.setService(servClass,Exp(1/demand));
84 visited(i,servClass) =
true;
86 nodes{i}.setService(servClass,Disabled.getInstance());
87 visited(i,servClass) =
false;
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);
98 nodes{nInfStations+i}.setService(servClass,Exp(1/demand));
99 visited(nInfStations + i,servClass) =
true;
101 nodes{nInfStations+i}.setService(servClass,Disabled.getInstance());
102 visited(nInfStations + i,servClass) =
false;
108P = model.initRoutingMatrix;
110 P{r,r} = Network.serialRouting({source,
nodes{find(visited(:,r))},sink});
112for r=1:nClosedClasses
113 P{nOpenClasses+r,nOpenClasses+r} = Network.serialRouting(
nodes{find(visited(:,nOpenClasses+r))});
117%line_printf([
'JMT2LINE parsing time: ',num2str(Ttot),
' s\n']);