P. 1
ajedrez

ajedrez

|Views: 12|Likes:
Published by Gabriela Chambilla

More info:

Published by: Gabriela Chambilla on Aug 20, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

03/02/2014

pdf

text

original

Configuración polar

:
Tiene varias articulaciones. Cada una de ellas puede realizar un movimiento distinto: rotacional, angular y lineal. Este robot utiliza la interpolación por articulación para moverse en sus dos primeras articulaciones y la interpolación lineal para la extensión y retracción.

Configuración angular (o de brazo articulado):

Presenta una articulación con movimiento rotacional y dos angulares. Aunque el brazo articulado puede realizar el movimiento llamado interpolación lineal (para lo cual requiere mover simultáneamente dos o tres de sus articulaciones), el movimiento natural es el de interpolación por articulación, tanto rotacional como angular. Además de las cuatro configuraciones clásicas mencionadas, existen otras configuraciones llamadas no clásicas. El ejemplo más común de una configuración no clásica lo representa el robot tipo SCARA, cuyas siglas significan: Selective apliance arm robot for assembly. Este brazo puede realizar movimientos horizontales de mayor alcance debido a sus dos articulaciones rotacionales. El robot de configuración SCARA también puede hacer un movimiento lineal (mediante su tercera articulación).

El juego del ajedrez es un juego adecuado para tratarlo mediante técnicas de IA debido a que tiene claramente definidos el objetivo que se quiere alcanzar (meta) y los medios para llegar (movimientos permitidos) [1]. En este juego, el programa en todo momento debe conocer la configuración del tablero para la maquina poder tomar la decisión adecuada (jugada), que le permita ganar. Para ello necesita de gran capacidad de almacenamiento de información, utilizando estructuras que le permitan llegar a conclusiones coherentes. El juego se desarrolla sobre un tablero de 8 filas y 8 columnas, sobre las cuales se colocan fichas de 2 colores que simbolizan a los 2 oponentes, estos colores son generalmente: Blanco y Negro. Este juego además posee un sin numero de fichas, de diferente tipo y movimiento. Así pues tenemos: • Peón • Torre

• Alfil • Caballo • Reina • Rey La Tabla 1 ilustra los movimientos permitidos para las diferentes fichas en un juego de ajedrez. - La primera fila indica el tipo de movimiento, ya sea horizontal, vertical, diagonal o en forma de L. - La segunda fila indica la dirección hacia donde puede moverse: Arriba (Arr) o Abajo (Aba). - El resto de filas indican las fichas del ajedrez: Peon (P), Alfil (A), Torre (T), Caballo (C), Dama (D) y Rey (R). -El número indicado en las casillas indican la cantidad de casillas que se pueden mover, así: 1 significa que solo puede moverse una sola posición, mientras que n significa que puede moverse mas de 1 posición dentro del límite del tablero del ajedrez.

Cada jugador al inicio de cada jugada posee 16 elementos, mostrados en la figura 3. Sin embargo, la configuración de cada movimiento que se pueda generar y las posibles acciones que estas puedan sugerir, hacen de este juego algo interesante, motivo por el cual se ha tomado énfasis en estudiar este juego empezando el uso de búsquedas sistemáticas para diseñar programas por ordenador. Las complicaciones que presenta diseñar una búsqueda adecuada para este juego son bastantes, dentro de las cuales la mas principal es la complejidad espacial en un ordenador, motivo por el cual muchas veces se utiliza una determinada profundidad hasta donde se puede llegar a evaluar.

Pseudo Código para una poda Alfa Beta en Minimax import java.awt.*;

import java.applet.Applet;

public class alfabeta extends Applet // Inicializa variables

int[] TIRADA = new TIRADA[2] // TIRADA[1] es el tablero TIRADA[2] es el valor del tablero int[] POSIBLE = new POSIBLE[2] ; int[] MinTirada = new MinTirada[2] ; int[] MaxTirada = new MaxTirada[2] ; int Jugada, numtir, procrece ; // variables que defiene el numero de tablero y la profundidad deseada

// Procedimiento maximizacion y minimizacion recursivamente

public void init() { numtir = profundidad ; Juego = "en Proceso"; Jugada = 0; tiro= 0; while (Juego <> "en Proceso") { procrece = 1; TIRADA = Maximiza(Jugada, alfa, beta, procrece); Grafica(TIRADA[1]); Jugada = TIRADA[1] ; Juego = EvaluaTerminacion(TIRADA); } ; };

// Procedimiento para la Maximizacion int Maximiza(Jugada,alfa,beta,procrece) { alfa = -infinito;

for ( j= 1; j <= Njugadas ; j=j+1 ) { MaxTirada[1] = SiguienteTab(j,Jugada); POSIBLE = Minimiza(MaxTirada[1],alfa,beta,procrece); if ( beta > alfa ) alfa = beta; if alfa >= POSIBLE[2] then TIRADA = POSIBLE }; return TIRADA ; }

// Procedimiento para la Minimizacion int Minimiza(Jugada,alfa,beta,procrece) { procrece = procrece +1; Poda = "enproceso" ; beta = + infinito ; for ( j = 1; j <= Njugadas AND poda = "enproceso" ; j=j+1 ) { MinTirada[1] = SiguienteTab(j, Jugada); if ( procrece = numtir ) POSIBLEMIN[2] = Evalua(MinTirada[1]) else POSIBLEMIN = Maximiza(MinTirada[1], alfa, beta, procrece); } if ( MinTirada[2] <= beta ) { TIRADA = POSIBLEMIN ; beta = MinTirada[2] ; if (beta <= alfa) Poda = "hecha" ; } } Return TIRADA }

// Procedimiento para la Evaluacion int Evalua(Jugada)

// Procedimiento para la Graficacion int Grafica(Jugada)

// Procedimiento para la determinacion de la siguiente jugada int SiguienteTab(j, Jugada)

} // end class Alfabeta

Estructura de Datos Utilizada. La estructura del node que se ha utilizado, tiene la siguiente estrucutra:

Id

IdPadre

Tipo (Max o Min)

Estado (config. Del tablero)

Funcion de utilidad

Mejor accion

Prof.

Id: El primer campo indica el ident del nodo que se esta generando. IdPadre: El siguiente dato, corresponde al padre que lo generó. El tipo hace referencia a que nodo se esta analizando: si es Max o es Min. En caso de ser Max, el algoritmo tratará de obtener la jugada de mayor utilidad,pues genera beneficio para Max; sin embargo cuando es Min, la maquina elegirá la menor utilidad posible, perjudicando al oponente. El estado, es la configuración del tablero, es decir, corresponde al ambiente que será analizado por la maquina. La función de utilidad corresponde a la utilidad calculada por la heurística explicada posteriormente [2]. La mejor acción es una variable que me va recolectando el camino que se genera con la mejor jugada posible, para esto debe basarse en la utilidad. Y finalmente la profundidad, indica, que tan profundo se va a analizar las jugadas, es decir, si se escoge una profundidad de 4, esto indicaría que se va analizar 2 turnos para ambos jugadores y de allí se extraerá el mejor camino.

Hemos aplicado una heurística en la que se considera un peso para cada pieza según el color: • Piezas Blancas

- Peón : 1 - Caballo : 3 - Alfil : 3 - Torre : 5 - Reina : 10 - Rey : 50 • Piezas Negras - Peón : -1 - Caballo : -3 - Alfil : -3 - Torre : -5 - Reina : -10 - Rey : -50 Las Heurística para la función de Utilidad que logramos analizar son las siguientes: 1º Capturar Posición del Rey Blanco: xRB, yRB 2º Capturar Posición del Rey Negro: xRN, yRN 3º Sumar N° de piezas Blancas: sumaB

4º Sumar N° de piezas Negras: sumaN 5º Calcular que tan protegido esta el rey blanco de las piezas negras: BRP 6° Calcular que tan Protegido esta el rey Negro de las piezas blancas: NRP 7° Calcular que tan cerca están las piezas negras del rey Blanco: BAR 8° Calcular que tan cerca están las piezas blancas del rey Negro: NAR Finalmente se obtendrá la Utilidad con la siguiente ecuación:

La primera división, mide que tanta es la diferencia de fichas entre los dos oponentes. Si uno de ellos tiene una cantidad de pesos mayor en fichas, probablemente pueda tener más ventajas sobre el otro, por lo tanto pueda ganar. La segunda división, es una probabilidad que hemos considerado y mide que tan protegido esta un rey. Si un rey tiene mas cerca a sus piezas, entonces la probabilidad que sea comido es menor, por lo tanto menos oportunidad de ser atacado directamente. La tercera división mide la probabilidad de que un rey sea atacado por el oponente. Si un rey tiene mas fichas enemigas cerca, entonces la probabilidad de ser atacado aumenta, y por lo tanto pueda ejecutarse el mate.

Por lo tanto, la ecuación presentada, mide que tanta ventaja tiene un oponente sobre el otro.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->