elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Programar un programa teoricamente inteligente.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programar un programa teoricamente inteligente.  (Leído 10,216 veces)
andres_5

Desconectado Desconectado

Mensajes: 200



Ver Perfil
Programar un programa teoricamente inteligente.
« en: 23 Enero 2011, 23:51 pm »

Hola, Llevo un tiempo programando mis pequeños programitas, pero nunca he hecho un programa inteligente, como por ejemplo cuando juegas a las cartas contra la maquina, sinceramente me parecia sorprendente esos tipos de programas, aunque se que atras de ese programa inteligente tiene un codigo, con esto no estoy pidiendo un codigo donde lo demuestre, sino el razonamiento que los programadores mas esperimentados usais para darle a la maquina oportunidad de elegir inteligentemente. Con un simple ejemplo, no codeado sino con palabras, me bastaria para resolver mi duda.
Saludos ;)


En línea

Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube


ABDERRAMAH


Desconectado Desconectado

Mensajes: 431


en ocasiones uso goto ¬¬


Ver Perfil WWW
Re: Programar un programa teoricamente inteligente.
« Respuesta #1 en: 24 Enero 2011, 00:13 am »

Yo no se mucho de esto, pero si se que hay muchos métodos diferentes... El otro día hablaba alguien en le foro sobre la inteligencia artificial en juegos de agedrez, comentó por encima algo de los sistemas neuronales de computación, parecía muy interesante porque según parece el peso de los algoritmos era realmente pequeño. Yo también estoy interesado en el tema, ya que últimamente me he propuesto programar bots (simulaciones robóticas 3d para metaversos), y por ahora tienen muy limitada la capacidad de decision. xD

edit: este es el comentario de sauruxum
Citar
En realidad en los juegos de ajedrez no se programan asi las cosas.
En el concurso de programacion Ehn-Dev que se tuvo en este foro yo presente una aplicacion acerca de las redes neuronales. Estas redes que pueden ser programadas bajo una arquitectura tipo Von Neuman, aunque si es menos eficaz que en su propia arquitectura, tienen la peculiaridad de "aprender" y "asociar" los datos de ingreso relativamente a una salida deseada.
Mi programa era muy simple y como ejemplos dentro de la carpeta deje uno que mediante aprendizaje logra representar la funcion logica XOR y el seno ( aunque con mala presicion ), tambien un ejemplo que identifica patrones visuales. Este uso es el que se le da al ajedrez. Si tienes una matriz de 8x8 ( tablero ) y piezas distribuidas en un cierto modo, mediante el debido aprendizaje el programa mismo es capaz de escojer la jugada que "con mayor probabilidad te llevara a la victoria".

Porque este en especifico requiere tanta memoria? porque debe tener muchos datos temporales a la mano para trabajar velozmente. Me explico un poco con numeros.
Las redes neuronales hacen basicamente multiplicaciones de matrices y una aplicacion bien hecha como la usada en blue deep tiene estas caracteristicas:

Elementos neuronales de entrada:        80
Capas ocultas de elementos:                  5
Elementos en media en la capa oculta: 200
Elementos de salida:                            80

La de tu ordenador:

Elementos neuronales de entrada:        80
Capas ocultas de elementos:                  2
Elementos en media en la capa oculta: 135
Elementos de salida:                            80

Entonces para hacer el calculo debe hacer un numero de multiplicaciones del tipo 80x200x200x200x200x200x80 sin contar lo que ya ocupa en calculo la decodificacion de esta.
Este tipo de aplicaciones funciona de maravilla en un procesador con mas nucleos, pero son muy lentas en un mononucleo.

Respecto a la base de datos de este tipo de aplicaciones: no llega a pesar mas de 100 Kb xD ya que solo contiene una especie de hash de aprendizaje y no cada uno de los movimientos posibles.

Saludos
« Última modificación: 21 Enero 2011, 06:54 por Sauruxum »


« Última modificación: 24 Enero 2011, 00:17 am por ABDERRAMAH » En línea

Sauruxum

Desconectado Desconectado

Mensajes: 117


Ver Perfil WWW
Re: Programar un programa teoricamente inteligente.
« Respuesta #2 en: 24 Enero 2011, 01:33 am »

Bueno, tengo unos mesecitos metido en el asunto de la creacion de una AI y espero poder ayudarte.
Lo que yo uso mas frecuentemente para entrenar aplicaciones que tomen una decision "inteligente" son las "redes neuronales multicapa" ( puedes buscarlas en internet por el nombre de multilayer perceptron o MLP, tambien tengo un blog en el que he puesto mi trabajo y algunas traducciones de papers en http://sauruxum.blogspot.com ).
Estas redes no es que sean inteligentes, sino que "aprenden" en base a la "experiencia" ( si, basicamente es asi ). Esto es en caso de una aplicacion como la que presente en el concurso ehn-Dev, crear un archivo con algunos patrones tomados de experiencias pasadas que contienen las entradas ( como en los centros biologicos, muestras de tegido cancerigeno y no-cancerigeno por ejemplo ) y las salidas ( la respuesta: "es o no es cancerigeno" ) y asi estas redes, una vez entrenadas reconocen efectivamente el tipo de tejido que es.
No solo eso, asi como aprenden de la experiencia son capaces de hacer predicciones basados en las condiciones actuales y la experiencia ( son tambien usadas para las predicciones meteorologicas ).

Como ejemplo propio puedo poner algo curioso que me pregunto uno hace poco: como puede tu programa reconocer si es un ave o no? ( no podia ser mas facil el desafio... )
Entonces como es basado en mi programa pues me pongo el problema:

Entrada 1: vuela? ( 1=si, 0=no )
Entrada 2: pone huevos? ( 1=si, 0=no )
Entrada 3: tiene alas? ( 1=si, 0=no )

creo que bastan esos.

Entonces basado en experiencias pasadas ( mas bien logicas a este punto de nuestra existencia xD ) hacemos el archivo de patrones asi:

                   Entradas              Salidas
aguila:           1 1 1                      1
avestruz:        0 1 1                     1
murcielago:    1 0 1                     0
caballo:          0 0 0                     0
pez:               0 1 0                     0

Quedando el archivo de patrones asi:

5
1 1 1
1
0 1 1
1
1 0 1
0
0 0 0
0
0 1 0
0

Lo guardamos y entrenamos la red...   es posible reconocer correctamente muchas variedades de animales ( incluye el pinguino y el pez volador xD )

En el caso de un juego de cartas primero que todo poner las reglas del juego, y jugar contra una red no entrenada, y hacer el modo que aprenda tus movimientos a medida que juega ( de ahi hay que saber que juego para saber las caracteristicas de la red a usar ). En caso que el jugador sea bueno, la red aprendera bien y sera potente y viceversa. Puedes al paso entrenar una segunda red y decirle: perder esta mal, ganar esta bien ( me suena a un tio xD ) asi no solo jugara bien, sino que intentara ganar. Y puedes entrenar una tercera red que tome desiciones segun las cartas que ya han salido.

Mi programa puede ser infinitamente mejorado, espero poder dedicarle mas tiempo, pero bueno... funciona bastante bien xD

Saludos
« Última modificación: 24 Enero 2011, 01:46 am por Sauruxum » En línea

andres_5

Desconectado Desconectado

Mensajes: 200



Ver Perfil
Re: Programar un programa teoricamente inteligente.
« Respuesta #3 en: 24 Enero 2011, 02:02 am »

Muchas Gracias, me ha parecido muy interesante la informacion ;)
Saludos
En línea

Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube


.:Snifer:.

Desconectado Desconectado

Mensajes: 74


Ver Perfil
Re: Programar un programa teoricamente inteligente.
« Respuesta #4 en: 24 Enero 2011, 02:03 am »

Bueno mira para eso necesitas un agente inteligente que puede ser tu primera opcion, o la segunda con una red Neuronal que aprende de sus errores.. Y lo mas importante que no se debe de descartar algoritmos geneticos,Encadenamiento de reglas..  o si te gustaria mas en estos dias te puedo pasar informacion.. tengo algunos proyectos que realize en redes neuroanles e inteligencia artificial.

Saludos :P
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.590


Shrödingerificado


Ver Perfil
Re: Programar un programa teoricamente inteligente.
« Respuesta #5 en: 30 Enero 2011, 00:25 am »

Empieza por mirar esto y luego si quieres te recomiendo algo más (también está en español, a la izquierda lo escoges):

http://en.wikipedia.org/wiki/Minimax

Es muy simple para jugar a juegos como las damas o el tic-tac-toe, el ajedrez es más complicado, y aun así esto viene siendo lo que hace deep blue.
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
dazoverride

Desconectado Desconectado

Mensajes: 79



Ver Perfil
Re: Programar un programa teoricamente inteligente.
« Respuesta #6 en: 18 Febrero 2011, 14:40 pm »

andres_5 yo también hice mis programitas y se me planteo los mismo, fue haciendo un programa de hundir la flota en C, que digo y si hago que la "maquina" tire? pues bueno como es un juego simple decidí que eligiera coordenadas aleatorias y no repetitivas, fácil no? XD para mi es como un hola mundo de la inteligencia artificial XD.

El problema esque si quieres hacer un ajedrez este metodo no sirve... pero bueno por algo se empieza! suerte!!
En línea

Si reproduces un CD de Microsoft al revés puedes escuchar un mensaje satánico...
Eso no es lo peor... Al derecho te instala windows...
flacc


Desconectado Desconectado

Mensajes: 854


Ver Perfil WWW
Re: Programar un programa teoricamente inteligente.
« Respuesta #7 en: 18 Febrero 2011, 22:23 pm »

de hacer un programa para empezar, algo fácil como jugar al gato, lo primero que se me ocurre es dependiendo de las acciones del contrincante calcular en probabilidad la acción mas viable y lógica a ejecutar, luego cuando sea el turno de empezar para la máquina, lo haría siguiendo estrategias predefinidas, aunque la opción de aprender de las jugadas del contrincante no se me ocurre como hacerla... claro que serían miles e líneas de código para programar solo, así que de hacerlo buscaría por lo menos 2 personas mas, para compartir ideas y tener diferentes puntos de vista...saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa para programar en Java
Java
Xkt 7 12,420 Último mensaje 17 Abril 2009, 06:43 am
por Amerikano|Cls
ayuda con programa no se programar.... « 1 2 »
Programación Visual Basic
Martin-Ph03n1X 10 4,983 Último mensaje 22 Octubre 2009, 00:52 am
por Martin-Ph03n1X
CPU teoricamente NO SOPORTADA por la Placa Base, pero funciona... ¿?
Hardware
Dacover 1 2,985 Último mensaje 26 Junio 2010, 19:32 pm
por imoen
Si teóricamente compilara android para...
Android
flacc 2 4,578 Último mensaje 10 Abril 2011, 00:29 am
por flacc
Ayuda programa 4_24 de C++ Como Programar 2ª ed
Programación C/C++
NoeOP 0 2,256 Último mensaje 1 Febrero 2012, 22:05 pm
por NoeOP
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines