File: svmocas_parseout.m

package info (click to toggle)
libocas 0.97%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 6,744 kB
  • sloc: ansic: 7,956; makefile: 103; sh: 7
file content (131 lines) | stat: -rw-r--r-- 3,371 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
function [iter,timing,trn_err] = svmocas_parseout(fname)
% SVMOCAS_PARSEOUT parses text output of SVMOCAS solver.
% 
% Synopsis:
%   [iter,timing,trn_err] = svmocas_parseout(fname)
%
% Inputs:
%  fname [string] file which contains OCAS output; e.g. created by running
%
%    ./svmocas -c 10 -b 1 riply_trn.light ocas.model > out.txt
%
% Outputs:
%  iter [1 x nIter (struct)] progress info printed by OCAS solver:
%   .time [1x1] runtime
%   .Q_P [1x1] primal objective value
%   .Q_D [1x1] dual (reduced) objective value
%   .trn_err [1x1] training error
%   .nza [1x1] number of active cutting planes
%   .qpf [1x1] return flag of inner QP solver
%
%  timing [struct] Timing statistics.
%  trn_err [1x1] Training error.
% 
% Example:  
%  iter = svmocas_parseout('out.txt');
%  figure; hold on;
%  plot([iter.time],[iter.Q_P]); 
%  plot([iter.time],[iter.Q_D],'r')
% 


lines = textread(fname,'%s','delimiter','\n','bufsize',100000);

from = strmatch('Starting optimization:',lines,'exact')+1;
to = strmatch('Stopping condition:',lines)-1;

for i=from:to
   cnt = i-from+1;
   l = lines{i};

   b = strfind(l,'tim=');
   e = min(strfind(l(b:end),','));
   iter(cnt).time = str2num(l(b+length('tim='):b+e-2));

   b = strfind(l,'Q_P=');
   e = min(strfind(l(b:end),','));
   iter(cnt).Q_P = str2num(l(b+length('Q_P='):b+e-2));

   b = strfind(l,'Q_D=');
   e = min(strfind(l(b:end),','));
   iter(cnt).Q_D = str2num(l(b+length('Q_D='):b+e-2));

   if i > from
       b = strfind(l,'nza');
       e = min(strfind(l(b:end),','));
       iter(cnt).nza = str2num(l(b+length('nza'):b+e-2));

       b = strfind(l,'err');
       e = min(strfind(l(b:end),','));
       iter(cnt).trn_err = str2num(l(b+length('err'):b+e-2));

       b = strfind(l,'qpf');
       iter(cnt).qpf = str2num(l(b+length('nza'):end));
   else
       iter(cnt).nza = [];
       iter(cnt).trn_err = [];
       iter(cnt).qpf = [];
   end
end

i = strmatch('load_time',lines);
if isempty(i)
    i = strmatch('init_time',lines);
end
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.load_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('qp_solver_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.qp_solver_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('sort_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.sort_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('output_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.output_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('add_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.add_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('w_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.w_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('ocas_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.ocas_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('total_time',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'[s]'));
timing.total_time = str2num(l(b+length(':'):b+e-2));

i = strmatch('Training error:',lines);
l = lines{i};
b = strfind(l,':');
e = min(strfind(l(b:end),'%'));
trn_err = str2num(l(b+length(':'):b+e-2))/100;



return;
% EOF