miércoles, 17 de febrero de 2010
Estrategias de Busqueda
Modelo de la ruta más corta
Hay que considerar que nuestro objetivo es una conexión de dos nodos especiales llamados origen y destino. A cada ligadura (arco no dirigido) se asocia una distancia no negativa. El objetivo es encontrar la ruta más corta (la trayectoria con la mínima distancia total) del origen al destino.
El algoritmo que tenemos a continuación estará aplicado en nuestro agente para obtener una ruta más corta:
AVARA
functionAvara (MAPA,AVARA,OBJETIVO,ORIGEN)
lon=length(AVARA);
i=1;
ind=0;
entrar=1;
ban=0;
while (ban == 0) && (i<=lon)
if (strcmp(OBJETIVO,AVARA{i,1})==1)
if (entrar == 1)
ind_ini=i;
entrar=0;
end
ind_fin=i;
if (strcmp(OBJETIVO,AVARA{i+1,1})==0)
ban=1;
end
end
i=i+1;
end
if (i>lon)
h=msgbox('La direccion no esta bien escrita o no fue considerada en el mapa Turistico','Direccion Inexistente!!!','warn','modal');
return
end
lon=length(MAPA);
aux=ORIGEN;
l=1;
m=1;
for i=1:lon
if (strcmp(aux,MAPA{i,1})==1)
ban=1;
aux1=MAPA{i,2};
j=ind_ini;
while (strcmp(aux1,AVARA{j,3})==0)
j=j+1;
end
texto{l}=AVARA{j,3};
valor(l)=AVARA{j,2};
l=l+1;
end
if (i <>
if (strcmp(aux,MAPA{i+1,1})==0)&&(ban==1)
[C ind]=min(valor);
camino{m}=texto(ind);
m=m+1;
aux=texto(ind);
texto=[];
valor=[];
l=1;
ban=0;
end
end
end
cam=ORIGEN;
for i=1:length(camino)
cam=strcat(cam,',',camino{i});
end
h=msgbox(cam,'Resultado','modal');
Dibujar_Mapa(MAPA,camino);
6.2 Búsqueda A*(I) y A*: Es una suma de las búsquedas heurística y optimal, utiliza la siguiente función para calcular el costo total para cada nodo f(n) = c(n)+h(n), donde: f(n) es el costo total de la ruta desde el estado n hacia el estado final, c(n) es el costo estimado de la ruta para ir del estado n al estado final y h(n) es la heurística asignada al estado n.
Plasmando lo dicho hemos utilizado el siguiente algoritmo para comprobar que A* Es un algoritmo que también puede servir de manera eficiente en nuestro algoritmo:
ALGORITMO A*
FunctionAsterisco (MAPA,AVARA,OBJETIVO,ORIGEN)
lon=length(AVARA);
i=1;
ind=0;
entrar=1;
ban=0;
while (ban == 0) && (i<=lon)
if (strcmp(OBJETIVO,AVARA{i,1})==1)
if (entrar == 1)
ind_ini=i;
entrar=0;
end
ind_fin=i;
if (strcmp(OBJETIVO,AVARA{i+1,1})==0)
ban=1;
end
end
i=i+1;
end
if (i>lon)
h=msgbox('La direccion no esta bien escrita o no fue considerada en el mapa Turistico','Direccion Inexistente!!!','warn','modal');
return
end
lon=length(MAPA);
aux=ORIGEN;
l=1;
m=2;
camino{1}=ORIGEN;
for i=1:lon
if (strcmp(aux,MAPA{i,1})==1)
ban=1;
aux1=MAPA{i,2};
j=ind_ini;
while (strcmp(aux1,AVARA{j,3})==0)
j=j+1;
end
texto{l}=AVARA{j,3};
valor(l)=AVARA{j,2}+MAPA{i,3};
l=l+1;
end
if (i <>
if (strcmp(aux,MAPA{i+1,1})==0)&&(ban==1)
[C ind]=min(valor);
camino{m}=texto(ind);
m=m+1;
aux=texto(ind);
texto=[];
valor=[];
l=1;
ban=0;
end
end
end
cam=[];
for i=1:length(camino)
cam=strcat(cam,',',camino{i});
end
h=msgbox(cam,'Resultado','modal');
Dibujar_Mapa(MAPA,camino);