LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
mmap_scale.m
1function [SCALED] = mmap_scale(MMAP, M, maxIter)
2% Changes the mean inter-arrival time of an MMAP.
3% INPUT
4% - MMAP: MMAP to be scaled
5% - M: new mean
6if nargin<3
7 maxIter=30;
8end
9C = length(MMAP)-2;
10if length(M)==1
11
12 MOLD = map_mean(MMAP);
13
14 ratio = MOLD/M;
15
16 SCALED = cell(1,2+C);
17 SCALED{1} = MMAP{1} * ratio;
18 SCALED{2} = MMAP{2} * ratio;
19
20 for c = 1:C
21 SCALED{2+c} = MMAP{2+c} * ratio;
22 end
23else
24 SCALED{1} = MMAP{1};
25 SCALED{2} = 0*SCALED{1};
26 l = mmap_count_lambda(MMAP);
27 for c = 1:C
28 if l(c) > 0
29 SCALED{2+c} = MMAP{2+c} * (1/M(c))/l(c);
30 SCALED{2} = SCALED{2} + SCALED{2+c};
31 else
32 SCALED{2+c} = MMAP{2+c} * 0;
33 SCALED{2} = SCALED{2} + SCALED{2+c};
34 end
35 end
36 MMAP = mmap_normalize(SCALED);
37 return
38 % the previous assignment is heuristic because it also affects the
39 % other classes, we now refine it
40 try
41 if maxiter > 0
42 options = optimset();
43 options.Display = 'off';
44 options.tolFun = 1e-2;
45 options.MaxIter = maxIter;
46 %x=fmincon(@(X) objfun(X,M,MMAP),ones(1,C),[],[],[],[],1e-6+zeros(1,C),[],[],options);
47 x = fminsearchbnd(@(X) objfun(X,M,MMAP),ones(1,C),1e-6+zeros(1,C),[],options);
48 SCALED{1} = MMAP{1};
49 SCALED{2} = 0*SCALED{1};
50 for c = 1:C
51 SCALED{2+c} = MMAP{2+c} * x(c);
52 SCALED{2} = SCALED{2} + SCALED{2+c};
53 end
54 SCALED = mmap_normalize(SCALED);
55 end
56 catch
57 error('The input MMAP is invalid.');
58 end
59end
60end
61
62function f = objfun(x,M,MMAP)
63f = 0;
64C = length(MMAP)-2;
65SCALED{1} = MMAP{1};
66SCALED{2} = 0*SCALED{1};
67for c = 1:C
68 SCALED{2+c} = MMAP{2+c} * x(c);
69 SCALED{2} = SCALED{2} + SCALED{2+c};
70end
71SCALED = mmap_normalize(SCALED);
72l = mmap_count_lambda(SCALED);
73for c=1:C
74 f= f + norm((1/M(c))-l(c));
75end
76end
77