多智能体系统模型仿真 五个智能体系统模型 matlab代码 代码有详细注释

无人机编队掠过城市上空执行救援任务,水下机器人集群悄无声息地绘制海底地形图——这些酷炫场景背后,都藏着多智能体系统协同控制的秘密。今天咱们用Matlab手搓五个经典模型,看看这些铁疙瘩是怎么"商量着"干活的。

1. 一致性协议(Consensus Protocol)

% 五节点环形拓扑一致性仿真
dt = 0.1; % 时间步长
L = [2 -1 0 0 -1;  % 环形结构的拉普拉斯矩阵
     -1 2 -1 0 0;
     0 -1 2 -1 0;
     0 0 -1 2 -1;
     -1 0 0 -1 2]; 
x = [10; 5; 0; -5; -10]; % 初始状态

for k = 1:50
    dx = -L * x; % 核心共识方程
    x = x + dx * dt;
    plot(x, 'o-'); ylim([-15 15]); 
    pause(0.1);
end

这段代码最骚的地方在于拉普拉斯矩阵L的设计,它就像智能体之间的对讲机网络。每个智能体只和邻居交换信息,但经过几十次迭代后,所有状态值都会收敛到同一个数值。试试把初始状态改成随机数,收敛过程会出现漂亮的波纹效应。

2. 领导者-跟随者编队

% 1个领导者+4个跟随者编队控制
leader_path = @(t) [t; 0.5*sin(t)]; % 领导者运动轨迹
followers_x = [2 4 6 8; % 初始位置
               1 1 1 1];

for t = 0:0.1:10
    % 领导者位置
    L_pos = leader_path(t);
    
    % 跟随者根据相对位置更新
    for i = 1:4
        desired_offset = [i*2; 0]; % 期望相对位置
        neighbors_info = ... % 这里接入邻居位置信息
        followers_x(:,i) = followers_x(:,i) + 0.3*(L_pos - followers_x(:,i) + desired_offset);
    end
    
    % 绘制实时位置
    plot(L_pos(1), L_pos(2), 'rs', followers_x(1,:), followers_x(2,:), 'bo');
    axis([0 10 -3 3]); pause(0.05);
end

这个模型里领导者像头雁一样带节奏,跟随者既要保持队形又要紧跟老大。代码中0.3这个增益系数很关键,调大了容易震荡,调小了反应迟钝——这就是控制工程里的艺术所在。

3. 蜂拥控制(Flocking)

% Boids模型实现群体聚集
num_agents = 5;
pos = rand(2,num_agents)*10; % 随机初始位置
vel = rand(2,num_agents)*2-1; % 随机初始速度

for frame = 1:100
    new_vel = zeros(size(vel));
    for i = 1:num_agents
        % 速度匹配:计算邻居平均速度
        neighbors = find(vecnorm(pos - pos(:,i)) < 3); % 感知半径3米
        avg_vel = mean(vel(:,neighbors),2);
        
        % 聚集力:向群体质心移动
        cohesion = mean(pos(:,neighbors),2) - pos(:,i);
        
        % 分离力:避免碰撞
        too_close = find(vecnorm(pos - pos(:,i)) < 1);
        separation = -sum(pos(:,too_close) - pos(:,i),2);
        
        new_vel(:,i) = vel(:,i) + 0.2*avg_vel + 0.1*cohesion + 0.3*separation;
    end
    vel = new_vel;
    pos = pos + vel*0.1;
    
    quiver(pos(1,:),pos(2,:),vel(1,:),vel(2,:)); axis([0 10 0 10]); 
    pause(0.05);
end

这个模型把生物群集行为数学化了,三个核心规则:速度对齐、聚集、分离。注意看分离力的计算,当智能体距离小于1米时会触发排斥力,就像地铁里陌生人靠太近时的微妙调整。

4. 分布式优化

% 分布式梯度下降求解协同定位问题
x_true = [3; 7]; % 真实目标位置
sensor_pos = rand(2,5)*10; % 传感器随机部署

% 每个传感器只能测量与目标的距离
measurements = vecnorm(sensor_pos - x_true) + randn(1,5)*0.1; % 带噪声的测量

x_est = rand(2,5)*10; % 每个智能体维护一个估计值

for iter = 1:50
    for i = 1:5
        % 本地梯度计算
        grad = 2*(x_est(:,i) - sensor_pos(:,i))*(norm(x_est(:,i)-sensor_pos(:,i)) - measurements(i));
        
        % 与邻居交换估计值
        neighbors = [mod(i-2,5)+1, i, mod(i,5)+1]; % 环形通信
        avg_est = mean(x_est(:,neighbors),2);
        
        x_est(:,i) = x_est(:,i) - 0.1*grad + 0.2*(avg_est - x_est(:,i));
    end
end

这个分布式估计问题就像一群盲人摸象,每个传感器只能获取局部信息。通过邻居间的数据交换,最终所有估计值会收敛到真实位置附近。代码中的0.1和0.2是学习率和共识率,调整这两个参数能看到收敛速度的明显变化。

5. 竞争协作模型

% 资源竞争下的协作博弈
resources = [8, 5, 3]; % 三种资源总量
agent_strategy = rand(5,3); % 每个智能体的资源获取策略
agent_strategy = agent_strategy ./ sum(agent_strategy,2); % 归一化

for round = 1:20
    % 计算资源占用率
    total_demand = sum(agent_strategy);
    utilization = min(1, total_demand ./ resources);
    
    % 更新策略(兼顾自身利益和群体公平)
    for i = 1:5
        payoff = agent_strategy(i,:) .* utilization;
        avg_payoff = mean(payoff);
        
        % 强化高回报策略,同时考虑邻居策略
        neighbors_strategy = agent_strategy(mod(i-1:i+1,5)+1,:);
        social_influence = mean(neighbors_strategy);
        
        agent_strategy(i,:) = 0.8*payoff + 0.2*social_influence;
        agent_strategy(i,:) = agent_strategy(i,:)/sum(agent_strategy(i,:));
    end
    
    % 绘制策略分布
    bar(agent_strategy'); pause(0.2);
end

这个模型展现了智能体在自私与利他之间的平衡。代码中0.8和0.2的权重就像人性中的贪婪与道德博弈。运行时会看到策略矩阵逐渐形成对角线优势——智能体自发地差异化竞争,避免所有人都挤占同一种资源。

这些模型代码虽然精简,但已经揭示了多智能体系统的核心逻辑:局部交互产生全局秩序。下次看到蚂蚁搬家或者无人机表演时,你大概能猜到它们脑子里的控制算法在跑什么了。试着修改代码中的通信拓扑或控制参数,可能会发现一些反直觉的现象——比如增加共识率反而导致系统震荡,这就是分布式系统的迷人之处。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐