Control de un puente grúa con una red neuronal S-D

Modelo de Schmajuk DiCarlo. Inteligencia Artificial. Backpropagation

  • Enviado por: Diego M Manhard
  • Idioma: castellano
  • País: España España
  • 24 páginas
publicidad

Control de un puente grúa con una red neuronal S-D

1. Presentación del problema

El problema a estudiar esta basado en el comportamiento no satisfactorio de un puente grúa el cual se puede presentar de 2 maneras

Supongamos que una de las especificaciones que debe cumplir el puente grúa sea que bajo ninguna circunstancia pueda la carga del mismo exceder limites físicos ya sea porque en los limites hay una pared y al golpear con la misma la carga se dañe o bien cerca de estos limites puede haber maquinaria frágil o personas que pueden resultar golpeados cuando el carro de la grúa llega a ese limite pero la carga con su inercia genere un movimiento oscilatorio amortiguado que provoque que la misma exceda los limites especificados.

El segundo problema se presenta cuando se quiere transportar una carga de un lugar hacia otro con cierta precisión especificada, aquí cuando el operador considere que llego al destino la grúa frenará pero la carga quedara en un movimiento oscilatorio amortiguado que no le permitirá al mismo comprobar que se encuentra en el destino correcto hasta que este movimiento oscilatorio se extinga

Para poder atacar el problema se realizo un modelo matemático del puente grúa de acuerdo al siguiente esquema:

Para el cual se llegaron a las siguientes ecuaciones que representan al sistema

Control de un puente grúa con una red neuronal S-D

Estas ecuaciones pueden llevarse a una sistema en variables de estado tomando como variables de estado a la posición de carro (x1) y su velocidad (x2) y al ángulo formado entre la vertical y el cable de acero utilizado por la grúa puente (x3) y su velocidad (x4)

Luego de un trabajo matemático de las ecuaciones anteriores se llega a un sistema de la forma:

Control de un puente grúa con una red neuronal S-D

donde x es una vector de 4x1 que representa a las variables de estado , A una matriz de 4x4 que contiene la dinámica del sistema, B es la matriz que indica la interacción entre la entrada que en este caso es la fuerza impuesta por un motor montado en el carro del puente grúa y los estados

Para poder interpretar mejor el problema presentado y el modelo desarrollado se van a hacer simulaciones de este modelo ante diferentes condiciones para dejar de manifiesto ciertas complicaciones que se dan en este problema particular.

Estas complicaciones son consecuencia de que la carga que se lleva en la grúa no es fija sino una magnitud que varia con el tiempo y la longitud entre el carro y la carga tampoco es una magnitud constante sino que también varia con el tiempo.

El primer modelo simulado representa lo que llamamos el modelo de planta nominal el cual considera que los valores utilizados para la longitud l y la masa m de la carga son promedios durante el periodo de vida del puente grúa.

Para este caso los datos utilizados en la simulación son los siguientes:

M=200kg , m=60kg , l=7.5m , b=1600 kg/s

Para este caso y para un pulso de excitación en la entrada del sistema ( que representa a un pulso de fuerza en el carro de la grúa) se presentan los siguientes resultados:

donde se puede ver en rojo el ángulo

Se puede ver que a los 10 segundos que es donde se para grúa el movimiento oscilatorio tiene su máxima amplitud , para este caso el desplazamiento máximo angular es del orden de .0033 radianes que a la distancia de la carga representan un desplazamiento de 2.5cm. del lugar de parada de la grúa.

También puede notarse que el sistema es muy lento para que se extinga la oscilación

Vamos a simular varios casos importantes para reconocer como cambia la respuesta del sistema ante cambios en la longitud l y la carga m

Otro caso es cuando tengo en la carga solo el peso de la propia cuerda y el guinche y l permanece en la longitud nominal

Se puede ver en este caso que el desplazamiento longitudinal es mayor en este caso que en el caso nominal y también se puede apreciar que el movimiento oscilatorio casi no se ve amortiguado

Ahora se va a simular el modelo para l=1m y m=60kg

Se puede ver que en este caso es mucho mas notorio la amortiguación del comportamiento oscilatorio.

Por ultimo vamos a simular el caso de l=10m y m=100kg que seria la máxima carga admisible y la máxima longitud desde la carga al carro

Para este caso obtenemos

Para este caso se ve un desplazamiento muy grande de la posición de parada llegando a 5 cm en el momento de la parada.

Con los resultados de estas simulaciones se puede concluir que la solución del problema tiene que adaptarse a las diversas condiciones que se pueden presentar en el sistema real. Hay parámetros en el modelo del sistema que varían con el tiempo y en la resolución del problema hay que tenerlos en cuenta.

Solución clásica de control:

Para poder solucionar este problema desde el control clásico lo que tenemos que hacer es de alguna manera llevar los polos del sistema de lazo abierto a lugares donde nosotros consideramos que el sistema cumple con las especificaciones en el dominio del tiempo que es donde generalmente se dan. Es decir uno tiene especificaciones por ejemplo del ángulo máximo que se tolera una vez que la grúa frena, o un tiempo máximo en que se tolera que la carga este oscilando. Estos parámetros están directamente relacionados con la ubicación de los polos del sistema.

Para mover los polos se realimentan las variables de estado del sistema. Hay que tener en cuenta que de esta manera no se tienen en cuenta las variaciones del modelo cuando cambia la longitud desde el carro hasta la carga y la masa de la carga.

Lo que vamos a hacer es desarrollar un controlador clásico con el modelo nominal y analizar que ocurre con otras condiciones de carga y de longitud desde el carro hasta la carga.

Entonces si consideramos el modelo nominal podemos calcular la ubicación de los polos del sistema de lazo abierto y nos da lo siguiente:

Se puede observar que los polos que están muy cerca del eje imaginario, son los que generan el comportamiento oscilatorio en el dominio temporal y al estar muy cercanos al eje hacen que ese movimiento oscilatorio se4 extinga muy lentamente. Es decir que vamos a buscar alejar estos polos del eje imaginario, para que el comportamiento oscilatorio se extinga relativamente mas rápido. También no hay que perder de vista que el lugar donde ubico los polos lo fijo yo pero el costo que tiene es la energía que tengo que poner en juego para poder actuar sobre el sistema y esto esta directamente relacionado a las ganancias de reglamentación que necesito para mover los polos; por lo tanto un punto de comparación muy importante para una optimización tecnico-economica de las soluciones que se van a plantear en este trabajo son las ganancias de realimentación puestas en juego en cada caso.

Vamos a poner los polos en un lugar donde se cumplen las especificaciones técnicas. El lugar de los polos de lazo cerrado que estamos buscando es:

Se puede observar como los 2 polos complejos conjugados están ahora en -3+.5i y -3-.5i y mediante la siguiente configuración:

Con los siguientes resultados:

Para hacer una comparación del comportamiento del sistema a lazo cerrado y el sistema a lazo abierto nos vamos a referir al gráfico del sistema a lazo abierto con el modelo nominal de la sección 1.

Primero podemos ver que el ángulo en color verde se puede decir que ya no tiene ese comportamiento oscilatorio que se presentaba antes, también se puede ver que el ángulo máximo que presenta el sistema realimentado es de .5e-3 contra 3.3e-3 lo cual representa casi 7 veces menos que antes.

Una característica que empeoro es que la grúa antes desplazaba la carga con el mismo pulso de fuerza casi 30cm mientras que ahora mueve la carga solamente cm, lo cual puede interpretarse también como si quiero llevar la carga hasta el mismo lugar que antes voy a tardar mas tiempo.

Ahora vamos a considerar que pasa cundo se modifica el modelo y tenemos presente este mismo controlador para el modelo nominal.

Primero vamos a simular el caso de l=7.5m y m=10kg que es el segundo caso que simulamos a lazo abierto.

Los polos a lazo cerrado para este caso son:

Como se ve en la figura los polos no cambiaron considerablemente en este caso así que es de esperar que la respuesta temporal del sistema tampoco lo haga.

Ahora simulamos para l=1m y m=60kg

Se puede notar que se cumplen las hipótesis que se hacían que no cambia demasiado la respuesta temporal. Ahora si modificamos el modelo poniendo l=1m y m=10kg los polos de lazo cerrado quedan:

Aquí ocurre un grave problema y es que el sistema de lazo cerrado se torna inestable. Y se puede ver que uno de los polos es muy grande, lo que da una idea de la alta sensibilidad de los polos del lazo cerrado a un cambio en el modelo nominal cuando la longitud tiende a 0.

De todas manera vamos a simular el ultimo caso que es cuando l=10m y m=100kg

Se puede ver que el sistema es estable pero nuevamente los polos complejos conjugados están muy cercanos al eje imaginario lo cual traerá problemas. Veamos la simulación de la respuesta temporal

Se puede ver que dentro de todo la respuesta temporal no cambia demasiado con respecto al modelo nominal. Hay que tener en cuenta que por ejemplo si la especificación de máximo desplazamiento con respecto a la vertical en el momento de frenado de la grúa, esto puede pasarse directamente a una especificación de ángulo máximo pero que va a cambiar cuando varíe la longitud entre el carro y la carga. O mejor dicho a mayor longitud se tendrá un ángulo máximo menor que a la longitud nominal y viceversa para lograr que el apartamiento de la carga con respecto a la vertical este acotado a un valor.

En este ultimo caso por ejemplo se puede observar que el ángulo máximo de desplazamiento es de .4e-3 lo que representa un desplazamiento lineal de la carga de 4mm con respecto a la vertical

Después de toda esta discusión se puede concluir que es necesario un controlador que se ajuste en el tiempo y que de alguna manera identifique al sistema y actúe de acuerdo a esta identificación.

Solución con redes Neuronales

La solución propuesta con redes neuronales consiste en que la grúa cuando comienza a moverse (en las simulaciones específicamente 5 segundos) muestrea el ángulo formado por la vertical y la soga de la cuelga la carga y la introduce en la entrada de una red Backpropagation, la cual identifica las variables de la planta que varían con el tiempo (que son m y l) y de acuerdo con estas variables que calcula modifica el controlador del motor del carro de la grúa. De esta manera se logra que el sistema de lazo cerrado no solo sea estable para cualquier circunstancia, sino que ubica los polos siempre en el mismo lugar lo cual a fines prácticos quiere decir que me asegura cumplir una especificación de ángulo máximo permitido en el frenado de la grúa ante cualquier condición de carga de la misma como también a cualquier distancia entre el carro y la carga.

También se podrá notar en las simulaciones otra ventaja de esta implementación frente a un controlador clásico y es que como habíamos remarcado en la sección anterior, el desplazamiento del carro de la grúa con el controlador clásico era unas 10 veces menos que a lazo abierto ( es decir el sistema se había vuelto muy lento ); con la implementación de la red neuronal el sistema con la misma fuerza aplicada llega aproximadamente al mismo lugar que llegaba a lazo abierto.

Cabe aclarar que para que el sistema funcione; la red necesita una fase de entrenamiento, pero que se puede hacer una única vez antes de comenzar a utilizar el sistema.

Esta fase de entrenamiento, a fines prácticos, se trata de ponerle a la grúa una carga conocida y una longitud conocida desde el carro hasta la carga y moverla en un periodo mayor de 5 segundos. En ese tiempo la red modifica sus pesos sinápticos para minimizar el error cuadrático medio entre los datos conocidos y los datos que resultan de la red.

Uno de los problemas que se presentan con la red Backpropagation es que es una red que converge a error 0 muy lentamente y no es tecnológicamente implementable. Pero mas adelante se va a implementar otro modelo de red Neuronal la cual es implementable y tiene una fase de entrenamiento mas corta que la Backpropagation.

Cabe aclarar que otra gran ventaja de este modelo frente al modelo clásico de control es que el controlador se ajusta y calcula en base a un modelo que se construye con datos que son difíciles de medir, como por ejemplo el rozamiento del carro con el apoyo de la grúa, es decir que el modelo que se utiliza para el calculo del controlador clásico posee errores propios de la dificultad de conocer con una determinada exactitud los parámetros del mismo. Con la red Neuronal nos independizamos de este problema ya que en la fase de entrenamiento estamos trabajando con el sistema real.

El esquema utilizado para la simulación de este caso es el siguiente

El programa utilizado en la simulación esta explicado en el apéndice A, donde también se especifica como fue la fase de entrenamiento de la red.

Para la fase de entrenamiento en las siguientes simulaciones se pusieron en la entrada de la red 4000 casos de combinaciones l y m conocidas de las cuales 100 son distintas y luego son repeticiones de alguna de estas 100 conocidas.

Para tener una idea del tiempo que puede llevar este entrenamiento realmente, si consideramos que cada actualización tarda 5 segundos para el muestreo mas unos 10 segundos de promedio para el cambio de m y l y otros 10 segundos para que deje de oscilar por completo la carga por el ensayo anterior, tenemos un tiempo total de training de 27,8 horas, lo cual no es descabellado pero es un tiempo muy elevado.

Este análisis que se realizo considera que no se tiene absolutamente nada conocido del sistema antes de comenzar el entrenamiento, lo cual es falso y sobredimensiona el tiempo de entrenamiento. Es decir una de las mejoras inmediatas que se podrían hacer es que conociendo el modelo del sistema de la misma manera que se hace en control clásico, pueda hacer un entrenamiento de la red mediante una computadora y hacer un entrenamiento de la red con el modelo real poniendo como pesos iniciales de la red los calculados con la computadora y bajando drásticamente el tiempo de entrenamiento.

Para el caso del modelo nominal el sistema responde de la siguiente manera:

Se puede ver que al frenar el carro el ángulo es insignificante y la distancia recorrida por el carro es 4.5 veces mas que con el controlador clásico.

Para el caso de m=10kg y l=7.5m

Aquí se nota que el ángulo en le momento que frena la grúa (10 segundos) es prácticamente igual que en el modelo nominal.

Ahora simulamos el caso de l=1m y m=60kg

Este caso es importante para comparar ya que con control clásico quedaba inestable a lazo cerrado y aquí se puede ver no solo que es estable sino que llega al mismo lugar que a lazo abierto. Podemos concluir del gráfico de posición del carro que es casi el de lazo abierto que las ganancias del controlador bajan fuertemente a medida que l tiende a 0 y esto es la causa de la alta sensibilidad de los polos de lazo cerrado del sistema ante los cambios de l.

Para el caso de l=10m y m=100kg

Como se puede ver los resultados por este método son muy satisfactorios y sumamente superiores que un control clásico.

Sus puntos débiles ya los mencionamos y son la no implementabilidad y la lentitud en el entrenamiento. Estos puntos van a ser tratados en la siguiente sección donde se va a utilizar un modelo de red neuronal que solución estos problemas pero seguimos utilizando estos principios ya que los resultados obtenidos son óptimos.

Solución con una red S-D (Schmajuk-DiCarlo)

La solución implementada en este caso a los fines prácticos es de fundamental importancia porque va a superar a la implementación anterior en los siguientes puntos:

  • Es físicamente realizable y biológicamente plausible

  • Tiene un período de entrenamiento relativamente mas corto que un red Backpropagation con el mismo numero de neuronas.

  • Esta red trabaja en tiempo real

Por que se busca esta implementación y no nos quedamos con la anterior, que tenia un resultado desde el punto de vista funcional óptimo?

Esto se debe a que la implementación del caso anterior llevaría a la aplicación de algún microprosesador que pueda realizar los cálculos necesarios para retropropagar el error en una red del tipo Backpropagation, y si se quiere que los cálculos sean relativamente rápidos hay que utilizar plataformas rápidas que sin lugar a duda son caras.

Es decir que funcionalmente el caso anterior es óptimo, pero no lo es a nivel de implementación, por el costo no solo económico sino también porque la red Backpropagation tiene otra desventaja con respecto por ejemplo a la S-D y es que la fase de entrenamiento es mas lenta.

La descripción de la red S-D esta resumido en el apéndice B.

Una de las desventajas que tenemos es que la red S-D puede tener una única salida, pero en el caso que nos compete necesitamos 2 salidas. Para solucionar esto se utilizan 2 redes S-D que trabajan con la misma entrada. Esto desde el punto de vista de implementación seria duplicar el hardware con respecto al caso anterior, lo cual no es una condición critica desde ningún punto de vista.

Cabe aclarar que el modelo utilizado de la red S-D (Schmajuk-DiCarlo) fue modificado, obteniéndose mejores resultados con respecto al tiempo de entrenamiento de la red.

La modificación que se hizo fue aplicarle un termino de momentum a las variaciones de los pesos sinápticos de la red.

El modelo utilizado en este caso es el siguiente:

Para la fase de entrenamiento en las siguientes simulaciones se pusieron en la entrada de la red 200 casos de combinaciones l y m conocidas de las cuales 20 son distintas y luego son repeticiones de alguna de estas 20 conocidas.

Para tener una idea del tiempo que puede llevar este entrenamiento realmente, si consideramos que cada actualización tarda 5 segundos para el muestreo mas unos 10 segundos de promedio para el cambio de m y l y otros 10 segundos para que deje de oscilar por completo la carga por el ensayo anterior, tenemos un tiempo total de training de 1.38 horas, lo cual es muchísimo menor que con el caso de la red Backpropagation.

Este análisis que se realizo, como en el primer caso, considera que no se tiene absolutamente nada conocido del sistema antes de comenzar el entrenamiento, lo cual es falso y sobredimensiona el tiempo de entrenamiento. Es decir, igual que en el caso anterior, una de las mejoras inmediatas que se podrían hacer es que conociendo el modelo del sistema de la misma manera que se hace en control clásico, pueda hacer un entrenamiento de la red S-D mediante una computadora y hacer un entrenamiento de la red con el modelo real poniendo como pesos iniciales de la red los calculados con la computadora y bajando abruptamente el tiempo de entrenamiento.

Los resultados obtenidos para este caso son:

Para el modelo nominal:

Se puede ver que los resultados son casi iguales que con el caso anterior y esto ocurre con todos los casos siguientes. Esto se debe a que luego de entrenada la red neuronal actúa de la misma manera que la Backpropagation, cosa que era esperada ya que funcionalidad de la Backpropagation no estaba en cuestión sino sus otras desventajas.

Por ultimo vamos a simular el caso que se tornaba inestable con el controlador clásico, para ver que tampoco difiere del caso anterior:

Optimización técnico-económica del problema.

En las secciones anteriores de este trabajo, sobre todo en la ultima que se utiliza el modelo S-D se utilizó el mismo numero de neuronas en la capa oculta que en el caso de la sección que soluciona el problema mediante una red Backpropagation. Esto se hizo con fines de poder realizar comparaciones de performance con respecto al tiempo de entrenamiento de las distintas redes y tener parámetros iguales en ambos casos (si no se haría de esta forma la comparación no tendría validez ).

Pero ya que conocemos las ventajas del modelo S-D por medio de el análisis de este modelo y el análisis del modelo físico planteado para este problema particular se tratara de llegar a una solución del problema que sea óptima desde el punto de vista técnico tanto como del punto de vista económico.

Para poder realizar esto nos vamos a basar en 2 hechos que son los siguientes:

  • Mediante el análisis del modelo de lazo abierto de el puente grúa, se va a llegar a la conclusión (mas adelante se ampliara el tema) de que la sensibilidad de los polos de lazo cerrado del sistema es muy baja con respecto a la masa de la carga de la grúa (esto tiene que ver con que la masa de el carro que lleva a la grúa generalmente es mucho mayor que la masa que carga a la misma). Ademas si se ve el modelo de variables de estado del sistema se puede ver que la matriz B no depende de la masa que lleva la grúa, con lo cual se puede concluir que la matriz de controlabilidad del sistema va a tener la misma sensibilidad que la matriz A con respecto a la masa m; y esto trae como consecuencia que el sistema a lazo cerrado va a tener la misma sensibilidad con respecto a m, que el sistema de lazo abierto. (si se observa la matriz B del sistema se puede ver que esto no ocurre en el caso de l, en este caso el sistema a lazo cerrado va a tener una sensibilidad diferente que el de lazo abierto). Esto va a permitir la utilización de una sola de las redes neuronales que identifique l y se tomara m como el valor medio, lo cual como se vera en las simulaciones no traerá modificaciones en cuanto a los resultados y permitirá reducir el tiempo de entrenamiento 2 veces con respecto al tiempo que se utilizaba en el caso de utilizar otra red que identifique la masa que llevaba la grúa.

  • Por otro lado en las secciones anteriores se utilizaron en la capa oculta una cantidad de neuronas que no traen problemas de mínimos locales , aquí se tratara mediante simulaciones encontrar un numero de neuronas óptimo, que significa tratar de utilizar el mínimo numero de neuronas, pero sin que el problema de los mínimos locales afecte a los resultados que se quieren obtener.

Problema de la sensibilidad de el modelo.

Para poder determinar este problema y demostrar que para este caso particular la masa que lleva la grúa es relevante frente a la sensibilidad de la ubicación de los polos con respecto a la longitud desde la carga de la grúa hasta el carro, se realizo una simulación calculando, primero con la masa fija, la ubicación de los polos de lazo abierto del sistema, variando la longitud y luego se hizo lo mismo pero dejando fija la longitud y variando la masa que carga la grúa.

Los resultados de esta simulación son los siguientes.

Se puede ver que a longitudes pequeñas la sensibilidad del modelo es grande y va decreciendo a medida que l aumenta.

Pero es notable la sensibilidad del modelo con respecto a l

Veamos que resultados arroja la simulación cuando se varia m

Los polos en este caso se mantienen prácticamente constantes en todo el rango de variación posible de la masa de las cargas de la grúa (10 a 100kg)

Con lo cual queda sumamente claro que la sensibilidad del modelo con respecto a la masa m es muy baja.

Problema de los mínimos locales:

Se llego por medio de una gran cantidad de simulaciones a que con 2 neuronas en la capa oculta el sistema propuesto en 1000 simulaciones no cayo en ningún mínimo local como lo va a mostrar el siguiente gráfico que son 1000 simulaciones del sistema de la grúa con el modelo nominal y lo que se grafica es en cada oportunidad que valor de l identifica la red.

Como puede verse en las 1000 simulaciones no cayo en ningún mínimo local y llego (con cierto error admisible) a el valor real.

Entonces con el sistema de la manera propuesta se llevaran a cabo simulaciones y se verán los resultados obtenidos los cuales si se comparan con la sección anterior de este trabajo no se notaran grandes diferencias y lo mas importante es que si se especificaria el desplazamiento máximo admisible de la carga de la grúa en el frenado este se mantendría prácticamente igual que en la sección anterior con lo que se estarían cumpliendo con las especificaciones técnicas del problema y el costo del sistema bajaría mucho ya que se utiliza una sola red y se disminuyo el numero de neuronas de la capa oculta, lo que haría disminuir el hardware puesto en juego en la implementación del sistema, y también al utilizar un solo parámetro variable (la longitud desde la carga hasta el carro de la grúa) disminuirá el tiempo de entrenamiento de la red.

Veamos las simulaciones:

Para el modelo nominal:

Para m=10kg y l=7.5m

Para l=1m y m=60kg

Para l=10m y m=100kg

Lo cual corrobora nuestros cálculos.


Apéndice A

Modelo y simulación utilizados para resolver el problema de la grúa de la sección 3

A.1 Modelo de red utilizado:

Para este problema particular se utilizo una red Backpropagation con la siguiente arquitectura:

El numero de neuronas no es el real en el esquema de la arquitectura de la red

Para entrenar esta red se utilizo el siguiente programa:

%Fase de entrenamiento de la red (Se supone que se hace una única vez)

% Cargo los datos de la entrada de la red

Tf=5;

X0=[0;0;0;0];

for l=1:1:10

for m=10:10:100

A=[0 1 0 0;0 -b/M g*m/M 0;0 0 0 1;0 b/(M*l) -(M+m)*g/(M*l) 0];

B=[0;1/M;0;-1/(M*l)];

[tout,yout]=rk45('modelo4',Tf);

datos((l-1)*10+m/10,:)=[(l-5.5)/4.5 (m-55)/45 100*yout(:,3)'];

end

end

Nneuronas=10; % Cantidad de neuronas en la capa oculta

beta=1.1; % .82Parametro de la tangente hiperbolica

nu=.2; % Factor de aprendizaje

momentum=0.1; % Utilizo un momentum para acelerar el aprendizage de la red

[Ncasos,Nentradas]=size(datos);

Nentradas=Nentradas-2;

% Inicializo la matriz de pesos

W1=rand(Nentradas+1,Nneuronas)./10;

W2=rand(Nneuronas+1,2);

% Aplico los datos que tengo varias veces para entrenar la red

deltaw2_ant=zeros(size(W2));

deltaw1_ant=zeros(size(W1));

for k=1:400

for i=1:Ncasos %Ncasos

V1=[1 datos(i,3:Nentradas+2)]; % Aplico los datos a la capa de entrada de la Backpropagation

% Propago la senal por la red

V2=[1 tanh(beta.*V1*W1)]; %matriz fila que representa las salidas de la capa oculta

V3=tanh(beta.*V2*W2); % matriz que representa la salida de la red

% Calculo los delta y retropropago el error

d3=beta.*(1.-V3.^2).*(datos(i,1:2)-V3); %deltas de la ultima capa

d2=beta.*(1.-V2.^2).*(W2*d3')'; %deltas de la capa oculta

% Actualizo los pesos

deltaw2=nu*(V2'*d3);

deltaw1=nu*(V1'*d2(2:Nneuronas+1));

W2=W2+deltaw2+momentum*deltaw2_ant;

W1=W1+deltaw1+momentum*deltaw1_ant;

deltaw2_ant=deltaw2;

deltaw1_ant=deltaw1;

end

end

Se puede ver que en el modelo utilizado de la red Backpropagation se utilizo para acelerar el aprendizaje el termino de momentum al cual se le puso un coeficiente de .1 que luego de varias simulaciones se comprobó que era el optimo.

Entonces para realizar el modelo que se presento en la sección 3 que es el siguiente:

Se utilizo el siguiente programa :

% Simulación de solución con red neuronal para

% la grua puente

% definicion del modelo

clear all

g=9.8; % aceleracion de la gravedad

b=1600; % constante de rozamiento del carro

M=200; % masa del carro

%Parametros de la red

beta=.85;

%entrena;

load datos

% SIMULACION DE COMPORTAMIENTO DE LA GRUA CON LA RED NEURONAL

l=10; %Parametros que se tienen en la grua

m=100;

Tf=5;

X0=[0;0;0;0];

gain=[0 0 0 0];

A=[0 1 0 0;0 -b/M g*m/M 0;0 0 0 1;0 b/(M*l) -(M+m)*g/(M*l) 0];

B=[0;1/M;0;-1/(M*l)];

[tout,yout]=rk45('modelo41',Tf);

% Identificacion de la planta mediante la red neuronal

V1=[1 100*yout(:,3)']; % Aplico los datos a la capa de entrada de la Backpropagation

V2=[1 tanh(beta.*V1*W1)];

V3=tanh(beta.*V2*W2);

l_red=V3(1)*4.5+5.5; % longitud que identifico la red

m_red=V3(2)*45+55; %masa de la carga que identifico la red

A_red=[0 1 0 0;0 -b/M g*m_red/M 0;0 0 0 1;0 b/(M*l_red) -(M+m_red)*g/(M*l_red) 0];

B_red=[0;1/M;0;-1/(M*l_red)];

% Calculo las ganancias con que realimento las variables de estado

P=[0 -7.92 -3+.5i -3-.5i]; % Fijo el lugar donde quiero los polos

gain=acker(A_red,B_red,P);

X0=yout(length(yout(:,1)),1:4)';

[tout2,yout2]=rk45('modelo41',45);

salida=[yout;yout2];

tiempo=[tout;tout(length(tout)).*ones(length(tout2),1)+tout2];

figure (1)

plot(tiempo,salida(:,1),'b',tiempo,salida(:,2),'r');

title('Posicion y velocidad del carro para m=100kg y l=10m con Backpropagation')

figure(2)

plot(tiempo,salida(:,3),'m',tiempo, salida(:,4),'g')

title(' angulo y velocidad angular para m=100kg y l=10m con Backpropagation')

Aquí se puede ver si se sigue el programa que en la fase de entrenamiento se graba la matriz de los pesos de la red en un archivo para no tener que hacer un entrenamiento cada vez que cambiaba el modelo.

Entonces durante 5 segundos se hace evolucionar el sistema con la red a lazo abierto y se va muestreando el ángulo. Luego de esto se ponen estos datos en la entrada de la red y esta da como resultado un m y l que aprendió en la fase de entrenamiento.

Con estos resultados se calcula el controlador , se cierra el lazo (para esto se utiliza el modelo41 que es el mismo que el modelo4 pero tiene una ganancia de realimentacion para cada variable de estado.

Apéndice B

Modelo de Schmajuk DiCarlo

El modelo S-D consiste en un set de ecuaciones diferenciales que representan cambios en los valores de la actividad neuronal y conectividades en función del tiempo.

Este modelo se muestra en las figura B.1

Capa oculta

Figura B.1

Los componentes de la red son los siguientes

1. Short-Term Memory (STM) Traces

Estos términos se definen como :

Control de un puente grúa con una red neuronal S-D
B.1

donde Control de un puente grúa con una red neuronal S-D
representa el decaimiento pasivo de los STM de Control de un puente grúa con una red neuronal S-D
,Control de un puente grúa con una red neuronal S-D
representa la relación de incremento de Control de un puente grúa con una red neuronal S-D
, y la constante Control de un puente grúa con una red neuronal S-D
es el máximo valor posible de Control de un puente grúa con una red neuronal S-D
.

2. Actividad Neuronal

Las neurona j de la capa oculta es activada por los STM de los diferentes Control de un puente grúa con una red neuronal S-D
en proporción a sus pesos sinápticos:

Control de un puente grúa con una red neuronal S-D
B.2

donde Control de un puente grúa con una red neuronal S-D
representa los pesos sinápticos entre los STM de la entrada i y la neurona de la capa oculta j.

La salida de la capa oculta es una sigmoidea dada por :

Control de un puente grúa con una red neuronal S-D
B.3

Se asume que las neuronas de la capa oculta esta activas solo cuando hay entradas presentes, esto es Control de un puente grúa con una red neuronal S-D
si Control de un puente grúa con una red neuronal S-D
.

La salida de las neuronas de entrada esta dada por

Control de un puente grúa con una red neuronal S-D
B.4

Los autores asumen que Control de un puente grúa con una red neuronal S-D
, lo cual da una ventaja a las neuronas de la capa oculta, frente a las que vienen directamente de la entrada, para calcular la salida.

3. Pesos sinápticos entrada-salida

Cambios en las pesos sinápticos entre la entrada i y la salida, Control de un puente grúa con una red neuronal S-D
, esta dados por una regla delta modificada

Control de un puente grúa con una red neuronal S-D
B.5

Por la ecuación B.5, Control de un puente grúa con una red neuronal S-D
cambia solamente cuando Control de un puente grúa con una red neuronal S-D
esta activa y el error de la salida Control de un puente grúa con una red neuronal S-D
es distinto de 0.

El error en la salida esta dado por

Control de un puente grúa con una red neuronal S-D
B.6

donde Control de un puente grúa con una red neuronal S-D
, y esto es, la predicción agregada de US basada sobre todos los nodos asociados con US, diferentes de Control de un puente grúa con una red neuronal S-D
, incluyendo los pesos sinápticos de la capa oculta. Por la ecuación B.6 Control de un puente grúa con una red neuronal S-D
esta linealmente controlado por la predicción local individual de la salida (US), Control de un puente grúa con una red neuronal S-D
, y la predicción agregada de US, Control de un puente grúa con una red neuronal S-D
.

4. Pesos sinápticos de la salida relacionados a la capa oculta.

Cambios en los pesos sinápticos de la neurona j de la capa oculta y la salida están dados también por una regla delta modificada:

Control de un puente grúa con una red neuronal S-D
B.7

Por la ecuación B.7, Control de un puente grúa con una red neuronal S-D
cambia solo cuando Control de un puente grúa con una red neuronal S-D
esta activa y Control de un puente grúa con una red neuronal S-D
es distinta de 0. El error en la salida esta dado por:

Control de un puente grúa con una red neuronal S-D
B.8

donde Control de un puente grúa con una red neuronal S-D
, que es la predicción agregada de US basada en todos los nodos asociados con la salida (US), diferentes de Control de un puente grúa con una red neuronal S-D
, incluyendo los pesos sinápticos entrada-salida. Se puede notar que los errores Control de un puente grúa con una red neuronal S-D
y Control de un puente grúa con una red neuronal S-D
usados en las ecuaciones B.6 y B.7 son idénticos.

5. Pesos sinápticos de la capa oculta.

Cambios en los pesos sinápticos entre la entrada i y la neurona j de la capa oculta, Control de un puente grúa con una red neuronal S-D
, esta dado por la regla delta modificada :

Control de un puente grúa con una red neuronal S-D
B.9

Por la ecuación B.9, Control de un puente grúa con una red neuronal S-D
cambia solo cuando Control de un puente grúa con una red neuronal S-D
esta activa y el error de la capa oculta , Control de un puente grúa con una red neuronal S-D
, es distinto de 0.

El error de la capa oculta Control de un puente grúa con una red neuronal S-D
, esta dado por:

Control de un puente grúa con una red neuronal S-D
B.10

donde Control de un puente grúa con una red neuronal S-D
, que es la predicción agregada de US basada en todos los nodos asociados con la salida. Los autores remarcan que esta ecuación describe un proceso biológico real que se lleva a cabo en el cerebro.

Esta señal de error , descrita por la ecuación B.10, es similar a la señal de error para las capas ocultas usado por Rumelhart (1986) en el que este es proporcional a (a) el valor de el peso sináptico de la neurona de salida relacionada con la capa oculta y (b) el error en la salida (en este caso hay solo un error de salida).

La ecuación B.10, sin embargo difiere de la ecuación original de la Backpropagation en que, en vez de incluir la derivada de la función de activación, esta incluye simplemente la función de activación , Control de un puente grúa con una red neuronal S-D
.

Esto trae como ventaja que pueda ser físicamente realizable ya que el error de la capa oculta puedo generarlo con una red neuronal, pero trae también como desventaja que aparecen en el sistema mínimos locales, los cuales pueden ser molestos.

Para una información mas detallada con respecto a este modelo se recomienda el siguiente paper:

Stimulus Configuration, Classical Conditioning, and Hippocampal Function, Nestor A. Schmajuk and James J. DiCarlo, Northwestern University, Psychological Review, 1992, Vol 99, No. 2, 268-305

Apéndice C

Simulación del puente grúa mediante una red S-D modificada

El modelo utilizado para la simulación en este caso es similar al utilizado para la red Backpropagation explicado en el Apéndice A. Las diferencias están en la fase de entrenamiento de la red Neuronal S-D que tiene una arquitectura diferente a la Backpropagation y la misma esta explicada en el Apéndice B.

Veamos primero como se realiza el entrenamiento de la red.

Programa para entrenar la red S-D modificada

%Fase de entrenamiento de la red SD

% Cargo los datos de entrada para entrenar a la red

Tf=5;

X0=[0;0;0;0];

for l=1:1:10

m=60;

A=[0 1 0 0;0 -b/M g*m/M 0;0 0 0 1;0 b/(M*l) -(M+m)*g/(M*l) 0];

B=[0;1/M;0;-1/(M*l)];

[tout,yout]=rk45('modelo4',Tf);

datos(l,:)=[l/10 m/100 (1+100*yout(:,3)')./2]; %Modificado *10

end

Nneuronas=10; % Cantidad de neuronas en la capa oculta

[Ncasos,Nentradas]=size(datos);

Nentradas=Nentradas-2;

% Inicializo la matriz de pesos de la primer red

W1=rand(Nentradas,Nneuronas)/10;

Vs1=rand(Nentradas,1)/10;

Vn1=rand(Nneuronas,1)/10;

% Inicializo el momemtum

momW1=.99;

momVs1=.99;

momVn1=.99;

deltaW_ant1=zeros(size(W1));

deltaVs_ant1=zeros(size(Vs1'));

deltaVn_ant1=zeros(size(Vn1'));

% Aplico los datos que tengo varias veces para entrenar la red

for k=1:100

for i=1:Ncasos

entrada=datos(i,3:length(datos(i,:))); %Pongo los datos en la entrada

sum1=logsig(entrada*W1); %Calculo la suma de la capa oculta

an1=2.5*sum1.^(1.5)./(sum1.^(1.5)+.3535534); %Calculo la salida de la capa oculta

B1=[entrada an1]*[Vs1;Vn1]; %Calculo la salida de la red

error1=datos(i,1)-B1; %Calculo el error de la estimacion

deltaVs1=.005*(datos(i,1)-B1)*entrada.*(1-abs(Vs1'))+momVs1*deltaVs_ant1; %Saco los delta de los pesos aplicando momentum

deltaVn1=.005*(datos(i,1)-B1)*an1.*(1-abs(Vn1'))+momVn1*deltaVn_ant1;

EH1=1./(1+exp(-5*(datos(i,1)-B1)*an1.*Vn1'))-.5;

deltaW1=.5*entrada'*EH1.*(1-abs(W1))+momW1*deltaW_ant1;

W1=W1+deltaW1;

Vs1=Vs1+deltaVs1';

Vn1=Vn1+deltaVn1';

deltaW_ant1=deltaW1;

deltaVs_ant1=deltaVs1;

deltaVn_ant1=deltaVn1;

end

end

sdverif1;

resultado1

% Cargo los datos para entrenar a la segunda red

Tf=5;

X0=[0;0;0;0];

for m=10:10:100

l=7.5;

A=[0 1 0 0;0 -b/M g*m/M 0;0 0 0 1;0 b/(M*l) -(M+m)*g/(M*l) 0];

B=[0;1/M;0;-1/(M*l)];

[tout,yout]=rk45('modelo4',Tf);

datos(m/10,:)=[l/10 m/100 (1+100*yout(:,3)')./2]; %Modificado *10

end

% Inicializo la matriz de pesos de la segunda red

W2=rand(Nentradas,Nneuronas)/10;

Vs2=rand(Nentradas,1)/10;

Vn2=rand(Nneuronas,1)/10;

% Inicializo el momemtum

momW2=.99;

momVs2=.99;

momVn2=.99;

deltaW_ant2=zeros(size(W2));

deltaVs_ant2=zeros(size(Vs2'));

deltaVn_ant2=zeros(size(Vn2'));

% Aplico los datos que tengo varias veces para entrenar la red

for k=1:100

for i=1:Ncasos

entrada=datos(i,3:length(datos(i,:))); %Pongo los datos en la entrada

sum2=logsig(entrada*W2); %Calculo la suma de la capa oculta

an2=2.5*sum2.^(1.5)./(sum2.^(1.5)+.3535534); %Calculo la salida de la capa oculta

B2=[entrada an2]*[Vs2;Vn2]; %Calculo la salida de la red

error2=datos(i,2)-B2; %Calculo el error de la estimacion

deltaVs2=.005*(datos(i,2)-B2)*entrada.*(1-abs(Vs2'))+momVs2*deltaVs_ant2; %Saco los delta de los pesos aplicando momentum

deltaVn2=.005*(datos(i,2)-B2)*an2.*(1-abs(Vn2'))+momVn2*deltaVn_ant2;

EH2=1./(1+exp(-5*(datos(i,1)-B2)*an2.*Vn2'))-.5;

deltaW2=.5*entrada'*EH2.*(1-abs(W2))+momW2*deltaW_ant2;

W2=W2+deltaW2;

Vs2=Vs2+deltaVs2';

Vn2=Vn2+deltaVn2';

deltaW_ant2=deltaW2;

deltaVs_ant2=deltaVs2;

deltaVn_ant2=deltaVn2;

end

end

sdverif2;

resultado2

Como se puede ver el mecanismo de entrenamiento es similar al de la Backpropagation, salvo que aquí se están utilizando 2 redes S-D ya que este modelo permite una sola salida.

También se puede notar en el programa la utilización de un termino de momentum que acelera el aprendizaje de la red S-D con respecto a una red que no tiene momentum.

Entonces para que se pueda apreciar esta mejora vamos a graficar el error de una de las entradas a aprender por la red con respecto a las veces que se hace ingresar esa entrada para que la red modifique sus pesos sinapticos.

El primer gráfico corresponde al error cuando no utilizamos el termino de momentum para modificar los pesos sinapticos de la red es decir con el modelo original de Schmajuk y DiCarlo.

Este error es el de una entrada sola tomada al azar sobre el total de entradas que tiene que aprender la red que en la simulación son 10

Y con los términos de momentum

Es notable como se acelera el proceso de aprendizaje con la incorporación de estos términos lo cual es muy importante para este problema particular de la grúa ya que va a reducir mucho el tiempo de entrenamiento que era uno de los problemas mas grandes que había con el caso de la Backpropagation.

m

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

M

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D

x

F

m

l

Capa de salida

Capa oculta

Capa de entrada

Cr

Vh

Cs1

Cs2

Cx

Vs

Vn

Control de un puente grúa con una red neuronal S-D

Control de un puente grúa con una red neuronal S-D