LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
runAnalyzer.m
1function runtime = runAnalyzer(self, options)
2% RUNTIME = RUN()
3% Run the solver
4
5tic;
6if nargin<2
7 options = self.getOptions;
8end
9line_debug(options, 'LQNS: starting (method=%s, multiserver=%s)', options.method, options.config.multiserver);
10dirpath = lineTempName('lqns');
11filename = [dirpath,filesep,'model.lqnx'];
12self.model.writeXML(filename);
13
14%self.runAnalyzerChecks(options);
15Solver.resetRandomGeneratorSeed(options.seed);
16
17if options.verbose
18 %verbose = '-v';
19 verbose = '';
20else
21 verbose = '-a -w';
22end
23
24multiserver_praqma = '';
25switch options.method
26 case 'lqsim'
27 %no-op
28 otherwise
29 switch options.config.multiserver
30 case 'conway'
31 multiserver_praqma='-Pmultiserver=conway';
32 case 'rolia'
33 multiserver_praqma='-Pmultiserver=rolia';
34 case 'zhou'
35 multiserver_praqma='-Pmultiserver=zhou';
36 case 'suri'
37 multiserver_praqma='-Pmultiserver=suri';
38 case 'reiser'
39 multiserver_praqma='-Pmultiserver=reiser';
40 case 'schmidt'
41 multiserver_praqma='-Pmultiserver=schmidt';
42 case 'default'
43 multiserver_praqma='-Pmultiserver=rolia';
44 end
45end
46
47if isunix
48 % switch options.method
49 % case {'default','lqns'}
50 % cmd=['lqns ',verbose,' ',multiserver_praqma,' --iteration-limit=',num2str(options.iter_max),' -Pstop-on-message-loss=false -x ',filename]);
51 % case {'srvn'}
52 % cmd=['lqns ',verbose,' ',multiserver_praqma,' --iteration-limit=',num2str(options.iter_max),' -Playering=srvn -Pstop-on-message-loss=false -x ',filename]);
53 % case {'exactmva'}
54 % cmd=['lqns ',verbose,' ',multiserver_praqma,' --iteration-limit=',num2str(options.iter_max),' -Pmva=exact -Pstop-on-message-loss=false -x ',filename]);
55 % case {'srvnexact'}
56 % cmd=['lqns ',verbose,' ',multiserver_praqma,' --iteration-limit=',num2str(options.iter_max),' -Playering=srvn -Pmva=exact -Pstop-on-message-loss=false -x ',filename]);
57 % case {'sim','lqsim'}
58 % cmd=['lqsim ',verbose,' ',multiserver_praqma,' -A ',num2str(options.samples),',3 -Pstop-on-message-loss=false -x ',filename]);
59 % case {'lqnsdefault'}
60 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -x ',filename]);
61 % otherwise
62 % cmd=['lqns ',verbose,' ',multiserver_praqma,' --iteration-limit=',num2str(options.iter_max),' -Pstop-on-message-loss=false -x ',filename]);
63 % end
64
65 % --iteration-limit seems faulty as of 6.2.27
66 if options.verbose
67 switch options.method
68 case {'default','lqns'}
69 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename];
70 case {'srvn'}
71 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pstop-on-message-loss=false -x ',filename];
72 case {'exactmva'}
73 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pmva=exact -Pstop-on-message-loss=false -x ',filename];
74 case {'srvn.exactmva'}
75 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pmva=exact -Pstop-on-message-loss=false -x ',filename];
76 case {'sim','lqsim'}
77 cmd=['lqsim ',verbose,' ',multiserver_praqma,' -A ',num2str(options.samples),',3 -Pstop-on-message-loss=false -x ',filename];
78 case {'lqnsdefault'}
79 cmd=['lqns ',verbose,' ',multiserver_praqma,' -x ',filename];
80 otherwise
81 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename];
82 end
83 else
84 switch options.method
85 case {'default','lqns'}
86 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
87 case {'srvn'}
88 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
89 case {'exactmva'}
90 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pmva=exact -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
91 case {'srvn.exactmva'}
92 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pmva=exact -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
93 case {'sim','lqsim'}
94 cmd=['lqsim ',verbose,' ',multiserver_praqma,' -A ',num2str(options.samples),' -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
95 case {'lqnsdefault'}
96 cmd=['lqns ',verbose,' ',multiserver_praqma,' -x ',filename,' 2>&1'];
97 otherwise
98 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename,' 2>&1'];
99 end
100 end
101else
102 switch options.method
103 % case {'default','lqns'}
104 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -i ',num2str(options.iter_max),' -Pstop-on-message-loss=false -x ',filename]);
105 % case {'srvn'}
106 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -i ',num2str(options.iter_max),' -Playering=srvn -Pstop-on-message-loss=false -x ',filename]);
107 % case {'exactmva'}
108 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -i ',num2str(options.iter_max),' -Pmva=exact -Pstop-on-message-loss=false -x ',filename]);
109 % case {'srvnexact'}
110 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -i ',num2str(options.iter_max),' -Playering=srvn -Pmva=exact -Pstop-on-message-loss=false -x ',filename]);
111 % case {'sim','lqsim'}
112 % cmd=['lqsim ',verbose,' ',multiserver_praqma,' -A ',num2str(options.samples),',3 -Pstop-on-message-loss=false -x ',filename]);
113 % case {'lqnsdefault'}
114 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -x ',filename]);
115 % otherwise
116 % cmd=['lqns ',verbose,' ',multiserver_praqma,' -i ',num2str(options.iter_max),' -Pstop-on-message-loss=false -x ',filename]);
117 case {'default','lqns'}
118 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename];
119 case {'srvn'}
120 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pstop-on-message-loss=false -x ',filename];
121 case {'exactmva'}
122 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pmva=exact -Pstop-on-message-loss=false -x ',filename];
123 case {'srvn.exactmva'}
124 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Playering=srvn -Pmva=exact -Pstop-on-message-loss=false -x ',filename];
125 case {'sim','lqsim'}
126 %cmd=['lqsim ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename];
127 cmd=['lqsim ',verbose,' ',multiserver_praqma,' -A ',num2str(options.samples),' -Pstop-on-message-loss=false -x ',filename];
128 case {'lqnsdefault'}
129 cmd=['lqns ',verbose,' ',multiserver_praqma,' -x ',filename];
130 otherwise
131 cmd=['lqns ',verbose,' ',multiserver_praqma,' -Pstop-on-message-loss=false -x ',filename];
132 end
133end
134if options.verbose
135% line_printf('\nLQNS model: %s',filename);
136 line_printf('\nLQNS command: %s\n',cmd);
137end
138
139% Check for remote execution
140if isfield(options.config, 'remote') && options.config.remote
141 line_debug(options, 'LQNS: using remote execution at %s', options.config.remote_url);
142 if options.verbose
143 line_printf('\nUsing remote LQNS at: %s\n', options.config.remote_url);
144 end
145 self.runRemoteLQNS(filename, options);
146else
147 line_debug(options, 'LQNS: using local execution, command: %s', cmd);
148 % Local execution
149 system(cmd);
150end
151self.parseXMLResults(filename);
152
153if ~options.keep
154 rmdir(dirpath,'s');
155end
156runtime = toc;
157end