Вы действительно не объяснили, где этот код используется и что он получает.Я предполагаю, что код находится в функции, вызываемой в действии приемника при приеме, где ReceivedDate
и Completion
- это Date
экземпляров, сохраняемых для каждого агента (время выхода из источника и время входа в приемник, как даты, записанные с помощью AnyLogic date()
function).
И похоже, что ваш день SDC хранится в SDC
, а ваш час-день NDC в NDC
(с RuleBreak
в качестве переменной в Main
или аналогичное, сохраняющее общее количество нарушений правил).
Ваши вычисления выглядят хорошо, за исключением того, что календарный расчет Tomorrow_at_NDC
кажется неправильным: вы добавляете 1 день дважды (если не суббота) или 3 дня плюс 1 день(если суббота; в календаре Java днем недели 1 является понедельник).
(Ваша Java также очень «неэффективна» с ненужными дополнительными локальными переменными и выполнением логики, когда вам это не нужно;например, нет смысла делать всю подготовку к календарю и проверить на наличие нарушения правил типа 1, если время приема прошло после часа SDC.)
Но вы уверены, что есть любое правило-перерывы;как вы настроили свою модель, чтобы убедиться, что есть (для проверки)?Кроме того, RuleBreak
определенно является переменной вне агентов, которые проходят через ваш DES (то есть, в Main
или аналогичном)?Кроме того, Completion
и ReceivedDate
определенно хранятся на агента , поэтому, например, если бы ваша функция называлась checkForRuleBreaks
, вы бы выполняли что-то похожее на приведенное ниже в своем действии при выходе из раковины:
agent.Completion = date(); // Agent received date set earlier in Source action
checkForRuleBreaks(agent.ReceivedDate, agent.Completion);
(На самом деле вам вообще не нужно хранить дату завершения в агенте, поскольку она всегда будет текущей сим-датой внутри вашей функции, и вы можете просто вычислить ее там.)