Redes Neuronales Controlador neuronal por modelo de referencia
Integrantes: Miguel Benalczar Xavier Falcon Mauricio Vinueza
Tema: Controlador neuronal por modelo de referencia
Resultados de Aprendizaje
La utilizacin del mtodo por modelo de referencia lo que hace es desarrollar un control neuronal que exige a nuestra planta a comportarse al sistema utilizado en el modelo de referencia, el cual en este caso es un sistema de primer orden, esto permite tener un control de cualquier sistema sin tener conocimiento ni aplicar teoras de control moderno.
Descripcin del Problema Construir un micro controlador por modelo de referencia lineal para el sistema multitanque.
Marco Terico
El control de sistemas por modelo de referencia consiste en disear un sistema que modifique el comportamiento natural de la planta con el objetivo que se aproxime a la respuesta que tiene un modelo de referencia establecido. En este esquema de control se supone que el diseador tiene el suficiente conocimiento del sistema como para definir el comportamiento deseado por medio de un modelo. El modelo de referencia usado en este caso es el de un sistema de primer orden que se caracteriza por una constante de tiempo y una ganancia unitaria.
Fig1 Como se puede observar en la figura los patrones de entrenamiento se utilizan para entrenar una red global tnet que est a su vez conformada por mnet que es la subred de salida y se obtiene mediante identificacin del proceso a controlar y la red cnet que se obtiene luego de haber entrenado la red global tnet con patrones de la LRM. En este entrenamiento y obtencin de los patrones el error que se produce entre el modelo de referencia lineal y el del control representado por la cnet o red neuronal de control y la mnet o red neuronal de identificacin permite ajustar tanto los pesos y los bias de la red neuronal de control en tanto que los pesos y el bias de la red neuronal de modelo no son alterados. Con este proceso se extrae la red neuronal de control que controla la planta multitanque. Procedimiento En esta seccin se podrn encontrar los cdigos de los programas que permitirn resolver el problema del tanque con 2 variables, las cuales son nivel y caudal. Programa de Identificacin con redes neuronales del sistema del tanque de dos variables (nivel y caudal mnet) % Identificacin de un proceso de variacin de nivel en un tanque % Una funcion de caudal q y de altura anterior x(dos variables) % Ecuacion dinmica a identificar % AdH/dt=q-C1 H ^alfa1 alfa1=0.29; C1=5.66e-5; A= 25*3.5e-4; % area del tanque %Obtencion de los patrones de entrenamiento x=0.01:1e-2:25e-2; % son los valores posibles de altura H q=0.1e-4:0.1e-5:0.6e-4; % caudal de ingreso al tanque p=combvec(x,q) %Conbinacin de datos x y q en matriz p deltaT= 0.5; % intervalo de muestreo deltaxv=[];
%Actualizacin de datos aplicando la ecuacin for i=1:1:length(p) x_c=p(1,i); q_c=p(2,i) deltax=(q_c/A-C1/A*x_c^alfa1)*deltaT; deltaxv=[deltaxv deltax]; end
% grafico de la variacin de la altura vs altura inicial y caudal de % entrada [x_g,q_g]=meshgrid(0.01:1e-2:25e-2,0.1e-4:0.1e-5:0.6e-4) fq=q_g/A; fx=C1/A*x_g.^alfa1; f=(fq-fx)*deltaT; figure(1) mesh(x_g,q_g,f)
% calculo de transformaciones de normalizacion xn=1-2*(max(x)-x)/(max(x)-min(x)) qn=1-2*(max(q)-q)/(max(q)-min(q)) % target=deltaxv;maxt=max(target);mint=min(target); % tn=1-2*(maxt-target)/(maxt-mint) tn=deltaxv % save ec_normlz maxt mint p=combvec(xn,qn) pause % create a FFN % net=newff(minmax(p),[8,1],{'tansig','purelin'},'traingd'); net=newff(minmax(p),[8,1],{'tansig','purelin'},'trainlm'); % Ingreso de parmetros para entrenamiento net.trainParam.show = 50; net.trainParam.lr = 0.01; net.trainParam.epochs = 3000; net.trainParam.goal = (0.00001)^2; % Entrenamiento de la red [net,tr]=train(net,p,tn); % comprobacion de resultados [xn,qn]=meshgrid(-1:0.05:1,-1:0.05:1) for i=1:1:size(xn,1) for j=1:1:size(xn,2) clc xn(i,j) zss(i,j)=sim(net,[xn(i,j);qn(i,j)]); i size(x,1) j end end figure(3) mesh(xn,qn,zss) save tank3 net
Cdigo generacin de patrones: tau=20 demanda=15e-2:1e-2:25e-2; %define valores maximos y mnimos de demanda nivel_real=15e-2:1e-2:25e-2; %define valores maximos y mnimos del nivel real Pc=combvec(nivel_real,demanda) %Creacin de una matriz, conbinando los valores de demanda y nivel size(Pc) pause timestep = 0.5; cont = 0; Q = length(Pc); %Obtencin del tamao de la matriz Pc Tc = zeros(1,Q); %Asignacin de columna valores cero
for i=1:Q demanda_c = Pc(2,i); nivel0 = Pc(1,i); sim('LRM_nivel',[0 0.5]); Tc(1,i) = (nivelf-nivel0) cont = cont + 1; cont end save LRM Pc Tc [xmesh,ymesh]=meshgrid(15e-2:1e-2:25e-2,15e-2:1e-2:25e-2)
for i=1:1:size(xmesh,1) for j=1:1:size(xmesh,2) xmesh(i,j) demanda_c=xmesh(i,j) nivel0=ymesh(i,j) sim('LRM_nivel',[0 0.5]); %Realiza simulacin de modelo dinmico, ejecuta modelo de Simulink zmesh(i,j) = (nivelf-nivel0) i size(xmesh,1) j end end figure(3) mesh(xmesh,ymesh,zmesh)
El LMR Modelo de referencia lineal permitir la ejecucin del cdigo del programa de generacin de patrones, tomando como ingreso los valores de demanda_c y tau Entrenamiento de tnet y obtencin del cnet %Entrenamiento a tnet con los patrones de entrenamiento del LRM. En el % programa se configura para que los pesos correspondientes a las capas finales y que % constituyen la subred mnet (que identifican al proceso) no se modifiquen. Los pesos que si % cambian de valor con el entrenamiento corresponden a las dos capas iniciales que % constituyen la subred cnet. clear all load tank3 %carga valores de almacenados en tank3 mnet=net load LRM %carga valores de almacenados en LRM Pcn=Pc Tcn=Tc pause % % % % DESIGNING THE NETWORK % % ===================== % % NEWFF creates weights and biases for a two-layer % % TANSIG/PURELIN network with 8 TANSIG neurons and 1 output. S1 = 8; cnet = newff(minmax(Pc),[S1 1],{'tansig' 'purelin'},'trainlm'); % NETWORK creates a network TNET which is a combination of the % control network CNET and the model network MNET. Only % the weights and biases for the model network will be % adjusted. numInputs = 2; numLayers = 4; tnet = network(numInputs,numLayers); %Configuracin de las conexiones de red tnet.biasConnect = [1 1 1 1]'; tnet.inputConnect = [1 0 1 0; 1 0 0 0]'; tnet.layerConnect = [0 0 0 0; 1 0 0 0; 0 1 0 0; 0 0 1 0]; tnet.outputConnect = [0 0 0 1]; tnet.targetConnect = [0 0 0 1]; %Ahora se definen los parmetros de entrada y la capa. La primera entrada corresponde a %los estados, y la segunda entrada es la demanda. tnet.inputs{1}.range = minmax(Pc(1,:)); Fig 2. Modelo de referencia lineal LRM tnet.inputs{2}.range = minmax(Pc(2,:)); %A continuacin se define el tamao de cada capa y las funciones de %transferencia tnet.layers{1}.size = S1; tnet.layers{1}.transferFcn = 'tansig'; tnet.layers{2}.size = 1; tnet.layers{2}.transferFcn = 'purelin'; tnet.layers{3}.size = 8; tnet.layers{3}.transferFcn = 'tansig'; tnet.layers{4}.size = 1; tnet.layers{4}.transferFcn = 'purelin'; %Se utilizar la funcion de entrenamiento trainbfg %para minimizar el error cuadrtico medio. tnet.performFcn = 'mse'; tnet.trainFcn = 'trainbfg';
tnet.trainParam.min_grad =1e-8 tnet.IW{1,1} = cnet.IW{1,1}(:,1);% son los estados de la planta tnet.inputWeights{1,1}.learn = 1; tnet.IW{1,2} = cnet.IW{1,1}(:,2);% Es la demanda o valor deseado tnet.inputWeights{1,2}.learn = 1; tnet.b{1} = cnet.b{1}; tnet.biases{1}.learn = 1; tnet.b{2} = cnet.b{2}; tnet.biases{2}.learn = 1; tnet.LW{2,1} = cnet.LW{2,1}; tnet.layerWeights{2,1}.learn = 1; tnet.IW{3,1} = mnet.IW{1,1}(:,1); % Son los estados de la planta tnet.inputWeights{3,1}.learn = 0; tnet.LW{3,2} = mnet.IW{1,1}(:,2); % es la seal de control tnet.layerWeights{3,2}.learn = 0; tnet.b{3} = mnet.b{1}; tnet.biases{3}.learn = 0; tnet.LW{4,3} = mnet.LW{2,1}; tnet.layerWeights{4,3}.learn = 0; tnet.b{4} = mnet.b{2}; tnet.biases{4}.learn = 0; % % TRAINING THE NETWORK % ==================== % % We will use TRAIN to train the control network so that % a typical error is 0.002 radians (0.11 deg) for the Q % 2-element target vectors. tnet.trainParam.show = 50; % Frequency of progress displays (in epochs). tnet.trainParam.epochs = 1000; % Maximum number of epochs to train. tnet.trainParam.goal = 0.0002^2; % Sum-squared error goal. % Training begins...please wait... [tnet,tr] = train(tnet,{Pc(1,:); Pc(2,:)},{Tc}); ...and finally finishes. % Now we take the trained weights and put them back in the % control network. cnet.IW{1,1}(:,1) = tnet.IW{1,1}; cnet.IW{1,1}(:,2) = tnet.IW{1,2}; cnet.b{1} = tnet.b{1}; cnet.b{2} = tnet.b{2}; cnet.LW{2,1} = tnet.LW{2,1}; save control cnet
Para poder visualizar el esquema de control es necesario generar el bloque de control de red neuronal, con el cual vamos a poder realizar la simulacin respectiva de diagramas de bloques en simulink. Para esto ejecutamos en consola el comando gensim(cnet ,0.5), y armamos el siguiente diagrama.
Fig 3. Control mediante red Neuronal
Anlisis de Resultados Para poder realizar la correcta simulacin del tanque con 2 variables (nivel y caudal) es necesario seguir el orden de los programas que se ha expuesto en la parte de procedimiento. A continuacin se podr observar grficas y resul tados obtenidos dentro de la simulacin de cada uno de estos cdigos. Programa de Identificacin con redes neuronales del sistema del tanque de dos variables (nivel y caudal mnet) Al ejecutar el cdigo del programa obtendremos
Fig 4. Variacin del nivel del tanque en funcin de la altura inicial y el caudal de ingreso 0 0.05 0.1 0.15 0.2 0.25 1 2 3 4 5 6 7 x 10 -5 -2 -1 0 1 2 3 x 10 -3 En la figura 3. Se puede observar la variacin del nivel con respecto a un caudal de ingreso inicial, A esta grfica se la considera como el funcionamiento del proceso a controlar. Tomando en cuenta que la vlvula de salida se encuentra completamente abierta. En la figura 4. Se puede revisar la identificacin realizada con redes neuronales.
Cdigo generacin de patrones: LRM_nivel.mdl permitir correr el cdigo de generacin de patrones, debido a que el diagrama de bloques realizado en simulink devolver valores que van ha ser usados en el programa, estos valores van a ser tomados del bloque nivelf, adems el parmetro de condicin inicial del integrador tambin es ingresado desde el programa. Al ejecutar el cdigo del programa obtendremos que: -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1 -2 -1 0 1 2 3 x 10 -3 Fig 5. Identificacin del Sistema Aplicando redes neuronales
Fig 6.Variacin de nivel vs. Altura inicial y demanda Se observa que la variacin de nivel producido por el modelo lineal de referencia (LRM) de la figura 1 est en el rango de [-3 , 3]e-3 m .
Entrenamiento de tnet y obtencin del cnet Con el cdigo propuesto se procede a entrenar tnet con los patrones de entrenamiento obtenidos por el modelo lineal de referencia. Como se puede observar en la figura 6. Podemos revisar que se a realizado un entrenamiento del controlador mediante redes neuronales.
Fig 7. Entrenamiento tnet mediante red neuronal Luego de esta ejecucin con la ayuda del comando gensim podremos obtener lo que constituye el bloque de control. Este comando se lo ejecutara en la consola del Matlab. Una vez obtenido este bloque es necesario armar el diagrama de la figura 2. Y proceder a simular.
fig 8. Control por modelo de referencia utilizando redes neuronales
Como se puede observar, la respuesta es muy cercana al SP establecido, y se verifica que sigue un modelo de primer orden, como se fij al momento del diseo del modelo de referencia inicial.
Pruebas en el laboratorio:
Fig9. Sistema Multitanque
Fig10. Pruebas Reales con el controlador neuronal por modelo de referencia en el Sistema Multitanque.
Fig11. Respuesta Real del Controlador
El tiempo de establecimiento es un poco lento sin embargo el sistema responde bien pues su control no tiene sobre impulsos y su cercana aunque no llega a cero el error de estado estacionario, es muy cercano a este.
Bibliografa
S. Baruch, J.M. Flores, F. Nava, I.R Ramirez, and B. Nenkova, "An Adavanced Neura! Network Topology and Learning, Applied for Identification and Control of a D.c. Motor", in Frac. of the First Int. IEEE Symposium on Intelligent Systems, Varna, Bulgaria, Sept., 2002, pp. 289- Nnet.pdf