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

如何用FluidSelectOutput实现多输出选择逻辑(流体库适用)

用FluidSelectOutput实现AnyLogic流体库指定X个客户的配送逻辑

核心思路

通过参数跟踪客户数量与配送状态,结合FluidSelectOutput的端口选择逻辑,实现流体向指定X个客户的定向配送。


步骤1:定义关键参数

在模型中添加以下参数/变量,用于控制配送逻辑:

  • int targetCustomerCount = X;:存储需要配送的客户总数X
  • int currentCustomerIdx = 0;:跟踪当前正在配送的客户索引
  • Set<Integer> servedCustomers = new HashSet<>();:(可选)记录已完成配送的客户,避免重复服务

步骤2:配置FluidSelectOutput组件

  1. 添加FluidSelectOutput到模型画布,设置输出端口数量为targetCustomerCount(可在组件属性的Number of outputs中直接输入参数名)。
  2. 每个输出端口对应一个客户的配送路径,末端连接FluidSink(代表客户接收流体)或其他处理组件(如FluidDelay模拟配送耗时)。

步骤3:编写端口选择逻辑

双击FluidSelectOutput,在Select output代码框中编写逻辑,控制流体流向:

场景1:循环向X个客户重复配送

如果需要持续循环给X个客户配送(比如周期性补货),用以下代码:

// 按顺序切换客户端口,循环往复
int selectedPort = currentCustomerIdx;
currentCustomerIdx = (currentCustomerIdx + 1) % targetCustomerCount;
return selectedPort;

场景2:给每个客户仅配送一次(完成X个即停止)

如果要求每个客户只接收一次配送,完成后停止,用以下代码:

// 遍历未服务的客户,返回对应端口索引
for (int i = 0; i < targetCustomerCount; i++) {
    if (!servedCustomers.contains(i)) {
        servedCustomers.add(i);
        return i;
    }
}
// 所有客户已服务,返回-1阻塞流体(需配合储罐停止流出逻辑)
return -1;

步骤4:控制流体流入选择器(可选)

如果需要在所有客户完成配送后停止流体进入选择器,设置FluidSelectOutput的Input enabled属性为:

// 仅当还有未服务客户时允许流体进入
return servedCustomers.size() < targetCustomerCount;

补充:精确控制单客户配送量

若需给每个客户配送固定体积的流体,可在客户端的FluidSink中设置Maximum volume为指定值,或在储罐与选择器之间添加FluidBatch组件,将流体分成固定体积的批次后再配送。

内容的提问来源于stack exchange,提问作者Henrique Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:56:06