Estudio y desarrollo de modelos neuronales de complejos sistemas multivariables.
Abstract
El objetivo del presente proyecto es el estudio y desarrollo de modelos neuronales de complejos sistemas multivariables. Tras el modelado se obtendrán los modelos neuronales de dos sistemas no-lineales objetivo, uno monovariable, y otro multivariable. Además, se obtendrá un código que permita optimizar el desarrollo de más modelos, para su aplicación en estrategias de control dependiente de modelos dinámicos. Para esto, se han escogido redes neuronales de estructura NARX, y el desarrollo se ha realizado en el entorno de MATLAB.
Full text
MÁSTER UNIVERSITARIO EN INGENIERÍA INDUSTRIAL TRABAJO FIN DE MÁSTER ESTUDIO Y DESARROLLO DE MODELOS NEURONALES DE COMPLEJOS SISTEMAS MULTIVARIABLES ESTUDIO Y DESARROLLO DE MODELOS NEURONALES DE COMPLEJOS SISTEMAS MULTIVARIABLES Estudiante: ALONSO MEDINA, AIMAR Director/a: IRIGOYEN GORDO, ELOY Departamento: Ingeniería de Sistemas y Automática Curso académico: 2021-2022 Bilbao, 12 de septiembre de 2022
Resumen Laburpena Abstract El objetivo del presente proyecto es el estudio y desarrollo de modelos neuronalesdecomplejossistemasmultivariables.Traselmodelado seobtendrán los modelos neuronales de dos sistemas no-lineales objetivo, uno monovariable, y otro multivariable. Además, se obtendrá un código que permita optimizar el desarrollo de más modelos, para su aplicación en estrategias de control dependiente de modelos dinámicos. Para esto, se han escogido redes neuronales de estructura NARX, y el desarrollo se ha realizado en el entorno de MATLAB. Palabras Clave: identificación, red neuronal, sistemas no-lineales, modelo NARX, MIMO. Proiektu honen helburua aldagai anitzeko sistema konplexuen eredu neuronalak aztertzea eta garatzea da. Modelaketaren ostean, bi sistema ezlineal lortuko dira, bata aldagai bakarrekoa, eta bestea, aldagai anitzekoa. Horrez gain, eredu gehiagoren garapena optimizatzea ahalbidetuko duen kodea lortuko da, eredu dinamikoetan oinarritzen diren kontrol-estrategietan erabiltzeko. Honetarako, NARX estruktura duten sare neuronalak aukeratu dira, eta garapena MATLAB ingurunean egin da. Gako-hitzak: identifikazioa, sare neuronala, sistema ez-linealak, NARX eredua, MIMO. The objective of this project is the study and development of neural models of complex multivariable systems. After the modelling, the neural models of two targetnonlinearsystemswillbeobtained,oneSISOmodel,andoneMIMOmodel. Moreover, a code for streamlining future development of further models, for their application in dynamic model based control strategies. For this, neural networks with the NARX structure have been chosen, and the development has been conducted on the MATLAB enviroment. Keywords: identification, neural network, nonlinear systems, NARX model, MIMO. 1
Índice Resumen Laburpena Abstract 1 Lista de figuras 4 Lista de tablas 6 Lista de acrónimos 7 1. Introducción 8 2. Contexto 9 3. Objetivos y alcance 11 4. Estado del arte 14 4.1. Redes neuronales (RNA) . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2. Identificación y modelización de sistemas mediante RNA . . . . . . 19 4.3. NNARX en identificación de sistemas . . . . . . . . . . . . . . . . . . 25 5. Análisis de riesgos 28 6. Desarrollo de la solución 30 6.1. Metodología y desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.1.1. Preparación de los datos de entrenamiento . . . . . . . . . . 31 6.1.2. Diseñodelared........................... 33 6.1.3. Creación y entrenamiento de la red . . . . . . . . . . . . . . . 34 6.1.4. Validación de la red . . . . . . . . . . . . . . . . . . . . . . . . . 37 2
6.1.5. Integración del desarrollo: barrido de parámetros . . . . . . 43 6.2. Sistemas objetivo a modelizar . . . . . . . . . . . . . . . . . . . . . . 46 6.2.1. Sistema SISO no-lineal . . . . . . . . . . . . . . . . . . . . . . 47 6.2.2. Sistema MIMO no-lineal . . . . . . . . . . . . . . . . . . . . . . 48 7. Análisis de los resultados 50 7.1. Sistema SISO no-lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.2. Sistema MIMO no-lineal . . . . . . . . . . . . . . . . . . . . . . . . . . 55 8. Plan de proyecto y planificación 61 8.1. Descripcióndetareas............................ 61 8.2. Hitos...................................... 65 8.3. DiagramadeGantt ............................. 66 9. Descripción del presupuesto 68 10.Conclusiones y trabajos futuros 70 Anexo I: Código y programas fuente 74 Anexo II: Borrador de publicación conteniendo parte del trabajo realizado 88 3
Lista de figuras 1. Esquema de un control mediante realimentación negativa . . . . . 9 2. Esquema de una neurona artificial . . . . . . . . . . . . . . . . . . . . 15 3. Redes neuronales según sus conexiones . . . . . . . . . . . . . . . . 15 4. Funciones de activación sigmoidales . . . . . . . . . . . . . . . . . . 16 5. Comparación entre un entrenamiento correcto y una situación de sobreajuste.................................. 19 6. Esquema de un perceptrón multicapa (MLP) . . . . . . . . . . . . . . 20 7. RedneuronalNNFIR............................. 22 8. RedneuronalNNOE............................. 23 9. RedneuronalNNARX............................ 24 10. Estructura del iMO-NMPC [3] . . . . . . . . . . . . . . . . . . . . . . . 26 11. Matriz probabilidad-impacto de los riesgos del proyecto . . . . . . . 29 12. Comparación entre camino aleatorio ycamino aleatorio saturado 32 13. Visualización de una red neuronal NARX en MATLAB . . . . . . . . . 33 14. Ventana de entrenamiento de red . . . . . . . . . . . . . . . . . . . . 36 15. Red neuronal NARX en lazo cerrado en MATLAB . . . . . . . . . . . 42 16. Visualización de la estructura de datos netData ............ 44 17. Entradas y salidas de los sistemas en régimen estacionario . . . . . 47 18. Datos de entrada y salida de entrenamiento para el sistema SISO no-lineal.................................... 50 19. Datos de entrada y salida de validación para el sistema SISO no-lineal 51 20. MSE y MaAE en lazo abierto de configuraciones de redes para el sistemaSISO................................. 51 4
21. MSE en lazo cerrado de configuraciones de redes para el sistema SISO ...................................... 52 22. RespuestadelmodeloneuronalparaelsistemaSISOobtenidapara validación en lazo abierto . . . . . . . . . . . . . . . . . . . . . . . . . 54 23. RespuestadelmodeloneuronalparaelsistemaSISOobtenidapara validación en lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . . 54 24. Datos de entrada y salida de entrenamiento para el sistema MIMO no-lineal.................................... 55 25. Datos de entrada y salida de validación para el sistema MIMO nolineal...................................... 56 26. MSE y MaAE en lazo abierto de configuraciones de redes para el sistemaMIMO ................................ 57 27. MSE en lazo cerrado de configuraciones de redes para el sistema MIMO ..................................... 57 28. Respuesta del modelo neuronal para el sistema MIMO obtenida para validación en lazo abierto . . . . . . . . . . . . . . . . . . . . . . 60 29. Respuesta del modelo neuronal para el sistema MIMO obtenida para validación en lazo cerrado . . . . . . . . . . . . . . . . . . . . . . 60 30. Diagrama de Gantt del proyecto . . . . . . . . . . . . . . . . . . . . . 67 5
Lista de tablas 1. Planificación inicial del proyecto . . . . . . . . . . . . . . . . . . . . . 12 2. Hitos iniciales del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 12 3. Tasas horarias y presupuesto estimado del proyecto . . . . . . . . . 13 4. MSE en lazo abierto de preselección de redes para el sistema SISO 52 5. MaAE en lazo abierto de preselección de redes para el sistema SISO 53 6. MSE en lazo cerrado de preselección de redes para el sistema SISO 53 7. MSE en lazo abierto de preselección de redes para el sistema MIMO 58 8. MaAE en lazo abierto de preselección de redes para el sistema MIMO 58 9. MSE en lazo cerrado de preselección de redes para el sistema MIMO 59 10. Hitos finales del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 65 11. Planificación final del proyecto . . . . . . . . . . . . . . . . . . . . . . 66 12. Cálculo de las tasas horarias del proyecto . . . . . . . . . . . . . . . . 69 13. Presupuesto final del proyecto . . . . . . . . . . . . . . . . . . . . . . 69 6
Lista de acrónimos ARX Autoregressive eXogenous (Autorregresivo eXógeno) FIR Finite Impulse Response (Respuesta Finita al Impulso) MaAE Maximum Absolute Error (Error Absoluto Máximo) MIMO Multiple Input Multiple Output (Múltiples Entradas Múltiples Salidas) MLP Multi-Layer Perceptron (Perceptrón MultiCapa) MPC Model Predictive Control (Control Predictivo por Modelo) MSE Mean Square Error (Error Cuadrático Medio) NARX NonlinearAutoregressiveeXogenous(No-linealAutorregresivoeXógeno) OE Output Error (Error de Salida) RNA Redes Neuronales Artificiales SISO Single Input Single Output (Una Entrada Una Salida) 7
1. Introducción Este documento es la memoria o resultado del Trabajo de Fin de Máster de título «Estudio y desarrollo de modelos neuronales de complejos sistemas multivariables». En la primera parte del mismo se contextualiza el trabajo realizado, así como los objetivos y alcance del mismo. Una vez enmarcado el proyecto de forma general, se realiza un análisis del estado del arte en el ámbito estudiado, obteniendo una visión del estado actual de este. A continuación, se detalla el desarrollo de la solución y el trabajo realizado, y se analizan los resultados obtenidos de este, siguiendo los pasos realizados para la realización del proyecto. Una vez presentado el trabajo desarrollado, esta memoria cuenta con una planificación de los trabajos a realizar y las relaciones entre dichas tareas. En esta sección se incluye además el presupuesto del proyecto, y se realiza el seguimiento, tanto de este, como del trabajo planificado. Para cerrar el documento, se realizan unas conclusiones finales, donde se estudia el trabajo realizado y sus resultados, junto al seguimiento de la planificación temporal y económica del proyecto, y se comenta sobre el posible trabajo futuro a realizar. 8
El valor de esta suma no sale directamente de la neurona, sino que se le aplica unaoperacióndenominadafuncióndeactivación s(x).Alcomienzodeldesarrollo de neuronas artificiales y RNA, esta función era comúnmente la función umbral, una función binaria por la que, si la suma ponderada superaba un cierto valor umbral, la neurona produce un valor alto (normalmente 1), y en caso de no superar este valor, produce un valor bajo (normalmente 0 o -1). De esta forma, la salida de una neurona (y) con mentradas (x) se calcula de la siguiente forma: y=s(b+ m X k=1 wkxk) Figura 2: Esquema de una neurona artificial Las redes neuronales se pueden clasificar según distintos criterios, siendo uno de los principales la clasificación de las redes según sus conexiones, donde, aunque hay más tipos, se dividen en dos grandes bloques: las redes prealimentadas ofeed-forward y las redes recurrentes (Figura 3), siendo un desarrollo posterior. La diferencia entre ambas radica en que en las redes prealimentadas, las conexiones entre neuronas no forman un ciclo, es decir, la transferencia de señales o valores es unidireccional; mientras que en las redes recurrentes, las conexiones sí forman un ciclo. Red neuronal prealimentada Red neuronal recurrente Figura 3: Redes neuronales según sus conexiones 15
Aunque las estructuras de las redes han evolucionado con el tiempo para afrontardiversosproblemas,unodelosmayoresavanceseneldesarrolloderedes neuronales ha sido el empleo de funciones de activación derivables y no-lineales, ya que incrementó su funcionalidad en enorme medida, especialmente el de las redes prealimentadas. La primera de ellas, porque permitía aplicar en redes prealimentadas el algoritmo de entrenamiento de propagación hacia atrás (backpropagation), permitiendo así el entrenamiento de redes neuronales de múltiples capas. Por otro lado, fue demostrado [4] que, cuando la función de activación de las neuronas es no-lineal, las redes neuronales prealimentadas, incluso de únicamente dos capas (más la capa de entrada), son capaces de ejercer como aproximadores universales de funciones [5]; en lo que ha pasado a ser conocido como «Teorema de Aproximación Universal». Sonestascaracterísticaslasqueposeenlamayoríadefuncionesdeactivación empleadas en la actualidad, especialmente las funciones de activación sigmoidales, como la función logística σ(x) = 1 1 + e−x, o la función tangente hiperbólica tanh(x) = ex−e−x e−x+e−x. Estas funciones se denominan sigmoidales porque la relación entre entradas y salidas de estas funciones tienen forma de S (Figura 4), es decir, son monótonamente crecientes y poseen dos asíntotas horizontales. La diferencia más notable entre ambas es el rango de salidas de la función: la función logística produce valores entre 0 y 1, y la función tangente hiperbólica producevaloresentre-1y1.Tambiénpuedecomprobarsequelafuncióntangente hiperbólica realiza un cambio más brusco de la salida (Figura 4), alcanzando sus valores límite de ypara valores de xmás cercanos a 0 que la función logística. -4 -3 -2 -1 0 1 2 3 4 x -1 -0.5 0 0.5 1 y -4 -3 -2 -1 0 1 2 3 4 x -1 -0.5 0 0.5 1 y Figura 4: Funciones de activación sigmoidales 16
Para ser capaz de producir los resultados deseados, todos los pesos y bias de la red neuronal, denominados parámetros de la red, deben ajustarse de forma precisa. A este proceso de ajuste de los parámetros de la red se le denomina entrenamiento oaprendizaje, ya que es el proceso encargado de que la red aprenda la relación entre las entradas y salidas de la misma. Existen tres paradigmas distintos para el entrenamiento de redes neuronales, generando redes neuronales cuyo objetivo es diferente: Entrenamiento no supervisado: En este caso, para el entrenamiento, la red recibe únicamente las entradas de la red, siendo el objetivo de la red la de inferir patrones entre las entradas y salidas predichas, por lo que suelen ser empleadas para usos de agrupación de datos (data clustering). Entrenamiento por refuerzo: Para el entrenamiento, la red recibe las entradas de la red, y una función decoste a minimizar (o función de refuerzo o recompensa a maximizar). De esta forma, aunque no se dan las salidas, la red es capaz de conocer si las salidas predichas son correctas o no, y adaptarse a ello. Actualmente este es un campo de interés para diversas aplicaciones, entre ellas, en sistemas de control, para el desarrollo de controladores [6]. Entrenamiento supervisado: A diferencia de los paradigmas anteriores, en este caso, para el entrenamiento se emplean tanto las entradas, como las salidas exactas deseadas de la red. De esta forma, el objetivo del entrenamiento es que la red produzca unas salidas lo más cercanas a las deseadas. Las tareas entrenadas de esta forma son, entre otras, la clasificación de datos, y la aproximación de funciones. Es dentro de esta última categoría donde se sitúa el trabajo realizado, ya que el objetivo del mismo es el desarrollo de modelos de sistemas, que en última instancia, se pueden interpretar como funciones que, con una serie de entradas, producen una serie de salidas. El algoritmo más ampliamente empleado para realizar el entrenamiento supervisado de redes neuronales prealimentadas es la propagación hacia atrás (backpropagation), mencionado anteriormente. Este algoritmo computa el gradiente de la función de coste, como por ejemplo, el error entre la salida predicha por la red (ˆy) y la salida real deseada (y); respecto a los parámetros de la red. Con estos gradientes, el algoritmo busca encontrar el mínimo de la función de coste, y por tanto, conseguir que la salida predicha de la red se asemeje más a la deseada. Es de este proceso de donde coge el nombre el algoritmo, ya que propaga los errores (de salida) hacia atrás (hacia los parámetros de red). 17
Sin embargo, una de las limitaciones de este algoritmo de entrenamiento es que no asegura que al final del mismo, los valores converjan al mínimo global de la función, sino únicamente a un mínimo local. Aunque esto puede no ser un impedimento en ocasiones, es común realizar varios entrenamientos, inicializando los parámetros de la red a distintos valores, explorando así la hipersuperficie del error, con el objetivo de encontrar el mínimo global, o un mínimo local lo más cercano posible. Dentro de este algoritmo de entrenamiento, existen distintas variaciones, siendo muy utilizado el algoritmo de Levenberg-Marquardt para el entrenamiento [7]. Este algoritmo modifica el algoritmo original, empleando derivadas de segundo orden, consiguiendo que el error converja más rápidamente, reduciendo el número de iteraciones necesarias para realizar el entrenamiento. Como último punto del desarrollo de una red neuronal, se encuentra la validación. El objetivo de la validación es comprobar que la red neuronal haga, en efecto,latareaparalaquehasidodiseñada.Estoesdebidoaque,aunquedurante el entrenamiento se minimice el error cometido, cabe recordar que este error es el cometido respecto a los datos de entrenamiento empleados. Paraserfuncional,laredneuronaldebeposeerlacapacidaddegeneralización, es decir, debe ser capaz de realizar la tarea diseñada para cualquier entrada, por supuesto, para el rango para el que ha sido entrenada; pero en ocasiones para valores fuera de este rango, lo que se denomina que la red posea capacidad de extrapolación. Un problema que puede ocurrir durante el entrenamiento es el sobreajuste (overfitting) de la red. En esta situación, la red neuronal aprende demasiado bien los datos de entrenamiento, y pierde la capacidad de generalización. Es para comprobar esto, uno de los métodos más empleados es emplear la red para un conjunto distinto de datos, llamado conjunto de datos de validación, ycalcularalgunamedidadeerrorentrelosvaloresproducidosporlared,ylasalida real de esta. Muchas veces este proceso se realiza a la par del entrenamiento, donde tras cada iteración del entrenamiento, se realiza la validación de la red. Durante un entrenamiento correcto, el error cometido en la validación se debe reducir en cada iteración. Si tras alguna iteración este error aumenta, puede ser un signo de sobreajuste (Figura 5), siendo posible ejecutar distintas acciones. Una de las acciones más comunes es dejar un número de iteraciones de margen, esperar si el error vuelve a disminuir, y si no lo hace, tomar los parámetros de red de la iteración con menor error de validación. 18
Iteraciones Error Entrenamiento correcto Entrenamiento Validación Iteraciones Error Sobreajuste ( overfitting) Entrenamiento Validación Figura 5: Comparación entre un entrenamiento correcto y una situación de sobreajuste 4.2. Identificación y modelización de sistemas mediante RNA Talycomosehaexplicadoenlasecciónanterior,lasredesneuronalesartificiales se pueden usar en multitud de aplicaciones, como tareas de clasificación, en casoscomoprocesamientodeimágenesoreconocimientodevoz;procesamiento del lenguaje natural (natural language processing), controladores en sistemas de control [6], inferencia estadística, búsqueda de patrones y, el uso realizado en este trabajo, como modelos de sistemas. Así, la tarea desarrollada entra dentro del ámbito de la aproximación de funciones, uno de los usos más extendidos de las RNA; más concretamente dentro del modelado de series temporales time-series modelling. Comosehamencionadoanteriormente,lasredesneuronalesprealimentadas (feed-forward) son capaces de ejercer como aproximadores universales de funciones, si cumplen tres condiciones: La red neuronal posee al menos dos capas, más la capa de entrada, que no se suele contar para el cómputo del número de capas de la red. Las neuronas de las capas intermedias emplean una función de activación no lineal, como las funciones sigmoidales. Lacapadesalidaeslineal,esdecir,lasneuronasdelacapadesalidaemplean funciones de activación lineales, como f(x) = x. 19
Por esta razón, para la realización de este trabajo se han estudiado modelos neuronales de sistemas mediante el empleo de redes neuronales prealimentadas que cumplen estas condiciones. Dentro de las redes neuronales prealimentadas, la más común es el perceptrón multicapa (multi-layer perceptron, MLP),compuestaspormúltiples capasde neuronas,estandotodaslascapastotalmenteconectadas,esdecir,cadaneurona de una capa conecta con todas las neuronas de la capa siguiente. Las capas de los perceptrones multicapa se dividen en tres secciones (Figura 6): la capa de entrada, encargada de recibir y procesar las señales de entrada; las capas ocultas, encargadas de procesar las datos mediante una o más capas de neuronas; y la capa de salida, que produce el resultado de salida de la red. ··· ··· ··· ··· ··· ··· Capas ocultasCapa de entrada Capa de salida Figura 6: Esquema de un perceptrón multicapa (MLP) Los perceptrones multicapa pueden clasificarse según su número de capas ocultas. Los MLP con más de una capa oculta se denominan redes neuronales profundas (deep neural network), mientras que las redes con una única capa oculta, en contraste, se las denomina redes neuronales no-profundas (shallow neural network). Debido a que el Teorema de Aproximación Universal asegura que los MLP con una única capa oculta (ya que requiere dos capas, una capa oculta y la de salida), es decir, MLP no-profundos, son capaces de realizar el trabajo deseado, son estas redes las que se han empleado. 20
La mayor restricción de los MLP son su poca capacidad de extrapolación, por lo que los resultados obtenidos de datos fuera del rango de datos empleado en el entrenamiento pueden tener bastante error. Es por este motivo que es importante estudiar bien el rango de valores en el que va a trabajar el sistema a modelar, y entrenar la red con entradas que representen bien este rango de valores, especialmente hacia los límites. Esto, unido a la limitación en la convergencia del algoritmo de entrenamiento de propagación hacia atrás, que puede hacer que los parámetros de la red converjan a un mínimo local, tal y como se ha explicado anteriormente; hace que se deba prestar atención al diseño del entrenamiento y de los datos datos empleados en él, ya que ambas limitaciones son eludibles hasta cierto punto, con un diseño adecuado. Una vez establecida la elección de la familia de redes neuronales a emplear, en este caso, perceptrones multicapa no-profundos, se debe elegir cual será el conjuntodeentradasdelaredempleado,alquesedenominavector de regresión, ya que las variables empleadas como entradas se denominan regresores. Existen distintas estructuras de redes neuronales según el vector de regresión empleado. Las variables que se pueden emplear como regresores son: Entradas externas o exógenas actuales y pasadas a la red (u) Salidas pasadas reales (medidas) del sistema (y) Salidas pasadas calculadas por la red (salidas predichas) (ˆy) Error de salida pasado calculado (ey=y−ˆy) Cabe destacar que las dos últimas dependen de la salida de la propia red, por loquesiseempleancomoregresores,laredefectivamentefuncionaríacomouna red recurrente, ya que existiría un ciclo en las conexiones; aunque estrictamente hablando, la red seguiría siendo prealimentada, debido a que entre la capa de entrada y salida no hay ciclos, este existe fuera de la red. La primera y más simple de las estructuras MLP es la estructura NNFIR (Neural Network Finite Impulse Response, red neuronal de respuesta finita al impulso), empleada como predictor FIR no-lineal, por lo que posee el mismo vectorderegresiónqueestosmodelos.LosmodelosFIRserepresentanmediante la siguiente ecuación, donde q−1representa un retardo unitario: y(k) = B(q)u(k) + e(k) = b0u(k) + b1u(k−1) + · · · +bnu(k−n) + e(k) 21
De esta forma, el predictor, en este caso la red neuronal (Figura 7), sigue la ecuación ˆy(k|θ) = B(q)u(k),dondeθserefierealosparámetrosdelaredneuronal, ya que la salida depende de ella; y por tanto, según la ecuación el vector de regresión ϕF IR(k)es: ϕF IR(k) = [u(k), u(k−1), u(k−2), . . . , u(k−n)]T Red neuronal Figura 7: Red neuronal NNFIR De esta forma, las entradas de la red son únicamente las entradas exógenas del sistema u. Este predictor, y por tanto, esta estructura de red neuronal, aunque es siempre estable, presenta un problema, ya que muchos sistemas dinámicos, incluidos los trabajados en este proyecto, necesitan información de los estados pasados de la salida, y por tanto, no es capaz de modelar con precisión el sistema deseado, incluso introduciendo un número elevado de muestras de la entrada u. EstopuedeparecercontradeciralTeoremadeAproximaciónUniversal,yaque se cumplen todas las condicionesy, sin embargo, este modelo no es viable para el trabajo a realizar. En este caso, el detalle radica en que este teorema asegura que se puede aproximar cualquier función, pero no especifica el número de neuronas necesario. Para este caso, debido a la problemática con los sistemas dinámicos, este número de neuronas tendría que ser muy elevado, y por tanto, la red sería computacionalmente inviable para el trabajo realizado, ya que se desea emplear estos modelos en sistemas de control en tiempo real. Unasoluciónaesta problemáticapasa porintroducir lasprediccionespasadas de la red como entradas, creando así la estructura NNOE (Neural Network Output Error, red neuronal de error de salida). Los modelos OE se representan mediante una ecuación similar a la de los modelos FIR: y(k) = B(q) F(q)u(k) + e(k) F(q) = 1 + f1q−1+f1q−1+f2q−2+· · · +fnyq−ny 22
Así, en estos modelos, el predictor sigue la ecuación ˆy(k|θ) = B(q) F(q)u(k). Operando, puede comprobarse fácilmente que, efectivamente, la salida predicha depende de sus predicciones anteriores ˆy(k), siendo así su vector de regresión ϕOE(k): ϕOE(k) = [u(k), u(k−1), u(k−2), . . . , u(k−n),ˆy(k−1), . . . , ˆy(k−ny)]T Red neuronal Figura 8: Red neuronal NNOE Sin embargo, tal y como se ha comentado anteriormente, y se observa en la Figura 8, estas redes neuronales introducen una realimentación de la salida, convirtiéndolas en redes recurrentes. La gran desventaja de estos modelos es que, debido a la realimentación, es más difícil reducir el error durante el entrenamiento, debido a un cálculo más complejo de los gradientes de errores. Adicionalmente, la estabilidad de este predictor depende de F(q), que depende de los parámetros de la red, por lo que debe ser monitorizada durante el entrenamiento para evitar que el predictor se inestabilice [8]. Unaestructuraqueevitalosproblemasdelosdosanterioresesladenominada estructura NNARX (Neural Network AutoRegressive eXogenous, red neuronal autorregresiva exógena). Esta es otra modificación sobre los modelos FIR, pero a diferencia de los modelos OE, donde se emplean las salidas predichas ˆy, se emplean las salidas realesmedidas del sistemay. De estaforma, losmodelosARX se representan mediante la siguiente ecuación: A(q)y(k) = B(q)u(k) + e(k) Mediante esta modificación, el predictor evita emplear sus propias salidas, evitando crear ningún tipo de realimentación. De esta forma, la ecuación del predictor es la siguiente: ˆy(k) = b0u(k) + b1u(k−1) + · · · +bnu(k−n)−a1y(k−1) − · · · − anyy(k−ny) 23
Tal y como se ve en la ecuación, se puede también decir que el vector de regresión ϕARX (k)en este caso es: ϕARX (k) = [u(k), u(k−1), u(k−2), . . . , u(k−n), y(k−1), . . . , y(k−ny)]T Red neuronal Figura 9: Red neuronal NNARX Mediante este modelo, es posible realizar la identificación de sistemas dinámicos como los modelados en este trabajo; a la vez que se evitan los problemas derivados de la realimentación de las predicciones. Adicionalmente, estos predictores son siempre estables. Por otro lado, una de las mayores limitaciones que presentan los predictores NNARX es derivada de la necesidad de utilizar las salidas reales, es decir, se presenta en la obtención y medición de estos datos. Gracias a las ventajas ofrecidas por este tipo de modelos, es posible afrontar la identificación de los sistemas deseados. Además, en este trabajo se emplean, como se detalla más adelante, sistemas sintéticos en simulación, por lo que en estos casos, esta problemática puede obviarse. De esta forma, las redes neuronales con estructura NNARX poseen múltiples cualidades que hace que se ajusten a las necesidades del proyecto: Capaces de modelar las dinámicas de los sistemas empleados con un número de neuronas reducido, a diferencia de los predictores FIR. Los predictores son estables. El entrenamiento es más simple que el de los predictores NNOE, debido a que no necesitan de realimentación de las salidas predichas ˆy. Eluden la mayor limitación debido a su uso en simulación, donde la obtención de las salidas reales no presenta ningún problema. Son todas estas las razones, de forma combinada, por las que se ha empleado esta estructura para el desarrollo del trabajo. 24
6.1.1. Preparación de los datos de entrenamiento Antesdeprocederal entrenamientode la red,se han obtenidolosdatos de las entradas de la red a emplear tanto en el entrenamiento, como en la validación. En el caso que nos ocupa, al tratarse de redes neuronales de tipo NARX, estas entradassedividenendosgrupos:lasentradasexógenasu(denominadasinputs), y salidas reales del sistema y(targets). Para la obtención de estos datos, se deben obtener las variables de entrada y salida para un determinado número de muestras. En el caso de sistemas reales, estos datos se obtendrían mediante mediciones de las variables de entrada y salida en cuestión. Sin embargo, en el caso que nos ocupa, los sistemas a modelar son sistemas simulados, por lo que la obtención de los datos de salida se realizará mediante la simulación de los sistemas para unas entradas definidas. Para la generación de estas entradas, se ha desarrollado una función a la que se le ha denominado camino aleatorio saturado (saturated random walk). Esta función tiene tres entradas: tamaño del vector, rango de salidas, y probabilidad de cambio p. En cuanto al funcionamiento, es similar a un random walk estándar: inicializa el primer elemento del vector a un valor aleatorio (distribución uniforme) dentro del rango, y tras esta primera muestra, para cada muestra subsecuente k, hasta rellenar el vector: Toma un nuevo valor aleatorio con probabilidad p, que es uno de los parámetros de entrada de la función En caso contrario, mantiene el mismo valor que la muestra anterior k−1 Sin embargo, la diferencia fundamental que se incorpora en este caso, es que el rango de valores aleatorios se aumenta en un porcentaje, a lo que se le denomina rango aumentado. Sin embargo, los valores dentro de este nuevo rango se saturan posteriormente, es decir, en caso de tomar valores fuera del rango original, estos se sustituyen por el límite inferior (si el valor es inferior a este) o el límite superior (si el valor es superior a este). Enelprogramautilizadoelincrementodelrangoesdel20 %,encadadirección, es decir, si el rango original es [−1,1], el rango total es de 2, por lo que el rango aumentado es [−1,4,1,4]. Así, al generar los valores aleatorios, en caso de que estuvieran en el rango [−1,4,−1), estos se sustituyen por el límite inferior −1, y en caso de obtener valores en el rango (1,1,4], estos se sustituyen por el límite superior 1. 31
El objetivo de esta modificación es generar una mayor cantidad de muestras en los extremos de los rangos de entrenamiento, donde se busca que la red neuronal aprenda bien estos valores, ya que, como se ha dicho, las redes MLP poseen poca capacidad de extrapolación. Mediante el método del camino aleatorio saturado, se obtiene una señal de entrada con los beneficios del camino aleatorio, es decir, variedad de puntos de operación y cambios de entradas, con el beneficio adicional de un mejor entrenamiento de la red para los puntos en los límites del rango de aprendizaje. La probabilidad de que, al generar un nuevo número aleatorio, este sea el límite superior o inferior (psup, pinf ) depende de los incrementos de rango realizados (∆rsup,∆rinf ): psup =∆rsup 1+∆rsup + ∆rinf pinf =∆rinf 1+∆rsup + ∆rinf En el caso empleado, donde ambos incrementos son del 20% (∆rsup = ∆rinf = 0,2),estaprobabilidadesdecercadel15 %(1 7,parasermásexactos).Comparando la señal obtenida para ambos casos, se puede observar esta tendencia a obtener muestras en los extremos (Figura 12, misma semilla de generación, 100 muestras, y probabilidad de cambio p= 0,4). 0 25 50 75 100 -1 -0.5 0 0.5 1Camino aleatorio 0 25 50 75 100 -1 -0.5 0 0.5 1Camino aleatorio saturado 0 25 50 75 100 -1 -0.5 0 0.5 1Valores ordenados Esperado Real 0 25 50 75 100 -1 -0.5 0 0.5 1Valores ordenados Esperado Real Figura 12: Comparación entre camino aleatorio ycamino aleatorio saturado 32
6.1.2. Diseño de la red Figura 13: Visualización de una red neuronal NARX en MATLAB Una vez obtenidos los datos de entrada, y de aplicar el sistema simulado a estos para obtenerlosdatosdesalida,sepuedeproceder a realizar el entrenamiento de la red neuronal que se empleará como modelo del sistema. Además de estos datos, es necesario diseñar la red. La elección de la estructura de la red es el primer paso del diseño, en este caso, como se ha comentado, se han elegido redes neuronales con la estructura NARX en lazo abierto (Figura 13). Acontinuación,sedebeconcretarlaarquitectura de la red: se deben seleccionar las entradasdelared,yelnúmerodecapasocultasy neuronasencadacapaoculta,aunqueesconveniente empezar con una única capa oculta, por simplicidad, y por el Teorema de Aproximación Universal, que asegura que no es necesario emplear más de una. Respecto al número de entradas y su retardo, y el número de neuronas, se realiza una primera estimación de estas basada en experiencia previa y conocimiento del sistema. Cabe destacar, que es mejor realizar una estimación por debajo del ideal para evitar sobreparametrizar la red neuronal, que aumentaría el coste computacional, y además reduciría la capacidad de generalización de la red. Por ejemplo, si sabemos que por la dinámica del sistema, y según el tiempo de muestreo y pruebas realizadas, únicamente tienen un impacto notable en la salida, la entrada u actual y la anterior (u(k)yu(k−1)), los entradas de la red no incluirán muestras anteriores de esa misma entrada (u(k−2), u(k−3), . . . ). 33
6.1.3. Creación y entrenamiento de la red Tras diseñar la red, estableciendo la estructura y arquitectura de la misma, puede dar comienzo el entrenamiento de la red neuronal. Para realizar este proceso, como se ha comentado, se han empleado las herramientas de la ”Deep Learning Toolbox” de MATLAB. En primer lugar, se ha creado una red neuronal NARX mediante la función narxnet. En esta función tambiénsedeben especificar lasentradas, definiéndolascomo los retardosde las dos entradas a emplear (input ytarget), los números de neuronas de cada capa oculta, la realimentación de la red, y el algoritmo de entrenamiento a emplear. En el caso que nos ocupa, los dos últimos parámetros serán los mismos para todos los casos, ya que las redes empleadas han sido redes neuronales NARX en lazo abierto (sin realimentación de las salidas), y el algoritmo de entrenamiento empleado ha sido el algoritmo de Levenberg-Marquardt. Respecto a los retardos delas entradas yel númerode neuronas,estos variarán paracada aplicación.Aún así, al solo utilizar redes con una única capa oculta, se debe especificar un único número de neuronas. Así, en un caso donde se desee crear una red net con 8 neuronas en la capa oculta, y cuyas entradas sean [u(k), u(k−1), y(k−1)], la instrucción a utilizar sería: net = narxnet (0:1 ,1 ,8 , ' open ','trainlm '); Una vez creada la red neuronal, para entrenarla se emplea la funcionalidad train. Sin embargo, se deben realizar varios pasos antes de poder realizar el entrenamiento, ya que el formato de los datos obtenidos y el formato empleado en las redes neuronales por MATLAB son diferentes. Los datos de entrenamiento se obtienen como vectores o matrices, donde cada fila corresponde a una entrada del sistema y cada columna a un instante de tiempo o muestra. Por ejemplo, en un sistema con 2 entradas, si tomamos 1000 muestras, los datos tendrán el formato de una matriz de tamaño 2x1000. Sin embargo, MATLAB emplea un formato diferente para las redes neuronales que, en vez de una matriz numérica, emplea el denominado formato celda (cell). En este formato, los datos son una fila de celdas, donde cada celda ialmacena un vector con todas las entradas de la muestra i. En adición a esta diferencia entre los tipos de variable de los datos, se añade que MATLAB divide los datos, diferenciando los denominados estados iniciales del resto de datos. Estos estados iniciales son aquellas muestras que, debido a los retardos de la red, no pueden utilizarse como ”muestra actual”para el cálculo. 34
Para explicar esto, es mejor suponer un ejemplo. Suponiendo que la muestra másantiguaqueusanuestraredesu(k−3),esosignificaqueparalastresprimeras muestras(k= 1,2,3), la entradacorrespondienteadichamuestramásantiguano existiría. MATLAB soluciona esto empezando desde los cálculos desde la cuarta muestra, y definiendo las tres primeras muestras como estados iniciales. Sabiendo cómo opera MATLAB y que formatos son los que usa, se puede hacer manualmente, cambiando de tipo los datos y dividiéndolos según MATLAB establece. Sin embargo, el propio entorno ya incluye estas funcionalidades, en las funciones tonndata ypreparets. La primera función tiene tres parámetros, y son sencillos: el primero son los datos a transformar, el segundo indica si cada muestra (instante de tiempo) se almacena en una columna (en este caso es true), y el último indica si los datos son una celda (en este caso es false, porque es una matriz o un vector). Así, este cambio de tipo de variable de los datos de entrenamiento inVector y tgVector puede realizarse mediante el siguiente código: inCell = tonndata ( inVector , true , false ); tgCell = tonndata ( tgVector , true , false ); La segunda función es más compleja, ya que posee cuatro parámetros de entrada, y otros cuatro de salida. Los parámetros de entrada son, en orden: red neuronal, entradas (obtenidas de la anterior función), targets no realimentados (vacío en este caso), y targets realimentados (estos son los targets en el caso de las redes NARX). Porsulado,lascuatrosalidassonlosdatosenelformatoqueMATLAB emplea: datos de entrada (incluye inputs ytargets), estados iniciales de las entradas, estados iniciales de las capas, y datos de targets (para las salidas de la red). [inData ,inStat ,layStat ,tgData ] = preparets( inCell ,{} , tgCell ); Finalmente, es necesario modificar diversos parámetros de la red. Estos parámetros son los ratios de división de muestras divideParam. Estos indican que fracción de las muestras se emplean en el entrenamiento (trainRatio), en la validación (valRatio), y en la comprobación (testRatio) de la red. En este caso, al hacer la validación de forma independiente al entrenamiento, se desea que todos los datos se usen para el entrenamiento. net . divideParam . trainRatio = 1; net . divideParam . valRatio = 0; net . divideParam . testRatio = 0; 35
De esta forma, una vez realizadas todas estas operaciones, tanto la red como los datos de entrenamiento están configurados y con el formato adecuado para poder realizar el entrenamiento mediante la instrucción train: [net , trRec ] = train (net ,inData , tgData ,inStat , layStat ); Figura 14: Ventana de entrenamiento de red Además de la red entrenada, esta función también crea un registro del entrenamiento (trRec), donde almacena diversos datos sobre los parámetros y resultados del entrenamiento. Durante el entrenamiento, se crea una ventana (Figura 14) con diversa información relevante. En ella aparecen los valores mínimo, actual y máximo de diversas variables, entre otras: Iteración actual (epoch) Rendimiento de la red (performance) calculada según el algoritmo que aparece en la parte inferior, en el caso que nos ocupa, error cuadrático medio (MSE, Mean Squared Error) Gradiente del error (gradient) Estos parámetros de entrenamiento (límites inferior y superior), están almacenados dentro de la variable net, donde son denominados trainParam y pueden modificarse de forma similar a los ratios de división de muestras mencionados anteriormente. Además de observar la evolución de estos datos durante el entrenamiento, desde la parte superior de esta ventana también se puede generar un diagrama de la red, similar al de la Figura 13, o generar, desde la parte inferior, gráficos en tiempo real de la evolución de diversas variables de entrenamiento como el rendimiento. 36
6.1.4. Validación de la red Una vez finalizado el entrenamiento de la red neuronal, el último paso antes de tomar el modelo neuronal como bueno es realizar la validación del mismo. Este paso consiste, como se ha explicado, en comprobar que la red neuronal representa correctamente el sistema modelizado y es capaz de generalizar el comportamiento de este más allá de los datos de entrenamiento, cualquier entrada dentro del rango de entrenamiento. Para esto, a diferencia del diseño, creación y entrenamiento de la red, no se han empleado las funciones propias de MATLAB, sino que se ha desarrollado de cero una función equivalente que realice las operaciones de la red neuronal. Elobjetivode esto esreducirel costecomputacional de la red,yaque lasredes de MATLAB (formato network) almacenan muchísima información sobre la red, como datos de parámetros de entrenamiento, detallessobre mapeo de entradas, o parámetros de inicialización de los valores de la red, entre otros muchos. Esto resulta muy útil, pero muy pesadas a la hora del cálculo, especialmente con vistas a su implantación como modelos para control en tiempo real. 6.1.4.1. Datos de la red reducida y cálculo matricial de salidas De esta forma, se ha optado por una función que extrae los parámetros relevantes para el cálculo de las salidas de la red (pesos y bias de las neuronas, retardos y mapeo de entradas,…), obteniendo así una estructura (formato struct) con esos datos, a la que se ha denominado red reducida. Es esta red reducida la que se ha empleado para el cálculo de las salidas de la red. Además, debido a cómo guarda MATLAB la información de la red, podemos usar la gran capacidad de MATLAB para el cálculo matricial para acelerar los cálculos. En primer lugar, las entradas a la red se dividen en dos vectores, inputs y targets. Por consistencia con los formatos que emplea MATLAB, estos vectores son de tamaño p×1para el vector de inputs, y de tamaño q×1para el de targets. 37
El formato empleado puede visualizarse con facilidad con un ejemplo para el caso de una red con 3 entradas exógenas y 2 salidas, donde las entradas de la red son [u(k), u(k−1), y(k−1), y(k−2)]. En este ejemplo, los vectores de entrada serían: Uin = u1(k) u2(k) u3(k) u1(k−1) u2(k−1) u3(k−1) Utg = y1(k−1) y2(k−1) y1(k−2) y2(k−2) De esta forma, pes el producto entre el número de entradas exógenas (número de entradas del sistema) y el número de muestras distintas de esta entrada (2, ya que usa las muestras kyk−1); y qes el producto entre el número de targets (igual al número de salidas del sistema) y el número de muestras distintas de esta entrada (muestras k−1yk−2). Estas entradas entran a la red y pasan por la capa de entrada. El objetivo de esta capa es escalar y normalizar las entradas de una forma lineal (y=mx +n), de forma que el rango de datos empleado en el entrenamiento se mapee al rango [−1,1]. Para realizar esto, se almacenan en la red reducida un punto de la recta y la pendiente m. El punto corresponde al punto del valor mínimo del rango de entrenamiento que, como se ha comentado, se mapea al -1, por lo que el punto es (xmin,−1). Como es de esperar, las transformaciones de las entradas de inputs ytargets son diferentes, ya que trabajan en rangos distintos. Con ambos datos, se puede escalar cualquier punto de las entradas, y si están dentro del rango de entrenamiento (que así debería ser para evitar extrapolaciones y mejorar el rendimiento de la red), se mapeará a un valor en el rango [−1,1]: uin =−1+min ·(Uin −xminin) utg =−1+mtg ·(Utg −xmintg) Respecto a la capa oculta, MATLAB guarda los pesos de las neuronas en matrices, donde cada fila corresponde a cada una de las nneuronas de la capa, y cada columna a un elemento de la entrada. Como la capa oculta recibe dos entradas(inputs ytargets),setienendosmatricesdepesos,unaporcadaentrada. La matriz de pesos de inputs es de tamaño n×p, y la matriz de pesos de targets es de tamaño n×q. 38
Por otro lado, los bias de las neuronas se almacenan en un vector de tamaño n×1, donde cada elemento corresponde a cada una de las neuronas, de forma similar similar a las matrices de pesos. De esta forma, los parámetros de las neuronas de la capa oculta se almacenan en tres matrices: Win = w1in1w1in2· · · w1inp w2in1w2in2· · · w2inp w3in1w3in2· · · w3inp . . .. . ..... . . wnin1wnin2· · · wninp Wtg = w1tg1w1tg2· · · w1tgq w2tg1w2tg2· · · w2tgq w3in1w3in2· · · w3inp . . .. . ..... . . wntg1wntg2· · · wntgq Bh= bh1 bh2 bh3 . . . bhn Así, con estas matrices y vectores, se puede operar para obtener la salida de las neuronas de capa oculta, recordando que se aplica la función de activación de la neurona, en este caso, la función tangente hiperbólica (tanh(x)), denominada en MATLAB tangente sigmoidal (tansig). De esta forma, la salida de las neuronas dela capa oculta (oh) es unvectorde tamañon×1, siendocada elementolasalida de cada neurona: oh=tanh(Win ·uin +Wtg ·utg +Bh)oh= oh1 oh2 oh3 . . . ohn La capa de salida funciona de forma similar a la capa oculta, sin embargo, esta capa solo tiene una entrada (las salidas de la capa oculta), por lo que tendrá una única matriz de pesos, de tamaño o×n, siendo oel número de salidas de la red neuronal; además de su vector de bias de tamaño o×1: Wo= w11 w12 · · · w1n w21 w22 · · · w2n . . .. . ..... . . wo1wo2· · · won Bo= bo1 bo2 . . . bon 39
De forma similar a la capa oculta, operando estas matrices y vectores, se obtiene la salida final de la red. En este caso, la función de activación es lineal, por lo que la salida de la red (onet) es: onet =Wo·oh+Boonet = o1 o2 . . . oo Cabe destacar que esta salida (onet) debe desnormalizarse, siguiendo el proceso inverso al realizado para la entrada del target (ya que usa los mismos parámetros). De esta forma, teniendo los valores xmin ymcorrespondientes al target, podemos obtener la salida real (Onet) mediante la siguiente operación: xminout =xmintg mout =mtg Onet =xminout +onet −(−1) mout De esta forma, en resumen, la red reducida debe contener las matrices de pesos y vectores de bias, tanto de la capa oculta, como de la capa de salida, además de los parámetros de normalización (xmin, y pendiente m) de las dos entradas. Así, la función de reducción de la red desarrollada toma una red de tipo network, y crea una red reducida de tipo struct, con estos datos. Por otro lado, se ha desarrollado la función que reproduce las operaciones de la red aplicando las operaciones matriciales mencionadas, capa a capa: capa de entrada (normalización de entradas), capa oculta, y capa de salida (cálculo de salida y desnormalización). A esta función se la denominará, por simplicidad, función NARX. 40
-2 -1 0 1 2 Entrada u -3 -2 -1 0 1 2 3 4 5 Salida y SNL5 -2 -1 0 1 2 Entrada u -8 -6 -4 -2 0 2 4 6 8 Salida y SNL1 Figura 17: Entradas y salidas de los sistemas en régimen estacionario 6.2.1. Sistema SISO no-lineal El primero de los sistemas modelizados es el sistema SNL5. Como se ha comentado, se ha comenzado por un sistema simple, sobre el que se basan el resto. Estesistemaesunsistemaconunaúnicaentradayunaúnicasalida(SISO),nolineal,quepermiterealizarunaprimera aproximaciónalproblemaquenosocupa. Deestaforma,elsistemaamodelareseldadoenlaEcuación6.1.Sinembargo, para el caso que nos ocupa, es mejor reescribirla de forma que la salida calculada sea la salida actual yk. Aunque este paso puede resultar redundante, es mejor escribirla así para ver, interpretar, y extraer información de ella con mayor facilidad ya que, en cuanto a los retardos empleados en MATLAB, la salida de la red se define como la salida de lamuestraactual (retardo0).Así, laecuaciónque representaelsistemaa modelar es: yk=1,5·yk−1·yk−2 1 + y2 k−1+y2 k−2 + 0,7·sin(0,5 (yk−1+yk−2)) ·cos (0,5 (yk−1+yk−2)) + 1,2uk−1 Esta ecuación puede ser simplificada aplicando identidades trigonométricas, resultando en la ecuación final del primer sistema modelado: yk=1,5·yk−1·yk−2 1 + y2 k−1+y2 k−2 + 0,35 ·sin(yk−1+yk−2)+1,2uk−1(6.3) 47
De esta forma, tras reescribirla, en la Ecuación 6.3 puede observarse que las únicas entradas que tienen impacto en la salida ykson [uk−1, yk−1, yk−2]. De esta forma, gracias al conocimiento del sistema, se conocen los retardos máximos de las entradas, y pueden establecerse sus rangos de barrido sin necesidad de estimación. En este caso, los retardos de las entradas exógenas (input) serán 0 o 0/1, mientras que los retardos de target serán 1 o 1/2. Por otro lado, debido a que se trata se un sistema SISO, y no excesivamente complejo, el número de neuronas se establecerá en el rango de entre 2 y 6. Esta se trata de una estimación basada en la experiencia previa, por lo que en caso de dar mal resultado, puede cambiarse. Respecto al número de repeticiones de cada red, se establecerá en 4, para reducir el número de redes a entrenar, ya que no se estima que se requiera acercarse en exceso al modelo óptimo, debido a la baja complejidad del sistema. 6.2.2. Sistema MIMO no-lineal Para el segundo sistema modelizado, se ha creado un sistema MIMO. Este sistema está compuesto por los dos sistemas no-lineales no presentados, SNL5 y SNL1, de forma independiente, es decir, sin acoplamiento entre ambos. El objetivo de este segundo sistema es, una vez estudiada la viabilidad de los modelos neuronales para la modelización del anterior sistema SISO no-lineal, buscar ampliarlo a sistemas MIMO, mucho más complejos y cercanos a los sistemas reales. La razón por la que se han elegido estos dos sistemas sintéticos para formar el sistema MIMO es por sus distintos comportamientos no-lineales, comentados anteriormente: en SNL5 los puntos de operación siguen una función con ondulaciones, mientras que en SNL1, esta relación sigue una función cúbica, creando grandes variaciones en la salida con pequeñas variaciones en la entrada, si está alejada del cero. Así, se desea estudiar el comportamiento de la red intentando representar simultáneamente estos dos comportamientos. Por otro lado, se ha decidido no incluir acoplamiento entre ambos sistemas para estudiar el efecto de la complejidad introducida por las múltiples entradas y salidas, antes de afrontar otras fuentes de complejidad. 48
De esta forma, el sistema desarrollado, como en el caso anterior, asignando la salida al instante actual, y aplicando la identidad trigonómetrica para la ecuación correspondiente al sistema SNL5, se define por las siguientes ecuaciones: y1,k =1,5·y1,k−1·y1,k−2 1 + y2 1,k−1+y2 1,k−2 + 0,35 ·sin(y1,k−1+y1,k−2)+1,2u1,k−1 y2,k =y2,k−1 1 + y2 2,k−1 +u3 2,k−1 (6.4) Observando la Ecuación 6.4, puede verse que, al igual que para el anterior sistema, las únicas entradas que tienen impacto en la salida ykson [uk−1, yk−1, yk−2]. Por tanto, gracias al conocimiento del sistema (ya que se conocen las ecuaciones), se pueden definir de igual manera los rangos de barrido de las entradas de la red: los retardos de input serán 0 o 0/1, mientras que los retardos de target serán 1 o 1/2. Sin embargo, al ser en este caso, un sistema más complejo que el anterior, el número de neuronas del rango será mayor. En este caso, se estima que el número deneuronasestéentre8y20.Además,parareducirelnúmeroderedesaentrenar, se establecerán valores en saltos de 2 neuronas (8,10,12,14,16,18,20). Finalmente, debido aque el sistemaes máscomplejo,yportanto,los entrenamientos pueden resultar, por aleatoriedad, en redes poco optimizadas (lejos del error mínimo global de entrenamiento). Para lograr con mayor seguridad redes más optimizadas, se ha elevado el número de repeticiones, respecto al caso anterior, a 10 repeticiones para cada combinación de parámetros. 49
7. Análisis de los resultados En este apartado se analizarán los resultados obtenidos durante el trabajo realizado, presentando y describiendo el modelo neuronal obtenido para cada uno de los sistemas modelados, además de presentar datos que justifiquen las elecciones realizadas. Así, se incluye un apartado por cada sistema modelizado, donde se presentarán los resultados obtenidos durante el entrenamiento y validación de las redes, y al final de cada uno de ellos, finalmente se concluirá cuál es el modelo elegido. 7.1. Sistema SISO no-lineal Para realizar el proceso de entrenamiento de este sistema, se ha empleado una entrada de entrenamiento, como se ha comentado en la sección anterior, siguiendo la función camino aleatorio saturado. La entrada (Figura 18) contiene 300 muestras (instantes de tiempo), con una probabilidad de cambio en cada muestra del 20%. Respecto al rango de valores, se ha decidido emplear valores de uen el rango [−2,5,2,5], debido a que representa una diversidad de puntos de operación y zonas con no-linealidades. 0 50 100 150 200 250 300 -2.5 -2 -1 0 1 2 2.5 u Entradas de entrenamiento 0 50 100 150 200 250 300 -4 -2 0 2 4 y Salidas de entrenamiento Figura 18: Datos de entrada y salida de entrenamiento para el sistema SISO no-lineal 50
Respecto a la entrada de validación, se ha empleado una entrada (Figura 19) con las mismas características que la entrada de entrenamiento. 0 50 100 150 200 250 300 -2.5 -2 -1 0 1 2 2.5 u Entradas de validación 0 50 100 150 200 250 300 -4 -2 0 2 4 y Salidas de validación Figura 19: Datos de entrada y salida de validación para el sistema SISO no-lineal Con estos datos de entrenamiento y validación, se ha procedido a la creación, entrenamiento y validación de las redes neuronales mediante el barrido de parámetros. Tras realizar este proceso, y procesar la estructura de datos para obtener la mejor red para cada combinación de número de neuronas y retardos de input y target, se obtienen los siguientes gráficos comparativos de los tres rendimientos calculados: error cuadrático medio (MSE) y error absoluto máximo (MaAE) en lazo abierto (Figura 20), y MSE en lazo cerrado (Figura 21), como medida de la divergencia. 0 0.5 2 [0]&[1] MSE SNL5 1 3 Neuronas [0]&[1,2] 1.5 4 Retardos de input y target [0,1]&[1] 5 6 [0,1]&[1,2] 0 2 2 [0]&[1] MaAE SNL5 4 3 Neuronas [0]&[1,2] 6 4 Retardos de input y target [0,1]&[1] 5 6 [0,1]&[1,2] Figura 20: MSE y MaAE en lazo abierto de configuraciones de redes para el sistema SISO 51
02 [0]&[1] 1 MSE Lazo Cerrado SNL5 3 Neuronas [0]&[1,2] 2 4 Retardos de input y target [0,1]&[1] 5 6 [0,1]&[1,2] Figura 21: MSE en lazo cerrado de configuraciones de redes para el sistema SISO Tal y como se observa en las Figuras 20 y 21, los parámetros barridos que tienen mayor impacto en la calidad del modelo neuronal obtenido son los retardos de entradas, particularmente los retardos de input, que reducen drásticamente el error en los tres casos graficados. Por otro lado, insertar a la red un mayor número de muestras de target tambiénmejoraelrendimiento(menoresíndicesderendimiento,yaquesetratan de medidas de error: MSE, MaAE,…), aunque únicamente en el caso que los retardosde input sean0y 1,es decir,las entradas exógenasala redsean [uk, uk−1]. Para estos casos, insertar yk−2además de yk−1genera una mejora adicional del rendimiento de los modelos neuronales. Sin embargo, aunque sí se nota una mejoría al aumentar el número de neuronas, el impacto en el rendimiento de la red tampoco es muy elevado. De hecho, esta mejora es tan pequeña que, debido al aumento del tiempo de computaciónnecesarioparaconseguirlo,esmejorelegirredesdetamañomedio. Así, las redes que resultan más prometedoras son las redes con retardos de input 0 y 1, de 4 a 6 neuronas. A continuación, para poder comparar los datos de forma más exacta, se presentan las tablas que contienen los datos exactos para estas redes: [inDel]&[tgDel] 4 neuronas 5 neuronas 6 neuronas [0,1]&[1] 0.1751 0.1679 0.1767 [0,1]&[1,2] 0.0416 0.0096 0.0098 Tabla 4: MSE en lazo abierto de preselección de redes para el sistema SISO 52
[inDel]&[tgDel] 4 neuronas 5 neuronas 6 neuronas [0,1]&[1] 1.5345 1.6432 1.6660 [0,1]&[1,2] 0.6128 0.3032 0.5264 Tabla 5: MaAE en lazo abierto de preselección de redes para el sistema SISO [inDel]&[tgDel] 4 neuronas 5 neuronas 6 neuronas [0,1]&[1] 0.2224 0.1705 0.1832 [0,1]&[1,2] 0.0500 0.0548 0.0202 Tabla 6: MSE en lazo cerrado de preselección de redes para el sistema SISO Tras observar con más detalle los datos, se ha decidido descartar las redes con retardo de target 1, especialmente debido a que el error absoluto máximo que presentan (Tabla 5) es elevado. De las redes restantes, sólo falta elegir el número de neuronas en la capa oculta. Así,sehadecididoemplearlaredcon5neuronas,yaquemuestraunresultado sobresaliente, mejor incluso que la red con 6 neuronas excepto en la validación en lazo cerrado, aunque también obtiene muy buenos resultados. Respecto a la red con 4 neuronas, su rendimiento también es muy bueno, y tiene un coste computacional menor pero, comparativamente, su rendimiento en lazo abierto es peor que la red con 5 neuronas. De esta forma, el modelo neuronal obtenido para representar el primer sistema objetivo es una red neuronal con 5 neuronas, retardos de input 0 y 1, y retardos de target 1 y 2, por lo que sus entradas son [uk, uk−1, yk−1, yk−2]. Representando la respuesta del sistema durante la validación en lazo abierto (Figura 22) realizada, se puede comprobar que su respuesta es muy buena, siguiendo la salida real con error muy reducido, excepto en el límite superior del rango de valores, donde se aprecia un ligero error, aunque muy reducido. Por otro lado, para esos mismos valores (límite superior del rango), la validación en lazo cerrado (Figura 23) presenta errores notables en los casos en los que la entrada se mantiene en el límite superior durante varias muestras. Sin embargo, también se comprueba que para el resto de valores, la respuesta es excelente, muy cercana a la salida real. De hecho, incluso en los momentos que la red toma como entrada predicciones anteriores con error (ya que trabaja en lazo cerrado), la respuesta sigue siendo buena, por lo que es capaz de rechazar estos errores. Cabe destacar que, aunque no se ha representado, se ha comprobado que la red con 4 neuronas no posee este error en la validación en lazo cerrado, aunque presenta errores ligeramente mayores de forma general. De esta forma, esta red puede ser una alternativa en casos en los que este comportamiento en lazo cerrado del modelo seleccionado pueda resultar problemático. 53
Num Neuronas = 5 | inputDelay [0,1] - targetDelay [1,2] 0 50 100 150 200 250 300 -4 -3 -2 -1 0 1 2 3 4 5Validación en lazo abierto SNL5 Target RNA Figura 22: Respuesta del modelo neuronal para el sistema SISO obtenida para validación en lazo abierto Num Neuronas = 5 | inputDelay [0,1] - targetDelay [1,2] 0 50 100 150 200 250 300 -4 -3 -2 -1 0 1 2 3 4 5 6Validación en lazo cerrado SNL5 Target RNA Figura 23: Respuesta del modelo neuronal para el sistema SISO obtenida para validación en lazo cerrado 54
7.2. Sistema MIMO no-lineal De la misma forma que para el sistema anterior, el conjunto de datos de entrenamiento se compone por 300 muestras generadas siguiendo la función camino aleatorio saturado. Sin embargo, al tratarse de un sistema MIMO con dos entradas y dos salidas, se tienen dos entradas y dos salidas de entrenamiento. Para ambas entradas, la probabilidad de cambio en cada muestra es del 20%, igual que antes, pero los cambios son independientes para cada entrada, es decir, no tienen por qué cambiar ambas entradas simultáneamente. Respecto a los rangos de valores empleados, la primera entrada que, al tratarse de un sistema MIMO desacoplado, pertenece al sistema SNL5, toma valores en el mismo rango que en el anterior caso ([−2,5,2,5]). Por otro lado, la segunda entrada, correspondiente al sistema SNL1, toma valores dentro del rango [−1,7,1,7] para representar las no-linealidades del sistema, pero sin generar entradas muy alejadas de 0, ya que, como se ha dicho, la salida del sistema SNL1 está relacionada con la entrada elevada al cubo. 0 50 100 150 200 250 300 -2.5 -2 -1 0 1 2 2.5 u1 Entrada 1 de entrenamiento 0 50 100 150 200 250 300 -1.7 -1.5 -1 0 1 1.5 1.7 u2 Entrada 2 de entrenamiento 0 50 100 150 200 250 300 -3 -2 -1 0 1 2 3 4 y1 Salida 1 de entrenamiento 0 50 100 150 200 250 300 -5 0 5 y2 Salida 2 de entrenamiento Figura 24: Datos de entrada y salida de entrenamiento para el sistema MIMO no-lineal 55
A diferencia del conjunto de entrenamiento, se han empleado entradas de validación (Figura 25) con una probabilidad de cambio del 10 %, buscando comprobar en la validación que la red no haya aprendido la tasa de cambio, es decir, que represente el sistema independientemente de que se mantengan los valores de las entradas en el tiempo. El número de muestras y los rangos de valoressíquesonigualesalosdeentrenamiento,300muestrasyrangos[−2,5,2,5] y[−1,7,1,7], respectivamente. 0 50 100 150 200 250 300 -2.5 -2 -1 0 1 2 2.5 u1 Entrada 1 de validación 0 50 100 150 200 250 300 -1.7 -1.5 -1 0 1 1.5 1.7 u2 Entrada 2 de validación 0 50 100 150 200 250 300 -4 -2 0 2 4 y1 Salida 1 de validación 0 50 100 150 200 250 300 -5 0 5 y2 Salida 2 de validación Figura 25: Datos de entrada y salida de validación para el sistema MIMO no-lineal Una vez generados los conjuntos de entrenamiento y validación, se ha procedido a ejecutar el programa de generación de redes neuronales entrenadas y validadas mediante barrido de parámetros. Trasgeneraryprocesarlaestructuradedatos netData,seobtienenlosgráficos de los rendimientos calculados: error cuadrático medio (MSE) y error absoluto máximo (MaAE) en lazo abierto (Figura 26), y MSE en lazo cerrado (Figura 27). 56
T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas T.3.1.3: Función de calculo matricial de salidas Descripción: Comprender el formato empleado internamente por MATLAB, para desarrollar un código de reducción de redes neuronales y cálculo matricial para disminuir el consumo de memoria y mejorar el rendimiento computacional de los cálculos, respectivamente. Duración: 5 días T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red T.3.1.4: Funciones de validación de la red Descripción: Desarrollo de las funciones encargadas de realizar la validación en lazo abierto y lazo cerrado de los modelos neuronales. Duración: 4 días T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados T.3.1.5: Funciones de graficado de resultados Descripción: Creación de funciones que grafiquen los resultados relevantes del proceso realizado, en un formato adecuado. Duración: 2 días FASE 3.2. Sistema SISO no-lineal T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema T.3.2.1: Estudio del sistema Descripción: Estudio del sistema SISO no-lineal: ecuación, relaciones de entrada/salida, puntos de operación, no-linealidades…. Duración: 2 días 63
T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales T.3.2.2: Diseño y entrenamiento de modelos neuronales Descripción:Generacióndelosmodelosneuronales para el sistema SISO no-lineal mediante el código desarrollado. Duración: 2 días T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales T.3.2.3: Validación de modelos neuronales Descripción: Validación en lazo abierto y cerrado de los modelos neuronales para el sistema SISO no-lineal, comparación, y selección del modelo neuronal final. Duración: 3 días FASE 3.3. Sistema MIMO no-lineal T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema T.3.3.1: Estudio del sistema Descripción: Estudio del sistema MIMO no-lineal: ecuaciones, relaciones de entrada/salida, puntos de operación, no-linealidades…. Duración: 3 días T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales T.3.3.2: Diseño y entrenamiento de modelos neuronales Descripción:Generacióndelosmodelosneuronales para el sistema MIMO no-lineal mediante el código desarrollado. Duración: 3 días T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales T.3.3.3: Validación de modelos neuronales Descripción: Validación en lazo abierto y cerrado de los modelos neuronales para el sistema MIMO no-lineal, comparación, y selección del modelo neuronal final. Duración: 4 días 64
FASE 3.4. Integración y simplificación del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código T.3.4.1: Integración del código Descripción: Integración de las funciones desarrolladas en funciones mayores que las implementen de forma que se optimice el proceso, para lo que se ha empleado el barrido de parámetros. Duración: 5 días T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código T.3.4.2: Simplificación y modularización del código Descripción: Últimas modificaciones al código para facilitar su uso y comprensión, con el objetivo de ayudar a optimizar el desarrollo de futuros modelos neuronales. Duración: 3 días FASE 4. Documentación T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto T.4.1: Documentación del proyecto Descripción: Redacción del documento recopilando toda la información del trabajo realizado en el TFM. Duración: 71 días 8.2. Hitos Hito Descripción Fecha Código de creación y validación de modelos neuronales H1 completado Semana 10 H2 Modelo neuronal del sistema SISO no-lineal generado Semana 13 H3 Modelo neuronal del sistema MIMO no-lineal generado Semana 15 Código de desarrollo de modelos neuronales integrado: H4 proyecto finalizado Semana 17 Tabla 10: Hitos finales del proyecto 65
8.3. Diagrama de Gantt Tarea Nombre de tarea Duración Comienzo Fin F.1 Fase preliminar 3 días 23/05/2022 25/05/2022 T.1.1 Revisión de la propuesta del TFM 3 días 23/05/2022 25/05/2022 Estudio de estado del arte y F.2 herramientas 26 días 26/05/2022 30/06/2022 T.2.1 Estado del arte de RNA 6 días 26/05/2022 02/06/2022 Estado del arte de identificación de T.2.2 sistemas 5 días 03/06/2022 09/06/2022 T.2.3 Aprendizaje de herramientas a utilizar 3 días 10/06/2022 14/06/2022 T.2.4 Familiarización con el entorno de trabajo 12 días 15/06/2022 30/06/2022 F.3 Desarrollo del trabajo 42 días 01/07/2022 12/09/2022 F.3.1 Desarrollo del código 17 días 01/07/2022 25/07/2022 T.3.1.1 Función de generación de entradas 3 días 01/07/2022 05/07/2022 Función de creación y entrenamiento de T.3.1.2 redes 3 días 06/07/2022 08/07/2022 T.3.1.3 Función de cálculo matricial de salidas 5 días 11/07/2022 15/07/2022 T.3.1.4 Funciones de validación de la red 4 días 18/07/2022 21/07/2022 T.3.1.5 Funciones de graficado de resultados 2 días 22/07/2022 25/07/2022 H1 Código desarrollado 0 días 25/07/2022 25/07/2022 F.3.2 Sistema SISO no-lineal 7 días 26/07/2022 17/08/2022 T.3.2.1 Estudio del sistema 2 días 26/07/2022 27/07/2022 Diseño y entrenamiento de modelos T.3.2.2 neuronales 2 días 28/07/2022 29/07/2022 T.3.2.3 Validación de modelos neuronales 3 días 15/08/2022 17/08/2022 H2 Sistema SISO no-lineal modelado 0 días 17/08/2022 17/08/2022 F.3.3 Sistema MIMO no-lineal 10 días 18/08/2022 31/08/2022 T.3.3.1 Estudio del sistema 3 días 18/08/2022 22/08/2022 Diseño y entrenamiento de modelos T.3.3.2 neuronales 3 días 23/08/2022 25/08/2022 T.3.3.3 Validación de modelos neuronales 4 días 26/08/2022 31/08/2022 H3 Sistema MIMO no-lineal modelado 0 días 31/08/2022 31/08/2022 F.3.4 Integración y simplificación del código 8 días 01/09/2022 12/09/2022 T.3.4.1 Integración del código 5 días 01/09/2022 07/09/2022 Simplificación y modularización del T.3.4.2 código 3 días 08/09/2022 12/09/2022 H4 Código integrado 0 días 12/09/2022 12/09/2022 F.4 Documentación 71 días 23/05/2022 12/09/2022 T.4.1 Documentación del proyecto 71 días 23/05/2022 12/09/2022 Tabla 11: Planificación final del proyecto 66
25/07 17/08 31/08 12/09 lun 16 lun 23 lun 30 lun 06 lun 13 lun 20 lun 27 lun 04 lun 11 lun 18 lun 25 lun 01 lun 08 lun 15 lun 22 lun 29 lun 05 lun 12 lun 19 junio 2022 julio 2022 agosto 2022 septiembre 2022 Figura 30: Diagrama de Gantt del proyecto 67
9. Descripción del presupuesto En este apartado se aborda la realización del presupuesto final usado para realizar el proyecto. Respecto a las diversas consideraciones antes de realizar el presupuesto, se ha seguido el mismo criterio que en el presupuesto provisional del apartado «Objetivos y alcance»: Se ha estimado la tasa horaria del alumno como la de un ingeniero júnior (20 €/h). El alumno trabaja todos los días durante 8 horas diarias, durante toda la duración del proyecto, en este caso, igual a 71 días. El periodo de amortización del hardware (PC) es de 5 años. El periodo de amortización del software (PC) es de 3 años. Por lo demás, no se ha incurrido en gastos (fungibles), y se estima que los costes indirectos adicionales son del 4 % de los costes directos. Adicionalmente, se debe añadir un 2% correspondiente al coste de capital. De esta forma, el presupuesto total del proyecto resultante es de 12.681,75 €. En la Tabla 13 se puede observar el presupuesto con más detalle. Comparando con el presupuesto inicial realizado, el presupuesto final es muy cercanoalestimado,aunque cabe destacar que lapartidadeimprevistosprovista es imprescindible para que esto haya sido así. Esto es debido a que todos los costes, y especialmente el de horas internas, que es la gran mayoría de estos, es proporcional al número de horas trabajadas. Al haberse extendido el proyecto de los 64 días previstos a 71, estos gastos hanaumentadoen la mismaproporción,que escercanaal 10% adicional. Deesta forma, al coincidir este porcentaje con el porcentaje reservado a imprevistos, los presupuestos resultan muy similares. 68
Cálculo de tasas horarias Coste (€) Vida útil (h) Tasa horaria (€/h) PC 2.000 9.000 0,222 MATLAB R2022a 2.100 5.400 0,389 Deep Learning Toolbox 1.200 5.400 0,222 Parallel Computing Toolbox 1.050 5.400 0,194 Control System Toolbox 1.200 5.400 0,222 Tabla 12: Cálculo de las tasas horarias del proyecto HORAS INTERNAS Cantidad (h) Tasa horaria (€/h) Coste (€) 11.360,00 € Alumno 568 20,000 11.360,00 AMORTIZACIONES Cantidad (h) Tasa horaria (€/h) Coste (€) 594,89 € PC 568 0,222 126,22 MATLAB R2022a 456 0,389 177,33 Deep Learning Toolbox 456 0,222 101,33 Parallel Computing Toolbox 456 0,194 88,67 Control System Toolbox 456 0,222 101,33 COSTES DIRECTOS 11.954,89 € Costes indirectos 4 % 478,20 € SUBTOTAL 12.433,08 € Coste de capital 2% 248,66 € TOTAL 12.681,75 € Tabla 13: Presupuesto final del proyecto 69
10. Conclusiones y trabajos futuros En este trabajo se ha desarrollado los modelos neuronales de dos sistemas no-lineales complejos, principalmente orientados a su uso como modelos en estrategias de control predictivo, especialmente en la estrategia iMO-NMPC; y se ha estudiado su rendimiento. Por otro lado, se ha desarrollado un código de entrenamiento y validación de modelos neuronales para optimizar el desarrollo de modelos futuros. Para esto, se ha investigado y detallado el ámbito general en que se enmarca el trabajo y los avances en este, el de las redes neuronales artificiales. De esta forma, se ha comprobado que las redes neuronales son una gran opción a la hora de desarrollar modelos de caja negra de sistemas de diversos campos, y se han comparado distintas estructuras de RNA, teniendo en cuenta las ventajas e inconvenientes de cada una de ellas. Una vez contextualizado el trabajo, se han explicado y justificado las diversas consideraciones y elecciones hechas durante el desarrollo del proyecto para enmarcar el entorno concreto en el que se ha trabajado, especificando la estructura de red neuronal y el algoritmo de entrenamiento empleados, entre otros. De esta forma, una vez reducido el amplio espectro de posibilidades dentro de este campo, se ha descrito y detallado el trabajo realizado, y el proceso seguido durante el desarrollo del trabajo. En este proceso, se ha prestado especial atención a la disminución del coste computacional de las redes neuronales, por un doble motivo: el menor uso de recursos durante su entrenamiento y aplicación, y debido al riesgo identificado durante el análisis de riesgos. Por esta razón, se ha desarrollado un código de cálculo matricial de salidas de la red neuronal, mediante el cual se ha reducido el coste computacional del desarrollo de los modelos neuronales en este trabajo, reduciendo así el tiempo empleado para ello. 70
Adicionalmente, este desarrollo, que no estaba previsto en la planificación inicial, no ha causado retrasos adicionales, ya que se estima que el tiempo empleado en desarrollar este código se ha ahorrado durante el entrenamiento y validación de los modelos neuronales. Sin embargo, aunque esto no ha supuesto retrasos adicionales, el proyecto sí que ha tenido un retraso de 7 días debido a imprevistos y la mayor duración de algunas tareas, lo que ha causado que los costes directos del proyecto hayan sido mayores de los calculados. Aún así, este posible retraso y mayor coste se había contemplado en el presupuesto inicial, quedando cubierto con la partida reservada a imprevistos. En el ámbito de los resultados obtenidos, se ha comprobado el correcto funcionamiento de estos modelos neuronales en pruebas de validación, tanto en lazo abierto, como en lazo cerrado, obteniendo buenos resultados. En este proceso también se ha tenido muy en cuenta la reducción del coste computacional, ofreciendo para cada sistema un modelo alternativo con menos neuronas, pero con buen rendimiento. En este respecto, los trabajos futuros en la línea de investigación pasan por la identificación de sistemas aún más complejos, una vez establecidas las bases para un desarrollo más eficiente mediante el código desarrollado. Esto pasa por el modelado de sistemas multivariables más complejos, con la adición de acoplamientos, o dinámicas aún más complejas. También puede pasar por el desarrollo de modelos de sistemas reales. Por otro lado, tras el desarrollo de los modelos neuronales realizado en este trabajo, queda realizar la implementación de estos en la estrategia de control iMO-NMPC, primero en simulación, pero especialmente en sistemas empotrados de tiempo real, como Speedgoat, donde la memoria y el poder de cómputo son factores determinantes. En este aspecto, el énfasis puesto en la reducción del coste computacional resulta particularmente útil para mejorar el rendimiento, mediante el cálculo matricial y la búsqueda de redes de tamaño reducido. Finalmente,elestudiodelaimplementacióndelentrenamientoon-line puede resultar interesante, con el objetivo de añadir una capa de adaptabilidad al control, con el objetivo de diseñar un sistema de control efectivo y potente. 71
Bibliografía [1] K.NarendrayK.Parthasarathy,«Identificationandcontrolofdynamicalsystems using neural networks,» IEEE Transactions on Neural Networks,vol. 1, n.o1, págs. 4-27, 1990. DOI: 10.1109/72.80202. [2] M. M. Polycarpou y P. A. Ioannou, «Identification and Control of Nonlinear Systems Using Neural Network Models: Design and Stability Analysis,» ELECTRICAL ENGINEERING—SYSTEMS REP, inf. téc., 1991. dirección: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.1816. [3] J. J. Valera García, V. Gómez Garay, E. Irigoyen Gordo, F. Artaza Fano y M. Larrea Sukia, «Intelligent Multi-Objective Nonlinear Model Predictive Control (iMO-NMPC): Towards the ‘on-line’ optimization of highly complex control problems,» Expert Systems with Applications, vol. 39, n.o7, págs. 6527-6540, 2012, ISSN: 0957-4174. DOI: https://doi.org/10.1016/ j.eswa.2011.12.052. [4] K. Hornik, M. Stinchcombe y H. White, «Multilayer feedforward networks are universal approximators,» Neural Networks, vol. 2, n.o5, págs. 359-366, 1989, ISSN: 0893-6080. DOI: https://doi.org/10.1016/0893-6080(89) 90020-8. [5] G. Cybenko, «Approximation by superpositions of a sigmoidal function,» Mathematics of Control, Signals and Systems, vol. 2, n.o4, págs. 303-314, dic. de 1989, ISSN: 1435-568X. DOI: 10.1007/BF02551274. [6] J. Deng, S. Sierla, J. Sun y V. Vyatkin, «Reinforcement learning for industrial process control: A case study in flatness control in steel industry,» Computers in Industry, vol. 143, pág. 103 748, 2022, ISSN: 0166-3615. DOI: https://doi.org/10.1016/j.compind.2022.103748. [7] M. Hagan y M. Menhaj, «Training feedforward networks with the Marquardt algorithm,»IEEE Transactions on Neural Networks,vol.5,n.o6,págs.989-993, nov. de 1994, ISSN: 1941-0093. DOI: 10.1109/72.329697. [8] J. Sjöberg, H. Hjalmarsson y L. Ljung, «Neural Networks in System Identification,» IFAC Proceedings Volumes, vol. 27, n.o8, págs. 359-382, 1994, IFAC SymposiumonSystemIdentification(SYSID’94),Copenhagen,Denmark,46 July, ISSN: 1474-6670. DOI: https://doi.org/10.1016/S1474-6670(17) 47737-8. 72
Código 3: Función de graficado y guardado de imágenes 1function NARX_plot_netData ( netData ,valData , figSavePath) 2 3%% Si no existe la carpeta para guardar las imágenes , la crea 4if ~exist( figSavePath ,'dir ') 5mkdir ( figSavePath ); 6end 7 8%% Inicializar datos y preparar celdas con nombres 9% Para nombrar redes , etiquetas de datos en ejes , títulos de gráficos ... 10 11 % Tamaño de datos de salida (ignorar etiquetas ) y número de salidas 12 % ( igual al número de error ). 13 sizeData = size( netData ) -[2 ,1]; 14 numOutputs = length ( netData {1 ,1}. bestNet . openVal_mse ); 15 16 % Crear celdas con número de neuronas para nombrar cada red y para usar 17 % como etiquetas de datos en ejes 18 numNeurons = cell (1 , sizeData (1)); 19 for i=1: sizeData (1) 20 numNeurons{i} = num2str(size( netData {i ,1}. bestNet . net .IW {1 ,1} ,1)); 21 end 22 23 % Crear celdas con retardos de entradas para nombrar cada red y para 24 % usar como etiquetas de datos en ejes 25 inDelays = cell (1 , sizeData (2)); 26 tgDelays = cell (1 , sizeData (2)); 27 numDelays = cell (1 , sizeData (2)); 28 for i=1: sizeData (2) 29 inputDelays = netData {1,i }. bestNet . net . inputWeights {1 ,1}. delays ; 30 targetDelays = netData {1,i }. bestNet . net . inputWeights {1 ,2}. delays ; 31 inDelays {i} = strrep (num2str ( inputDelays ),' ',','); 32 tgDelays {i} = strrep (num2str ( targetDelays ),' ',','); 33 numDelays {i} = strcat ("[" , strrep (num2str ( inputDelays ),' ',','), ... 34 "]&[",strrep (num2str ( targetDelays ),' ',',') ,"]"); 35 end 36 37 % Nombres de las salidas , para nombrar los gráficos 38 if numOutputs == 1 39 outputNames = " SNL5 "; 40 else 41 outputNames = [" SNL5 " ," SNL1 "]; 42 end 43 44 %% Bucle de gráficos de validación 45 % Inicializar figura de gráficos de validación 46 h_fig = figure (42); 47 set(h_fig ,'Color ' ,[1 1 1],'Position ' ,[216 418 560 420] , ... 48 'renderer','painters'); 49 pause(0.05); 50 51 % Bucle principal de gráficos 52 for i=1: sizeData (1) 53 for j=1: sizeData (2) 54 for valType =[" open " ," closed "] % Hacer un gráfico para cada val 55 % Obtener retardo máximo de la red y datos de validación 56 maxDelay = netData {i ,j }. bestNet . net . numInputDelays ; 79
57 if valType == " open " 58 val_out = netData {i ,j}. bestNet . openVal_out ; 59 lineType = 'b.'; 60 else 61 val_out = netData {i,j}. bestNet . closedVal_out ; 62 lineType = 'r.'; 63 end 64 65 % Etiquetas de número de neuronas y retardos ( para los 66 % títulos de los gráficos ), y nombre del archivo a generar 67 tagNeurons = strcat (" N = ", numNeurons {i }); 68 tagDelays = strcat (" inDel [", inDelays {j} ,"] - tgDel [", ... 69 tgDelays {j } ,"]"); 70 netName = strcat (" net - Num Neur ", numNeurons {i},"-iD ", ... 71 strrep ( inDelays {j}, ',','') ,"- tD", ... 72 strrep ( tgDelays {j}, ',',''),'. fig '); 73 74 % Poner título al gráfico 75 sgtitle ( strcat ( tagNeurons ," | ", tagDelays )); 76 77 % Graficar cada salida en un subplot 78 for graphOutput =1: numOutputs 79 subplot (numOutputs ,1, graphOutput ); 80 hold on; 81 plot( valData . target ( graphOutput , maxDelay +1: end) ,... 82 'k--','LineWidth ' ,1); 83 plot( val_out ( graphOutput ,:) , lineType , 'MarkerSize ' ,10); 84 hold off; 85 grid; 86 grid minor ; 87 title( strcat (" Validación ", outputNames { graphOutput })); 88 legend (" Target " ," RNA "); 89 end % bucle for graphOutput 90 91 % Guardar figura en archivo y limpiar figura ( para evitar 92 % crear múltiples figuras) 93 savefig (h_fig , figSavePath+ netName +" - "+ valType ); 94 pause(0.05); 95 clf; 96 end % bucle for valType 97 end % bucle for j 98 end % bucle for i 99 100 % Cerrar figura 101 close(42); 102 103 %% Graficar errores en gráficos de barras 104 % Crear matrices de errores 105 netData_mat = cell2mat (netData (1: sizeData (1) ,1: sizeData (2))); 106 bestNet_mat = [ netData_mat . bestNet ]; 107 108 open_mse_mat = reshape ([ bestNet_mat . openVal_mse ]', ... 109 sizeData (1), sizeData (2) ,[]); 110 open_maxabse_mat = reshape ([ bestNet_mat . openVal_maxabse ]', ... 111 sizeData (1), sizeData (2) ,[]); 112 closed_mse_mat = reshape ([ bestNet_mat . closedVal_mse ]', ... 113 sizeData (1), sizeData (2) ,[]); 114 80
115 % Inicializar objeto gráfico y número de plot (para generar figuras 116 % distintas) 117 h_mse_maxabse = gobjects (1 ,3* numOutputs ); 118 plotNum = 0; 119 120 % Bucle de gráficos de barras 121 for errorType = [" MSE "," MaAE " ," MSE Lazo Cerrado "] 122 % Elegir matriz de error MSE , MaAE , o divergencia , según el gráfico 123 switch errorType 124 case "MSE " 125 plotMat = open_mse_mat ; 126 case "MaAE" 127 plotMat = open_maxabse_mat; 128 case " MSE Lazo Cerrado " 129 plotMat = closed_mse_mat ; 130 end % switch 131 132 % Para los errores de todas las salidas , realizar gráfico de barras 133 % y etiquetarlo adecuadamente 134 for i=1: size(plotMat ,3) % = numOut 135 plotNum = plotNum + 1; 136 h_mse_maxabse ( plotNum ) = figure (42+ plotNum ); 137 138 bar3 (plotMat (: ,: ,i)) 139 view(52.5,25); 140 title( strcat ( errorType ," ", outputNames {i })); 141 xlabel (" Retardos de {\ it input} y {\it target }"); 142 xticklabels ( numDelays ); 143 ylabel (" Neuronas "); 144 yticklabels ( numNeurons ); 145 end % bucle for i 146 end % bucle for errorType 147 148 % Guardar todas las figuras en un único archivo.fig , y cerrar figuras 149 % generadas 150 savefig ( h_mse_maxabse , figSavePath +" graph_pack_error . fig "); 151 pause(0.05); 152 close(h_mse_maxabse); 153 154 % Mostrar mensaje de finalización del programa 155 disp(" Gráficos realizados "); 156 end % function 81
Subfunciones Código 4: Generación de datos de entrada mediante camino aleatorio saturado 1function u = gen_satRandWalk ( outSize , outRange , switchProb ) 2 3% Calcular tamaño del rango y crear rango expandido (+-20 %) 4rangeTot = outRange(2)-outRange(1); 5expRange = [outRange (1)- rangeTot *0.2 , outRange (2)+ rangeTot *0.2]; 6expRangeTot = expRange (2) - expRange (1); 7 8% Inicializar vector , y rellenar la primera muestra con un valor dentro 9% del rango deseado 10 u = zeros( outSize ); 11 u(: ,1) = rand( outSize (1) ,1)* rangeTot + outRange (1); 12 13 % Obtener el resto de muestras dentro del rango expandido y saturarlas 14 % para que pertenezcan al rango deseado 15 for i=2: outSize (2) 16 if rand <= switchProb 17 val = rand( outSize (1) ,1)* expRangeTot + expRange (1); % Generar 18 val = min(max( val , outRange (1)) , outRange (2)); % Saturar 19 else 20 val = u(:,i -1); 21 end % if 22 u(:,i) = val ; 23 end % bucle for i 24 end % function Código 5: Entrenamiento de redes NARX 1function varargout = NARX_trainNet ( trainInput , trainTarget , numNeuron ,... 2inDelay , tgDelay ) 3 4%% Comprobar número de parámetros de salida 5if (nargout < 1) || ( nargout > 2) 6error(" Número inválido de salidas: debe ser 1 o 2"); 7end 8 9%% Crear y configurar red NARX 10 % Crear la red NARX 11 net = narxnet (inDelay ,tgDelay ,numNeuron ,'open ','trainlm '); 12 13 % Configurar ratios de entrenamiento , validación y test de la red , y 14 % deshabilitar la ventana de entrenamiento 15 net. divideParam . trainRatio = 1; 16 net . divideParam . valRatio = 0; 17 net . divideParam . testRatio = 0; 18 net.trainParam.showWindow = false; 19 20 %% Formatear los datos de entrenamiento para poder ser usados 21 % Pasar los datos al formato empleado para trabajar con RNA 22 [inNet ,~] = tonndata ( trainInput , true , false ); 23 [tgNet ,~] = tonndata ( trainTarget ,true , false ); 24 82
25 % Adecuar los datos a los retardos de la red 26 [ inShift , iniInStates , iniLayStates , tgShift ] = preparets ( net , inNet ,{} ,... 27 tgNet ); 28 29 %% Entrenar la red 30 [net , trainRec] = train(net ,inShift ,tgShift , iniInStates ,iniLayStates ,... 31 'useParallel ','no ',' showResources ','no','useGPU ','no '); 32 33 %% Asignar salidas 34 varargout {1} = net; 35 if nargout >= 2 36 varargout {2} = trainRec ; 37 end 38 end % function Código 6: Validación en lazo abierto 1function varargout = NARX_val_open (net , valInput , valTarget ) 2 3%% Comprobar número de parámetros de salida 4if (nargout < 1) || ( nargout > 3) 5error(" Número inválido de salidas: debe ser entre 1 y 3"); 6end 7 8%% Simplificar red 9% Si se introduce una red "normal " se debe " reducir ", ya que es el tipo 10 % que emplea la función NARX_Paso 11 if isa(net ," network ") 12 net = load_NN_data ( net ); 13 end 14 15 %% Calcular salida mediante red neuronal 16 outValNN = zeros(size(valTarget)); 17 for k=( net . maxDelay +1): length (valInput) 18 NNin = reshape ( valInput (:,k-net .inPar . delay ) ,[] ,1); 19 NNtg = reshape ( valTarget (:,knet. tgPar . delay ) ,[] ,1); 20 outValNN (:,k) = NARX_Paso (net ,NNin , NNtg ); 21 end 22 outValNN = outValNN(:,net.maxDelay+1:end); 23 24 %% Obtener salidas 25 % Calcular el error absoluto cometido por la red 26 valTarget = valTarget (:, net. maxDelay +1: end); 27 e_abs = abs( outValNN - valTarget ); 28 29 % Asignar salidas 30 varargout {1} = outValNN ; 31 if nargout >= 2 32 varargout{2} = mean( e_abs .^2 ,2); 33 if nargout >= 3 34 varargout{3} = max(e_abs ,[] ,2); 35 end 36 end 37 end % function 83
Código 7: Validación en lazo cerrado 1function varargout = NARX_val_closed (net , valInput , valTarget ) 2 3%% Comprobar número de parámetros de salida 4if (nargout < 1) || ( nargout > 3) 5error(" Número inválido de salidas: debe ser entre 1 y 3"); 6end 7 8%% Simplificar red 9% Si se introduce una red "normal " se debe " reducir ", ya que es el tipo 10 % que emplea la función NARX_Paso 11 if isa(net ," network ") 12 net = load_NN_data ( net ); 13 end 14 15 %% Calcular salida mediante red neuronal 16 outValNN = zeros(size(valTarget)); 17 outValNN (: ,1: net . maxDelay ) = valTarget (: ,1: net . maxDelay ); 18 for k=( net . maxDelay +1): length (valInput) 19 NNin = reshape ( valInput (:,k-net .inPar . delay ) ,[] ,1); 20 NNtg = reshape ( outValNN (:,k-net .tgPar . delay ) ,[] ,1); 21 outValNN (:,k) = NARX_Paso (net ,NNin , NNtg ); 22 end 23 outValNN = outValNN(:,net.maxDelay+1:end); 24 25 %% Obtener salidas 26 % Calcular el error absoluto cometido por la red 27 valTarget = valTarget (:, net. maxDelay +1: end); 28 e_abs = abs( outValNN - valTarget ); 29 30 % Asignar salidas 31 varargout {1} = outValNN ; 32 if nargout >= 2 33 varargout{2} = mean( e_abs .^2 ,2); 34 if nargout >= 3 35 varargout{3} = max(e_abs ,[] ,2); 36 end 37 end 38 end % function 84
Código 8: Función de reducción de red: generación de red reducida 1function NN_reduc = load_NN_data (in ) 2 3% Comprueba si la entrada es un nombre de archivo o una red neuronal 4if ischar (in ) || isstring (in ) 5net = importdata ( in ); 6elseif isa(in ," network ") 7net = in; 8else 9error(" Entrada inválida: debe ser un nombre de archivo ..." + ... 10 "o una variable de tipo 'network '"); 11 end 12 13 % Extrae la mínima información necesaria en la salida : 14 % - Retardo máximo de la red 15 % - Parámetros de normalización de input 16 % - Retardos de input 17 % - Número de input 18 % - Parámetros de normalización de target 19 % - Retardos de target 20 % - Número de target 21 % - Matrices de pesos y bias de la capa oculta 22 % - Matrices de pesos y bias de la capa de salida 23 NN_reduc = struct ('maxDelay ',net .numInputDelays ,... 24 'inPar ',struct ('xmin ',net .inputs {1}. processSettings {1}. xmin ,... 25 'ymin ',net .inputs {1}. processSettings {1}. ymin ,... 26 'gain ',net .inputs {1}. processSettings {1}. gain ,... 27 'delay ',net .inputWeights {1 ,1}. delays ,... 28 'size ',net .inputs {1}. size) ,... 29 'tgPar ',struct ('xmin ',net .inputs {2}. processSettings {1}. xmin ,... 30 'ymin ',net .inputs {2}. processSettings {1}. ymin ,... 31 'gain ',net .inputs {2}. processSettings {1}. gain ,... 32 'delay ',net .inputWeights {1 ,2}. delays ,... 33 'size ',net .inputs {2}. size) ,... 34 'hidLay ',struct ('Wx',net .IW {1 ,1} ,... 35 'Wy ',net .IW {1 ,2} ,... 36 'b',net .b{1}) ,... 37 'outLay ',struct ('W',net.LW {2 ,1} ,... 38 'b',net .b{2})); 39 end % function 85
Código 9: Función de cálculo matricial de la salida de la red 1function out = NARX_Paso (net , input,target ) 2 3% La función usa la estructura de red reducida.Si se ha pasado la 4% red como red normal , se pasa a este formato . 5if isa(net ," network ") 6net = load_NN_data ( net ); 7end 8 9% Revisar que ambas entradas tienen el mismo número de muestras 10 % (columnas) 11 if size(input ,2) == size(target ,2) 12 nSamples = size(input ,2); 13 else 14 error(" Input y target deben tener el mismo número de muestras "); 15 end 16 17 % Normalizar entradas 18 xIn = norm_AA ( input,net.inPar .xmin ,net . inPar.ymin ,net.inPar .gain ); 19 yIn = norm_AA (target , net.tgPar.xmin ,net. tgPar .ymin ,net. tgPar.gain ); 20 21 % Pasar entradas por capa oculta y capa de salida 22 outHidden = tansig(net. hidLay .Wx*xIn +net .hidLay .Wy*yIn +... 23 repmat (net. hidLay.b ,[1 , nSamples ])); 24 outNorm = net .outLay .W* outHidden + repmat ( net . outLay .b ,[1 , nSamples ]); 25 26 % Desnormalizar la salida 27 out = denorm_AA (outNorm ,net.tgPar .xmin ,net . tgPar.ymin ,net.tgPar .gain ); 28 end % function 29 30 %% Subfunciones : normalización y desnormalización 31 % Normalizar entradas . Las primeras líneas son para adaptar las 32 % distintas dimensiones de las matrices para que sean congruentes entre 33 % ellas ( necesario cuando se emplea más de una muestra de input / target ) 34 function inNorm = norm_AA (in ,xmin ,ymin , gain ) 35 nIn = size(in ,1)/ size(gain ,1); 36 xmin = repmat (xmin ,[nIn ,1]); 37 gain = repmat (gain ,[nIn ,1]); 38 inNorm = ymin +gain .*( in - xmin ); 39 end 40 41 function out = denorm_AA(outNorm ,xmin ,ymin ,gain) 42 out = xmin +(outNorm -ymin )./ gain; 43 end 86
Código 10: Sistema SNL5 1function y = SNL5_sys ( u_in ) 2 3% Pasar un vector entero de entradas por la función 4u = zeros(1, length(u_in )+2); 5u(3: end) = u_in ; 6y = zeros(size(u)); 7for k=2:( numel (y) -1) 8%y(k+1)= (1.5*y(k)*y(k -1))/(1+ y(k).^2+ y(k -1).^2)+ 9% 0.7* sin (0.5*( y(k )+ y(k -1)))* cos (0.5*( y(k )+ y(k -1)))+1.2* u(k); 10 y(k +1) = (1.5* y(k)* y(k -1))/(1+ y(k ).^2+ y(k -1).^2)+... 11 0.35*sin(y(k )+ y(k -1))+1.2* u(k); 12 end % bucle for k 13 y = y(3: end); 14 end % function Código 11: Sistema SNL1 1function y = SNL1_sys(u) 2 3% Pasar un vector entero de entradas por la función 4y = zeros(size(u)); 5y(1) = 0; 6for k=1:( numel (y) -1) 7y(k+1) = u(k).^3 + y(k )/(1+y(k ).^2); 8end % bucle for k 9end % function Código 12: Ejemplo de script que integra todas las funciones desarrolladas 1%% Integración del desarrollo de modelos neuronales : ejemplo SISO 2clearvars;clc;close all;% Limpiar espacio de trabajo 3 4%% Inicialización de parámetros de barrido y datos de entrenamiento 5% Parámetros de barrido 6numNeur = 2:6; % Número de neuronas a emplear en las redes 7inDel = {0 ,0:1}; % Retardos de entradas a emplear 8tgDel = {1 ,1:2}; % Retardos de target a emplear 9numRep = 4; % Número de redes calculadas para cada combinación 10 N = 300; % Número de muestras de entrada y validación 11 12 % Entradas y targets de entrenamiento ( iguales para todas las redes ). Su 13 % formato debe ser que cada timestep se representa en una columna ( por 14 % tanto , cada input /target se representa como una fila) 15 trData . input = gen_satRandWalk ([1,N] ,[ -2.5 , 2.5] ,0.2); 16 trData . target = SNL5_sys ( trData . input); 17 18 % Entradas y targets de validación ( iguales para todas las redes , pero 19 % distintas a las de entrenamiento ). Mismo formato que el anterior . 20 valData .input = gen_satRandWalk ([1 ,N],[-2.5 , 2.5] ,0.2); 21 valData . target = SNL5_sys ( valData . input); 22 23 %% Realizar desarrollo de modelos neuronales 24 netData = NARX_paramSweep (numNeur ,inDel ,tgDel , numRep ,trData , valData ); 25 netData_proc = NARX_process_netData ( netData ); 26 NARX_plot_netData ( netData_proc ,valData ," TFM_figures \ SISO \"); 87
XVII Simposio CEA de Control Inteligente 27-29 de junio de 2022, Le´ on Estudio de estructuras neuronales NARX para reproducir el comportamiento de sistemas con din´ amicas complejas Aimar Alonso, Asier Zabaljauregi, Eloy Irigoyen, Mikel Larrea Universidad de Pa´ıs Vasco /Euskal Herriko Unibertsitatea (UPV/EHU) To cite this article: Alonso, A., Zabaljauregi, A, Irigoyen, E., Larrea, M., 2022. iMO-NMPC strategy development: First steps for implementation on industrial hardware. XVII Simposio CEA de Control Inteligente, 1-5. Resumen Este trabajo presenta un estudio preliminar donde se valorar´ a la eficiencia de las redes neuronales artificiales de topolog´ ıa NARX (Nonlinear Autoregressive eXogenous) en la reproducci´ on del comportamiento de sistemas con din´ amicas complejas. Estas estructuras neuronales se dise˜ nar´ an para reproducir tanto sistemas monovariables, como multivariables, siguiendo un mismo planteamiento metodol´ ogico. Los mencionados estudios est´ an dirigidos a proporcionar dichos modelos neuronales a futuras estrategias de control dependientes de modelos din´ amicos, como es el caso del control predictivo no lineal basado en modelos, el cual constituye una l´ ınea de trabajo dentro del grupo de investigaci´ on de control intelgente (GICI) de la UPV/EHU. Palabras clave: Red Neuronal, Sistemas no lineales, Identificaci´ on Study of NARX neural structures to reproduce the behaviour of systems with complex dynamics. Abstract This work presents the methodology used by the Intelligent Control Research Group (GICI) at UPV/EHU, for the development of intelligent control strategies and their further implementation in real time platforms. In this way, it is intended to provide validation of such strategies not only in simulation level but in alternative industrial hardware. The presented case that is currently being developed is the iMO-NMPC strategy which integrates predictive control strategies, evolutionary algorithms for optimization and neural networks for system modelling. The employed methodology involves the simulation platform MATLAB/Simulink ®. Keywords: Neural Networks, Nonlinear systems, S-Function, Identification 1. Introducci´ on En el mundo real, los sistemas a controlar son complejos, ya que incluyen no linealidades e interacci´ on entre las diferentes entradas y salidas de este. Esto causa que la identificaci´ on de las caracter´ ısticas del sistema para desarrollar un modelo sea un proceso complicado, especialmente si el modelo ser´ a usado en m´ etodos como Model Predictive Control (MPC), que requieren de una buena aproximaci´ on de los par´ ametros del proceso. En este ´ ambito, se ha extendido el uso de Redes Neuronales Artificiales (RNA) para la modelizaci´ on de estos sistemas, ya que se ha comprobado que son aproximadores universales (Hornik et al., 1990), (Jagannathan y Lewis, 1996), (Perrusqu´ ıa y Yu, 2021). Estos modelos neuronales son as´ ı implementables Correos electr´onicos: [email protected] (Aimar Alonso), azabaljaureg[email protected] (Asier Zabaljauregi), eloy.irigoye[email protected] (Eloy Irigoyen), [email protected] (Mikel Larrea) en las estrategias de control mencionadas, como MPC o su versi´ on no lineal (NMPC) (Camacho y Bordons, 2007), obteniendo buenos resultados (Bamimore et al., 2021). En este trabajo, se busca modelizar sistemas no lineales mediante RNA, tanto con una ´ unica salida y entrada (Single Input Single Output, SISO), como con m´ ultiples (Multiple Input Multiple Output, MIMO), comparando la respuesta obtenida respecto al modelo real. 2. Presentaci´ on del problema Los sistemas empleados en este trabajo son sint´ eticos, que buscan valorar el rendimiento de este m´ etodo de identificaci´ on, debido a que presentan regiones con grandes no linealidades. Estos sistemas han sido empleados anteriormente en otros trabajos relacionados con la identificaci´ on de modelos no lineales (Larrea et al., 2015). Para ofrecer una representaci´ on de las no linealidades de ambos sistemas, se presenta en la Figura 1 un