added second plot - pairwise distances
This commit is contained in:
88
plot1.m
88
plot1.m
@@ -7,10 +7,14 @@ simHists = simHists(endsWith({simHists.name}, 'miSimHist.mat'));
|
|||||||
assert(length(simHists) == length(simInits), "input data availability mismatch");
|
assert(length(simHists) == length(simInits), "input data availability mismatch");
|
||||||
|
|
||||||
% Initialize plotting data
|
% Initialize plotting data
|
||||||
Cfinal = NaN(12, 1);
|
nRuns = length(simHists);
|
||||||
n = NaN(12, 1);
|
Cfinal = NaN(nRuns, 1);
|
||||||
doubleIntegrator = NaN(12, 1);
|
n = NaN(nRuns, 1);
|
||||||
numObjective = NaN(12, 1);
|
doubleIntegrator = NaN(nRuns, 1);
|
||||||
|
numObjective = NaN(nRuns, 1);
|
||||||
|
positions = cell(6, nRuns);
|
||||||
|
commsRadius = NaN(nRuns, 1);
|
||||||
|
collisionRadius = NaN(nRuns, 1);
|
||||||
|
|
||||||
% Aggregate relevant data
|
% Aggregate relevant data
|
||||||
for ii = 1:length(simHists)
|
for ii = 1:length(simHists)
|
||||||
@@ -26,11 +30,18 @@ for ii = 1:length(simHists)
|
|||||||
n(ii) = init.numAgents;
|
n(ii) = init.numAgents;
|
||||||
doubleIntegrator(ii) = init.useDoubleIntegrator;
|
doubleIntegrator(ii) = init.useDoubleIntegrator;
|
||||||
numObjective(ii) = size(init.objectivePos, 1);
|
numObjective(ii) = size(init.objectivePos, 1);
|
||||||
|
commsRadius(ii) = unique(init.comRange);
|
||||||
|
collisionRadius(ii) = unique(init.collisionRadius);
|
||||||
for jj = 1:length(hist.out.agent)
|
for jj = 1:length(hist.out.agent)
|
||||||
alphaDist(jj, ii) = hist.out.agent(jj).sensor.alphaDist;
|
alphaDist(jj, ii) = hist.out.agent(jj).sensor.alphaDist;
|
||||||
|
positions{jj, ii} = hist.out.agent(jj).pos;
|
||||||
|
assert(hist.out.agent(jj).commsRadius == commsRadius(ii));
|
||||||
|
assert(hist.out.agent(jj).collisionRadius == collisionRadius(ii));
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
commsRadius = unique(commsRadius); assert(isscalar(commsRadius));
|
||||||
|
collisionRadius = unique(collisionRadius); assert(isscalar(collisionRadius));
|
||||||
sensors = unique(alphaDist(1, :));
|
sensors = unique(alphaDist(1, :));
|
||||||
|
|
||||||
config = [];
|
config = [];
|
||||||
@@ -62,8 +73,8 @@ for ii = 1:length(simHists)
|
|||||||
end
|
end
|
||||||
|
|
||||||
close all;
|
close all;
|
||||||
f = figure;
|
f1 = figure;
|
||||||
x = axes; grid(x, "on");
|
x1 = axes;
|
||||||
|
|
||||||
n_unique = sort(unique(n));
|
n_unique = sort(unique(n));
|
||||||
C = [];
|
C = [];
|
||||||
@@ -77,5 +88,68 @@ ylabel("Final coverage (fraction of maximum)");
|
|||||||
title("Final performance of parameterizations");
|
title("Final performance of parameterizations");
|
||||||
legend(["$AI\alpha$"; "$AI\beta$"; "$AII\alpha$"; "$BI\beta$"], "Interpreter", "latex");
|
legend(["$AI\alpha$"; "$AI\beta$"; "$AII\alpha$"; "$BI\beta$"], "Interpreter", "latex");
|
||||||
grid("on");
|
grid("on");
|
||||||
keyboard
|
|
||||||
|
|
||||||
|
f2 = figure;
|
||||||
|
x2 = axes;
|
||||||
|
|
||||||
|
% Compute pairwise distances between agents in each column of positions
|
||||||
|
% cell array
|
||||||
|
% Compute pairwise distances between agents
|
||||||
|
maxPairs = nchoosek(6, 2); % 15 pairs for max 6 agents
|
||||||
|
pairDist = cell(maxPairs, nRuns);
|
||||||
|
for ii = 1:nRuns
|
||||||
|
pp = 0;
|
||||||
|
for jj = 1:n(ii)-1
|
||||||
|
for kk = jj+1:n(ii)
|
||||||
|
pp = pp + 1;
|
||||||
|
pairDist{pp, ii} = vecnorm(positions{jj, ii} - positions{kk, ii}, 2, 2);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Compute mean, min, max pairwise distance across all pairs and timesteps per run
|
||||||
|
meanPairDist = NaN(nRuns, 1);
|
||||||
|
minPairDist = NaN(nRuns, 1);
|
||||||
|
maxPairDist = NaN(nRuns, 1);
|
||||||
|
for ii = 1:nRuns
|
||||||
|
nPairs = nchoosek(n(ii), 2);
|
||||||
|
D = vertcat(pairDist{1:nPairs, ii});
|
||||||
|
meanPairDist(ii) = mean(D);
|
||||||
|
minPairDist(ii) = min(D);
|
||||||
|
maxPairDist(ii) = max(D);
|
||||||
|
end
|
||||||
|
|
||||||
|
% Group pairwise distance stats by n-value (same layout as bar plot)
|
||||||
|
nConfigs = nRuns / length(n_unique);
|
||||||
|
meanD = NaN(length(n_unique), nConfigs);
|
||||||
|
minD = NaN(length(n_unique), nConfigs);
|
||||||
|
maxD = NaN(length(n_unique), nConfigs);
|
||||||
|
for ii = 1:length(n_unique)
|
||||||
|
idx = find(n == n_unique(ii));
|
||||||
|
meanD(ii, :) = meanPairDist(idx)';
|
||||||
|
minD(ii, :) = minPairDist(idx)';
|
||||||
|
maxD(ii, :) = maxPairDist(idx)';
|
||||||
|
end
|
||||||
|
|
||||||
|
% Plot whiskers (min to max) with mean markers
|
||||||
|
nGroups = length(n_unique);
|
||||||
|
barWidth = 0.8;
|
||||||
|
groupWidth = barWidth / nConfigs;
|
||||||
|
hold(x2, 'on');
|
||||||
|
for jj = 1:nConfigs
|
||||||
|
xPos = (1:nGroups) + (jj - (nConfigs + 1) / 2) * groupWidth;
|
||||||
|
errorbar(x2, xPos, meanD(:, jj), meanD(:, jj) - minD(:, jj), maxD(:, jj) - meanD(:, jj), ...
|
||||||
|
'o', 'LineWidth', 1.5, 'MarkerSize', 6, 'CapSize', 10);
|
||||||
|
end
|
||||||
|
hold(x2, 'off');
|
||||||
|
set(x2, 'XTick', 1:nGroups, 'XTickLabel', string(n_unique));
|
||||||
|
xlabel(x2, "Number of agents");
|
||||||
|
ylabel(x2, "Pairwise distance");
|
||||||
|
title(x2, "Pairwise Agent Distances (min/mean/max)");
|
||||||
|
legend(x2, ["$AI\alpha$"; "$AI\beta$"; "$AII\alpha$"; "$BI\beta$"], "Interpreter", "latex");
|
||||||
|
grid(x2, "on");
|
||||||
|
|
||||||
|
yline(collisionRadius, 'r--', "Label", "Collision Radius", "LabelHorizontalAlignment", "left", "HandleVisibility", "off");
|
||||||
|
yline(commsRadius, 'r--', "Label", "Communications Radius", "LabelHorizontalAlignment", "left", "HandleVisibility", "off");
|
||||||
|
|
||||||
|
ylim([0, commsRadius + 5]);
|
||||||
@@ -10,7 +10,7 @@ classdef results < matlab.unittest.TestCase
|
|||||||
%% Diagnostic Parameters
|
%% Diagnostic Parameters
|
||||||
% No effect on simulation dynamics
|
% No effect on simulation dynamics
|
||||||
makeVideo = false; % disable video writing for big performance increase
|
makeVideo = false; % disable video writing for big performance increase
|
||||||
makePlots = false; % disable plotting for big performance increase (also disables video)
|
makePlots = true; % disable plotting for big performance increase (also disables video)
|
||||||
plotCommsGeometry = false; % disable plotting communications geometries
|
plotCommsGeometry = false; % disable plotting communications geometries
|
||||||
|
|
||||||
%% Scenario Reinitialization
|
%% Scenario Reinitialization
|
||||||
@@ -54,17 +54,6 @@ classdef results < matlab.unittest.TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
methods (TestMethodSetup)
|
|
||||||
% % Generate a random domain for each test
|
|
||||||
% function tc = setDomain(tc)
|
|
||||||
% tc.testClass.domain = rectangularPrism;
|
|
||||||
% % random integer-dimensioned cubic domain
|
|
||||||
% tc.testClass.domain = tc.testClass.domain.initializeRandom(REGION_TYPE.DOMAIN, "Domain", tc.minDimension);
|
|
||||||
% % Random bivariate normal PDF objective
|
|
||||||
% tc.testClass.domain.objective = tc.testClass.domain.objective.initializeRandomMvnpdf(tc.testClass.domain, tc.discretizationStep, tc.protectedRange);
|
|
||||||
% end
|
|
||||||
end
|
|
||||||
|
|
||||||
methods (Static, Access = private)
|
methods (Static, Access = private)
|
||||||
function c = makeConfigs()
|
function c = makeConfigs()
|
||||||
rng(results.seed);
|
rng(results.seed);
|
||||||
|
|||||||
Reference in New Issue
Block a user