Practica 1 Logica Difusa

Embed Size (px)

DESCRIPTION

conjuntos difusos matlab

Citation preview

Instituto Politcnico NacionalLa tcnica al servicio de la patriaESIME ZACATENCOIngeniera en Comunicaciones y Electrnica.

CONTROL INTELIGENTE

Instituto Politcnico Nacional

Escuela Superior de Ingeniera Mecnica y ElctricaIngeniera en Comunicaciones y Electrnica PRACTICA 1Conjuntos difusos y operaciones con conjuntos difusos

MONROY GAMBOA MARTIN GUSTAVO

Grupo 9cm21

Prof: Dr. Ponciano Jorge Escamilla Ambrosio

OBJETIVOConocer el comportamiento de los conjuntos difusos as como las operaciones que se pueden realizar entre estos, esto con el fin de profundizar los conocimientos acerca de la lgica difusa.INTRODUCCIONRecientemente, la cantidad y variedad de aplicaciones de la lgica difusa han crecido considerablemente. La lgica difusa es una lgica altenativa a la lgica clsica que pretende introducir un grado de vaguedad las cosas que evalua. En el mundo en que vivimos existe mucho conocimiento ambiguo e impreciso por naturaleza. El razonamiento humano con frecuencia actua con este tipo de informacin. La lgica difusa fue diseada precisamente para imitar el comportamiento del ser humano.La lgica difusa surgio como una herramienta importante para el control de sistemas y procesos industriales complejos, asi como tambin para la electrnica de entretenimiento y hogar, sistemas de diagnostico y otros sistemas expertos.La logica difusa en comparacion con la lgica convencional permite trabajar con informacin que no es exacta para poder definir evaluaciones convencionales, contrario con la lgica tradicional que permite trabajar con informacin definida y precisa.La lgica difusa se puede aplicar en procesos demasiado complejos, cuando no existe un modelo de solucin simple o un modelo matemtico preciso. Es til tambin cuando se necesite usar el conocimiento de un experto que utiliza conceptos ambiguos o imprecisos.MARCO TEORICOConjunto difuso, es un valor lingstico junto a una funcin de pertenencia. El valor lingstico es el nombre del conjunto, y la funcin de pertenencia se define como aquella aplicacin que asocia a cada elemento del universo de discurso el grado con que pertenece al conjunto difuso. Decimos que un conjunto es ntido si su funcin de pertenencia toma valores en {0,1}, y difuso si toma valores en [0,1].En los conjuntos difusos relajamos la restriccin de que la funcin de pertenencia valga 0 1, y dejamos que tome valores en el intervalo [0,1]. La necesidad de trabajar con conjuntos difusos surge de un hecho: hay conceptos que no tienen lmites claros. Por ejemplo: Una persona que mide 1.80 es alta? Una temperatura de 15 grados es baja?Veamos algunas definiciones tiles: Variable lingstica, es aquella nocin o concepto que vamos a calificar de forma difusa. Por ejemplo: la altura, la edad, el error, la variacin del error... Le aplicamos el adjetivo "lingstica" porque definiremos sus caractersticas mediante el lenguaje hablado. Universo de discurso, es el rango de valores que pueden tomar los elementos que poseen la propiedad expresada por la variable lingstica. En el caso de la variable lingstica 'altura de una persona normal', sera el conjunto de valores comprendido entre 1.4 y 2.3 m. Valor lingstico, son las diferentes clasificaciones que efectuamos sobre la variable lingstica: en el caso de la altura, podramos dividir el universo de discurso en los diferentes valores lingsticos: por ejemplo bajo, mediano y alto. Dado un conjunto difuso A, se define como alfa-corte de A, al conjunto de elementos que pertenecen al conjunto difuso A con grado mayor o igual que alfa, es decir: A = x X { ( x ) } Alfa corte, se define como al conjunto de elementos con grado de pertenencia estrictamente mayor que alfa, es decir: A = x X { ( x ) > } Se define como soporte de un conjunto difuso A, al conjunto ntido de elementos que tienen grado de pertenencia estrictamente mayor que 0, o sea, al alfa-corte estricto de nivel 0. Soporte(A) = { x X / A (x) > 0 } Se define como ncleo de un conjunto difuso A, al conjunto ntido de elementos que tienen grado de pertenencia 1. (alfa-corte de nivel 1) Ncleo(A) = { x X / A (x) = 1 } Se define la altura de un conjunto difuso A como el valor ms grande de su funcin de pertenencia. Se dice que un conjunto difuso est normalizado si y solo si su ncleo contiene algn elemento (o alternativamente, si su altura es 1), es decir: x X A (x) = 1 El elemento x de U para el cual F(x) = 0.5 se llama el punto de cruce. Un conjunto difuso cuyo soporte es un nico punto x de U y tal que la funcin de pertenencia de x es 1 (es decir, el soporte coincide con el ncleo y tienen un nico punto) se llama un conjunto difuso unitario (singleton).

FUNCIONES DE MEMBRESIA MAS COMUNES1.- Triangular MF:

2.- Trapezoidal MF: 3.- Gaussian MF:

4.- Generalized bell MF:

5.-Sigmoidal MF:

OPERACIONES CON CONJUNTOS DIFUSOS

DESARROLLOComenzaremos por analizar los programas desarrollados en lenguaje .m , se tratara de describir el algoritmo de cada cdigo asi como modificar el cdigo, para una mejor comprensin.1.-mf_univ.mcdigo originalx = [0 1 2 3 4 5 6]; //se declara la variable x en este caso el nmero de niosmf = [.1 .3 .7 1 .6 .2 .1]; //se declara mf, que es el valor de la function de membresiasubplot(2,2,1); //se da la ubicacion y caracteristica de una subgraficaplot(x, mf, '*'); //grafica la variable x contra mf axis([-inf inf 0 1.2]); //define los limites de los ejeshold ongrid onfor ii=1:length(x) // es una instruccion for la cual dibujara una raya en la grafica plot([x(ii) x(ii)],[0 mf(ii)], '-');endhold off%xlabel('X = Number of Courses');xlabel('X = Number of Children');ylabel('Membership Grades');title('(a) MF on a Discrete Universe'); x = 0:1:100;mf = gbell_mf(x, [10, 2, 50]); //llama a la function gbellmf y se definen sus parametrossubplot(2,2,2);plot(x, mf);axis([-inf inf 0 1.2]);grid onxlabel('X = Age');ylabel('Membership Grades');title('(b) MF on a Continuous Universe');

codigo modificadox = [0 1 2 3 4 5 6]; mf = [.1 .5 .3 .6 .8 1 .7]; // se modifica el valor de la funcin de membresiasubplot(2,2,1);plot(x, mf, '*');axis([-inf inf 0 1.2]);hold ongrid onfor ii=1:length(x) plot([x(ii) x(ii)],[0 mf(ii)], '-');endhold off%xlabel('X = Number of Courses');xlabel('X = Number of Children');ylabel('Membership Grades');title('(a) MF on a Discrete Universe'); x = 0:1:100;mf = gbell_mf(x, [5, 3, 30]); /* a(10=>5) ; b(2=>3); c(50=>30)subplot(2,2,2); con esto el ancho de la campana se reduce, se tiene una plot(x, mf); mayor pendiente y el centro se mueve a 30*/axis([-inf inf 0 1.2]);grid onxlabel('X = Age');ylabel('Membership Grades');title('(b) MF on a Continuous Universe');

2.-lingmf.m

codigo original

x = (0:90)';mf1 = gbell_mf(x, [30, 5, 0]); /* En este codigo se representan varias funcionesmf2 = gbell_mf(x, [15, 3, 45]); gbellmf el color azul representa jovenes, color mf3 = gbell_mf(x, [30, 5, 90]); verde a una edad media y el color rojo a unasubplot(211); vieja */ plot(x, [mf1 mf2 mf3]);axis([-inf inf 0 1.4]);xlabel('X = Age');ylabel('Membership Grades');h(1) = text(15, 1.15, 'Young');h(2) = text(45, 1.15, 'Middle Aged');h(3) = text(75, 1.15, 'Old');set(h, 'horizon', 'center');cyclesty;

codigo modificado

x = (0:90)';mf1 = gbell_mf(x, [10, 7, 10]); /*Este codigo se modifico de forma en que se pudieranmf2 = gbell_mf(x, [8, 9, 45]); separar las curvas anteriores, esto se logro mf3 = gbell_mf(x, [15, 5, 90]); cambiando los anchos de las curvas(parmetro a), subplot(211); las pendientes de las curvas(parametro b), plot(x, [mf1 mf2 mf3]); y el centro de las curvas(parametro c) */ axis([-inf inf 0 1.4]);xlabel('X = Age');ylabel('Membership Grades');h(1) = text(15, 1.15, 'Young');h(2) = text(45, 1.15, 'Middle Aged');h(3) = text(75, 1.15, 'Old');set(h, 'horizon', 'center'); cyclesty;

3.-convexmf.mcodigo originalx = 0:1:100;mf = gbell_mf(x, [20, 2, 25]); /*genera una campana con los parmetros mencionadosindex = find(mf >= 0.5); en la variable index se guardan los valores mayores new_mf = mf(index) - 0.5; a 0.5, a estos valores se les resta 0.5, y despuesnew_mf = new_mf/max(new_mf); se normalizan */ new_x = x(index); subplot(221);plot(new_x, new_mf); //se grafica la curva normalizadaaxis([-inf inf 0 1.2]);ylabel('Membership Grades');title('(a) Two Convex Fuzzy Sets');hold on;mf = gbell_mf(x, [5, 2, 75]); /*se crea una nueva curva y con esto se crea un conjunto plot(x, mf); convexo */ hold off;set(gca, 'xticklabels', []);subplot(222);mf1 = gbell_mf(x, [15, 3, 60]); /*se generan dos curvas las cuales en un punto semf2 = gbell_mf(x, [10, 2, 30]); unen generando un conjunto no convexo */ new_mf = mf1+0.4*mf2;new_mf = new_mf/max(new_mf);plot(x, new_mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades');title('(b) A Nonconvex Fuzzy Set');axis;set(gca, 'xticklabels', []);

cdigo modificadox = 0:1:100;mf = gbell_mf(x, [10, 1, 15]); /* se cambio el centro, la pendiente y el ancho de index = find(mf >= 0.8); la curva */new_mf = mf(index) - 0.8; // se cambia el limite de restanew_mf = new_mf/max(new_mf);new_x = x(index);subplot(221);plot(new_x, new_mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades');title('(a) Two Convex Fuzzy Sets');hold on;mf = gbell_mf(x, [5, 2, 75]); plot(x, mf);hold off;set(gca, 'xticklabels', []); subplot(222);mf1 = gbell_mf(x, [25, 3, 70]); /* se modifican los parametros de las curvas para mf2 = gbell_mf(x, [10, 2, 30]); separarlas, pero a la vez juntarlas gracias al new_mf = mf1+0.9*mf2; multiplo que influye en new_mf */new_mf = new_mf/max(new_mf);plot(x, new_mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades');title('(b) A Nonconvex Fuzzy Set');axis;set(gca, 'xticklabels', []);

4.- fuzsetop.m

cdigo original

x = (0:1:100)'; //se declara x, de 0 a 100, de uno en unoA = gbell_mf(x, [20, 4, 40]); // genera una curva campana,centro=40B = gauss_mf(x, [70, 20]); //genera una curva de gauss, centro=70 subplot(221); plot(x, A, x, B); //grafica la campana y gaussset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(a) Fuzzy Sets A and B');text(40, 1.1, 'A');text(70, 1.1, 'B'); subplot(222); plot(x, 1-A); //realiza la operacion complemento de Aset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(b) Fuzzy Set "not A"'); subplot(223); plot(x, max(A,B)); //realiza una suma de ambas curvas, una op. ORset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(c) Fuzzy Set "A OR B"'); subplot(224); plot(x, min(A,B)); // realiza una operacion ANDset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(d) Fuzzy Set "A AND B"');

codigo modificadox = (0:1:100)';A = tri_mf(x, [10, 40, 60]); //genera un trianguloB = sig_mf(x, [1, 50]); // genera una curva sigmoidal con centro en 50 subplot(221); plot(x, A, x, B); //grafica ambas curvasset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(a) Fuzzy Sets A and B');text(40, 1.1, 'A');text(70, 1.1, 'B'); subplot(222); plot(x, 1-max(A,B)); //grafica el complemento de la operacion AND de A,Bset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(b) Fuzzy Set "not A"'); subplot(223); plot(x, max(A,B)); //grafica la operacion OR de A y Bset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(c) Fuzzy Set "A OR B"'); subplot(224); plot(x, min(A,B)); //grafica la operacion AND de A y Bset(gca, 'xticklabels', []);axis([-inf inf 0 1.2]);title('(d) Fuzzy Set "A AND B"');

5.-disp_mf.mcodigo originalx = 0:100;mf = tri_mf(x, [20, 60, 80]); /* en este cdigo se subplot(221); plot(x, mf); representan cuatro tiposaxis([-inf inf 0 1.2]); de curvas: ylabel('Membership Grades'); title('(a) Triangular MF'); A)trimf, con los puntos%set(gca, 'xticklabels', []); a=20;b=60;C=80set(gca, 'xtick', [0 20 40 60 80 100]); B)trapmf, con los puntos mf = trap_mf(x, [10, 20, 60, 95]); a=10;b=20;c=60;d=95subplot(222); plot(x, mf); C)gaussmf, con centro en 50 axis([-inf inf 0 1.2]); y una sigma de 20 ylabel('Membership Grades'); title('(b) Trapezoidal MF'); D)gbellmf, con centro en %set(gca, 'xticklabels', []); 50, pendiente de 4 yset(gca, 'xtick', [0 20 40 60 80 100]); ancho de 40 */ mf = gauss_mf(x, [50, 20]);subplot(223); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(c) Gaussian MF');%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]); mf = gbell_mf(x, [20, 4, 50]);subplot(224); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(d) Generalized Bell MF');%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]);

codigo modificadox = 0:100; mf = tri_mf(x, [15, 30, 50]);subplot(221); plot(x, mf); /* Se modificaron centrosaxis([-inf inf 0 1.2]); anchos y puntos de cada ylabel('Membership Grades'); title('(a) Triangular MF'); curva correspondiente.%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]); mf = trap_mf(x, [10, 30, 50, 75]);subplot(222); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(b) Trapezoidal MF');%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]); mf = gauss_mf(x, [40, 10]);subplot(223); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(c) Gaussian MF');%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]); mf = gbell_mf(x, [10, 4, 30]);subplot(224); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(d) Generalized Bell MF');%set(gca, 'xticklabels', []);set(gca, 'xtick', [0 20 40 60 80 100]);

6.-allbells.mcodigo originalx = (-10:0.4:10)'; b = 2; /* basicamente, se muestran los cambios al modificar losc = 0; parametros en la curva gbellmf */ mf1 = gbell_mf(x, [2, b, c]); mf2 = gbell_mf(x, [4, b, c]); mf3 = gbell_mf(x, [6, b, c]); mf = [mf1 mf2 mf3];subplot(221); plot(x, mf); title('(a) Changing ''a''');axis([-inf inf 0 1.2]); a = 5;c = 0;mf1 = gbell_mf(x, [a, 1, c]); mf2 = gbell_mf(x, [a, 2, c]); mf3 = gbell_mf(x, [a, 4, c]); mf = [mf1 mf2 mf3];subplot(222); plot(x, mf); title('(b) Changing ''b''');axis([-inf inf 0 1.2]); a = 5;b = 2;mf1 = gbell_mf(x, [a, b, -5]); mf2 = gbell_mf(x, [a, b, 0]); mf3 = gbell_mf(x, [a, b, 5]); mf = [mf1 mf2 mf3];subplot(223); plot(x, mf); title('(c) Changing ''c''');axis([-inf inf 0 1.2]); c = 0;mf1 = gbell_mf(x, [4, 4, c]); mf2 = gbell_mf(x, [6, 6, c]); mf3 = gbell_mf(x, [8, 8, c]); mf = [mf1 mf2 mf3];subplot(224); plot(x, mf); title('(d) Changing ''a'' and ''b''');axis([-inf inf 0 1.2]);_

codigo modificadox = (-10:0.4:10)'; /* se grafican los cambios posibles en una curva gaussmf, al modificar los parmetros sigma y el centro de esta curva */ b = 2;c = 0;mf1 = gaussmf(x, [2, b, c]); mf2 = gaussmf(x, [4, b, c]); mf3 = gaussmf(x, [6, b, c]); mf = [mf1 mf2 mf3];subplot(221); plot(x, mf); title('(a) Changing ''sig''');axis([-inf inf 0 1.2]); a = 5;c = 0;mf1 = gaussmf(x, [a, 1, c]); mf2 = gaussmf(x, [a, 2, c]); mf3 = gaussmf(x, [a, 4, c]); mf = [mf1 mf2 mf3];subplot(222); plot(x, mf); title('(b) Changing ''b''');axis([-inf inf 0 1.2]);

7.-disp_sig.mcodigo originalx = (-10:0.4:10)';y1 = sig_mf(x, [1, -5]);y2 = sig_mf(x, [2, 5]);y3 = sig_mf(x, [-2, 5]); genfig('Various MFs generated via sigmoid function'); /* Este codigo genera varias subplot(221); plot(x, y1, x, y2); curvas sigmuidales y hace text(-5, 0.9, 'y1'); text(4, 0.6, 'y2'); operaciones con las mismas, en la primera grafica muestra las axis([-inf inf 0 1.2]); dos curvas, en la segundatitle('(a) y1 = sig(x;1,-5); y2 = sig(x;2,5)'); grafica muestra una resta entre las curvas, la tercera subplot(222); plot(x, y1-y2); grafica muestra, ambas axis([-inf inf 0 1.2]); graficas, solo que es una title('(b) |y1 - y2|'); invertida, y la ultima grafica muestra una subplot(223); plot(x, y1, x, y3); multiplicacion entretext(-4, 0.7, 'y1'); text(5, 0.7, 'y3'); ambas graficas */axis([-inf inf 0 1.2]);title('(c) y1 = sig(x;1,-5); y3 = sig(x;-2,5)');

subplot(224); plot(x, y1.*y3);axis([-inf inf 0 1.2]);title('(d) y1*y3'); cyclesty;

cdigo modificadox = (-10:0.4:10)';y1 = sig_mf(x, [1, -3]); /* se modifican parmetros de las curvasy2 = sig_mf(x, [1, 0]); signuidales.y3 = sig_mf(x, [-2, 1]); lo que hara que cambie su centro y su pendiente */ genfig('Various MFs generated via sigmoid function'); subplot(221); plot(x, y1, x, y2);text(-5, 0.9, 'y1'); text(4, 0.6, 'y2');axis([-inf inf 0 1.2]);title('(a) y1 = sig(x;1,-5); y2 = sig(x;2,5)'); subplot(222); plot(x, y1-y2);axis([-inf inf 0 1.2]);title('(b) |y1 - y2|'); subplot(223); plot(x, y1, x, y3);text(-4, 0.7, 'y1'); text(5, 0.7, 'y3');axis([-inf inf 0 1.2]);title('(c) y1 = sig(x;1,-5); y3 = sig(x;-2,5)'); subplot(224); plot(x, y1.*y3);axis([-inf inf 0 1.2]);title('(d) y1*y3'); cyclesty;

8.-difflr.m codigo originalx = 0:100; mf = lr_mf(x, [65, 60, 10]); /* estos parametros corresponden a lo siguiente:subplot(221); plot(x, mf); b=unidades recorridas hacia la izquierda del punto mas altoaxis([-inf inf 0 1.2]); a=punto mas alto, c=uni. Recorr. Hacia la der. */ ylabel('Membership Grades'); title('(a)');xlabel('X'); mf = lr_mf(x, [25, 10, 40]); /* grafica similar a la primera */subplot(222); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(b)');xlabel('X');

codigo modificadox = 0:100; mf = lr_mf(x,[ 60, 5, 20]);subplot(221); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(a)');xlabel('X'); mf = lr_mf(x, [50, 25, 25]);subplot(222); plot(x, mf);axis([-inf inf 0 1.2]);ylabel('Membership Grades'); title('(b)');xlabel('X');

Se cambian las unidades recorridas hacia la derecha y hacia la izquierda, que correponden a los parametros b y c, asi como se mueve el punto mas alto, que es el parametro a.

CONLUSIONESCon esta prctica se observa el comportamiento de las funciones de membresa adems de comprender el comportamiento de los conjuntos difusos al ser sometidos a ciertos operadores como AND y OR, adems de realizar operaciones como obtener el complemento de estos conjuntos. Otro punto importante es el de poner en practica la forma de programacin en lenguaje .m, y conocer mas acerca del entorno en MATLAB.Cabe mencionar la importancia de la lgica difusa, ya que como se menciono esta nos ayuda a modelar fenmenos no lineales y a acercarnos al comportamiento humano lo que puede darnos como consecuencia generar inteligencia artificial, me refiero a que las maquinas tambin puedan aprender a tomar decisiones por si solas.

BIBLIOGRAFIA http://catarina.udlap.mx/u_dl_a/tales/documentos/lmt/ramirez_r_o/capitulo3.pdf http://delta.cs.cinvestav.mx/~gmorales/ldifll/node2.html http://palmia.galeon.com/capitulo54.htm

R E PO R T E

14 SEP 2015