-
Notifications
You must be signed in to change notification settings - Fork 7
/
Greedy_speed.m
68 lines (61 loc) · 2.24 KB
/
Greedy_speed.m
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
function [resp, util, rejt, time] = Greedy_speed(data)
timeslots = data.timeslots;
ES_count = data.ES_count;
ES_speed = data.ES_speed;
ES_capacity = data.ES_capacity;
U_count = data.U_count;
U_tasksize = data.U_tasksize;
U_speed = data.U_speed;
U_avaes = data.U_avaes;
U_arriavaltime = data.U_arriavaltime;
ori_ES_capacity = ES_capacity;
time = [];
ES_register = zeros(1, ES_count);
acceptCount = 0;
rejectCount = 0;
totalResp = 0;
for i=1:timeslots
Users = U_arriavaltime{i};
for u_id = Users
tic;
t_ES_ids = U_avaes{u_id};
t_ES_avaids = [];
t_U_tasksize = U_tasksize(u_id);
for j=1:length(t_ES_ids)
e_id = t_ES_ids(j);
if ES_capacity(e_id) >= t_U_tasksize
t_ES_avaids(end+1) = e_id;
end
end
if isempty(t_ES_avaids)
rejectCount = rejectCount + 1;
% execute task locally
exectime = t_U_tasksize / U_speed(u_id);
totalResp = totalResp + exectime;
else
t_ES_rt = [];
t_ES_speed = [];
for e_id = t_ES_avaids
exectime = t_U_tasksize / ES_speed(e_id);
if ES_register(e_id) > i
exectime = exectime + ES_register(e_id) - i;
end
t_ES_rt(end+1) = exectime;
t_ES_speed(end+1) = ES_speed(e_id);
end
[xx indx] = max(t_ES_speed);
e_id = t_ES_avaids(indx);
rt = t_ES_rt(indx);
totalResp = totalResp + rt;
acceptCount = acceptCount + 1;
ES_capacity(e_id) = ES_capacity(e_id) - t_U_tasksize;
ES_register(e_id) = i + rt;
end
time(end+1) = toc;
end
end
resp = totalResp / U_count;
util = 1 - mean(ES_capacity./ori_ES_capacity);
rejt = rejectCount / U_count;
time = mean(time);
end