基于拍卖机制的多智能体动态分散任务分配:MATLAB实现与解析

“多智能体系统动态分散任务分配”——这个标题听起来一脸学术,但说白了就一句话:一大群机器人、无人机、水面艇同时出勤,任务还是一个一个冒出来的,到底谁去干哪个活,怎么定才不乱、不抢、不白等?我去年随手做了套多机器人协同配送的模拟项目,就是用MATLAB把这个基于拍卖机制的动态分散式算法从头到尾实现了一遍。前前后后踩了不少坑,也理清楚了很多细节。这篇东西就把这套东西从原理、建模到代码层面完整拆开讲一讲,适合做课程设计、仿真实验,或者打算在真实集群平台上落地类似分配逻辑的朋友参考。

先说结论:拍卖思路解决这类问题非常顺手,因为它天然就是分散式的,每个智能体只需要知道自己手头的情况、能评估任务对自己的“价值”,靠一套本地出价+冲突消解的规则,就能在没有中心节点的情况下完成分配。动态环境下有新任务插进来,也不用全局推倒重算。这一点恰恰是中心式最头疼的地方。下面前面几节先讲清楚为什么选拍卖、怎么把问题变成数学,再给实现代码和调试经验。

1. 为什么选择拍卖做分布式任务分配

1.1 集中式分配的老大难问题

很多做机器人调度、集群控制的人,第一反应是把所有任务汇总到一台中心机上,用匈牙利算法、遗传算法或者整数规划求出全局最优分配,再下发指令。这就像各科室老师把课表交到教务处,由教务处统一排课:信息全、决策集中,全局最优性有理论保障。可一旦放到动态场景,这玩意的毛病立刻暴露。

第一个问题是大规模计算量大。N个智能体、M个任务,纯整数规划是组合爆炸的问题,任务一多或者周期一短,中心机就别干别的了。第二个问题是单点故障,中心节点一掉,整片调度区域直接瘫痪。第三个问题才是动态场景最致命的:任务不是一次性给你,而是陆续到达、紧急度还在变,甚至有个智能体中途掉线。每次变化都让中心节点重新全局求解?调度的实时性基本没法看。

所以面向动态环境,更合理的思路是把决策权下放到每个智能体身上,让它们通过局部交互达成全局合理的一次分配。这就是“分散式任务分配”或者“分布式分配”的直观动机。你不需要一个全知全能的指挥者,反而系统对外表现得更健壮、更灵活。

1.2 拍卖机制是怎么回事

拍卖机制是分散式分配里最直观、也最容易被想到的一类方案。你可以把它想象成外卖平台后台的“抢单大厅”:每个骑手看到一批订单,会结合自己位置、当前身上单量、订单配送费,在心里给每个订单打个分,挑一个最值的抢。同一单可能被好几个骑手都看中了,那就比谁的价更高、更“值得”接。这里的价不是钱,而是“这个任务对我的价值评估”。

放到数学上,每个智能体就是竞拍者,任务是拍卖品,出价函数就是收益函数。经典的拍卖算法最早就是从资源分配这类问题里提出来的,它有一个很有意思的理论保证:经过多轮竞价,整个分配会收敛到一个近似全局最优的均衡状态。多智能体任务分配用的也是同一套思路,只不过不需要搞到那么重的多轮循环——很多工程实现里单轮竞标+冲突消解已经足够好用。

这个机制让我觉得最舒服的一点是:它不需要任何智能体掌握全局信息。每个智能体只知道一部分任务、一部分其他智能体的出价,甚至通信断了部分智能体都能继续工作。这种容错能力是中心式方案比不了的。

1.3 几种分散式方案对比

除了拍卖这类“市场博弈”思路,常见的分散式分配还有基于行为的和基于共识的两大类。我实际比较过方案,用一个表总结一下各自的定位:

方案类型核心思路优点缺点
基于行为每个智能体按规则自发行动(如就近原则、避让原则)简单、反应快、代码量小整体协同性差,全局收益没保证
基于拍卖/市场任务标价,各智能体出价竞争,价高者得分工明确、能反映个体差异、扩展性好需要出价函数,设计不当容易偏心
基于共识智能体通过邻居间信息交换逐步形成一致决策不依赖中心、理论收敛性好对通信拓扑敏感,弱连接下收敛慢

我在实际项目里最终选择拍卖,核心原因是它最“好调”。基于行为的方式你很难把“优先级高但距离远的任务”这类权衡做进去,共识类算法做动态任务插入又比较麻烦,调试时状态不好观察。拍卖机制不一样,出价是多少可以直接打印出来看,谁抢了谁一目了然,出问题能迅速定位到收益函数上。

2. 问题建模与算法流程拆解

2.1 先把问题变成数学

动手写代码之前,我建议先花半天把问题形式化,不然后面全乱套。一个标准的多智能体任务分配问题可以这样表达:

  • 智能体集合 A = {1, 2, ..., N},每个智能体有位置坐标,可同时执行任务的容量上限 c_i。
  • 任务集合 T = {1, 2, ..., M},每个任务有位置、基础价值、紧急程度。
  • 决策变量 x_ij 表示任务 j 是否分配给智能体 i,取值 0 或 1。

优化的目标函数是最大化所有分配的总收益:

maximize Σ_i Σ_j x_ij · b_ij

其中 b_ij 就是智能体 i 对任务 j 的收益评估。约束条件有两类:每个任务最多分配给一个智能体;每个智能体的任务数不能超过容量。

这样建模之后,动态场景怎么处理?把任务集合 T 改成随时间变化的集合 T(t):新任务在任意时刻到达,旧任务可能被取消,紧急度也会动态调整。严格来说,动态环境下的全时域全局最优几乎不可能实时算出来,现实做法是把它拆成若干个“时间段窗口”,在每个窗口快照里做一轮静态分配,窗口滑过去再对新变化做增量调整。拍卖算法恰好能很好地嵌入这个滑动窗口框架。

2.2 收益函数怎么设计

这一步是整个算法里最有“艺术感”的部分。b_ij 要综合反映三个层次的考虑:第一是任务本身值不值得做,第二是智能体做它划不划算,第三是做了之后会不会让整体负载失衡。

我最后用到的收益函数是这样的:

b_ij = (V_j × U_j) / (D_ij^β + C_i + ε)

  • V_j:任务 j 的固有价值,比如订单金额、目标重要性,越高越有吸引力。
  • U_j:任务 j 的紧急度,我习惯取 1~5,越紧急越大。这个项保证高优先级任务会被快速竞走。
  • D_ij:智能体 i 到任务 j 的欧氏距离或规划路径距离,它代表完成该任务要付出的成本。
  • C_i:智能体当前的承载量,用当前已分配任务数除以容量得到一个接近或超过 1 的值最好。它起的是负载均衡的作用。
  • β:距离的衰减指数,我一般取 1~2。取 1 意味着距离和任务价值线性权衡,取 2 会让“远近”对结果的影响更敏感。
  • ε:一个很小的正常数,避免距离为零时除零,通常取 1e-6。

这里特别想提醒,C_i 这项别省。我第一次实现没加负载均衡项,结果跑了 20 个任务,离初始位置近的两个智能体几乎包揽了全部任务,其他智能体干瞪眼,整个队伍负载严重失衡。加了负载惩罚后,任务自动向空闲智能体流动,全局利用率立刻不一样。

2.3 一轮标准拍卖的四个步骤

不管任务池怎么动态变化,单轮拍卖的流程可以固定为四步,这也是后面写代码的主骨架:

  1. 扫描任务池,筛出所有还未分配的任务。
  2. 每个智能体对自己可见的每个未分配任务计算 b_ij,选出自己最想要的那个任务,并广播出价。
  3. 每个任务端收集所有对它出价的智能体的报价,报价最高者暂时成为中标者。
  4. 如果智能体同时成为多个任务的中标候选,它只保留收益最高那个,主动放弃其他任务;放弃的任务再次进入拍卖池,重新走第 2 步。

第四步是一个“消解冲突”的收敛机制,很关键。因为每个智能体同时只能执行有限任务,它如果霸着多个中标机会,会造成资源浪费,必须让它退掉相对不划算的,把机会释放给别的智能体。

3. MATLAB代码实现:从主循环到核心函数

3.1 数据结构与初始化

MATLAB 写这类仿真,我最推荐用 struct 数组装智能体和任务,字段直观,调试时在变量面板里能一目了然地看到每个 agent 的分配状态。下面是我的数据结构定义:

% 初始化智能体集合 % pos: 2x1 列向量表示位置 % capacity: 最大可执行任务数 % busy: 当前已分配任务数 % task_list: 已中标的任务编号列表 agents = struct(... 'id', num2cell(1:N)', ... 'pos', pos_cell, ... 'capacity', repmat({3}, N, 1), ... 'busy', repmat({0}, N, 1), ... 'task_list', cell(N, 1)); % 初始化任务集合 % value: 任务价值, urgency: 紧急度1~5 % status: 0未分配, 1已分配, 2已完成或取消 tasks = struct(... 'id', num2cell(1:M)', ... 'pos', task_pos_cell, ... 'value', num2cell(value_vec), ... 'urgency', num2cell(urgency_vec), ... 'assignee', NaN(M, 1), ... 'status', zeros(M, 1));

初始化时有个容易被忽略的细节:位置坐标的生成务必要固定随机种子。

rng(42); % 固定随机种子,保证实验结果可复现

我做实验时经常要对比不同参数下的分配效果,不固定种子,跑两次结果都不一样,你根本分不清改进效果是参数带来的还是运气带来的。这种基本功问题越早注意越好。

3.2 投标与赢家裁决的实现

收益函数计算,我直接写成独立的子函数,方便单独测试:

function bid = compute_bid(agent, task, beta, eps) % agent: 智能体结构体 % task: 任务结构体 % 返回该智能体对某个任务的出价,若该任务已在列表中,返回 -inf if any(agent.task_list == task.id) bid = -inf; % 已持有的任务不再重复投标 return; end dist = norm(agent.pos - task.pos); load_penalty = agent.busy / agent.capacity; % 负载归一化到[0,1] bid = task.value * task.urgency / (dist^beta + load_penalty + 1e-6); end

注意-inf这个设计,它的作用是让已分配了某任务的智能体把该任务的出价置为无效,避免它在后续竞标中再次被自己抢走。但这个值在后面的max操作中要小心处理,我第 5 节会专门讲这个坑。

单轮拍卖主循环可以这样写:

function [agents, tasks] = auction_round(agents, tasks, params) beta = params.beta; eps = params.eps; % 待分配任务集合 pending = find([tasks.status] == 0); % 对每个未分配任务,收集所有智能体的报价 for j = pending bids = zeros(length(agents), 1); for i = 1:length(agents) if agents(i).busy < agents(i).capacity bids(i) = compute_bid(agents(i), tasks(j), beta, eps); else bids(i) = -inf; end end [bid_max, bid_winner] = max(bids); tasks(j).assignee = bid_winner; tasks(j).status = 1; agents(bid_winner).task_list(end+1) = tasks(j).id; agents(bid_winner).busy = agents(bid_winner).busy + 1; end end

这段是最直白的版本,但直接跑会出问题:一个智能体可能同时被多个任务都标成中标,忙数被重复累加,容量就失效了。所以更严谨的做法是,先收集全部竞标,做一次全局冲突消解,再统一更新状态。我建议按这个逻辑来:

  1. 每个智能体先只对自己“最想要”的一个任务出价。
  2. 每个任务比较各路报价,选出临时中标者。
  3. 如果一个智能体同时中标多个任务,只保留其中出价最高那个任务,其他任务释放。

这样一轮跑完,分配结果就是有效的。写完整版的时候,我建议用cellfun做批量计算,但调试期用循环反而直观,性能后面再说。

3.3 动态任务:到达、取消与重拍卖

动态场景的核心问题是新任务到达后,怎么触发重分配。我在实现里用了两种触发方式,实际效果都不错:

事件触发:每当检测到新任务到达队列,就把新任务加入任务池,然后对“全部未分配任务”跑一轮拍卖。如果任务数量不大,这个方案最省事、最不容易出错。

周期触发:仿真每 T 个时间步检测一次任务变化,统一处理。这种方式适合新任务到达比较密集、频繁触发会造成大量重复竞标的情况。我实际仿真中用的是 T=5 个时间步触发一次,计算负担和实时性的平衡比较好。

对应实现代码大概是这样的:

% 仿真主循环中的动态任务处理 function [agents, tasks] = dynamicTaskUpdate(agents, tasks, params) % new_tasks 是当前时刻新到达的任务(可能为空) new_tasks = checkNewArrivals(t); if ~isempty(new_tasks) tasks = [tasks, new_tasks]; % 触发增量重拍卖 [agents, tasks] = auction_round(agents, tasks, params); end end

很多人一开始会用“全局重拍卖”处理所有任务,这在小规模场景没问题,但任务量到达几十上百之后,每一轮都把所有任务全部洗牌,系统会一直抖,效率也低。改进思路是只对状态为“未分配”的任务跑拍卖,已分配且任务还在执行的不动。这样既不会打断正在执行的任务,计算量也小很多。

4. 仿真实验设计与参数调优实录

4.1 实验场景与参数设置

我设计了一个模拟某仓储移动机器人配送场景的仿真,用来验证算法在动态环境下到底行不行。场景设定如下:10 个移动机器人,初始分配 30 个任务,仿真时长 1000 个时间步,中途随机生成 20 个新任务,任务价值、紧急度都随机。

参数取值说明
智能体数量 N10初始容量 3
初始任务数 M030坐标随机分布在 100m x 100m 区域
动态任务数20第 200~800 时间步随机到达
任务价值 V均匀分布 [5,20]越大越值得干
紧急度 U均匀分布 [1,5]5 表示必须尽快分配
距离衰减指数 β1.5介于线性与平方之间
重拍卖周期5 个时间步每 5 步检测一次新任务

4.2 结果指标与效果分析

我选取了三个核心指标:任务总收益、平均分配延迟、负载方差。对比拍卖算法和两种基线策略——随机分配(把任务随机交给任意智能体)和就近贪心(任务来了直接分给距离最近的智能体)。

策略总收益平均分配延迟负载方差
随机分配28647 步3.82
就近贪心41119 步5.26
拍卖算法45815 步1.47

从结果能看出三点:拍卖算法在总收益上明显优于随机,也比纯就近贪心高约 11%;平均分配延迟整体最低,满足动态响应要求;负载方差降到接近 1,所有机器人任务数比较均匀,没有“忙的忙死闲的闲死”的问题。

这个结果也验证了收益函数设计里的负载惩罚项价值。把它去掉后,负载方差会飙到 4.7,总收益也下降,整个系统呈现一种“局部忙、整体闲”的不健康状态。

5. 排坑手册:我在实现中踩过的九个问题

5.1 高频问题速查表

现象可能原因解决方案
两个智能体反复抢同一个任务收益完全相等,出现平局加入智能体编号作为次级键排序,打破平局
新任务到达后长时间无人处理新任务 status 初始为 1,被当成已分配初始化必须显式置 0,拍卖只过滤未分配任务
分配结果每跑一次都不一样随机种子未固定初始化时调用 rng(固定值)
所有智能体都扎堆抢近处任务收益函数缺少负载惩罚项加入 C_i 负载项
智能体被重复分配多个任务冲突消解没做,直接按任务循环赋值先收集竞标再统一消解冲突
出现 NaN 出价,max 结果报错-inf 被错误参与聚合运算聚合前先过滤掉 isinf 的出价
任务量稍大,仿真运行慢每个新任务都全局重拍卖改成增量拍卖,只处理受影响智能体
复杂场景下程序陷入死循环平局制下低效竞标反复出现增加最大拍卖轮数作为截止条件
紧急任务总是被普通任务挤掉紧急度未体现在出价函数里调高 U_j 对收益的影响权重

5.2 三个最容易忽略的坑

第一个坑是出价函数里的-inf处理。我在做 max 聚合时直接用了[bid_max, idx] = max(bids),结果某些列全是-inf时,max 返回-inf影响判空。改法很笨但有效:出价全部无效的任务直接跳过,不要进 max。代码里面判断bid_max < 0或isinf(bid_max)都要想到。

第二个坑是对“局部信息”的理解。很多初版实现图省事,让每个智能体都能访问整个 tasks 结构体,这其实已经违背了分散式的初衷。我后来模拟通信延迟和局部感知时,给每个智能体维护了一份 local_tasks 快照,只包含它感知范围内的任务。这能明显改变分配行为,也更接近真实集群。如果只是做算法验证,可以不搞那么重,但代码结构上建议留出这个接口。

第三个坑是收益函数量纲不统一。任务价值我最初按“金额”设定,几个几十;距离用“米”,几十上百;两者直接乘除,距离几乎主导了出价结果。这就是为什么我最终用归一化负载和幂函数来处理距离衰减,把不同量纲映射到一个可比尺度上。设计出价函数之前先想想这些数值各自的范围,不然调参调到怀疑人生。

我在实际调试中还有一个体会:把拍卖每一轮的结果打印出来,或者画一个时间轴上的任务分配甘特图,比对着最终指标找问题高效得多。很多分配不合理的case,在任务分配图上一眼就能看出“这个机器人怎么被分到十万八千里外的任务了”,接着顺藤摸瓜找到是收益函数哪一项权重不对。

写到最后,分享一点个人经验。这套基于拍卖的多智能体动态分配算法,难的不是拍卖逻辑本身,而是你怎么定义“收益”——把哪些东西当成钱、怎么权衡距离和紧急度、怎么体现负载均衡。很多时候调来调去效果不理想,不是算法错了,是收益函数没设计对。另外,能把动态流程跑通、保证不同随机种子下结果可解释,比一开始追求全局最优更有意义。如果你也在做类似的多智能体仿真项目,建议先把一个固定场景、固定随机数的静态版本调干净,再一步步加入新任务、掉线这类动态因素。这样排查起来会省掉我当初走的三周弯路。

相关新闻

Codex变笨?过时的Skill和AGENTS.md才是罪魁祸首

Codex变笨?过时的Skill和AGENTS.md才是罪魁祸首

你的 Codex 最近是不是变“笨”了&#xff1f;明明模型还是同一个&#xff0c;代码却越写越别扭&#xff0c;甚至开始一本正经地执行一些早就被废弃的命令。我前段时间就踩了这个坑&#xff0c;折腾了两天&#xff0c;最后发现罪魁祸首不是模型本身&#xff0c;而是我自己当初精…

2026/10/20 20:18:46 阅读更多 →
DeepSeek API 环境搭建与调用避坑指南:从 401 报错到流式输出

DeepSeek API 环境搭建与调用避坑指南:从 401 报错到流式输出

简介&#xff1a;这份资源是一份面向具备一定编程经验的开发者与研究人员的 DeepSeek API 调用指南&#xff0c;围绕从注册账号、获取 API Key 到完成流式输出的完整链路展开&#xff0c;帮助读者快速将 DeepSeek 的语言理解与生成能力集成进聊天机器人、客服系统、智能助理等文…

2026/10/20 20:17:44 阅读更多 →
大语言模型合成数据与记忆机制:从生成范式到RAG的工程实践

大语言模型合成数据与记忆机制:从生成范式到RAG的工程实践

1. 从"数据不够用"说起&#xff1a;为什么合成数据突然成了刚需做模型训练的人都有一个共同的痛&#xff1a;真实数据永远不够。不是数量不够&#xff0c;是质量够、分布对、标注准的数据不够。我接触过不少做垂直领域模型微调的团队&#xff0c;十个里面有八个卡在同…

2026/10/20 20:17:44 阅读更多 →

最新新闻

FPGA开发者必看:SRIO协议从IP配置到数据收发的完整调试指南

FPGA开发者必看:SRIO协议从IP配置到数据收发的完整调试指南

简介&#xff1a;面向FPGA与嵌入式系统开发者&#xff0c;这套Xilinx SRIO使用例程围绕Serial RapidIO高速串行互连协议在Spartan6系列中的实际部署&#xff0c;系统覆盖硬核配置、端口速率选择、测试平台搭建与仿真验证&#xff0c;解决高带宽低延迟场景下的接口设计与调试难题…

2026/10/20 21:31:57 阅读更多 →
DeepSeek+客流预测实战:文旅景区智能调度与数据治理指南

DeepSeek+客流预测实战:文旅景区智能调度与数据治理指南

元旦当天上午九点半&#xff0c;某古镇指挥中心的大屏上&#xff0c;瞬时客流曲线还在平缓爬升。过去一到这种关键节点&#xff0c;我们只能靠值班长拍脑袋判断“今天会不会爆”。后来我们把整套逻辑改了&#xff1a;先用 DeepSeek 处理近三年的客流历史数据&#xff0c;产出小…

2026/10/20 21:31:57 阅读更多 →
人工智能防火墙实战:从对抗攻击原理到纵深防御体系

人工智能防火墙实战:从对抗攻击原理到纵深防御体系

1. 先从一张贴纸说起——AI模型并没有你想象的那么“刚”前两年我做过一个小实验&#xff0c;到现在印象都很深&#xff1a;贴在停车标志上的一张黑白贴纸&#xff0c;能让当时测试用的视觉识别模型把“Stop”识别成“限速40”。贴纸的面积不到标志的十分之一&#xff0c;人眼看…

2026/10/20 21:31:57 阅读更多 →
FreeImage Windows编译指南:VS与MinGW完整实践与排坑

FreeImage Windows编译指南:VS与MinGW完整实践与排坑

先聊点实际的。做图像处理或者工具链开发的朋友&#xff0c;应该都遇到过这种场景&#xff1a;手头项目跑得好好的&#xff0c;突然丢过来一批乱七八糟的图片格式&#xff0c;BMP、JPEG、PNG、TIFF、GIF、WebP 混杂在一起&#xff0c;有些还带 EXIF&#xff0c;打开一看全是相机…

2026/10/20 21:31:57 阅读更多 →
报错注入攻击原理与实操:从SQL错误信息泄露到数据提取

报错注入攻击原理与实操:从SQL错误信息泄露到数据提取

1. 报错注入到底是怎么一回事1.1 从一个登录框说起很多做Web开发的朋友都有过这样的经历&#xff1a;写了一个查询接口&#xff0c;用户输入一个ID&#xff0c;后台拼一条SQL去数据库里捞数据&#xff0c;返回结果。逻辑简单&#xff0c;代码也不复杂。但如果这个ID参数没有经过…

2026/10/20 21:31:57 阅读更多 →
图数据建模必知:从转导式到归纳式学习的范式切换实践

图数据建模必知:从转导式到归纳式学习的范式切换实践

前阵子接手一个图数据的用户行为预测项目&#xff0c;最初跑得挺顺&#xff0c;后来每来一批新用户&#xff0c;模型效果就肉眼可见地掉。一开始我以为只是特征没做好&#xff0c;调了一周才意识到&#xff0c;问题出在我用的学习范式上——我一直在一张静态图上做转导式&#…

2026/10/20 21:30:50 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →