使用selectOutput我面临问题(我认为这是一个故障)。 条件如下:
main.controlLot[agent.orderID][workcenterID]==
main.alreadyEntered[agent.orderID][workcenterID] ||
agent.numberProductsInPallet ==
((int) selectFrom(routings)
.where(routings.work_center.eq(Name))
.where(routings.component_id.eq(agent.component))
.firstResult(routings.palletization))
输入我检查self.condition(agent)
,当条件(main.controlLot[agent.orderID][workcenterID]==main.alreadyEntered[agent.orderID][workcenterID])
的第一段验证时,它不会通过True端口。但是,self.condition(agent)返回True。
我在退出时放置了以下代码(False)以确认条件是否可以在逻辑中改变:
traceln(main.controlLot[agent.orderID][workcenterID] + " " + main.alreadyEntered[agent.orderID][workcenterID]);
traceln(agent.numberProductsInPallet);
traceln(self.condition(agent));
并且traceln(self.condition(agent)打印为true。我不明白为什么它会将条件评估为true,但是通过false端口发送代理。
答案 0 :(得分:1)
它可能与您使用的系统类型有关。
如果你使用" pull"协议(参见:http://www.anylogic.com/blog?page=post&id=157)代理将在进入之前向前看并评估selectoutput。由于在 selectoutput 对象中花费的时间为0,因此必须这样做
如果条件在之后已经评估了 selectoutput 函数,它仍会选择假路径,即使它是真的。
要修复它,根据您的代码,您可以使用队列对象。这将给代理1额外的时间步长以放松参数并正确评估条件