Autor Tema: Matlab - Lógica fuzzy

0 Usuarios y 1 Visitante están viendo este tema.

03 Junio, 2009, 11:43 pm
Leído 2218 veces

luigi

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 20
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Tengo que simular un robot en matlab, que utilice lógica fuzzy (de mi materia de inteligencia artificial), el robot debe de llegar a un objetivo esquivando un obstáculo, de manera que el robot eliga la mejor opción de llegar al objetivo.

Hasta ahora ya conseguí dibujar los objetos (el robot, el obstáculo y el objetivo), y pude hacer que se muevan las coordenadas para aparentar movimiento, con ciclos while e if, sin embargo no se aplica lógica fuzzy, es decir debo de agregarle una función triangular que ya tengo, pero no se como implementarla a los objetos.

Este es mi código:

clear all, close all, clc

angulo=90;
g=.5;
l=.5;
origx=0;
origy=0;

angulo_=90;
g_=.5;
l_=.5;
origx_=5;
origy_=8;

angulo_est=90;
g_est=.5;
l_est=.5;
origx_est=5;
origy_est=6;


[x_square1,y_square1] =barra(angulo,g,l,origx,origy);

[x_square2,y_square2] =barra(angulo_,g_,l_,origx_,origy_);

[x_square3,y_square3] =barra(angulo_est,g_est,l_est,origx_est,origy_est);

plot(x_square1,y_square1,'-b',...
         x_square2,y_square2,'-b',...
         x_square3,y_square3); axis([-20 20 -20 20]);
   grid
   
pause (.3);
   while origx ~= origx_ || origy ~= origy_
     
       if origx ~= origx_ && origy ~= origy_
           if origx < origx_ && origy < origy_
               if origx + 1 == origx_est && origy + 1 == origy_est
                   origx = origx + 1
               else
               origx = origx + 1
               origy = origy + 1
               end
           elseif origx > origx_ && origy > origy_
               if origx - 1 == origx_est && origy - 1 == origy_est
                   origx = origx - 1
               else
               origx = origx - 1
               origy = origy - 1
               end
           elseif origx < origx_ && origy > origy_
               if origx + 1 == origx_est && origy -1 == origy_est
                   origx = origx + 1
               else
               origx = origx +1
               origy = origy - 1
               end
               
           else origx > origx_ && origy < origy_
               if origx -1 == origx_est && origy + 1 == origy_est
                   origy = origy + 1
               else
               origx = origx - 1
               origy = origy +1
               end
           end
       
       elseif origx ~= origx_
           if origx < origx_
               if origx + 1 == origx_est && origy == origy_est
                   origy = origy - 1
               else
               origx = origx + 1
               end
           else origx > origx_
               if origx - 1 == origx_est && origy == origy_est
                   origy = origy + 1
               else
               origx = origx -1
               end
           end
       
       else origy ~= origy_
           if origy < origy_
               if origy + 1 == origy_est && origx == origx_est
                   origx = origx + 1
               else
               origy = origy + 1
               end
           else origy > origy_
               if origy - 1 == origy_est && origx == origx_est
                   origx = origx - 1
                   origy = origy - 1
               else
               origy = origy -1
               end
           end
           
       end       
       
[x_square1,y_square1] =barra(angulo,g,l,origx,origy);

[x_square2,y_square2] =barra(angulo_,g_,l_,origx_,origy_);

[x_square3,y_square3] =barra(angulo_est,g_est,l_est,origx_est,origy_est);

plot(x_square1,y_square1,'-b',...
         x_square2,y_square2,'-b',...
         x_square3,y_square3); axis([-20 20 -20 20]);
   grid
       
pause (.3);
   
   end
   clc

¿cómo podría agregarle lógica fuzzy en lugar del ciclo while e if?

Utilizando dos entradas (angulo de inclinacion y distancia al obstaculo) y una salida (angulo de giro)

Cualquier respuesta se agradece

05 Junio, 2009, 09:05 pm
Respuesta #1

topo23

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 937
  • Karma: +0/-0
La logica fuzzy o difusa, se utiliza normalmente cuando queremos cuantificar algo que acepta ademas de los valores verdadero o falso, un rango intermedio. Por ejemplo si tenemos el predicado: esta nublado? respuestas posibles son: si, no, parcialmente nublado, levemente nublado, etc.

En general lo que se hace es tener un rango, por ejemplo 0..1, donde 0 es falso y 1 es cierto, y los valores intermedio indican cierto grado de veracidad. Existen diferentes formas de extender las operaciones discretas 'and', 'or' etc a operadores que tomen valores continuos.

En el caso de tu ejercicio una forma es aplicar logica difusa es asignar un rango de certidumbre a un obstaculo o a un objetivo.
.