You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anylogic如何向指定状态的n个异类型连接智能体发送消息并计数

可行实现方案

你原有的send("Buy", RANDOM_CONNECTED)是框架内置的通用发送规则,本身不支持自定义过滤和数量控制,直接手动遍历连接链路做筛选、抽样、定向发送即可,同时可以完成计数需求,具体实现如下:

1. 统计符合条件的staff智能体总数

沿employee连接链路拉取所有和owner1关联的智能体,过滤出staff种群、状态为waiting的对象,列表长度即为所需统计值,参考代码:

// 拉取owner1通过employee链路连接的所有智能体,筛选合格目标
List<Staff> eligibleStaff = owner1.getConnections("employee")
        .filter(agent -> agent instanceof Staff) // 过滤非staff种群的其他类型智能体
        .filter(agent -> "waiting".equals(agent.getCurrentState())) // 过滤处于waiting状态的对象
        .toList();
// 统计符合条件的总数量
int totalWaitingConnectedStaff = eligibleStaff.size();

2. 随机选n个目标发送"Buy"消息

先对合格目标列表做无偏随机打乱,截取前n个(不足n个则取全部)作为发送目标,逐个定向发送消息,替换原有内置发送逻辑,参考代码:

// 计算实际可发送数量,避免抽样数超过可用目标数触发报错
int actualSendNum = Math.min(n, eligibleStaff.size());
// 随机打乱合格目标列表,实现无偏随机抽样
List<Staff> shuffledTargets = new ArrayList<>(eligibleStaff);
Collections.shuffle(shuffledTargets);
// 截取指定数量的目标
List<Staff> sendTargets = shuffledTargets.subList(0, actualSendNum);
// 逐个定向发送消息
for (Staff target : sendTargets) {
    send("Buy", target);
}

注意事项

  • 若你使用的建模框架API命名和示例有差异(比如获取连接、获取状态的方法名不同),直接替换为框架对应原生方法即可,筛选-随机抽样-定向发送的核心逻辑通用
  • 若需要复现实验结果,可以给Collections.shuffle()传入带固定随机种子的Random实例,保证每次抽样结果一致
  • 当没有符合条件的staff智能体时,上述逻辑不会执行发送操作,不会触发空指针、索引越界等运行时错误

内容的提问来源于stack exchange,提问作者Jeun Bee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:27:20