- •«Мати»-Российский государственный технологический университет имени к.Э.Циолковского (мати)
- •Оглавление
- •Глава 1. Нейронные Сети 7
- •Глава 2. Самоорганизующиеся карты 23
- •Глава 3. Описание работы системы 45
- •Введение
- •Актуальность задачи
- •Глава 1. Нейронные Сети Нейронные сети
- •Искусственный нейрон и его биологический прототип
- •Аналогия с мозгом
- •Биологический нейрон
- •Зрительное и пространственное воображение
- •Глава 2. Самоорганизующиеся карты Основы теории
- •MnSom из mlp-модулей
- •Обобщенная теория mnSom
- •Как избежать локальных минимумов
- •Базовая версия
- •Связь между mnSom и som
- •Глава 3. Описание работы системы Работа сети и алгоритм
- •Модель движения в MathLab
- •Заключение
- •Список литературы
Модель движения в 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
Если процент ошибки не слишком большой, можно оставить как есть, если нет можно использовать более подходящую нейросеть, увеличить количество эпох, чтобы уменьшить количество ошибок.