选择输出故障

时间:2016-10-21 08:36:14

标签: java anylogic

使用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端口发送代理。

1 个答案:

答案 0 :(得分:1)

它可能与您使用的系统类型有关。
如果你使用" pull"协议(参见:http://www.anylogic.com/blog?page=post&id=157)代理将在进入之前向前看并评估selectoutput。由于在 selectoutput 对象中花费的时间为0,因此必须这样做 如果条件在之后已经评估了 selectoutput 函数,它仍会选择假路径,即使它是真的。 要修复它,根据您的代码,您可以使用队列对象。这将给代理1额外的时间步长以放松参数并正确评估条件