Есть ли способ сделать ожидание или задержку функции в AnyLogic?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли способ сделать ожидание или задержку функции в AnyLogic?

Сообщение Anonymous »

Я пытаюсь смоделировать интеллектуальную систему светофора, которая определяет приоритет полос в зависимости от плотности транспортных средств на перекрестке. Моя цель — контролировать фазы светофора, сначала проверяя плотность каждой полосы, сортируя полосы по плотности и проверяя, есть ли существенные различия. Если есть значительная разница, система должна циклически перебирать полосы в зависимости от плотности. В противном случае по умолчанию должен использоваться обычный цикл (север, юг, запад, восток).
Однако я столкнулся с проблемой контроля времени и задержек между переключением светофоров. Внутри функции светофоры срабатывают одновременно, потому что я не могу эффективно контролировать время или эффективно вводить задержки.
Настройка моделирования в AnyLogic
Это то, что делает функция Я имел в виду:

Код: Выделить всё

int NorthRoadDensity = 10;
int SouthRoadDensity = 10;
int WestRoadDensity = 10;
int EastRoadDensity = 10;

int[] desities = {NorthRoadDensity, SouthRoadDensity, WestRoadDensity, EastRoadDensity};
int[] laneOrder = {0, 1, 2, 3};
int densityThreshold = 5;

void trafficLightControl()
{
// Lane Sorting:
for (int i = 0; i < densities.length - 1; i++)
{
for (int j = 0; j < densities.length - i - 1; j++)
{
if (densities[j] < densities[j + 1])
{
// Swap densities
int tempDensity = densities[j];
densities[j] = densities[j + 1];
densities[j + 1] = tempDensity;

// Swap corresponding lanes
int tempLane = laneOrder[j];
laneOrder[j] = laneOrder[j + 1];
laneOrder[j + 1] = tempLane;

}
}
}

boolean significantDifference = (densities[0] - densities[3]) >= densityThreshold;

// Cycling all the traffic lights
if (significantDifference = true)
{
for (int i = 0; i < laneOrder.length; i++)
{
switch (laneOrder[i])
{
case 0: // North Road
stopLineNorth.setSignal(SIGNAL_GREEN);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_RED);

break;

case 1: // South Road
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_GREEN);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_RED);

break;

case 2: // West Road
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_GREEN);
stopLineEast.setSignal(SIGNAL_RED);

break;

case 3: // East Road
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_GREEN);

break;
}
// Wait time = desities[0] * 3;
}
}

// default traffic light phase, no priority
else
{
//North
stopLineNorth.setSignal(SIGNAL_GREEN);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_RED);

// Wait time = 60

//South
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_GREEN);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_RED);

// Wait time = 60

//West
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_GREEN);
stopLineEast.setSignal(SIGNAL_RED);
// Wait time = 60

//East
stopLineNorth.setSignal(SIGNAL_RED);
stopLineSouth.setSignal(SIGNAL_RED);
stopLineWest.setSignal(SIGNAL_RED);
stopLineEast.setSignal(SIGNAL_GREEN;
// Wait time = 60

}
}
Я пробовал использовать диаграммы состояний для лучшего контроля времени и задержек, и хотя реализация цикла по умолчанию с задержками проста, у меня возникли проблемы с циклом при сортировке полос по плотности. и циклически переходим к отсортированным полосам.
Моя диаграмма состояний алгоритма
Результат диаграммы состояний

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-anylogic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»