<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : Inteligencia Artificial</title><link>http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx</link><description>Tags: Inteligencia Artificial</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Bing, el nuevo chico del barrio</title><link>http://msmvps.com/blogs/lopez/archive/2009/05/30/bing-el-nuevo-chico-del-barrio.aspx</link><pubDate>Sat, 30 May 2009 09:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693450</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1693450</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/05/30/bing-el-nuevo-chico-del-barrio.aspx#comments</comments><description>&lt;p&gt;Lleg&amp;oacute; el nuevo producto de Microsoft, que presentan, no como un buscador, como un engine de b&amp;uacute;squeda, sino como un motor de decisiones:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.decisionengine.com" title="http://www.decisionengine.com"&gt;http://www.decisionengine.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;Como empresa gigante, Microsoft se puede dar el lujo de tener un gran equipo de research, y llega el momento en que todo ese conocimiento y esfuerzo se vuelca en alg&amp;uacute;n producto (no siempre).&lt;/p&gt;
&lt;p&gt;Yo todav&amp;iacute;a tengo que probar ese producto, que no est&amp;aacute; liberado al p&amp;uacute;blico. Como muchos productos globales, hoy se anuncian de esta manera, con un video viral, como el de arriba, que no s&amp;oacute;lo est&amp;aacute; en el sitio, sino que tambi&amp;eacute;n est&amp;aacute; en Youtube, y lo puedo embeber en mis blogs.&lt;/p&gt;
&lt;p&gt;A simple vista, es un producto que montado sobre ideas (no implementaciones) de web sem&amp;aacute;ntica, apunta a no tener tanto agentes recorriendo y obteniendo informaci&amp;oacute;n, sino a presentarla y organizarla para que el usuario tenga una experiencia distinta.&lt;/p&gt;
&lt;p&gt;Veremos si cumple con la expectativa. Pero es interesante ver c&amp;oacute;mo la fuente de la informaci&amp;oacute;n es la propia web. Tambi&amp;eacute;n es interesante notar que la informaci&amp;oacute;n de la que parte, no estaba pensada para ser consumida de esa forma. Eso es lo que imagino que va a pasar con las ideas de web sem&amp;aacute;ntica. Las p&amp;aacute;ginas publicada s&amp;oacute;lo va a comenzar a contener informaci&amp;oacute;n sem&amp;aacute;ntica, cuando este tipo de aplicaciones se popularicen. Mientras tanto, el &amp;ldquo;trabajo sucio&amp;rdquo; de obtener informaci&amp;oacute;n de los datos de una p&amp;aacute;gina, quedar&amp;aacute; a cargo de las aplicaciones.&lt;/p&gt;
&lt;p&gt;No veo que sea una &amp;ldquo;killer application&amp;rdquo; para Google. M&amp;aacute;s bien, como Wikipedia, va a brindar otra experiencia de usuario. As&amp;iacute; como hay temas que investigamos con Google, as&amp;iacute; como habr&amp;aacute; otros m&amp;aacute;s estructurados que investigamos partiendo de Wikipedia, habr&amp;aacute; consultas, tareas, comparaciones, donde preferiremos (o no) a Bing.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693450" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Video/default.aspx">Video</category></item><item><title>Computadoras aprendiendo música</title><link>http://msmvps.com/blogs/lopez/archive/2009/05/18/computadoras-aprendiendo-m-250-sica.aspx</link><pubDate>Mon, 18 May 2009 04:25:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1692605</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1692605</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/05/18/computadoras-aprendiendo-m-250-sica.aspx#comments</comments><description>&lt;p&gt;Gracias a un tweet de &lt;a target="_blank" href="http://twitter.com/maraoz"&gt;@maraoz&lt;/a&gt;, me enter&amp;eacute; que estaba MatBaires 09, Festival Matem&amp;aacute;tico, el fin de semana pasado, en el Centro Cultural Recoleta, ac&amp;aacute; en Buenos Aires. Me perd&amp;iacute; varias conferencias (el bueno de @maraoz envi&amp;oacute; el mensaje el s&amp;aacute;bado), as&amp;iacute; que no pude asistir a ver a &lt;a target="_blank" href="http://www.cs.auckland.ac.nz/~chaitin/"&gt;Gregory Chaitin&lt;/a&gt;, &lt;a target="_blank" href="http://guillermo-martinez.net/"&gt;Guillermo Martinez&lt;/a&gt;, y a otros, como &lt;a target="_blank" href="http://www.math.temple.edu/~paulos/"&gt;John Allen Paulos&lt;/a&gt;. Pueden ver el programa y los temas en:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.festivalmatematica.gov.ar/home09/web/es/index.html" title="http://www.festivalmatematica.gov.ar/home09/web/es/index.html"&gt;http://www.festivalmatematica.gov.ar/home09/web/es/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(recuerdo haber trabajado en los ochentas, con el int&amp;eacute;rprete Lisp que Chaitin hab&amp;iacute;a escrito en Fortran, en la Universidad de Buenos Aires, yo fui lo bastante nerd como para reimplementarlo en assembler de 8080&amp;hellip;. ;-)&lt;/p&gt;
&lt;p&gt;Una charla a la que pude asistir fue:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;iquest;Puede una computadora aprender a componer m&amp;uacute;sica?&lt;/p&gt;
&lt;p&gt;Por Pablo Rodr&amp;iacute;guez Zivic.&lt;/p&gt;
&lt;p&gt;Al escuchar una pieza musical, uno es capaz de extraer informaci&amp;oacute;n acerca del estilo, la m&amp;eacute;trica, y tal vez teniendo mayor conocimiento sobre teor&amp;iacute;a musical, cuestiones relacionadas con la armon&amp;iacute;a y el contrapunto. Todo m&amp;uacute;sico es influenciado por otros m&amp;uacute;sicos debido a diferentes razones, y esta capacidad de ser influenciado est&amp;aacute; estrechamente relacionada con la capacidad de extraer informaci&amp;oacute;n &amp;uacute;til para la composici&amp;oacute;n a partir de escuchar lo que otros ya han hecho. Ahora, la pregunta es: &amp;iquest;es posible darle a una computadora un conjunto de piezas musicales y que esta sea &amp;ldquo;influenciada&amp;rdquo; por este conjunto para componer nueva m&amp;uacute;sica?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(ver la actividad del domingo 10 de Mayo en &lt;a href="http://www.festivalmatematica.gov.ar/home09/web/es/events/index/v/date/20090510.html" title="http://www.festivalmatematica.gov.ar/home09/web/es/events/index/v/date/20090510.html#"&gt;http://www.festivalmatematica.gov.ar/home09/web/es/events/index/v/date/20090510.html#&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Pablo est&amp;aacute; trabajando en &lt;a target="_blank" href="http://popego.com"&gt;Popego&lt;/a&gt;, que yo sepa, y es compa&amp;ntilde;ero entonces de &lt;a target="_blank" href="http://twitter.com/santisiri"&gt;@santisiri&lt;/a&gt; y &lt;a target="_blank" href="http://twitter.com/scoffey"&gt;@scoffey&lt;/a&gt;, los que conoc&amp;iacute; personalmente ah&amp;iacute;, entre el p&amp;uacute;blico. Popego est&amp;aacute; aplicando t&amp;eacute;cnicas de inteligencia artificial, creo que son los de &lt;a target="_blank" href="http://www.zauber.com.ar"&gt;Zauber&lt;/a&gt; quienes las programan&amp;hellip; Pero vayamos al tema de la conferencia.&lt;/p&gt;
&lt;p&gt;Pablo se manej&amp;oacute; bien, hubo bastante asistencia, y comenz&amp;oacute; a tiempo. Excelente sonido, que fue aprovechado por Pablo para presentar el trabajo que est&amp;aacute; realizando para su tesis, comenzado hace apenas unos meses.&lt;/p&gt;
&lt;p&gt;Primero plante&amp;oacute; qu&amp;eacute; es una computadora, qu&amp;eacute; es aprender y qu&amp;eacute; es componer m&amp;uacute;sica.&lt;/p&gt;
&lt;p&gt;A la primera pregunta, present&amp;oacute; que una computadora es un programa. Remont&amp;oacute; todo al c&amp;aacute;lculo lambda (si, como gran parte de la humanidad, NO ESTAN suigiendo mis posts, lean:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2009/04/14/notas-sobre-el-Calculo-Lambda.html"&gt;Notas sobre el C&amp;aacute;lculo Lambda&lt;/a&gt; &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2009/02/25/presenting-ajlambda-lambda-calculus-implementation-in-c/"&gt;Presenting AjLambda, lambda calculus in C#&lt;/a&gt; &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/02/26/presentando-ajlambda-implementaci-243-n-de-c-225-lculo-lambda-en-c.aspx"&gt;Presentando AjLambda: implementaci&amp;oacute;n de C&amp;aacute;lculo Lambda en C#&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;Pablo hasta usa la misma foto de Alonzo Crurch que uso en mis charlas&amp;hellip; :-)&amp;hellip;. y luego coment&amp;oacute; su equivalencia con las m&amp;aacute;quinas de Turing.&lt;/p&gt;
&lt;p&gt;Con respecto a aprender, no me qued&amp;oacute; tan claro hacia adonde apuntaba en su charla. Yo colecciono enlaces sobre Machine Learning en&lt;/p&gt;
&lt;p&gt;&lt;a href="http://delicious.com/ajlopez/machinelearning"&gt;http://delicious.com/ajlopez/machinelearning&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y despues coment&amp;oacute; sobre qu&amp;eacute; es componer m&amp;uacute;sica. Y destac&amp;oacute; que lo que uno considera m&amp;uacute;sica, depende de nuestro criterio humano. De ah&amp;iacute; el desaf&amp;iacute;o para un programa: que produzca no ruido, sino m&amp;uacute;sica.&lt;/p&gt;
&lt;p&gt;En ese tema, record&amp;oacute; el trabajo de &lt;a href="http://en.wikipedia.org/wiki/Heinrich_Schenker"&gt;Heinrich Schenker&lt;/a&gt;. Pueden leer sobre su trabajo&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Schenkerian_analysis"&gt;Schenkerian analysis - Wikipedia, the free encyclopedia&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.schenkerguide.com/"&gt;Tom Pankhurst&amp;#39;s Guide to Schenkerian Analysis - Home Page.&lt;/a&gt; &lt;br /&gt;&lt;a href="http://community.middlebury.edu/~harris/MusicPapers/Schenker.html"&gt;Schenker Analysis for Pantonal Composition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pablo coment&amp;oacute; que si bien Schenker describ&amp;iacute;a sus ideas sobre c&amp;oacute;mo analizar m&amp;uacute;sica, no daba pautas claras, lo que hoy llamar&amp;iacute;amos un algoritmo. Record&amp;oacute; el trabajo de Fred Lerdahl y Ray Jackendoff:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/Generative-Theory-Tonal-Music/dp/026262107X"&gt;Amazon.com: A Generative Theory of Tonal Music: Fred Lerdahl, Ray Jackendoff...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por lo que entend&amp;iacute;, estos trabajos se basan en gram&amp;aacute;ticas generativas (yo dir&amp;iacute;a a al Chomsky), para ir describiendo m&amp;uacute;sica. Pablo present&amp;oacute; una partitura analizada de esa forma.&lt;/p&gt;
&lt;p&gt;Y luego llegaron los platos fuertes, el trabajo de Pablo en acci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Present&amp;oacute; en su notebook, un programa que lee y ejecuta un archivo MIDI y luego lo modifica, agregando notas (en un instrumento elegido manualmente), especificando altura y duraci&amp;oacute;n, SOBRE la m&amp;uacute;sica original. Ejecut&amp;oacute; tres pruebas, recuerdo una sobre Mozart, y otra sobre Gershwin. Muy bien logrado la salida del programa, que no digamos &amp;ldquo;uy que bruto, que m&amp;uacute;sica generada&amp;hellip;.&amp;rdquo; ;-) pero era aceptable como producci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Para cada m&amp;uacute;sica, present&amp;oacute; un diagrama de las decisiones que tomaba el programa para elegir su pr&amp;oacute;xima nota. Pero no aclar&amp;oacute; mucho sobre c&amp;oacute;mo se formaba ese diagrama. No parec&amp;iacute;a que tuviera relaci&amp;oacute;n con gram&amp;aacute;ticas generativas.&lt;/p&gt;
&lt;p&gt;Al final, hubo una animada sesi&amp;oacute;n de preguntas, lo que revela el inter&amp;eacute;s que hab&amp;iacute;a despertado en el p&amp;uacute;blico. Yo pregunt&amp;eacute; si pod&amp;iacute;a explicar en detalle el algoritmo que hab&amp;iacute;a usado para su programa, pero respondi&amp;oacute; que nos dormir&amp;iacute;amos. Ah&amp;iacute; se revel&amp;oacute; que gran parte de la audiencia conoc&amp;iacute;a de algunos temas, y luego de algunas preguntas m&amp;aacute;s, Pablo solt&amp;oacute; la prenda: estaba usando cadenas de Markov.&lt;/p&gt;
&lt;p&gt;Eso era algo distinto de la l&amp;iacute;nea que ven&amp;iacute;a explicando. Recuerdo haber leido art&amp;iacute;culos sobre generaci&amp;oacute;n de m&amp;uacute;sica usando &lt;/p&gt;
&lt;p&gt;Alguien pregunt&amp;oacute; sobre si se pod&amp;iacute;a aplicar este &amp;ldquo;approach&amp;rdquo; a literatura. Me hubiera gustado comentar ah&amp;iacute; dos cosas: una, recordar a mi apreciado Stanislav Lem, que en uno de sus excelentes &amp;ldquo;pr&amp;oacute;logos inventados&amp;rdquo;, creo que de su libro &amp;ldquo;Vac&amp;iacute;o perfecto&amp;rdquo;, trata de supercompadoras militares, una de las cuales se dedica en alg&amp;uacute;n tiempo libre a analizar la obra de Dostoievsky, descubriendo que sus escritos forman una especie de toro en varias dimensiones, a las que le falta un pedazo. Y lo completa, escribiendo una obra que falta, a la que Lem describe con detalle, y uno se convence de que es la obra que Dostoievsky deber&amp;iacute;a haber escrito.&lt;/p&gt;
&lt;p&gt;Otra: que hay trabajos sobre la generaci&amp;oacute;n de texto, usando gram&amp;aacute;ticas generativas. Yo recordar&amp;iacute;a mi post:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://ajlopez.zoomblog.com/archivo/2008/07/08/posmopolitan.html"&gt;Posmopolitan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hubo varias sugerencias sobre c&amp;oacute;mo podr&amp;iacute;a seguir Pablo con su trabajo. Creo que qued&amp;oacute; la impresi&amp;oacute;n que las cadenas de Markov son un &amp;ldquo;dead end&amp;rdquo;, pero habr&amp;aacute; que ver.&lt;/p&gt;
&lt;p&gt;Si hasta estuvo &lt;a target="_blank" href="http://www.cs.auckland.ac.nz/~chaitin/"&gt;Gregory Chaitin&lt;/a&gt; y todo preguntando!!! (la primera vez que lo veo en persona!!)&lt;/p&gt;
&lt;p&gt;Yo recuerdo haber sugerido:&lt;/p&gt;
&lt;p&gt;- Armar un sistema que emplee reglas generativas, pero que las reglas se vayan descubriendo o aprendiendo (no tener que escribir las reglas). Yo me imagino un trabajo como el de Lenat con Eurisko, se le dan al programa m&amp;uacute;sica, y va intentando descubrir por s&amp;iacute; mismo reglas&lt;/p&gt;
&lt;p&gt;- Tener en Internet un comparador de m&amp;uacute;sica generada, para que los seres humanos vayamos &amp;ldquo;taggeando&amp;rdquo;, &amp;ldquo;rankeando&amp;rdquo; nuestras preferidas. Una especie de popego de m&amp;uacute;sica generada&amp;hellip; ;-)&lt;/p&gt;
&lt;p&gt;Y en alg&amp;uacute;n momento, har&amp;iacute;a hincapi&amp;eacute; en el tema de &amp;ldquo;aprender&amp;rdquo;. Ese es un camino dif&amp;iacute;cil, pero que puede ser fruct&amp;iacute;fero. Que el programa se modifique a s&amp;iacute; mismo, a sus reglas, a sus decisiones, lo que sea, pero que el programa evolucione.&lt;/p&gt;
&lt;p&gt;Comentar&amp;iacute;a ac&amp;aacute; algo adicional: explorar&amp;iacute;a en alg&amp;uacute;n momento, el jazz. En esa m&amp;uacute;sica, se encuentra la tensi&amp;oacute;n entre lo que el oyente espera, y lo que ejecutante decide. Si lo que el ejecutante es demasiado aleatorio, se pierde el encanto. Si es demasiado predecible, no hay gracia. O tal vez, comenzar&amp;iacute;a por Bach, y hacer que el programa haga ingenier&amp;iacute;a inversa, redescubra reglas de la fuga. Se coment&amp;oacute; algo &lt;/p&gt;
&lt;p&gt;Si quieren ver algo sobre cadenas de Markov en m&amp;uacute;sica, a visitar:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://michaelclemow.com/?p=245"&gt;michael clemow &amp;quot; Blog Archive &amp;quot; markov chain music&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.citeulike.org/user/rlichten/article/2948935"&gt;CiteULike: Extracting Patterns in Music for Composition via Markov Chains&lt;/a&gt; &lt;br /&gt;&lt;a href="http://peabody.sapp.org/class/dmp2/lab/markov1/" title="Digital Music Programming II- Markov Chains"&gt;Digital Music Programming II- Markov Chains&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el medio de las preguntas, Pablo mencion&amp;oacute; al pasar otros temas: me temo que los mencion&amp;oacute; al pasar (uno de los pocos defectos de la charla, mencionar algo sin dar un detalle m&amp;aacute;s firme sobre lo que avanzar). Supongo que eran:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.citeulike.org/user/ldietz/article/2430904" title="CiteULike- The nested Chinese restaurant process and hierarchical"&gt;CiteULike- The nested Chinese restaurant process and hierarchical&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.abbreviations.com/b1.aspx?KEY=124324" title="GWCR - Generalized Weighted Chinese Restaurant Monte Carlo algorithm"&gt;GWCR - Generalized Weighted Chinese Restaurant Monte Carlo algorithm&lt;/a&gt; &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Dirichlet_process"&gt;&lt;em&gt;Dirichlet process&lt;/em&gt; - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;De nuevo, supongo que est&amp;aacute; explorando formas aplicar an&amp;aacute;lisis estad&amp;iacute;stico sobre m&amp;uacute;sica de entrada. Recuerdo varios art&amp;iacute;culos que tengo en otro cubil, sobre la aplicaci&amp;oacute;n de cadenas de markov, y otros, sobre c&amp;oacute;mo se obten&amp;iacute;an distintas reglas, seg&amp;uacute;n la entrada sea mucho blues, vs m&amp;uacute;sica m&amp;aacute;s &amp;ldquo;cl&amp;aacute;sica&amp;rdquo;. Hubo un tiempo en los ochentas, que &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Douglas_Hofstadter"&gt;Douglas Hofstadter&lt;/a&gt; se ocup&amp;oacute; mucho del tema. Debo tener alguna Scientific American son eso.&lt;/p&gt;
&lt;p&gt;No recuerdo que Pablo haya mencionado a Eugene Narmour, parece que lo mencion&amp;oacute; en una charla que tuvo con Chaitin luego. Ver:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perception.upenn.edu/faculty/pages/narmour.php"&gt;&lt;em&gt;Eugene Narmour&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Algunos enlaces que voy coleccionando sobre el tema&lt;/p&gt;
&lt;p&gt;&lt;a href="http://delicious.com/ajlopez/computermusic"&gt;http://delicious.com/ajlopez/computermusic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pablo abri&amp;oacute; hace unos d&amp;iacute;as, su blog, para los que quieran seguir su progreso:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lacompositora.blogspot.com/" title="http://lacompositora.blogspot.com/"&gt;http://lacompositora.blogspot.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pueden leer ah&amp;iacute; su avance sobre la l&amp;iacute;nea Narmour.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt; &lt;br /&gt;&lt;a href="http://ajlopez.popego.com"&gt;http://ajlopez.popego.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoying Pappo playing piano, third video at &lt;a href="http://ajlopez.zoomblog.com/archivo/2009/04/19/mas-blues-con-Pappo.html" title="M&amp;aacute;s blues con Pappo"&gt;M&amp;aacute;s blues con Pappo&lt;/a&gt; &lt;br /&gt;No algorithm for that music, yet! ;-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1692605" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category></item><item><title>Modelo, decisiones, inteligencia artificial y AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2009/03/22/modelo-decisiones-inteligencia-artificial-y-ajgenesis.aspx</link><pubDate>Sun, 22 Mar 2009 20:28:16 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1680480</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1680480</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/03/22/modelo-decisiones-inteligencia-artificial-y-ajgenesis.aspx#comments</comments><description>&lt;p&gt;En el recientemente creado grupo de Google AltNet-Argentina, el bueno de Fabio Maulo planteó una pregunta en el thead:&lt;/p&gt; &lt;p&gt;&lt;a href="http://groups.google.com/group/altnet-argentina/t/6668697a12cc04aa" target="_blank"&gt;ORuM&lt;/a&gt;&lt;/p&gt; &lt;p&gt;donde escribía&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a&gt;&lt;/a&gt;Quien me conoce un poco, o me ha leido en algún lado, conoce ya la acronimo &lt;br /&gt;ORuM.La realida es que nunca tuve la ocasión de una buena confrontación &lt;br /&gt;sobre el tema.  &lt;p&gt;Para titular la mesa sería: &lt;br /&gt;Object Relational unMapping &lt;br /&gt;Mas allá del ORM. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;Quisiera compartir, confrontar, ampliar algunas ideas y verificar la &lt;br /&gt;factibilidad. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;La idea es tener en claro, cómo se toman algunas decisiones, en el caso de tener un dominio de clases, y llegar al mapeo de en una base de datos, no preexistente. Es un caso tipo, como escribía el propio Maulo: &lt;blockquote&gt; &lt;p&gt;Yo quisiera llegar a : &amp;quot;che, yo tengo este dominio que tendría que persistir en ORACLE, fijate vos! a mi lo que me interesa es que persista.&amp;quot; &lt;p&gt;El DSL sería: &lt;p&gt;Che.Tengo(&amp;quot;MiDominio.dll&amp;quot;).Que.TieneQuePersistirEn(&amp;quot;ORACLE&amp;quot;).FijateVos();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Para mí, esto es parecido a lo que trato muchas veces de resolver con &lt;a href="http://www.codeplex.com/ajlopez" target="_blank"&gt;AjGenesis&lt;/a&gt;: &lt;p&gt;&amp;quot;Tengo X quiero resolverlo con Y&amp;quot;, donde X puede ser un dominio de entidades, un dominio más tipo DDD, una lista de servicios, lo que sea, e Y sería JSP, Struts2, JSF, ASP.NET MVC, NHibernate, Hibernate, MySql, SQL Server, y demás. Es lo mismo que hace un programador: toma decisiones, ante lo que tiene que hacer. &lt;p&gt;Es por eso que en AjGenesis tomé algunas decisiones tempranas, para poder ir avanzando en un camino, que menciono en: &lt;p&gt;&lt;a title="Sobre la generaci&amp;oacute;n de c&amp;oacute;digo" href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt; &lt;blockquote&gt; &lt;p&gt;... el modelo a usar ... PUEDE SER GENERADO por el propio sistema, &lt;strong&gt;más un sistema experto.&lt;/strong&gt; No imagino una aplicación más inmediata de la &amp;quot;inteligencia artificial&amp;quot;. Imagino agentes inteligentes, que colaboren en una red compartida, cada uno generando parte del modelo, cada uno consumiendo algo que otro produce, y colaborando, para generar un sistema... Sí, ya sé, tengo que tomar la píldora verde, en lugar de la roja... ;-)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Esa es una de las razones de tener en AjGenesis: &lt;p&gt;-&amp;nbsp;un modelo&lt;br /&gt;-&amp;nbsp;más que sólo un lenguaje de templates&lt;br /&gt;-&amp;nbsp;aplicar el lenguaje en tasks, que modifican y completan el modelo &lt;p&gt;Si sólo tuviera templates, sólo haría transformaciones X -&amp;gt; Z, de una forma, digamos, lineal, desde, para poner un ejemplo, una clase o un modelo que describe una clase, a un código o archivo de configuración de persistencia. &lt;p&gt;A lo que voy, es que el camino que quiero para AjGenesis, en algún momento (no para que todos lo usen así), es que sea un sistema experto, que tome decisiones. De ahí que, desde el principio: &lt;p&gt;- tenga un lenguaje completo, con toma de decisiones, que pueden ser complejas&lt;br /&gt;- tiene acceso al framework de .NET, para poder ser extendido de cualquier manera.&lt;br /&gt;- invoque a tareas, no simplemente a transformar el modelo X usando el template T &lt;p&gt;Eso explica también, algunos caminos que estoy explorando, como &lt;a href="http://code.google.com/p/ajlisp/" target="_blank"&gt;AjLisp&lt;/a&gt;, y &lt;a href="http://code.google.com/p/ajcodekatas/source/browse#svn/trunk/AjProlog-0.3" target="_blank"&gt;AjProlog&lt;/a&gt; (aunque son más para entrenarme, que para aplicarlos directamente en AjGenesis). Habrá que investigar si este camino es posible, pero me parece que está relacionado con el tema planteado en el grupo. Veamos, volvamos al problema inicial. &lt;h3&gt;De clases a persistencia&lt;/h3&gt; &lt;p&gt;Las opciones de mapeo que podemos considerar, son las mostradas por el bueno de &lt;a href="http://www.martinfowler.com" target="_blank"&gt;Martin Fowler&lt;/a&gt;: &lt;p&gt;&lt;a href="http://martinfowler.com/eaaCatalog/singleTableInheritance.html" target="_blank"&gt;Single Table Inheritance&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://martinfowler.com/eaaCatalog/classTableInheritance.html" target="_blank"&gt;Class Table Inheritance&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://martinfowler.com/eaaCatalog/concreteTableInheritance.html" target="_blank"&gt;Concrete Table Inheritance&lt;/a&gt;&lt;/p&gt; &lt;p&gt;En una situación ideal (no costo en tiempo de queries o de update, sin limite de memoria en disco), todo seria igual. &lt;p&gt;Como la situación no es ideal, me imagino que los costos de cada decisión se mediran en: &lt;p&gt;- Rendimiento de actualización y consulta &lt;p&gt;- Espacio de almacenamiento &lt;p&gt;A primera vista, me imagino que el primer punto es el mas peliagudo. &lt;p&gt;Para concretar, tomemos un modelo sencillo. Sea clase Empresa, subclases Cliente, Proveedor. &lt;p&gt;Habría que ver qué consecuencias tiene entonces, el tener una tabla empresas, con un campo discriminador de si es cliente o proveedor. ¿Qué pasa si hay muchos campos en comun? ¿O si hay muchos campos de diferencia? Pienso que mas va a influir el tema: ¿pero queda ahí el dominio? Si el día de mañana aparecen más subclases, ClienteExtranjero, ProveedorExterno,&amp;nbsp;¿no se complicará el haber adoptado una sola tabla? &lt;p&gt;Si ponemos tablas Empresa (con los datos comunes), Clientes (con los datos adicionales), Proveedor (con los datos adicionales), habrá que hilar fino en las consultas. No sólo está el tema del rendimiento de actualización y consulta. Tambien esta&amp;nbsp;la frecuencia de algunas operaciones. Es decir, si una consulta determinada tarda X tiempo, habrá que ponderarla tambien por la frecuencia de esa consulta en la operación normal del sistema. &lt;p&gt;Con tablas Clientes, Proveedores, habra que comprobar que la actualizacion sea mas rapida que en el anterior caso. Y vigilar que pasa, y con cuanta frecuencia, se necesita una consulta sobre Empresas (que imagino debera implicar un UNION). &lt;p&gt;Entonces, no sólo es el modelo de clases, sino cómo se usa, lo que puede influir en cómo hagamos el mapeo. &lt;p&gt;ESTO ES LO QUE YO VEO EN MUCHOS MODELOS ya existentes, que no tienen todo LO QUE SE NECESITA DE UN MODELO. Un modelo de clases se queda corto, para tomar algunas decisiones. Lo mismo, si partimos desde una base ya diseñada. Partir de esos modelos, implica que en algún momento lo tenemos que enriquecer, con anotaciones en el modelo de clases, o agregando información en metadata o en algún momento, si partimos desde la base de datos. &lt;p&gt;Partir de un modelo de clases o de la base de datos, tiene la ventaja de partir de algo conocido. Pero para muchas de las operaciones que quisiéramos hacer (en este caso &amp;quot;simple&amp;quot;, mapeo a relacional, imaginen otros casos como servicios distribuidos, seguridad, cache en el cliente, etc.), hace falta más información de contexto. &lt;p&gt;De ahí, que yo esté a favor de un modelo distinto, más enriquecido. &lt;h3&gt;De Aristóteles a Kant&lt;/h3&gt; &lt;p&gt;En los noventa, en una revista Byte, leí una breve reseña, sobre gente que estaba armando algo que lo llamaban KANT. En honor a las categorías del filósofo alemán (yo diría que se referían más a categorías de Aristóteles), ellos planteaban que todo en, lo que hoy llamaríamos, modelo, está incluído en alguna categoría como: &lt;p&gt;- Persona&lt;br /&gt;- Organización&lt;br /&gt;- Bien Físico&lt;br /&gt;- Lugar Físico&lt;br /&gt;- Documento&lt;br /&gt;- Suceso&lt;br /&gt;- Lapso &lt;p&gt;y demás. Por ejemplo, un Empleado entraría en la categoría Persona, un Cliente o Proveedor, en la categoría Organización. El que un Empleado estuviera contratado por una Empresa, era un Lapso (un intervalo, posiblemente abierto, de tiempo) establecido entre una Persona y una Organización. A partir de las categorías, se podía inferir que toda Persona tiene fecha de nacimiento, y otros atributos, que un Lapso puede tener tiempo de inicio y tiempo de final. (Escribo sin tener la referencia, de memoria). &lt;p&gt;Esa reseña siempre influyó en lo que quiero hacer con un modelo rico, abstracto. Sirve para poner más semántica sobre lo que estamos describiendo, más de lo que daría un modelo de código o de base de datos. Sigo pensando que algo así debe ser el modelo del que partir, en la generación de código o en otras ideas. &lt;p&gt;Apenas una punta de eso (el tener categorías llamadas prototipos, que sirvan de base para generar un modelo simple), está desde hace tiempo en &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=ajgenesis&amp;amp;ReleaseId=7261" target="_blank"&gt;AjExamplesExamples3.zip&lt;/a&gt;, en el directorio Prototypes, y Seeds. Es una idea con implementación mínima, a explicar en detalle en otro post. &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;br /&gt;En estos días, revival de los 80s en mi vida &lt;a title="http://www.youtube.com/watch?v=dgwmErO_nlQ" href="http://www.youtube.com/watch?v=dgwmErO_nlQ"&gt;http://www.youtube.com/watch?v=dgwmErO_nlQ&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1680480" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Material y enlaces de Inteligencia Artificial</title><link>http://msmvps.com/blogs/lopez/archive/2009/02/09/material-y-enlaces-de-inteligencia-artificial.aspx</link><pubDate>Mon, 09 Feb 2009 08:21:23 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1670531</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1670531</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/02/09/material-y-enlaces-de-inteligencia-artificial.aspx#comments</comments><description>&lt;p&gt;El pasado miércoles tuve el gusto de dar una &lt;a href="http://msmvps.com/blogs/lopez/archive/2009/02/01/charla-de-inteligencia-artificial.aspx" target="_blank"&gt;charla sobre Inteligencia Artificial&lt;/a&gt;, organizada por el &lt;a href="http://www.clubdeprogramadores.com" target="_blank"&gt;Club de Programadores&lt;/a&gt;. Quería presentar en este post el material usado, ejemplos, enlaces mencionados, recursos y bibliografía que recomendé.&lt;/p&gt; &lt;p&gt;El campo de la Inteligencia Artificial es inmenso, y con el correr de los años se ha ido abriendo en ramas distintas, que a veces, poco tienen que ver unas con otras.&lt;/p&gt; &lt;p&gt;La presentación que usé la pueden bajar de &lt;a href="http://cid-9f903f3d6db0c176.skydrive.live.com/self.aspx/Presentations/IntroIA2009012003b.ppt" target="_blank"&gt;IntroIA2009012003b.ppt&lt;/a&gt;. Una presentación más antigua, pero más completa (de un curso de dos días) en: &lt;a title="IntroIA200501.zip" href="http://www.ajlopez.com/downloads/InteligenciaArtificial/IntroIA200501.zip"&gt;IntroIA200501.zip&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Se está formando un grupo de gente interesada en la Inteligencia Artificial, acá en Argentina, leer:&lt;/p&gt; &lt;p&gt;&lt;a title="Inteligencia Artificial en Argentina" href="http://msmvps.com/blogs/lopez/archive/2008/12/12/inteligencia-artificial-en-argentina.aspx"&gt;Inteligencia Artificial en Argentina&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mencioné que este año hay un congreso de Inteligencia Computacional Aplicada, leer&lt;/p&gt; &lt;p&gt;&lt;a title="Congreso de Inteligencia Computacional Aplicada" href="http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx"&gt;Congreso de Inteligencia Computacional Aplicada&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Para un primer pantallazo de las ramas, y algo de la historia, puede servir de base el artículo de la Wikipedia:&lt;/p&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" target="_blank"&gt;Artificial Intelligence&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/History_of_artificial_intelligence" target="_blank"&gt;History of Artificial Intelligence&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Un sitio a visitar es el de Peter Norvig:&lt;/p&gt; &lt;p&gt;&lt;a title="Peter Norvig" href="http://norvig.com/"&gt;Peter Norvig&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Un paper totalmente recomendable, para leer las ideas de Marvin Minksy, sobre cómo podría funcionar una mente:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cs.bham.ac.uk/~axs/aisb/papers/minsky.pdf" target="_blank"&gt;Future Models for Mind-Machines&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Más discutible, desde mi punto de vista, son las ideas de Kurzweil, pueden visitar su sitio:&lt;/p&gt; &lt;p&gt;&lt;a title="KurzweilAI.net" href="http://www.kurzweilai.net/index.html?flash=1"&gt;KurzweilAI.net&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mencioné en varios puntos de la charla, un paper que describía la historia de la Inteligencia Artificial, y cómo durante décadas, todos los intentos comerciales fueron fracansando:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sts.tu-harburg.de/~r.f.moeller/symbolics-info/ai-business.pdf" target="_blank"&gt;If it works, It&amp;#39;s not AI&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Un artículo reciente, que tiene una visión más optimista:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;taxonomyName=software&amp;amp;articleId=332273&amp;amp;taxonomyId=18&amp;amp;intsrc=kc_feat" target="_blank"&gt;Future Watch: A.I. comes of ages&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mencioné el trabajo de Douglas Lenat. Pueden ver lo que está haciendo ahora, persiguiendo el sentido común en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.cyc.com/" href="http://www.cyc.com/"&gt;http://www.cyc.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Sitios a visitar sobre Inteligencia Artificial:&lt;/p&gt; &lt;p&gt;&lt;a href="http://satirist.org/learn-game/&amp;lt;br%20/&amp;gt;&amp;lt;a%20target="&gt;http://www.aboutai.net&lt;/a&gt;&amp;nbsp;About AI, enlaces sobre distintos temas de AI&lt;br /&gt;&lt;a href="http://www.pcai.com/"&gt;http://www.pcai.com/&lt;/a&gt;&amp;nbsp;PC AI Free Magazine&lt;br /&gt;&lt;a href="http://www.jair.org/"&gt;http://www.jair.org/&lt;/a&gt;&amp;nbsp;Journal of Artificial Intelligence Research&lt;br /&gt;&lt;a href="http://www.aaai.org/"&gt;http://www.aaai.org/&lt;/a&gt;&amp;nbsp;Association for the advance of Artificial Intelligence  &lt;p&gt;Varias explicaciones de distintos temas, con ejemplos de codigo en  &lt;p&gt;&lt;a href="http://www.ai-junkie.com/" target="_blank"&gt;AI Junkie&lt;/a&gt;  &lt;h3&gt;Lenguajes de Programación&lt;/h3&gt; &lt;p&gt;Mencioné en la charla algunos lenguajes. Tienen enlaces dedicados en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/lisp" target="_blank"&gt;Lisp&lt;/a&gt;&amp;nbsp;donde los programas se pueden manipular como datos&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/prolog" target="_blank"&gt;Prolog&lt;/a&gt;&amp;nbsp;dedicado a implementar programación declarativa&lt;/p&gt; &lt;p&gt;Al final del post, hay libros sobre distintos temas, donde se usan esos lenguajes (ver por ejemplo&amp;nbsp;&lt;a href="http://www.freebookcentre.net/CompuScience/Free-Artificial-Intelligence-Books-Download.html" target="_blank"&gt;libros en la web&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Un ejemplo que tenía preparado, pero no mostré, se basaba en usar &lt;a href="http://homepages.inf.ed.ac.uk/stg/research/Psharp/" target="_blank"&gt;P#&lt;/a&gt;, una implementación de Prolog de código abierto.&lt;/p&gt; &lt;p&gt;Yo estoy trabajando en un intérprete Lisp, ver &lt;a title="AjLisp- un int&amp;eacute;rprete Lisp en .NET" href="http://msmvps.com/blogs/lopez/archive/2008/07/31/ajlisp-un-int-233-rprete-lisp-en-net.aspx"&gt;AjLisp- un intérprete Lisp en .NET&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ver también&lt;/p&gt; &lt;p&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#lisp"&gt;AI Programming (Lisp)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#prolog"&gt;AI Programming (Prolog)&lt;/a&gt;  &lt;h3&gt;Lógica difusa&lt;/h3&gt; &lt;p&gt;El ejemplo que usé en la charla (el de la grúa con contenedor controlado por lógica difusa) es de:&lt;/p&gt; &lt;p&gt;Fuzzy Tech &lt;a href="http://www.fuzzytech.com"&gt;http://www.fuzzytech.com&lt;/a&gt;  &lt;p&gt;&lt;img src="http://www.fuzzytech.com/bilder/fuzzyb.gif" alt="" /&gt;  &lt;h3&gt;Sistemas basados en reglas&lt;/h3&gt; &lt;p&gt;No vimos ejemplos en la charla, pero pueden visitar:&lt;/p&gt; &lt;p&gt;&lt;a href="http://herzberg.ca.sandia.gov/jess/"&gt;Jess&lt;/a&gt; sistema basado en reglas, en Java (basado en el algoritmo Rete).  &lt;p&gt;&lt;img src="http://www.jessrules.com/jess/jess.gif" alt="" /&gt;  &lt;h3&gt;Aprendizaje automático&lt;/h3&gt; &lt;p&gt;Algunos enlaces&lt;/p&gt; &lt;p&gt;&lt;a href="http://mlearn.ics.uci.edu/Machine-Learning.html"&gt;UCI Machine Learning Group&lt;/a&gt;&lt;br /&gt;&lt;a href="http://satirist.org/learn-game/"&gt;Machine Learning in Games&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#learning"&gt;Machine Learning (AI on the Web)&lt;/a&gt;  &lt;h3&gt;Planeación&lt;/h3&gt; &lt;p&gt;Nombramos los problemas de la planeación. Visitar:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/2/What-is-Partial-Order-Planning/1090"&gt;What is Partial-Order Planning?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cs.dartmouth.edu/~brd/Teaching/AI/Lectures/Planning/ucpop-background.html"&gt;Review of An introduction to Least Commitment Planning&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/22/Selected-History-of-Partial-Order-Planning-Part-1/1127"&gt;Selected History of Partial Order Planning, Part 1&lt;/a&gt;&amp;nbsp;(donde aparece Sacerdoti, mi primer referente en el tema)&lt;br /&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/24/Selected-History-of-Partial-Order-Planning-Part-2/1133"&gt;Selected History of Partial Order Planning, Part 2&lt;/a&gt;  &lt;h3&gt;Redes Neuronales&lt;/h3&gt; &lt;p&gt;En la charla vimos una demo del producto comercial:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.neurosolutions.com/" target="_blank"&gt;NeuroSolutions&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.neurosolutions.com/images/NS507.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;El ejemplo de hormigas controladas por redes neuronales que evolucionaban por algoritmos genéticos, en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ai-junkie.com/ann/evolved/nnt1.html" target="_blank"&gt;Neural Networks in plain English&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Algunos enlaces adicionales:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.inns.org/"&gt;http://www.inns.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nips.cc"&gt;http://www.nips.cc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.makhfi.com/resources.htm"&gt;http://www.makhfi.com/resources.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.makhfi.com/realworld.htm"&gt;http://www.makhfi.com/realworld.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.neoxi.com/NNR/index.html"&gt;http://www.neoxi.com/NNR/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ri.cmu.edu/pubs/pub_926.html"&gt;http://www.ri.cmu.edu/pubs/pub_926.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vasc.ri.cmu.edu/NNFaceDetector/"&gt;http://vasc.ri.cmu.edu/NNFaceDetector/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.deepinsight.com/"&gt;http://www.deepinsight.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://satirist.org/learn-game/systems/neurochess.html"&gt;http://satirist.org/learn-game/systems/neurochess.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://satirist.org/learn-game/systems/go-net.html"&gt;http://satirist.org/learn-game/systems/go-net.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://satirist.org/learn-game/systems/gammon/"&gt;http://satirist.org/learn-game/systems/gammon/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.20q.net/"&gt;http://www.20q.net/&lt;/a&gt; Twenty Questions Neural-Net on the Web&lt;br /&gt;&lt;a href="http://gpdev.net/NeuroDriver_bpnet.html"&gt;http://gpdev.net/NeuroDriver_bpnet.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/csharp/neural_dot_net.asp"&gt;http://www.codeproject.com/csharp/neural_dot_net.asp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/dotnet/simple_ocr.asp"&gt;http://www.codeproject.com/dotnet/simple_ocr.asp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/script/articles/list_articles.asp?userid=441940"&gt;http://www.codeproject.com/script/articles/list_articles.asp?userid=441940&lt;/a&gt;  &lt;h3&gt;Algoritmos Genéticos&lt;/h3&gt; &lt;p&gt;Leer como introducción&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ai-junkie.com/ga/intro/gat1.html" target="_blank"&gt;Genetic Algorithms in plain English&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mostré mi ejemplo de:&lt;/p&gt; &lt;p&gt;&lt;a title="AjGa- una librer&amp;iacute;a de algoritmos gen&amp;eacute;ticos" href="http://msmvps.com/blogs/lopez/archive/2009/01/28/ajga-una-librer-237-a-de-algoritmos-gen-233-ticos.aspx"&gt;AjGa- una librería de algoritmos genéticos&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img height="420" src="http://www.todocontenidos.com/images/articles/ajgatsp1.png" width="525" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Otros enlaces:&lt;/p&gt; &lt;p&gt;Galib Librería de Algoritmos Genéticos &lt;a href="http://lancet.mit.edu/ga/"&gt;http://lancet.mit.edu/ga/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/geneticalgorithms"&gt;http://delicious.com/ajlopez/geneticalgorithms&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enlaces adicionales&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aaai.org/aitopics/pmwiki/pmwiki.php/AITopics/GeneticAlgorithms"&gt;Genetic Algorithms and Genetic Programming&lt;/a&gt;&amp;nbsp;(multitud de enlaces)&lt;br /&gt;&lt;a href="http://www.genetic-programming.com/gpanimatedtutorial.html"&gt;What is Genetic Algorithms?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://citeseer.ist.psu.edu/212034.html"&gt;Genetic Programming&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/tcw2/report.html"&gt;Genetic Algorithms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc163934.aspx"&gt;Survival of the Fittest: Natural Selection with Windows Forms&lt;/a&gt;&amp;nbsp;(en .NET)&lt;br /&gt;&lt;a href="http://java.sys-con.com/read/36224.htm"&gt;An introduction to Genetic Algorithms In Java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aiai.ed.ac.uk/technology/geneticalgorithms.html"&gt;AIAI Technology Genetic Algorithms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/tspapp.aspx"&gt;Genetic Algorithms and the Traveling Salesman Problem&lt;/a&gt;&amp;nbsp;(en C++ para Windows)  &lt;h3&gt;Programación Evolutiva&lt;/h3&gt; &lt;p&gt;Estuvimos viendo mi ejemplo&lt;/p&gt; &lt;p&gt;&lt;a title="Jugando con programas evolutivos" href="http://msmvps.com/blogs/lopez/archive/2008/12/16/jugando-con-programas-evolutivos.aspx"&gt;Jugando con programas evolutivos&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/evolveexamplegui.png" alt="" /&gt;&lt;/p&gt; &lt;p&gt;Estuvimos corriendo el ejemplo&amp;nbsp;de &lt;a href="http://www.codeproject.com/KB/game/AI_Life.aspx" target="_blank"&gt;AI_Life&lt;/a&gt;, donde vimos redes&amp;nbsp;neuronales, algoritmos genéticos y conductas de persecución.&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Juegos e Inteligencia Artificial&lt;/h3&gt; &lt;p&gt;Primero, el tema juegos de tablero.&lt;/p&gt; &lt;p&gt;En el proyecto &lt;a href="http://www.codeproject.com/KB/game/reversi.aspx" target="_blank"&gt;Reversi&lt;/a&gt; pueden ver una implementación del algoritmo MinMax con Alfa Beta.&lt;/p&gt; &lt;p&gt;En &lt;a href="http://www.codeproject.com/KB/game/learningconnectfour.aspx" target="_blank"&gt;Connect Four&lt;/a&gt; y en &lt;a href="http://www.codeproject.com/KB/game/learning_draughts.aspx" target="_blank"&gt;Learning Draughts&lt;/a&gt; pudimos ver algunas estrategias simples de aprendizaje.&lt;/p&gt; &lt;p&gt;Para tener un panorama de los problemas actuales, hay que visitar el grupo de la Universidad de Alberta:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cs.ualberta.ca/~games/"&gt;http://www.cs.ualberta.ca/~games/&lt;/a&gt;  &lt;p&gt;&lt;img alt="" src="http://www.ajlopez.com/images/articles/ajgoalberta.png" /&gt;  &lt;p&gt;Pueden visitar el grupo de Research de Microsoft:  &lt;p&gt;&lt;a href="http://research.microsoft.com/mlp/apg/"&gt;Applied Games&lt;/a&gt;  &lt;p&gt;Pero también hay inteligencia artificial en juegos de video. Recomendaría visitar:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ai-blog.net/" target="_blank"&gt;Game IA&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="What is BattleCode-" href="http://battlecode.mit.edu/2009/info"&gt;What is BattleCode-&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Artificial Intelligence and Computer Games" href="http://www.aaai.org/Library/Symposia/Spring/ss99-02.php"&gt;Artificial Intelligence and Computer Games&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="AI- AAAI Library online" href="http://www.ai-blog.net/archives/000158.html"&gt;AI- AAAI Library online&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Game AI for Developers &amp;mdash; AiGameDev.com" href="http://aigamedev.com/"&gt;Game AI for Developers — AiGameDev.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;El tema de máquinas de estado es muy usado, pueden leer&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ai-junkie.com/architecture/state_driven/tut_state1.html" target="_blank"&gt;State-Driven Game Agent Design&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Computer Go&lt;/h3&gt; &lt;p&gt;Para mí, un tema fascinante. Vimos en la charla, a mi ejemplo AjGo:&lt;/p&gt; &lt;p&gt;&lt;a title="AjGo- hacia un programa que juegue al go" href="http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx"&gt;AjGo- hacia un programa que juegue al go&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgocolors.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Pueden visitar:  &lt;p&gt;&lt;a href="http://research.microsoft.com/mlp/apg/go.aspx"&gt;Computer Go in Microsoft&lt;/a&gt;  &lt;p&gt;Hay otro grupo de investigación sobre el tema en Beijing:  &lt;p&gt;&lt;a href="http://spectrum.ieee.org/oct07/5552"&gt;Craking Go&lt;/a&gt;&amp;nbsp;a cargo de &lt;a href="http://en.wikipedia.org/wiki/Feng-hsiung_Hsu"&gt;Feng-hsiung Hsu&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mis enlaces sobre Computer Go en &lt;a href="http://delicious.com/ajlopez/computergo"&gt;http://delicious.com/ajlopez/computergo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Todo sobre Go en &lt;a href="http://www.gobase.org"&gt;http://www.gobase.org&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Si quieren aprender el juego, pueden visitar el sitio de la &lt;a href="http://www.go.org.ar" target="_blank"&gt;Asociación Argentina de Go&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Vida Artificial&lt;/h3&gt; &lt;p&gt;Un tema fascinante, nombrado al pasar en la charla. Visiten el proyecto Tierra&lt;/p&gt; &lt;p&gt;&lt;a title="http://life.ou.edu/tierra/" href="http://life.ou.edu/tierra/"&gt;http://life.ou.edu/tierra/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://life.ou.edu/pic/hyper.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Vean las &amp;quot;fotos&amp;quot; de:  &lt;p&gt;&lt;a href="http://www.his.atr.jp/~ray/pubs/images/index.html"&gt;&lt;a title="http://life.ou.edu/pubs/images/" href="http://life.ou.edu/pubs/images/"&gt;http://life.ou.edu/pubs/images/&lt;/a&gt;&lt;/a&gt;  &lt;p&gt;Otro proyecto que también investiga el tema evolución es:  &lt;p&gt;&lt;a href="http://www.darwinathome.org/"&gt;Darwin at home&lt;/a&gt;&amp;nbsp;el resultado de aplicar Fuidiom&lt;br /&gt;&lt;a href="http://fluidiom.sourceforge.net/"&gt;Fluidiom&lt;/a&gt;&amp;nbsp;Implementado en Java, sería interesante implementar algo similar en .NET y DirectX/OpenGL&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.darwinathome.org/images/google-movie.jpg" alt="" /&gt;  &lt;h3&gt;Robótica&lt;/h3&gt; &lt;p&gt;Mostré el ejemplo de:&lt;/p&gt; &lt;p&gt;&lt;a title="Que lindo el guaguau- BigDog de Boston Dynamics" href="http://msmvps.com/blogs/lopez/archive/2008/04/24/que-lindo-el-guaguau-bigdog-de-boston-dynamics.aspx"&gt;Que lindo el guaguau- BigDog de Boston Dynamics&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Más enlaces en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Rob_26002300_243_3B00_tica/default.aspx" target="_blank"&gt;Post sobre Robótica&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/robotics"&gt;http://delicious.com/ajlopez/robotics&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.grasp.upenn.edu/index.html"&gt;GRASP Laboratory of Robotics Research and Education @ Penn&lt;/a&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/invisible/"&gt;Microsoft Invisible Computing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.conscious-robots.com/"&gt;Concious Robots&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.conscious-robots.com/en/robotics-studio/index.php"&gt;Robotics Studio at Concious Robots&lt;/a&gt; (con algún foro en español)&lt;br /&gt;&lt;a href="http://www.devx.com/dotnet/Article/32729"&gt;An introduction to Programming Robots with Microsoft Robotics Studio&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.wimobot.com/"&gt;Wimo: The Windows Mobile Robot&lt;/a&gt;  &lt;h3&gt;Bibliografía&lt;/h3&gt; &lt;p&gt;&lt;a href="http://robotics.stanford.edu/~nilsson/" target="_blank"&gt;Nils J. Nilsson&lt;/a&gt; escribió varios libros en estas últimas décadas. Yo recomendaría este libro para una primera aproximación, bastante completa, a la Inteligencia Artificial actual:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.elsevier.com/wps/find/bookdescription.cws_home/700473/description#description" target="_blank"&gt;Artificial Intelligence: a new synthesis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.elsevier.com/framework_products/images/73/700473.gif" alt="" /&gt; &lt;/p&gt; &lt;p&gt;En español, en Argentina, Librería Cúspide como &lt;a href="http://www.cuspide.com/isbn/8448128249" target="_blank"&gt;Inteligencia Artificial: una nueva síntesis&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Uno de sus libros está en línea: &lt;a title="How Are We To Know-" href="http://ai.stanford.edu/~nilsson/hawtk/hawtk-webpage.htm"&gt;How Are We To Know-&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Uno de los libros que recomendé es el de Russell y Norvig (es muy bueno en las notas históricas al final de cada capítulo):&lt;/p&gt; &lt;p&gt;&lt;a title="AI- A Modern Approach" href="http://aima.cs.berkeley.edu/"&gt;AI- A Modern Approach&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://aima.cs.berkeley.edu/graphics/2esmall.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Si están en Argentina, lo pueden encontrar en español, por ejemplo, en librería Cúspide, como &lt;a href="http://www.cuspide.com/isbn/842054003X" target="_blank"&gt;Inteligencia Artificial un enfoque moderno&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Otro de Norvig es&lt;/p&gt; &lt;p&gt;&lt;a title="Paradigms of AI Programming" href="http://norvig.com/paip.html"&gt;Paradigms of AI Programming&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://norvig.com/paip-cover.gif" alt="" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Los interesados en lenguajes de programación e Inteligencia Artificial, pueden examinar el clásico de Bratko, muy bueno para aprender la relación entre programación declarativa e Inteligencia Artificial:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.amazon.com/Prolog-Programming-Artificial-Intelligence-Bratko/dp/0201403757" target="_blank"&gt;Prolog Programming for Artificial Intelligence&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://ecx.images-amazon.com/images/I/419EYBHD16L._SL500_AA240_.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Varios libros gratuitos en línea sobre Inteligencia Artificial en&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.freebookcentre.net/CompuScience/Free-Artificial-Intelligence-Books-Download.html" target="_blank"&gt;Free Artificial Intelligence Books&lt;/a&gt;&amp;nbsp;(visiten el sitio, que hay todos temas, de computación, matemáticas y ciencia).&lt;/p&gt; &lt;h3&gt;Enlaces adicionales&lt;/h3&gt; &lt;p&gt;Desde hace unos años, mantengo en mi sitio&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ajlopez.com/ia/" target="_blank"&gt;Enlaces sobre Inteligencia Artificial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ajlopez.net/Tema.php?Id=72" target="_blank"&gt;Enlaces sobre Redes Neuronales&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ajlopez.net/Tema.php?Id=64" target="_blank"&gt;Enlaces sobre Computer Go&lt;/a&gt;&lt;/p&gt; &lt;p&gt;En los últimos tiempos, directamente agrego en mis enlaces de Delicious:&lt;/p&gt; &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Los posts que escribo están bajo el tag:&lt;/p&gt; &lt;p&gt;&lt;a title="Inteligencia Artificial" href="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx"&gt;Inteligencia Artificial&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Espero que les sirva este material, para explorar tan fascinante tema.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1670531" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category></item><item><title>Charla de Inteligencia Artificial</title><link>http://msmvps.com/blogs/lopez/archive/2009/02/01/charla-de-inteligencia-artificial.aspx</link><pubDate>Sun, 01 Feb 2009 22:08:02 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1667933</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1667933</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/02/01/charla-de-inteligencia-artificial.aspx#comments</comments><description>&lt;p&gt;Como saben, el tema de Inteligencia Artificial me entusiasma e interesa. Este siglo ya di tres charlas sobre el tema, es hora de volver sobre el amplio y diverso temario de lo que se ha dado a llamar históricamente IA.&lt;/p&gt; &lt;p&gt;Hoy, es un término que abarca disciplinas muy diferentes, con distintos temas como:&lt;/p&gt; &lt;p&gt;- Sistemas expertos&lt;br /&gt;- Redes neuronales&lt;br /&gt;- Algoritmos genéticos&lt;br /&gt;- Programación evolutiva&lt;br /&gt;- Lenguajes de programación&lt;br /&gt;- Aplicaciones en juegos&lt;br /&gt;- Robótica&lt;br /&gt;- Algoritmos&lt;br /&gt;- Vida artificial&lt;br /&gt;- Agentes autónomos&lt;br /&gt;- Mineria de datos&lt;/p&gt; &lt;p&gt;y como siempre, el tema de fondo: conseguir reproducir la inteligencia humana, que recién estamos comenzando a conocer. También existe el costado filosófico: ¿qué es inteligencia? ¿será posible crearla artificialmente?&lt;/p&gt; &lt;p&gt;Voy a tratar una introducción de varios de esos temas (no todos, que es demasiado), con conceptos y ejemplos,&amp;nbsp;en la charla gratuita del próximo miércoles 4 de Febrero, desde las 18:30, en el Club de Programadores. Es gratuita, pero tienen que inscribirse:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.clubdeprogramadores.com/cursos/CursoMuestra.php?Id=205" target="_blank"&gt;Charla de Inteligencia Artificial&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Espero que les interese. Algunos (demasiados) enlaces sobre el tema, en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www.ajlopez.com/ia/" href="http://www.ajlopez.com/ia/"&gt;http://www.ajlopez.com/ia/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1667933" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>AjGa: una librería de algoritmos genéticos</title><link>http://msmvps.com/blogs/lopez/archive/2009/01/28/ajga-una-librer-237-a-de-algoritmos-gen-233-ticos.aspx</link><pubDate>Wed, 28 Jan 2009 07:33:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1666502</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1666502</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/01/28/ajga-una-librer-237-a-de-algoritmos-gen-233-ticos.aspx#comments</comments><description>&lt;p&gt;Estuve codificando una librería de algoritmos genéticos, usando C#. El código está en mi proyecto &lt;a href="http://code.google.com/p/ajcodekatas/" target="_blank"&gt;AjCodeKatas en Google Code&lt;/a&gt;&amp;nbsp;dentro de:&lt;/p&gt; &lt;p&gt;&lt;a title="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjGa" href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjGa"&gt;http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjGa&lt;/a&gt;&lt;/p&gt; &lt;p&gt;El proyecto principal es AjGa (con AjGa.Tests para testing):&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgasln.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Las principales interfaces son:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgaint.png" alt="" /&gt;&lt;/p&gt; &lt;p&gt;Uso generics, con dos tipos genéricos: G, que es el tipo de implementación de un gen, y V como el tipo al que se evalúa un genoma (por ejemplo, int, double). Con ese valor se catalogan los genomas.&lt;/p&gt; &lt;p&gt;IPopulation es una colección de genomas.&lt;/p&gt; &lt;p&gt;IGenome &amp;nbsp;es una colección&amp;nbsp;de genes, que&amp;nbsp;es evaluado a un valor de tipo V.&lt;/p&gt; &lt;p&gt;IEvaluator está a cargo de evaluar un genoma.&lt;/p&gt; &lt;p&gt;La implementación de IEvolution ejecuta generaciones sobre una población, que va cambiando, usando mutadores, operadores de cruzamiento, para irla modificando después de cada ejecución.&lt;/p&gt; &lt;p&gt;Hay interfaces para generar un genoma, mutar uno existente o hacer cruzamiento de dos genomas.&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgacd.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Para probar estas ideas, implementé un proyecto con gen, genoma, y operadores, que ataca el clásico problema del Travelling Salesman Problem, el vendedor que tiene que visitar una serie de ciudades, minimazando la distancia a recorrrer:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgatspprj.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;En este ejemplo, el evaluador tiene una lista de posiciones de ciudades a visitar:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d2ccf8d5-26f7-4c4f-9980-20d15c5489ec" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Evaluator : IEvaluator&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Position&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; positions;

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Evaluator(List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Position&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; positions)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.positions &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; positions;
        }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;El tipo de gen acá es int, y cada valor de genoma se expresa como un int. El genoma mantiene una lista de enteros, que representan el&amp;nbsp;número ordinal de las ciudades a visitar:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:2ba01ca7-37cc-404b-9b73-a7bb089f9ef0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; AjGa;

    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Genome : BaseGenome&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    {        
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Genome(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; size)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; k &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;; k &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; size; k&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            {
                AddGene(k);
            }
        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Esto es, cada gen es un int, y un genoma con genes 2, 0, 1, representa un viaje que visita la tercera ciudad, pasa por la primera, y termina en la segunda.&lt;/p&gt;
&lt;p&gt;Podemos ejecutar el proyecto WinForm, para probar esta implementación:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgatsp1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;En la ejecución de arriba, la distribución de ciudades es al azar. Las ciudades pueden ser distribuidas en una grilla:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgatsp2.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;De esta forma, podemos probar la eficiencia del algoritmo para encontrar un solución óptima, que en el caso de disponer las ciudades en grilla, se conoce de antemano.&lt;/p&gt;
&lt;p&gt;Si queremos implementar un nuevo proyecto GA, tenemos que:&lt;/p&gt;
&lt;p&gt;- Definir el tipo que tendrán los genes&lt;/p&gt;
&lt;p&gt;- Definir el tipo valor a usar&lt;/p&gt;
&lt;p&gt;- Escribir operadores (creadores, mutadores, cruzadores) de genomas&lt;/p&gt;
&lt;p&gt;Los tests que tengo están en verde:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgatests.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Buen Code coverage:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgacc.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;En 4 horas tuve la primera versión, gasté 3 horas explorando TSP, y cerca de 8 horas preparando y &amp;quot;tuneando&amp;quot; la aplicación WinForm.&lt;/p&gt;
&lt;p&gt;Como de costumbre, ¡me divertí escribiendo este ejemplo!&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1666502" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category></item><item><title>UMan, un robot que aprende a usar herramientas</title><link>http://msmvps.com/blogs/lopez/archive/2009/01/07/uman-un-robot-que-aprende-a-usar-herramientas.aspx</link><pubDate>Wed, 07 Jan 2009 08:47:27 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1658729</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1658729</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/01/07/uman-un-robot-que-aprende-a-usar-herramientas.aspx#comments</comments><description>&lt;p&gt;Me encontré con este artículo&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.technologyreview.com/computing/21027/?a=f" target="_blank"&gt;A Robot That Learns to Use Tools&lt;/a&gt;&lt;/p&gt; &lt;p&gt;que describe al UMan, un robot desarrollado en&lt;/p&gt; &lt;p&gt;&lt;a href="http://robotics.cs.umass.edu" target="_blank"&gt;Robotics and Biology Labs&lt;/a&gt;&lt;/p&gt; &lt;p&gt;de la Universidad de Massachusets. Me gustó mucho el camino que eligieron: el robot va interactuando con el entorno, y va aprendiendo a manipular los objetos que encuentra, deduciendo sus relaciones.&lt;/p&gt; &lt;p&gt;Visiten la página del proyecto&lt;/p&gt; &lt;p&gt;&lt;a title="http://robotics.cs.umass.edu/?n=Main.AMM" href="http://robotics.cs.umass.edu/?n=Main.AMM"&gt;http://robotics.cs.umass.edu/?n=Main.AMM&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/uman1.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Ahí pueden ver estos dos videos&lt;/p&gt; &lt;p&gt;&lt;a title="IP1.wmv" href="http://robotics.cs.umass.edu/uploads/Main/IP1.wmv"&gt;IP1.wmv&lt;/a&gt;&lt;br /&gt;&lt;a title="IP2.wmv" href="http://robotics.cs.umass.edu/uploads/Main/IP2.wmv"&gt;IP2.wmv&lt;/a&gt;&lt;/p&gt; &lt;p&gt;donde va explorando una tijera sobre una mesa, sin conocerla de antemano. Siempre es interesante encontrar este tipo de aplicaciones de aprendizaje. En lugar de tener que codificar laboriosamente su conducta, mediante software precargado, el agente puede aprender del entorno, e ir mejorando su interacción. Me parece un campo fascinante para explorar, donde la inteligencia artificial puede dar una gran ayuda en el desarrollo de este tipo de agentes corporizados autónomos.&lt;/p&gt; &lt;p&gt;Leo ahí sobre Autonomous Mobile Manipulation:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Autonomous Mobile Manipulation could be considered the holy grail of robotics: a successful approach to autonomous mobile manipulation has to integrate virtually every aspect of robotics, including mechanism and sensor design, low-level control, motion planning, machine learning, computer vision, and reasoning. Currently, most of the available robotic applications are either capable of performing a very limited set of skills, or can only operate in relatively structured environment. The task of bringing robots to houses and to our daily life remains a challenge. The commercial potential is promising. Truly autonomous robots could dramatically affect health care and planetary exploration. Moreover, those robots could contribute to logistic and military applications, maintain satellites in orbit, and many other tasks currently performed by humans.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hay varios &amp;quot;papers&amp;quot; interesantes para leer en la página del laboratorio y del proyecto, por ejemplo, sobre elastics roadmaps. El más relacionado con este tema es&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Dov Katz, Emily Horrell, Yuandong Yang, Brendan Burns, Thomas Buckley Anna Grishkan, Volodymyr Zhylkovskyy, Oliver Brock and Erik Learned-Miller. &lt;strong&gt;The UMass Mobile Manipulator UMan: An Experimental Platform for Autonomous Mobile Manipulation&lt;/strong&gt;. In &lt;em&gt;IEEE Workshop on Manipulation for Human Environments&lt;/em&gt;, Philadelphia, USA, August 2006. &lt;br /&gt;Download as &lt;a href="http://robotics.cs.umass.edu/uploads/Main/Katz-06.pdf"&gt;pdf&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;¡Excelente trabajo!  &lt;p&gt;Más información, con otros proyectos, en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://umassmag.com/2008/Fall_2008/around-pond/hotbots.html" target="_blank"&gt;Hot Robots&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1658729" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Rob_26002300_243_3B00_tica/default.aspx">Rob&amp;#243;tica</category></item><item><title>Jugando con programas evolutivos</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/16/jugando-con-programas-evolutivos.aspx</link><pubDate>Tue, 16 Dec 2008 08:59:47 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656840</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1656840</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/16/jugando-con-programas-evolutivos.aspx#comments</comments><description>&lt;p&gt;El fin de semanas, estuve escribiendo un ejercicio casi tipo &lt;a href="http://codekata.pragprog.com/2007/01/code_kata_backg.html" target="_blank"&gt;codekata&lt;/a&gt;. Me gusta explorar la idea de programas evolutivos (como agentes con programas incorporados que van evolucionando en ambientes simulados), así que puse manos a la obra, y creé una solución dedicada a experimentar con una ejemplo de prueba de concepto. Está escrito en C#, usando VS 2008, usando el soporte de test de la herramienta. He publicado el código dentro de mi Google code project &lt;a href="http://code.google.com/p/ajcodekatas"&gt;ajcodekatas&lt;/a&gt; en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/EvolveExample" href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/EvolveExample"&gt;http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/EvolveExample&lt;/a&gt;&lt;/p&gt; &lt;p&gt;La solución es &lt;strong&gt;EvolveExample&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/evolveexamplesln.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;(Si no tienen el soporte de test de VS, pueden remover el proyecto &lt;strong&gt;Evolve.Test&lt;/strong&gt;).&lt;/p&gt; &lt;p&gt;Las clases principales residen en el proyecto de librería de clases &lt;strong&gt;Evolve&lt;/strong&gt; :&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/evolveexamplecld.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Animal&lt;/strong&gt; representa&amp;nbsp;un agente. Tiene una lista de&amp;nbsp;Instructions, que son generadas al azar. El animal habita un campo con&amp;nbsp;comida.&amp;nbsp;Su programa tiene instrucciones como Eat, Move East, North, West, South, o Predate (tomar energía/comida de otro animal que esté en la misma celda de la grilla). Cada instrucción tiene un costo: un punto de energía. Eat es una instrucción que toma 10 puntos de energía o menos, tomando comida de la celda actual. Predate toma 100 puntos de energía o menos, restándoselo a otro animal que esté en la misma celda.&lt;/p&gt; &lt;p&gt;Para ver el programa en acción, lanzar el proyecto winform &lt;strong&gt;Evolve.GUI&lt;/strong&gt;, seleccionar la opción &lt;strong&gt;Evolve -&amp;gt; Run&lt;/strong&gt;. Veremos:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/evolveexamplegui.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;El campo es una grilla (en este ejemplo, de 20x20). Cada celda tiene un nivel de comida (verde está llena, negro es vacía). A la derecha, una lista muestra los mejores animales y sus programas. Los animales son rankeados de acuerdo a su nivel de energía al final de cada ronda de simulación. El programa continúa con más simulaciones, usando nuevos campos. En cada nueva simulación, la población es ordenada por energía descendente, y los mejores son incluidos en la nueva simulación,&amp;nbsp;los lugares vacantes son ocupados por mutaciones de esos mejores, y algunos&amp;nbsp;animales son inyectados con programas aleatorios.&lt;/p&gt; &lt;p&gt;Durante una simulación, aparece información sobre el nivel de comida y el animal que mejor se desempaña, al pie de la ventana.&lt;/p&gt; &lt;p&gt;Con las opciones de menú &lt;strong&gt;Food&lt;/strong&gt; y &lt;strong&gt;Population&lt;/strong&gt; podemos establecer el nivel de comida y el número de animales, a usar al comienzo de cada simulación. Estos valores se usan recién la próxima vez que elijamos &lt;strong&gt;Evolve -&amp;gt; Run&lt;/strong&gt;. La opción &lt;strong&gt;Evolve -&amp;gt; Stop&amp;nbsp;&lt;/strong&gt;puede ser usado para terminar una serie de simulaciones.&lt;/p&gt; &lt;h3&gt;Próximos pasos&lt;/h3&gt; &lt;p&gt;Este es un primer ejemplo, una prueba de concepto que sirva de base. Tengo algunas ideas, para explorar en futuras versiones:&lt;/p&gt; &lt;p&gt;- Tener un conjunto de instrucciones más interesantes, con condicionales, y que sea sensible al ambiente. Me gustaría añadir instrucciones como &amp;quot;Si hay comida en tal dirección, ir hacia allí&amp;quot;. En vez de un programa lineal, podría armar un árbol de instrucciones, algo como un programa Lisp.&lt;/p&gt; &lt;p&gt;- Los valores de ejecución (tamaño del campo, nivel de comida, energía inicial para cada animal), deberían poder establecerse por un formulario, y leer y grabarse de archivos XML.&lt;/p&gt; &lt;p&gt;- Serializar los resultados y poblaciones en archivos XML&lt;/p&gt; &lt;p&gt;- Evolución en un cluster. Podría usar AjMessages, AjAgents, o MPI sobre unc luster HPC, para simular evolución en una grilla o cluster de máquinas.&lt;/p&gt; &lt;p&gt;Como es habitual, ¡me divertí escribiendo este código!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez"&gt;http://delicious.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656840" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category></item><item><title>Inteligencia Artificial en Argentina</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/12/inteligencia-artificial-en-argentina.aspx</link><pubDate>Fri, 12 Dec 2008 10:01:52 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656587</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1656587</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/12/inteligencia-artificial-en-argentina.aspx#comments</comments><description>&lt;p&gt;Hace un tiempo, postée sobre la reunión que tuvimos en Buenos Aires, sobre Inteligencia Artificial. Se comentó también en los foros de ADVA (&lt;a href="http://adva.com.ar" target="_blank"&gt;Asociación de Desarrolladores de Videojuegos de Argentina&lt;/a&gt;), pueden ver el thread completo en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://adva.com.ar/foro/index.php?topic=5254.0" href="http://adva.com.ar/foro/index.php?topic=5254.0"&gt;http://adva.com.ar/foro/index.php?topic=5254.0&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(más sobre la reunión en&lt;br /&gt;&lt;a title="Inteligencia Artifical en Buenos Aires" href="http://msmvps.com/blogs/lopez/archive/2008/11/27/inteligencia-artifical-en-buenos-aires.aspx"&gt;Inteligencia Artifical en Buenos Aires&lt;/a&gt;&lt;br /&gt;&lt;a title="Artificial Intelligence meeting in Buenos Aires" href="http://ajlopez.wordpress.com/2008/11/28/artificial-intelligence-meeting-in-buenos-aires/"&gt;Artificial Intelligence meeting in Buenos Aires&lt;/a&gt;&lt;br /&gt;)&lt;/p&gt; &lt;p&gt;Hay muchos puntos interesante, pero me gustaría publicar acá el fragmento de un mensaje de &lt;a title="Hern&amp;aacute;n Moraldo" href="http://hmoraldo.wordpress.com/"&gt;Hernán Moraldo&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Creo que la IA está en este momento en un punto crítico, en diferentes sentidos en el mundo y en Argentina. En el mundo, porque lo que hasta ahora era casi un juguete académico, al menos para el que miraba de afuera y excepto por algunos usos específicos, se convirtió en muy poco tiempo en una disciplina que invade todas las áreas de la tecnología, con usos muy cotidianos (a veces hasta invisibles), como en las cámaras con detección de sonrisas, los buscadores que son lisa y llánamente grandes estructuras de IA, la detección de voz en servicios telefónicos, los captchas, los filtros de spam, las interfaces basadas en gestos o en visión, y un larguísimo etcétera. Y no sólo estos usos cotidianos, por supuesto, ya que en general las más grandes formas de IA están pagas por grandes empresas u organismos de tipo militar por ejemplo.&lt;br /&gt;&lt;br /&gt;En Argentina, porque está empezando a hacerse visible alguna actividad, y porque si se la sabe buscar hay demanda para las aplicaciones útiles de IA, entonces quienes se meten en esto en general llegan a sacarle el jugo. Creo que lo que hace falta es de alguna manera que la gente que viene trabajando en IA, de todos los sectores (privado, académico, amateur, etc) entre en comunicación para que no tenga que estar cada uno en la suya sino que se pueda compartir información, materiales, posibilidades de trabajo, etc. Pienso que aún una muy pequeña comunidad de IA local podría ser muy útil para todos los interesados en el tema acá.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Coincido con el comentario. Otro participante dió un panorama de la actividad de IA en el ámbito académico:  &lt;blockquote&gt; &lt;p&gt;La comunidad local de IA no es pequeña y existe hace rato. Nosotros en la Universidad N. del Sur hacemos Inteligencia Artificial hace mas de 15 años. La Universidad del Comahue y la Universidad de San Luis también tienen grupos de IA, con diversos desarrollos, y nos conocemos todos entre si, tenemos muchos amigos y hemos hecho muchas cosas juntos. En la UN de la Patagonia también se desarrolla en IA. En la Universidad Nacional de San Juan y en la UN de La Pampa también. Ya mencionaron en la reunión a la UNCPBA. Todos con mayor o menor medida hacen algún desarrollo en IA. Todos tenemos contacto entre nosotros y con muchas universidades extranjeras con algunos convenios de cooperación internacional. El CACIC (Congreso Argentino de Ciencias de la Computación), que se hace todos los años en diferentes lugares del país (2009 en Jujuy), tiene hace mas de diez años un Workshop de Agentes y Sistemas Inteligentes (WASI), donde nos encontramos anualmente varios investigadores de éstas y otras universidades. Ocurre lo mismo con las JAIIO, que es menos itinerante que el CACIC, pero en el 2009 se hace en Mar Del Plata. Realizó varias veces un simposio Argentino de IA (ASAI) donde también reunían investigadores locales en IA.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;La comunidad es grande, pero a veces no trasciende en el mundo empresarial.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Coincido con ambos comentarios. Uno de los asistentes a la reunión presencial, ya había comentado la separación que hay entre el mundo académico y la industria local.&amp;nbsp;Nos faltaría un panorama de la industria, de las empresas que necesitan IA, que ya la están usando, o que están creando software con IA incorporada. &lt;p&gt;Pueden ver más información sobre el CACIC en &lt;a href="http://ww.cibsi2007.org/index.html" target="_blank"&gt;Congreso Argentino de Ciencias de la Computación&lt;/a&gt; de este año.  &lt;p&gt;Agregaría también el WICC 2008 (&lt;a href="http://mdk.ing.unlpam.edu.ar/wicc2008/index.php" target="_blank"&gt;X Workshop de Investigadores en Ciencias de la Computación 2008&lt;/a&gt;)  &lt;p&gt;Recuerden que el año que viene (2009) tenemos el  &lt;p&gt;&lt;a title="Congreso de Inteligencia Computacional Aplicada" href="http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx"&gt;Congreso de Inteligencia Computacional Aplicada&lt;/a&gt;  &lt;p&gt;acá en Buenos Aires.  &lt;p&gt;Nos leemos!  &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656587" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>La inteligencia artificial y yo</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/08/la-inteligencia-artificial-y-yo.aspx</link><pubDate>Mon, 08 Dec 2008 15:24:19 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656171</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1656171</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/08/la-inteligencia-artificial-y-yo.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/ai3.jpg" align="left" alt="" /&gt; Hace unas semanas, tuvo lugar una reunión en Buenos Aires, de gente interesada en el tema de Inteligencia Artificial. La idea de la reunión nació de un &amp;quot;twit&amp;quot; de &lt;a href="http://twitter.com/hhm"&gt;@hhm&lt;/a&gt; &lt;img src="http://s3.amazonaws.com/twitter_production/profile_images/42220322/imag0134_bigger.jpg" alt="" /&gt; (&lt;a href="http://hmoraldo.wordpress.com/" target="_blank"&gt;Hernán Moraldo&lt;/a&gt;) . Pueden leer:&lt;/p&gt; &lt;p&gt;&lt;a title="Inteligencia Artifical en Buenos Aires" href="http://msmvps.com/blogs/lopez/archive/2008/11/27/inteligencia-artifical-en-buenos-aires.aspx"&gt;Inteligencia Artifical en Buenos Aires&lt;/a&gt;&lt;br /&gt;&lt;a title="Artificial Intelligence meeting in Buenos Aires" href="http://ajlopez.wordpress.com/2008/11/28/artificial-intelligence-meeting-in-buenos-aires/"&gt;Artificial Intelligence meeting in Buenos Aires&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hasta aparecimos en&lt;/p&gt; &lt;p&gt;&lt;a title="Game AI Roundup Week #48 2008- 8 Stories, 1 Video, 1 Paper, 1 Job &amp;mdash; AiGameDev.com" href="http://aigamedev.com/links/2008-week-48"&gt;Game AI Roundup Week #48 2008-&amp;nbsp;AiGameDev.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Como &amp;quot;outcome&amp;quot; de la reunión, se armó una lista de correo, en Google Groups:&lt;/p&gt; &lt;p&gt;&lt;a title="IA Grupo" href="http://groups.google.com/group/iagrupo?hl=es"&gt;IA Grupo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Pueden ver que hay interesantes discusiones, y participantes de diversos ámbitos: programación de juegos, IA académica, robótica, estudiantes, e interesados como yo. Uno de los &amp;quot;threads&amp;quot; es de &lt;a href="http://groups.google.com/group/iagrupo/browse_thread/thread/857b0b4b0165659b?hl=es" target="_blank"&gt;presentación de cada participante&lt;/a&gt;. Como blogger compulsivo, quisiera escribir sobre mi relación, mis motivaciones para interesarme en la Inteligencia Artificial.&lt;/p&gt; &lt;h3&gt;Inicios&lt;/h3&gt; &lt;p&gt;Como muchos de mi generación, mi primer contacto con algo relacionado con el tema de IA fue a través de la ciencia ficción. El bueno de Asimov, sus robots, sus tres leyes de la robótica, fueron lecturas de mi adolescencia. Cuando comencé a aprender qué eso del software&amp;nbsp;y la computación, vi que realmente existía una amplia rama (con varias variantes) de la ciencia de la computación, bautizada en sus comienzos (confesémoslo, con algo de pomposo optimismo) &lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" target="_blank"&gt;Inteligencia Artificial&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Al ingresar a la Universidad de Buenos Aires, en 1980, comienzo a estudiar más seriamente sobre el tema. Comienzo a conocer los &lt;a href="http://en.wikipedia.org/wiki/Perceptron" target="_blank"&gt;perceptrones&lt;/a&gt; del malogrado &lt;a href="http://en.wikipedia.org/wiki/Frank_Rosenblatt" target="_blank"&gt;Rosenblatt&lt;/a&gt;, la crítica de &lt;a href="http://en.wikipedia.org/wiki/Marvin_Minsky" target="_blank"&gt;Minsky&lt;/a&gt; y &lt;a href="http://en.wikipedia.org/wiki/Seymour_Papert" target="_blank"&gt;Papert&lt;/a&gt;, el auge de los sistemas expertos (recuerdo &lt;a href="http://en.wikipedia.org/wiki/MYCIN" target="_blank"&gt;Mycin&lt;/a&gt;, y el trabajo de &lt;a href="http://en.wikipedia.org/wiki/Edward_Feigenbaum" target="_blank"&gt;Feingenbaum&lt;/a&gt;), los lenguajes que se pueden automodificar, como &lt;a href="http://en.wikipedia.org/wiki/Lisp_programming_language" target="_blank"&gt;Lisp&lt;/a&gt; y &lt;a href="http://en.wikipedia.org/wiki/Prolog" target="_blank"&gt;Prolog&lt;/a&gt;&amp;nbsp;(recuerdo algún artículo seminal del Scientific American, y cómo me impresionó que ambos lenguajes tuvieran dialectos diferentes). Me impactó profundamente el trabajo de &lt;a href="http://en.wikipedia.org/wiki/Douglas_Lenat" target="_blank"&gt;Douglas Lenat&lt;/a&gt;, con su &lt;a href="http://web.archive.org/web/20050122014820/web.media.mit.edu/~haase/thesis/node53.html" target="_blank"&gt;AM&lt;/a&gt; y luego &lt;a href="http://en.wikipedia.org/wiki/Eurisko" target="_blank"&gt;Eurisko&lt;/a&gt;: me parece, aún hoy, el programa más logrado. Lástima que Lenat abandonara ese trabajo y se dedicara a su proyecto &lt;a href="http://en.wikipedia.org/wiki/Cyc" target="_blank"&gt;Cyc&lt;/a&gt;. Ya varios de esos trabajos parecen lejanos o anticuados. Igual, pienso que es interesante estudiar la &lt;a href="http://en.wikipedia.org/wiki/History_of_artificial_intelligence" target="_blank"&gt;historia de la IA&lt;/a&gt;, porque enseña los problemas que se encontraron, los triunfos y fracasos, especialmente estos últimos,&amp;nbsp; que dieron lugar al &lt;a href="http://en.wikipedia.org/wiki/AI_Winter" target="_blank"&gt;invierno de la IA&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para los que no conocieron Eurisko, recomendaría:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aliciapatterson.org/APF0704/Johnson/Johnson.html" target="_blank"&gt;Eurisko, The Computer With A Mind Of Its Own&lt;/a&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/20050122170922/http://web.media.mit.edu/~haase/thesis/" target="_blank"&gt;Invention and Exploration in Discovery&lt;/a&gt;&amp;nbsp; una reimplementación llamada Cyrano de las ideas de Eurisko&lt;/p&gt; &lt;p&gt;Quisiera recordar acá las excelentes lecciones del Ing. Guido Vasallo, que me guiaron en nuevos lenguajes y formas de programar, y al recientemente desaparecido Ing. Carranza, que siempre vestido de negro, y fumando en los descansos, nos enseñaba algunos temas de Inteligencia Artificial.&lt;/p&gt; &lt;p&gt;En aquellos años, armaba sistemas expertos de juguete, y algún intérprete Lisp. Sería largo de enumerar lo que luego vino, pero en resumen: siempre traté de agregar algo relacionado con Inteligencia Artificial, a mi trabajo de todos los días.&lt;/p&gt; &lt;p&gt;También en la UBA, conocí al juego milenario del go. Desde entonces, me interesó como ejemplo a estudiar, para programar IA que juegue aceptablemente.&lt;/p&gt; &lt;p&gt;Pasemos directamente a estos últimos años. &lt;/p&gt; &lt;h3&gt;Enlaces, recursos y charlas&lt;/h3&gt; &lt;p&gt;A principios de siglo, comencé a investigar de nuevo sobre Computer Go, e Inteligencia Artificial. En mi sitio, he ido coleccionando los enlaces que me interesaron, pueden visitar:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.ajlopez.com/ia/" href="http://www.ajlopez.com/ia/"&gt;http://www.ajlopez.com/ia/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Luego, me convertí a Delicious, mis nuevos enlaces en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://delicious.com/ajlopez/artificialintelligence" href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/artificiallife"&gt;http://delicious.com/ajlopez/artificiallife&lt;/a&gt; &lt;/p&gt; &lt;p&gt;En estos años, he estado dictando algunas charlas sobre IA, en el Microsoft User Group, el Club de Programadores y en algún&amp;nbsp;TechNight de Microsoft, recuerdo:&lt;/p&gt; &lt;p&gt;&lt;a title="Material de la Jornada de Introducci&amp;oacute;n a la Inteligencia Artificial" href="http://www.ajlopez.net/PaginaMuestra.php?Id=17"&gt;Material de la Jornada de Introducción a la Inteligencia Artificial&lt;/a&gt;&amp;nbsp;(MUG 2004)&lt;br /&gt;&lt;a title="Material del Seminario Introducci&amp;oacute;n a la Inteligencia Artificial y .NET" href="http://www.ajlopez.net/PaginaMuestra.php?Id=74"&gt;Material del Seminario Introducción a la Inteligencia Artificial y .NET&lt;/a&gt;&amp;nbsp;(Microsoft Argentina 2005)&lt;br /&gt;&lt;a title="Material del Seminario Introducci&amp;oacute;n a la Inteligencia Artificial" href="http://www.ajlopez.net/PaginaMuestra.php?Id=84"&gt;Material del Seminario Introducción a la Inteligencia Artificial&lt;/a&gt;&amp;nbsp;(Club de Programadores 2005)&lt;/p&gt; &lt;p&gt;Este año (2008) escribí sobre los temas que veo interesantes en IA:&lt;/p&gt; &lt;p&gt;&lt;a title="Temas Interesantes de Desarrollo de Software, Parte 1- Inteligencia Artificial" href="http://msmvps.com/blogs/lopez/archive/2008/04/05/temas-interesantes-de-desarrollo-de-software-parte-1-inteligencia-artificial.aspx"&gt;Temas Interesantes de Desarrollo de Software, Parte 1- Inteligencia Artificial&lt;/a&gt;&lt;/p&gt; &lt;p&gt;donde encontraran enlaces sobre algoritmos genéticos, aprendizaje automático, planeación, vida artificial, juegos, lenguajes, visión por computadora, y robótica.&lt;/p&gt; &lt;h3&gt;Computer Go&lt;/h3&gt; &lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/ajgocolorssm.png" align="left" alt="" /&gt; Dí una charla sobre &lt;a href="http://en.wikipedia.org/wiki/Computer_Go" target="_blank"&gt;Computer Go&lt;/a&gt; en el Congreso Argentino de Go de 2007 y de nuevo en el Congreso de este año 2008. Escribí:&lt;/p&gt; &lt;p&gt;&lt;a title="Computer Go- El gran problema de AI" href="http://msmvps.com/blogs/lopez/archive/2007/01/15/computer-go-el-gran-problema-de-ai.aspx"&gt;Computer Go- El gran problema de AI&lt;/a&gt;&lt;br /&gt;&lt;a title="Computer Go en el Segundo Congreso Argentino de Go" href="http://msmvps.com/blogs/lopez/archive/2007/03/28/computer-go-en-el-segundo-congreso-argentino-de-go.aspx"&gt;Computer Go en el Segundo Congreso Argentino de Go&lt;/a&gt;&lt;br /&gt;&lt;a title="AjGo- hacia un programa que juegue al go" href="http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx"&gt;AjGo- hacia un programa que juegue al go&lt;/a&gt;&lt;br /&gt;&lt;a title="Computer Go y el programa AjGo" href="http://ajlopez.zoomblog.com/archivo/2008/03/31/computer-Go-y-el-programa-Ajgo.html"&gt;Computer Go y el programa AjGo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;En ese tiempo, fuí desarrollando mi programa de código abierto &lt;a href="http://www.codeplex.com/ajgo" target="_blank"&gt;AjGo&lt;/a&gt;, donde estoy explorando algunas ideas sobre Computer Go.&lt;/p&gt; &lt;p&gt;Más enlaces sobre el tema en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/computergo"&gt;http://delicious.com/ajlopez/computergo&lt;/a&gt;&lt;br /&gt;&lt;a title="Computer Go" href="http://www.ajlopez.net/Tema.php?Id=64"&gt;Computer Go en ajlopez.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Desde hace años participo (modo lectura) en la gran lista de computer go:&lt;/p&gt; &lt;p&gt;&lt;a title="http://computer-go.org/mailman/listinfo/computer-go" href="http://computer-go.org/mailman/listinfo/computer-go"&gt;http://computer-go.org/mailman/listinfo/computer-go&lt;/a&gt;&lt;/p&gt; &lt;p&gt;El grupo líder en el tema de IA en juegos de tablero y otros:&lt;/p&gt; &lt;p&gt;&lt;a title="U of A GAMES Group Home Page" href="http://www.cs.ualberta.ca/~games/"&gt;University of Alberta GAMES Group Home Page&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Grid Computing y HPC&lt;/h3&gt; &lt;p&gt;El año pasado, 2007, comencé a programar algunos ejemplos relacionados con Grid Computing, y ahora en el 2008, comencé a trabajar con&amp;nbsp;High Performance Computing.&amp;nbsp;Notablemente, el programa campeón mundial de Computer Go (y otros) están corriendo sobre un cluster de computadoras. Espero poder probar el &lt;a href="http://www.smart-games.com/manyfaces.html" target="_blank"&gt;ManyFacesOfGo&lt;/a&gt; de &lt;a href="http://www.smart-games.com/" target="_blank"&gt;David Fotland&lt;/a&gt;, en un Windows HPC Server 2008 en cualquier momento. Otra idea a explorar es algorimos genéticos distribuidos en grilla o en cluster. &lt;/p&gt; &lt;p&gt;Para usar varias máquinas y tener más poder de cálculo, estoy explorando el camino de usar mi proyecto de código abierto &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjMessages/default.aspx" target="_blank"&gt;AjMessages&lt;/a&gt;&amp;nbsp;o el &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjAgents/default.aspx" target="_blank"&gt;AjAgent&lt;/a&gt;. Por ahora, sirva como introducción:&lt;/p&gt; &lt;p&gt;&lt;a title="AjMessages- hacia un procesador de mensajes" href="http://msmvps.com/blogs/lopez/archive/2007/10/22/ajmessages-hacia-un-procesador-de-mensajes.aspx"&gt;AjMessages- hacia un procesador de mensajes&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Microsoft Robotics&lt;/h3&gt; &lt;p&gt;Desde el 2007, estoy trabajando con Microsoft Robotics, pero apenas he podido relacionarlo con IA. Algún intento en:&lt;/p&gt; &lt;p&gt;&lt;a title="Genetic Algorithms with AjAgents and Concurrency and Coordination Runtime (CCR)" href="http://ajlopez.wordpress.com/2008/04/10/genetic-algorithms-with-ajagents-and-concurrency-and-coordination-runtime-ccr/"&gt;Genetic Algorithms with AjAgents and Concurrency and Coordination Runtime (CCR)&lt;/a&gt;&lt;br /&gt;&lt;a title="Algoritmos Gen&amp;eacute;ticos con AjAgents y Concurrency and Coordination Runtime (CCR)" href="http://msmvps.com/blogs/lopez/archive/2008/04/13/algoritmos-gen-233-ticos-con-ajagents-y-concurrency-and-coordination-runtime-ccr.aspx"&gt;Algoritmos Genéticos con AjAgents y Concurrency and Coordination Runtime (CCR)&lt;/a&gt;&lt;br /&gt;&lt;a title="Lisp-like interpreter using DSS and VPL" href="http://ajlopez.wordpress.com/2008/06/09/lisp-like-interpreter-using-dss-and-vpl/"&gt;Lisp-like interpreter using DSS and VPL&lt;/a&gt;&lt;br /&gt;&lt;a title="Int&amp;eacute;rprete tipo Lisp usando DSS y VPL" href="http://msmvps.com/blogs/lopez/archive/2008/06/11/int-233-rprete-tipo-lisp-usando-dss-y-vpl.aspx"&gt;Intérprete tipo Lisp usando DSS y VPL&lt;/a&gt;&lt;br /&gt;&lt;a title="VPL" href="http://ajlopez.wordpress.com/2008/06/15/distributed-agents-using-dssvpl/"&gt;Distributed agents using DSS-VPL&lt;/a&gt;&lt;br /&gt;&lt;a title="VPL" href="http://msmvps.com/blogs/lopez/archive/2008/06/20/agentes-distribuidos-usando-dss-vpl.aspx"&gt;Agentes distribuidos usando DSS-VPL&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Intérpretes&lt;/h3&gt; &lt;p&gt;Estoy desarrollando dos intérpretes que me interesan: &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjLisp/default.aspx" target="_blank"&gt;AjLisp&lt;/a&gt;, y &lt;a href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjProlog-0.3" target="_blank"&gt;AjProlog&lt;/a&gt;&amp;nbsp;(versión anterior en &lt;a href="http://code.google.com/p/ajcodekatas/source/browse/#svn/archive/AjProlog-0.2" target="_blank"&gt;AjProlog-0.2&lt;/a&gt;). Siempre me gustaron esos dos lenguajes, veremos si puedo aplicarlos para algún programa auto-modificable.&lt;/p&gt; &lt;p&gt;&lt;a title="AjLisp- a Lisp interpreter in .NET" href="http://ajlopez.wordpress.com/2008/07/30/ajlisp-a-lisp-interpreter-in-net/"&gt;AjLisp- a Lisp interpreter in .NET&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Generación de Código con IA&lt;/h3&gt; &lt;p&gt;Espero poder incorporar a mi proyecto principal, &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx" target="_blank"&gt;AjGenesis&lt;/a&gt;, algo de IA. Pienso que un generador de código bien se puede asimilar a un sistema experto especial: debería, partiendo de un modelo incompleto, completarlo, tomar decisiones de diseño, inferir algunas partes del sistema, y generarlo.&lt;/p&gt; &lt;h3&gt;IA, ciencia y filosofía&lt;/h3&gt; &lt;p&gt;Desde los 90, me vengo topando con el problema mente-cerebro, y lo veo relacionado con IA. Críticas como las de Penrose, Hilary Putnam, y hasta Mario Bunge, me parecen interesantes, pero no las veo contundentes. Tengo pendiente postear sobre el tema, en mi blog personal no técnico, más filosófico. Apenas un preludio:&lt;/p&gt; &lt;p&gt;&lt;a title="Inteligencia artificial, en la ca&amp;iacute;da del conductismo" href="http://ajlopez.zoomblog.com/archivo/2008/11/21/inteligencia-artificial-en-la-caida-de.html"&gt;Inteligencia artificial, en la caída del conductismo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Bueno, espero que esto sirva como un pantallazo de mis intereses relacionados con IA, que está sobrevolando algunos proyectos míos, aunque no sea evidente aún.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656171" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Inteligencia Artificial en Buenos Aires</title><link>http://msmvps.com/blogs/lopez/archive/2008/11/26/inteligencia-artifical-en-buenos-aires.aspx</link><pubDate>Wed, 26 Nov 2008 22:18:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655207</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1655207</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/11/26/inteligencia-artifical-en-buenos-aires.aspx#comments</comments><description>&lt;p&gt;&lt;img align="left" src="http://www.ajlopez.com/images/articles/ai2.jpg" style="margin:0px 20px 20px 0px;" alt="" /&gt; Finalmente, ayer mi&amp;eacute;rcoles 26 de Noviembre, se realiz&amp;oacute; la primera reuni&amp;oacute;n de Inteligencia Artificial en Buenos Aires. La idea era conocernos, entre quienes tenemos inquietudes sobre el tema, para ir formando alg&amp;uacute;n grupo de inter&amp;eacute;s, coordinar actividades, o simplemente intercambiar opiniones sobre el tema.&lt;/p&gt;
&lt;p&gt;Asitieron a esta reuni&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.hmoraldo.wordpress.com/"&gt;Hern&amp;aacute;n Moraldo&lt;/a&gt;, que hace 10 a&amp;ntilde;os comenz&amp;oacute; programando juegos, ahora est&amp;aacute; dedicado m&amp;aacute;s a la matem&amp;aacute;tica, trabaj&amp;oacute; con visi&amp;oacute;n artificial, y ahora trabaja para &lt;a target="_blank" href="http://www.wolfram.com/"&gt;Wolfram Research&lt;/a&gt;, la empresa desarrolladora de&amp;nbsp; &lt;a target="_blank" href="http://www.wolfram.com/products/mathematica/index.html"&gt;Mathematica&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Marcos Leguizam&amp;oacute;n, programador, interesado en electr&amp;oacute;nica, miembro de la lista de Robots Desarrolladores, desarrollando juegos para Sabarasa.&lt;/p&gt;
&lt;p&gt;Javier Otaegui, quien es uno de los fundadores de &lt;a target="_blank" href="http://www.sabarasa.com/"&gt;Sabarasa&lt;/a&gt;, empresa dedicada a la creaci&amp;oacute;n de juegos, se present&amp;oacute; bajo otros &amp;quot;dos sombreros&amp;quot;: fundador de Think an App, un nuevo emprendimiento que resuelve problemas dif&amp;iacute;cil, utilizando inteligencia artificial (como algoritmos gen&amp;eacute;ticos, en una aplicaci&amp;oacute;n para una petrolera), y con el sombre de miembro del &lt;a target="_blank" href="http://www.adva.com.ar/"&gt;ADVA&lt;/a&gt;, Asociaci&amp;oacute;n de Desarrolladores de Videojuegos de Argentina, que el a&amp;ntilde;o que viene que comenzar a aceptar papers para su congreso anual, incluyendo el tema de inteligencia artificial para juegos (ya hab&amp;iacute;a publicado por ac&amp;aacute; algo sobre ADVA en &lt;a href="http://msmvps.com/blogs/lopez/archive/2008/08/28/exposici-243-n-de-videojuegos-argentina-eva-2008.aspx" title="Exposici&amp;oacute;n de Videojuegos Argentina- EVA 2008"&gt;Exposici&amp;oacute;n de Videojuegos Argentina- EVA 2008&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Manuel Ar&amp;aacute;oz, estudiante del &lt;a target="_blank" href="http://www.itba.edu.ar/"&gt;ITBA&lt;/a&gt;, Instituto tecnol&amp;oacute;gico Buenos Aires, interesado en inteligencia artificial, pero especialmente en las matem&amp;aacute;ticas.&lt;/p&gt;
&lt;p&gt;N&amp;eacute;stor Balich, que conoci&amp;oacute; la reuni&amp;oacute;n por la lista de Robots Desarrolladores, interesado desde hace a&amp;ntilde;os en Inteligencia Artificial, profesor e investigador en rob&amp;oacute;tica, que nos present&amp;oacute; su sitio dedicado a Rob&amp;oacute;tica e Inteligencia Artificial &lt;a href="http://www.robotia.com.ar/" title="http://www.robotia.com.ar/"&gt;http://www.robotia.com.ar/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La reuni&amp;oacute;n comenz&amp;oacute; unos minutos despu&amp;eacute;s de las 18:30, porque el bar donde &amp;iacute;bamos a reunirnos estaba cerrado. Nos fuimos a un local a una cuadra, de la cl&amp;aacute;sica La Continental.&lt;/p&gt;
&lt;p&gt;No anot&amp;eacute; la hora de finalizaci&amp;oacute;n, pero debi&amp;oacute; ser cerca de las 21hs.&lt;/p&gt;
&lt;p&gt;As&amp;iacute; que se imaginar&amp;aacute;n la cantidad de temas, entusiasmo, intercambio de ideas que hubo. Se habl&amp;oacute; desde la escasez de programadores en Inteligencia Artificial en Argentina, el &amp;quot;gap&amp;quot; entre lo acad&amp;eacute;mico&amp;nbsp;y lo pr&amp;aacute;ctico, los distintos apoyos para emprendedores, con sus altas y bajas, los lenguajes que se usan, empresas que necesitan IA, IA en el mundo, IA y rob&amp;oacute;tica, el &lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx"&gt;congreso de Inteligencia Computacional Aplicada&lt;/a&gt; del a&amp;ntilde;o que viene en Buenos Aires, IA en juegos (yo mencion&amp;eacute; varios puntos de IA en Computer Go), la diferencia entre producir &amp;quot;papers&amp;quot; y trabajar en IA, etc. Se habl&amp;oacute; de algoritmos en juegos, de IA y otros que no, como path finder, y m&amp;aacute;quinas de estados. Se coment&amp;oacute; el uso de IA en la implementaci&amp;oacute;n de &lt;a target="_blank" href="http://www.popego.com"&gt;Popego&lt;/a&gt;, al parecer, programado por la gente de &lt;a target="_blank" href="http://www.zauber.com.ar/en/home/"&gt;Zauber&lt;/a&gt;. Se comentaron trabajos en IA en el pa&amp;iacute;s, como en rob&amp;oacute;tica, futbol rob&amp;oacute;tico, desarrollos con Prolog (en la Universidad del Comahue), actividad de IA en universidades (como el trabajo de Amandi en la Universidad del Centro). Tambi&amp;eacute;n se comentaron nuevas aplicaciones de IA como los de la empresa &lt;a target="_blank" href="http://www.evolution.com/"&gt;Evolution Robotics&lt;/a&gt;, uno de cuyos vicepresidentes es argentino. Pasamos por temas mas pol&amp;iacute;ticos, como la falta de relaci&amp;oacute;n entre la industria, el gobierno y lo acad&amp;eacute;mico, o sobre el pr&amp;oacute;ximo &amp;quot;polo tecnol&amp;oacute;gico&amp;quot; de Buenos Aires, el llamado Centro Metropolitano de Tecnolog&amp;iacute;a, a situarse en Parque Patricios.&lt;/p&gt;
&lt;p&gt;De mi parte, mostr&amp;eacute; algo de &lt;a target="_blank" href="http://www.youtube.com/watch?v=Qe0o-IvHOa0"&gt;Computer Go en HPC Cluster&lt;/a&gt;, alguna funcionalidad de Microsoft Robotics, y el gran &lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2008/04/24/que-lindo-el-guaguau-bigdog-de-boston-dynamics.aspx"&gt;Big Dog de Boston Dynamics&lt;/a&gt;&amp;nbsp;(No mencion&amp;eacute; al &lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2007/03/28/computer-go-en-el-segundo-congreso-argentino-de-go.aspx"&gt;AjGo&lt;/a&gt; y al &lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/tags/.NET/AjLisp/default.aspx"&gt;AjLisp&lt;/a&gt;, aprovecho ahora para enlazarlos).&lt;/p&gt;
&lt;p&gt;Como conclusi&amp;oacute;n, vemos que hay puntos en com&amp;uacute;n, ganas de hacer cosas, as&amp;iacute; que como &amp;quot;outcome&amp;quot; en concreto, armamos una lista en Google Groups, para seguir coordinando el grupo y para intercambiar ideas sobre Inteligencia Artificial. Los interesados en el tema, son bienvenidos a&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://groups.google.com/group/iagrupo?hl=es"&gt;IA Grupo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como &amp;quot;outcome&amp;quot; personal, quer&amp;iacute;a escribir este post, como minuta informal de la reuni&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655207" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Reunión de Inteligencia Artificial en Buenos Aires</title><link>http://msmvps.com/blogs/lopez/archive/2008/11/20/reuni-243-n-de-inteligencia-artificial-en-buenos-aires.aspx</link><pubDate>Thu, 20 Nov 2008 10:19:53 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1654657</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1654657</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/11/20/reuni-243-n-de-inteligencia-artificial-en-buenos-aires.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/ai.png" align="left" alt="" /&gt; Una de las ramas más interesantes de la computación es la Inteligencia Artificial. Desde hace décadas, se ha ido tratando de obtener software que realice actividades que implican inteligencia. Han habido avances y retrocesos, &amp;quot;hypes&amp;quot; en el mercado y fracasos, caminos distintos como el manejo de símbolos, lógica y sistemas expertos, y por otro lado, redes neuronales, lógica difusa. Se ha llegado a un programa que le gana al campeón mundial de ajedrez. Ha aparecido la rama de la vida artificial, la creación de agentes autónomos, con cuerpo e interacción con el ambiente. La robótica también ha ido acompañando a la IA. Algoritmos genéticos, computación evolutiva, son más ramas que se han sumado.&lt;/p&gt; &lt;p&gt;Con la llegada de la llamada Web 2.0, con nuevas ideas y tecnologías como cloud computing, computación en grilla distribuida, web semántica, juegos en red, creo que hay una nueva oportunidad para la IA: integrarse en nuevos tipos de aplicaciones.&lt;/p&gt; &lt;p&gt;Hay siempre actividad por estos lares, en mi pais, Argentina,&amp;nbsp;de gente interesada en Inteligencia Artificial, tando individuos, como grupos de interés en universidades y grupos de usuarios. &lt;/p&gt; &lt;p&gt;&lt;a href="http://hmoraldo.wordpress.com/" target="_blank"&gt;Hernán Moraldo&lt;/a&gt; tuvo una gran idea: convocar a los interesados en Inteligencia Artificial, por ahora acá en Buenos Aires. Hernán y yo nos leemos en &lt;a href="http://www.twitter.com" target="_blank"&gt;Twitter&lt;/a&gt;, y sugerí una fecha y lugar. Todo quedó arreglado. &lt;/p&gt; &lt;p&gt;Así que hay una reunión el próximo miércoles 26 de Noviembre, a las 18:30hs. En un lugar mítico: el bar de San José y Rivadavia, en el barrio de Congreso, donde se reunía la gente de ciencia ficción&amp;nbsp;(recuerdo haber asistido ahí por el 88) y luego los interesados en hacking (en los 90). Están invitados todos los interesados en Inteligencia Artificial. Voy a invitar a gente de la organización del congreso de Inteligencia Artificial del año que viene:&lt;/p&gt; &lt;p&gt;&lt;a title="Congreso de Inteligencia Computacional Aplicada" href="http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx"&gt;Congreso de Inteligencia Computacional Aplicada&lt;/a&gt;&lt;/p&gt; &lt;p&gt;en la Universidad de Palermo.&lt;/p&gt; &lt;p&gt;Yo arreglé todo para asistir ese día (no tengo curso a esa hora). Todos los interesados en el tema, están invitados. Espero que este sea el inicio de algo interesante. Hoy, en un mundo cada vez más conectado, desde acá, Argentina, podemos participar más fácilmente de lo que está pasando en el mundo. Y hasta aportar y crear.&lt;/p&gt; &lt;p&gt;Algunas de las ramas a explorar en IA en:&lt;/p&gt; &lt;p&gt;&lt;a title="Temas Interesantes de Desarrollo de Software, Parte 1- Inteligencia Artificial" href="http://msmvps.com/blogs/lopez/archive/2008/04/05/temas-interesantes-de-desarrollo-de-software-parte-1-inteligencia-artificial.aspx"&gt;Temas Interesantes de Desarrollo de Software, Parte 1- Inteligencia Artificial&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1654657" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Congreso de Inteligencia Computacional Aplicada</title><link>http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx</link><pubDate>Thu, 11 Sep 2008 12:18:38 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1647465</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1647465</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/09/11/congreso-de-inteligencia-computacional-aplicada.aspx#comments</comments><description>&lt;p&gt;Hay un activo grupo de Inteligencia Artificial en la Universidad de Palermo, aquí en Buenos Aires, Argentina. Estan organizando un congreso internacional de Inteligencia Computacional Aplicada para el próximo año, 2009:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.palermo.edu/ingenieria/cica.html" href="http://www.palermo.edu/ingenieria/cica.html"&gt;http://www.palermo.edu/ingenieria/cica.html&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.palermo.edu/ingenieria/_imagenes/tops/top-congreso-cica1.jpg" alt="" /&gt; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Congreso de Inteligencia Computacional Aplicada&amp;nbsp;(CICA)&lt;/strong&gt;&lt;strong&gt; &lt;img height="14" src="http://www.palermo.edu/_imagenes/icono_flechita.gif" width="15" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img height="8" src="http://www.palermo.edu/_imagenes/pixel_transparente.gif" width="8" alt="" /&gt;&lt;br /&gt;&lt;img height="8" src="http://www.palermo.edu/_imagenes/pixel_transparente.gif" width="8" alt="" /&gt;&lt;br /&gt;&lt;img height="8" src="http://www.palermo.edu/_imagenes/pixel_transparente.gif" width="8" alt="" /&gt; &lt;p&gt;El 23 y 24 de julio de 2009 se llevará a cabo el Congreso de Inteligencia Computacional Aplicada (CICA), en la ciudad de Buenos Aires.&lt;br /&gt;El Congreso, tiene por finalidad analizar el estado del arte de esta disciplina, desde un punto de vista de sus aplicaciones prácticas, en el país y en el mundo; generar un&amp;nbsp; debate entre pares nacionales e internacionales sobre las problemáticas centrales de esta materia y promover la integración de profesionales, investigadores y empresas e industrias, en un marco en el que prevalecerán las innovaciones tecnológicas encaminadas a buscar el beneficio de la comunidad.&lt;br /&gt;&lt;strong&gt;Contacto:&lt;/strong&gt;&lt;br /&gt;Tel:&amp;nbsp;5199-4520&lt;br /&gt;E-mail: &lt;a href="mailto:cica@palermo.edu"&gt;cica@palermo.edu&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Yo ya tengo mis años, y lo que se llamaba Inteligencia Artificial, ha ido abriéndose en varias ramas. He asistido al auge y caida de los sistemas expertos en los 70 y 80, al relegamiento de los perceptrones de Rossenblat, ante el &amp;quot;ataque&amp;quot; del libro de Minsky y Papert, el resurgimiento y auge de las redes neuronales, lógica difusa&amp;nbsp;y algoritmos genéticos, y a la vida artificial. Ahora, se llama &lt;a href="http://en.wikipedia.org/wiki/Computational_intelligence" target="_blank"&gt;Inteligencia Computacional&lt;/a&gt;&amp;nbsp;a un grupo de disciplinas que se separan de la &amp;quot;vieja inteligencia artificial&amp;quot; (GOFAI &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/GOFAI" target="_blank"&gt;Good Old-Fashioned Artificial Intelligence&lt;/a&gt;&amp;quot;). &lt;p&gt;Según la IEEE (según &lt;a href="http://en.wikipedia.org/wiki/Computational_intelligence" target="_blank"&gt;el artículo de la Wikipedia&lt;/a&gt;), las ramas de la inteligencia computacional son &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Neural_network"&gt;Neural networks&lt;/a&gt; &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Fuzzy_system"&gt;Fuzzy systems&lt;/a&gt; &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Evolutionary_computation"&gt;Evolutionary computation&lt;/a&gt;, incluyendo: &lt;a href="http://en.wikipedia.org/wiki/Genetic_algorithm"&gt;genetic algorithms&lt;/a&gt;&amp;nbsp;y &lt;a href="http://en.wikipedia.org/wiki/Genetic_programming"&gt;genetic programming&lt;/a&gt; &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Swarm_intelligence"&gt;Swarm intelligence&lt;/a&gt;, incluyendo &lt;a href="http://en.wikipedia.org/wiki/Particle_swarm_optimization"&gt;particle swarm optimization&lt;/a&gt;&lt;/li&gt; &lt;p&gt;Estoy leyendo el libro &lt;a href="http://www.computelligence.org/issue/CICI/CICI.html" target="_blank"&gt;Computational Intelligence: Concepts to Implementations&lt;/a&gt;, transcribo el primer párrafo del prefacio:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Several computational analytic tools have matured in the last 10 to 15 years that facilitate solving problems that were previously difficult or impossible to solve. These new analytical tools, known collectevily as computational intelligence tools, include artificial neural networks, fuzzy systems, and evolutionary computation. They have recently been combined among themselves as well as with more traditional approaches, such as statistical analysis, to solve extremely challenging problems...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Volviendo al congreso, en la página leo el &amp;quot;call for papers&amp;quot;:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/papers.html" href="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/papers.html"&gt;http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/papers.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Vean los comités:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/comite_organizador.html" href="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/comite_organizador.html"&gt;http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/comite_organizador.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(todos nenes de pecho... ;-)&lt;/p&gt; &lt;p&gt;Y los keynote speakers:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/invitados_especiales.html" href="http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/invitados_especiales.html"&gt;http://www.palermo.edu/ingenieria/Congreso_inteligencia_computacional/invitados_especiales.html&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Robert C. Berwick Ph.D.&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Professor of Computational Linguistics&lt;br /&gt;&amp;nbsp;&amp;nbsp;Department of Electrical Engineering and Computer Science&lt;br /&gt;&amp;nbsp;&amp;nbsp;Massachusetts Institute of Technology – USA&lt;br /&gt;&lt;strong&gt;•&amp;nbsp;Stan Franklin Ph.D.&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;W. Harry Feinstone Interdisciplinary Research Professor &lt;br /&gt;&amp;nbsp;&amp;nbsp;Cognitive Computing Research Group &lt;br /&gt;&amp;nbsp;&amp;nbsp;Department of Computer Science &lt;br /&gt;&amp;nbsp;&amp;nbsp;Institute for Intelligent Systems &lt;br /&gt;&amp;nbsp;&amp;nbsp;The University of Memphis - USA&lt;br /&gt;&lt;strong&gt;•&amp;nbsp;Piero Bonissone Ph.D.&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Industrial Artificial Intelligence Lab&lt;br /&gt;&amp;nbsp;&amp;nbsp;Computing and Decision Sciences Technology area&lt;br /&gt;&amp;nbsp; General Electric Global Research – USA&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Estoy muy interesado en el trabajo de &lt;a href="http://www.msci.memphis.edu/~franklin/" target="_blank"&gt;Stan Franklin&lt;/a&gt;, y sus ideas y trabajos sobre inteligencia con un cuerpo, agentes autónomos que interaccionan con el ambiente, es un tema que tiene desde aplicaciones prácticas hasta aristas de filosofía, como el problema mente-cuerpo, y el problema de a conciencia. Pueden tomar un &amp;quot;paper&amp;quot; de hace diez años, para comenzar a entender a Franklin:&lt;/p&gt; &lt;p&gt;&lt;a href="http://csrg.cs.memphis.edu/csrg/assets/papers/Autonomous%20Agents%20as%20Embodied%20AI.htm" target="_blank"&gt;Autonomous Agents as Embodied AI&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Artículos más recientes del bueno de Franklin en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://ccrg.cs.memphis.edu/papers.html" href="http://ccrg.cs.memphis.edu/papers.html"&gt;http://ccrg.cs.memphis.edu/papers.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://web.mit.edu/bcs/people/berwick.shtml" target="_blank"&gt;Robert Berwick&lt;/a&gt;, del MIT, es un referente en el tema de linguística computacional. Yo creo, que desde Chomsky, se ha puesto demasiado énfasis en el tema lenguaje, que debería ser estudiado como un epifenómeno de algo más nuclear, más profundo, de la mente, como es el tema de la representación, la formación de conceptos, y otras operaciones mentales.&lt;/p&gt; &lt;p&gt;No conocía a &lt;a href="http://www.linkedin.com/in/pierobonissone" target="_blank"&gt;Piero Bonissone&lt;/a&gt;, que está, al parecer, interesado en todo lo que sea fuzzy systems. Ahora está en General Electric, desarrollando algoritmos para aplicar en salud, logística y aplicaciones financieras.&lt;/p&gt; &lt;p&gt;Más sobre Inteligencia Artificial en general en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://delicious.com/ajlopez/artificialintelligence" href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Gracias a &lt;a href="http://blogs.southworks.net/pcababie/" target="_blank"&gt;Pablo Cababie&lt;/a&gt;, por avisarme de este evento, y por el esfuerzo que él y su grupo de la Universidad de Palermo estan poniendo para organizar este congreso, excelente iniciativa, que pone visible a la Argentina. Si bien el mundo es plano, es bueno tener visitantes del exterior, mostrar lo que se está haciendo en mi pais, y tener contacto directo con gente interesada en estos temas.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1647465" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category></item><item><title>AjLisp: un intérprete Lisp en .NET</title><link>http://msmvps.com/blogs/lopez/archive/2008/07/31/ajlisp-un-int-233-rprete-lisp-en-net.aspx</link><pubDate>Thu, 31 Jul 2008 13:30:41 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1642818</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1642818</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/07/31/ajlisp-un-int-233-rprete-lisp-en-net.aspx#comments</comments><description>&lt;p&gt;Soy un entusiasta de escribir intérpretes, especialmente del tipo Lisp. Mi primer intérprete Lisp fue escrito al principio de los 80, usando el lenguaje assembler de un Intel 808x. Era un trabajo muy &amp;quot;geek&amp;quot;. Una de las características más &amp;quot;tricky&amp;quot; de implementar es un recolector de basura (garbage collector). Por suerte, desde mediados de los 90 tenemos Java y su&amp;nbsp; librería de clases como una tecnología ampliamente disponible con un garbage collector decente. En este siglo, .NET es la nueva plataforma de lenguajes con GC..&lt;/p&gt; &lt;p&gt;En el&amp;nbsp;2005, &lt;a href="http://blog.salias.com.ar/" target="_blank"&gt;Martin Salias&lt;/a&gt;&amp;nbsp;y yo dimos un TechNight,&amp;nbsp;aquí en Buenos Aires, Argentina, para la oficina local de Microsoft. Trató sobre lenguajes implementados en .NET.&amp;nbsp;Fue&amp;nbsp;la primera vez que presenté F#, así como&amp;nbsp;P# y otros.&amp;nbsp;Despues de esa charla, la misma noche viajé a Mar del Plata, para dar otra charla sobre ASP.NET. Mar del&amp;nbsp;Plata es una bella ciudad, en frente del océano Atlántico,&amp;nbsp;a la que trato de volver cada año. Entonces, era mi primer visita luego de treinta años. En el viaje,&amp;nbsp;&amp;quot;nació&amp;quot; AjLisp.&lt;/p&gt; &lt;p&gt;Esa versión era un intérprete Lisp escrito en Visual Basic .NET. El pasado domingo, lo porté a C# (usando alguna opción de menú de SharpDevelop, ¿alguna otra herramienta que conozcan?). El código original fue usado hace unas semanas en mi post sobre&amp;nbsp;VPL:&lt;/p&gt; &lt;p&gt;&lt;a title="Lisp-like interpreter using DSS and VPL" href="http://ajlopez.wordpress.com/2008/06/09/lisp-like-interpreter-using-dss-and-vpl/"&gt;Lisp-like interpreter using DSS and VPL&lt;/a&gt;&lt;br /&gt;&lt;a title="Int&amp;eacute;rprete tipo Lisp usando DSS y VPL" href="http://msmvps.com/blogs/lopez/archive/2008/06/11/int-233-rprete-tipo-lisp-usando-dss-y-vpl.aspx"&gt;Intérprete tipo Lisp usando DSS y VPL&lt;/a&gt;&lt;/p&gt; &lt;p&gt;La nueva versión C# version está publicada en Google Code en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://code.google.com/p/ajlisp/" href="http://code.google.com/p/ajlisp/"&gt;http://code.google.com/p/ajlisp/&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlispgoogle.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Me gusta&amp;nbsp;Google Code: tiene soporte de SVN, asi que uso mi cliente local TortoiseSVN para enviar los cambios en el proyecto.&lt;/p&gt; &lt;h3&gt;La solución&lt;/h3&gt; &lt;p&gt;Tiene tres proyectos:&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlispsln.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;AjLisp&lt;/strong&gt;: el proyecto núcleo, una librería, que puede ser invocada desde otra aplicación.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AjLisp.Tests&lt;/strong&gt;: Todos los tests, usando NUnit 2.2.8. Si no tienen NUnit, pueden remover el proyecto de la solución.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AjLisp.Console&lt;/strong&gt;: un simple programa de consola.&lt;/p&gt; &lt;h3&gt;Los tipos&lt;/h3&gt; &lt;p&gt;Una interfaz base es &lt;strong&gt;IAtom&lt;/strong&gt;:&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:1fdf33bc-cbd8-428f-a086-0a973fd0b495" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt;&lt;span style="color:#000000;"&gt; IAtom
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsAtom();
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Otra es &lt;strong&gt;IList&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:af4e475d-5592-440e-8e6e-cb47ae443def" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;interface&lt;/span&gt;&lt;span style="color:#000000;"&gt; IList
    {
        SymbolicExpression First
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;set&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        }

        SymbolicExpression Rest
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;set&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
        }

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsList();
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Todos los tipos derivan de una SymbolicExpression:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:8b612956-e1db-4f06-8e0b-1641a003b53f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; AjLisp.Types
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression : IList, IAtom
    {
 ....
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Implementé los tipos comunes a usar en un&amp;nbsp;Lisp, como List, Atom, Identifier, Function (para invocar a primitivas y funciones generadas por lambdas), True, Nil...:&lt;/p&gt;
&lt;p&gt;Existe una clase Environment para mantener valores asociados a nombres. Cada Environment tiene un Environment padre, para mantener una lista de ambientes con valores.&lt;/p&gt;
&lt;p&gt;La clase Interpreter es la principal a manejar: tiene un Environment y define algunos nombres para las primitivas iniciales:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3f5d7f67-0306-4998-a6cc-d503bea9ba10" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Interpreter
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Environment environment &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Environment();

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Interpreter()
        {
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;nil&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, Nil.Value);
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;t&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, True.Value);
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;cons&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrCons());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;first&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrFirst());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;car&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrFirst());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;rest&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrRest());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;cdr&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrRest());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;list&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrList());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;quote&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrQuote());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;append&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrAppend());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;cond&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrCond());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;atom&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrAtom());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;eval&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrEval());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;null&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrNull());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;lambda&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrLambda());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;progn&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrProgN());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;flambda&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrFLambda());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;nlambda&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrNLambda());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mlambda&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrMLambda());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;numberp&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrNumberP());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;functionp&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrFunctionP());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;idp&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrIdP());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;define&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrDefine());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;definef&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrDefineF());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;definen&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrDefineN());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;definem&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrDefineM());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;eq&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrEq());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrIf());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;let&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrLet());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;lets&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrLetS());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;set&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrSet());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;consp&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrConsP());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;less&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrLess());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;greater&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrGreater());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;plus&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrPlus());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;difference&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrDifference());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;times&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrTimes());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;quotient&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrQuotient());
            Define(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;remainder&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrRemainder());
        }

....&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Uds. pueden escribir sus propias primitivas y agregarlas a este constructor.&lt;/p&gt;
&lt;h3&gt;Las primitivas&lt;/h3&gt;
&lt;p&gt;El intérprete tiene las primitivas usuales:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlispprim.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Hay primitivas, que antes de su invocación, evalúan los argumentos recibidos. Son las que derivan de &lt;strong&gt;Subr&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:837dc062-a1ab-414c-8512-5dcd05e044df" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:551px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Subr : Function
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression Execute(SymbolicExpression args, Environment env);

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;override&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression Apply(SymbolicExpression form, Environment env)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; Execute(form.Rest.Evaluate(env), env);
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;form.First es la función, y&amp;nbsp;form.Rest es la lista de argumentos. Para evaluar el form, Function usa un objeto Environment. &lt;/p&gt;
&lt;p&gt;Otras primitivas no evalúan sus argumentos, derivan de &lt;strong&gt;FSubr&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e90ae27a-5861-4b80-8123-f7afef71c8f1" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:526px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubr : Function
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression Execute(SymbolicExpression args, Environment env);

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;override&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression Apply(SymbolicExpression form, Environment env)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; Execute(form.Rest, env);
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Una de las primitivas más interesantes, es la implementación de lambda, llamada FSubrLambda:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:71b9c875-831e-4eb0-aea8-5035f7fe4cf9" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:599px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; FSubrLambda : FSubr
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;override&lt;/span&gt;&lt;span style="color:#000000;"&gt; SymbolicExpression Execute(SymbolicExpression args, Environment env)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SubrClosure(args.First, env, args.Rest);
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Crea un Closure, una manera de recordar el Environment actual para usarlo en una futura invocación de la expresión lambda. Implementé también NLambda, FLambda, MLambda: N es por NonSpread (maneja su lista de argumentos como si fuera un solo argumento), F es cuando no son evaluados los argumentos antes de la invocación, y M es por Macro (tengo que revisar hasta donde implementé esta &amp;quot;feature&amp;quot;).&lt;/p&gt;
&lt;h3&gt;Los tests&lt;/h3&gt;
&lt;p&gt;Toda la funcionaliad está cubierta por tests. Configuré el proyecto AjLisp.Test para ejecuter NUnit GUI:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlisptests.png" alt="" /&gt; &lt;/p&gt;
&lt;h3&gt;La consola&lt;/h3&gt;
&lt;p&gt;AjLisp.Console es un simple programa de consola. Pueden ingresar una expresión y la evalúa:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlispconsole.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Es tan simple, que hay que usar Control-C para salir... ;-).&lt;/p&gt;
&lt;h3&gt;Próximos pasos&lt;/h3&gt;
&lt;p&gt;Hay tanto para hacer. Quiero mejorar algunos puntos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reescribir interfaces y clases de base 
&lt;li&gt;Manejar e invocar objetos .NET nativos 
&lt;li&gt;Tratar a Reales y Enteros por separado (hoy a ambos, al operar, los trata como valores double) 
&lt;li&gt;Revisar Macro expansion
&lt;li&gt;Mejor consola 
&lt;li&gt;Librería de ejemplos 
&lt;li&gt;Un manual mínimo&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La idea es llegar a extender este mini lenguaje para ser usado como la base programación de agentes distribuidos. Sería bueno portarlo a Java. Entonces, la conducta de los agentes y su estado puede ser escrito en este lenguaje, y viajar a distintos nodos de la grilla, de forma independiente a la plataforma.&lt;/p&gt;
&lt;p&gt;Bueno, son sueños. Ahora, el estado actual: está funcionando, y me divertí escribiéndolo. Disfruten!&lt;/p&gt;
&lt;p&gt;(Este artículo es una traducción a Spanish, desde el Anglish (Angel&amp;#39;s English) original:&lt;br /&gt;&lt;a title="AjLisp- a Lisp interpreter in .NET" href="http://ajlopez.wordpress.com/2008/07/30/ajlisp-a-lisp-interpreter-in-net/"&gt;AjLisp- a Lisp interpreter in .NET&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/en"&gt;http://www.ajlopez.com/en&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1642818" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjLisp/default.aspx">AjLisp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Lenguajes+de+Programaci_26002300_243_3B00_n/default.aspx">Lenguajes de Programaci&amp;#243;n</category></item><item><title>Que lindo el guaguau: BigDog de Boston Dynamics</title><link>http://msmvps.com/blogs/lopez/archive/2008/04/24/que-lindo-el-guaguau-bigdog-de-boston-dynamics.aspx</link><pubDate>Thu, 24 Apr 2008 07:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1602768</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1602768</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/04/24/que-lindo-el-guaguau-bigdog-de-boston-dynamics.aspx#comments</comments><description>&lt;p&gt;El domingo pasado, el bueno de Arvindra Sehmi referenci&amp;oacute; en &lt;a target="_blank" href="http://blogs.msdn.com/asehmi/archive/2008/04/20/fun-with-microsoft-robotics-studio.aspx"&gt;un post suyo&lt;/a&gt; a un trabajo m&amp;iacute;o sobre una killer application que escrib&amp;iacute;: &lt;a target="_blank" href="http://ajlopez.wordpress.com/2008/04/20/distributed-scribble-with-microsoft-robotics-developer-studio-and-dss/"&gt;un scribble distribuido&lt;/a&gt;&amp;nbsp;:-)&amp;nbsp;Pero luego &lt;a target="_blank" href="http://blogs.msdn.com/asehmi/archive/2008/04/20/the-incredible-quadraped.aspx"&gt;tambi&amp;eacute;n escribi&amp;oacute;&lt;/a&gt; sobre este robot:&lt;/p&gt;
&lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/W1czBcnX1Ww"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/W1czBcnX1Ww" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Es de Boston Dynamics, according to Wikipedia:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.bostondynamics.com/"&gt;http://www.bostondynamics.com/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Boston_Dynamics"&gt;http://en.wikipedia.org/wiki/Boston_Dynamics&lt;/a&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Boston Dynamics&lt;/b&gt; is a small &lt;a href="http://en.wikipedia.org/wiki/Engineering"&gt;engineering&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Robotics"&gt;robotics&lt;/a&gt; design company best known for the development of &lt;a href="http://en.wikipedia.org/wiki/BigDog"&gt;BigDog&lt;/a&gt;, a quadruped &lt;a href="http://en.wikipedia.org/wiki/Robot"&gt;robot&lt;/a&gt; designed for the U.S. military with funding from &lt;a href="http://en.wikipedia.org/wiki/DARPA"&gt;DARPA&lt;/a&gt; &lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Boston_Dynamics#cite_note-0"&gt;[1]&lt;/a&gt;&lt;/sup&gt;, and &lt;a href="http://en.wikipedia.org/w/index.php?title=DI-Guy&amp;amp;action=edit&amp;amp;redlink=1"&gt;DI-Guy&lt;/a&gt;, COTS software for realistic human simulation. Early in the company&amp;#39;s history, it worked with the &lt;a href="http://en.wikipedia.org/w/index.php?title=American_Systems_Corporation&amp;amp;action=edit&amp;amp;redlink=1"&gt;American Systems Corporation&lt;/a&gt; under a contract from the &lt;a href="http://en.wikipedia.org/wiki/Naval_Air_Warfare_Center_Training_Systems_Division"&gt;Naval Air Warfare Center Training Systems Division&lt;/a&gt; (NAWCTSD) to replace naval training videos for aircraft launch operations with interactive &lt;a href="http://en.wikipedia.org/wiki/3D_computer_graphics"&gt;3D&lt;/a&gt; computer simulations featuring DI-Guy characters. &lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Boston_Dynamics#cite_note-1"&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Marc_Raibert"&gt;Marc Raibert&lt;/a&gt; is the company&amp;#39;s president and project manager. He spun the company off from the &lt;a href="http://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology"&gt;Massachusetts Institute of Technology&lt;/a&gt; in 1992.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Boston_Dynamics#cite_note-2"&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Que bien resuelto est&amp;aacute; el tema de caminar y mantener el equilibrio y balance en distintas situaciones, y hasta hacer alg&amp;uacute;n galope. Es notable que se haya logrado un algoritmo que implemente esa conducta. Seg&amp;uacute;n el bueno de &lt;a target="_blank" href="http://magodotnet.blogspot.com/"&gt;Leandro Boffi&lt;/a&gt; (que adem&amp;aacute;s de mago se dedica a la rob&amp;oacute;tica), eso se llama equilibrio din&amp;aacute;mico. &lt;/p&gt;
&lt;p&gt;Bueno, dejo algunos enlaces en &lt;/p&gt;
&lt;p&gt;&lt;a href="http://del.icio.us/ajlopez/robotics"&gt;http://del.icio.us/ajlopez/robotics&lt;/a&gt;&amp;nbsp;(&amp;uacute;ltimamente, muy orientado a &lt;a target="_blank" href="http://www.microsoft.com/robotics"&gt;Microsoft Robotics Developer Studio&lt;/a&gt;) &lt;/p&gt;
&lt;p&gt;Nos leemos! &lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1602768" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Rob_26002300_243_3B00_tica/default.aspx">Rob&amp;#243;tica</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Video/default.aspx">Video</category></item><item><title>Temas Interesantes de Desarrollo de Software, Parte 1: Inteligencia Artificial</title><link>http://msmvps.com/blogs/lopez/archive/2008/04/05/temas-interesantes-de-desarrollo-de-software-parte-1-inteligencia-artificial.aspx</link><pubDate>Sat, 05 Apr 2008 20:54:07 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1573888</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1573888</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/04/05/temas-interesantes-de-desarrollo-de-software-parte-1-inteligencia-artificial.aspx#comments</comments><description>&lt;p&gt;Hace unos meses, me preguntaban por email por algunos temas interesantes de desarrollo de software. La pregunta original estaba más orientada a tecnologías .NET, pero creo que puedo contestar de forma útil, de una manera más general. Igualmente, aparecerán temas de .NET en este post, y otro que seguirá.&lt;/p&gt; &lt;p&gt;Al plantearme escribir sobre el tema, me propuse cubrir varios temas que me interesan, pero vi entonces que si cubría todos en un solo artículo, sería muy largo. Así que va primero esta parte sobre Inteligencia Artificial, y más adelante esta semana, escribiré sobre otros temas que me parecen interesantes, como lenguajes en .NET, Software as a Service, Grid Computing, Generación de Código y Domain Specific Languages.&lt;/p&gt; &lt;p&gt;Trataré hoy algunos temas que me interesan y me llamaron la atención, dentro de lo que se ha llamado Inteligencia Artificial, un término muy amplio, y que cubre hoy varias disciplinas, con distintos objetivos.&lt;/p&gt; &lt;h3&gt;Sobre la Inteligencia Artificial&lt;/h3&gt; &lt;p&gt;¿Por qué proponer esta área como tema de desarrollo? Porque a la gran parte de los desarrolladores de software, nos fascina. ¿Qué mejor objetivo que conseguir comportamiento inteligente de un sistema de software y hardware? ¿Qué otro tema mueve más que éste en el ámbito de la creación de software? Ha sido desarrollado por décadas, y aún hay temas abiertos. Mas bien, el optimismo inicial que hizo que se denominara a esta rama &amp;quot;Inteligencia Artificial&amp;quot;, se ha ido desvaneciendo, pero también ha habido éxitos, y nuevos caminos que no se habían tomado en principio (recordemos el abandono de los Perceptrones, debido en gran parte a la crítica de Minsky y Papert).&lt;/p&gt; &lt;p&gt;Quiero que quede claro que la inteligencia artificial hoy no es un área homogénea. Ha quedado bajo ese nombre histórico multitud de ramas. Y los métodos para implementar los objetivos planteados, van desde la fuerza bruta, hasta algoritmos novedosos (no naturales), hasta la emulación de lo que sabemos del funcionamiento de organismos naturales (humanos y no humanos).&lt;/p&gt; &lt;h3&gt;Algoritmos genéticos&lt;/h3&gt; &lt;p&gt;Creo que es un área ya bastante visitada, pero que tiene puntos de contacto con otros temas de este post, como vida artificial y aprendizaje automático. Para investigar:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aaai.org/aitopics/pmwiki/pmwiki.php/AITopics/GeneticAlgorithms" target="_blank"&gt;Genetic Algorithms and Genetic Programming&lt;/a&gt;&amp;nbsp;(multitud de enlaces)&lt;br /&gt;&lt;a href="http://www.genetic-programming.com/gpanimatedtutorial.html" target="_blank"&gt;What is Genetic Algorithms?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://citeseer.ist.psu.edu/212034.html" target="_blank"&gt;Genetic Programming&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/tcw2/report.html" target="_blank"&gt;Genetic Algorithms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc163934.aspx" target="_blank"&gt;Survival of the Fittest: Natural Selection with Windows Forms&lt;/a&gt;&amp;nbsp;(en .NET)&lt;br /&gt;&lt;a href="http://java.sys-con.com/read/36224.htm" target="_blank"&gt;An introduction to Genetic Algorithms In Java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aiai.ed.ac.uk/technology/geneticalgorithms.html" target="_blank"&gt;AIAI Technology Genetic Algorithms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/tspapp.aspx" target="_blank"&gt;Genetic Algorithms and the Traveling Salesman Problem&lt;/a&gt;&amp;nbsp;(en C++ para Windows)&lt;/p&gt; &lt;h3&gt;Aprendizaje automático&lt;/h3&gt; &lt;p&gt;Es un tema fascinante. La implementación de algoritmos que hagan que un sistema de software avance en su capacidad de resolver un problema, es un área alentadora. Muchos organismos aprenden durante su vida lo que no viene innato en su funcionamiento. ¿No podremos conseguir ese tipo de aprendizaje, o algún que lo emule? Esto resolvería el problema de programar todo el comportamiento de un agente inteligente &amp;quot;a priori&amp;quot;, como cableado, y permitiría, bien implementado, adaptarse a un ambiente cambiante. Para estudiar&lt;/p&gt; &lt;p&gt;&lt;a href="http://mlearn.ics.uci.edu/Machine-Learning.html" target="_blank"&gt;UCI Machine Learning Group&lt;/a&gt;&lt;br /&gt;&lt;a href="http://satirist.org/learn-game/" target="_blank"&gt;Machine Learning in Games&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#learning" target="_blank"&gt;Machine Learning (AI on the Web)&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Planeación&lt;/h3&gt; &lt;p&gt;Uno de los primeros temas que aprendí hace décadas. Y sigue de alguna forma abierto a innovaciones. Es evidente que una de nuestras operaciones mentales es la formación de planes, aún planes parciales, incompletos, con información faltante. Pueden investigar leyendo:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/2/What-is-Partial-Order-Planning/1090" target="_blank"&gt;What is Partial-Order Planning?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cs.dartmouth.edu/~brd/Teaching/AI/Lectures/Planning/ucpop-background.html" target="_blank"&gt;Review of An introduction to Least Commitment Planning&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/22/Selected-History-of-Partial-Order-Planning-Part-1/1127" target="_blank"&gt;Selected History of Partial Order Planning, Part 1&lt;/a&gt;&amp;nbsp;(donde aparece Sacerdoti, mi primer referente en el tema)&lt;br /&gt;&lt;a href="http://www.codeodor.com/index.cfm/2007/4/24/Selected-History-of-Partial-Order-Planning-Part-2/1133" target="_blank"&gt;Selected History of Partial Order Planning, Part 2&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(vi que en la &lt;a href="http://www.unicen.edu.ar/" target="_blank"&gt;Universidad Nacional del Centro de la Provincia de Buenos Aires&lt;/a&gt;, acá en&amp;nbsp;Argentina, estuvieron trabajando en estos temas).&lt;/p&gt; &lt;h3&gt;Vida Artificial&lt;/h3&gt; &lt;p&gt;&amp;nbsp;Se ha argumentado que, antes de conseguir comportamiento inteligente, hay que conseguir organismos, artificiales. Es una rama algo alejada de la IA principal, y hasta se la considera una rama aparte. A mí me gustaría incluirla en este post.&lt;/p&gt; &lt;p&gt;Siempre me pareció impresionante el proyecto Tierra:&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="margin:0px 10px 10px 0px;" height="205" src="http://www.his.atr.jp/~ray/pic/hyper2.jpg" width="292" alt="" /&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.his.atr.jp/~ray/tierra/index.html" href="http://www.his.atr.jp/~ray/tierra/index.html"&gt;http://www.his.atr.jp/~ray/tierra/index.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Vean las &amp;quot;fotos&amp;quot; de:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.his.atr.jp/~ray/pubs/images/index.html" href="http://www.his.atr.jp/~ray/pubs/images/index.html"&gt;http://www.his.atr.jp/~ray/pubs/images/index.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Otro proyecto que también investiga el tema evolución es:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.darwinathome.org/" target="_blank"&gt;Darwin at home&lt;/a&gt;&amp;nbsp;el resultado de aplicar Fuidiom&lt;br /&gt;&lt;a href="http://fluidiom.sourceforge.net/" target="_blank"&gt;Fluidiom&lt;/a&gt;&amp;nbsp;Implementado en Java, sería interesante implementar algo similar en .NET y DirectX/OpenGL&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.darwinathome.org/images/google-movie.jpg" alt="" /&gt; &lt;/p&gt; &lt;h3&gt;Juegos&lt;/h3&gt; &lt;p&gt;Este es un tema para mí interesantísimo. Permite explorar algoritmos en un problema controlado, y aparte divertido. Para tener un panorama de los problemas actuales, hay que visitar el grupo de la Universidad de Alberta:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.cs.ualberta.ca/~games/" href="http://www.cs.ualberta.ca/~games/"&gt;http://www.cs.ualberta.ca/~games/&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgoalberta.png" alt="" /&gt; &lt;/p&gt; &lt;p align="left"&gt;Pueden visitar el grupo de Research de Microsoft:&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://research.microsoft.com/mlp/apg/" target="_blank"&gt;Applied Games&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Ahí encontraran uno de mis temas favoritos:&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://research.microsoft.com/mlp/apg/go.aspx" target="_blank"&gt;Computer Go in Microsoft&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;Hay otro grupo de investigación sobre el tema en Beijing:&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://spectrum.ieee.org/oct07/5552" target="_blank"&gt;Craking Go&lt;/a&gt;&amp;nbsp;a cargo de &lt;a href="http://en.wikipedia.org/wiki/Feng-hsiung_Hsu" target="_blank"&gt;Feng-hsiung Hsu&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Lenguajes&lt;/h3&gt; &lt;p&gt;Hay varias propuestas de lenguajes orientados a la Inteligencia Artificial. Pero que en general también se pueden utilizar en problemas generales. Algo interesante de un lenguaje para IA es que sus programas puedan &amp;quot;autoexaminarse&amp;quot; y modificarse a sí mismos. Revisaría algunas implementaciones en .NET como:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dcs.ed.ac.uk/home/stg/Psharp/" target="_blank"&gt;P#: A concurrent Prolog for .NET&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Habría que investigar el uso de otros lenguajes, como &lt;a href="http://del.icio.us/ajlopez/lisp" target="_blank"&gt;Lisp&lt;/a&gt; y funcionales, como &lt;a href="http://del.icio.us/ajlopez/f%23" target="_blank"&gt;F#&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ver&lt;/p&gt; &lt;p&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#lisp" target="_blank"&gt;AI Programming (Lisp)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html#prolog" target="_blank"&gt;AI Programming (Prolog)&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Visión por computadora&lt;/h3&gt; &lt;p&gt;Una de las operaciones que como organismos ejecutamos fácilmente, ha sido un hueso rudo de roer. Una de las implementaciones más difundidas, de código abierto, accesible desde varios lenguajes (como C++ .NET) es:&lt;/p&gt; &lt;p&gt;&lt;a href="http://sourceforge.net/projects/opencvlibrary/" target="_blank"&gt;Open Computer Vision Library&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Más enlaces&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aaai.org/aitopics/pmwiki/pmwiki.php/AITopics/Vision" target="_blank"&gt;Vision in AITopics&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Una aplicación, no de visión, pero sí de reconocimiento de imágines&lt;/p&gt; &lt;p&gt;&lt;a href="http://labs.live.com/photosynth/" target="_blank"&gt;Photosynth&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Robótica&lt;/h3&gt; &lt;p&gt;Para entender el alcance que puede llegar a tener la aparición de herramientas de desarrollo para robótica, hay que leer el artículo clásico de Bill Gates:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sciam.com/article.cfm?chanID=sa006&amp;amp;articleID=9312A198-E7F2-99DF-31DA639D6C4BA567" target="_blank"&gt;A Robot in Every Home&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Pueden estudiar todo lo que ofrece el&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/robotics" target="_blank"&gt;Microsoft Robotics Studio&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://msdn2.microsoft.com/en-us/library/Bb483076.image001(en-us,MSDN.10).jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Pueden programar en ambientes simulados, o con robots reales.&lt;/p&gt; &lt;p&gt;Otros enlaces&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.grasp.upenn.edu/index.html" target="_blank"&gt;GRASP Laboratory of Robotics Research and Education @ Penn&lt;/a&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/invisible/" target="_blank"&gt;Microsoft Invisible Computing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.conscious-robots.com/" target="_blank"&gt;Concious Robots&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.conscious-robots.com/en/robotics-studio/index.php" target="_blank"&gt;Robotics Studio at Concious Robots&lt;/a&gt; (con algún foro en español)&lt;br /&gt;&lt;a href="http://www.devx.com/dotnet/Article/32729" target="_blank"&gt;An introduction to Programming Robots with Microsoft Robotics Studio&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.wimobot.com/" target="_blank"&gt;Wimo: The Windows Mobile Robot&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Recursos adicionales&lt;/h3&gt; &lt;p&gt;Si tienen que ir a una sola página, con todo sobre Inteligencia Artificial, ir la página que mantiene Peter Norvig&lt;/p&gt; &lt;p&gt;&lt;a href="http://aima.cs.berkeley.edu/ai.html" target="_blank"&gt;AI on the Web&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Siempre se discute qué es la Inteligencia Artificial:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www-formal.stanford.edu/jmc/whatisai/whatisai.html" target="_blank"&gt;What is Artificial Intelligence? (John McCarthy)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=486106" target="_blank"&gt;What is really AI?&lt;/a&gt; (discusión en GameDev)&lt;br /&gt;&lt;a href="http://www.alanturing.net/turing_archive/pages/Reference%20Articles/What%20is%20AI.html" target="_blank"&gt;What is Artificial Intelligence?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;He dejado mis enlaces favoritos sobre estos y otros temas relacionados en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://del.icio.us/ajlopez/artificialintelligence"&gt;http://del.icio.us/ajlopez/artificialintelligence&lt;/a&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/ajlopez/artificiallife"&gt;http://del.icio.us/ajlopez/artificiallife&lt;/a&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/ajlopez/geneticalgorithm"&gt;http://del.icio.us/ajlopez/geneticalgorithm&lt;/a&gt;&lt;br /&gt;&lt;a title="http://del.icio.us/ajlopez/geneticalgorithms" href="http://del.icio.us/ajlopez/geneticalgorithms"&gt;http://del.icio.us/ajlopez/geneticalgorithms&lt;/a&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/ajlopez/robotics"&gt;http://del.icio.us/ajlopez/robotics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/ajlopez/computergo"&gt;http://del.icio.us/ajlopez/computergo&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ajlopez.com/ai"&gt;http://www.ajlopez.com/ai&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1573888" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>AjGo: hacia un programa que juegue al go</title><link>http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx</link><pubDate>Mon, 31 Mar 2008 00:40:43 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1562803</guid><dc:creator>lopez</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1562803</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx#comments</comments><description>&lt;p&gt;El hacer un programa que pueda jugar al go ha sido un problema duro de roer en el ámbito de la inteligencia artificial. Para ir explorando algunas ideas, he escrito un programa que me sirve de framework para esa investigación. Pueden descargarlo desde&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/ajgo"&gt;http://www.codeplex.com/ajgo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(esté el código fuente sin tener aún un release).&lt;/p&gt; &lt;p&gt;Lo comencé a programar hace unos años, y lo presenté el año pasado, en una charla que dí en el Segundo Congreso Argentino de Go, organizado por la &lt;a href="http://www.go.org.ar" target="_blank"&gt;Asociación Argentina de Go&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Este año me invitaron de nuevo a dar la charla en el &lt;a href="http://ajlopez.zoomblog.com/archivo/2008/03/08/tercer-Congreso-Argentino-de-Go.html" target="_blank"&gt;Tercer Congreso&lt;/a&gt; (parece que no escarmentaron con la primera... ;-), y esta vez presenté más en profundidad este programa (el año pasado había estado dedicado a temas más generales, como Inteligencia Artificial, juegos y el estado del arte en Computer Go).&lt;/p&gt; &lt;p&gt;He dejado un post menos técnico, más dedicado al tema del juego que a la programación, en mi blog no técnico:&lt;/p&gt; &lt;p&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2008/03/31/computer-Go-y-el-programa-Ajgo.html" target="_blank"&gt;Computer Go y el programa AjGo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hay otros programas mejores de Computer Go, pero siempre me gusta explorar por mí mismo algunos caminos, para comprender mejor el programa, y además, es más divertido... ;-). Pueden ver un programa más acabado, en la implementación de GNUGo&lt;/p&gt; &lt;p&gt;&lt;a title="GNU Go - GNU Project - Free Software Foundation (FSF)" href="http://www.gnu.org/software/gnugo/gnugo.html"&gt;GNU Go - GNU Project - Free Software Foundation (FSF)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="GNU Go - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/GNU_Go"&gt;GNU Go - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Sensei&amp;#39;s Library- GNU Go" href="http://senseis.xmp.net/?GNUGo"&gt;Sensei&amp;#39;s Library- GNU Go&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;El AjGo&lt;/h3&gt; &lt;p&gt;Está escrito en C# (antes lo había escrito en VBNet, pero preferí reescribirlo en C# para aprovechar algunos temas de refactoring, y con la esperanza de portarlo a otras plataformas más fácilmente, si a alguien le interesa).&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgoformdesign.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;La solución consta de tres proyectos:&lt;/p&gt; &lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/ajgosolution.png" align="left" alt="" /&gt; &lt;/p&gt; &lt;p&gt;El proyecto &lt;strong&gt;AjGo&lt;/strong&gt; es una librería de clases donde está codificado el &amp;quot;core&amp;quot; del sistema. &lt;/p&gt; &lt;p&gt;El proyecto &lt;strong&gt;AjGo.Test&lt;/strong&gt; es una serie de test automatizados usando NUnit, que me ha resultado de gran ayuda en la exploración de alternativas de programación. Cada vez que necesitaba escribir alguna funcionalidad nueva, siguiendo los preceptos de Test Driven Development, escribía primero el test, y luego el código que lo cumplía. Tengo todavía dos test en &amp;quot;rojo&amp;quot;, pero que no afectan a la funcionalidad actual del programa.&lt;/p&gt; &lt;p&gt;El proyecto &lt;strong&gt;AjGo.WinForm&lt;/strong&gt; es el que permite probar interactivamente el programa. La idea es colgar desde ese proyecto un formulario windows que me permita probar en el momento, la efectividad de algunos algoritmos y estrategias.&lt;/p&gt; &lt;p&gt;Si lanzan el proyecto de test, pueden ejecutarlo directamente. He colocado que, aunque sea un proyecto de librería de clases, igualmente ejecute el NUnit, necesitarán el NUnit instalado en alguna parte de su entorno de ejecución. Bajarlo de&lt;/p&gt; &lt;p&gt;&lt;a title="NUnit - Home" href="http://www.nunit.org/"&gt;NUnit - Home&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Para conseguir que ese proyecto pueda lanzarse en modo de ejecución, deben modificar las propiedades del proyecto de test:&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgonunit.png" alt="" /&gt; &lt;/p&gt; &lt;p align="left"&gt;Si lo ejecutan, lanza la interface GUI del NUnit:&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgonunitrun.png" alt="" /&gt; &lt;/p&gt; &lt;h3&gt;Detalles de implementación&lt;/h3&gt; &lt;p&gt;Hay varias clases interesantes de comentar incluidas en el proyecto AjGo,&amp;nbsp;quisiera hoy ocuparme brevemente de algunas. &lt;/p&gt; &lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/ajgoproject.png" align="left" alt="" /&gt; Para los que conocen el juego, verán que están implementados los conceptos de:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Color&lt;/li&gt; &lt;li&gt;Position&lt;/li&gt; &lt;li&gt;Game&lt;/li&gt; &lt;li&gt;Group&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Desde el año pasado estoy estudiando el tema de usar, aparte de color blanco y negro, otros colores para evaluar una posición.&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:a6b1868b-edb7-4e58-8060-dc5ee98c3f74" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;enum&lt;/span&gt;&lt;span style="color:#000000;"&gt; Color
    {
        Empty &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Black &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        White &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;2&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Border &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;3&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Blue &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;4&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Red &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;5&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Green &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;6&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
        Yellow &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;7&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Verán que tengo entonces una enumeración que abarca otros colores, a explicar más abajo. Está incluido también el color &amp;quot;vacío&amp;quot; y el color &amp;quot;borde&amp;quot;.&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;Point&lt;/strong&gt; representa un lugar en el tablero:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:6270b568-e6cb-4192-812f-4b5d405d3cf5" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Point
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; X;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; Y;
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;Move&lt;/strong&gt; es una combinación de &lt;strong&gt;Color&lt;/strong&gt; y &lt;strong&gt;Point&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:2b83c9c5-24e2-4fcb-aee6-1a1931c3420d" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Move
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Color Color;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Point Point;

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Move(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; x, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; y, Color c)
        {
            Color &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; c;
            Point &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Point(x, y);
        }
...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;Position&lt;/strong&gt; describe una posición de juego (la posición puede tener un ancho y alto a determinar en ejecución):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:23ed6df0-3e5d-4a6b-84a7-e4caa2752b32" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Position
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; width;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;short&lt;/span&gt;&lt;span style="color:#000000;"&gt; height;

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Color[,] cells;

        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;Game&lt;/strong&gt; es una de las más complejas, representa una posición, distintas evaluaciones, lista de movidas, y una cuenta hasta el momento de las piedras muertas por color:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:41ee558d-832a-43b4-b678-f679f4d3dae0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Game
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Position position;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Move&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; moves;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupPosition groupposition;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Position coloredposition;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupPosition coloredgroupposition;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; ColorCount colorcount;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; deadblacks;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; deadwhites;
        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;PointSet&lt;/strong&gt; implementa un conjunto de puntos. Como conjunto no permite la repetición de puntos. Para comparar por igualdad instancias de &lt;strong&gt;Point&lt;/strong&gt; se reimplementó el &lt;strong&gt;Equals&lt;/strong&gt; y &lt;strong&gt;GetHashCode&lt;/strong&gt; en esa clase. Hay métodos de clase para calcular intersección, unión y diferencia de conjuntos de puntos:&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3e9decb4-ca5a-47d0-9f52-5c28f6c44798" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Point&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; points &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Point&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;();

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet Union(PointSet ps1, PointSet ps2)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet(ps1, ps2);
        }

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet Intersect(PointSet ps1, PointSet ps2)
        {
            PointSet ps &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet();

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (Point pt &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps1.Points)
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ps2.Points.Contains(pt))
                    ps.Add(pt);

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps;
        }

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet Difference(PointSet ps1, PointSet ps2)
        {
            PointSet ps &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet();


            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (Point pt &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps1.Points)
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;ps2.Points.Contains(pt))
                    ps.Add(pt);

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps;
        }

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet()
        {
        }

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet(PointSet ps)
        {
            Add(ps);
        }
        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Una extensión de &lt;strong&gt;PointSet&lt;/strong&gt; es la clase&amp;nbsp;&lt;strong&gt;Group&lt;/strong&gt;, que además de un conjunto de puntos, tiene &lt;strong&gt;Color&lt;/strong&gt; asociado:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:9397cf91-b650-40d5-9f00-7f2ec32f16cd" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Group : PointSet
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet liberties &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; PointSet();
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Color color;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupPosition groupposition;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupSet neighbours;
        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Luego de &lt;strong&gt;Game&lt;/strong&gt;, la clase más importante para la actual implementación es &lt;strong&gt;GroupPosition&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:1038670e-3eab-4a40-973f-7a669334adff" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupPosition
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Position position;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Group&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; groups;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Group[,] groupmap;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;GroupSet&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; zones;

        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; GroupPosition(Position pos)
        {
            position &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; pos;
            groups &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; List&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Group&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;();
        }
        ...
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Con instancias de esta clase, se calculan los grupos de piedras (cadenas de piedras conectadas), sus fronteras, vecinos, y zonas (grupos de grupos, de colores asociados, más sobre colores y zonas más adelante).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;El Programa&lt;/h3&gt;
&lt;p&gt;Al ejecutar el tercer proyecto AjGo.WinForm aparece la ventana de prueba:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgoemptyboard.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Con las opciones de Stone de la izquierda, se pueden ir colocando piedras de los colores blanco y negro. Una de las opciones del programa es sugerir posibles movidas, en base a patrones de jugadas que tiene en archivos de texto del directorio Matches del proyecto:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgomatches.png" alt="" /&gt; &lt;/p&gt;
&lt;p align="left"&gt;La &lt;/p&gt;
&lt;p align="left"&gt;Con el botón de Colors se puede evaluar una posición &amp;quot;en colores&amp;quot;:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgocolors.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Como explico en mi post de mi post no técnico:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ajlopez.zoomblog.com/archivo/2008/03/31/computer-Go-y-el-programa-Ajgo.html" target="_blank"&gt;Computer Go y el programa AjGo&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Los puntos azules corresponden a puntos bajo la influencia negra, los amarillos están bajo el dominio blanco, los rojos están en disputa, y los verdes están en principio libres. 
&lt;p&gt;Una cadena de piedras conectadas, en AjGo se denomina grupo. Un conjunto de piedras negras &amp;quot;sumergidas&amp;quot; en un mar de piedras azules, es una zona negra. Lo mismo con piedras blancas y puntos amarillos. 
&lt;p&gt;He visto que para la evaluación de territorios, ojos, vida, y otros, conviene tomar en consideración la zona más que un grupo aislado (no lo sabía cuando le puse estos nombres, pero en GNUGo se llama cadena a lo que en AjGo llamo grupo, y se llama grupo a lo que en mi programa llamo zona). 
&lt;p&gt;En base a los colores, se pueden plantear distintos evaluaciones y objetivos. Una zona negra que no tengan ojos posibles o reales, está sin vida &amp;quot;eterna&amp;quot;. Una zona que no esté en contacto con una zona verde, está rodeada, y si no tiene perspectivas de formar ojos, está en peligro. 
&lt;p&gt;Extender una zona, es aumentar su tamaño. 
&lt;p&gt;Conectar una zona, es fusionarla con otra del mismo color. 
&lt;p&gt;Rodear a una zona, es desconectarla de zonas verdes (disminuir lo que llamo &amp;quot;vida verde&amp;quot;). 
&lt;p&gt;El programa igualmente contempla que una zona verde que en su frontera sólo tenga puntos azules, es considerada un &amp;quot;ojo verde&amp;quot; (controlado por piedras negras). Uno de las evaluaciones que estoy probando pondera que una zona verde es tal porcentaje &amp;quot;blanca&amp;quot; y tal otro porcentaje &amp;quot;negra&amp;quot; en base a la cantidad de puntos azules, amarillos y rojos de su frontera.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Hay más detalles relacionados con el juego en ese post.&lt;/p&gt;
&lt;p&gt;Tengo que&amp;nbsp;mejorar varios puntos. Uno importante, son los algoritmos que tengo implementados para buscar en un árbol de jugadas. Otro, son las clases que evalúan una posición en forma estática. Ambos están en directorios del proyecto AjGo. Estos son los &amp;quot;Agents&amp;quot; de búsqueda en árbol:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajagents.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Trabajo futuro&lt;/h3&gt;
&lt;p&gt;Hay mucho para hacer. Me gustaría terminar de pulir la exploración de árbol, la resolución de problemas de vida y muerte, tener un planeador con objetivos, evaluadores estáticos de posición, evaluadores tácticos con exploración de árbol, parámetros variables, algoritmos genéticos.... Bueno, son muchas cosas. Hay que ir paso a paso. Creo que lo primero va&amp;nbsp;a ser mejorar el tema de recorrido de árbol. Vendrán más posts con algunos detalles más finos sobre la implementación actual.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1562803" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Computer+Go/default.aspx">Computer Go</category></item><item><title>Computer Go en el Segundo Congreso Argentino de Go</title><link>http://msmvps.com/blogs/lopez/archive/2007/03/28/computer-go-en-el-segundo-congreso-argentino-de-go.aspx</link><pubDate>Wed, 28 Mar 2007 12:03:34 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:720515</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=720515</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/03/28/computer-go-en-el-segundo-congreso-argentino-de-go.aspx#comments</comments><description>&lt;p&gt;La &lt;a href="http://www.go.org.ar"&gt;Asociación Argentina de Go&lt;/a&gt; celebra este próximo fin de semana el Segundo Congreso de Go&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.go.org.ar/page.php?name=congreso2007" href="http://www.go.org.ar/page.php?name=congreso2007"&gt;http://www.go.org.ar/page.php?name=congreso2007&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hay actividades desde el viernes al lunes. El viernes, habrá una charla sobre Computer Go, recuerden que el Go es el &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/01/15/computer-go-el-gran-problema-de-ai.aspx"&gt;gran desafío de la Inteligencia Artificial&lt;/a&gt;, en juegos.&lt;/p&gt; &lt;p&gt;En esa charla, presentaré cuál es la historia del Computer Go, su estado actual, algoritmos intentados, probaremos algún programa, y discutiremos cuál podría ser el camino a tomar para un programa que venza finalmente a un simple humano.... :-)&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=720515" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Computer+Go/default.aspx">Computer Go</category></item><item><title>Los libros de Martín Salías</title><link>http://msmvps.com/blogs/lopez/archive/2007/03/03/los-libros-de-mart-n-sal-as.aspx</link><pubDate>Sat, 03 Mar 2007 09:28:23 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:636498</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=636498</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/03/03/los-libros-de-mart-n-sal-as.aspx#comments</comments><description>&lt;p&gt;El bueno de &lt;a href="http://www.salias.com.ar" target="_blank"&gt;Martín Salías&lt;/a&gt; siempre se ha caracterizado por su amabilidad, y su disposición a compartir todo lo que conoce, desde arquitectura de software hasta sus opiniones sobre Virilio. Al contrario de mí, que no me desprendo de mis libros (me temo que son mi debilidad), él los ofrece a sus compañeros de trabajo, y aún más, a los socios del &lt;a href="http://www.mug.org.ar" target="_blank"&gt;Microsoft User Groups de Argentina&lt;/a&gt;: un santo varón :-)&lt;/p&gt; &lt;p&gt;Independientemente de si Ud. cae en algunas de esas categorías, le recomiendo una visita a la lista de libros&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.salias.com.ar/bookshelf.asp" target="_blank"&gt;Technical Bookshelf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hay de todo: inteligencia artificial, historia de la computación, el venerable FoxPro, arquitectura de software, sistemas operativos, .NET y ASP.NET, objetos, XML, metodologías ágiles, y más....&lt;/p&gt; &lt;p&gt;Pasen, vean y tomen!&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel "Java" Lopez&lt;br&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=636498" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Libros/default.aspx">Libros</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category></item><item><title>Computer Go: El gran problema de AI</title><link>http://msmvps.com/blogs/lopez/archive/2007/01/15/computer-go-el-gran-problema-de-ai.aspx</link><pubDate>Mon, 15 Jan 2007 01:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:492818</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=492818</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/01/15/computer-go-el-gran-problema-de-ai.aspx#comments</comments><description>&lt;p&gt;Desde hace algunos años, estoy interesado en algunas ramas de lo que se llama Inteligencia Artificial. Convengamos que el término es algo ampuloso, y refleja el entusiasmo de fines de los años 50, cuando en una reunión de especialista se acuñó el término. La Artificial Intelligence o AI ha pasado por varias etapas y viscisitudes, ha habido de todo, desde triunfos&amp;nbsp;y fracasos, hasta ramas nuevas (agentes, redes neuronales, aprendizaje automático) que han ido apareciendo. Realmente es un tema fascinante, pero tal vez demasiado amplio.&lt;/p&gt;
&lt;p&gt;Pueden ver algunos enlaces desordenados que colecciono en&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.ajlopez.com/ia/" href="http://www.ajlopez.com/ia/"&gt;http://www.ajlopez.com/ia/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;He mantenido, de alguna manera, el interés en una rama: su aplicación a los juegos. Pueden visitar el excelente sitio del grupo GAMES de la Universidad de Alberta (Canadá):&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.cs.ualberta.ca/~games/" href="http://www.cs.ualberta.ca/~games/"&gt;http://www.cs.ualberta.ca/~games/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;para encontrar mayor información, estupenda. Si Uds. investigan un poco, encontrarán que a lo largo de todos estos años, hay un juego que ha resistido las distintas aproximaciones que se han intentado para dominarlo. Pueden encontrar más información sobre el juego en el sitio de la Asociación Argentina de Go:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.go.org.ar/"&gt;http://www.go.org.ar/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;en especial, el ya clásico artículo del bueno de Franklin Bassarsky:&lt;/p&gt;
&lt;p&gt;Por qué Aprender a jugar al Go&lt;br /&gt;&lt;a title="http://www.go.org.ar/actividades/porque.html" href="http://www.go.org.ar/actividades/porque.html"&gt;http://www.go.org.ar/actividades/porque.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mientras que Deep Blue el siglo pasado derrotó a Kasparov,&amp;nbsp;en ajedrez, el mejor programa de go del planeta apenas si puede enfrentar a un verdadero experto en el juego.&amp;nbsp;Para conocer más sobre la situación actual, visitar el interminable y subyugante&lt;/p&gt;
&lt;p&gt;&lt;a title="http://gobase.org/" href="http://gobase.org/"&gt;http://gobase.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En los últimos años, ha surgido el wiki&lt;/p&gt;
&lt;p&gt;&lt;a title="http://senseis.xmp.net/" href="http://senseis.xmp.net/"&gt;http://senseis.xmp.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;donde encontrarán múltiples temas tratados, por ejemplo&lt;/p&gt;
&lt;p&gt;&lt;a title="http://senseis.xmp.net/?ComputerGoProgramming" href="http://senseis.xmp.net/?ComputerGoProgramming"&gt;http://senseis.xmp.net/?ComputerGoProgramming&lt;/a&gt;&lt;br /&gt;&lt;a title="http://senseis.xmp.net/?ComputerGoAlgorithms" href="http://senseis.xmp.net/?ComputerGoAlgorithms"&gt;http://senseis.xmp.net/?ComputerGoAlgorithms&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un clásico es el algoritmo de Benson (solo como botón de muestra de cómo apareció hace años, y luego han ido apareciendo otras ideas para explicar y acercar el Go a la AI):&lt;/p&gt;
&lt;p&gt;&lt;a title="http://senseis.xmp.net/?BensonsAlgorithm" href="http://senseis.xmp.net/?BensonsAlgorithm"&gt;http://senseis.xmp.net/?BensonsAlgorithm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;También como botón de muestra de la cantidad de &amp;quot;papers&amp;quot; que mueve el tema, ver&lt;/p&gt;
&lt;p&gt;&lt;a title="http://erikvanderwerf.tengen.nl/publications.html" href="http://erikvanderwerf.tengen.nl/publications.html"&gt;http://erikvanderwerf.tengen.nl/publications.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LA lista de correo sobre el tema es:&lt;/p&gt;
&lt;p&gt;computer-go mailing list&lt;br /&gt;&lt;a href="mailto:computer-go@computer-go.org"&gt;computer-go@computer-go.org&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.computer-go.org/mailman/listinfo/computer-go/"&gt;http://www.computer-go.org/mailman/listinfo/computer-go/&lt;/a&gt; 
&lt;p&gt;Se imaginaran entonces, que no puede faltar.... el AjGo. Sí, estoy pasando a .NET algunas ideas. La principal es concentrarme primero en planes, que traten de cumplir con 4 objetivos básicos: 
&lt;p&gt;- Aumentar el territorio propio&lt;br /&gt;- Disminuir el territorio enemigo&lt;br /&gt;- Asegurar la vida de las piedras propias&lt;br /&gt;- Capturar piedras enemigas 
&lt;p&gt;Hace unos años investigué distintas formas de calcular la influencia y territorio, basado en conceptos que todos en computer go tratan alguna vez: &amp;quot;iluminación&amp;quot;, &amp;quot;campos de fuerza&amp;quot;.... En este nuevo intento, he visto que es más interesante simplemente separar en grupos, usando para visualizar el resultado distintos colores. Un ejemplo (una posición algo ridícula para un juego real, pero interesante para mí) es: 
&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/board1.jpg" alt="" /&gt; 
&lt;p&gt;Podría explicar un poco más en detalle el coloreo, pero basta decir que los azules indican cercanía a piedra negra, los rojos cercanía a piedra blanca, amarillo cercanía a ambos colores, verde libre de cercanía. Los cuatro objetivos básicos los puedo expresar en deltas en esos coloreos. Me parece que el concepto de grupo coloreado, y su aumento o disminución,&amp;nbsp;es un camino interesante&amp;nbsp;a explorar. Por ejemplo, rodear a un grupo enemigo es, en principio, asimilable a &amp;quot;disminuir&amp;nbsp;sus verdes&amp;quot;, los verdes que estan en contacto con ese grupo. 
&lt;p&gt;Supongo que alguien ya lo habrá seguido, pero de alguna forma, con esto estoy aprendiendo sobre la dificultad del problema.&amp;nbsp;Tengo que analizar la táctica a seguir para cumplir con cada plan sugerido. Igualmente, algo de algoritmo de sisho generalizado está siendo incorporado. Falta la hercúlea tarea de resolver: 
&lt;p&gt;- Tácticas de corte&lt;br /&gt;- Tácticas de conexión&lt;br /&gt;- Tácticas de vida y muerte 
&lt;p&gt;Espero poder postear algo interesante cuando tenga algo más armado, código incluído. 
&lt;p&gt;Nos leemos! 
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=492818" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/default.aspx">Inteligencia Artificial</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Computer+Go/default.aspx">Computer Go</category></item></channel></rss>