Однако я столкнулся с проблемой контроля времени и задержек между переключением светофоров. Внутри функции светофоры срабатывают одновременно, потому что я не могу эффективно контролировать время или эффективно вводить задержки.
Настройка моделирования в 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
Мобильная версия