Моделирование автотранспортного потока

Суть гидродинамических моделей транспортного потока. Составление алгоритма обхода автомобильных средств во время движения по дорожному полотну. Разработка последовательности регулирования светофора. Создание инструкций имитации выбора пути водителем.

Рубрика Транспорт
Вид диссертация
Язык русский
Дата добавления 10.07.2017
Размер файла 960,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

После чего система будет запущена с той скоростью имитации, которая была выбрана. Для более детального наблюдения за процессом имитации можно открыть таблицы нажав на кнопку "график" (см. Таб. 2) в результате чего для каждого направления можно будет увидеть результаты. Таблицы реализованы так чтобы отобразить текущее данные автомобиля исходя из его скорости передвижения и времени заданного на это передвижение.

Рис. 10. Интерфейс программы

Используя исходные данные, программа моделирует поведения транспортных средств на перекрестке. В результате этого моделирования мы получаем данные (в виде HTML-кода) В них содержится: время ожидания автомобилей на светофоре, направления движений, среднее время в пути для каждого автомобиля, принимаемые решения для движения (см. Табл. 2).

Табл.2. Выходные программ

Полученные результаты моделирования движения транспортных средств на регулируемых перекрестках используются для решения проблем заторов. На следующем примере, увидеть значения задержек. Светофоры настроены таким образом, что красный света горит 100 с, зеленый -- 60 с, желтый может быть проигнорирован, так как может быть включен в цикл зеленого или красного. Транспортные средствами подъезжают к светофору в среднем, каждые 4 с, и когда включается зеленый свет, они начинают движением через перекресток с разницей в 1 с. Также считается, что-то сумма циклов зеленого и красного света равна 160 с, и возьмем значение количества транспортных средств, равное 40. Таким образом, ожидается, что-то всегда транспортные средства проедут через перекресток во время цикла горения зеленого света.

Программа может быть настроена так, чтобы транспортные средствами подъезжали к светофору каждые 4 с. Когда параметры настроены, полученные результаты показывают, что, 33й транспортное средство въедет в перекресток на 132й секунде, и следующие семь не будут останавливаться передвигающегося перекрестком.

Табл. 3. Временных параметров

Используя данные таблицы, можно засчитать среднее значение задержки транспортных средств.

среднее значение задержки =

Мы можем считать, что предыдущее уравнение с общими значениями параметров:

- продолжительность цикла красного света (секунды).

- продолжительность цикла зеленого света (секунды).

- интервал времени прибытия между двумя идущими друг за другом транспортными средствами (секунды).

d - интервал времени начала движения между идущими друг за другом транспортными средствами (секунды).

Мы можем написать уравнение, которое содержит параметры и d среднее значение задержки=.

количество транспортных средств .

где , может быть выражена как сумма арифметической прогрессии:

.

где A= a - d и L= .

n=,

.

среднее значение задержки=.

Диаграмма ниже показывает вымышленное расположение светофоров в определённой зоне, каждый перекресток обозначен буквой (А, Б, В, Г, Д, Е, Ж, З), как показано на рис. 11. Светофор Г расположен в центре дорожной сети, следовательно можно ожидать очень большой трафик на этом перекрёстке (Г), так как все потоки сходятся на этом перекрестке, трафик может быть перераспределён путем применения уравнения (64), таким образом в основном уменьшается трафик на перекрестке (Г), стратегически создавая однородное распределение потоков во всей дорожной сети.

Данные, полученные с помощью моделирования движения автотранспортных потоков и используемые совместно с данными других дорожных сетей, позволяют уменьшать количества заторов в городе. В процессе моделирования движения автотранспортных потоков на перекрёстках также рассчитывается время прохождения через светофоры от момента подъезда к нему до полого выезда из него.

Рис. 11. Диаграмма расположения светофоров

Заключение

Обобщая представленные классификацию и обзор моделей, стоит отметить большое разнообразие методов и моделей, разработанных для решения задач, связанных с проблемами автомобильного движения.

Однако до сих пор не существует идеальной модели, позволяющей решить все проблемы, связанные с транспортными потоками, как не существует и всеохватывающей классификации этих моделей, учитывающей все их аспекты. Выбор метода моделирования определяется как поставленной задачей, так и техническими возможностями и предпочтениями исполнителей.

Выполненные в диссертации исследования позволяют анализировать движение транспортных средств, в местах их большого скопления, особенно на регулируемых перекрестах. Они являются очень важными инструментом, такая как получение параметров как время ожидания транспортных средства на перекрестках, дает достаточно определенное представление потерь, которые провоцируют заторы в экономическом плане, влияние выбросов СО2 на окружающую среду среди других.

Хочется особенно упомянуть город Каракас, который занимает четвертое место в мире по количеству пробок на дорогах. В настоящее время в некоторых районах города применяются современные технологии, но всегда программное обеспечение приобретается в других странах, и это делает нашу страну уязвимой и зависимой, поэтому наше правительство уделяет особое внимание подготовке кадров за рубежом, с целью создания собственного программного обеспечения и обеспечения национальной безопасности и независимости от иностранных технологии.

В будущем эти системы смогут работать на перекрестках с фактическими данными потока транспортных средств, полученными с помощью различных средств, такие как сенсоры и спутниковые снимки. Данные с разных перекрёстков и дорог будут обрабатываться в едином центре, что даст возможность улучшать дорожную ситуацию в целом городе или районе.

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

Список литературы

1. D.S. Johnson, C.R. Aragon, L.A. McGeoch, and C. Schevon. Optimization by simulated annealing: An experimental evaluation; part i, graph coloring and number partitioning. Operations research, 37:865-892, 1989.

2. E. Taniguchi and H. Shimamoto. Intelligent transportation system based dynamicvehicle routing and scheduling with variable travel times. Transportation Research Part C: Emerging Technologies, 12(3-4):235-250, 2004.

3. Chandler R.E. at al. Traffic dynamics: Studies in car following - Opreations Research. - 1958. - Vol. 6. - P. 165-185.

1. Gasis D.C. et al. Car following theory of steady state flow - Operations Research. - 1959. - Vol. 7. - P. 499-505.

2. Krug J., Spohn H. // Phys. Rev. A. - Vol. 83. - P. 4271.

3. Cremer M., Ludwig J. A fast simulation model for traffic flow on the basis of Boolean operations // Math. Comp Simul. - 1986. - V. 28. - P. 297-303.

4. Nagel K., Schreckenberg M. A cellular automation model for freeway traffic // J. Phys. I France. - 1992. - Vol. 2. - P. 2221- 2229.

5. Швецов В.И. Математическое моделирование транспортных потоков // Автоматика и телемеханика. - 2003. - No11.Chandler R.E. at al. Traffic dynamics: Studies in car following // Opreations Research. - 1958. - Vol. 6. - P. 165-185.

6. Comisiуn de las Comunidades Europeas. Comunicaciуn de la Comisiуn al Consejo y al Parlamento Europeo. Hacia un transporte mбs ecolуgico, p. 2. COM(2008) 433, 2008.

7. Q. Yang. A simulation laboratory for evaluation of dynamic traffic management systems. PhD Thesis, Massachusetts Institute of Technology, 1997.

8. D.W. Huang and W.N. Huang. Optimization of traffic lights at crossroads. International Journal of Modern Physics C, Physics and Computer, 14(5):539-548, 2003.

Приложение

Представлена основная функция для программы включающая в себя вызов операций рисования объектов на карте и алгоритм выбора траектории движения. Эта функция вызывается по таймеру и на каждой итерации проходит весь список автомобилей, затем определяет направление движения выбранного из списка автомобиля после чего проверяет возможно ли его движение и если это возможно и при этом присутствует светофор установленный в зеленый цвет позволяет принять решение на основе случайной величины.

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include<QPainter>

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow){

ui->setupUi(this);

tm=new QTimer(this); // включение таймера

tm->connect(tm,SIGNAL(timeout()),this,SLOT(updateModel()));// функция updatemodel вызывается после задержки

tm->start(10); // установка задержки таймеру в милисекундах. таймер нужен для обновления клеточного автомата

srand(time(NULL));

setFixedSize(640,700); //установка размеров окна

for(int i=0;i<4;i++)

carThreadSize[i]=0;

clearMapFlag=false;

work=false;

graphics=NULL;

}

MainWindow::~MainWindow(){

delete tm;

delete ui;

}

//функция обновления всего клеточного автомата. она вызывается таймером

void MainWindow::updateModel(){

update();

}

// функция рисования одного квадрата клеточного автомата

void MainWindow::drawRect(int x,int y,int w,int h,int color){

paint->setRenderHint(QPainter::Antialiasing, true);

paint->setPen(QPen(QColor(color+100), 0, Qt::SolidLine, Qt::RoundCap));

paint->setBrush(QBrush(QColor(color),Qt::SolidPattern));

paint->drawRect(x,y,w,h); //рисование самого квадрата

}

/*

* функция задержки автомобиля. эта функция будет устанавливать задержку автомобилю в зависимости от скорости

* например скорость автомобиля speed=8 значит до тех пор пока значение delay не станет равно speed

* автомобиль не будет перемещатся на новую клетку

*/

bool MainWindow::calulateSpeedDelay(Car *car){

if(car->speed<=car->defaultSpeed){

car->speed++;

return true;

}

car->speed=0;

return false;

}

int MainWindow::calculateDifference(Car *car,int position){

bool flag=false;

if(car->difference>0){

car->difference--;

flag=true;

}

carList.removeAt(position);

carList.insert(position,car);

return flag;

}

/*

* функция рисования автомобилей и карты

* эта функция проходит по списку атомобилей и узнает напрвление (direction). Направление может быть

* DOWN, UP, LEFT, RIGHT и для каждого напрвления увеличивает нужную координату

* например для того чтобы двигатся вниз нужно увеличивать координату Y автомобиля и проверять

* не выходит ли она за пределы клеточного автомата

*/

void MainWindow::drawSystem(){

Car *car=new Car;

for(int i=0;i<carList.size();i++){

car=carList.at(i);

RoadMatrix[car->y][car->x]='1'; //удаление старого автомобиля с карты

if(calulateSpeedDelay(car)==false && calculateDifference(car,i)==false && car->end==false){

switch(car->direction){

case ROAD_A:

switch(RoadMatrix[car->y+1][car->x]){

case '1':

if(car->lightBuf>0){

car->lightVector.append(car->lightBuf);

car->lightBuf=0;

}

car->y++;

car->speedVector.append(11-car->defaultSpeed);

car->moveBuf++;

break;

case '2':

if(car->moveBuf>0){

car->moveVector.append(car->moveBuf);

car->moveBuf=0;

}

car->lightBuf++;

car->speedVector.append(0);

break;

case '4':

car->y+=2;

car->direction=car->turn;

break;

}

if(RoadMatrix[car->y+1][car->x]=='5' && (RoadMatrix[car->y][car->x-1]=='1' && RoadMatrix[car->y][car->x+1]=='1'))car->x++;

if(car->y==N-2){

car->y++;

car->end=true;

car->moveVector.append(car->moveBuf);

}

break;

case ROAD_B:

switch(RoadMatrix[car->y][car->x+1]){

case '1':

if(car->lightBuf>0){

car->lightVector.append(car->lightBuf);

car->lightBuf=0;

}

car->x++;

car->speedVector.append(11-car->defaultSpeed);

car->moveBuf++;

break;

case '2':

if(car->moveBuf>0){

car->moveVector.append(car->moveBuf);

car->moveBuf=0;

}

car->lightBuf++;

car->speedVector.append(0);

break;

case '4':

car->x+=2;

car->direction=car->turn;

break;

}

if(RoadMatrix[car->y][car->x+1]=='5' && (RoadMatrix[car->y-1][car->x]=='1' && RoadMatrix[car->y+1][car->x]=='1'))car->y++;

if(car->x==M-2){

car->x+=2;

car->end=true;

car->moveVector.append(car->moveBuf);

}

break;

case ROAD_C:

switch(RoadMatrix[car->y-1][car->x]){

case '1':

if(car->lightBuf>0){

car->lightVector.append(car->lightBuf);

car->lightBuf=0;

}

car->y--;

car->speedVector.append(11-car->defaultSpeed);

car->moveBuf++;

break;

case '2':

if(car->moveBuf>0){

car->moveVector.append(car->moveBuf);

car->moveBuf=0;

}

car->lightBuf++;

car->speedVector.append(0);

break;

case '4':

car->y-=2;

car->direction=car->turn;

break;

}

if(RoadMatrix[car->y-1][car->x]=='5' && (RoadMatrix[car->y][car->x-1]=='1' && RoadMatrix[car->y][car->x+1]=='1'))car->x++;

if(car->y==0){

car->y--;

car->end=true;

car->moveVector.append(car->moveBuf);

}

break;

case ROAD_D:

switch(RoadMatrix[car->y][car->x-1]){

case '1':

if(car->lightBuf>0){

car->lightVector.append(car->lightBuf);

car->lightBuf=0;

}

car->x--;

car->speedVector.append(11-car->defaultSpeed);

car->moveBuf++;

break;

case '2':

if(car->moveBuf>0){

car->moveVector.append(car->moveBuf);

car->moveBuf=0;

}

car->lightBuf++;

car->speedVector.append(0);

break;

case '4':

car->x-=2;

car->direction=car->turn;

break;

}

if(RoadMatrix[car->y][car->x-1]=='5' && (RoadMatrix[car->y-1][car->x]=='1' && RoadMatrix[car->y+1][car->x]=='1'))car->y++;

if(car->x==0){

car->x-=2;

car->end=true;

car->moveVector.append(car->moveBuf);

}

break;

}

}

carList.removeAt(i); //удаляем из списка старый автомобиль

carList.insert(i,car);// на место старого автомобиля устанавливается автомобиль с измененными координатами

switch(car->direction){

case ROAD_A:

if(car->y>0&&car->end==false)

RoadMatrix[car->y][car->x]='5'; // рисование автомобиля на карте

break;

case ROAD_B:

if(car->x>0&&car->end==false)

RoadMatrix[car->y][car->x]='5'; // рисование автомобиля на карте

break;

case ROAD_C:

if(car->y<N&&car->end==false)

RoadMatrix[car->y][car->x]='5'; // рисование автомобиля на карте

break;

case ROAD_D:

if(car->x<M-2&&car->end==false)

RoadMatrix[car->y][car->x]='5'; // рисование автомобиля на карте

break;

}

}

TrafficLight();

}

void MainWindow::TrafficLightSwitcher(char VerticalRoadLight,char HorizontalRoadLight){

for(int i=12;i<12+8;i++){

RoadMatrix[11][i]=VerticalRoadLight;

RoadMatrix[11][i+9]=VerticalRoadLight;

RoadMatrix[29][i]=VerticalRoadLight;

RoadMatrix[29][i+9]=VerticalRoadLight;

RoadMatrix[i][11]=HorizontalRoadLight;

RoadMatrix[i][29]=HorizontalRoadLight;

RoadMatrix[i+9][11]=HorizontalRoadLight;

RoadMatrix[i+9][29]=HorizontalRoadLight;

}

}

void MainWindow::TrafficLight(){

if(trafficlighttimer>500)trafficlighttimer=0;

if((trafficlighttimer*10)==trafficlightdelay[0]*10)TrafficLightSwitcher('2','4');

if((trafficlighttimer*10)==trafficlightdelay[1]*10)TrafficLightSwitcher('3','3');

if((trafficlighttimer*10)==trafficlightdelay[2]*10)TrafficLightSwitcher('4','2');

/*

switch(trafficlighttimer){

case 0: //красный сигнал на вертикальных дорогах и зеленый на горизонтальных

TrafficLightSwitcher('2','4');

break;

case 50:// оранжевый сигнал на всех дорогах

TrafficLightSwitcher('3','3');

break;

case 60://зеленый сигнал на вертикальных дорогах и красный на горизонтальных

TrafficLightSwitcher('4','2');

break;

case 110:

TrafficLightSwitcher('3','3');

break;

case 120:

trafficlighttimer=-1;

break;

}

*/

trafficlighttimer++;

}

void MainWindow::drawMap(){

int color;

for(int i=0;i<N;i++)

for(int j=0;j<M;j++){

if(clearMapFlag==true)

if(RoadMatrix[i][j]=='5')RoadMatrix[i][j]='1';

switch (RoadMatrix[i][j]) {

case '0': // цвет границ дорог который нельяза пересекать

color=0xf5d76e;

break;

case '1':// цвет самой дороги

color=0xa6a5950;

break;

case '2'://цвет красного светофора

color=0xd91e18;

break;

case '3'://цвет желтый светофора

color=0xfff7ca18;

break;

case '4'://цвет зеленый светофора

color=0x3fc380;

break;

case '5'://цвет автомобиля

color=0xffff00;

break;

}

drawRect(j*ITEMSIZE,i*ITEMSIZE,ITEMSIZE,ITEMSIZE,color); //нарисовать

}

clearMapFlag=false;

}

// функция автоматически вызывается когда перерисовка окна

void MainWindow::paintEvent(QPaintEvent *){

paint=new QPainter(this);

drawMap();

drawSystem();

}

/*

* функция создания одного автомобиля

* принимает roadNumber это номер дороги на которой нужно установить автомобиль

* потом устанавливает по координатам и к каждому автомобилю добавляет direction

* это направление движения

*

*/

Car* MainWindow::generateCar(int roadNumber){

Car *car=new Car;

switch(roadNumber){

case ROAD_A:

car->y=0; // координата Y

car->x=(rand()%6)+13; // координа X устанавливается случайно чтобы автомобили не пересекались во время создания

car->direction=ROAD_A; // направление движения

car->defaultDirection=ROAD_A;

car->turn=ROAD_A;

car->path[0]="A";

car->path[1]="A";

if((rand()%2)==1){

car->turn=ROAD_D;

car->path[1]="D";

}

break;

case ROAD_B:

car->y=(rand()%6)+22;

car->x=0;

car->direction=ROAD_B;

car->defaultDirection=ROAD_B;

car->turn=ROAD_B;

car->path[0]="B";

car->path[1]="B";

if((rand()%2)==1){

car->turn=ROAD_A;

car->path[1]="A";

}

break;

case ROAD_C:

car->y=N-1;

car->x=(rand()%6)+22;

car->direction=ROAD_C;

car->defaultDirection=ROAD_C;

car->turn=ROAD_C;

car->path[0]="C";

car->path[1]="C";

if((rand()%2)==1){

car->turn=ROAD_B;

car->path[1]="B";

}

break;

case ROAD_D:

car->y=(rand()%6)+13;

car->x=M-1;

car->direction=ROAD_D;

car->defaultDirection=ROAD_D;

car->turn=ROAD_D;

car->path[0]="D";

car->path[1]="D";

if((rand()%2)==1){

car->turn=ROAD_C;

car->path[1]="C";

}

break;

}

car->defaultSpeed=(rand()%10)+1; //установка случайной скорости

car->speed=0;

car->end=false;

car->difference=(rand()%50)+10;

car->lightBuf=0;

car->moveBuf=0;

car->enable=true;

return car;

}

void MainWindow::on_pushButton_4_clicked()

{

graphics=new Dialog;

graphics->setCarT(&carList);

graphics->setModal(true);

graphics->show();

}

void MainWindow::on_comboBox_activated(int index)

{

switch(index){

case 0:

tm->setInterval(10);

break;

case 1:

tm->setInterval(20);

break;

case 2:

tm->setInterval(50);

break;

case 3:

tm->setInterval(80);

break;

case 4:

tm->setInterval(100);

break;

case 5:

tm->setInterval(200);

break;

case 6:

tm->setInterval(300);

break;

}

}

void MainWindow::on_pushButton_6_clicked()

{

if(work==true){

work=false;

clearMapFlag=true;

}

else {

work=true;

clearMapFlag=false;

}

for(int i=0;i<carList.length();i++)

delete carList.at(i);

carList.clear();

for(int i=0;i<4;i++)

for(int j=0;j<carThreadSize[i];j++)

carList.append(generateCar(i));

}

void MainWindow::on_spinBox_valueChanged(int arg1)

{

carThreadSize[0]=arg1;

}

void MainWindow::on_spinBox_2_valueChanged(int arg1)

{

carThreadSize[1]=arg1;

}

void MainWindow::on_spinBox_3_valueChanged(int arg1)

{

carThreadSize[2]=arg1;

}

void MainWindow::on_spinBox_4_valueChanged(int arg1)

{

carThreadSize[3]=arg1;

}

void MainWindow::on_spinBox_5_valueChanged(int arg1)

{

trafficlightdelay[0]=arg1;

}

void MainWindow::on_spinBox_6_valueChanged(int arg1)

{

trafficlightdelay[1]=arg1;

}

void MainWindow::on_spinBox_7_valueChanged(int arg1)

{

trafficlightdelay[2]=arg1;

}

Размещено на Allbest.ru


Подобные документы

  • Анализ транспортных систем с помощью математического моделирования. Локальные характеристики автотранспортных потоков. Моделирование транспортного потока в окрестности сужения улично-дорожной сети. Стохастическое перемешивание при подходе к узкому месту.

    практическая работа [1010,5 K], добавлен 08.12.2012

  • Определение интенсивности движения - количества транспортных средств, прошедших контрольное сечение дорожного объекта во всех направлениях за единицу времени (час, сутки). Анализ плотности транспортного потока, его распределения и коэффициента загрузки.

    лабораторная работа [132,0 K], добавлен 18.02.2010

  • Анализ проблем безопасности движения, связанных с наездами на пешеходов. Расчет скорости движения транспортного средства перед началом торможения. Определение величины остановочного пути. Расчет своевременности принятия водителем мер к снижению скорости.

    курсовая работа [128,1 K], добавлен 07.08.2013

  • Порядок и правила реализации метода стационарных наблюдений, сферы и особенности его применения. Порядок исследования скорости движения транспортного потока. Исследование скорости движения одиночного автомобиля, определение маршрута и составление схемы.

    контрольная работа [232,3 K], добавлен 27.01.2010

  • Характеристика основных категорий автомобильных дорог. Определение пропускной способности дороги и коэффициента загрузки движением. Расчет средней скорости движения транспортного потока. Выявление опасных мест дороги методом коэффициентов аварийности.

    курсовая работа [1,8 M], добавлен 15.01.2012

  • Анализ условий и организации движения на объекте улично-дорожной сети, интенсивности и состава транспортного потока. Расчет задержек подвижного состава на перекрестке, выбор типа светофорного регулирования, обоснование эффективности его введения.

    курсовая работа [485,1 K], добавлен 27.07.2012

  • Задачи транспортной логистики. Виды транспортных систем. Пути движения материального потока от первичного источника сырья до конечного потребления. Планирование транспортного процесса. Основные принципы товароснабжения. Расчет месячного грузооборота.

    курсовая работа [410,7 K], добавлен 21.10.2011

  • Изучение состава транспортного потока на перегонах улиц города Тула. Составление схемы участка улично-дорожной сети. Оценка интенсивности движения за разные временные интервалы и направления. Определение сложности пересечения улиц Мира и Оружейной.

    курсовая работа [496,2 K], добавлен 28.04.2012

  • Анализ условий и организации движения на объекте улично-дорожной сети. Интенсивность и состав транспортного потока. Исследование и расчет задержек подвижного состава на перекрестке. Выбор типа светофорного регулирования и длительности его цикла.

    курсовая работа [635,0 K], добавлен 05.06.2011

  • Динамика аварийности в Республике Абхазия на примере подъезда к городу Сухуми. Характеристика участка автомобильной дороги. Интенсивность движения и состав транспортного потока. Расследование дорожно-транспортных происшествий, проведение экспертизы.

    дипломная работа [679,1 K], добавлен 01.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.