Download - Fernando Villalba Activ i Dad 13
Página 1
UNIVERSIDAD DE FUERZAS ARMADAS “ESPE” DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA
ASIGNATURA: CONTROL INTELIGENTE
Actividad No 13 y No 14. Identificación de funciones de varias variables. Identificación de
sistemas dinámicos.
Fecha: 04-02-2015
Nombre alumno: Fernando Villalba
Introducción. IDENTIFICACIÓN DE UN SISTEMA DINÁMICO MEDIANTE RED
NEURONAL
La identificación de un sistema dinámico mediante una red neuronal consiste en
determinar los parámetros de la red de tal manera que los dos sistemas tengan respuestas
similares cuando son excitados con las mismas señales de control.
Un sistema dinámico puede caracterizarse en el espacio de estado. En la formulación de
espacio de estado un sistema está caracterizado por la ecuación de estado. Esta formulación
es aplicable a sistemas de una entrada, una salida SISO o para sistemas multivariables
MIMO. La ecuación de estado es:
�̇� = 𝒇(𝒙, 𝒖)
𝒚 = 𝒈(𝒙, 𝒖)
Donde x son los estados y u es la señal de control. La descripción del sistema dinámico es
completa cuando se define una condición inicial para los estados y una señal de control.
En esta actividad, la red neuronal que se utilizará para la identificación es una red estática
(que no varía en el tiempo). La red neuronal por tanto solo puede identificar a un sistema
estático. Si se restringe al sistema dinámico a un pequeño intervalo de tiempo, se lo puede
considerar como un sistema estático. Es posible obtener una red neuronal que tiene las
mismas variaciones que el sistema dinámico luego de que ha transcurrido un pequeño
intervalo de tiempo ∆𝒕. Para que la red neuronal refleje el comportamiento del sistema
dinámico es necesario que su comportamiento sea similar para un entramado lo
suficientemente fino de valores de los estados y señal de control del sistema. Esto se logra
mediante la generación de patrones de entrenamiento que capten la respuesta a los valores
de dicho entramado de tal manera que la red neuronal aprenda el comportamiento para
las distintas condiciones del sistema dinámico.
1. Analice el código de ayuda del comando train. Ejecute el código, grafique los resultados e
indique la funcionalidad de los comandos: newff, sim, net.trainParam.epochs = 50;
net.trainParam.goal = 0.01. Identifique el significado de los parámetros [0 8],[10
1],{'tansig' 'purelin'},'trainlm' en la función newff
p = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
plot(p,t,'o')
% Here NEWFF is used to create a two layer feed forward network.
% The network will have an input (ranging from 0 to 8), followed
% by a layer of 10 TANSIG neurons, followed by a layer with 1
% PURELIN neuron. TRAINLM backpropagation is used. The network
% is also simulated.
% net = newff([0 8],[10 1],{'tansig' 'purelin'},'trainlm');
y1 = sim(net,p)
Página 2
Analisis del código La función newff llama al método de aprendizaje de la red que en este caso está dada por la función NET.trainFcn, empleando los valores indicados por NET.trainParam entre ellos número de épocas, error final. La función crea una red tipo Backpropagation, requiere que le sean especificados los siguientes parámetros newff: (PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)
PR : Rx2 Matriz de valores máximos y mínimos de cada uno de las R neuronas de entrada. Si : Número de neuronas para cada una de las capas. TFi : Función de transferencia a utilizar en cada una de las capas, por defecto utiliza tansig BTF : Algoritmo de entrenamiento a utilizar, por defecto utiliza trainlm BLF : Función de actualización de los pesos, por defecto utiliza learngdm. PF : Función para evaluar el desempeño de la red, por defecto utiliza mse.
Funcionalidad de los comandos: newff: Este comando se utiliza para crear una red de alimentación hacia adelante de dos capas. sim: Este comando sirve para simular la red neuronal. net.trainParam.epochs = 50: En este comando se especifica el número de épocas de entrenamiento de la red neuronal. net.trainParam.goal = 0.01: Este comando específica el valor al que se desea llegar en el error medio cuadrático. [0 8]: Representan el rango de los valores de entrada. [10 1]: En este parámetro se especifica el número de neuronas de entrenamiento en una capa y el número de neuronas que le sigue en la siguiente capa. Se dice aquí que es una capa de diez neuronas seguido por una capa de una neurona. tansig: Es la función de transferencia neuronal. purelin: Es la función de activación de la tangente hiperbólica. Del tipo lineal mx+b. trainlm: Es el método de entrenamiento y se especifica que es un método de aproximaciones de segunda derivada ya que al tener lm se dice que se usa la segunda derivada, es un método ofisticado. La presente gráfica nos muestra los resultado del entrenamiento épocas, tiempo total de entrenamiento, error final, e incluso podemos cambiar el número de épocas deseadas
% Here the network is trained for up to 50 epochs to a error goal of
% 0.01, and then resimulated.
%
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p)
plot(p,t,'o',p,y1,'x',p,y2,'*')
Página 3
Y el resultado final obtenido
Donde los círculos representan los valores deseados, las x representan los valores de la red sin entrenar y los asteriscos en rojo representan los puntos ya entrenados
Página 4
Además podemos visualizar los resultados obtenidos en el transcurso del entrenamiento por ejemplo cual fue el mejor resultado obtenido y en que época se la obtuvo
2. Identifique mediante una red neuronal la función 𝑧 = 𝑥𝑒−𝑥2−𝑦2. Presente el gráfico de la
función original y de la función aproximada mediante red neuronal para −2 ≤ 𝑥 ≤ 2; −2 ≤𝑦 ≤ 2. a) Utilice 6 neuronas en la capa escondida, el método de entrenamiento traingd. b)
Utilice 12 neuronas en la capa escondida, el método de entrenamiento traingd.
Gráfica de función real
Código
Página 5
[X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(X,Y,Z) figure(1) mesh ( X,Y,Z)
%vector transpuesta de cada elemento de la matriz filas por columnas xT=X(:)'; yT=Y(:)'; zT=Z(:)'; p=[xT; yT]; t=[zT];
net=newff(minmax(p),[6,1],{'tansig','purelin'},'traingd'); %6 neuronas de la capa de entrada %1 neuronas de la capa de salida % set training parameters net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-7; [net,tr]=train(net,p,t); a = sim(net,p) cont=1; for i=1:1:21 for j=1:1:21 matriz(i,j)= a(cont); cont=cont+1; end end figure(2) mesh(X,Y,matriz);
Gráfica con 6 neuronas
Gráfica con 12 neuronas
Página 6
Gráfica 12 neuronas, 10000 épocas
Página 7
Análisis de Gráficas
Como podemos apreciar el incremento de neuronas en la capa de entrada ayuda un poco al
entrenamiento sin embargo el error aun es alto, como podemos visualizar comparando las
gráficas de entrenamiento con la gráfica original
El incremento de épocas tampoco ayuda al entrenamiento
Mientras más épocas se desarrollen mayor será el tiempo de duración de entrenamiento
3. Repita el ejercicio anterior, identifique mediante una red neuronal la función 𝑧 =
𝑥𝑒−𝑥2−𝑦2. Presente el gráfico de la función original y de la función aproximada mediante
red neuronal para −2 ≤ 𝑥 ≤ 2; −2 ≤ 𝑦 ≤ 2. a) Utilice 6 neuronas en la capa escondida, el
método de entrenamiento trainlm. b) Utilice 12 neuronas en la capa escondida, el método
de entrenamiento trainlm.
Gráfica de función real
Código
[X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(X,Y,Z) figure(1) mesh ( X,Y,Z) %vector transpuesta de cada elemento de la matriz filas por columnas xT=X(:)'; yT=Y(:)'; zT=Z(:)'; p=[xT; yT]; t=[zT]; net=newff(minmax(p),[6,1],{'tansig','purelin'},'trainlm'); %6 neuronas de la capa de entrada %1 neuronas de la capa de salida % set training parameters net.trainParam.show = 50;
Página 8
net.trainParam.lr = 0.05; net.trainParam.epochs = 10000; net.trainParam.goal = 1e-7; [net,tr]=train(net,p,t); a = sim(net,p) cont=1; for i=1:1:21 for j=1:1:21 matriz(i,j)= a(cont); cont=cont+1; end end figure(2) mesh(X,Y,matriz);
Gráfica con 6 neuronas
Página 9
Gráfica con 12 neuronas
Análisis de gráficas
Se puede apreciar mediante las gráficas que se ha llegado a un entrenamiento casi preciso en
comparación con el método anterior, con la única diferencia que las gráfica entrenada se
encuentra rotada 90 grados, para lo cual cambiamos los ejes X,Y para visualizar la exactitud
de ambas gráficas
El incremento del número de épocas no cambia en nada al entrenamiento
Código con los ejes rotados para visualizar la exactitud del entrenamiento
Gráfica entrenada
Página 10
Gráfica real
[X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(X,Y,Z) figure(1) mesh ( X,Y,Z) %vector transpuesta de cada elemento de la matriz filas por columnas xT=X(:)'; yT=Y(:)'; zT=Z(:)'; p=[xT; yT]; t=[zT]; net=newff(minmax(p),[12,1],{'tansig','purelin'},'trainlm'); %6 neuronas de la capa de entrada %1 neuronas de la capa de salida % set training parameters net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-7; [net,tr]=train(net,p,t); a = sim(net,p) cont=1; for i=1:1:21 for j=1:1:21 matriz(i,j)= a(cont); cont=cont+1; end end figure(2) mesh(Y,X,matriz);
Página 11
4. Escriba dos párrafos que describan las características principales del entrenamiento al que se
refiere el comando trainlm.(pag. 180 de Neural Networks for applied Sciences and Engineering, Sandhya
Samarasinghe)
En síntesis el método “trainlm” es un algoritmo de entrenamiento que actualiza los pesos y
ganancias de acuerdo a la optimización de Levenberg Marquardt, este método mejora la solución a
los problemas que son difíciles para resolver por ajuste de la tasa de aprendizaje en repetidas
ocasiones, como implica en el método de Gauss-Newton que incorpora las dos derivadas (primera y
segunda) del error, y en ves de ajustar el error, permite calcular el error. Este método consiste en
inicializar dicho error con la unidad e insertar un valor de eλ a la segunda derivada donde es el valor
neperiano
Las propiedades de convergencia del método de Levenberg Marquardt son similares a las del
método de Newton-Gauss. La convergencia local es lenta cuando el residuo es grande y cuando el
problema es fuertemente no lineal. Sin embargo este método es superior cuando el paso es grande,
la dirección de descenso es mejor que en el método de Newton- Gauss. Por ello es preferible el uso
del método de Levenberg- Marquardt para la mayoría de los problemas.
Este algoritmo converge en menos iteraciones que cualquier método discutido anteriormente, por
supuesto requiere más cálculos computacionales por iteración, debido a que implica el cálculo de
matrices inversas. A pesar de su gran esfuerzo computacional sigue siendo el algoritmo de
entrenamiento más rápido para redes neuronales cuando se trabaja con un moderado número de
parámetros en la red, si el número de parámetros es muy grande utilizarlo resulta poco práctico.
5. Realice el diagrama en simulink del sistema dinámico antena descrito por las ecuaciones:
𝒙𝟏 = 𝜽 á𝒏𝒈𝒖𝒍𝒐 [°]; 𝝎 = 𝒙𝟐 =𝒅𝜽
𝒅𝒕 = velocidad angular [
°
𝑺]
𝒖 = 𝒇𝒖𝒆𝒓𝒛𝒂 [𝑵] �̇�𝟏 = 𝒙𝟐
�̇�𝟐 = 𝟗. 𝟖𝟏 ∗ 𝒔𝒆𝒏(𝒙𝟏) − 𝟐 ∗ 𝒙𝟐 + 𝒖
Página 12
6. Presente las respuestas dinámicas del sistema durante 20 segundos para las siguientes
condiciones iniciales:
a) 𝜃 = 80°; 𝑤 = 30°
𝑠; 𝑢 = 5 𝑁
b) 𝜃 = −5°; 𝑤 = −60°
𝑠 ; 𝑢 = 15 N
Página 13
7. Escriba el código para generar un conjunto de patrones de entrenamiento que genere un
entramado (todas las combinaciones posibles) de valores de ángulo, velocidad y fuerza con
los siguientes rangos y resoluciones:
a) Ángulo: −20 ≤ 𝜃 ≤ 200 en pasos de 22°.
b) Velocidad: −90 ≤ 𝜔 ≤ 90 en pasos de 36 °
𝑠 .
c) Fuerza: −30 ≤ 𝑢 ≤ 30 en pasos de 6 N
Código para generar patrones de entrenamiento con todas las posibles convianciones
mediante comando combvec
%Construccion de parámetros targ=[]; %pasos de patrones %angulo en pasos de 22 grados anguloP=-20:22:200; anguloP=anguloP.*(pi/180);
Página 14
%velocidad en pasos de 36º por segundo velocidadP=-90:36:90; velocidadP=velocidadP.*(pi/180); %fuerza en pasos de 6 Newtons fuerzaP=-30:6:30; %Combvec: Realiza todas las combinaciones %posibles de los vectores ingresados p=combvec(anguloP,velocidadP,fuerzaP); for i=1:1:length(p) fuerza=p(3,i); velocidad0=p(2,i); angulo0=p(1,i); sim('Antena', 0.05) %variaciones de velocidad, angulo, y formacion de vectores para meta dvelocidad=velocidad-velocidad0; dangulo=angulo-angulo0; dt=[dangulo; dvelocidad]; targ=[targ dt]; end
Código de entrenamiento de la red según datos presentes obtenidos del código anterior
net = newff(minmax(p),[6 2],{'tansig' 'purelin'},'trainlm'); net.trainParam.epochs = 50; net.trainParam.goal = 1e-6; net = train(net,p,targ); y2 = sim(net,p) figure(1) % en la primera fila se encuentran los valores de posicion plot(targ(1,:),'r') hold on} %valores entrenados de posicion plot(y2(1,:),'b') hold off figure(2) %en la segunda fila se encuentran los valores de velocidad plot(targ(2,:),'r') hold on %valores entrenados de velocidad plot(y2(2,:),'b') hold off
Gráficas de resultados
Gráfica de posición
Página 15
A simple vista no se puede identificar el entrenamiento, el error es ínfimo para poder ver los
cambios se realiza un zoom
Se puede observar una mínima diferencia entre los valores de posición seleccionados con color rojo
y los valores entrenados con color azul
Gráficas de velocidad
A simple vista no se puede identificar el entrenamiento, el error es ínfimo para poder ver los
cambios se realiza un zoom
Página 16
Se puede observar una mínima diferencia entre los valores de velocidad seleccionados con color
rojo y los valores entrenados con color azul
El diagrama empleado en los códigos de entrenamiento
8. Obtenga las variaciones de velocidad y ángulo que se obtienen luego de 50ms para cada una
de los valores que se obtuvieron en el numeral anterior. Almacene estos resultados en un
vector de dos filas y número de columnas igual al número de combinaciones.
Verifique los resultados obtenidos con los del numeral 6 y comente.
Código de combinación de valores %Construccion de parámetros targ=[]; %pasos de patrones %angulo en pasos de 22 grados anguloP=-20:22:200; anguloP=anguloP.*(pi/180); %velocidad en pasos de 36º por segundo velocidadP=-90:36:90; velocidadP=velocidadP.*(pi/180); %fuerza en pasos de 6 Newtons fuerzaP=-30:6:30; %Combvec: Realiza todas las combinaciones %posibles de los vectores ingresados
Página 17
p=combvec(anguloP,velocidadP,fuerzaP); for i=1:1:length(p) fuerza=p(3,i); velocidad0=p(2,i); angulo0=p(1,i); sim('Antena', 0.05) %variaciones de velocidad, angulo, y formacion de vectores para meta dvelocidad=velocidad-velocidad0; dangulo=angulo-angulo0; dt=[dangulo; dvelocidad]; targ=[targ dt]; end
Código de entrenamiento de la red
%entrenamiento con 8 capas de entrada y dos de salida net = newff(minmax(p),[8 2],{'tansig' 'purelin'},'trainlm'); net.trainParam.epochs = 50; net.trainParam.goal = 1e-6; net = train(net,p,targ); y2 = sim(net,p) figure(1) % en la primera fila se encuentran los valores de posicion plot(targ(1,:),'r') hold on} %valores entrenados de posicion plot(y2(1,:),'b') hold off figure(2) %en la segunda fila se encuentran los valores de velocidad plot(targ(2,:),'r') hold on %valores entrenados de velocidad plot(y2(2,:),'b') hold off
Resultados con 8 capas de entrada y dos de salida
Página 18
Resultados con 6 capas de entrada y dos de salida
Gráfica con valores establecidos de fuerza, velocidad, posición
Página 19
Gráfica con valores combinados de fuerza, velocidad, posición 6capas de entrada
Gráfica con valores combinados de fuerza, velocidad, posición 8capas de entrada
Análisis de Resultados
Cuando la misma red neuronal es simulada en intervalos de tiempo distintos, la red produce
respuestas similares pero en intervalos superiores la respuesta es más lenta mientras que
intervalos más cortos la red es más rápida.
Los valores presentes en velocidad, posición y ángulo hacen que el sistema oscile, mientras
que si poseemos una combinación de los valores para el sistema en un rango determinado el
sistema es más estable
El incremento en la capa de entrada hacen que el sistema aprenda más rápido, siempre y
cuando usemos el método trainlm en este caso podemos apreciar que la variación en la
velocidad es mayor a cuando se tenia una red de 6 neuronas en la capa de entrada
Página 20
9. Escriba el código para entrenar una red neuronal con 8 neuronas en la capa oculta para
identificar el sistema dinámico antena en un lapso de tiempo de 50 ms.
%entrenamiento con 8 capas de entrada y dos de salida net = newff(minmax(p),[8 2],{'tansig' 'purelin'},'trainlm'); net.trainParam.epochs = 50; net.trainParam.goal = 1e-6; net = train(net,p,targ); y2 = sim(net,p) gensim(net,0.05)
10. Construya un diagrama en simulink que permita la verificación del sistema identificado
con red neuronal mediante una comparación con el sistema original. Transcriba el
diagrama de simulink y los resultados obtenidos para varias condiciones iniciales y de
señal de fuerza aplicada (mínimo tres casos de estudio).
Página 21
Velocidad=10, posición=22, fuerza= 3
Velocidad=50, posición=100, fuerza= 10
Página 22
Velocidad=50, posición=100, fuerza= 3
Página 23
Velocidad=20, posición=50, fuerza= 5
Análisis de Resultados:
Si excedemos el valor de la fuerza el sistema presenta muchas perturbaciones,
consecuentemente no aprende
El sistema es más estable para valores pequeños tanto de fuerza como de velocidad
El aprendizaje mediante las combinaciones de valores de fuerza, posición y velocidad
hacen que el sistema sea más estable que colocando independientemente los valores
Mientras mayor sea el número de neuronas en la capa de entrada el sistema posee menos
error
Yo Fernando Villalba afirmo que esta actividad es de mi autoría y establezco que para la
elaboración de la misma he seguido los lineamientos del Código de Ética de la Universidad de
las Fuerzas Armadas ESPE