60 lines
2.1 KiB
Matlab
60 lines
2.1 KiB
Matlab
function obj = initialize(obj, domain, objective, agents, minAlt, timestep, partitoningFreq, maxIter, obstacles, makeVideo)
|
|
arguments (Input)
|
|
obj (1, 1) {mustBeA(obj, 'miSim')};
|
|
domain (1, 1) {mustBeGeometry};
|
|
objective (1, 1) {mustBeA(objective, 'sensingObjective')};
|
|
agents (:, 1) cell;
|
|
minAlt (1, 1) double = 1;
|
|
timestep (:, 1) double = 0.05;
|
|
partitoningFreq (:, 1) double = 0.25
|
|
maxIter (:, 1) double = 1000;
|
|
obstacles (:, 1) cell {mustBeGeometry} = cell(0, 1);
|
|
makeVideo (1, 1) logical = true;
|
|
end
|
|
arguments (Output)
|
|
obj (1, 1) {mustBeA(obj, 'miSim')};
|
|
end
|
|
|
|
% enable/disable video writer
|
|
obj.makeVideo = makeVideo;
|
|
|
|
% Define simulation time parameters
|
|
obj.timestep = timestep;
|
|
obj.maxIter = maxIter - 1;
|
|
|
|
% Define domain
|
|
obj.domain = domain;
|
|
obj.partitioningFreq = partitoningFreq;
|
|
|
|
% Add geometries representing obstacles within the domain
|
|
obj.obstacles = obstacles;
|
|
|
|
% Add an additional obstacle spanning the domain's footprint to
|
|
% represent the minimum allowable altitude
|
|
obj.minAlt = minAlt;
|
|
obj.obstacles{end + 1, 1} = rectangularPrism;
|
|
obj.obstacles{end, 1} = obj.obstacles{end, 1}.initialize([obj.domain.minCorner; obj.domain.maxCorner(1:2), obj.minAlt], "OBSTACLE", "Minimum Altitude Domain Constraint");
|
|
|
|
% Define objective
|
|
obj.objective = objective;
|
|
|
|
% Define agents
|
|
obj.agents = agents;
|
|
|
|
% Compute adjacency matrix
|
|
obj = obj.updateAdjacency();
|
|
|
|
% Set up times to iterate over
|
|
obj.times = linspace(0, obj.timestep * obj.maxIter, obj.maxIter+1)';
|
|
obj.partitioningTimes = obj.times(obj.partitioningFreq:obj.partitioningFreq:size(obj.times, 1));
|
|
|
|
% Prepare performance data store (at t = 0, all have 0 performance)
|
|
obj.fPerf = figure;
|
|
obj.perf = [zeros(size(obj.agents, 1) + 1, 1), NaN(size(obj.agents, 1) + 1, size(obj.partitioningTimes, 1) - 1)];
|
|
|
|
% Create initial partitioning
|
|
obj = obj.partition();
|
|
|
|
% Set up plots showing initialized state
|
|
obj = obj.plot();
|
|
end |