Está en la página 1de 13

UNIVERSIDAD CATOLICA DE SANTA MARIA

ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y


MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

I. OBJETIVO GENERAL
• Conocer el funcionamiento de los agentes inteligentes.
• Realizar el programa para un agente inteligente.

II. MATERIALES Y EQUIPOS


➢ Libro de consulta
➢ Computador
➢ Software Matlab.

III. PROCEDIMIENTO

JUEGO DEL 8 PUZZLE

1. Para el problema del 8 puzzle, realice un programa en Matlab que permita al usuario “desarrollar” el
juego del 8 puzzle en el computador.
a) Genere un estado inicial y uno final definido por el usuario.

Mi=input('Ingresar Matriz de estado inicial: ');%Matriz inicial


Mf=input('Ingresar Matriz de estado final: ');%Matriz final

b) Realice cada una de los operadores definidos.

%Buscar 0
for j = 1:3
for i = 1:3
if Mt(i,j) == 0
x=i;
y=j;
end
end
end

%Desplazamiento hacia arriba


if x~=1
tempv=Mt(x-1,y);
Mt(x-1,y)=0;
Mt(x,y)=tempv;
Mt
end
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

%Desplazamiento hacia abajo


if x~=3
tempv=Mt(x+1,y);
Mt(x+1,y)=0;
Mt(x,y)=tempv;
Mt
end

%Desplazamiento hacia izquierda


if y~=1
tempv=Mt(x,y-1);
Mt(x,y-1)=0;
Mt(x,y)=tempv;
Mt
end

%Desplazamiento hacia derecha


if y~=3
tempv=Mt(x,y+1);
Mt(x,y+1)=0;
Mt(x,y)=tempv;
Mt
end

c) Desarrolle una función que evalué la condición de fin.

While(Mf(1,1)~=Mt(1,1)||Mf(1,2)~=Mt(1,2)||Mf(1,3)~=Mt(1,3)||Mf(2,1)~
=Mt(2,1)||Mf(2,2)~=Mt(2,2)||Mf(2,3)~=Mt(2,3)||Mf(3,1)~=Mt(3,1)||Mf(3
,2)~=Mt(3,2)||Mf(3,3)~=Mt(3,3))

d) Permita la solución manual del problema determinando la cantidad de movimientos empleados


hasta llegar al estado deseado.

mov=input('Introduzca el número de movimiento 1↑,2↓,3←,4→,:')

2. Explique el programa desarrollado.

clear all, close all,clc


Mi=input('Ingresar Matriz de estado inicial Ej.[1,2,3;4,5,6;7,8,0]:
');%Matriz inicial
Mf=input('Ingresar Matriz de estado final Ej.[1,2,3;4,5,6;7,8,0]:
');%Matriz final
Mt=Mi
count=0;
Ingresa el estado de la matriz final e inicial,
asigna la matriz inicial a una matriz temporal y
definimos el contador a 0
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

%Comparacion de matrices
while
(Mf(1,1)~=Mt(1,1)||Mf(1,2)~=Mt(1,2)||Mf(1,3)~=Mt(1,3)||Mf(2,1)~=Mt(2,1)||
Mf(2,2)~=Mt(2,2)||Mf(2,3)~=Mt(2,3)||Mf(3,1)~=Mt(3,1)||Mf(3,2)~=Mt(3,2)||M
f(3,3)~=Mt(3,3))
mov=input('Introduzca el numero de movimiento 1?,2?,3?,4?,:')

%Buscar 0
for j = 1:3 Inicia el ciclo para resolver el 8 puzzle mientras
for i = 1:3 la matriz temporal sea diferente a la final, luego
if Mt(i,j) == 0 asignamos el tipo de movimiento que
x=i;
realizaremos, antes del movimiento buscamos la
y=j;
end posición 0
end
end

switch mov

%Desplazamiento hacia arriba


case 1
if (x~=1)
tempv=Mt(x-1,y);
Mt(x-1,y)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
Dependiendo el valor asignado a la
end
variable mov, y la posición del 0
%Desplazamiento hacia abajo permitirá cierta cantidad de
case 2 movimientos
if(x~=3)
tempv=Mt(x+1,y);
Mt(x+1,y)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end

%Desplazamiento hacia izquierda


case 3
if (y~=1)
tempv=Mt(x,y-1);
Mt(x,y-1)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end

%Desplazamiento hacia derecha


case 4
if (y~=3)
tempv=Mt(x,y+1);
Mt(x,y+1)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end
end
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

end
%Movimientos realizados
fprintf('el numero total de movimientos realizados es ')
count

Imprimir el numero total de resultados


una vez la matriz temporal es igual a la
final

3. Que limitaciones presenta.


-El código solo permite salir si has resuelto el puzzle
-Cuando el espacio 0 se encuentra adyacente a una o dos paredes, el código restringe su movimiento en dos o
menos de sus cuatro direcciones

JUEGO DEL 3 EN RAYA


UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

Realice un programa en Matlab que permita interactuar a dos usuarios.


a) Genere un estado inicial aleatorio.

%Cualquier jugador puede iniciar

b) Realice cada una de los operadores definidos.


%Inicio de partida
if jugando==0
fprintf ('El primer turno es del jugador 1 \n',' O');
end
jugando=1;

%Cambio de jugadores en cada ronda


if player==88
player=79;

%Ubicacion del movimiento, se muestran en cada ronda y cada vez para


un jugador
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'O');
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ');
fprintf '\n'
else;
player=88;
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'X');
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ');
end
fprintf '\n'

%Comprueba si la casilla seleccionada est ocupada, y si no la


selecciona
if A(fila,columna)==0
A(fila,columna)=player;
count=count+1;

c) Desarrolle una función que valué la condición de fin.


%Comprueba si el jugador que acaba de ocupar una casilla ha ganado
if A(2,2)==player
if A(1,2)==player
if A(3,2)==player
pare=player;
end
end
if A(2,1)==player
if A(2,3)==player
pare=player;
end
end
if A(1,1)==player
if A(3,3)==player
pare=player;
end
end
if A(3,1)==player
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

if A(1,3)==player
pare=player;
end
end
end
if A(1,1)==player
if A(1,2)==player
if A(1,3)==player
pare=player;
end
end
if A(2,1)==player
if A(3,1)==player
pare=player;
end
end
end
if A(3,3)==player
if A(3,2)==player
if A(3,1)==player
pare=player;
end
end
if A(2,3)==player
if A(1,3)==player
pare=player;
end
end

%Al noveno movimiento acaba la partida


if count==9 & pare==0
pare=3;
end

d) El programa debe determinar si hay ganador dl juego y el número de movimientos logrados.

%Mensajes finales
if pare==88
jugando=0;
fprintf 'Gana el jugador X \n'
end
if pare==79
jugando=0;
fprintf 'Gana el jugador O \n'
end
if pare==3
jugando=0;
fprintf 'Nadie gana\n'
end
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

e) Explique el programa desarrollado.

clear all, close all,clc


%Mensaje Inicio
fprintf '\n' Definiendo matrices, y valores
fprintf 'WELCOME TO 3 en raya \n' iniciales
fprintf '\n'

%Valores Iniciales y declaracion de matriz


player=0;
pare=0;
A=[0 0 0;0 0 0;0 0 0];
B=[0 0 0 0 0;0 0 0 0 0;0 0 0 0 0];
count=0;
jugando=0;

%Bucle para cada jugada


while pare==0 Inicia partida con el primer jugador

%Inicio de partida
if jugando==0
fprintf ('El primer turno es del jugador 1 \n',' O');
end
jugando=1;

%Cambio de jugadores en cada ronda Define el cambio de jugadores


if player==88
player=79;

%Ubicacion del movimiento, se muestran en cada ronda y cada vez para


un jugador
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'O');
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ');
fprintf '\n'
else; En esta linea de codigo definimos la posición de
player=88; la marca para cada jugador
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'X');
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ');
end
fprintf '\n'

%Comprueba si la casilla seleccionada est ocupada, y si no la


selecciona
if A(fila,columna)==0 Preguntamos si la posición seleccionada esta
A(fila,columna)=player; ocupada o vacia
count=count+1;

%Muestra la matriz en consola


for i=1:3 Imprimiendo
fprintf ('%4.0f%4.0f%4.0f\n',A(i,1),A(i,2),A(i,3)); matriz
fprintf '\n';
end
B=[A(1,1),0,A(1,2),0,A(1,3);A(2,1),0,A(2,2),0,A(2,3);A(3,1),0,A(3,2)
,0,A(3,3)];
C = char(B)
%Comprueba si el jugador que acaba de ocupar una casilla ha ganado
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

if A(2,2)==player
if A(1,2)==player
if A(3,2)==player
pare=player;
end
end
if A(2,1)==player
if A(2,3)==player
pare=player;
end
end
if A(1,1)==player
if A(3,3)==player
pare=player; Definiendo todas las
end condiciones de ganador
end para terminar el juego
if A(3,1)==player
if A(1,3)==player
pare=player;
end
end
end
if A(1,1)==player
if A(1,2)==player
if A(1,3)==player
pare=player;
end
end
if A(2,1)==player
if A(3,1)==player
pare=player;
end
end
end
if A(3,3)==player
if A(3,2)==player
if A(3,1)==player
pare=player;
end
end
if A(2,3)==player
if A(1,3)==player
pare=player;
end
end
end

%Al noveno movimiento acaba la partida


if count==9 & pare==0
pare=3;
end
%Si la casilla estaba ocupada, te penaliza con una prdida de turno
else
fprintf '\n'
fprintf 'La casilla estaba ocupada,pierdes el turno \n'
fprintf '\n'
end
end
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

%Mensajes finales
if pare==88
jugando=0;
fprintf 'Gana el jugador X \n'
end
if pare==79
jugando=0; Mensaje que anuncia el
fprintf 'Gana el jugador O \n' ganador
end
if pare==3
jugando=0;
fprintf 'Nadie gana\n'
end

f) Que limitaciones presenta.


Para el caso en el que una posición ya se encuentre ocupada no permite sobre escribir sobre la misma
casilla

IV. CUESTIONARIO FINAL


1. Escriba un nuevo programa en Matlab que permita la solución automática del problema a partir de un
estado inicial ingresado por el usuario; debiendo mostrar el programa la evolución paso a paso de los
estados hasta llegar al estado deseado.
clear all, close all,clc
Mi=input('Ingresar Matriz de estado inicial Ej.[1,2,3;4,5,6;7,8,0]:
');%Matriz inicial
Mf=input('Ingresar Matriz de estado final Ej.[1,2,3;4,5,6;7,8,0]:
');%Matriz final
Mt=Mi
count=0;
mov=0
q=0
%Comparacion de matrices
while
(Mf(1,1)~=Mt(1,1)||Mf(1,2)~=Mt(1,2)||Mf(1,3)~=Mt(1,3)||Mf(2,1)~=Mt(2,1)||
Mf(2,2)~=Mt(2,2)||Mf(2,3)~=Mt(2,3)||Mf(3,1)~=Mt(3,1)||Mf(3,2)~=Mt(3,2)||M
f(3,3)~=Mt(3,3))
while q==mov
q=randi([1,4]);
end
mov=q;

%Buscar 0
for j = 1:3
for i = 1:3
if Mt(i,j) == 0
x=i;
y=j;
end
end
end
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

switch mov
%Desplazamiento hacia arriba
case 1
if (x~=1)
tempv=Mt(x-1,y);
Mt(x-1,y)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end

%Desplazamiento hacia abajo


case 2
if(x~=3)
tempv=Mt(x+1,y);
Mt(x+1,y)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end

%Desplazamiento hacia izquierda


case 3
if (y~=1)
tempv=Mt(x,y-1);
Mt(x,y-1)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end

%Desplazamiento hacia derecha


case 4
if (y~=3)
tempv=Mt(x,y+1);
Mt(x,y+1)=0;
Mt(x,y)=tempv;
Mt
count=count+1;
end
end

end
%Movimientos realizados
fprintf('el numero total de movimientos realizados es ')
count

2. Explique el programa desarrollado y las limitaciones que presenta.


El funcionamiento del código es idéntico al propuesto en el apartado anterior, ingresa la matriz y los valores
iniciales, posteriormente se ingresa a un bucle donde compara la matriz temporal con la final, en dicho bucle en
ves de ingresar los datos manualmente, se codifico un numero aleatorio para las cuatro direcciones propuestas
Como única limitación agregada, se niega retornar a su casilla anterior el espacio la casilla desplazada
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

3. Realice un programa en Matlab que permita interactuar a un usuario contra la máquina en el juego del 3
en raya.
clear all, close all,clc
%Mensaje Inicio
fprintf '\n'
fprintf 'WELCOME TO 3 en raya \n'
fprintf '\n'

%Valores Iniciales y declaracion de matriz


player=0;
pare=0;
A=[0 0 0;0 0 0;0 0 0];
B=[0 0 0 0 0;0 0 0 0 0;0 0 0 0 0];
count=0;
jugando=0;

%Bucle para cada jugada


while pare==0

%Inicio de partida
if jugando==0
fprintf ('El primer turno es del jugador 1 \n',' O');
end
jugando=1;

%Cambio de jugadores en cada ronda


if player==88
player=79;

%Ubicacion del movimiento, se muestran en cada ronda y cada vez para un


jugador
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'O');
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ');
fprintf '\n'
else;
player=88;
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', 'X');
fila=randi([1,3]);
columna=randi([1,3]);
end
fprintf '\n'

%Comprueba si la casilla seleccionada est ocupada, y si no la selecciona


if A(fila,columna)==0
A(fila,columna)=player;
count=count+1;

%Muestra la matriz en consola


for i=1:3
fprintf ('%4.0f%4.0f%4.0f\n',A(i,1),A(i,2),A(i,3));
fprintf '\n';
end
B=[A(1,1),0,A(1,2),0,A(1,3);A(2,1),0,A(2,2),0,A(2,3);A(3,1),0,A(3,2),0,A(
3,3)];
C = char(B)
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

%Comprueba si el jugador que acaba de ocupar una casilla ha ganado


if A(2,2)==player
if A(1,2)==player
if A(3,2)==player
pare=player;
end
end
if A(2,1)==player
if A(2,3)==player
pare=player;
end
end
if A(1,1)==player
if A(3,3)==player
pare=player;
end
end
if A(3,1)==player
if A(1,3)==player
pare=player;
end
end
end
if A(1,1)==player
if A(1,2)==player
if A(1,3)==player
pare=player;
end
end
if A(2,1)==player
if A(3,1)==player
pare=player;
end
end
end
if A(3,3)==player
if A(3,2)==player
if A(3,1)==player
pare=player;
end
end
if A(2,3)==player
if A(1,3)==player
pare=player;
end
end
end

%Al noveno movimiento acaba la partida


if count==9 & pare==0
pare=3;
end
%Si la casilla estaba ocupada, te penaliza con una prdida de turno
else
fprintf '\n'
fprintf 'La casilla estaba ocupada,pierdes el turno \n'
fprintf '\n'
end
end
%Mensajes finales
if pare==88
UNIVERSIDAD CATOLICA DE SANTA MARIA
ESCUELA PROFESIONAL DE INGENIERIA MECANICA, MECANICA ELECTRICA Y
MECATRONICA
GUIA DE LABORATORIO
CÓDIGO: 4E10204
ASIGNATURA: PROCESOS INTELIGENTES N° 02

PRIMERA FASE: LOGICA DIFUSA Docente(s)


AGENTES INTELIGENTES Ing. Sergio Mestas Ramos
Fecha:

jugando=0;
fprintf 'Gana el jugador X \n'
end
if pare==79
jugando=0;
fprintf 'Gana el jugador O \n'
end
if pare==3
jugando=0;
fprintf 'Nadie gana\n'
end

4. Explique el programa desarrollado y las limitaciones que presenta.

A comparación del código para el tres en raya anterior, es prácticamente el mismo exceptuando por un par de
líneas de código donde el primer jugador tendría que insertar los valores es remplazado por una función ‘randi’
que es limitado en valores de 1 a 3 permite dar valores enteros al azar entre los limites definidos con este código
podemos desafiar a la maquina en un juego 3 en raya

5. Explique las ventajas de utilizar Matlab como software para la programación de un agente.

Al ser una calculadora programable muy potente, permite realizar programar líneas de código complejas y
extensas, también podemos resaltar que tomando de ejemplo esta práctica, los algoritmos de búsqueda
utilizados son no informados o presenta pocas condiciones por lo tanto se recurre a la constante iteración hasta
llega al resultado propuesto, así mismo es necesario un dispositivo que soporte dicha cantidad de trabajo

V. CONCLUSIONES
El programa permite, resolver problemas mediante códigos de búsqueda, pero sin una estrategia predeterminada
o algún algoritmo de búsqueda complejo puesto que recurrimos a la aleatoriedad y aprovechamos la gran
capacidad del programa para soportar dichas iteraciones

Para encontrar una solución en un menor tiempo seria necesario colocar una mayor cantidad de condiciones al
código propuesto, sobre todo al tres en raya el cual a diferencia del primer puzzle el tablero cambia
constantemente debido a los movimientos del jugador

Gracias al programa utilizado podemos representar el juego mediante distintas formas como es el caso de
matrices, un guide, simulink entre otras alternativas.

Los códigos realizados se pueden pulir mucho más, mejorando la jugabilidad, tiempo de búsqueda, interfaz
agregar opciones como es el terminar una partida cuando el jugador desee, las posibilidades son bastas y todo
estas mejores pueden ser ejecutadas por el programa Matlab.

También podría gustarte