Пример 3.3

Входные вектора описываются матрицей:

>> inp = [0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1;

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1;

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1]

Выходной вектор:

>> out=[0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0]

Созданим сеть прямого распространения с помощью команды:

>> network=newff([0 1;0 1; 0 1; 0 1],[6 1],{'logsig','logsig'})

В этой команде первый массив содержит диапазоны изменения сигнала для каждого входа, второй массив – размер каждого слоя (число нейронов), затем задается тип передаточной функции для каждого слоя.

До начала обучения выполняется инициализация НС:

>> network=init(network);

Зададим число эпох, скорость и запустим обучение:

>> network.trainParam.epochs = 500;

>> network.trainParam.lr = 0.05;

>> network=train(network,inp,out);

Проверим работу сети:

>> y=sim(network,inp);

>> out-y

ans =

1.0e-004 *

-0.0191 0.0044 0.0204 -0.0237 0.0039 -0.0000 -0.0316 0.0041 0.0014 -0.0367 -0.0253 0.1118 -0.0299 0.0384 0.0000 -0.0000

Ошибки между заданным выходом НС и реальным выходом можно считать пренебрежимо малыми.

Рассмотрим далее простейший закон логического управления динамическим объектом.

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

.

MatLab программа:

>> w=2*pi;

>> for i=1:300 % формирование обучающей выборки

time(i)=0.01*i;

e(i)=(exp(-time(i)))*sin(w*time(i));

if (e(i)>0.0) t(i)=1;

elseif (e(i)<0.0) t(i)=-1;

end

end

>> plot(time,e); grid on; hold on;

>> net = newff([min(e) max(e)],[10 1],{'tansig','purelin'});

>> net.trainParam.epochs = 1000;

>> net = train(net,e,t);

>> u=sim(net,e); plot(time,u,'+'); legend('ошибка','управление'); xlabel('t');

Работу релейного регулятора иллюстрирует рис. 3.6.

Рисунок 3.6. Нейросетевой релейный регулятор.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: