Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install hiyenwong-ai-collection-collection-skills-density-driven-multi-agent-control-v2-skillgit clone https://github.com/hiyenwong/ai_collection.gitcp ai_collection/SKILL.MD ~/.claude/skills/hiyenwong-ai-collection-collection-skills-density-driven-multi-agent-control-v2-skill/SKILL.md---
name: density-driven-multi-agent-control-v2
description: "Stochastic Density-Driven Optimal Control (D²OC) for multi-agent systems. Decentralized non-uniform area coverage using Wasserstein distance minimization with convergence guarantees for stochastic LTI dynamics."
category: systems-engineering
---
# Stochastic Density-Driven Optimal Control (D²OC) for Multi-Agent Systems
## Description
基于论文 "Density-Driven Optimal Control: Convergence Guarantees for Stochastic LTI Multi-Agent Systems" (Lee, 2026) 的方法论技能。解决多智能体系统的**去中心化非均匀区域覆盖问题**,通过严格的拉格朗日框架桥接个体智能体动力学与集体分布匹配。
将分布匹配重新表述在最优传输(OT)框架下,以Wasserstein距离作为运行成本,确保时间平均经验分布在随机LTI动力学下收敛到非参数化目标密度。
## Activation Keywords
- density-driven control
- D²OC
- multi-agent coverage
- Wasserstein distance
- optimal transport
- swarm robotics
- decentralized control
- area coverage
- 密度驱动控制
- 多智能体覆盖
- 最优传输
- 群体机器人
## Tools Used
- read: Read paper and implementation reference
- write: Generate Python implementation code
- exec: Run coverage simulation experiments
- web_search: Find related optimal transport research
## Instructions for Agents
When a user asks about decentralized multi-agent area coverage:
1. **Problem characterization**: Identify if it's non-uniform area coverage with stochastic dynamics
2. **Explain the approach**: Compare with existing methods (grass-mowing, SMC, Eulerian PDE, mean-field)
3. **Walk through the three-stage framework**:
- Stage 1: Local Wasserstein distance minimization via MPC
- Stage 2: Reachability-aware target selection
- Stage 3: Decentralized barycenter weight update
4. **Provide implementation code**: Use the Python code templates in this skill
5. **Parameter tuning**: Guide on prediction horizon, sample count, communication radius selection
## Examples
```
User: How do I coordinate a swarm of drones for area coverage with non-uniform density requirements?
Agent: Using Stochastic Density-Driven Optimal Control (D²OC), we can solve this with decentralized MPC and Wasserstein distance minimization...
```
## 核心思想
解决多智能体系统的**去中心化非均匀区域覆盖问题**,通过严格的拉格朗日框架桥接个体智能体动力学与集体分布匹配。将分布匹配重新表述在最优传输(OT)框架下,以Wasserstein距离作为运行成本,确保时间平均经验分布在随机LTI动力学下收敛到非参数化目标密度。
## 应用场景
- 搜索与救援
- 环境监测
- 基础设施检查
- 智能农业
- 行星探索
- 大规模区域覆盖任务
## 现有方法局限性
| 方法 | 局限性 |
|------|--------|
| 割草机路径 | 大规模环境效率低,资源受限时不可行 |
| 谱多尺度覆盖(SMC) | 遍历性仅在 t→∞ 时理论实现,不适合有限时间约束 |
| Eulerian PDE求解器 | 计算密集,中心化,高维不可行 |
| 均值场Schrödinger桥 | GMM参数假设限制,耦合PDE复杂度高 |
| 启发式D²C | 忽略随机扰动下的动态耦合 |
## 核心贡献
### 1. 随机D²OC框架
- **拉格朗日视角**:将群体表示为离散、可识别粒子集合
- **规避维度灾难**:避免求解高维PDE
- **随机LTI系统**:处理过程和测量噪声
### 2. 最优传输重构
- **Wasserstein距离最小化**:作为MPC运行成本
- **非参数化目标密度**:不限制于GMM等参数形式
- **局部最优传输**:可扩展的去中心化计算
### 3. 收敛保证
- **形式化收敛证明**:通过可达性分析
- **有界跟踪误差**:存在过程和测量噪声时
- **时间平均分布收敛**:到参考密度
## 数学框架
### 随机离散时间LTI系统
```
x_i^{k+1} = A_i x_i^k + B_i u_i^k + w_i^k
y_i^k = C_i x_i^k + v_i^k
```
其中:
- x_i^k ∈ ℝ^{n_i}:智能体i在时刻k的状态
- u_i^k ∈ 𝒰 ⊆ ℝ^{m_i}:控制输入
- y_i^k ∈ ℝ^d:输出(位置)
- w_i^k ~ 𝒩(0, Σ_w):过程噪声
- v_i^k ~ 𝒩(0, Σ_v):测量噪声
### 输出相对度
输出相对度 r ∈ ℤ_{>0} 是满足以下条件的最小正整数:
```
C_i A_i^{r-1} B_i ≠ 0
C_i A_i^{ℓ-1} B_i = 0, ∀ℓ = 1,...,r-1
```
控制输入从时刻 k+r 开始影响输出。
### 局部Wasserstein距离
智能体i的期望平方局部Wasserstein距离:
```
𝔼[∑_{h=r}^{H+r-1} (𝒲_i^{k+h})²] :=
∑_{h=r}^{H+r-1} ∑_{j∈𝒮_i^{k+h}} π_j^{k+h} 𝔼[‖y_i^{k+h} - q_j‖²]
```
其中:
- 𝒮_i^k:分配给智能体i的样本点索引集
- π_j^{k+h}:从智能体i到局部样本q_j的传输权重
- H:预测视界
### 经验多智能体输出分布
```
ρ^k = (1/N) ∑_{i=1}^N δ_{y_i^k}
```
其中δ是Dirac测度,N是智能体数量。
### 目标分布
```
ν = ∑_{j=1}^M β_j δ_{q_j}
```
其中:
- q_j ∈ ℝ^d:样本点位置
- β_j ≥ 0:容量权重,∑β_j = 1
- M:样本点总数
## 三阶段D²OC框架
### 阶段1:最优控制(局部Wasserstein最小化)
**MPC问题**:
```
min_{u_i^{k:k+H-1}} 𝔼[∑_{h=r}^{H+r-1} (𝒲_i^{k+h})²]
s.t. x_i^{k+1} = A_i x_i^k + B_i u_i^k + w_i^k
u_i^k ∈ 𝒰
```
**最优控制律**(命题1):
```
u_i^{k,*} = K_i (x_i^k - μ_i^k) + ū_i^k
```
其中:
- K_i:反馈增益矩阵
- μ_i^k = 𝔼[x_i^k]:期望状态
- ū_i^k:前馈控制
### 阶段2:可达性感知目标选择
**可达输出重心集**:
```
C_i ℳ_i^{k+h} = {C_i A_i^h x_i^k + C_i ∑_{ℓ=0}^{h-1} A_i^{h-1-ℓ} B_i u_i^{k+ℓ} | u_i ∈ 𝒰}
```
**目标选择准则**:
- 选择可达的局部样本点
- 考虑输出相对度r
- 确保物理可行性
### 阶段3:去中心化重心更新
**权重更新规则**:
1. **局部覆盖**:根据距离分配权重
2. **去中心化通信**:通信范围内智能体间权重共享
3. **点wise最小**:β_{i,j}^k = min(β_{i,j}^k, β_{neighbor,j}^k)
## 收敛分析
### 定理2(D²OC收敛性)
在满足以下条件时:
- 多智能体系统具有离散时间随机线性动力学
- 去中心化局部通信
- 输出相对度为r
- 输入集𝒰紧致
采用MPC和去中心化重心更新的D²OC满足:
```
𝔼[𝒲₂²(ρ^{k+1}, ν)] ≤ (1 - c/(k+1)) 𝔼[𝒲₂²(ρ^k, ν)] + C/(k+1)²
```
其中:
- c > 0:依赖于可控性和收敛率
- C > 0:投影和噪声效应的上界
**收敛结果**:
```
lim_{k→∞} 𝔼[𝒲₂²(ρ^k, ν)] = 0
```
即经验分布在均方Wasserstein意义下收敛到目标分布。
### 收敛率
- **渐近收敛**:O(1/k)
- **噪声鲁棒性**:有界跟踪误差
- **一致性**:优于启发式方法
## 实现步骤
### 步骤1:系统建模
```python
import numpy as np
from scipy.linalg import solve_discrete_are
class StochasticLTIAgent:
def __init__(self, A, B, C, Sigma_w, Sigma_v):
"""
初始化随机LTI智能体
Args:
A: 状态转移矩阵 (n x n)
B: 控制矩阵 (n x m)
C: 输出矩阵 (d x n)
Sigma_w: 过程噪声协方差 (n x n)
Sigma_v: 测量噪声协方差 (d x d)
"""
self.A = A
self.B = B
self.C = C
self.Sigma_w = Sigma_w
self.Sigma_v = Sigma_v
self.n = A.shape[0]
self.m = B.shape[1]
self.d = C.shape[0]
def compute_output_relative_degree(self):
"""计算输出相对度"""
r = 1
while r <= self.n:
if np.linalg.norm(self.C @ np.linalg.matrix_power(self.A, r-1) @ self.B) > 1e-10:
return r
r += 1
return None
```
### 步骤2:Wasserstein距离计算
```python
from scipy.optimize import linear_sum_assignment
from scipy.spatial.distance import cdist
def compute_wasserstein_distance(points1, points2, weights1=None, weights2=None):
"""
计算两个点集之间的Wasserstein距离
Args:
points1: 第一个点集 (N1 x d)
points2: 第二个点集 (N2 x d)
weights1: 第一个点集的权重
weights2: 第二个点集的权重
Returns:
Wasserstein距离和最优传输计划
"""
# 计算距离矩阵
cost_matrix = cdist(points1, points2, metric='euclidean') ** 2
# 使用匈牙利算法求解最优分配
row_ind, col_ind = linear_sum_assignment(cost_matrix)
# 计算Wasserstein距离
wasserstein_dist = np.sqrt(cost_matrix[row_ind, col_ind].sum())
return wasserstein_dist, (row_ind, col_ind)
```
### 步骤3:MPC控制器设计
```python
def design_mpc_controller(agent, Q, R, H, r):
"""
设计MPC控制器
Args:
agent: StochasticLTIAgent实例
Q: 状态权重矩阵
R: 控制权重矩阵
H: 预测视界
r: 输出相对度
Returns:
MPC控制器增益
"""
# 求解Riccati方程
P = solve_discrete_are(agent.A, agent.B, Q, R)
# 计算LQR增益
K = np.linalg.solve(R + agent.B.T @ P @ agent.B,
agent.B.T @ P @ agent.A)
return K
def solve_mpc_problem(agent, x_current, target_barycenters, K, H, r):
"""
求解MPC问题
Args:
agent: 智能体模型
x_current: 当前状态
target_barycenters: 目标重心序列
K: 反馈增益
H: 预测视界
r: 输出相对度
Returns:
最优控制输入
"""
# 预测状态轨迹
x_pred = np.zeros((agent.n, H+r))
x_pred[:, 0] = x_current
# 计算前馈控制
u_feedforward = compute_feedforward(agent, target_barycenters, H, r)
# 组合反馈和前馈
u_optimal = -K @ (x_current - agent.mu) + u_feedforward[0]
return u_optimal
```
### 步骤4:去中心化权重更新
```python
def update_weights_decentralized(agents, sample_points, communication_radius):
"""
去中心化权重更新
Args:
agents: 智能体列表
sample_points: 样本点位置
communication_radius: 通信半径
Returns:
更新后的权重
"""
N = len(agents)
M = len(sample_points)
weights = np.ones((N, M)) / M
for i, agent in enumerate(agents):
# 计算到各样本点的距离
distances = np.linalg.norm(
agent.position - sample_points, axis=1
)
# 局部覆盖权重
local_weights = 1.0 / (distances + 1e-6)
local_weights /= local_weights.sum()
# 与邻居共享权重
for j, other_agent in enumerate(agents):
if i != j and np.linalg.norm(
agent.position - other_agent.position
) <= communication_radius:
# 点wise最小
local_weights = np.minimum(
local_weights,
other_agent.weights
)
weights[i] = local_weights
return weights
```
### 步骤5:完整D²OC算法
```python
def d2oc_algorithm(agents, target_distribution, sample_points,
H, r, max_iterations=1000):
"""
完整的D²OC算法
Args:
agents: 智能体列表
target_distribution: 目标分布
sample_points: 样本点
H: 预测视界
r: 输出相对度
max_iterations: 最大迭代次数
Returns:
轨迹和收敛历史
"""
N = len(agents)
trajectories = [[] for _ in range(N)]
wasserstein_history = []
for k in range(max_iterations):
# 计算当前经验分布
current_positions = np.array([agent.position for agent in agents])
empirical_dist = compute_empirical_distribution(current_positions)
# 计算Wasserstein距离
w_dist = compute_wasserstein_distance(
current_positions,
sample_points,
weights2=target_distribution
)
wasserstein_history.append(w_dist)
# 阶段3:权重更新
weights = update_weights_decentralized(
agents, sample_points, communication_radius=5.0
)
# 对每个智能体
for i, agent in enumerate(agents):
# 阶段2:可达性感知目标选择
local_targets = select_reachable_targets(
agent, sample_points, weights[i], H, r
)
# 阶段1:MPC控制
u_opt = solve_mpc_problem(
agent, agent.state, local_targets,
agent.K, H, r
)
# 应用控制
agent.apply_control(u_opt)
# 记录轨迹
trajectories[i].append(agent.position.copy())
return trajectories, wasserstein_history
```
## 参数选择指南
### 预测视界 H
- **较大H**:更好的预测,但计算成本增加
- **较小H**:计算效率高,但可能次优
- **推荐**:H ≥ r + 5(考虑输出相对度)
### 样本点数量 M
- **较多样本**:更精细的分布表示
- **较少样本**:计算效率高
- **推荐**:M = 10N 到 100N(N为智能体数)
### 通信半径
- **较大半径**:更好的协调性
- **较小半径**:更去中心化,通信成本低
- **推荐**:覆盖2-3个邻居智能体
## 与现有方法比较
| 特性 | SMC | Eulerian OT | Mean-Field | D²OC (本方法) |
|------|-----|-------------|------------|---------------|
| 有限时间收敛 | ❌ | ✅ | ✅ | ✅ |
| 去中心化 | ✅ | ❌ | ❌ | ✅ |
| 非参数密度 | ✅ | ✅ | ❌ | ✅ |
| 随机噪声 | ❌ | ❌ | ⚠️ | ✅ |
| 计算可扩展 | ✅ | ❌ | ❌ | ✅ |
| 形式化保证 | ❌ | ✅ | ✅ | ✅ |
## 扩展方向
- [ ] 非线性系统扩展
- [ ] 异构多智能体系统
- [ ] 动态障碍物避障
- [ ] 通信受限环境
- [ ] 在线自适应密度
- [ ] 与强化学习结合
## 触发词
- density-driven control
- D²OC
- multi-agent coverage
- Wasserstein distance
- optimal transport
- swarm robotics
- decentralized control
- area coverage
- 密度驱动控制
- 多智能体覆盖
- 最优传输
- 群体机器人
## 相关技能
- **discounted-mpc-robust-control**: 折扣MPC鲁棒控制
- **multi-agent-density-control**: 多智能体密度控制
- **optimal-transport**: 最优传输理论
## 参考文献
Lee, K. (2026). Density-Driven Optimal Control: Convergence Guarantees for Stochastic LTI Multi-Agent Systems. arXiv:2604.08495 [math.OC].
## 实现注意事项
1. **数值稳定性**:Wasserstein距离计算可能数值敏感
2. **实时性**:MPC求解需要满足实时约束
3. **通信延迟**:考虑通信延迟对去中心化更新的影响
4. **噪声建模**:准确的过程和测量噪声建模至关重要
5. **可达性分析**:确保目标选择在可达集内