【发布时间】:2019-09-05 13:23:03
【问题描述】:
我在 AnyLogic 中使用离散事件模拟器。我遇到了一些代码问题,这些代码更新了我的模拟中的变量。我存储了代理离开源块的日期时间和它进入接收器块的日期时间。我正在尝试记录所有代理的“规则中断”次数。规则中断定义如下(两种中断方式):
1) 如果在某个时间(称为SDC)之前收到代理,并且在当天下午5点之前没有完成代理,那么代理已经违反了规则
2)如果代理在第二天的某个时间(称为NDC)还没有完成,那么代理已经违反了规则
如果每个代理违反了名为 RuleBreak 的变量中的任一规则,我会为他们记录一个 0 或 1。但是,在我的模拟运行中,变量根本不会更新。我希望我只是错过了一些小东西。将不胜感激任何帮助! (代码如下)
Calendar received = Calendar.getInstance();
received.setTime(ReceivedDate);
Calendar completion = Calendar.getInstance();
completion.setTime(Completion);
Calendar SD_at_5 = Calendar.getInstance();
SD_at_5.setTime(ReceivedDate);
SD_at_5.set(Calendar.HOUR_OF_DAY,17);
SD_at_5.set(Calendar.MINUTE, 0);
SD_at_5.set(Calendar.SECOND, 0);
Calendar Tomorrow_at_NDC = Calendar.getInstance();
Tomorrow_at_NDC.setTime(ReceivedDate);
if(Tomorrow_at_NDC.get(Calendar.DAY_OF_WEEK) == 6)
Tomorrow_at_NDC.add(Calendar.DATE, 3);
else
Tomorrow_at_NDC.add(Calendar.DATE, 1);
Tomorrow_at_NDC.add(Calendar.DATE, 1);
Tomorrow_at_NDC.set(Calendar.HOUR_OF_DAY,NDC);
Tomorrow_at_NDC.set(Calendar.MINUTE, 0);
Tomorrow_at_NDC.set(Calendar.SECOND, 0);
int Either_rule_break = 0;
double time_diff_SDC = differenceInCalendarUnits(TimeUnits.SECOND,completion.getTime(),SD_at_5.getTime());
double time_diff_NDC = differenceInCalendarUnits(TimeUnits.SECOND,completion.getTime(),Tomorrow_at_NDC.getTime());
if((received.get(Calendar.HOUR_OF_DAY) < SDC) && (time_diff_SDC <= 0))
Either_rule_break = Either_rule_break + 1;
else
Either_rule_break = Either_rule_break + 0;
if((received.get(Calendar.HOUR_OF_DAY) >= SDC) && (time_diff_NDC <= 0))
Either_rule_break = Either_rule_break + 1;
else
Either_rule_break = Either_rule_break + 0;
if((Either_rule_break >= 1))
RuleBreak = RuleBreak + 1;
else
RuleBreak = RuleBreak + 0;
【问题讨论】:
标签: simulation anylogic