Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
диплом готовый_красильников.doc
Скачиваний:
10
Добавлен:
27.10.2018
Размер:
966.14 Кб
Скачать

Модель движения в MathLab

Для начала необходимо как мы будем реализовывать данную задачу. У нас есть расстояние между перекрестками. Первый перекресток мы берем как точку отсчета. Затем у нас есть скорость транспорта, так как "зеленую волну" в основном организовывают в городе для улучшения экологии (меньше транспорта останавливается, меньше времени двигатель работает в наихудшем для экологии состоянии - разгона, после торможения), улучшении морального состояния водителя, т.к. он меньше ждет и меньше волнуется. Соответственно рекомендуемая скорость перемещения по дорогам города 55 - 60 км/час. И третий, рассчитываемый, параметр - время переключения, а точнее время смещения сигнала зеленого относительно предыдущего светофора

Входные данные для обучения нейросети:

Расстояние между перекрестками

Выходные данные (те которые должны будут рассчитывать нейросеть):

Время смещения переключения для зеленого цвета 

Для обучения нейросети нужно создать выборку входящих данных и создать для них рассчитанные значения для данных значений. Для этого запускаем любой текстовый редактор (можно редактировать в самом matlab) и создаем текстовый файл с расширением .m. Сохраняем его в папке Matlab\works матлаба (чтобы мы могли использовать его не задавая папку workspace, хотя это как вам удобнее :) ). Теперь если описать функцию в этом файле она будет доступна в matlab

Итак описываем функцию SetLight, которая будет выдавать нам обученную нейросеть:

function [net] = light

Описываем в нашей функции:

Входящие данные для обучения - расстояния между перекрестками в метрах

INP = [1000 350 200 100 300 250 400 500 450 750 150 10];

Исходящие данные для обучения - смещения относительно предыдущего светофора в секундах, при скорости потока в 60 км/ч (примерно 16.6 м/с)

OUTP = [60 21 12 6 18 15 24 30 27 45.2 9 0.6];

Нейросеть, которая будет правильно обучать нашу нейросеть для решения данной задачи

net = newff(minmax(INP),[20,1],{'tansig','purelin'},'trainlm');

Где: newff - создает сеть обратного распространения, minmax Задает диапазон значений для входящих данных, [20,1] - размер для каждого слоя, tansig - функция гиперболического тангенса, purelin - транспортная линейная функция, trainlm - функция, тренирующая сеть, кторая обновления значения весов по методу оптимизации Лавенберга

Параметры для обучения сети:

net = train(net, INP, OUTP);

Фунция обучения сети:

net.trainParam.epochs = 1200;
net.trainParam.show = 25;

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

Функция описана. Теперь ее можно использовать в matlab

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

n = light
a = sim(n, [70, 320, 680])

Либо просто:

a = sim(light, [70, 320, 680])

После обучения нейросети вы получите график: время, ошибки

В этом примере нейросеть прошла все 1200 эпох постепенно обучаясь и уменьшая ошибки. дошла до 10 в минус 5 степени :)

В ответ получим:

a =4.2073 19.2016 40.9148

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