plot1 kinda works
This commit is contained in:
@@ -10,9 +10,19 @@ 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 = true; % disable plotting for big performance increase (also disables video)
|
makePlots = false; % disable plotting for big performance increase (also disables video)
|
||||||
plotCommsGeometry = false; % disable plotting communications geometries
|
plotCommsGeometry = false; % disable plotting communications geometries
|
||||||
|
|
||||||
|
%% Scenario Reinitialization
|
||||||
|
% Number of extra reinitializations per test case (3 n-values x 4 configs = 12).
|
||||||
|
% Order: n3/A_1_alpha, n3/A_1_beta, n3/A_2_alpha, n3/B_1_beta,
|
||||||
|
% n5/A_1_alpha, ..., n6/B_1_beta
|
||||||
|
% Set inspectScenarios = true to pause after init for manual review.
|
||||||
|
% At the keyboard prompt, type the number of reinits needed into
|
||||||
|
% the variable 'reinitCount', then 'dbcont' to continue.
|
||||||
|
inspectScenarios = false;
|
||||||
|
reinit = zeros(1, 12);
|
||||||
|
|
||||||
%% Fixed Test Parameters
|
%% Fixed Test Parameters
|
||||||
useFixedTopology = true; % No lesser neighbor, fixed network instead
|
useFixedTopology = true; % No lesser neighbor, fixed network instead
|
||||||
minDimension = 50; % minimum domain size
|
minDimension = 50; % minimum domain size
|
||||||
@@ -22,7 +32,7 @@ classdef results < matlab.unittest.TestCase
|
|||||||
collisionRadius = 5;
|
collisionRadius = 5;
|
||||||
sensorPerformanceMinimum = 0.005;
|
sensorPerformanceMinimum = 0.005;
|
||||||
comRange = 20;
|
comRange = 20;
|
||||||
maxIter = 200;
|
maxIter = 250;
|
||||||
initialStepSize = 1;
|
initialStepSize = 1;
|
||||||
numObstacles = 3;
|
numObstacles = 3;
|
||||||
barrierGain = 1;
|
barrierGain = 1;
|
||||||
@@ -84,6 +94,18 @@ classdef results < matlab.unittest.TestCase
|
|||||||
% n = 3;
|
% n = 3;
|
||||||
% config = struct('numDist', 1, 'sensor', struct('alphaDist', 100, 'alphaTilt', 2, 'betaDist', 10, 'betaTilt', 0.5), 'doubleIntegrator', false);
|
% config = struct('numDist', 1, 'sensor', struct('alphaDist', 100, 'alphaTilt', 2, 'betaDist', 10, 'betaTilt', 0.5), 'doubleIntegrator', false);
|
||||||
|
|
||||||
|
% Compute test case index for reinit lookup
|
||||||
|
nKeys = fieldnames(tc.n);
|
||||||
|
configKeys = fieldnames(tc.config);
|
||||||
|
nIdx = find(cellfun(@(k) tc.n.(k) == n, nKeys));
|
||||||
|
configIdx = find(cellfun(@(k) isequal(tc.config.(k), config), configKeys));
|
||||||
|
testIdx = (nIdx - 1) * numel(configKeys) + configIdx;
|
||||||
|
|
||||||
|
% Determine number of reinitializations
|
||||||
|
reinitCount = tc.reinit(testIdx);
|
||||||
|
|
||||||
|
for reroll = 0:reinitCount
|
||||||
|
|
||||||
% Set up random cube domain
|
% Set up random cube domain
|
||||||
minAlt = tc.minDimension(1) * rand() * 0.5;
|
minAlt = tc.minDimension(1) * rand() * 0.5;
|
||||||
tc.testClass.domain = tc.testClass.domain.initializeRandom(REGION_TYPE.DOMAIN, "Domain", tc.minDimension, tc.maxDimension, tc.testClass.domain, minAlt);
|
tc.testClass.domain = tc.testClass.domain.initializeRandom(REGION_TYPE.DOMAIN, "Domain", tc.minDimension, tc.maxDimension, tc.testClass.domain, minAlt);
|
||||||
@@ -98,7 +120,8 @@ classdef results < matlab.unittest.TestCase
|
|||||||
notPosDef = true;
|
notPosDef = true;
|
||||||
while notPosDef
|
while notPosDef
|
||||||
sig = reshape(sort(rand(1, 4) * min(tc.testClass.domain.dimensions(1:2))), [1, 2, 2]);
|
sig = reshape(sort(rand(1, 4) * min(tc.testClass.domain.dimensions(1:2))), [1, 2, 2]);
|
||||||
sig(1, 2, 1) = sig(1, 1, 2);
|
sig(1, 2, 1) = max([sig(1, 1, 2), sig(1, 2, 1)]);
|
||||||
|
sig(1, 1, 2) = sig(1, 2, 1);
|
||||||
[~, notPosDef] = chol(squeeze(sig));
|
[~, notPosDef] = chol(squeeze(sig));
|
||||||
end
|
end
|
||||||
objectiveMu = [objectiveMu; mu(1:2)];
|
objectiveMu = [objectiveMu; mu(1:2)];
|
||||||
@@ -205,14 +228,13 @@ classdef results < matlab.unittest.TestCase
|
|||||||
% Randomly shuffle agents to vary index-based topology
|
% Randomly shuffle agents to vary index-based topology
|
||||||
agents = agents(randperm(numel(agents)));
|
agents = agents(randperm(numel(agents)));
|
||||||
|
|
||||||
% Add random obstacles
|
% Add random obstacles (each limited to 1/4 domain size in X and Y)
|
||||||
obstacles = cell(tc.numObstacles, 1);
|
obstacles = cell(tc.numObstacles, 1);
|
||||||
[obstacles{:}] = deal(rectangularPrism);
|
[obstacles{:}] = deal(rectangularPrism);
|
||||||
|
|
||||||
% Define target region for obstacles (between agents and objective)
|
% Define target region for obstacles (between agents and objective)
|
||||||
agentExtent = max(cell2mat(cellfun(@(x) x.pos(1:2), agents, "UniformOutput", false))) + max(cellfun(@(x) x.collisionGeometry.radius, agents));
|
agentExtent = max(cell2mat(cellfun(@(x) x.pos(1:2), agents, "UniformOutput", false))) + max(cellfun(@(x) x.collisionGeometry.radius, agents));
|
||||||
objExtent = tc.testClass.domain.objective.groundPos - tc.testClass.domain.objective.protectedRange;
|
objExtent = tc.testClass.domain.objective.groundPos - tc.testClass.domain.objective.protectedRange;
|
||||||
% Per-axis: use gap if valid, else fall back to full domain
|
|
||||||
obsMin = zeros(1, 2);
|
obsMin = zeros(1, 2);
|
||||||
obsMax = zeros(1, 2);
|
obsMax = zeros(1, 2);
|
||||||
for dim = 1:2
|
for dim = 1:2
|
||||||
@@ -224,15 +246,17 @@ classdef results < matlab.unittest.TestCase
|
|||||||
obsMax(dim) = tc.testClass.domain.maxCorner(dim);
|
obsMax(dim) = tc.testClass.domain.maxCorner(dim);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
maxObsSize = 3 * tc.collisionRadius * ones(1, 3);
|
||||||
|
|
||||||
for jj = 1:size(obstacles, 1)
|
for jj = 1:size(obstacles, 1)
|
||||||
retry = true;
|
retry = true;
|
||||||
while retry
|
while retry
|
||||||
retry = false;
|
retry = false;
|
||||||
|
|
||||||
% Generate corners within target region
|
% Generate random anchor point, then random size up to 3x collision radius
|
||||||
cornersXY = obsMin + sort(rand(2, 2), 1, "ascend") .* (obsMax - obsMin);
|
anchor = [obsMin + rand(1, 2) .* (obsMax - obsMin), minAlt];
|
||||||
corners = [cornersXY, [minAlt; minAlt + rand * (tc.testClass.domain.maxCorner(3) - minAlt)]];
|
obsSize = rand(1, 3) .* maxObsSize;
|
||||||
|
corners = [anchor; anchor + obsSize];
|
||||||
|
|
||||||
% Initialize obstacle using proposed coordinates
|
% Initialize obstacle using proposed coordinates
|
||||||
obstacles{jj} = obstacles{jj}.initialize(corners, REGION_TYPE.OBSTACLE, sprintf("Obstacle %d", jj));
|
obstacles{jj} = obstacles{jj}.initialize(corners, REGION_TYPE.OBSTACLE, sprintf("Obstacle %d", jj));
|
||||||
@@ -269,6 +293,18 @@ classdef results < matlab.unittest.TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end % reroll loop
|
||||||
|
|
||||||
|
% Inspect scenario if enabled
|
||||||
|
if tc.inspectScenarios
|
||||||
|
tc.testClass = tc.testClass.initialize(tc.testClass.domain, agents, tc.barrierGain, tc.barrierExponent, minAlt, tc.timestep, tc.maxIter, obstacles, tc.makePlots, tc.makeVideo, config.doubleIntegrator, tc.dampingCoeff, tc.useFixedTopology);
|
||||||
|
fprintf("Test %d (n=%d, config=%s): reinit=%d. Inspect plot.\n", testIdx, n, configKeys{configIdx}, reinitCount);
|
||||||
|
fprintf("To add reinits, update tc.reinit(%d) and rerun.\n", testIdx);
|
||||||
|
keyboard;
|
||||||
|
tc.testClass = tc.testClass.teardown();
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
% Set up simulation
|
% Set up simulation
|
||||||
tc.testClass = tc.testClass.initialize(tc.testClass.domain, agents, tc.barrierGain, tc.barrierExponent, minAlt, tc.timestep, tc.maxIter, obstacles, tc.makePlots, tc.makeVideo, config.doubleIntegrator, tc.dampingCoeff, tc.useFixedTopology);
|
tc.testClass = tc.testClass.initialize(tc.testClass.domain, agents, tc.barrierGain, tc.barrierExponent, minAlt, tc.timestep, tc.maxIter, obstacles, tc.makePlots, tc.makeVideo, config.doubleIntegrator, tc.dampingCoeff, tc.useFixedTopology);
|
||||||
|
|
||||||
@@ -294,5 +330,6 @@ classdef results < matlab.unittest.TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user