在Process Modeling Library块中的anylogic中,有一个名为Delay的对象,它具有功能 extendDelay :
void extendDelay(Agent agent,double dt)-扩展给定延迟 代理(如果可以将null作为参数传递,则所有延迟 代理商将受到影响。)
它不接受带有负数的dt,但是我需要减少座席延迟时间,这是错误消息:
java.lang.RuntimeException: root.UnicastService:
Parameter dt has invalid value: -0.9652996653680965
我的问题是:如何减少代理的延迟时间或设置新的延迟时间,并且有可能在不退出Delay对象的情况下这样做。
答案 0 :(得分:1)
有几种方法,取决于模型中实际发生的情况。
一个选项:用Wait对象替换Delay对象。该方法具有myWait.free(agent)
的一种方法,您可以在任意时候使用它来释放任何特定的代理,即,只要模型确定“现在是时候”。
无需减少/修改延迟时间。
另一种方法可能是在“延迟”对象属性的顶部,将“延迟”模式从默认的“指定时间”切换为“直到调用stopDelay()”。现在,所有座席都会等到您直接将他们召唤出去。再说一次,可能比减少等待时间更优雅。
欢呼
答案 1 :(得分:1)
我同意Ben的观点,您应该使用等待块...对我来说似乎更自然...但是,如果您无论如何都坚持使用延迟,那么您可以这样做:
main.delay.stopDelay(this);
现在...每次您想要减少延迟时间时,都可以使用以下代码,假设“ a”是您要减少延迟的代理程序
double remainingDelay=delay.getRemainingTime(a)
;
double delayReduction=4
; //或您想减少的任何时间
a.totalReduction+=delayReduction
;
double newRemainingDelay=remainingDelay-a.totalReduction
;
if(newRemainingDelay<=0)
{
delay.stopDelay(a)
;
}
其他{
a.reduceDelay.restart(newRemainingDelay)
;
}