Как сформировать треугольную флокированную формацию?

#matlab #triangular #multi-agent

#matlab #треугольное #мультиагент

Вопрос:

Я использую MATLAB для моделирования управления формированием многоагентных систем. В настоящее время я использую алгоритм стекания, и мне удалось смоделировать круговое скопление. Как я могу смоделировать агентов для формирования треугольного скопления? Агенты будут сходиться в скопление, используя геометрические шаблоны, типизированные решеткой

 %Number of agents
prompt = 'Enter number of Agents: ';

Agents = input(prompt);
if Agents > 100
    error('Error! Too many agents, decrease the number of agents');
end
if Agents < 2
    error('Error! Too little agents, increase the number of agents');
end
Step_Num = 400;
%Number of iterations
%Initial condition
p = 10*randn(2,Agents);  %Vector Position p
v = 5*randn(2,Agents);   %Vector Velocity v
t = 0.01;                %Time
Li = 30;                 %Axis Limit
%Separation/Collision Avoidance
S = 1;        %Controls the distance between agents
              %Bigger number, further the agents are from each other
%Cohesion/Flock Centering
K = 1;        %Controls the collision between the agents
              %Bigger number the smaller the flock
%Alignment/Velocity Matching
M = 0;        %Controls the flock motion
%Separation/Collision avoidance gain
ca = 5;       %Larger gain -- agents more spread out
%Cohesion/Flock centering gain
fc = 0.1;     %Larger gain -- flock centering is smaller
%Flocking Model
for n=1:Step_Num           %For every iteration from 1 to desired step
    sv = zeros(2,Agents);  %Collision avoidance vector / Seperation Vector
    kv = zeros(2,Agents);  %Flock centering vector / Cohesion Vector
    for i = 1:Agents          
        for j = 1:Agents          
            if i~= j                         %Distance = 0 when i = j (ignore)
               r = (p(:,j)-p(:,i));          %Distance between two points i amp; j
               d = sqrt(r(1)^2 (r(2)^2));    %Euclidean distance
               sv(:,i) = sv(:,i) - ca*r/d^2; %Collision avoidance/Seperation
               kv(:,i) = kv(:,i)   fc*r;     %Flock centering/Cohesion
            end
        end
        v(:,i) = S*sv(:,i)  K*kv(:,i)  M;  %Total Velocity
        p(:,i) = p(:,i)   v(:,i)*t;        %New Position formula p = p vt
    end
    %Plot simulations
    figure;
    plot(p(1,:),p(2,:),'k.','LineWidth',3,'Markersize',15);
    grid on;
    axis([-Li Li -Li Li]);   %Axis limit
    xlabel('X-axis')         %X-axis
    ylabel('Y-axis')         %Y-axis
    title(['Step Number :', num2str(n)]);
    F(:,n) = getframe;
    hold off;
end
  

Комментарии:

1. Простой способ сделать это — выбрать лидера, а затем протянуть от него два луча. Все остальные должны выровняться вдоль этих лучей.

2. Как мне назначить выноску и расширить ее на две строки? Возможно ли иметь примерный пример?