{"id":256,"date":"2004-04-16T11:48:51","date_gmt":"2004-04-16T18:48:51","guid":{"rendered":"http:\/\/www.kirainet.com\/lgica-difusa-fuzzy-logic\/"},"modified":"2004-04-16T11:48:51","modified_gmt":"2004-04-16T18:48:51","slug":"logica-difusa-fuzzy-logic","status":"publish","type":"post","link":"https:\/\/www.robotic-lab.com\/blog\/2004\/04\/16\/logica-difusa-fuzzy-logic\/","title":{"rendered":"L\u00f3gica Difusa &#8211; Fuzzy Logic"},"content":{"rendered":"<p>El post es un poco duro pero si le&eacute;is todo el art&iacute;culo seguro que aprend&eacute;is cosas nuevas.<\/p>\n<p>Hasta el siglo XX la l&oacute;gica cl&aacute;sica se trabajaba con dos valores: Verdadero (1) o Falso (0). Pero durante el &uacute;ltimo siglo se comenzaron a crear nuevas l&oacute;gicas que incorporaban m&aacute;s valores de certeza, por ejemplo la l&oacute;gica de <a href=\"http:\/\/www-gap.dcs.st-and.ac.uk\/~history\/Mathematicians\/Lukasiewicz.html\">Lukasiewicz<\/a> incorpora un nuevo valor, el de Medio Verdadero o Medio Falso seg&uacute;n se vea. De esta forma ya tenemos tres valores (Estas l&oacute;gicas se suelen llamar trivalentes) : Verdadero (1), Medio Verdadero (0.5) o Falso (0). Lo primera primera idea que nos viene a la cabeza es la seguir creando nuevos valores de verdad como vemos en la imagen donde ya tenemos 5 valores de verdad. Por ejemplo si una cosa sabemos casi seguro que es verdadera le asignar&iacute;amos el valor de verdad 0.75.<\/p>\n<p><img><\/p>\n<p>Si extendemos la idea a <strong> infinitos valores<\/strong> entre el 0 y el 1 hemos descubierto la L&oacute;gica Difusa. &iquest;Y para que co&ntilde;o sirve esta paranoia mental? Eso mismo pensaba la comunidad cient&iacute;fica a mediados del siglo pasado, nadie apostaba un duro por la la L&oacute;gica Difursa. Pero llegaron los japoneses (A&ntilde;os 70) y le dieron utilidades pr&aacute;cticas que se usan hoy en d&iacute;a en todo el mundo. La primera aplicaci&oacute;n pr&aacute;ctica que le dieron fue la de frenar electr&oacute;nicamente y con suavidad el Shinkansen (Tren bala) japon&eacute;s. <\/p>\n<p>Para frenar un coche normalmente vamos soltando el acelerador suavemente mientras frenamos suavemente calculando nosotros intuitivamente los que tardaremos en frenar etc, pero no solemos apretar el freno a fondo para frenar. Para hacer un programa que frenara un coche o un tren de forma autom&aacute;tica lo primero que podr&iacute;amos hacer ser&iacute;a: if(quieroParar) frenar(); .  Esto har&iacute;a que se frenara a lo bestia. Una mejora ser&iacute;a if(quieroParar &amp; Velocidad_Alta) frenar_hasta_la_mitad(); else if(quieroParar &amp; !VelocidadAlta) frenar_a_tope(). Si siguieramos introduciendo ifs hasta el infinito creando nuevos valores de Velocidad (Al igual que hac&iacute;amos al principio del art&iacute;culo con los valores de Verdadero,MedioVerdadero, Falso etc) conseguir&iacute;amos un sistema fuzzy pero ser&iacute;a una chapuza. El ejemplo anterior es simplemente para que veais que frenar suavemente un tren de forma programada no es tan sencillo como podamos pensar a primera vista.<\/p>\n<p>Veamos como hay que proceder para implementar un buen sistema fuzzy. Tener en cuenta que a partir de ahora trabajamos con n&uacute;meros reales, es decir, entre el 100 y el 75 hay m&aacute;s valores, etc&#8230;<\/p>\n<p><img><br \/>El eje vertical indica el valor de verdad de cada velocidad. El eje horizontal la velocidad.<\/p>\n<p>En vez de explicar este esquema detenidamente, lo vamos a ver con un ejemplo pr&aacute;ctico. Imaginaros que el tren viaja a 77km\/h, operar&iacute;amos de la siguiente forma:<\/p>\n<p><img><\/p>\n<p>Buscamos en el eje horizontal la velocidad a la que vamos (77) y trazamos una vertical marcando las intersecciones con los tri&aacute;ngulos. A partir de las intersecciones tomamos su valor de verdad mirando el eje vertical. En este caso tenemos dos intersecciones, la primera intersecta con el tri&aacute;ngulo de Velocidad Media a una altura de 0.20 (Lo vemos en el eje vertical), la segunda intersecci&oacute;n corta con el tri&aacute;ngulo de Velocidad Alta a una altura de 0.45. Por lo tanto la consideraci&oacute;n del sistema es que si vamos a 77 Km\/h nuestra velocidad es 0.2 Media y 0.45 Alta. Es decir, hemos conseguido que el sistema tenga una estimaci&oacute;n &#8216;difusa&#8217; de la velocidad actual. Probad a sustituir otros valores de velocidad y ver&eacute;is como lo que se obtiene tiene bastante sentido, si ponemos por ejemplo 98km\/h saldr&aacute; un valor de 0.90 Alta etc.<\/p>\n<p>Veis como hemos conseguido que el sistema pueda saber en cada momento una consideraci&oacute;n sobre la velocidad que llevamos. A partir de los valores obtenidos se puede tomar ya una decisi&oacute;n sobre cuanto hay que pulsar el freno (Para explicar esto necesitar&iacute;a unos cuantos posts ya que habr&iacute;a que crear otro esquema como el anterior para los valores del freno y combinarlo todo). Lo importante se que os qued&eacute;is con la idea de que al tener muchos valores entre Verdadero(Velocidad Alta) y Falso (Velocidad Lenta) podemos conseguir frenar de forma suave.<\/p>\n<p>Si quisieramos tener un sistema m&aacute;s preciso (que frenara m&aacute;s suavemente) podr&iacute;amos crear m&aacute;s tri&aacute;ngulos que indicarna Velocidad Muy Alta, Velocidad Muy baja etc.  Veamos un ejemplo para el dise&ntilde;o de un sistema de aire acondicionado. Con un aire acondicionado si queremos ahorrar energ&iacute;a y que los cambios de temperatura no sean muy bruscos se puede usar un sistema fuzzy para regular de forma autom&aacute;tica su funcionamiento. Si programamos el aire acondicionado con if(temperatura&gt;18) enfriar(); else calentar(); gastaremos mucha energ&iacute;a ya que estaremos continuamente pasando a m&aacute;s de 18 grados y despu&eacute;s a menos de 18 grados, necesitamos un sistema fuzzy <img src='http:\/\/www.kirainet.com\/wp-includes\/images\/smilies\/icon_wink.gif' alt=';)' class='wp-smiley' \/>  Veamos como ser&iacute;a el esquema fuzzy de un sistema de aire acondicionado:<\/p>\n<p><img><\/p>\n<p>Supongo que con este esquema ya habr&eacute;is pillado la idea, o quiz&aacute;s os he liado m&aacute;s.<\/p>\n<p>Finalmente os muestro algunas aplicaciones pr&aacute;cticas adem&aacute;s de las ya comentadas. Entre par&eacute;ntesis pongo una pregunta para que ve&aacute;is el porqu&eacute; se usa un sistema fuzzy en estros aparatos.<\/p>\n<p><strong>Hoy en d&iacute;a los sistemas de l&oacute;gica difusa est&aacute;n  en las camaras de fotos para calcular si llega mucha o poca luz al diafragma (&iquest;Poca, bastante, mucha luz?), en <a href=\"http:\/\/www.kirainet.com\/index.php?m=200404#70\">robots<\/a> para que se muevan con suavidad (&iquest;Velocidad del brazo Alta, Baja?), en sistemas de piloto autom&aacute;tico y ontrol de aviones (&iquest;Altura del avi&oacute;n Baja, Alta, Muy Alta?) o por ejemplo el sistema que acaba de sacar Toyota para aparcar autom&aacute;ticamente el coche (&iquest;Cerca, Lejos, Muy Cerca, Muy Lejos del bordillo?. <\/strong> <\/p>\n<p>Despu&eacute;s de este art&iacute;culo tan duro si algo no est&aacute; bien explicado, hay alguna inconsistencia o no os hab&eacute;is enterado de nada avisad.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El post es un poco duro pero si le&#233;is todo el art&#237;culo seguro que aprend&#233;is cosas nuevas.<br \/>\nHasta el siglo XX la l&#243;gica cl&#225;sica se trabajaba con dos valores: Verdadero (1) o Falso (0). Pero durante el &#250;ltimo siglo se comenzaron a crear nuevas l&#243;gicas que incorporaban m&#225;s valores de certeza, por ejemplo la l&#243;gica de [&#8230;]<\/p>\n","protected":false},"author":31,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-256","post","type-post","status-publish","format-standard","hentry","category-otros"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1YYAx-48","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/posts\/256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":0,"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robotic-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}