AnyLogic免费版仿真卡在SelectOutput模块问题求助
从你的描述和配置来看,问题核心大概率出在CombineObject模块的运行逻辑上,结合AnyLogic的仿真机制,给你几个具体排查和解决方向:
检查CombineObject的合并规则配置
如果你把CombineObject设置为「合并固定数量的实体」(比如要求凑齐2个实体才会输出),那当其中一路(比如Machine 1的输出)先到达CombineObject,而另一路(Machine 2的对应输出)还没到的时候,CombineObject会一直等待凑够数量,导致它的输入队列被占满,进而阻塞上游的SelectOutput模块——哪怕下游Machine 3/M4处于空闲状态,CombineObject没完成合并就不会输出,上游自然卡壳。
解决:如果你的需求只是把两台机器的各一半输出合并成连续流发给后续设备(而非必须凑成对),应该用Queue+Exit的组合或者直接用连接线路合并流量,而非CombineObject;如果确实需要合并固定数量,要确保两路实体的到达节奏匹配,或者给CombineObject添加超时释放逻辑。调整SelectOutput的阻塞行为
打开SelectOutput模块的配置面板,查看「当输出端口被阻塞时」的设置,如果选的是「等待」,当下游CombineObject无法接收时,SelectOutput会直接停在那里。可以改成「将实体发送到默认输出端口」或者「存储到队列」,避免直接卡住整个流程。验证实体类型与端口兼容性
确认Machine 1和Machine 2输出的实体类型完全一致,CombineObject只能合并同类型的实体;同时检查CombineObject的输出端口是否正确连接到Machine 3/M4的输入端口,且后续设备没有设置实体过滤条件(比如只接收特定类型实体)。排查CombineObject的输入队列容量
虽然你说容量参数无异常,但还是要确认CombineObject的「输入队列容量」是不是设得太小,导致实体一进入就占满队列,直接阻塞上游模块。可以暂时把输入队列容量设为无限大,测试是否还会出现卡壳情况。
内容的提问来源于stack exchange,提问作者Vinayak Mulye

