diff --git a/@agent/initialize.m b/@agent/initialize.m index 756ec3e..4169e54 100644 --- a/@agent/initialize.m +++ b/@agent/initialize.m @@ -28,12 +28,6 @@ function obj = initialize(obj, pos, vel, pan, tilt, collisionGeometry, sensorMod obj.debug = debug; obj.plotCommsGeometry = plotCommsGeometry; - if isempty(obj.label) - obj.label = sprintf("Agent %d"); - end - - - % Add spherical geometry based on com range obj.commsGeometry = obj.commsGeometry.initialize(obj.pos, comRange, REGION_TYPE.COMMS, sprintf("%s Comms Geometry", obj.label)); diff --git a/@miSim/initialize.m b/@miSim/initialize.m index 67a480c..d2457cb 100644 --- a/@miSim/initialize.m +++ b/@miSim/initialize.m @@ -52,10 +52,19 @@ function obj = initialize(obj, domain, objective, agents, minAlt, timestep, part % Define agents obj.agents = agents; obj.constraintAdjacencyMatrix = logical(eye(size(agents, 1))); + + % Set labels for agents and collision geometries in cases where they + % were not provieded at the time of their initialization for ii = 1:size(obj.agents, 1) + % Agent if isempty(char(obj.agents{ii}.label)) obj.agents{ii}.label = sprintf("Agent %d", ii); end + + % Collision geometry + if isempty(char(obj.agents{ii}.collisionGeometry.label)) + obj.agents{ii}.collisionGeometry.label = sprintf("Agent %d Collision Geometry", ii); + end end % Compute adjacency matrix and lesser neighbors diff --git a/geometries/@spherical/spherical.m b/geometries/@spherical/spherical.m index 6fb66b3..d2e9269 100644 --- a/geometries/@spherical/spherical.m +++ b/geometries/@spherical/spherical.m @@ -1,10 +1,6 @@ classdef spherical % Rectangular prism geometry properties (SetAccess = private, GetAccess = public) - % Meta - tag = REGION_TYPE.INVALID; - label = ""; - % Spatial center = NaN; radius = NaN; @@ -21,6 +17,10 @@ classdef spherical dBarrierFunction; end properties (SetAccess = public, GetAccess = public) + % Meta + tag = REGION_TYPE.INVALID; + label = ""; + % Sensing objective (for DOMAIN region type only) objective; end diff --git a/test/test_miSim.m b/test/test_miSim.m index e96052e..1595b0c 100644 --- a/test/test_miSim.m +++ b/test/test_miSim.m @@ -155,7 +155,7 @@ classdef test_miSim < matlab.unittest.TestCase % Initialize candidate agent collision geometry candidateGeometry = rectangularPrism; - candidateGeometry = candidateGeometry.initialize([candidatePos - tc.collisionRanges(ii) * ones(1, 3); candidatePos + tc.collisionRanges(ii) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", ii)); + candidateGeometry = candidateGeometry.initialize([candidatePos - tc.collisionRanges(ii) * ones(1, 3); candidatePos + tc.collisionRanges(ii) * ones(1, 3)], REGION_TYPE.COLLISION); % Initialize candidate agent sensor model sensor = sigmoidSensor; @@ -287,9 +287,9 @@ classdef test_miSim < matlab.unittest.TestCase % Initialize candidate agent collision geometry % candidateGeometry = rectangularPrism; - % candidateGeometry = candidateGeometry.initialize([candidatePos - tc.collisionRanges(ii) * ones(1, 3); candidatePos + tc.collisionRanges(ii) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", ii)); + % candidateGeometry = candidateGeometry.initialize([candidatePos - tc.collisionRanges(ii) * ones(1, 3); candidatePos + tc.collisionRanges(ii) * ones(1, 3)], REGION_TYPE.COLLISION); candidateGeometry = spherical; - candidateGeometry = candidateGeometry.initialize(candidatePos, tc.collisionRanges(ii), REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", ii)); + candidateGeometry = candidateGeometry.initialize(candidatePos, tc.collisionRanges(ii), REGION_TYPE.COLLISION); % Initialize candidate agent sensor model sensor = sigmoidSensor; @@ -363,8 +363,8 @@ classdef test_miSim < matlab.unittest.TestCase dh = [0,0,-1]; % bias agent altitude from domain center geometry1 = rectangularPrism; geometry2 = geometry1; - geometry1 = geometry1.initialize([tc.domain.center + dh + [d, 0, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh + [d, 0, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); - geometry2 = geometry2.initialize([tc.domain.center + dh - [d, 0, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh - [d, 0, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 2)); + geometry1 = geometry1.initialize([tc.domain.center + dh + [d, 0, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh + [d, 0, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION); + geometry2 = geometry2.initialize([tc.domain.center + dh - [d, 0, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh - [d, 0, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -383,7 +383,7 @@ classdef test_miSim < matlab.unittest.TestCase % Optional third agent along the +Y axis geometry3 = rectangularPrism; - geometry3 = geometry3.initialize([tc.domain.center + dh - [0, d, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh - [0, d, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 3)); + geometry3 = geometry3.initialize([tc.domain.center + dh - [0, d, 0] - tc.collisionRanges(1) * ones(1, 3); tc.domain.center + dh - [0, d, 0] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION); tc.agents{3} = agent; tc.agents{3} = tc.agents{3}.initialize(tc.domain.center + dh - [0, d, 0], zeros(1, 3), 0, 0, geometry3, sensor, @gradientAscent, 3*d); @@ -401,7 +401,7 @@ classdef test_miSim < matlab.unittest.TestCase % Initialize agent collision geometry geometry1 = rectangularPrism; - geometry1 = geometry1.initialize([[tc.domain.center(1:2), 3] - tc.collisionRanges(1) * ones(1, 3); [tc.domain.center(1:2), 3] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); + geometry1 = geometry1.initialize([[tc.domain.center(1:2), 3] - tc.collisionRanges(1) * ones(1, 3); [tc.domain.center(1:2), 3] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -431,7 +431,7 @@ classdef test_miSim < matlab.unittest.TestCase % Initialize agent collision geometry geometry1 = rectangularPrism; - geometry1 = geometry1.initialize([[tc.domain.center(1:2)-tc.domain.dimensions(1)/3, 3] - tc.collisionRanges(1) * ones(1, 3); [tc.domain.center(1:2)-tc.domain.dimensions(1)/3, 3] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); + geometry1 = geometry1.initialize([[tc.domain.center(1:2)-tc.domain.dimensions(1)/3, 3] - tc.collisionRanges(1) * ones(1, 3); [tc.domain.center(1:2)-tc.domain.dimensions(1)/3, 3] + tc.collisionRanges(1) * ones(1, 3)], REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -469,8 +469,8 @@ classdef test_miSim < matlab.unittest.TestCase d = [2.5, 0, 0]; geometry1 = spherical; geometry2 = spherical; - geometry1 = geometry1.initialize(tc.domain.center + d, radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); - geometry2 = geometry2.initialize(tc.domain.center - d, radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); + geometry1 = geometry1.initialize(tc.domain.center + d, radius, REGION_TYPE.COLLISION); + geometry2 = geometry2.initialize(tc.domain.center - d, radius, REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -506,8 +506,8 @@ classdef test_miSim < matlab.unittest.TestCase d = [3, 0, 0]; geometry1 = spherical; geometry2 = geometry1; - geometry1 = geometry1.initialize(tc.domain.center - d + [0, radius * 1.5, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); - geometry2 = geometry2.initialize(tc.domain.center - d - [0, radius * 1.5, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); + geometry1 = geometry1.initialize(tc.domain.center - d + [0, radius * 1.5, 0], radius, REGION_TYPE.COLLISION); + geometry2 = geometry2.initialize(tc.domain.center - d - [0, radius * 1.5, 0], radius, REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -546,8 +546,8 @@ classdef test_miSim < matlab.unittest.TestCase d = 2; geometry1 = spherical; geometry2 = geometry1; - geometry1 = geometry1.initialize(tc.domain.center - [d, 0, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); - geometry2 = geometry2.initialize(tc.domain.center - [0, d, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); + geometry1 = geometry1.initialize(tc.domain.center - [d, 0, 0], radius, REGION_TYPE.COLLISION); + geometry2 = geometry2.initialize(tc.domain.center - [0, d, 0], radius, REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -591,11 +591,11 @@ classdef test_miSim < matlab.unittest.TestCase geometry3 = geometry2; geometry4 = geometry3; geometry5 = geometry4; - geometry1 = geometry1.initialize(tc.domain.center + [d, 0, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 1)); - geometry2 = geometry2.initialize(tc.domain.center, radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 2)); - geometry3 = geometry2.initialize(tc.domain.center + [-d, d, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 3)); - geometry4 = geometry2.initialize(tc.domain.center + [-2*d, d, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 4)); - geometry5 = geometry2.initialize(tc.domain.center + [0, d, 0], radius, REGION_TYPE.COLLISION, sprintf("Agent %d collision volume", 5)); + geometry1 = geometry1.initialize(tc.domain.center + [d, 0, 0], radius, REGION_TYPE.COLLISION); + geometry2 = geometry2.initialize(tc.domain.center, radius, REGION_TYPE.COLLISION); + geometry3 = geometry2.initialize(tc.domain.center + [-d, d, 0], radius, REGION_TYPE.COLLISION); + geometry4 = geometry2.initialize(tc.domain.center + [-2*d, d, 0], radius, REGION_TYPE.COLLISION); + geometry5 = geometry2.initialize(tc.domain.center + [0, d, 0], radius, REGION_TYPE.COLLISION); % Initialize agent sensor model sensor = sigmoidSensor; @@ -612,8 +612,6 @@ classdef test_miSim < matlab.unittest.TestCase tc.agents{5} = tc.agents{5}.initialize(tc.domain.center + [0, d, 0], zeros(1,3), 0, 0, geometry5, sensor, @gradientAscent, commsRadius); % TODO - % make agent label optional, can be derived from index - % Consider how to do the same for collision geometry label % make @gradientAscent always the choice % Build collision geometry initialization into agent initialization?