多智能体奖励函数怎么设计?用双人搬运核对团队目标与个体激励

用明确完成条件和失败条件设计并验证协作任务奖励。提供演示输入、可核对结果和适用限制。

设计多智能体奖励时,先把业务完成条件写出来,再决定奖励给团队还是个体。下面用双人同步搬运的自造小任务:双方同时配合才算交付;一人抢跑导致物品掉落。数字用于说明激励冲突,不是工业机器人实验。

先规定可核对的结果

每个智能体有两个动作:配合、抢跑。双方配合时交付成功;只要有人抢跑就未交付。团队目标是提高有效交付数量,而不是提高移动次数。演示奖励规定成功每人 +5,掉落每人 -3。若另外给“移动一次 +4”,抢跑者可能在失败时仍拿到正分,这会鼓励刷动作。

多智能体奖励函数怎么设计?用双人搬运核对团队目标与个体激励

A动作 B动作 有效交付 团队一致奖励 A/B 附移动奖励后 A/B
配合 配合 是 5 / 5 5 / 5
抢跑 配合 否 -3 / -3 1 / -3
配合 抢跑 否 -3 / -3 -3 / 1
抢跑 抢跑 否 -3 / -3 1 / 1

表中最后一列刻意暴露问题:动作计数和交付目标不同。若真正业务允许快速单人完成,失败规则就需要重写,不能照搬本例罚分。任务完成、碰撞和超时等事件要定义互斥或明确优先级,避免同一步既判成功又判失败。

把规则变成可检查函数

保存 reward_demo.py,运行 python reward_demo.py。输入只接受约定的动作值,输出每个体奖励和完成标记。函数不读取不可得的未来结果,奖励发生时点也在当前联合动作之后。

from itertools import product
def reward(actions):
    if len(actions) != 2 or any(a not in (0, 1) for a in actions):
        raise ValueError("two actions required: 0=cooperate, 1=rush")
    delivered = actions == (0, 0)
    shared = 5 if delivered else -3
    return {"A": shared, "B": shared}, delivered
for pair in product((0, 1), repeat=2):
    values, done = reward(pair)
    print(pair, values, done)
    assert (sum(values.values()) == 10) == done
assert reward((1, 0))[0]["A"] == -3

应只有 (0,0) 的 done 为 True、奖励之和为 10,其他三组均为 -6。集成环境前,为成功、失败、超时、非法动作和边界位置分别列一条输入与期望输出,并检查累计回报是否符合规则。先用固定动作策略核对,避免把奖励代码错误误认成训练不收敛。

团队奖励不自动解决责任归因

共享奖励对齐的是目标,不会自动告诉某个体哪一次动作造成失败。个体奖励可以帮助归因,但也可能与团队目标冲突。采用个体进度指标时,检查“重复往返”“等待别人完成”“抢占资源”等策略是否能在未交付时刷分。记录交付率、碰撞率和实际成本,不能只报告奖励增长。

集中训练是否能看到全局状态、执行时每个人能看到哪些信息,也要在环境契约中写清。本例是一步的可枚举规则核对,没有证明任何训练算法会学到协作,也没有给出最优权重。真实连续任务需要按合法数据和明确成本校准奖励尺度,再做消融与独立评估。

资料与核对依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32979.html

赞 (0)
AI小管家的头像AI小管家
强化学习智能体怎么训练?用 FrozenLake 跑通表格 Q-learning
上一篇 22小时前
多智能体奖励塑形怎么计算?核对势函数差分与终态处理
下一篇 22小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部