news 2026/10/22 11:32:06

基于中心化Q-Learning的双无人机NOMA通信路径与功率联合优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于中心化Q-Learning的双无人机NOMA通信路径与功率联合优化

1. 项目概述与核心思路拆解

1.1 双无人机加NOMA:这个组合到底在解决什么问题

先说个大白话版本的背景。如果你现在打开手机基站地图,会发现大量基站是固定的,覆盖区域也是规划死的。但在某些场景下,这种固定基础设施根本来不及部署——比如大型活动突然涌入几万人、地震后基站被毁需要临时补盲、或者某个偏远的作业现场要临时建一张专用通信网。这时候,带着通信载荷升空的无人机就变成了最灵活的"基站"。

但要命的地方在于:无人机不是直升机,续航就那么点时间,油箱和电池决定了它必须在有限的飞行距离内尽可能多干活。如果你让一台无人机同时服务多个用户,传统正交多址(比如频分、时分那一套)会把有限资源切开分给不同人,效率上总觉得吃亏。于是NOMA(非正交多址)就被拉进来了,它允许同一个资源块上同时承载多个用户信号,在接收端通过功率差配合SIC串行干扰消除来把信号拆开。说白了,同一个时刻,一个无人机可以同时喂多个终端,频谱效率确实能拉得更高。

这时候难题就来了:NOMA的核心优势依赖功率分配和信道差,而无人机在天上飞的时候,位置一变,信道增益全变了,功率分配和路径规划之间存在强耦合。你单独优化路径,功率分配可能跟不上;单独优化功率,飞行轨迹又不合理。传统数学优化在这个场景里能建模,但一旦换到动态环境、用户位置随时变的场景,实时重算代价太高。

所以这个项目选的路线是强化学习。两台无人机,组成一个队,通过中心化的Q-Learning学习"在哪飞、怎么分配功率"。中心化意味着有一个角色掌握全局数据(比如地面站或者一个计算平台)同时训练两张Q表,而不是每台无人机各自琢磨各自的。这在训练阶段能显著避免双机协作时的策略漂移问题,等训练完再下发给各机执行。

附带Matlab代码这件事也值得说两句。学术圈现在的通病是算法论文写得很漂亮,但代码不开放,复现全靠猜。把整个流程用Matlab搭一个可闭环的仿真环境,从信道建模到NOMA功率分配再到Q-Learning训练循环全部落地,对想入门的读者来说,等同于提供了一条"按图施工"的完整路径。

1.2 为什么选中心化Q-Learning而不是其他强化学习方案

这个问题其实值得先回答,因为它决定了整个项目的算法主框架。

首先要排除的是深度强化学习那一大类(如DQN、DDPG、PPO)。不是说它们不行,而是在双无人机NOMA这样一个中等复杂度问题上,用深度网络是"杀鸡用牛刀":需要的数据量大、训练时间长、对环境随机性更敏感,而且可解释性差。一旦收敛结果不理想,你很难判断是网络结构的问题、奖励函数的问题还是采样策略的问题。对很多刚开始做无人机通信仿真的同学来说,这个调试成本非常高。

其次要排除的是独立Q-Learning。两台无人机如果各自拿着自己的Q表更新,表面上看是各管各的,但因为它们共享着频谱和信道资源,彼此的决策会互相影响。A机改了路径,B机的信道状态就会被牵连,可B机完全感知不到这个变化,它的Q表更新就变成了一个在非平稳环境里的"睁眼瞎"更新。马尔可夫性被打破了,收敛基本没戏。

中心化Q-Learning的做法是:全局状态(两台无人机的位置、所有用户的位置、信道状态)全部汇总到一个学习器里,由这个学习器同时维护两个代理的动作策略。更新的时候,全局视野掌握着完整的状态转移关系和奖励反馈,两个代理的动作协同自然就能被学到。说得更直白一点:两个人组队过迷宫,各看各的很难配合,一个天眼俯视全局,同时指导两个人,协作效率就完全不同。

从实现复杂度来看,中心化Q-Learning只需要一张或多张二维Q表,每个维度对应状态特征和动作空间,内存占用可控,收敛速度远快于深度强化学习。对Matlab环境来讲,循环迭代写起来非常直接,不需要额外安装深度学习工具箱,几乎零门槛复现。这也是这个方案在工程落地和教学演示之间找到的最佳平衡点。

2. NOMA通信与Q-Learning结合的细节设计

2.1 NOMA中的叠加编码和SIC解调,在仿真里要怎么建模

讲NOMA的仿真精度之前,先建立一个直觉:NOMA的技术关键在于"制造差异、利用差异"。基站(这里是无人机)在同一个频谱资源上向多个用户发送信号时,故意给信道条件差的用户分配更大功率,给信道好的用户分配较小功率。每个用户都收到两路信号的叠加体,但较强的信号在接收端可以被解调出来。之后在信号里减掉这一路强信号,剩下的微小信号再解调,这就是SIC串行干扰消除的大致流程。

在Matlab仿真的信道建模里,这个项目的核心变量是路径损耗。无人机高度通常在50米到300米之间,用户在地面,此时信道条件大多接近视距传播(LoS),所以路径损耗模型可以简化为:

```matlab PL = 103.4 + 20 * log10(d) + 20 * log10(fc); ```

这里的`d`是无人机到用户的三维距离(米),`fc`是载波频率(GHz)。从这行公式可以看到,距离一变大,路径损耗大幅增加。当两台无人机在不同位置悬停时,它们到各个用户的信道增益完全不同,这就天然形成了NOMA想要的"信道差异"。比如同一时刻,用户1距A机120米,用户2距A机80米,如果不做任何处理,用户2的信号天然更强,适合被后解调;用户1信号更弱,适合获得更多功率。

功率分配这块,最常用的是固定功率分配机制。假设无人机总发射功率为P_total,用户1分配功率因子α,用户2分配1-α,那么叠加发射信号就是:

```matlab S_total = sqrt(alpha * P_total) * S_user1 + sqrt((1 - alpha) * P_total) * S_user2; ```

用户在接收端拿到的信号在叠加之上再加高斯噪声。SIC解调的过程在仿真里也非常直观:先解调出强信号的符号,假设解调无误,把它从接收信号中减掉,再解调残余部分。如果你在调试过程中发现误码率高得离谱,优先检查是不是解调顺序搞反了,或者功率分配的α值设置得过于极端。

2.2 中心化Q-Learning的状态、动作与奖励函数

这一步是整个项目的灵魂,设计得好不好直接决定Q表能不能收敛。

状态空间:本项目中我把状态定义为三部分的组合:两无人机的位置坐标(各自离散成5个等级)、用户的位置坐标(固定但可变化)、以及当前信道状态(简化模型里折算为主用户到两机距离差的分级)。所有位置离散化之后,状态空间的规模大概在5×5×5×5×若干个用户位置,Q表大小完全可控。比如两台无人机各5个格点,用户位置固定为3种可能,那么总状态数是625个。这个规模用Q表来做完全没问题,而且训练速度非常快,几分钟内就能看到收敛趋势。

动作空间:每台无人机可执行的动作包括:悬停、向前飞一格、向后飞一格、向左飞一格、向右飞一格。这样每机动作空间是5,双机联合动作空间就是25。之所以不让无人机大幅跳变位置,是因为真实无人机飞行不允许折线式剧烈转向,限制动作粒度也降低了训练难度。

奖励函数:这是最需要花心思的地方。奖励的设计要同时体现"通信质量"和"路径效率"两个目标,否则无人机很可能学会"悬停在天上不动",因为这样信道条件最稳定。我的做法是对每个时隙计算系统总速率(NOMA下两个用户的和速率),然后减去一个由移动产生的耗能惩罚项。公式表达为:

```matlab reward = rate_sum - penalty_factor * moving_distance; ```

`rate_sum`由香农公式算出来,NOMA下两个用户共享同一频谱带宽,速率按下式:

```matlab R_u1 = B * log2(1 + S_u1 / (S_u2 + N0)) / 2; R_u2 = B * log2(1 + S_u2 / N0) / 2; ```

注意第一个式子里的`S_u2`是被当作干扰项存在的,因为用户1的信号弱,用户2的强信号对它来说是干扰;而用户2要先做SIC,干掉用户1的信号后再解调自己的,所以分母只有噪声。而除以2是因为两个用户共享同一个时隙,各占一半资源,或者你按NOMA原版理论也可以不分时间只分功率,看具体模型设定。

penalty_factor这个参数很关键,设太大会让无人机"不敢动",设太小则会导致无人机绕圈子刷路径,浪费能量。我调下来0.1到0.3之间是比较合理的区间,具体数值跟位置格子的粒度尺寸直接相关,不能照抄,需要用测试数据标定。

2.3 路径优化与通信调度的联动机制

很多人做完仿真后会陷入一个误区:觉得路径优化和通信调度是两个模块,先算路径再算通信,拼接在一起就完事了。但在NOMA场景下,这两个模块是拧在一起的。你飞到一个位置,决定了用户信道差;信道差又反过来决定了最优功率分配因子是不是还是原来的值;功率因子变了,系统速率就会变;系统速率变,Q-Learning的奖励也随之改变。这个因果链在实时环境里是每时每刻都在发生的。

所以项目里我采用的做法是:每个训练epoch中,先读取当前无人机位置和用户位置,计算出各链路的信道增益,然后基于这个增益调整功率分配因子。调功率因子的方法很简单,固定信道强用户的功率占比低,信道弱用户功率占比高,具体比值用一个SIR阈值来分配。这一步做完,再去算速率、算奖励、更新Q表。等下一轮无人机动了位置,一切重新计算。这样联动建模的意义在于,Q表在更新时学到的其实是"位置-功率-速率"三者的联合映射,而不是割裂的。

在实际场景中,还可以进一步把功率因子α设为连续变量,用Q-learning配套的离散化方法分成10个档位,动作空间变为"路径动作×α档位"。我试过这个扩展,Q表规模会膨胀10倍(即250个联合动作),但收敛仍然可以做到,只是训练时间要多花大概一倍。这算是个可以延续的坑,作为后续进阶方向。

3. Matlab实战:完整流程与核心代码拆解

3.1 系统参数与环境建模

开始写代码之前,先把所有参数量化,不然写到一半改来改去很痛苦。我先贴出我通常使用的初始化参数表:

参数值说明
载波频率2 GHz常用频段
系统带宽10 MHzNOMA共享带宽
无人机发射功率1 W(30 dBm)单机总功率
噪声功率谱密度-174 dBm/Hz常温噪声
无人机高度100 m固定高度巡航
飞行速度10 m/s单时隙移动距离
用户数量2小区内终端数
时隙数200一次任务周期

这些参数要和你的实际仿真网格尺寸匹配。网格我通常设置成50米一格,无人机每个时隙移动一格,这样100米高度下,相邻网格的信道差异足够让Q-Learning学到有效的变化趋势。如果网格太大,不同状态之间的信道差异太小,Q表学习速度会明显变慢,因为奖励差异不够显著;网格太小,又会让状态数爆炸,得不偿失。

用户的初始位置我默认放在地面坐标(200, 50)和(50, 200),这个摆法刻意制造两台无人机到两个用户的距离不对称,从而让NOMA的SIC解调优势能被充分利用。如果你把两个用户放得太近,信道增益几乎一样,那NOMA就很鸡肋了,SIC也起不了什么作用,系统直接退化成OMA的性能。

3.2 Q-Learning主体训练循环的代码实现

先给出最核心的训练循环结构,然后逐步解读。我在实际项目里把整个训练分成两步走:先做路径规划训练,待路径策略基本稳定后,再在策略中加入功率分配联调。分开做的好处是容易定位问题,不会一上来就出现"路径不对还是功率不对"的疑难杂症。

%% 参数初始化 num_states = 1250; % 5*5*5*5*2 等,视你的离散化而定 num_actions = 25; % 双机各5个动作的联合空间 alpha = 0.1; % 学习率 gamma = 0.9; % 折扣因子 epsilon = 0.9; % 探索率初始值 min_epsilon = 0.05; % 探索率下限 decay_rate = 0.995; % 探索率衰减 Q_table = zeros(num_states, num_actions); episodes = 500; for ep = 1:episodes % 重置两无人机起点 uav_pos = [2, 2; 4, 4]; % 网格坐标 state = get_state_index(uav_pos, user_pos); % 探索率衰减 epsilon = max(min_epsilon, epsilon * decay_rate); for t = 1:200 % epsilon-greedy选择联合动作 if rand < epsilon action_idx = randi(num_actions); else [~, action_idx] = max(Q_table(state, :)); end % 将联合动作索引拆分为两无人机的动作 [action_uav1, action_uav2] = decode_action(action_idx); % 执行动作,得到新位置 new_uav_pos = update_position(uav_pos, action_uav1, action_uav2); % 计算当前状态下的NOMA速率 [R_sum, reward] = compute_noma_rate(uav_pos, user_pos); % 计算下一状态 new_state = get_state_index(new_uav_pos, user_pos); % 获取下一状态的最大Q值 best_next_q = max(Q_table(new_state, :)); % Q值更新 Q_table(state, action_idx) = (1 - alpha) * Q_table(state, action_idx) + ... alpha * (reward + gamma * best_next_q); % 状态推进 state = new_state; uav_pos = new_uav_pos; end % 每50个episode打印一次收敛指标 if mod(ep, 50) == 0 fprintf('Episode %d, Avg Reward: %.2f, Epsilon: %.3f\n', ... ep, mean(recent_rewards), epsilon); end end

compute_noma_rate函数是整个链路的关键。我在里面按照2.1节的公式依次计算两链路的路径损耗、接收功率、以及叠加后的SIC解调速率。有一个细节务要注意:在计算用户1的速率时,必须把用户2的信号当作干扰项加入分母;而在计算用户2速率时,要假设SIC已经完美干掉了用户1的信号。这个顺序如果搞反,整个速率模型就会失真,奖励信号也失去了意义。

get_state_index的函数要确保状态映射是唯一的,不要出现两个不同情况映射到同一个索引的哈希碰撞。实际工程中我用的是简单的线性编码:将每个维度的离散等级换算成混合进制的一位数字,再组合成一个整数索引。这样代码简单、速度快、也便于调试时查看索引反查状态。

3.3 奖励函数的细节调优与训练反馈

奖励函数我前面给了基础公式,但实际跑训练时还有两个容易被忽视的坑,专门拿出来多说几句。

第一个是奖励尺度的问题。速率r_sum算出来通常是几十Mbps的量级,比如60到120之间,而移动惩罚项如果设置的penalty_factor是0.2,移动一格扣0.2,那这个惩罚压根起不了作用——它相对于速率的数值太小了,Q表完全感知不到。所以做奖励工程时,要先算一下reward的期望量级。我当时把速率归一化,除以参考速率(比如100),再乘一个权重W_rate,让速率贡献落在0到1之间。这样罚项才有意义。

归一化之后奖励公式变成:

reward = (rate_norm * 0.8) - (moving_penalty * 0.2);

这里0.8和0.2是权重系数,不是固定值,调试时按实际表现调整。我个人的经验是,只要奖励的数值范围稳定在[-1, 1]之间,Q表更新就不容易出现数值爆炸或梯度消失的问题。如果你的奖励出现百甚至千的量级,Q值会迅速膨胀,导致后续更新时探索的意义完全丧失。

第二个坑是探索率的衰减速度。初始epsilon设为0.9,表示前期百分之九十的动作都是随机探索。这其实是好事,因为状态空间不小,需要充分采样。但衰减速度要控制在合理范围。如果decay_rate设成0.9,那到第50个episode时探索率就掉到0.9的50次方了,近乎于0,之后完全是纯利用阶段。这不一定好,因为Q表可能还没学全。0.995的衰减率意味着到第500个episode时探索率还剩约8%,整个训练过程前半段探索、后半段利用,节奏比较合理。

3.4 功率分配因子α的控制策略

功率分配因子的设定,我在项目的初始版本里用的是固定α=0.8(即80%的功率给信道较差的用户)。但这个固定值非常粗放——用户相对无人机的相对位置在变化,信道差异也在变化,一个固定比例很难保证任何时刻都最优。

所以在进阶版本里,我引入了动态α调整机制。在每个状态时,先估算两用户到该无人机链路的路径损耗差,然后按"弱信道用户分配更多功率"的原则,用查表方式映射α:

delta_loss = PL_user1 - PL_user2; % 正数表示用户1信道较差 if delta_loss > 10 alpha = 0.85; elseif delta_loss > 3 alpha = 0.7; else alpha = 0.5; % 信道相近时按等功率处理 end

这套启发式策略很粗糙,但和Q-Learning组合起来效果意外地好。因为Q表学到的奖励已经隐含了"当前功率分配下移动是否值得"的信息,功率分配不需要做得极致最优,只需要维持在"合理区间",路径优化就能顺利收敛。如果追求极致最优,可以把α放进动作空间,但状态空间会膨胀,训练时间大幅拉长,在双无人机场景里收益有限,性价比不高。

4. 常见问题与排查技巧实录

4.1 Q表不收敛或奖励发散,先查这三个地方

症状:训练了三百多个episode,平均奖励还在剧烈震荡,完全没有上升趋势;或者奖励数值从某个点开始突然变成巨大的正负数。

这种问题十有八九出在奖励函数或者状态编码上,Q-Learning算法本身一般不会错得这么离谱。我按排查频次从高到低列一下:

第一优先级检查奖励的取值范围。把每个episode的平均reward、最大reward、最小reward打出来,看是否存在异常离群值。如果速率计算里某个链路因为距离过近导致SINR异常大,速率能飙到几千Mbps,那归一化之后的奖励就乱套了。解决办法是在compute_noma_rate里加一个速率上限截断。另一种常见情况是两个无人机飞到网格边界后,动作被边界限制弹回原位,导致奖励序列出现周期性震荡。这时需要在奖励里加一个"出界惩罚"或直接将非法动作的Q值设成负无穷,避免模型在边界处反复横跳。

第二优先级检查状态编码是否有冲突。我之前犯过一个低级的错:两台无人机的网格坐标分别是(1,2)和(2,1),我用了一个线性编码把坐标压缩成整数,导致这两种配置映射到同一个状态索引。Q表学到的自然是"平均之后"的错误规律,怎么都收敛不了。后续我改成联合状态编码,先编码无人机1的位置,再编码无人机2的位置,再编码用户位置,每一维用不同进制,彻底消除了碰撞。

第三优先级检查探索策略是否过早失效。如果你在100个episode之后epsilon就已经小于0.1,那探索基本结束了。可问题是有很多状态组合压根还没被访问过,这些状态的Q值一直是0。后续利用阶段一遇到这些状态,策略就会"不知所措"地随机挑一个动作,方差自然很大。一个有效的补法是采用乐观初始值:把Q表初始化为一个正值(比如1),而不是0,这样即使未探索过的状态也会被鼓励去试探,而不是被"忽略"。

4.2 无人机路径学习结果出现重叠或追尾,怎么破

这个现象在双无人机协作仿真里很常见:两台无人机最终学出来的策略是"挤到同一个位置悬停",因为那个位置的速率最优。但这种情况是伪最优——两台无人机共享频谱,挤到一起完全没有分集增益,而且实际部署中无人机之间还需要保持安全距离。

导致这个问题的主因是奖励函数里缺少"协作斥力"项。处理办法有三个,按推荐程度排序:

第一,在奖励函数中增加双机距离惩罚项。当两机距离小于某个阈值(比如3格),就在原奖励基础上扣掉一个固定惩罚值,例如:

if norm(pos1 - pos2) < min_safe_distance reward = reward - 2.5; end

这个惩罚力度足够大,让Q表学到"靠太近是不划算的"。第二,初始化时让两架无人机起点拉开距离,或在环境重置时随机赋予不同起点。第三,在动作执行函数里加碰撞检测,不合法的动作直接不让执行,并给一个负奖励信号。三招合起来基本能保证双机形成分头巡航、各覆一区的策略。

4.3 Matlab仿真跑得慢?这几点优化你有必要知道

Matlab跑Q-Learning本来就比Python慢,再加上信道计算和速率计算里的循环,速度会更难看。实际操作中我做了两个优化,效果立竿见影。

第一是向量化替代循环。compute_noma_rate里的路径损耗和速率计算全部改成矩阵运算,因为这里面的计算本质上就是对每个无人机-用户对做同样的公式。用向量化一次性算出2×2的距离矩阵和路径损耗矩阵,速度比双层for循环快了一个数量级。

第二是预计算状态转移表。因为状态的离散化方式固定,无人机执行动作后的新位置是完全确定的。我可以在训练开始前,把所有状态对应的“执行某动作后的新状态索引”预计算好存成一个大矩阵。训练时直接查表取new_state,把状态推进的耗时压缩到接近零。这个优化对训练几十万步的循环来说,节省的时间非常可观。

还有一个容易被忽略的点:训练过程中reward和new_state每次都要重新算,但如果你把每个状态的动作奖励也预计算一遍,训练循环就只剩下Q表更新了。代价是内存占用略高(状态数×动作数×4字节),但对当前这个规模完全不是问题。我做了预计算之后,500个episode的训练时间从原来的五六分钟压缩到不到四十秒,调试体验提升了好几个档次。

4.4 NOMA速率公式里的一个隐蔽但致命的细节

很多人在对着文献复现NOMA速率公式时容易漏一个前提:SIC解调顺序必须是在接收端解码弱信号之前,先对强信号进行解码和消除。也就是说,强信号用户(信道好的用户)是先解码并消除那个弱信号的干扰,然后再解自己的信号。而弱信号用户由于信号强度低,它直接把收到的叠加信号中强信号当干扰处理。公式当然是"强信号用户分母无同信道干扰,弱信号用户分母含强信号干扰"。

但是如果你把"弱者"和"强者"的功率分配关系搞反——比如信道差的用户分配了较低的功率,那在SIC接收端,解调顺序就要反过来,公式完全乱套,速率结果可能比OMA还差。所以在代码里,建议把用户按信道增益排序的步骤提取成一个独立的排序函数,确保每次计算NOMA速率前,用户顺序是对的。这样就算用户移动了位置、信道增益发生了翻转,代码也能自动适配,不易出错。

5. 从仿真到实飞:这套方案的局限和进阶方向

很多读者做完这个仿真后的第一个问题是:能不能把代码直接搬到真机上飞?答案是"基本不能,但思路可以"。

Q-Learning决策速度非常快,查表而已,在树莓派或者机载计算板上跑完全没问题。但真正会卡住你的是状态离散化和网格分辨率。Q表在网格间距50米、5个离散格点的设定下可以工作,是因为状态数被死死控制住了。实飞场景中无人机位置是连续量,任何一点小偏差都会让状态索引失真;环境风扰、延迟、卫星定位误差全部会引入状态观测噪声。这些在仿真里被忽略的因素,到了实飞阶段会一处不落地还给你。

如果真要考虑实飞部署,我会优先建议两个技术路线:一是把Q-Learning的最优策略作为演示和学习的基础,再在上面叠加一个低层控制器(如PID或MPC)做位置跟踪,用强化学习那套输出高层导航意图,底层控制器负责精确执行。二是换掉离散Q表,改成DQN或DDPG这类连续控制算法,让策略直接输出连续位置增量。但代价就是训练难度陡增,且需要更精细的奖励塑形。

另外一个更现实的进阶方向是引入任务时延约束和能耗约束。目前的模型只优化速率和移动距离,没有限制"服务完成时间"。实际上无人机的飞行路径需要同时满足:保证用户速率指标、在限定时间内完成覆盖任务、整体耗能不超阈值。这几个约束加进来后,原来的单目标奖励函数就需要改写成带约束的目标函数,或者转成多目标奖励加权。这块改动会大幅提高复杂度,但同时离真实的应用场景更进一步。

6. 写在最后的一点个人体会

做这个项目的过程中,一个很深的体会是:通信系统的强化学习应用,难点从来不在算法本身,而在系统建模和奖励设计。Q-Learning的公式一页纸就能写完,但让奖励函数同时表达速率、能效、安全和协作这四件事,花的时间是最多的。调试后期我几乎一半的时间在看速率曲线和无人机轨迹回放,一半时间在改那个看起来只有几行的reward函数。所以给刚入坑的同行一个建议:先把奖励设计当作主体任务来做,算法反而是相对配角的部分。

另外,Matlab写好之后,建议留一个参数版本记录表,记录每次修改参数时对应的收敛曲线和最终奖励值。这个习惯帮了大忙——因为Q-Learning是随机算法,有几次结果变差不是因为逻辑错误,而是纯粹的随机种子问题。没有记录的话,你会怀疑自己是不是改坏了什么。有了记录表,判断起来就直观得多:同样的代码、同样的参数,不同随机种子下奖励逼近的波动范围是多少,什么程度的波动属于正常噪声,一眼就清楚了。

如果你准备基于这份代码往更深处走,我建议下一个方向不是堆算法,而是做一轮更扎实的对比实验:把中心化Q-Learning和独立Q-Learning在完全相同环境下各跑十次,统计平均奖励的均值和方差。这份对比数据写进报告里,比单纯贴两条收敛曲线有说服力得多。它也能帮你说明白一件事——中心化这个改动,究竟值不值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 11:29:48

主成分分析(PCA)详解:原理、手写实现与常见坑

提到主成分分析&#xff08;PCA&#xff09;&#xff0c;很多朋友的第一反应是“又来了一个降维算法”。确实&#xff0c;几乎每一个涉及数据处理的项目里&#xff0c;PCA都像一个默认选项&#xff1a;数据太乱&#xff1f;跑一下PCA。特征太多&#xff1f;跑一下PCA。可视化做…

作者头像 李华
网站建设 2026/10/22 11:28:29

基于预设时间观测器的无人机编队容错控制仿真复现

简介&#xff1a;一份论文复现资料包&#xff0c;面向自动化控制科研人员与研究生&#xff0c;聚焦多无人机系统的预设时间编队容错控制。其核心是新型观测器设计&#xff0c;将状态观测、扰动估计与执行器故障在线辨识统一起来&#xff0c;并结合分布式预设时间编队跟踪控制协…

作者头像 李华
网站建设 2026/10/22 11:28:27

TiDB单机部署实战:TiUP搭建分布式集群与性能调优指南

最近有个测试环境需要跑一套TiDB&#xff0c;机器只有一台&#xff0c;不想上云&#xff0c;手头也没有多的物理机。把整个tidb集群单机部署听起来像是“偷懒”的做法&#xff0c;但真正操作起来&#xff0c;从选型到调优再到踩坑&#xff0c;整套流程走一遍&#xff0c;你对Ti…

作者头像 李华
网站建设 2026/10/22 11:28:24

生图API透明背景失效原理与确定性解决方案

1. “透明继承”不是玄学&#xff0c;是生图API里被忽略的链式状态传递机制 “跑了21次只有1次透明”——这句话刚在某技术群刷出来时&#xff0c;我下意识划走&#xff0c;以为又是某个没配好alpha通道的新手吐槽。直到连续三天&#xff0c;不同背景的开发者&#xff08;做电商…

作者头像 李华
网站建设 2026/10/22 11:28:12

雷达测距中的时间鉴别器:从原理到工程实现

最近在整理雷达原理的学习笔记&#xff0c;目标距离测量这一块反复啃了几遍&#xff0c;真正卡住我的是"时间鉴别器"这个概念。测距的道理一句话就能讲完&#xff1a;发射脉冲打到目标&#xff0c;回波延时 τ 对应距离 Rcτ/2。但工程上真正难的不是这个公式&#x…

作者头像 李华
网站建设 2026/10/22 11:27:07

生成式引擎优化供应商怎么选?四维评估框架与实操指南

我们的生成式引擎上线半年后&#xff0c;性能曲线开始卡脖子。回答延迟从几百毫秒一路涨到接近两秒&#xff0c;并发一上来就触发限流&#xff0c;单次推理成本只降不动&#xff0c;内部团队连续试了两轮优化方案&#xff0c;效果始终不达预期。那时候我意识到一个问题&#xf…

作者头像 李华