-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetMetrics.m
More file actions
144 lines (100 loc) · 5 KB
/
getMetrics.m
File metadata and controls
144 lines (100 loc) · 5 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
function MetricsMatrix = getMetrics(TargetNumber,RepulMultiplier,TrialNumberTot,HowDivisionTot,paramTrue)
if paramTrue == 1
load(['Parameters\param_',num2str(TargetNumber),'_',num2str(RepulMultiplier),'.mat']);
else
global T N dt xstar rstar Q P
dt = 0.006; % fixedDeltaTime
T = 30 * 2; % simulation total time
N = T / dt; % number of steps
Q = TargetNumber; % number of target
P = 2; % number of herder
xstar = zeros(2,1); % goal position initialization
rstar = 1; % radius of goal region
end
T_interval = T; % 45 for T = 60 | 84 for T = 120
steadystate = 1;
for how = HowDivisionTot(1) : HowDivisionTot(2)
switch how
case 1 % search strategy GLOBAL %
howSearch = 'Global';
case 2 % search strategy STATIC %
howSearch = 'Static';
case 3 % search strategy INDIVIDUAL %
howSearch = 'LeaderFollower';
case 4 % search strategy COOPERATIVE %
howSearch = 'PeerToPeer';
end
cont_successfull_trials = 0;
metrics_deltaTime = [];
metrics_containmentRate = [];
metrics_spreadNormalized = [];
metrics_spread = [];
metrics_distance = [];
metrics_distanceTravelled = [];
successfull_trials = [];
for TrialNumber = TrialNumberTot(1) : TrialNumberTot(2)
% load data from trialfile 'file_name' %
if paramTrue == 1
file_name = ['Trials\',howSearch,'\','trial_',num2str(howSearch),'_',num2str(TrialNumber),'_',num2str(TargetNumber),'_',num2str(RepulMultiplier),'.mat'];
else
file_name = ['C:\Users\fa17936\OneDrive - University of Bristol\Trials\',howSearch,'\','trial_',num2str(howSearch),'_',num2str(TrialNumber),'_',num2str(TargetNumber),'_',num2str(RepulMultiplier),'.mat'];
end
load(file_name);
if exist('Target','var')
for q = 1 : Q
TargetPos(:,:,q) = Target(q).x;
end
for q = 1 : P
HerderPos(:,:,q) = Herder(q).y;
end
end
% calculate function's arguments
for q = 1 : Q
for t = 1 : N
Target_norm(q,t) = norm(TargetPos(:,t,q) - xstar);
Target_norm_abs(q,t) = norm(TargetPos(:,t,q));
end
TargetPosX(q,:) = TargetPos(1,:,q);
TargetPosY(q,:) = TargetPos(2,:,q);
end
% discard unsuccessfull trials %
% a "T" long trial is considered succsessfull only if targets are contained for
% the "percentage" of last "T_interval" of the trial duration
[timeIN, timeOUT, deltaTimeIN] = ContainmentTimeFunc(Target_norm, steadystate, T_interval);
% if deltaTimeIN >= T_interval * percentage
cont_successfull_trials = cont_successfull_trials + 1;
successfull_trials = [successfull_trials, TrialNumber];
% containment time
metrics_deltaTime = [metrics_deltaTime; deltaTimeIN];
% containment rate
[contRate, escapeRate] = ContainmentRateFunc(Target_norm, steadystate, T_interval);
metrics_containmentRate = [metrics_containmentRate; contRate];
% heard spread
herdSpread = HerdSpreadFunc(TargetPosX, TargetPosY, steadystate, T_interval);
herdSpreadNormalized = herdSpread / (pi * rstar^2);
metrics_spreadNormalized = [metrics_spreadNormalized; herdSpreadNormalized];
metrics_spread = [metrics_spread; herdSpread];
% mean distance
TargetGoalAvgDistance = MeanDistanceFunc(TargetPosX, TargetPosY,steadystate,T_interval);
metrics_distance = [metrics_distance; TargetGoalAvgDistance];
% Distance travelled by each herder
for p = 1 : P
LenghtTrajectory(p) = DistanceTravelledFunc(HerderPos(:,:,p), steadystate, T_interval);
end
metrics_distanceTravelled = [metrics_distanceTravelled; LenghtTrajectory];
% end
end
MetricsMatrix(:,1,how) = metrics_deltaTime;
MetricsMatrix(:,2,how) = metrics_containmentRate;
MetricsMatrix(:,3,how) = metrics_spreadNormalized;
MetricsMatrix(:,4,how) = metrics_spread;
MetricsMatrix(:,5,how) = metrics_distance;
MetricsMatrix(:,6,how) = metrics_distanceTravelled(:,1);
MetricsMatrix(:,7,how) = metrics_distanceTravelled(:,2);
metrics(how).table = table(metrics_deltaTime, metrics_containmentRate, metrics_spreadNormalized, metrics_spread, metrics_distance, metrics_distanceTravelled);
metrics(how).name = howSearch;
metrics(how).cont_successfullTrials = cont_successfull_trials;
metrics(how).successfullTrials = successfull_trials;
end
save(['Metrics\Metrics_',num2str(TargetNumber),'_',num2str(RepulMultiplier),'.mat'],'metrics');
end