added second plot - pairwise distances

This commit is contained in:
2026-03-15 17:43:45 -07:00
parent 0d02e5d1f5
commit 01f2af9102
2 changed files with 82 additions and 19 deletions

88
plot1.m
View File

@@ -7,10 +7,14 @@ simHists = simHists(endsWith({simHists.name}, 'miSimHist.mat'));
assert(length(simHists) == length(simInits), "input data availability mismatch");
% Initialize plotting data
Cfinal = NaN(12, 1);
n = NaN(12, 1);
doubleIntegrator = NaN(12, 1);
numObjective = NaN(12, 1);
nRuns = length(simHists);
Cfinal = NaN(nRuns, 1);
n = NaN(nRuns, 1);
doubleIntegrator = NaN(nRuns, 1);
numObjective = NaN(nRuns, 1);
positions = cell(6, nRuns);
commsRadius = NaN(nRuns, 1);
collisionRadius = NaN(nRuns, 1);
% Aggregate relevant data
for ii = 1:length(simHists)
@@ -26,11 +30,18 @@ for ii = 1:length(simHists)
n(ii) = init.numAgents;
doubleIntegrator(ii) = init.useDoubleIntegrator;
numObjective(ii) = size(init.objectivePos, 1);
commsRadius(ii) = unique(init.comRange);
collisionRadius(ii) = unique(init.collisionRadius);
for jj = 1:length(hist.out.agent)
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
commsRadius = unique(commsRadius); assert(isscalar(commsRadius));
collisionRadius = unique(collisionRadius); assert(isscalar(collisionRadius));
sensors = unique(alphaDist(1, :));
config = [];
@@ -62,8 +73,8 @@ for ii = 1:length(simHists)
end
close all;
f = figure;
x = axes; grid(x, "on");
f1 = figure;
x1 = axes;
n_unique = sort(unique(n));
C = [];
@@ -77,5 +88,68 @@ ylabel("Final coverage (fraction of maximum)");
title("Final performance of parameterizations");
legend(["$AI\alpha$"; "$AI\beta$"; "$AII\alpha$"; "$BI\beta$"], "Interpreter", "latex");
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]);

View File

@@ -10,7 +10,7 @@ classdef results < matlab.unittest.TestCase
%% Diagnostic Parameters
% No effect on simulation dynamics
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
%% Scenario Reinitialization
@@ -54,17 +54,6 @@ classdef results < matlab.unittest.TestCase
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)
function c = makeConfigs()
rng(results.seed);