Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-plugin-bluehost domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home1/spotsail/public_html/martra/wp-includes/functions.php on line 6114

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /home1/spotsail/public_html/martra/wp-includes/functions.php:6114) in /home1/spotsail/public_html/martra/wp-includes/rest-api/class-wp-rest-server.php on line 1893
{"id":2026,"date":"2020-08-26T17:27:12","date_gmt":"2020-08-26T17:27:12","guid":{"rendered":"https:\/\/martra.uadla.com\/?p=2026"},"modified":"2020-08-26T10:28:03","modified_gmt":"2020-08-26T10:28:03","slug":"geebo-el-mlagent-que-me-dio-en-toda-la-cara-con-la-realidad-del-aprendizaje-humanoide","status":"publish","type":"post","link":"https:\/\/martra.uadla.com\/geebo-el-mlagent-que-me-dio-en-toda-la-cara-con-la-realidad-del-aprendizaje-humanoide\/","title":{"rendered":"Geebo. El MLAgent que me dio en toda la cara con la realidad del aprendizaje humanoide."},"content":{"rendered":"\n

Hay varias formas de atacar el entreno de NPC usando inteligencia artificial mediante MLAgents. La mas sencilla, la que m\u00e1s funciona y la que m\u00e1s se usa es la de entrenar su comportamiento, pero siguiendo las normas de desarrollo de UNITY. <\/p>\n\n\n\n

Es decir, si tenemos que mover el agente usamos cualquiera de las t\u00e9cnicas de movimiento que hem os venido usando hasta ahora. Con lo que la maquina controla las acciones del car\u00e1cter, pero no como este las realiza. Si le dice qu\u00e9 gire, nosotros somos los responsables de usar la funci\u00f3n Rotate<\/em><\/strong>. Qu\u00e9 queremos avanzar, pues llamamos a MoveTo<\/em><\/strong>. Es unity el que se encarga de mover el personaje y el motor de MLAgent decide cu\u00e1ndo avanzar o que acci\u00f3n tiene que realizar. <\/p>\n\n\n\n

\"\" <\/picture>
Aprender no han aprendido, pero era bonito. <\/figcaption><\/figure>\n\n\n\n

Pero hay otro enfoque! Creamos un personaje y el motor de MLAgents es el responsable de mover las piezas del personaje para crear las diferentes acciones. Vamos a ver si lo puedo explicar. En este caso el motor no decide qu\u00e9 acci\u00f3n tomar, sino que decide qu\u00e9 acci\u00f3n realizara cada uno de los miembros de nuestro personaje<\/strong>. Vamos un paso m\u00e1s lejos. <\/p>\n\n\n\n

Pensemos en nosotros mismos, cuando nos ponemos a andar, no pensamos en levantar la pierna, doblar la rodilla, apoyar el pie. Tan solo pensamos la direcci\u00f3n, nos giramos y nos dirigimos hacia donde sea que queramos ir. <\/p>\n\n\n\n

Bien, pues el segundo enfoque, el que intenta darle al motor de MLAgents el control de las articulaciones, que podr\u00edamos llamar nivel de Inteligencia Artificial Inconsciente<\/strong>, ya que simula las acciones que tomamos de forma inconsciente. Requiere de un enfoque totalmente diferente al primero. Necesitamos definir el entorno de otra manera….. y este ha sido mi fallo. <\/p>\n\n\n\n

Concretemos mas, respuesta directa a la pregunta: \u00bfCual crees que ha sido el error en la definici\u00f3n del entorno del agente, que le ha impedido aprender?<\/p>\n\n\n\n

Los premios!<\/strong> Principalmente, y entre otros, pero principalmente ha sido la escasa definici\u00f3n de premios, ninguno de ellos con una relaci\u00f3n directa a las acciones que podia tomar el agente. <\/p>\n\n\n\n

No ha sido hasta que ya he completado unos 20 o 30 procesos de aprendizaje infructuosos que no he pensado…. le doy premios cuando llega a destino, y no sabe ni andar, tendr\u00eda que premiar aquellas acciones que le ayuden a andar. Es decir, se deben decidir unos premios que tengan que ver con el modo de uso de las articulaciones de los miembros del agente. Unos peque\u00f1os premios para cuando consiga un resultado. Pero no cuando llegue a destino, ni cuando se desplace hacia \u00e9l. El mero hecho de que el agente consiga desplazarse ya tendr\u00eda que generarle un premio. Por que recordemos. que nuestro motor de inteligencia artificial nace siendo completamente estupido. No parte de nuestros miles de a\u00f1os de evoluci\u00f3n. Cuando un ni\u00f1o tiene que coger algo, ya lo intenta con la mano, no lo intenta con la oreja. Nuestros agentes no saben nada del mundo, no tienen historia. Se dedican a mover a lo loco lo que nosotros como dioses de pega, o dise\u00f1adores de pacotilla, les damos. <\/p>\n\n\n\n

Resumiendo. Es un agente sencillo, compuesto por un rect\u00e1ngulo, unido a cuatro cuadrados mediante sus respectivos hinge joint<\/em><\/strong>, y con una suspensi\u00f3n. La forma de avanzar es aplicando fuerza con los cuadrados, o haci\u00e9ndolos girar. A mi me ha resultado mas o menos sencillo controlar el agente de forma heuristica, es decir, dando yo las ordenes mediante entradas. Pero al motor de MLAgent, le ha sido totalmente imposible. Lo ha intentado, en lugar de avanzar, se pon\u00eda de pie y se dejaba caer en un intento de alcanzar el target… pero el resultado ha sido pauperrimo. <\/p>\n\n\n\n

No hace falta mirar el fichero .yaml, ni el entorno. Solo dir\u00e9 que ha faltado la definici\u00f3n de los premios… y la observaci\u00f3n de donde est\u00e1n los miembros del agente respecto a su cuerpo. <\/p>\n\n\n\n

O eso creo \ud83d\ude42 <\/p>\n

\r\n
\r\n\r\n
\r\n \r\n \r\n Musica y explosiones un Unity. <\/a>\r\n\r\n
\r\n \r\n\r\n \"El <\/picture>\r\n\r\n <\/a>\r\n <\/div>\r\n

\r\n La m\u00fasica o los efectos de sonido, son una parte muy importante de cualquier juego, estoy seguro que si alguna Read more<\/a> <\/p>\r\n <\/div>\r\n

\r\n \r\n \r\n A\u00f1adimos un protagonista a nuestro Juego. <\/a>\r\n\r\n
\r\n \r\n\r\n \"\" <\/picture>\r\n\r\n <\/a>\r\n <\/div>\r\n

\r\n Todo juego necesita un protagonista, no importa s\u00ed es complejo o simple, es el alma de nuestro juego y el Read more<\/a> <\/p>\r\n <\/div>\r\n

\r\n \r\n \r\n Desplegando una aplicaci\u00f3n Unity para Google Cardboard. <\/a>\r\n\r\n
\r\n \r\n\r\n \"Como <\/picture>\r\n\r\n <\/a>\r\n <\/div>\r\n

\r\n Si en el post anterior cre\u00e1bamos la aplicaci\u00f3n para Android y para WebGL, en este nos dedicaremos a crearla para Read more<\/a> <\/p>\r\n <\/div>\r\n

\r\n \r\n \r\n Creamos un objeto invisible con el que colisionar y mejoramos los colores de nuestro juego en Unity. <\/a>\r\n\r\n
\r\n \r\n\r\n \"\" <\/picture>\r\n\r\n <\/a>\r\n <\/div>\r\n

\r\n El escenario en un juego lo es casi todo, una ambientaci\u00f3n u otra puede cambiar totalmente lo que el usuario Read more<\/a> <\/p>\r\n <\/div>\r\n \r\n <\/div>\r\n\r\n