LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
infer_minps_setup.m
1function demandEst = infer_minps_setup(data, initSample, sampleSize, V, model, node)
2% MAIN_MINPS setups the input data for the MINPS estimation method and calls it
3%
4% Copyright (c) 2012-2014, Imperial College London
5% All rights reserved.
6
7
8R = size(data,2) - 1;
9sampleNumber = zeros(1,R+1);
10for k = 1:R
11 sampleNumber(k) = size(data{3,k},1);
12end
13
14% remove classes without samples
15newR = sum(sampleNumber>0);
16data2 = cell(6,newR+1);
17r=1;
18sampleNumber(R+1) = 1;
19for k=1:R+1
20 if sampleNumber(k)>0;
21 for j=1:6
22 data2{j,r} = data{j,k};
23 end
24 r=r+1;
25 end
26end
27data = data2;
28R = newR;
29% get queue length at arrival times
30qls = infer_get_qlen_arrival(data);
31
32rt = []; %response times
33class = []; % job classes
34ql = [];
35at = [];
36for k = 1:R
37 rt = [rt; data{4,k}];
38 class = [class; k*ones(size(data{4,k},1), 1)];
39 ql = [ql; qls{k} ];
40 at = [at; data{3,k}/1000];
41end
42
43% sort data to include data from all classes in the data set
44allTimes = [at rt class ql];
45allTimes = sortrows(allTimes,1);
46
47at = allTimes(:,1);
48rt = allTimes(:,2);
49class = allTimes(:,3);
50ql = allTimes(:,4:end);
51
52if sampleSize == 0
53 sampleSize = size(ql,1);
54end
55
56% select sample set
57firstSample = initSample;
58finalSample = initSample+sampleSize-1;
59sampleSet = firstSample:finalSample;
60
61qlExp = ql(sampleSet,:);
62rtExp = rt(sampleSet);
63classExp = class(sampleSet);
64numClassExp = hist(classExp, 1:R);
65
66% remove samples with zero response times
67valid = rtExp > 0;
68if any(~valid)
69 rtExp = rtExp(valid);
70 classExp = classExp(valid);
71 qlExp = qlExp(valid,:);
72end
73
74% Estimate number of threads
75Wexp = max(sum(ql,2));
76% Estimate mean number of busy processors
77numNotProcExp = Wexp - sum(sum(ql,1),2)/size(ql,1);
78numNotProcExp = numNotProcExp/R;
79% Estimate think-time rates
80lambda = zeros(1,R);
81for k = 1:R
82 lambda(k) = min(1E6, (numClassExp(k)/(at(finalSample) + rt(finalSample) - at(firstSample)) )/numNotProcExp);
83
84 if lambda(k) < 0
85 lambda(k) = 1E6;
86 end
87end
88
89demandEst = infer_minps(model, node, rtExp, classExp, qlExp);