Условное событие, запускающее Anylogic
Есть ли другой способ использовать условное событие для мониторинга парковочных мест? Конечная цель состоит в том, чтобы увидеть в журнале результатов событий, когда автомобиль припаркован и где. Я сделал событие, которое вызывает функцию, которая запускает цикл через каждое парковочное место и возвращает true в выбранном месте. Я хотел вызвать это событие всякий раз, когда машина припарковалась, но зацикливание вызывает остановку симуляции.
Function(){
for(int i = 0; i<29; i++) //29 = number of parking spaces
{
if(parkingLot2.getCarOnSpace(i) != null) //if spot i taken
{
return true;
//true sent back to event, is then triggered
}
}
return false;
}
Event
condition: Function();
Action: event.restart();
1 ответ
Поэтому сначала функция event.restart() применяется только в том случае, если событие имеет тип триггера: timeout и mode: user control, в противном случае ваша функция event.restart() ничего не делает...
Во-вторых, вам нужно вызывать вашу функцию не в условном событии, а в момент парковки... Это можно сделать с помощью действия "на выходе" блока carMoveTo.
И вашу функцию можно сделать лучше, используя nSpaces вместо 29:
for(int i = 0; i<parkingLot2.nSpaces(); i++)
{
if(parkingLot2.getCarOnSpace(i) != null)
{
return true;
}
}
return false;
Вы можете использовать аналогичную функцию, чтобы узнать, в каком месте припаркован автомобиль, но вам нужно иметь отдельный массив, собирающий информацию о том, какие места свободны или нет, так как объект parkingLot не имеет этой функции. Представьте, что у вас есть массив с размером parkingLot2.nSpaces() и логические элементы, начинающиеся с false, поскольку все парковочные места свободны. Всякий раз, когда ваш автомобиль въезжает на парковочное место, вы используете ту же функцию, но вместо "вернуть истину" вы устанавливаете для массива значение true в этом конкретном индексе. И вы должны установить массив в false, когда машина выходит.